summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-09-07 11:39:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-09-07 11:39:43 +0000
commit341eb1a6bdf0dd5b015e5140d3b068c6fd3f4d87 (patch)
tree61fb7eca2238fb5d41d3906f4af41de03abd25ea /docs/sqlglot
parentAdding upstream version 17.12.0. (diff)
downloadsqlglot-341eb1a6bdf0dd5b015e5140d3b068c6fd3f4d87.tar.xz
sqlglot-341eb1a6bdf0dd5b015e5140d3b068c6fd3f4d87.zip
Adding upstream version 18.2.0.upstream/18.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'docs/sqlglot')
-rw-r--r--docs/sqlglot/_version.html4
-rw-r--r--docs/sqlglot/dataframe.html36
-rw-r--r--docs/sqlglot/dataframe/sql.html4516
-rw-r--r--docs/sqlglot/dialects.html36
-rw-r--r--docs/sqlglot/dialects/bigquery.html3203
-rw-r--r--docs/sqlglot/dialects/clickhouse.html2671
-rw-r--r--docs/sqlglot/dialects/databricks.html259
-rw-r--r--docs/sqlglot/dialects/dialect.html2431
-rw-r--r--docs/sqlglot/dialects/doris.html1705
-rw-r--r--docs/sqlglot/dialects/drill.html529
-rw-r--r--docs/sqlglot/dialects/duckdb.html1629
-rw-r--r--docs/sqlglot/dialects/hive.html1977
-rw-r--r--docs/sqlglot/dialects/mysql.html3727
-rw-r--r--docs/sqlglot/dialects/oracle.html756
-rw-r--r--docs/sqlglot/dialects/postgres.html1767
-rw-r--r--docs/sqlglot/dialects/presto.html1770
-rw-r--r--docs/sqlglot/dialects/redshift.html957
-rw-r--r--docs/sqlglot/dialects/snowflake.html1775
-rw-r--r--docs/sqlglot/dialects/spark.html360
-rw-r--r--docs/sqlglot/dialects/spark2.html1132
-rw-r--r--docs/sqlglot/dialects/sqlite.html1151
-rw-r--r--docs/sqlglot/dialects/starrocks.html393
-rw-r--r--docs/sqlglot/dialects/tableau.html102
-rw-r--r--docs/sqlglot/dialects/teradata.html108
-rw-r--r--docs/sqlglot/dialects/trino.html328
-rw-r--r--docs/sqlglot/dialects/tsql.html3602
-rw-r--r--docs/sqlglot/executor.html230
-rw-r--r--docs/sqlglot/executor/python.html77
-rw-r--r--docs/sqlglot/executor/table.html506
-rw-r--r--docs/sqlglot/expressions.html22521
-rw-r--r--docs/sqlglot/generator.html14361
-rw-r--r--docs/sqlglot/helper.html1432
-rw-r--r--docs/sqlglot/optimizer.html9
-rw-r--r--docs/sqlglot/optimizer/annotate_types.html887
-rw-r--r--docs/sqlglot/optimizer/eliminate_subqueries.html113
-rw-r--r--docs/sqlglot/optimizer/merge_subqueries.html2
-rw-r--r--docs/sqlglot/optimizer/optimize_joins.html36
-rw-r--r--docs/sqlglot/optimizer/optimizer.html2
-rw-r--r--docs/sqlglot/optimizer/pushdown_predicates.html468
-rw-r--r--docs/sqlglot/optimizer/scope.html2390
-rw-r--r--docs/sqlglot/optimizer/simplify.html1840
-rw-r--r--docs/sqlglot/parser.html19314
-rw-r--r--docs/sqlglot/schema.html606
-rw-r--r--docs/sqlglot/tokens.html4668
-rw-r--r--docs/sqlglot/transforms.html864
45 files changed, 57583 insertions, 49667 deletions
diff --git a/docs/sqlglot/_version.html b/docs/sqlglot/_version.html
index a500b36..8c98cbf 100644
--- a/docs/sqlglot/_version.html
+++ b/docs/sqlglot/_version.html
@@ -51,8 +51,8 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">1</span></a><span class="c1"># file generated by setuptools_scm</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos">2</span></a><span class="c1"># don&#39;t change, don&#39;t track in version control</span>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">&#39;17.11.0&#39;</span>
-</span><span id="L-4"><a href="#L-4"><span class="linenos">4</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">17</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">&#39;18.1.0&#39;</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos">4</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">18</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>
diff --git a/docs/sqlglot/dataframe.html b/docs/sqlglot/dataframe.html
index 914fb19..2a385db 100644
--- a/docs/sqlglot/dataframe.html
+++ b/docs/sqlglot/dataframe.html
@@ -96,11 +96,15 @@
</ul></li>
<li>See <a href="#registering-custom-schema-class">Registering Custom Schema</a> for information on how to skip this step if the information is stored externally.</li>
</ul></li>
+<li>If your output SQL dialect is not Spark, then configure the SparkSession to use that dialect
+<ul>
+<li>Ex: <code>SparkSession().builder.config("sqlframe.dialect", "bigquery").getOrCreate()</code></li>
+<li>See <a href="https://github.com/tobymao/sqlglot/tree/main/sqlglot/dialects">dialects</a> for a full list of dialects.</li>
+</ul></li>
<li>Add <code>.sql(pretty=True)</code> to your final DataFrame command to return a list of sql statements to run that command.
<ul>
-<li>In most cases a single SQL statement is returned. Currently the only exception is when caching DataFrames which isn't supported in other dialects. </li>
-<li>Spark is the default output dialect. See <a href="https://github.com/tobymao/sqlglot/tree/main/sqlglot/dialects">dialects</a> for a full list of dialects.</li>
-<li>Ex: <code>.sql(pretty=True, dialect='bigquery')</code></li>
+<li>In most cases a single SQL statement is returned. Currently the only exception is when caching DataFrames which isn't supported in other dialects.</li>
+<li>Ex: <code>.sql(pretty=True)</code></li>
</ul></li>
</ul>
@@ -111,6 +115,8 @@
<span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
<span class="kn">from</span> <span class="nn"><a href="dataframe/sql.html">sqlglot.dataframe.sql</a></span> <span class="kn">import</span> <span class="n">functions</span> <span class="k">as</span> <span class="n">F</span>
+<span class="n">dialect</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
+
<span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span>
<span class="s1">&#39;employee&#39;</span><span class="p">,</span>
<span class="p">{</span>
@@ -119,10 +125,10 @@
<span class="s1">&#39;lname&#39;</span><span class="p">:</span> <span class="s1">&#39;STRING&#39;</span><span class="p">,</span>
<span class="s1">&#39;age&#39;</span><span class="p">:</span> <span class="s1">&#39;INT&#39;</span><span class="p">,</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">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
<span class="p">)</span> <span class="c1"># Register the table structure prior to reading from the table</span>
-<span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="p">()</span>
+<span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">builder</span><span class="o">.</span><span class="n">config</span><span class="p">(</span><span class="s2">&quot;sqlframe.dialect&quot;</span><span class="p">,</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">getOrCreate</span><span class="p">()</span>
<span class="n">df</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">spark</span>
@@ -131,7 +137,7 @@
<span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">countDistinct</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;employee_id&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_employees&quot;</span><span class="p">))</span>
<span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span> <span class="c1"># Spark will be the dialect used by default</span>
+<span class="nb">print</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</code></pre>
</div>
@@ -159,7 +165,7 @@ GROUP BY
<span class="n"><a href="schema.html">sqlglot.schema</a></span> <span class="o">=</span> <span class="n">ExternalSchema</span><span class="p">()</span>
-<span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="p">()</span>
+<span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="p">()</span> <span class="c1"># Spark will be used by default is not specific in SparkSession config</span>
<span class="n">df</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">spark</span>
@@ -199,11 +205,14 @@ GROUP BY
<span class="p">])</span>
<span class="n">sql_statements</span> <span class="o">=</span> <span class="p">(</span>
- <span class="n">SparkSession</span><span class="p">()</span>
+ <span class="n">SparkSession</span>
+ <span class="o">.</span><span class="n">builder</span>
+ <span class="o">.</span><span class="n">config</span><span class="p">(</span><span class="s2">&quot;sqlframe.dialect&quot;</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">)</span>
+ <span class="o">.</span><span class="n">getOrCreate</span><span class="p">()</span>
<span class="o">.</span><span class="n">createDataFrame</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
<span class="o">.</span><span class="n">groupBy</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;age&quot;</span><span class="p">))</span>
<span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">countDistinct</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;employee_id&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_employees&quot;</span><span class="p">))</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;bigquery&quot;</span><span class="p">)</span>
+ <span class="o">.</span><span class="n">sql</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
@@ -248,11 +257,14 @@ GROUP BY
<span class="p">])</span>
<span class="n">sql_statements</span> <span class="o">=</span> <span class="p">(</span>
- <span class="n">SparkSession</span><span class="p">()</span>
+ <span class="n">SparkSession</span>
+ <span class="o">.</span><span class="n">builder</span>
+ <span class="o">.</span><span class="n">config</span><span class="p">(</span><span class="s2">&quot;sqlframe.dialect&quot;</span><span class="p">,</span> <span class="s2">&quot;snowflake&quot;</span><span class="p">)</span>
+ <span class="o">.</span><span class="n">getOrCreate</span><span class="p">()</span>
<span class="o">.</span><span class="n">createDataFrame</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
<span class="o">.</span><span class="n">groupBy</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;age&quot;</span><span class="p">))</span>
<span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">countDistinct</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;lname&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_employees&quot;</span><span class="p">))</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;snowflake&quot;</span><span class="p">)</span>
+ <span class="o">.</span><span class="n">sql</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
@@ -294,7 +306,7 @@ GROUP BY
<span class="o">.</span><span class="n">createDataFrame</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
<span class="o">.</span><span class="n">groupBy</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;age&quot;</span><span class="p">))</span>
<span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">countDistinct</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;employee_id&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_employees&quot;</span><span class="p">))</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="o">.</span><span class="n">sql</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">pyspark</span> <span class="o">=</span> <span class="n">PySparkSession</span><span class="o">.</span><span class="n">builder</span><span class="o">.</span><span class="n">master</span><span class="p">(</span><span class="s2">&quot;local[*]&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">getOrCreate</span><span class="p">()</span>
diff --git a/docs/sqlglot/dataframe/sql.html b/docs/sqlglot/dataframe/sql.html
index 3b5d973..27d0433 100644
--- a/docs/sqlglot/dataframe/sql.html
+++ b/docs/sqlglot/dataframe/sql.html
@@ -34,19 +34,7 @@
<a class="class" href="#SparkSession">SparkSession</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#SparkSession.known_ids">known_ids</a>
- </li>
- <li>
- <a class="variable" href="#SparkSession.known_branch_ids">known_branch_ids</a>
- </li>
- <li>
- <a class="variable" href="#SparkSession.known_sequence_ids">known_sequence_ids</a>
- </li>
- <li>
- <a class="variable" href="#SparkSession.name_to_sequence_id_mapping">name_to_sequence_id_mapping</a>
- </li>
- <li>
- <a class="variable" href="#SparkSession.incrementing_id">incrementing_id</a>
+ <a class="variable" href="#SparkSession.DEFAULT_DIALECT">DEFAULT_DIALECT</a>
</li>
<li>
<a class="variable" href="#SparkSession.read">read</a>
@@ -60,6 +48,27 @@
<li>
<a class="function" href="#SparkSession.sql">sql</a>
</li>
+ <li>
+ <a class="class" href="#SparkSession.Builder">SparkSession.Builder</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#SparkSession.Builder.SQLFRAME_DIALECT_KEY">SQLFRAME_DIALECT_KEY</a>
+ </li>
+ <li>
+ <a class="variable" href="#SparkSession.Builder.dialect">dialect</a>
+ </li>
+ <li>
+ <a class="function" href="#SparkSession.Builder.config">config</a>
+ </li>
+ <li>
+ <a class="function" href="#SparkSession.Builder.getOrCreate">getOrCreate</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="variable" href="#SparkSession.builder">builder</a>
+ </li>
</ul>
</li>
@@ -545,199 +554,190 @@
</div>
<a class="headerlink" href="#SparkSession"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession-20"><a href="#SparkSession-20"><span class="linenos"> 20</span></a><span class="k">class</span> <span class="nc">SparkSession</span><span class="p">:</span>
-</span><span id="SparkSession-21"><a href="#SparkSession-21"><span class="linenos"> 21</span></a> <span class="n">known_ids</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">ClassVar</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="SparkSession-22"><a href="#SparkSession-22"><span class="linenos"> 22</span></a> <span class="n">known_branch_ids</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">ClassVar</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="SparkSession-23"><a href="#SparkSession-23"><span class="linenos"> 23</span></a> <span class="n">known_sequence_ids</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">ClassVar</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="SparkSession-24"><a href="#SparkSession-24"><span class="linenos"> 24</span></a> <span class="n">name_to_sequence_id_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">ClassVar</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]]</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="SparkSession-25"><a href="#SparkSession-25"><span class="linenos"> 25</span></a>
-</span><span id="SparkSession-26"><a href="#SparkSession-26"><span class="linenos"> 26</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><span id="SparkSession-27"><a href="#SparkSession-27"><span class="linenos"> 27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">incrementing_id</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="SparkSession-28"><a href="#SparkSession-28"><span class="linenos"> 28</span></a>
-</span><span id="SparkSession-29"><a href="#SparkSession-29"><span class="linenos"> 29</span></a> <span class="k">def</span> <span class="fm">__getattr__</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="n">SparkSession</span><span class="p">:</span>
-</span><span id="SparkSession-30"><a href="#SparkSession-30"><span class="linenos"> 30</span></a> <span class="k">return</span> <span class="bp">self</span>
-</span><span id="SparkSession-31"><a href="#SparkSession-31"><span class="linenos"> 31</span></a>
-</span><span id="SparkSession-32"><a href="#SparkSession-32"><span class="linenos"> 32</span></a> <span class="k">def</span> <span class="fm">__call__</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="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="p">:</span>
-</span><span id="SparkSession-33"><a href="#SparkSession-33"><span class="linenos"> 33</span></a> <span class="k">return</span> <span class="bp">self</span>
-</span><span id="SparkSession-34"><a href="#SparkSession-34"><span class="linenos"> 34</span></a>
-</span><span id="SparkSession-35"><a href="#SparkSession-35"><span class="linenos"> 35</span></a> <span class="nd">@property</span>
-</span><span id="SparkSession-36"><a href="#SparkSession-36"><span class="linenos"> 36</span></a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameReader</span><span class="p">:</span>
-</span><span id="SparkSession-37"><a href="#SparkSession-37"><span class="linenos"> 37</span></a> <span class="k">return</span> <span class="n">DataFrameReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession-21"><a href="#SparkSession-21"><span class="linenos"> 21</span></a><span class="k">class</span> <span class="nc">SparkSession</span><span class="p">:</span>
+</span><span id="SparkSession-22"><a href="#SparkSession-22"><span class="linenos"> 22</span></a> <span class="n">DEFAULT_DIALECT</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
+</span><span id="SparkSession-23"><a href="#SparkSession-23"><span class="linenos"> 23</span></a> <span class="n">_instance</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="SparkSession-24"><a href="#SparkSession-24"><span class="linenos"> 24</span></a>
+</span><span id="SparkSession-25"><a href="#SparkSession-25"><span class="linenos"> 25</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><span id="SparkSession-26"><a href="#SparkSession-26"><span class="linenos"> 26</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;known_ids&quot;</span><span class="p">):</span>
+</span><span id="SparkSession-27"><a href="#SparkSession-27"><span class="linenos"> 27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_ids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="SparkSession-28"><a href="#SparkSession-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_branch_ids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="SparkSession-29"><a href="#SparkSession-29"><span class="linenos"> 29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_sequence_ids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="SparkSession-30"><a href="#SparkSession-30"><span class="linenos"> 30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</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="SparkSession-31"><a href="#SparkSession-31"><span class="linenos"> 31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">incrementing_id</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="SparkSession-32"><a href="#SparkSession-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_DIALECT</span><span class="p">)()</span>
+</span><span id="SparkSession-33"><a href="#SparkSession-33"><span class="linenos"> 33</span></a>
+</span><span id="SparkSession-34"><a href="#SparkSession-34"><span class="linenos"> 34</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="p">:</span>
+</span><span id="SparkSession-35"><a href="#SparkSession-35"><span class="linenos"> 35</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="SparkSession-36"><a href="#SparkSession-36"><span class="linenos"> 36</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</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><span id="SparkSession-37"><a href="#SparkSession-37"><span class="linenos"> 37</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span>
</span><span id="SparkSession-38"><a href="#SparkSession-38"><span class="linenos"> 38</span></a>
-</span><span id="SparkSession-39"><a href="#SparkSession-39"><span class="linenos"> 39</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="SparkSession-40"><a href="#SparkSession-40"><span class="linenos"> 40</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">table</span><span class="p">(</span><span class="n">tableName</span><span class="p">)</span>
-</span><span id="SparkSession-41"><a href="#SparkSession-41"><span class="linenos"> 41</span></a>
-</span><span id="SparkSession-42"><a href="#SparkSession-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="nf">createDataFrame</span><span class="p">(</span>
-</span><span id="SparkSession-43"><a href="#SparkSession-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="SparkSession-44"><a href="#SparkSession-44"><span class="linenos"> 44</span></a> <span class="n">data</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">Union</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">ColumnLiterals</span><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">ColumnLiterals</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">]],</span>
-</span><span id="SparkSession-45"><a href="#SparkSession-45"><span class="linenos"> 45</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SchemaInput</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="SparkSession-46"><a href="#SparkSession-46"><span class="linenos"> 46</span></a> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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 class="p">,</span>
-</span><span id="SparkSession-47"><a href="#SparkSession-47"><span class="linenos"> 47</span></a> <span class="n">verifySchema</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="SparkSession-48"><a href="#SparkSession-48"><span class="linenos"> 48</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="SparkSession-49"><a href="#SparkSession-49"><span class="linenos"> 49</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
-</span><span id="SparkSession-50"><a href="#SparkSession-50"><span class="linenos"> 50</span></a>
-</span><span id="SparkSession-51"><a href="#SparkSession-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="n">samplingRatio</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">verifySchema</span><span class="p">:</span>
-</span><span id="SparkSession-52"><a href="#SparkSession-52"><span class="linenos"> 52</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Sampling Ratio and Verify Schema are not supported&quot;</span><span class="p">)</span>
-</span><span id="SparkSession-53"><a href="#SparkSession-53"><span class="linenos"> 53</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="SparkSession-54"><a href="#SparkSession-54"><span class="linenos"> 54</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">(</span><span class="n">StructType</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span>
-</span><span id="SparkSession-55"><a href="#SparkSession-55"><span class="linenos"> 55</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</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">schema</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">str</span><span class="p">))</span>
-</span><span id="SparkSession-56"><a href="#SparkSession-56"><span class="linenos"> 56</span></a> <span class="p">):</span>
-</span><span id="SparkSession-57"><a href="#SparkSession-57"><span class="linenos"> 57</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Only schema of either list or string of list supported&quot;</span><span class="p">)</span>
-</span><span id="SparkSession-58"><a href="#SparkSession-58"><span class="linenos"> 58</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
-</span><span id="SparkSession-59"><a href="#SparkSession-59"><span class="linenos"> 59</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Must provide data to create into a DataFrame&quot;</span><span class="p">)</span>
-</span><span id="SparkSession-60"><a href="#SparkSession-60"><span class="linenos"> 60</span></a>
-</span><span id="SparkSession-61"><a href="#SparkSession-61"><span class="linenos"> 61</span></a> <span class="n">column_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="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="SparkSession-62"><a href="#SparkSession-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="SparkSession-63"><a href="#SparkSession-63"><span class="linenos"> 63</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="n">get_column_mapping_from_schema_input</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="SparkSession-64"><a href="#SparkSession-64"><span class="linenos"> 64</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="SparkSession-65"><a href="#SparkSession-65"><span class="linenos"> 65</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">col_name</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]}</span>
-</span><span id="SparkSession-66"><a href="#SparkSession-66"><span class="linenos"> 66</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SparkSession-67"><a href="#SparkSession-67"><span class="linenos"> 67</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="sa">f</span><span class="s2">&quot;_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)}</span>
-</span><span id="SparkSession-68"><a href="#SparkSession-68"><span class="linenos"> 68</span></a>
-</span><span id="SparkSession-69"><a href="#SparkSession-69"><span class="linenos"> 69</span></a> <span class="n">data_expressions</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="SparkSession-70"><a href="#SparkSession-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">(</span>
-</span><span id="SparkSession-71"><a href="#SparkSession-71"><span class="linenos"> 71</span></a> <span class="n">expressions</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span>
-</span><span id="SparkSession-72"><a href="#SparkSession-72"><span class="linenos"> 72</span></a> <span class="nb">map</span><span class="p">(</span>
-</span><span id="SparkSession-73"><a href="#SparkSession-73"><span class="linenos"> 73</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="SparkSession-74"><a href="#SparkSession-74"><span class="linenos"> 74</span></a> <span class="n">row</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="k">else</span> <span class="n">row</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
-</span><span id="SparkSession-75"><a href="#SparkSession-75"><span class="linenos"> 75</span></a> <span class="p">)</span>
-</span><span id="SparkSession-76"><a href="#SparkSession-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
-</span><span id="SparkSession-77"><a href="#SparkSession-77"><span class="linenos"> 77</span></a> <span class="p">)</span>
-</span><span id="SparkSession-78"><a href="#SparkSession-78"><span class="linenos"> 78</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span>
-</span><span id="SparkSession-79"><a href="#SparkSession-79"><span class="linenos"> 79</span></a> <span class="p">]</span>
-</span><span id="SparkSession-80"><a href="#SparkSession-80"><span class="linenos"> 80</span></a>
-</span><span id="SparkSession-81"><a href="#SparkSession-81"><span class="linenos"> 81</span></a> <span class="n">sel_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="SparkSession-82"><a href="#SparkSession-82"><span class="linenos"> 82</span></a> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="SparkSession-83"><a href="#SparkSession-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="n">data_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="SparkSession-84"><a href="#SparkSession-84"><span class="linenos"> 84</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="SparkSession-85"><a href="#SparkSession-85"><span class="linenos"> 85</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">data_type</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="SparkSession-86"><a href="#SparkSession-86"><span class="linenos"> 86</span></a> <span class="p">]</span>
-</span><span id="SparkSession-87"><a href="#SparkSession-87"><span class="linenos"> 87</span></a>
-</span><span id="SparkSession-88"><a href="#SparkSession-88"><span class="linenos"> 88</span></a> <span class="n">select_kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SparkSession-89"><a href="#SparkSession-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">sel_columns</span><span class="p">,</span>
-</span><span id="SparkSession-90"><a href="#SparkSession-90"><span class="linenos"> 90</span></a> <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><span id="SparkSession-91"><a href="#SparkSession-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">Values</span><span class="p">(</span>
-</span><span id="SparkSession-92"><a href="#SparkSession-92"><span class="linenos"> 92</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">data_expressions</span><span class="p">,</span>
-</span><span id="SparkSession-93"><a href="#SparkSession-93"><span class="linenos"> 93</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><span id="SparkSession-94"><a href="#SparkSession-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">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_auto_incrementing_name</span><span class="p">),</span>
-</span><span id="SparkSession-95"><a href="#SparkSession-95"><span class="linenos"> 95</span></a> <span class="n">columns</span><span class="o">=</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">col_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="p">],</span>
-</span><span id="SparkSession-96"><a href="#SparkSession-96"><span class="linenos"> 96</span></a> <span class="p">),</span>
-</span><span id="SparkSession-97"><a href="#SparkSession-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
-</span><span id="SparkSession-98"><a href="#SparkSession-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
-</span><span id="SparkSession-99"><a href="#SparkSession-99"><span class="linenos"> 99</span></a> <span class="p">}</span>
-</span><span id="SparkSession-100"><a href="#SparkSession-100"><span class="linenos">100</span></a>
-</span><span id="SparkSession-101"><a href="#SparkSession-101"><span class="linenos">101</span></a> <span class="n">sel_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="o">**</span><span class="n">select_kwargs</span><span class="p">)</span>
-</span><span id="SparkSession-102"><a href="#SparkSession-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel_expression</span><span class="p">)</span>
-</span><span id="SparkSession-103"><a href="#SparkSession-103"><span class="linenos">103</span></a>
-</span><span id="SparkSession-104"><a href="#SparkSession-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sqlQuery</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="SparkSession-105"><a href="#SparkSession-105"><span class="linenos">105</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sqlQuery</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="SparkSession-106"><a href="#SparkSession-106"><span class="linenos">106</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="SparkSession-107"><a href="#SparkSession-107"><span class="linenos">107</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</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="SparkSession-108"><a href="#SparkSession-108"><span class="linenos">108</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="SparkSession-109"><a href="#SparkSession-109"><span class="linenos">109</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">Create</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="SparkSession-110"><a href="#SparkSession-110"><span class="linenos">110</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="SparkSession-111"><a href="#SparkSession-111"><span class="linenos">111</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">Insert</span><span class="p">):</span>
-</span><span id="SparkSession-112"><a href="#SparkSession-112"><span class="linenos">112</span></a> <span class="n">select_expression</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">expression</span><span class="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="SparkSession-113"><a href="#SparkSession-113"><span class="linenos">113</span></a> <span class="n">expression</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="kc">None</span><span class="p">)</span>
-</span><span id="SparkSession-114"><a href="#SparkSession-114"><span class="linenos">114</span></a> <span class="k">del</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="SparkSession-115"><a href="#SparkSession-115"><span class="linenos">115</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">select_expression</span><span class="p">,</span> <span class="n">output_expression_container</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="SparkSession-116"><a href="#SparkSession-116"><span class="linenos">116</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="SparkSession-117"><a href="#SparkSession-117"><span class="linenos">117</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SparkSession-118"><a href="#SparkSession-118"><span class="linenos">118</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="SparkSession-119"><a href="#SparkSession-119"><span class="linenos">119</span></a> <span class="s2">&quot;Unknown expression type provided in the SQL. Please create an issue with the SQL.&quot;</span>
-</span><span id="SparkSession-120"><a href="#SparkSession-120"><span class="linenos">120</span></a> <span class="p">)</span>
-</span><span id="SparkSession-121"><a href="#SparkSession-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">df</span>
-</span><span id="SparkSession-122"><a href="#SparkSession-122"><span class="linenos">122</span></a>
-</span><span id="SparkSession-123"><a href="#SparkSession-123"><span class="linenos">123</span></a> <span class="nd">@property</span>
-</span><span id="SparkSession-124"><a href="#SparkSession-124"><span class="linenos">124</span></a> <span class="k">def</span> <span class="nf">_auto_incrementing_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="SparkSession-125"><a href="#SparkSession-125"><span class="linenos">125</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;a</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">incrementing_id</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="SparkSession-126"><a href="#SparkSession-126"><span class="linenos">126</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">incrementing_id</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="SparkSession-127"><a href="#SparkSession-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="n">name</span>
-</span><span id="SparkSession-128"><a href="#SparkSession-128"><span class="linenos">128</span></a>
-</span><span id="SparkSession-129"><a href="#SparkSession-129"><span class="linenos">129</span></a> <span class="nd">@property</span>
-</span><span id="SparkSession-130"><a href="#SparkSession-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">_random_branch_id</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="SparkSession-131"><a href="#SparkSession-131"><span class="linenos">131</span></a> <span class="nb">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_random_id</span>
-</span><span id="SparkSession-132"><a href="#SparkSession-132"><span class="linenos">132</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_branch_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
-</span><span id="SparkSession-133"><a href="#SparkSession-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="nb">id</span>
-</span><span id="SparkSession-134"><a href="#SparkSession-134"><span class="linenos">134</span></a>
-</span><span id="SparkSession-135"><a href="#SparkSession-135"><span class="linenos">135</span></a> <span class="nd">@property</span>
-</span><span id="SparkSession-136"><a href="#SparkSession-136"><span class="linenos">136</span></a> <span class="k">def</span> <span class="nf">_random_sequence_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="SparkSession-137"><a href="#SparkSession-137"><span class="linenos">137</span></a> <span class="nb">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_random_id</span>
-</span><span id="SparkSession-138"><a href="#SparkSession-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_sequence_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
-</span><span id="SparkSession-139"><a href="#SparkSession-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="nb">id</span>
-</span><span id="SparkSession-140"><a href="#SparkSession-140"><span class="linenos">140</span></a>
-</span><span id="SparkSession-141"><a href="#SparkSession-141"><span class="linenos">141</span></a> <span class="nd">@property</span>
-</span><span id="SparkSession-142"><a href="#SparkSession-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">_random_id</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="SparkSession-143"><a href="#SparkSession-143"><span class="linenos">143</span></a> <span class="nb">id</span> <span class="o">=</span> <span class="s2">&quot;r&quot;</span> <span class="o">+</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span>
-</span><span id="SparkSession-144"><a href="#SparkSession-144"><span class="linenos">144</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
-</span><span id="SparkSession-145"><a href="#SparkSession-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="nb">id</span>
-</span><span id="SparkSession-146"><a href="#SparkSession-146"><span class="linenos">146</span></a>
-</span><span id="SparkSession-147"><a href="#SparkSession-147"><span class="linenos">147</span></a> <span class="nd">@property</span>
-</span><span id="SparkSession-148"><a href="#SparkSession-148"><span class="linenos">148</span></a> <span class="k">def</span> <span class="nf">_join_hint_names</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="SparkSession-149"><a href="#SparkSession-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">,</span> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">,</span> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">}</span>
+</span><span id="SparkSession-39"><a href="#SparkSession-39"><span class="linenos"> 39</span></a> <span class="nd">@property</span>
+</span><span id="SparkSession-40"><a href="#SparkSession-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameReader</span><span class="p">:</span>
+</span><span id="SparkSession-41"><a href="#SparkSession-41"><span class="linenos"> 41</span></a> <span class="k">return</span> <span class="n">DataFrameReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="SparkSession-42"><a href="#SparkSession-42"><span class="linenos"> 42</span></a>
+</span><span id="SparkSession-43"><a href="#SparkSession-43"><span class="linenos"> 43</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="SparkSession-44"><a href="#SparkSession-44"><span class="linenos"> 44</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">table</span><span class="p">(</span><span class="n">tableName</span><span class="p">)</span>
+</span><span id="SparkSession-45"><a href="#SparkSession-45"><span class="linenos"> 45</span></a>
+</span><span id="SparkSession-46"><a href="#SparkSession-46"><span class="linenos"> 46</span></a> <span class="k">def</span> <span class="nf">createDataFrame</span><span class="p">(</span>
+</span><span id="SparkSession-47"><a href="#SparkSession-47"><span class="linenos"> 47</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="SparkSession-48"><a href="#SparkSession-48"><span class="linenos"> 48</span></a> <span class="n">data</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">Union</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">ColumnLiterals</span><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">ColumnLiterals</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">]],</span>
+</span><span id="SparkSession-49"><a href="#SparkSession-49"><span class="linenos"> 49</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SchemaInput</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession-50"><a href="#SparkSession-50"><span class="linenos"> 50</span></a> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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 class="p">,</span>
+</span><span id="SparkSession-51"><a href="#SparkSession-51"><span class="linenos"> 51</span></a> <span class="n">verifySchema</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="SparkSession-52"><a href="#SparkSession-52"><span class="linenos"> 52</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="SparkSession-53"><a href="#SparkSession-53"><span class="linenos"> 53</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
+</span><span id="SparkSession-54"><a href="#SparkSession-54"><span class="linenos"> 54</span></a>
+</span><span id="SparkSession-55"><a href="#SparkSession-55"><span class="linenos"> 55</span></a> <span class="k">if</span> <span class="n">samplingRatio</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">verifySchema</span><span class="p">:</span>
+</span><span id="SparkSession-56"><a href="#SparkSession-56"><span class="linenos"> 56</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Sampling Ratio and Verify Schema are not supported&quot;</span><span class="p">)</span>
+</span><span id="SparkSession-57"><a href="#SparkSession-57"><span class="linenos"> 57</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="SparkSession-58"><a href="#SparkSession-58"><span class="linenos"> 58</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">(</span><span class="n">StructType</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span>
+</span><span id="SparkSession-59"><a href="#SparkSession-59"><span class="linenos"> 59</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</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">schema</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">str</span><span class="p">))</span>
+</span><span id="SparkSession-60"><a href="#SparkSession-60"><span class="linenos"> 60</span></a> <span class="p">):</span>
+</span><span id="SparkSession-61"><a href="#SparkSession-61"><span class="linenos"> 61</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Only schema of either list or string of list supported&quot;</span><span class="p">)</span>
+</span><span id="SparkSession-62"><a href="#SparkSession-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
+</span><span id="SparkSession-63"><a href="#SparkSession-63"><span class="linenos"> 63</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Must provide data to create into a DataFrame&quot;</span><span class="p">)</span>
+</span><span id="SparkSession-64"><a href="#SparkSession-64"><span class="linenos"> 64</span></a>
+</span><span id="SparkSession-65"><a href="#SparkSession-65"><span class="linenos"> 65</span></a> <span class="n">column_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="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="SparkSession-66"><a href="#SparkSession-66"><span class="linenos"> 66</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="SparkSession-67"><a href="#SparkSession-67"><span class="linenos"> 67</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="n">get_column_mapping_from_schema_input</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="SparkSession-68"><a href="#SparkSession-68"><span class="linenos"> 68</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="SparkSession-69"><a href="#SparkSession-69"><span class="linenos"> 69</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">col_name</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]}</span>
+</span><span id="SparkSession-70"><a href="#SparkSession-70"><span class="linenos"> 70</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SparkSession-71"><a href="#SparkSession-71"><span class="linenos"> 71</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="sa">f</span><span class="s2">&quot;_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)}</span>
+</span><span id="SparkSession-72"><a href="#SparkSession-72"><span class="linenos"> 72</span></a>
+</span><span id="SparkSession-73"><a href="#SparkSession-73"><span class="linenos"> 73</span></a> <span class="n">data_expressions</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="SparkSession-74"><a href="#SparkSession-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">(</span>
+</span><span id="SparkSession-75"><a href="#SparkSession-75"><span class="linenos"> 75</span></a> <span class="n">expressions</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span>
+</span><span id="SparkSession-76"><a href="#SparkSession-76"><span class="linenos"> 76</span></a> <span class="nb">map</span><span class="p">(</span>
+</span><span id="SparkSession-77"><a href="#SparkSession-77"><span class="linenos"> 77</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="SparkSession-78"><a href="#SparkSession-78"><span class="linenos"> 78</span></a> <span class="n">row</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="k">else</span> <span class="n">row</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
+</span><span id="SparkSession-79"><a href="#SparkSession-79"><span class="linenos"> 79</span></a> <span class="p">)</span>
+</span><span id="SparkSession-80"><a href="#SparkSession-80"><span class="linenos"> 80</span></a> <span class="p">)</span>
+</span><span id="SparkSession-81"><a href="#SparkSession-81"><span class="linenos"> 81</span></a> <span class="p">)</span>
+</span><span id="SparkSession-82"><a href="#SparkSession-82"><span class="linenos"> 82</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span>
+</span><span id="SparkSession-83"><a href="#SparkSession-83"><span class="linenos"> 83</span></a> <span class="p">]</span>
+</span><span id="SparkSession-84"><a href="#SparkSession-84"><span class="linenos"> 84</span></a>
+</span><span id="SparkSession-85"><a href="#SparkSession-85"><span class="linenos"> 85</span></a> <span class="n">sel_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="SparkSession-86"><a href="#SparkSession-86"><span class="linenos"> 86</span></a> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="SparkSession-87"><a href="#SparkSession-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">data_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="SparkSession-88"><a href="#SparkSession-88"><span class="linenos"> 88</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="SparkSession-89"><a href="#SparkSession-89"><span class="linenos"> 89</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">data_type</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="SparkSession-90"><a href="#SparkSession-90"><span class="linenos"> 90</span></a> <span class="p">]</span>
+</span><span id="SparkSession-91"><a href="#SparkSession-91"><span class="linenos"> 91</span></a>
+</span><span id="SparkSession-92"><a href="#SparkSession-92"><span class="linenos"> 92</span></a> <span class="n">select_kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SparkSession-93"><a href="#SparkSession-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">sel_columns</span><span class="p">,</span>
+</span><span id="SparkSession-94"><a href="#SparkSession-94"><span class="linenos"> 94</span></a> <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><span id="SparkSession-95"><a href="#SparkSession-95"><span class="linenos"> 95</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">(</span>
+</span><span id="SparkSession-96"><a href="#SparkSession-96"><span class="linenos"> 96</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">data_expressions</span><span class="p">,</span>
+</span><span id="SparkSession-97"><a href="#SparkSession-97"><span class="linenos"> 97</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><span id="SparkSession-98"><a href="#SparkSession-98"><span class="linenos"> 98</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_auto_incrementing_name</span><span class="p">),</span>
+</span><span id="SparkSession-99"><a href="#SparkSession-99"><span class="linenos"> 99</span></a> <span class="n">columns</span><span class="o">=</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">col_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="p">],</span>
+</span><span id="SparkSession-100"><a href="#SparkSession-100"><span class="linenos">100</span></a> <span class="p">),</span>
+</span><span id="SparkSession-101"><a href="#SparkSession-101"><span class="linenos">101</span></a> <span class="p">),</span>
+</span><span id="SparkSession-102"><a href="#SparkSession-102"><span class="linenos">102</span></a> <span class="p">),</span>
+</span><span id="SparkSession-103"><a href="#SparkSession-103"><span class="linenos">103</span></a> <span class="p">}</span>
+</span><span id="SparkSession-104"><a href="#SparkSession-104"><span class="linenos">104</span></a>
+</span><span id="SparkSession-105"><a href="#SparkSession-105"><span class="linenos">105</span></a> <span class="n">sel_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="o">**</span><span class="n">select_kwargs</span><span class="p">)</span>
+</span><span id="SparkSession-106"><a href="#SparkSession-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel_expression</span><span class="p">)</span>
+</span><span id="SparkSession-107"><a href="#SparkSession-107"><span class="linenos">107</span></a>
+</span><span id="SparkSession-108"><a href="#SparkSession-108"><span class="linenos">108</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sqlQuery</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="SparkSession-109"><a href="#SparkSession-109"><span class="linenos">109</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sqlQuery</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="SparkSession-110"><a href="#SparkSession-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">Select</span><span class="p">):</span>
+</span><span id="SparkSession-111"><a href="#SparkSession-111"><span class="linenos">111</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</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="SparkSession-112"><a href="#SparkSession-112"><span class="linenos">112</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="SparkSession-113"><a href="#SparkSession-113"><span class="linenos">113</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">Create</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="SparkSession-114"><a href="#SparkSession-114"><span class="linenos">114</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="SparkSession-115"><a href="#SparkSession-115"><span class="linenos">115</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">Insert</span><span class="p">):</span>
+</span><span id="SparkSession-116"><a href="#SparkSession-116"><span class="linenos">116</span></a> <span class="n">select_expression</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">expression</span><span class="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="SparkSession-117"><a href="#SparkSession-117"><span class="linenos">117</span></a> <span class="n">expression</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="kc">None</span><span class="p">)</span>
+</span><span id="SparkSession-118"><a href="#SparkSession-118"><span class="linenos">118</span></a> <span class="k">del</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="SparkSession-119"><a href="#SparkSession-119"><span class="linenos">119</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">select_expression</span><span class="p">,</span> <span class="n">output_expression_container</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="SparkSession-120"><a href="#SparkSession-120"><span class="linenos">120</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="SparkSession-121"><a href="#SparkSession-121"><span class="linenos">121</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SparkSession-122"><a href="#SparkSession-122"><span class="linenos">122</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="SparkSession-123"><a href="#SparkSession-123"><span class="linenos">123</span></a> <span class="s2">&quot;Unknown expression type provided in the SQL. Please create an issue with the SQL.&quot;</span>
+</span><span id="SparkSession-124"><a href="#SparkSession-124"><span class="linenos">124</span></a> <span class="p">)</span>
+</span><span id="SparkSession-125"><a href="#SparkSession-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="n">df</span>
+</span><span id="SparkSession-126"><a href="#SparkSession-126"><span class="linenos">126</span></a>
+</span><span id="SparkSession-127"><a href="#SparkSession-127"><span class="linenos">127</span></a> <span class="nd">@property</span>
+</span><span id="SparkSession-128"><a href="#SparkSession-128"><span class="linenos">128</span></a> <span class="k">def</span> <span class="nf">_auto_incrementing_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="SparkSession-129"><a href="#SparkSession-129"><span class="linenos">129</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;a</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">incrementing_id</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="SparkSession-130"><a href="#SparkSession-130"><span class="linenos">130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">incrementing_id</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="SparkSession-131"><a href="#SparkSession-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">name</span>
+</span><span id="SparkSession-132"><a href="#SparkSession-132"><span class="linenos">132</span></a>
+</span><span id="SparkSession-133"><a href="#SparkSession-133"><span class="linenos">133</span></a> <span class="nd">@property</span>
+</span><span id="SparkSession-134"><a href="#SparkSession-134"><span class="linenos">134</span></a> <span class="k">def</span> <span class="nf">_random_branch_id</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="SparkSession-135"><a href="#SparkSession-135"><span class="linenos">135</span></a> <span class="nb">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_random_id</span>
+</span><span id="SparkSession-136"><a href="#SparkSession-136"><span class="linenos">136</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_branch_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
+</span><span id="SparkSession-137"><a href="#SparkSession-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="nb">id</span>
+</span><span id="SparkSession-138"><a href="#SparkSession-138"><span class="linenos">138</span></a>
+</span><span id="SparkSession-139"><a href="#SparkSession-139"><span class="linenos">139</span></a> <span class="nd">@property</span>
+</span><span id="SparkSession-140"><a href="#SparkSession-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">_random_sequence_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="SparkSession-141"><a href="#SparkSession-141"><span class="linenos">141</span></a> <span class="nb">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_random_id</span>
+</span><span id="SparkSession-142"><a href="#SparkSession-142"><span class="linenos">142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_sequence_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
+</span><span id="SparkSession-143"><a href="#SparkSession-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="nb">id</span>
+</span><span id="SparkSession-144"><a href="#SparkSession-144"><span class="linenos">144</span></a>
+</span><span id="SparkSession-145"><a href="#SparkSession-145"><span class="linenos">145</span></a> <span class="nd">@property</span>
+</span><span id="SparkSession-146"><a href="#SparkSession-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">_random_id</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="SparkSession-147"><a href="#SparkSession-147"><span class="linenos">147</span></a> <span class="nb">id</span> <span class="o">=</span> <span class="s2">&quot;r&quot;</span> <span class="o">+</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span>
+</span><span id="SparkSession-148"><a href="#SparkSession-148"><span class="linenos">148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">known_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
+</span><span id="SparkSession-149"><a href="#SparkSession-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="nb">id</span>
</span><span id="SparkSession-150"><a href="#SparkSession-150"><span class="linenos">150</span></a>
-</span><span id="SparkSession-151"><a href="#SparkSession-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">_add_alias_to_mapping</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="n">sequence_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="SparkSession-152"><a href="#SparkSession-152"><span class="linenos">152</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sequence_id</span><span class="p">)</span>
+</span><span id="SparkSession-151"><a href="#SparkSession-151"><span class="linenos">151</span></a> <span class="nd">@property</span>
+</span><span id="SparkSession-152"><a href="#SparkSession-152"><span class="linenos">152</span></a> <span class="k">def</span> <span class="nf">_join_hint_names</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="SparkSession-153"><a href="#SparkSession-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">,</span> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">,</span> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">}</span>
+</span><span id="SparkSession-154"><a href="#SparkSession-154"><span class="linenos">154</span></a>
+</span><span id="SparkSession-155"><a href="#SparkSession-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">_add_alias_to_mapping</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="n">sequence_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="SparkSession-156"><a href="#SparkSession-156"><span class="linenos">156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sequence_id</span><span class="p">)</span>
+</span><span id="SparkSession-157"><a href="#SparkSession-157"><span class="linenos">157</span></a>
+</span><span id="SparkSession-158"><a href="#SparkSession-158"><span class="linenos">158</span></a> <span class="k">class</span> <span class="nc">Builder</span><span class="p">:</span>
+</span><span id="SparkSession-159"><a href="#SparkSession-159"><span class="linenos">159</span></a> <span class="n">SQLFRAME_DIALECT_KEY</span> <span class="o">=</span> <span class="s2">&quot;sqlframe.dialect&quot;</span>
+</span><span id="SparkSession-160"><a href="#SparkSession-160"><span class="linenos">160</span></a>
+</span><span id="SparkSession-161"><a href="#SparkSession-161"><span class="linenos">161</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><span id="SparkSession-162"><a href="#SparkSession-162"><span class="linenos">162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
+</span><span id="SparkSession-163"><a href="#SparkSession-163"><span class="linenos">163</span></a>
+</span><span id="SparkSession-164"><a href="#SparkSession-164"><span class="linenos">164</span></a> <span class="k">def</span> <span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">Builder</span><span class="p">:</span>
+</span><span id="SparkSession-165"><a href="#SparkSession-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="SparkSession-166"><a href="#SparkSession-166"><span class="linenos">166</span></a>
+</span><span id="SparkSession-167"><a href="#SparkSession-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="fm">__call__</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+</span><span id="SparkSession-168"><a href="#SparkSession-168"><span class="linenos">168</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="SparkSession-169"><a href="#SparkSession-169"><span class="linenos">169</span></a>
+</span><span id="SparkSession-170"><a href="#SparkSession-170"><span class="linenos">170</span></a> <span class="k">def</span> <span class="nf">config</span><span class="p">(</span>
+</span><span id="SparkSession-171"><a href="#SparkSession-171"><span class="linenos">171</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="SparkSession-172"><a href="#SparkSession-172"><span class="linenos">172</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="SparkSession-173"><a href="#SparkSession-173"><span class="linenos">173</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession-174"><a href="#SparkSession-174"><span class="linenos">174</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="SparkSession-175"><a href="#SparkSession-175"><span class="linenos">175</span></a> <span class="nb">map</span><span 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">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession-176"><a href="#SparkSession-176"><span class="linenos">176</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="SparkSession-177"><a href="#SparkSession-177"><span class="linenos">177</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">Builder</span><span class="p">:</span>
+</span><span id="SparkSession-178"><a href="#SparkSession-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span><span class="p">:</span>
+</span><span id="SparkSession-179"><a href="#SparkSession-179"><span class="linenos">179</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="SparkSession-180"><a href="#SparkSession-180"><span class="linenos">180</span></a> <span class="k">elif</span> <span class="nb">map</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">:</span>
+</span><span id="SparkSession-181"><a href="#SparkSession-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="nb">map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span><span class="p">]</span>
+</span><span id="SparkSession-182"><a href="#SparkSession-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="SparkSession-183"><a href="#SparkSession-183"><span class="linenos">183</span></a>
+</span><span id="SparkSession-184"><a href="#SparkSession-184"><span class="linenos">184</span></a> <span class="k">def</span> <span class="nf">getOrCreate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="p">:</span>
+</span><span id="SparkSession-185"><a href="#SparkSession-185"><span class="linenos">185</span></a> <span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="p">()</span>
+</span><span id="SparkSession-186"><a href="#SparkSession-186"><span class="linenos">186</span></a> <span class="n">spark</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)()</span>
+</span><span id="SparkSession-187"><a href="#SparkSession-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="n">spark</span>
+</span><span id="SparkSession-188"><a href="#SparkSession-188"><span class="linenos">188</span></a>
+</span><span id="SparkSession-189"><a href="#SparkSession-189"><span class="linenos">189</span></a> <span class="nd">@classproperty</span>
+</span><span id="SparkSession-190"><a href="#SparkSession-190"><span class="linenos">190</span></a> <span class="k">def</span> <span class="nf">builder</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Builder</span><span class="p">:</span>
+</span><span id="SparkSession-191"><a href="#SparkSession-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Builder</span><span class="p">()</span>
</span></pre></div>
- <div id="SparkSession.known_ids" class="classattr">
- <div class="attr variable">
- <span class="name">known_ids</span><span class="annotation">: ClassVar[Set[str]]</span> =
-<span class="default_value">set()</span>
-
-
- </div>
- <a class="headerlink" href="#SparkSession.known_ids"></a>
-
-
-
- </div>
- <div id="SparkSession.known_branch_ids" class="classattr">
- <div class="attr variable">
- <span class="name">known_branch_ids</span><span class="annotation">: ClassVar[Set[str]]</span> =
-<span class="default_value">set()</span>
-
-
- </div>
- <a class="headerlink" href="#SparkSession.known_branch_ids"></a>
-
-
-
- </div>
- <div id="SparkSession.known_sequence_ids" class="classattr">
- <div class="attr variable">
- <span class="name">known_sequence_ids</span><span class="annotation">: ClassVar[Set[str]]</span> =
-<span class="default_value">set()</span>
-
-
- </div>
- <a class="headerlink" href="#SparkSession.known_sequence_ids"></a>
-
-
-
- </div>
- <div id="SparkSession.name_to_sequence_id_mapping" class="classattr">
+ <div id="SparkSession.DEFAULT_DIALECT" class="classattr">
<div class="attr variable">
- <span class="name">name_to_sequence_id_mapping</span><span class="annotation">: ClassVar[Dict[str, List[str]]]</span> =
-<span class="default_value">defaultdict(&lt;class &#39;list&#39;&gt;, {})</span>
+ <span class="name">DEFAULT_DIALECT</span> =
+<span class="default_value">&#39;spark&#39;</span>
</div>
- <a class="headerlink" href="#SparkSession.name_to_sequence_id_mapping"></a>
-
-
-
- </div>
- <div id="SparkSession.incrementing_id" class="classattr">
- <div class="attr variable">
- <span class="name">incrementing_id</span>
-
-
- </div>
- <a class="headerlink" href="#SparkSession.incrementing_id"></a>
+ <a class="headerlink" href="#SparkSession.DEFAULT_DIALECT"></a>
@@ -764,8 +764,8 @@
</div>
<a class="headerlink" href="#SparkSession.table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.table-39"><a href="#SparkSession.table-39"><span class="linenos">39</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="SparkSession.table-40"><a href="#SparkSession.table-40"><span class="linenos">40</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">table</span><span class="p">(</span><span class="n">tableName</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.table-43"><a href="#SparkSession.table-43"><span class="linenos">43</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="SparkSession.table-44"><a href="#SparkSession.table-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">table</span><span class="p">(</span><span class="n">tableName</span><span class="p">)</span>
</span></pre></div>
@@ -777,73 +777,73 @@
<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;140247752106064&#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;140247752106064&#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;140247751758304&#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;139783388129088&#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;139783388129088&#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;139783387935504&#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>
</div>
<a class="headerlink" href="#SparkSession.createDataFrame"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.createDataFrame-42"><a href="#SparkSession.createDataFrame-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="nf">createDataFrame</span><span class="p">(</span>
-</span><span id="SparkSession.createDataFrame-43"><a href="#SparkSession.createDataFrame-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="SparkSession.createDataFrame-44"><a href="#SparkSession.createDataFrame-44"><span class="linenos"> 44</span></a> <span class="n">data</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">Union</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">ColumnLiterals</span><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">ColumnLiterals</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">]],</span>
-</span><span id="SparkSession.createDataFrame-45"><a href="#SparkSession.createDataFrame-45"><span class="linenos"> 45</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SchemaInput</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="SparkSession.createDataFrame-46"><a href="#SparkSession.createDataFrame-46"><span class="linenos"> 46</span></a> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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 class="p">,</span>
-</span><span id="SparkSession.createDataFrame-47"><a href="#SparkSession.createDataFrame-47"><span class="linenos"> 47</span></a> <span class="n">verifySchema</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="SparkSession.createDataFrame-48"><a href="#SparkSession.createDataFrame-48"><span class="linenos"> 48</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="SparkSession.createDataFrame-49"><a href="#SparkSession.createDataFrame-49"><span class="linenos"> 49</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
-</span><span id="SparkSession.createDataFrame-50"><a href="#SparkSession.createDataFrame-50"><span class="linenos"> 50</span></a>
-</span><span id="SparkSession.createDataFrame-51"><a href="#SparkSession.createDataFrame-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="n">samplingRatio</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">verifySchema</span><span class="p">:</span>
-</span><span id="SparkSession.createDataFrame-52"><a href="#SparkSession.createDataFrame-52"><span class="linenos"> 52</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Sampling Ratio and Verify Schema are not supported&quot;</span><span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-53"><a href="#SparkSession.createDataFrame-53"><span class="linenos"> 53</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="SparkSession.createDataFrame-54"><a href="#SparkSession.createDataFrame-54"><span class="linenos"> 54</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">(</span><span class="n">StructType</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span>
-</span><span id="SparkSession.createDataFrame-55"><a href="#SparkSession.createDataFrame-55"><span class="linenos"> 55</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</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">schema</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">str</span><span class="p">))</span>
-</span><span id="SparkSession.createDataFrame-56"><a href="#SparkSession.createDataFrame-56"><span class="linenos"> 56</span></a> <span class="p">):</span>
-</span><span id="SparkSession.createDataFrame-57"><a href="#SparkSession.createDataFrame-57"><span class="linenos"> 57</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Only schema of either list or string of list supported&quot;</span><span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-58"><a href="#SparkSession.createDataFrame-58"><span class="linenos"> 58</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
-</span><span id="SparkSession.createDataFrame-59"><a href="#SparkSession.createDataFrame-59"><span class="linenos"> 59</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Must provide data to create into a DataFrame&quot;</span><span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-60"><a href="#SparkSession.createDataFrame-60"><span class="linenos"> 60</span></a>
-</span><span id="SparkSession.createDataFrame-61"><a href="#SparkSession.createDataFrame-61"><span class="linenos"> 61</span></a> <span class="n">column_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="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="SparkSession.createDataFrame-62"><a href="#SparkSession.createDataFrame-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="SparkSession.createDataFrame-63"><a href="#SparkSession.createDataFrame-63"><span class="linenos"> 63</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="n">get_column_mapping_from_schema_input</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-64"><a href="#SparkSession.createDataFrame-64"><span class="linenos"> 64</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="SparkSession.createDataFrame-65"><a href="#SparkSession.createDataFrame-65"><span class="linenos"> 65</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">col_name</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]}</span>
-</span><span id="SparkSession.createDataFrame-66"><a href="#SparkSession.createDataFrame-66"><span class="linenos"> 66</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SparkSession.createDataFrame-67"><a href="#SparkSession.createDataFrame-67"><span class="linenos"> 67</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="sa">f</span><span class="s2">&quot;_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)}</span>
-</span><span id="SparkSession.createDataFrame-68"><a href="#SparkSession.createDataFrame-68"><span class="linenos"> 68</span></a>
-</span><span id="SparkSession.createDataFrame-69"><a href="#SparkSession.createDataFrame-69"><span class="linenos"> 69</span></a> <span class="n">data_expressions</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="SparkSession.createDataFrame-70"><a href="#SparkSession.createDataFrame-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">(</span>
-</span><span id="SparkSession.createDataFrame-71"><a href="#SparkSession.createDataFrame-71"><span class="linenos"> 71</span></a> <span class="n">expressions</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span>
-</span><span id="SparkSession.createDataFrame-72"><a href="#SparkSession.createDataFrame-72"><span class="linenos"> 72</span></a> <span class="nb">map</span><span class="p">(</span>
-</span><span id="SparkSession.createDataFrame-73"><a href="#SparkSession.createDataFrame-73"><span class="linenos"> 73</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="SparkSession.createDataFrame-74"><a href="#SparkSession.createDataFrame-74"><span class="linenos"> 74</span></a> <span class="n">row</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="k">else</span> <span class="n">row</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
-</span><span id="SparkSession.createDataFrame-75"><a href="#SparkSession.createDataFrame-75"><span class="linenos"> 75</span></a> <span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-76"><a href="#SparkSession.createDataFrame-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-77"><a href="#SparkSession.createDataFrame-77"><span class="linenos"> 77</span></a> <span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-78"><a href="#SparkSession.createDataFrame-78"><span class="linenos"> 78</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span>
-</span><span id="SparkSession.createDataFrame-79"><a href="#SparkSession.createDataFrame-79"><span class="linenos"> 79</span></a> <span class="p">]</span>
-</span><span id="SparkSession.createDataFrame-80"><a href="#SparkSession.createDataFrame-80"><span class="linenos"> 80</span></a>
-</span><span id="SparkSession.createDataFrame-81"><a href="#SparkSession.createDataFrame-81"><span class="linenos"> 81</span></a> <span class="n">sel_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="SparkSession.createDataFrame-82"><a href="#SparkSession.createDataFrame-82"><span class="linenos"> 82</span></a> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="SparkSession.createDataFrame-83"><a href="#SparkSession.createDataFrame-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="n">data_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="SparkSession.createDataFrame-84"><a href="#SparkSession.createDataFrame-84"><span class="linenos"> 84</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="SparkSession.createDataFrame-85"><a href="#SparkSession.createDataFrame-85"><span class="linenos"> 85</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">data_type</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="SparkSession.createDataFrame-86"><a href="#SparkSession.createDataFrame-86"><span class="linenos"> 86</span></a> <span class="p">]</span>
-</span><span id="SparkSession.createDataFrame-87"><a href="#SparkSession.createDataFrame-87"><span class="linenos"> 87</span></a>
-</span><span id="SparkSession.createDataFrame-88"><a href="#SparkSession.createDataFrame-88"><span class="linenos"> 88</span></a> <span class="n">select_kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SparkSession.createDataFrame-89"><a href="#SparkSession.createDataFrame-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">sel_columns</span><span class="p">,</span>
-</span><span id="SparkSession.createDataFrame-90"><a href="#SparkSession.createDataFrame-90"><span class="linenos"> 90</span></a> <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><span id="SparkSession.createDataFrame-91"><a href="#SparkSession.createDataFrame-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">Values</span><span class="p">(</span>
-</span><span id="SparkSession.createDataFrame-92"><a href="#SparkSession.createDataFrame-92"><span class="linenos"> 92</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">data_expressions</span><span class="p">,</span>
-</span><span id="SparkSession.createDataFrame-93"><a href="#SparkSession.createDataFrame-93"><span class="linenos"> 93</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><span id="SparkSession.createDataFrame-94"><a href="#SparkSession.createDataFrame-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">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_auto_incrementing_name</span><span class="p">),</span>
-</span><span id="SparkSession.createDataFrame-95"><a href="#SparkSession.createDataFrame-95"><span class="linenos"> 95</span></a> <span class="n">columns</span><span class="o">=</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">col_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="p">],</span>
-</span><span id="SparkSession.createDataFrame-96"><a href="#SparkSession.createDataFrame-96"><span class="linenos"> 96</span></a> <span class="p">),</span>
-</span><span id="SparkSession.createDataFrame-97"><a href="#SparkSession.createDataFrame-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
-</span><span id="SparkSession.createDataFrame-98"><a href="#SparkSession.createDataFrame-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
-</span><span id="SparkSession.createDataFrame-99"><a href="#SparkSession.createDataFrame-99"><span class="linenos"> 99</span></a> <span class="p">}</span>
-</span><span id="SparkSession.createDataFrame-100"><a href="#SparkSession.createDataFrame-100"><span class="linenos">100</span></a>
-</span><span id="SparkSession.createDataFrame-101"><a href="#SparkSession.createDataFrame-101"><span class="linenos">101</span></a> <span class="n">sel_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="o">**</span><span class="n">select_kwargs</span><span class="p">)</span>
-</span><span id="SparkSession.createDataFrame-102"><a href="#SparkSession.createDataFrame-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.createDataFrame-46"><a href="#SparkSession.createDataFrame-46"><span class="linenos"> 46</span></a> <span class="k">def</span> <span class="nf">createDataFrame</span><span class="p">(</span>
+</span><span id="SparkSession.createDataFrame-47"><a href="#SparkSession.createDataFrame-47"><span class="linenos"> 47</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="SparkSession.createDataFrame-48"><a href="#SparkSession.createDataFrame-48"><span class="linenos"> 48</span></a> <span class="n">data</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">Union</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">ColumnLiterals</span><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">ColumnLiterals</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">]],</span>
+</span><span id="SparkSession.createDataFrame-49"><a href="#SparkSession.createDataFrame-49"><span class="linenos"> 49</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SchemaInput</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession.createDataFrame-50"><a href="#SparkSession.createDataFrame-50"><span class="linenos"> 50</span></a> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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 class="p">,</span>
+</span><span id="SparkSession.createDataFrame-51"><a href="#SparkSession.createDataFrame-51"><span class="linenos"> 51</span></a> <span class="n">verifySchema</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="SparkSession.createDataFrame-52"><a href="#SparkSession.createDataFrame-52"><span class="linenos"> 52</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="SparkSession.createDataFrame-53"><a href="#SparkSession.createDataFrame-53"><span class="linenos"> 53</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
+</span><span id="SparkSession.createDataFrame-54"><a href="#SparkSession.createDataFrame-54"><span class="linenos"> 54</span></a>
+</span><span id="SparkSession.createDataFrame-55"><a href="#SparkSession.createDataFrame-55"><span class="linenos"> 55</span></a> <span class="k">if</span> <span class="n">samplingRatio</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">verifySchema</span><span class="p">:</span>
+</span><span id="SparkSession.createDataFrame-56"><a href="#SparkSession.createDataFrame-56"><span class="linenos"> 56</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Sampling Ratio and Verify Schema are not supported&quot;</span><span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-57"><a href="#SparkSession.createDataFrame-57"><span class="linenos"> 57</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="SparkSession.createDataFrame-58"><a href="#SparkSession.createDataFrame-58"><span class="linenos"> 58</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">(</span><span class="n">StructType</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span>
+</span><span id="SparkSession.createDataFrame-59"><a href="#SparkSession.createDataFrame-59"><span class="linenos"> 59</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</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">schema</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">str</span><span class="p">))</span>
+</span><span id="SparkSession.createDataFrame-60"><a href="#SparkSession.createDataFrame-60"><span class="linenos"> 60</span></a> <span class="p">):</span>
+</span><span id="SparkSession.createDataFrame-61"><a href="#SparkSession.createDataFrame-61"><span class="linenos"> 61</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Only schema of either list or string of list supported&quot;</span><span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-62"><a href="#SparkSession.createDataFrame-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
+</span><span id="SparkSession.createDataFrame-63"><a href="#SparkSession.createDataFrame-63"><span class="linenos"> 63</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Must provide data to create into a DataFrame&quot;</span><span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-64"><a href="#SparkSession.createDataFrame-64"><span class="linenos"> 64</span></a>
+</span><span id="SparkSession.createDataFrame-65"><a href="#SparkSession.createDataFrame-65"><span class="linenos"> 65</span></a> <span class="n">column_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="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="SparkSession.createDataFrame-66"><a href="#SparkSession.createDataFrame-66"><span class="linenos"> 66</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="SparkSession.createDataFrame-67"><a href="#SparkSession.createDataFrame-67"><span class="linenos"> 67</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="n">get_column_mapping_from_schema_input</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-68"><a href="#SparkSession.createDataFrame-68"><span class="linenos"> 68</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="SparkSession.createDataFrame-69"><a href="#SparkSession.createDataFrame-69"><span class="linenos"> 69</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">col_name</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]}</span>
+</span><span id="SparkSession.createDataFrame-70"><a href="#SparkSession.createDataFrame-70"><span class="linenos"> 70</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SparkSession.createDataFrame-71"><a href="#SparkSession.createDataFrame-71"><span class="linenos"> 71</span></a> <span class="n">column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="sa">f</span><span class="s2">&quot;_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)}</span>
+</span><span id="SparkSession.createDataFrame-72"><a href="#SparkSession.createDataFrame-72"><span class="linenos"> 72</span></a>
+</span><span id="SparkSession.createDataFrame-73"><a href="#SparkSession.createDataFrame-73"><span class="linenos"> 73</span></a> <span class="n">data_expressions</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="SparkSession.createDataFrame-74"><a href="#SparkSession.createDataFrame-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">(</span>
+</span><span id="SparkSession.createDataFrame-75"><a href="#SparkSession.createDataFrame-75"><span class="linenos"> 75</span></a> <span class="n">expressions</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span>
+</span><span id="SparkSession.createDataFrame-76"><a href="#SparkSession.createDataFrame-76"><span class="linenos"> 76</span></a> <span class="nb">map</span><span class="p">(</span>
+</span><span id="SparkSession.createDataFrame-77"><a href="#SparkSession.createDataFrame-77"><span class="linenos"> 77</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="SparkSession.createDataFrame-78"><a href="#SparkSession.createDataFrame-78"><span class="linenos"> 78</span></a> <span class="n">row</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="k">else</span> <span class="n">row</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
+</span><span id="SparkSession.createDataFrame-79"><a href="#SparkSession.createDataFrame-79"><span class="linenos"> 79</span></a> <span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-80"><a href="#SparkSession.createDataFrame-80"><span class="linenos"> 80</span></a> <span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-81"><a href="#SparkSession.createDataFrame-81"><span class="linenos"> 81</span></a> <span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-82"><a href="#SparkSession.createDataFrame-82"><span class="linenos"> 82</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span>
+</span><span id="SparkSession.createDataFrame-83"><a href="#SparkSession.createDataFrame-83"><span class="linenos"> 83</span></a> <span class="p">]</span>
+</span><span id="SparkSession.createDataFrame-84"><a href="#SparkSession.createDataFrame-84"><span class="linenos"> 84</span></a>
+</span><span id="SparkSession.createDataFrame-85"><a href="#SparkSession.createDataFrame-85"><span class="linenos"> 85</span></a> <span class="n">sel_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="SparkSession.createDataFrame-86"><a href="#SparkSession.createDataFrame-86"><span class="linenos"> 86</span></a> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="SparkSession.createDataFrame-87"><a href="#SparkSession.createDataFrame-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">data_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="SparkSession.createDataFrame-88"><a href="#SparkSession.createDataFrame-88"><span class="linenos"> 88</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="SparkSession.createDataFrame-89"><a href="#SparkSession.createDataFrame-89"><span class="linenos"> 89</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">data_type</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="SparkSession.createDataFrame-90"><a href="#SparkSession.createDataFrame-90"><span class="linenos"> 90</span></a> <span class="p">]</span>
+</span><span id="SparkSession.createDataFrame-91"><a href="#SparkSession.createDataFrame-91"><span class="linenos"> 91</span></a>
+</span><span id="SparkSession.createDataFrame-92"><a href="#SparkSession.createDataFrame-92"><span class="linenos"> 92</span></a> <span class="n">select_kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SparkSession.createDataFrame-93"><a href="#SparkSession.createDataFrame-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">sel_columns</span><span class="p">,</span>
+</span><span id="SparkSession.createDataFrame-94"><a href="#SparkSession.createDataFrame-94"><span class="linenos"> 94</span></a> <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><span id="SparkSession.createDataFrame-95"><a href="#SparkSession.createDataFrame-95"><span class="linenos"> 95</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">(</span>
+</span><span id="SparkSession.createDataFrame-96"><a href="#SparkSession.createDataFrame-96"><span class="linenos"> 96</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">data_expressions</span><span class="p">,</span>
+</span><span id="SparkSession.createDataFrame-97"><a href="#SparkSession.createDataFrame-97"><span class="linenos"> 97</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><span id="SparkSession.createDataFrame-98"><a href="#SparkSession.createDataFrame-98"><span class="linenos"> 98</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_auto_incrementing_name</span><span class="p">),</span>
+</span><span id="SparkSession.createDataFrame-99"><a href="#SparkSession.createDataFrame-99"><span class="linenos"> 99</span></a> <span class="n">columns</span><span class="o">=</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">col_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">col_name</span> <span class="ow">in</span> <span class="n">column_mapping</span><span class="p">],</span>
+</span><span id="SparkSession.createDataFrame-100"><a href="#SparkSession.createDataFrame-100"><span class="linenos">100</span></a> <span class="p">),</span>
+</span><span id="SparkSession.createDataFrame-101"><a href="#SparkSession.createDataFrame-101"><span class="linenos">101</span></a> <span class="p">),</span>
+</span><span id="SparkSession.createDataFrame-102"><a href="#SparkSession.createDataFrame-102"><span class="linenos">102</span></a> <span class="p">),</span>
+</span><span id="SparkSession.createDataFrame-103"><a href="#SparkSession.createDataFrame-103"><span class="linenos">103</span></a> <span class="p">}</span>
+</span><span id="SparkSession.createDataFrame-104"><a href="#SparkSession.createDataFrame-104"><span class="linenos">104</span></a>
+</span><span id="SparkSession.createDataFrame-105"><a href="#SparkSession.createDataFrame-105"><span class="linenos">105</span></a> <span class="n">sel_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="o">**</span><span class="n">select_kwargs</span><span class="p">)</span>
+</span><span id="SparkSession.createDataFrame-106"><a href="#SparkSession.createDataFrame-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel_expression</span><span class="p">)</span>
</span></pre></div>
@@ -861,24 +861,156 @@
</div>
<a class="headerlink" href="#SparkSession.sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.sql-104"><a href="#SparkSession.sql-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sqlQuery</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="SparkSession.sql-105"><a href="#SparkSession.sql-105"><span class="linenos">105</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sqlQuery</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="SparkSession.sql-106"><a href="#SparkSession.sql-106"><span class="linenos">106</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="SparkSession.sql-107"><a href="#SparkSession.sql-107"><span class="linenos">107</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</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="SparkSession.sql-108"><a href="#SparkSession.sql-108"><span class="linenos">108</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="SparkSession.sql-109"><a href="#SparkSession.sql-109"><span class="linenos">109</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">Create</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="SparkSession.sql-110"><a href="#SparkSession.sql-110"><span class="linenos">110</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="SparkSession.sql-111"><a href="#SparkSession.sql-111"><span class="linenos">111</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">Insert</span><span class="p">):</span>
-</span><span id="SparkSession.sql-112"><a href="#SparkSession.sql-112"><span class="linenos">112</span></a> <span class="n">select_expression</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">expression</span><span class="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="SparkSession.sql-113"><a href="#SparkSession.sql-113"><span class="linenos">113</span></a> <span class="n">expression</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="kc">None</span><span class="p">)</span>
-</span><span id="SparkSession.sql-114"><a href="#SparkSession.sql-114"><span class="linenos">114</span></a> <span class="k">del</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="SparkSession.sql-115"><a href="#SparkSession.sql-115"><span class="linenos">115</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">select_expression</span><span class="p">,</span> <span class="n">output_expression_container</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="SparkSession.sql-116"><a href="#SparkSession.sql-116"><span class="linenos">116</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="SparkSession.sql-117"><a href="#SparkSession.sql-117"><span class="linenos">117</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SparkSession.sql-118"><a href="#SparkSession.sql-118"><span class="linenos">118</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="SparkSession.sql-119"><a href="#SparkSession.sql-119"><span class="linenos">119</span></a> <span class="s2">&quot;Unknown expression type provided in the SQL. Please create an issue with the SQL.&quot;</span>
-</span><span id="SparkSession.sql-120"><a href="#SparkSession.sql-120"><span class="linenos">120</span></a> <span class="p">)</span>
-</span><span id="SparkSession.sql-121"><a href="#SparkSession.sql-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">df</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.sql-108"><a href="#SparkSession.sql-108"><span class="linenos">108</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sqlQuery</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="SparkSession.sql-109"><a href="#SparkSession.sql-109"><span class="linenos">109</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sqlQuery</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="SparkSession.sql-110"><a href="#SparkSession.sql-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">Select</span><span class="p">):</span>
+</span><span id="SparkSession.sql-111"><a href="#SparkSession.sql-111"><span class="linenos">111</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</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="SparkSession.sql-112"><a href="#SparkSession.sql-112"><span class="linenos">112</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="SparkSession.sql-113"><a href="#SparkSession.sql-113"><span class="linenos">113</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">Create</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="SparkSession.sql-114"><a href="#SparkSession.sql-114"><span class="linenos">114</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="SparkSession.sql-115"><a href="#SparkSession.sql-115"><span class="linenos">115</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">Insert</span><span class="p">):</span>
+</span><span id="SparkSession.sql-116"><a href="#SparkSession.sql-116"><span class="linenos">116</span></a> <span class="n">select_expression</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">expression</span><span class="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="SparkSession.sql-117"><a href="#SparkSession.sql-117"><span class="linenos">117</span></a> <span class="n">expression</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="kc">None</span><span class="p">)</span>
+</span><span id="SparkSession.sql-118"><a href="#SparkSession.sql-118"><span class="linenos">118</span></a> <span class="k">del</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="SparkSession.sql-119"><a href="#SparkSession.sql-119"><span class="linenos">119</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">DataFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">select_expression</span><span class="p">,</span> <span class="n">output_expression_container</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="SparkSession.sql-120"><a href="#SparkSession.sql-120"><span class="linenos">120</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="SparkSession.sql-121"><a href="#SparkSession.sql-121"><span class="linenos">121</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SparkSession.sql-122"><a href="#SparkSession.sql-122"><span class="linenos">122</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="SparkSession.sql-123"><a href="#SparkSession.sql-123"><span class="linenos">123</span></a> <span class="s2">&quot;Unknown expression type provided in the SQL. Please create an issue with the SQL.&quot;</span>
+</span><span id="SparkSession.sql-124"><a href="#SparkSession.sql-124"><span class="linenos">124</span></a> <span class="p">)</span>
+</span><span id="SparkSession.sql-125"><a href="#SparkSession.sql-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="n">df</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="SparkSession.builder" class="classattr">
+ <div class="attr variable">
+ <span class="name">builder</span><span class="annotation">: <a href="#SparkSession.Builder">sqlglot.dataframe.sql.SparkSession.Builder</a></span>
+
+
+ </div>
+ <a class="headerlink" href="#SparkSession.builder"></a>
+
+
+
+ </div>
+ </section>
+ <section id="SparkSession.Builder">
+ <input id="SparkSession.Builder-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">SparkSession.Builder</span>:
+
+ <label class="view-source-button" for="SparkSession.Builder-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#SparkSession.Builder"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.Builder-158"><a href="#SparkSession.Builder-158"><span class="linenos">158</span></a> <span class="k">class</span> <span class="nc">Builder</span><span class="p">:</span>
+</span><span id="SparkSession.Builder-159"><a href="#SparkSession.Builder-159"><span class="linenos">159</span></a> <span class="n">SQLFRAME_DIALECT_KEY</span> <span class="o">=</span> <span class="s2">&quot;sqlframe.dialect&quot;</span>
+</span><span id="SparkSession.Builder-160"><a href="#SparkSession.Builder-160"><span class="linenos">160</span></a>
+</span><span id="SparkSession.Builder-161"><a href="#SparkSession.Builder-161"><span class="linenos">161</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><span id="SparkSession.Builder-162"><a href="#SparkSession.Builder-162"><span class="linenos">162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
+</span><span id="SparkSession.Builder-163"><a href="#SparkSession.Builder-163"><span class="linenos">163</span></a>
+</span><span id="SparkSession.Builder-164"><a href="#SparkSession.Builder-164"><span class="linenos">164</span></a> <span class="k">def</span> <span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">Builder</span><span class="p">:</span>
+</span><span id="SparkSession.Builder-165"><a href="#SparkSession.Builder-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="SparkSession.Builder-166"><a href="#SparkSession.Builder-166"><span class="linenos">166</span></a>
+</span><span id="SparkSession.Builder-167"><a href="#SparkSession.Builder-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="fm">__call__</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+</span><span id="SparkSession.Builder-168"><a href="#SparkSession.Builder-168"><span class="linenos">168</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="SparkSession.Builder-169"><a href="#SparkSession.Builder-169"><span class="linenos">169</span></a>
+</span><span id="SparkSession.Builder-170"><a href="#SparkSession.Builder-170"><span class="linenos">170</span></a> <span class="k">def</span> <span class="nf">config</span><span class="p">(</span>
+</span><span id="SparkSession.Builder-171"><a href="#SparkSession.Builder-171"><span class="linenos">171</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="SparkSession.Builder-172"><a href="#SparkSession.Builder-172"><span class="linenos">172</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="SparkSession.Builder-173"><a href="#SparkSession.Builder-173"><span class="linenos">173</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession.Builder-174"><a href="#SparkSession.Builder-174"><span class="linenos">174</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="SparkSession.Builder-175"><a href="#SparkSession.Builder-175"><span class="linenos">175</span></a> <span class="nb">map</span><span 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">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession.Builder-176"><a href="#SparkSession.Builder-176"><span class="linenos">176</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="SparkSession.Builder-177"><a href="#SparkSession.Builder-177"><span class="linenos">177</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">Builder</span><span class="p">:</span>
+</span><span id="SparkSession.Builder-178"><a href="#SparkSession.Builder-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span><span class="p">:</span>
+</span><span id="SparkSession.Builder-179"><a href="#SparkSession.Builder-179"><span class="linenos">179</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="SparkSession.Builder-180"><a href="#SparkSession.Builder-180"><span class="linenos">180</span></a> <span class="k">elif</span> <span class="nb">map</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">:</span>
+</span><span id="SparkSession.Builder-181"><a href="#SparkSession.Builder-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="nb">map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span><span class="p">]</span>
+</span><span id="SparkSession.Builder-182"><a href="#SparkSession.Builder-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="SparkSession.Builder-183"><a href="#SparkSession.Builder-183"><span class="linenos">183</span></a>
+</span><span id="SparkSession.Builder-184"><a href="#SparkSession.Builder-184"><span class="linenos">184</span></a> <span class="k">def</span> <span class="nf">getOrCreate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="p">:</span>
+</span><span id="SparkSession.Builder-185"><a href="#SparkSession.Builder-185"><span class="linenos">185</span></a> <span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="p">()</span>
+</span><span id="SparkSession.Builder-186"><a href="#SparkSession.Builder-186"><span class="linenos">186</span></a> <span class="n">spark</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)()</span>
+</span><span id="SparkSession.Builder-187"><a href="#SparkSession.Builder-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="n">spark</span>
+</span></pre></div>
+
+
+
+
+ <div id="SparkSession.Builder.SQLFRAME_DIALECT_KEY" class="classattr">
+ <div class="attr variable">
+ <span class="name">SQLFRAME_DIALECT_KEY</span> =
+<span class="default_value">&#39;sqlframe.dialect&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#SparkSession.Builder.SQLFRAME_DIALECT_KEY"></a>
+
+
+
+ </div>
+ <div id="SparkSession.Builder.dialect" class="classattr">
+ <div class="attr variable">
+ <span class="name">dialect</span>
+
+
+ </div>
+ <a class="headerlink" href="#SparkSession.Builder.dialect"></a>
+
+
+
+ </div>
+ <div id="SparkSession.Builder.config" class="classattr">
+ <input id="SparkSession.Builder.config-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">config</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">key</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">value</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="o">*</span>,</span><span class="param"> <span class="nb">map</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="n">Any</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 class="p">:</span> <span class="n">Any</span></span><span class="return-annotation">) -> <span class="n"><a href="#SparkSession.Builder">sqlglot.dataframe.sql.SparkSession.Builder</a></span>:</span></span>
+
+ <label class="view-source-button" for="SparkSession.Builder.config-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#SparkSession.Builder.config"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.Builder.config-170"><a href="#SparkSession.Builder.config-170"><span class="linenos">170</span></a> <span class="k">def</span> <span class="nf">config</span><span class="p">(</span>
+</span><span id="SparkSession.Builder.config-171"><a href="#SparkSession.Builder.config-171"><span class="linenos">171</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="SparkSession.Builder.config-172"><a href="#SparkSession.Builder.config-172"><span class="linenos">172</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="SparkSession.Builder.config-173"><a href="#SparkSession.Builder.config-173"><span class="linenos">173</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession.Builder.config-174"><a href="#SparkSession.Builder.config-174"><span class="linenos">174</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="SparkSession.Builder.config-175"><a href="#SparkSession.Builder.config-175"><span class="linenos">175</span></a> <span class="nb">map</span><span 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">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="SparkSession.Builder.config-176"><a href="#SparkSession.Builder.config-176"><span class="linenos">176</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="SparkSession.Builder.config-177"><a href="#SparkSession.Builder.config-177"><span class="linenos">177</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">Builder</span><span class="p">:</span>
+</span><span id="SparkSession.Builder.config-178"><a href="#SparkSession.Builder.config-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span><span class="p">:</span>
+</span><span id="SparkSession.Builder.config-179"><a href="#SparkSession.Builder.config-179"><span class="linenos">179</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="SparkSession.Builder.config-180"><a href="#SparkSession.Builder.config-180"><span class="linenos">180</span></a> <span class="k">elif</span> <span class="nb">map</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">:</span>
+</span><span id="SparkSession.Builder.config-181"><a href="#SparkSession.Builder.config-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="nb">map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">SQLFRAME_DIALECT_KEY</span><span class="p">]</span>
+</span><span id="SparkSession.Builder.config-182"><a href="#SparkSession.Builder.config-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="SparkSession.Builder.getOrCreate" class="classattr">
+ <input id="SparkSession.Builder.getOrCreate-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">getOrCreate</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="n"><a href="#SparkSession">sqlglot.dataframe.sql.SparkSession</a></span>:</span></span>
+
+ <label class="view-source-button" for="SparkSession.Builder.getOrCreate-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#SparkSession.Builder.getOrCreate"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SparkSession.Builder.getOrCreate-184"><a href="#SparkSession.Builder.getOrCreate-184"><span class="linenos">184</span></a> <span class="k">def</span> <span class="nf">getOrCreate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparkSession</span><span class="p">:</span>
+</span><span id="SparkSession.Builder.getOrCreate-185"><a href="#SparkSession.Builder.getOrCreate-185"><span class="linenos">185</span></a> <span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="p">()</span>
+</span><span id="SparkSession.Builder.getOrCreate-186"><a href="#SparkSession.Builder.getOrCreate-186"><span class="linenos">186</span></a> <span class="n">spark</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)()</span>
+</span><span id="SparkSession.Builder.getOrCreate-187"><a href="#SparkSession.Builder.getOrCreate-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="n">spark</span>
</span></pre></div>
@@ -897,781 +1029,797 @@
</div>
<a class="headerlink" href="#DataFrame"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame-45"><a href="#DataFrame-45"><span class="linenos"> 45</span></a><span class="k">class</span> <span class="nc">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-46"><a href="#DataFrame-46"><span class="linenos"> 46</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="DataFrame-47"><a href="#DataFrame-47"><span class="linenos"> 47</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-48"><a href="#DataFrame-48"><span class="linenos"> 48</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">,</span>
-</span><span id="DataFrame-49"><a href="#DataFrame-49"><span class="linenos"> 49</span></a> <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="DataFrame-50"><a href="#DataFrame-50"><span class="linenos"> 50</span></a> <span class="n">branch_id</span><span 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="DataFrame-51"><a href="#DataFrame-51"><span class="linenos"> 51</span></a> <span class="n">sequence_id</span><span 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="DataFrame-52"><a href="#DataFrame-52"><span class="linenos"> 52</span></a> <span class="n">last_op</span><span class="p">:</span> <span class="n">Operation</span> <span class="o">=</span> <span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">,</span>
-</span><span id="DataFrame-53"><a href="#DataFrame-53"><span class="linenos"> 53</span></a> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame-54"><a href="#DataFrame-54"><span class="linenos"> 54</span></a> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">OutputExpressionContainer</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame-55"><a href="#DataFrame-55"><span class="linenos"> 55</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="DataFrame-56"><a href="#DataFrame-56"><span class="linenos"> 56</span></a> <span class="p">):</span>
-</span><span id="DataFrame-57"><a href="#DataFrame-57"><span class="linenos"> 57</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
-</span><span id="DataFrame-58"><a href="#DataFrame-58"><span class="linenos"> 58</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="DataFrame-59"><a href="#DataFrame-59"><span class="linenos"> 59</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">branch_id</span> <span class="o">=</span> <span class="n">branch_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_branch_id</span>
-</span><span id="DataFrame-60"><a href="#DataFrame-60"><span class="linenos"> 60</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span> <span class="o">=</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
-</span><span id="DataFrame-61"><a href="#DataFrame-61"><span class="linenos"> 61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span> <span class="o">=</span> <span class="n">last_op</span>
-</span><span id="DataFrame-62"><a href="#DataFrame-62"><span class="linenos"> 62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="o">=</span> <span class="n">pending_hints</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="DataFrame-63"><a href="#DataFrame-63"><span class="linenos"> 63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">output_expression_container</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span>
-</span><span id="DataFrame-64"><a href="#DataFrame-64"><span class="linenos"> 64</span></a>
-</span><span id="DataFrame-65"><a href="#DataFrame-65"><span class="linenos"> 65</span></a> <span class="k">def</span> <span class="fm">__getattr__</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">Column</span><span class="p">:</span>
-</span><span id="DataFrame-66"><a href="#DataFrame-66"><span class="linenos"> 66</span></a> <span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">column_name</span><span class="p">]</span>
-</span><span id="DataFrame-67"><a href="#DataFrame-67"><span class="linenos"> 67</span></a>
-</span><span id="DataFrame-68"><a href="#DataFrame-68"><span class="linenos"> 68</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">column_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="DataFrame-69"><a href="#DataFrame-69"><span class="linenos"> 69</span></a> <span class="n">column_name</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">branch_id</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">column_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DataFrame-70"><a href="#DataFrame-70"><span class="linenos"> 70</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame-49"><a href="#DataFrame-49"><span class="linenos"> 49</span></a><span class="k">class</span> <span class="nc">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-50"><a href="#DataFrame-50"><span class="linenos"> 50</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="DataFrame-51"><a href="#DataFrame-51"><span class="linenos"> 51</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-52"><a href="#DataFrame-52"><span class="linenos"> 52</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">,</span>
+</span><span id="DataFrame-53"><a href="#DataFrame-53"><span class="linenos"> 53</span></a> <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="DataFrame-54"><a href="#DataFrame-54"><span class="linenos"> 54</span></a> <span class="n">branch_id</span><span 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="DataFrame-55"><a href="#DataFrame-55"><span class="linenos"> 55</span></a> <span class="n">sequence_id</span><span 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="DataFrame-56"><a href="#DataFrame-56"><span class="linenos"> 56</span></a> <span class="n">last_op</span><span class="p">:</span> <span class="n">Operation</span> <span class="o">=</span> <span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">,</span>
+</span><span id="DataFrame-57"><a href="#DataFrame-57"><span class="linenos"> 57</span></a> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame-58"><a href="#DataFrame-58"><span class="linenos"> 58</span></a> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">OutputExpressionContainer</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame-59"><a href="#DataFrame-59"><span class="linenos"> 59</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataFrame-60"><a href="#DataFrame-60"><span class="linenos"> 60</span></a> <span class="p">):</span>
+</span><span id="DataFrame-61"><a href="#DataFrame-61"><span class="linenos"> 61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
+</span><span id="DataFrame-62"><a href="#DataFrame-62"><span class="linenos"> 62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="DataFrame-63"><a href="#DataFrame-63"><span class="linenos"> 63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">branch_id</span> <span class="o">=</span> <span class="n">branch_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_branch_id</span>
+</span><span id="DataFrame-64"><a href="#DataFrame-64"><span class="linenos"> 64</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span> <span class="o">=</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
+</span><span id="DataFrame-65"><a href="#DataFrame-65"><span class="linenos"> 65</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span> <span class="o">=</span> <span class="n">last_op</span>
+</span><span id="DataFrame-66"><a href="#DataFrame-66"><span class="linenos"> 66</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="o">=</span> <span class="n">pending_hints</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="DataFrame-67"><a href="#DataFrame-67"><span class="linenos"> 67</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">output_expression_container</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span>
+</span><span id="DataFrame-68"><a href="#DataFrame-68"><span class="linenos"> 68</span></a>
+</span><span id="DataFrame-69"><a href="#DataFrame-69"><span class="linenos"> 69</span></a> <span class="k">def</span> <span class="fm">__getattr__</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">Column</span><span class="p">:</span>
+</span><span id="DataFrame-70"><a href="#DataFrame-70"><span class="linenos"> 70</span></a> <span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">column_name</span><span class="p">]</span>
</span><span id="DataFrame-71"><a href="#DataFrame-71"><span class="linenos"> 71</span></a>
-</span><span id="DataFrame-72"><a href="#DataFrame-72"><span class="linenos"> 72</span></a> <span class="k">def</span> <span class="nf">__copy__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DataFrame-73"><a href="#DataFrame-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-74"><a href="#DataFrame-74"><span class="linenos"> 74</span></a>
-</span><span id="DataFrame-75"><a href="#DataFrame-75"><span class="linenos"> 75</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-76"><a href="#DataFrame-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="nf">sparkSession</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DataFrame-77"><a href="#DataFrame-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span>
+</span><span id="DataFrame-72"><a href="#DataFrame-72"><span class="linenos"> 72</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">column_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="DataFrame-73"><a href="#DataFrame-73"><span class="linenos"> 73</span></a> <span class="n">column_name</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">branch_id</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">column_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DataFrame-74"><a href="#DataFrame-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
+</span><span id="DataFrame-75"><a href="#DataFrame-75"><span class="linenos"> 75</span></a>
+</span><span id="DataFrame-76"><a href="#DataFrame-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="nf">__copy__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DataFrame-77"><a href="#DataFrame-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="DataFrame-78"><a href="#DataFrame-78"><span class="linenos"> 78</span></a>
</span><span id="DataFrame-79"><a href="#DataFrame-79"><span class="linenos"> 79</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-80"><a href="#DataFrame-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DataFrame-81"><a href="#DataFrame-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="n">DataFrameWriter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="DataFrame-80"><a href="#DataFrame-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">sparkSession</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DataFrame-81"><a href="#DataFrame-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span>
</span><span id="DataFrame-82"><a href="#DataFrame-82"><span class="linenos"> 82</span></a>
</span><span id="DataFrame-83"><a href="#DataFrame-83"><span class="linenos"> 83</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-84"><a href="#DataFrame-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="nf">latest_cte_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="DataFrame-85"><a href="#DataFrame-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
-</span><span id="DataFrame-86"><a href="#DataFrame-86"><span class="linenos"> 86</span></a> <span class="n">from_exp</span> <span class="o">=</span> <span class="bp">self</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;from&quot;</span><span class="p">]</span>
-</span><span id="DataFrame-87"><a href="#DataFrame-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">from_exp</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span>
-</span><span id="DataFrame-88"><a href="#DataFrame-88"><span class="linenos"> 88</span></a> <span class="k">return</span> <span class="n">from_exp</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-89"><a href="#DataFrame-89"><span class="linenos"> 89</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">from_exp</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">TableAlias</span><span class="p">)</span>
-</span><span id="DataFrame-90"><a href="#DataFrame-90"><span class="linenos"> 90</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="DataFrame-91"><a href="#DataFrame-91"><span class="linenos"> 91</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
-</span><span id="DataFrame-92"><a href="#DataFrame-92"><span class="linenos"> 92</span></a> <span class="sa">f</span><span class="s2">&quot;Could not find an alias name for this expression: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DataFrame-93"><a href="#DataFrame-93"><span class="linenos"> 93</span></a> <span class="p">)</span>
-</span><span id="DataFrame-94"><a href="#DataFrame-94"><span class="linenos"> 94</span></a> <span class="k">return</span> <span class="n">table_alias</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-95"><a href="#DataFrame-95"><span class="linenos"> 95</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">ctes</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">alias</span>
-</span><span id="DataFrame-96"><a href="#DataFrame-96"><span class="linenos"> 96</span></a>
-</span><span id="DataFrame-97"><a href="#DataFrame-97"><span class="linenos"> 97</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-98"><a href="#DataFrame-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">pending_join_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DataFrame-99"><a href="#DataFrame-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">hint</span> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hint</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">)]</span>
+</span><span id="DataFrame-84"><a href="#DataFrame-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DataFrame-85"><a href="#DataFrame-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">DataFrameWriter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="DataFrame-86"><a href="#DataFrame-86"><span class="linenos"> 86</span></a>
+</span><span id="DataFrame-87"><a href="#DataFrame-87"><span class="linenos"> 87</span></a> <span class="nd">@property</span>
+</span><span id="DataFrame-88"><a href="#DataFrame-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">latest_cte_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="DataFrame-89"><a href="#DataFrame-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
+</span><span id="DataFrame-90"><a href="#DataFrame-90"><span class="linenos"> 90</span></a> <span class="n">from_exp</span> <span class="o">=</span> <span class="bp">self</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;from&quot;</span><span class="p">]</span>
+</span><span id="DataFrame-91"><a href="#DataFrame-91"><span class="linenos"> 91</span></a> <span class="k">if</span> <span class="n">from_exp</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span>
+</span><span id="DataFrame-92"><a href="#DataFrame-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="n">from_exp</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-93"><a href="#DataFrame-93"><span class="linenos"> 93</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">from_exp</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">TableAlias</span><span class="p">)</span>
+</span><span id="DataFrame-94"><a href="#DataFrame-94"><span class="linenos"> 94</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="DataFrame-95"><a href="#DataFrame-95"><span class="linenos"> 95</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+</span><span id="DataFrame-96"><a href="#DataFrame-96"><span class="linenos"> 96</span></a> <span class="sa">f</span><span class="s2">&quot;Could not find an alias name for this expression: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DataFrame-97"><a href="#DataFrame-97"><span class="linenos"> 97</span></a> <span class="p">)</span>
+</span><span id="DataFrame-98"><a href="#DataFrame-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="n">table_alias</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-99"><a href="#DataFrame-99"><span class="linenos"> 99</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">ctes</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">alias</span>
</span><span id="DataFrame-100"><a href="#DataFrame-100"><span class="linenos">100</span></a>
</span><span id="DataFrame-101"><a href="#DataFrame-101"><span class="linenos">101</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-102"><a href="#DataFrame-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">pending_partition_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DataFrame-103"><a href="#DataFrame-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">hint</span> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hint</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)]</span>
+</span><span id="DataFrame-102"><a href="#DataFrame-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">pending_join_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DataFrame-103"><a href="#DataFrame-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">hint</span> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hint</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">)]</span>
</span><span id="DataFrame-104"><a href="#DataFrame-104"><span class="linenos">104</span></a>
</span><span id="DataFrame-105"><a href="#DataFrame-105"><span class="linenos">105</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-106"><a href="#DataFrame-106"><span class="linenos">106</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 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="DataFrame-107"><a href="#DataFrame-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="DataFrame-106"><a href="#DataFrame-106"><span class="linenos">106</span></a> <span class="k">def</span> <span class="nf">pending_partition_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DataFrame-107"><a href="#DataFrame-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">hint</span> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hint</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)]</span>
</span><span id="DataFrame-108"><a href="#DataFrame-108"><span class="linenos">108</span></a>
</span><span id="DataFrame-109"><a href="#DataFrame-109"><span class="linenos">109</span></a> <span class="nd">@property</span>
-</span><span id="DataFrame-110"><a href="#DataFrame-110"><span class="linenos">110</span></a> <span class="k">def</span> <span class="nf">na</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameNaFunctions</span><span class="p">:</span>
-</span><span id="DataFrame-111"><a href="#DataFrame-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="n">DataFrameNaFunctions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="DataFrame-110"><a href="#DataFrame-110"><span class="linenos">110</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 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="DataFrame-111"><a href="#DataFrame-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
</span><span id="DataFrame-112"><a href="#DataFrame-112"><span class="linenos">112</span></a>
-</span><span id="DataFrame-113"><a href="#DataFrame-113"><span class="linenos">113</span></a> <span class="k">def</span> <span class="nf">_replace_cte_names_with_hashes</span><span class="p">(</span><span class="bp">self</span><span 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="DataFrame-114"><a href="#DataFrame-114"><span class="linenos">114</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="DataFrame-115"><a href="#DataFrame-115"><span class="linenos">115</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
-</span><span id="DataFrame-116"><a href="#DataFrame-116"><span class="linenos">116</span></a> <span class="n">old_name_id</span> <span class="o">=</span> <span class="n">cte</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">this</span>
-</span><span id="DataFrame-117"><a href="#DataFrame-117"><span class="linenos">117</span></a> <span class="n">new_hashed_id</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><span id="DataFrame-118"><a href="#DataFrame-118"><span class="linenos">118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="p">),</span> <span class="n">quoted</span><span class="o">=</span><span class="n">old_name_id</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><span id="DataFrame-119"><a href="#DataFrame-119"><span class="linenos">119</span></a> <span class="p">)</span>
-</span><span id="DataFrame-120"><a href="#DataFrame-120"><span class="linenos">120</span></a> <span class="n">replacement_mapping</span><span class="p">[</span><span class="n">old_name_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_hashed_id</span>
-</span><span id="DataFrame-121"><a href="#DataFrame-121"><span class="linenos">121</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 class="n">replace_id_value</span><span class="p">,</span> <span class="n">replacement_mapping</span><span class="p">)</span>
-</span><span id="DataFrame-122"><a href="#DataFrame-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="DataFrame-123"><a href="#DataFrame-123"><span class="linenos">123</span></a>
-</span><span id="DataFrame-124"><a href="#DataFrame-124"><span class="linenos">124</span></a> <span class="k">def</span> <span class="nf">_create_cte_from_expression</span><span class="p">(</span>
-</span><span id="DataFrame-125"><a href="#DataFrame-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-126"><a href="#DataFrame-126"><span class="linenos">126</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="DataFrame-127"><a href="#DataFrame-127"><span class="linenos">127</span></a> <span class="n">branch_id</span><span 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="DataFrame-128"><a href="#DataFrame-128"><span class="linenos">128</span></a> <span class="n">sequence_id</span><span 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="DataFrame-129"><a href="#DataFrame-129"><span class="linenos">129</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="DataFrame-130"><a href="#DataFrame-130"><span class="linenos">130</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="DataFrame-131"><a href="#DataFrame-131"><span class="linenos">131</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-132"><a href="#DataFrame-132"><span class="linenos">132</span></a> <span class="n">expression_to_cte</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="DataFrame-133"><a href="#DataFrame-133"><span class="linenos">133</span></a> <span class="n">expression_to_cte</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="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame-134"><a href="#DataFrame-134"><span class="linenos">134</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">with_</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">as_</span><span class="o">=</span><span class="n">expression_to_cte</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">ctes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="DataFrame-135"><a href="#DataFrame-135"><span class="linenos">135</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;branch_id&quot;</span><span class="p">,</span> <span class="n">branch_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">branch_id</span><span class="p">)</span>
-</span><span id="DataFrame-136"><a href="#DataFrame-136"><span class="linenos">136</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sequence_id&quot;</span><span class="p">,</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">)</span>
-</span><span id="DataFrame-137"><a href="#DataFrame-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="n">cte</span><span class="p">,</span> <span class="n">name</span>
-</span><span id="DataFrame-138"><a href="#DataFrame-138"><span class="linenos">138</span></a>
-</span><span id="DataFrame-139"><a href="#DataFrame-139"><span class="linenos">139</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="DataFrame-140"><a href="#DataFrame-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">_ensure_list_of_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</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">ColumnOrLiteral</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">Column</span><span class="p">]:</span>
-</span><span id="DataFrame-141"><a href="#DataFrame-141"><span class="linenos">141</span></a> <span class="o">...</span>
+</span><span id="DataFrame-113"><a href="#DataFrame-113"><span class="linenos">113</span></a> <span class="nd">@property</span>
+</span><span id="DataFrame-114"><a href="#DataFrame-114"><span class="linenos">114</span></a> <span class="k">def</span> <span class="nf">na</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameNaFunctions</span><span class="p">:</span>
+</span><span id="DataFrame-115"><a href="#DataFrame-115"><span class="linenos">115</span></a> <span class="k">return</span> <span class="n">DataFrameNaFunctions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="DataFrame-116"><a href="#DataFrame-116"><span class="linenos">116</span></a>
+</span><span id="DataFrame-117"><a href="#DataFrame-117"><span class="linenos">117</span></a> <span class="k">def</span> <span class="nf">_replace_cte_names_with_hashes</span><span class="p">(</span><span class="bp">self</span><span 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="DataFrame-118"><a href="#DataFrame-118"><span class="linenos">118</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="DataFrame-119"><a href="#DataFrame-119"><span class="linenos">119</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
+</span><span id="DataFrame-120"><a href="#DataFrame-120"><span class="linenos">120</span></a> <span class="n">old_name_id</span> <span class="o">=</span> <span class="n">cte</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">this</span>
+</span><span id="DataFrame-121"><a href="#DataFrame-121"><span class="linenos">121</span></a> <span class="n">new_hashed_id</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><span id="DataFrame-122"><a href="#DataFrame-122"><span class="linenos">122</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="p">),</span> <span class="n">quoted</span><span class="o">=</span><span class="n">old_name_id</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><span id="DataFrame-123"><a href="#DataFrame-123"><span class="linenos">123</span></a> <span class="p">)</span>
+</span><span id="DataFrame-124"><a href="#DataFrame-124"><span class="linenos">124</span></a> <span class="n">replacement_mapping</span><span class="p">[</span><span class="n">old_name_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_hashed_id</span>
+</span><span id="DataFrame-125"><a href="#DataFrame-125"><span class="linenos">125</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 class="n">replace_id_value</span><span class="p">,</span> <span class="n">replacement_mapping</span><span class="p">)</span>
+</span><span id="DataFrame-126"><a href="#DataFrame-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="DataFrame-127"><a href="#DataFrame-127"><span class="linenos">127</span></a>
+</span><span id="DataFrame-128"><a href="#DataFrame-128"><span class="linenos">128</span></a> <span class="k">def</span> <span class="nf">_create_cte_from_expression</span><span class="p">(</span>
+</span><span id="DataFrame-129"><a href="#DataFrame-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-130"><a href="#DataFrame-130"><span class="linenos">130</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="DataFrame-131"><a href="#DataFrame-131"><span class="linenos">131</span></a> <span class="n">branch_id</span><span 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="DataFrame-132"><a href="#DataFrame-132"><span class="linenos">132</span></a> <span class="n">sequence_id</span><span 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="DataFrame-133"><a href="#DataFrame-133"><span class="linenos">133</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataFrame-134"><a href="#DataFrame-134"><span class="linenos">134</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">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="DataFrame-135"><a href="#DataFrame-135"><span class="linenos">135</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-136"><a href="#DataFrame-136"><span class="linenos">136</span></a> <span class="n">expression_to_cte</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="DataFrame-137"><a href="#DataFrame-137"><span class="linenos">137</span></a> <span class="n">expression_to_cte</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="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame-138"><a href="#DataFrame-138"><span class="linenos">138</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">with_</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">as_</span><span class="o">=</span><span class="n">expression_to_cte</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">ctes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="DataFrame-139"><a href="#DataFrame-139"><span class="linenos">139</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;branch_id&quot;</span><span class="p">,</span> <span class="n">branch_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">branch_id</span><span class="p">)</span>
+</span><span id="DataFrame-140"><a href="#DataFrame-140"><span class="linenos">140</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sequence_id&quot;</span><span class="p">,</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">)</span>
+</span><span id="DataFrame-141"><a href="#DataFrame-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">cte</span><span class="p">,</span> <span class="n">name</span>
</span><span id="DataFrame-142"><a href="#DataFrame-142"><span class="linenos">142</span></a>
</span><span id="DataFrame-143"><a href="#DataFrame-143"><span class="linenos">143</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="DataFrame-144"><a href="#DataFrame-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">_ensure_list_of_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">:</span> <span class="n">ColumnOrLiteral</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">Column</span><span class="p">]:</span>
+</span><span id="DataFrame-144"><a href="#DataFrame-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">_ensure_list_of_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</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">ColumnOrLiteral</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">Column</span><span class="p">]:</span>
</span><span id="DataFrame-145"><a href="#DataFrame-145"><span class="linenos">145</span></a> <span class="o">...</span>
</span><span id="DataFrame-146"><a href="#DataFrame-146"><span class="linenos">146</span></a>
-</span><span id="DataFrame-147"><a href="#DataFrame-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">_ensure_list_of_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
-</span><span id="DataFrame-148"><a href="#DataFrame-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cols</span><span class="p">))</span>
-</span><span id="DataFrame-149"><a href="#DataFrame-149"><span class="linenos">149</span></a>
-</span><span id="DataFrame-150"><a href="#DataFrame-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">_ensure_and_normalize_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</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">Select</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="DataFrame-151"><a href="#DataFrame-151"><span class="linenos">151</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-152"><a href="#DataFrame-152"><span class="linenos">152</span></a> <span class="n">normalize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="p">,</span> <span class="n">expression</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-153"><a href="#DataFrame-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">cols</span>
-</span><span id="DataFrame-154"><a href="#DataFrame-154"><span class="linenos">154</span></a>
-</span><span id="DataFrame-155"><a href="#DataFrame-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">_ensure_and_normalize_col</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span>
-</span><span id="DataFrame-156"><a href="#DataFrame-156"><span class="linenos">156</span></a> <span class="n">col</span> <span class="o">=</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
-</span><span id="DataFrame-157"><a href="#DataFrame-157"><span class="linenos">157</span></a> <span class="n">normalize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spark</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">col</span><span class="p">)</span>
-</span><span id="DataFrame-158"><a href="#DataFrame-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">col</span>
-</span><span id="DataFrame-159"><a href="#DataFrame-159"><span class="linenos">159</span></a>
-</span><span id="DataFrame-160"><a href="#DataFrame-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">_convert_leaf_to_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence_id</span><span 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="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-161"><a href="#DataFrame-161"><span class="linenos">161</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_pending_hints</span><span class="p">()</span>
-</span><span id="DataFrame-162"><a href="#DataFrame-162"><span class="linenos">162</span></a> <span class="n">sequence_id</span> <span class="o">=</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="n">df</span><span class="o">.</span><span class="n">sequence_id</span>
-</span><span id="DataFrame-163"><a href="#DataFrame-163"><span class="linenos">163</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</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="DataFrame-164"><a href="#DataFrame-164"><span class="linenos">164</span></a> <span class="n">cte_expression</span><span class="p">,</span> <span class="n">cte_name</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_create_cte_from_expression</span><span class="p">(</span>
-</span><span id="DataFrame-165"><a href="#DataFrame-165"><span class="linenos">165</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">sequence_id</span><span class="o">=</span><span class="n">sequence_id</span>
-</span><span id="DataFrame-166"><a href="#DataFrame-166"><span class="linenos">166</span></a> <span class="p">)</span>
-</span><span id="DataFrame-167"><a href="#DataFrame-167"><span class="linenos">167</span></a> <span class="n">new_expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span>
-</span><span id="DataFrame-168"><a href="#DataFrame-168"><span class="linenos">168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(),</span> <span class="n">expression</span><span class="o">.</span><span class="n">ctes</span> <span class="o">+</span> <span class="p">[</span><span class="n">cte_expression</span><span class="p">]</span>
-</span><span id="DataFrame-169"><a href="#DataFrame-169"><span class="linenos">169</span></a> <span class="p">)</span>
-</span><span id="DataFrame-170"><a href="#DataFrame-170"><span class="linenos">170</span></a> <span class="n">sel_columns</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">cte_expression</span><span class="p">)</span>
-</span><span id="DataFrame-171"><a href="#DataFrame-171"><span class="linenos">171</span></a> <span class="n">new_expression</span> <span class="o">=</span> <span class="n">new_expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">cte_name</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
-</span><span id="DataFrame-172"><a href="#DataFrame-172"><span class="linenos">172</span></a> <span class="o">*</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">sel_columns</span><span class="p">]</span>
+</span><span id="DataFrame-147"><a href="#DataFrame-147"><span class="linenos">147</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="DataFrame-148"><a href="#DataFrame-148"><span class="linenos">148</span></a> <span class="k">def</span> <span class="nf">_ensure_list_of_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">:</span> <span class="n">ColumnOrLiteral</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">Column</span><span class="p">]:</span>
+</span><span id="DataFrame-149"><a href="#DataFrame-149"><span class="linenos">149</span></a> <span class="o">...</span>
+</span><span id="DataFrame-150"><a href="#DataFrame-150"><span class="linenos">150</span></a>
+</span><span id="DataFrame-151"><a href="#DataFrame-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">_ensure_list_of_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span>
+</span><span id="DataFrame-152"><a href="#DataFrame-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cols</span><span class="p">))</span>
+</span><span id="DataFrame-153"><a href="#DataFrame-153"><span class="linenos">153</span></a>
+</span><span id="DataFrame-154"><a href="#DataFrame-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">_ensure_and_normalize_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</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">Select</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="DataFrame-155"><a href="#DataFrame-155"><span class="linenos">155</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-156"><a href="#DataFrame-156"><span class="linenos">156</span></a> <span class="n">normalize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="p">,</span> <span class="n">expression</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-157"><a href="#DataFrame-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="n">cols</span>
+</span><span id="DataFrame-158"><a href="#DataFrame-158"><span class="linenos">158</span></a>
+</span><span id="DataFrame-159"><a href="#DataFrame-159"><span class="linenos">159</span></a> <span class="k">def</span> <span class="nf">_ensure_and_normalize_col</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span>
+</span><span id="DataFrame-160"><a href="#DataFrame-160"><span class="linenos">160</span></a> <span class="n">col</span> <span class="o">=</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
+</span><span id="DataFrame-161"><a href="#DataFrame-161"><span class="linenos">161</span></a> <span class="n">normalize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">spark</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">col</span><span class="p">)</span>
+</span><span id="DataFrame-162"><a href="#DataFrame-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">col</span>
+</span><span id="DataFrame-163"><a href="#DataFrame-163"><span class="linenos">163</span></a>
+</span><span id="DataFrame-164"><a href="#DataFrame-164"><span class="linenos">164</span></a> <span class="k">def</span> <span class="nf">_convert_leaf_to_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence_id</span><span 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="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-165"><a href="#DataFrame-165"><span class="linenos">165</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_pending_hints</span><span class="p">()</span>
+</span><span id="DataFrame-166"><a href="#DataFrame-166"><span class="linenos">166</span></a> <span class="n">sequence_id</span> <span class="o">=</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="n">df</span><span class="o">.</span><span class="n">sequence_id</span>
+</span><span id="DataFrame-167"><a href="#DataFrame-167"><span class="linenos">167</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</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="DataFrame-168"><a href="#DataFrame-168"><span class="linenos">168</span></a> <span class="n">cte_expression</span><span class="p">,</span> <span class="n">cte_name</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_create_cte_from_expression</span><span class="p">(</span>
+</span><span id="DataFrame-169"><a href="#DataFrame-169"><span class="linenos">169</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">sequence_id</span><span class="o">=</span><span class="n">sequence_id</span>
+</span><span id="DataFrame-170"><a href="#DataFrame-170"><span class="linenos">170</span></a> <span class="p">)</span>
+</span><span id="DataFrame-171"><a href="#DataFrame-171"><span class="linenos">171</span></a> <span class="n">new_expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span>
+</span><span id="DataFrame-172"><a href="#DataFrame-172"><span class="linenos">172</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(),</span> <span class="n">expression</span><span class="o">.</span><span class="n">ctes</span> <span class="o">+</span> <span class="p">[</span><span class="n">cte_expression</span><span class="p">]</span>
</span><span id="DataFrame-173"><a href="#DataFrame-173"><span class="linenos">173</span></a> <span class="p">)</span>
-</span><span id="DataFrame-174"><a href="#DataFrame-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="n">df</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">new_expression</span><span class="p">,</span> <span class="n">sequence_id</span><span class="o">=</span><span class="n">sequence_id</span><span class="p">)</span>
-</span><span id="DataFrame-175"><a href="#DataFrame-175"><span class="linenos">175</span></a>
-</span><span id="DataFrame-176"><a href="#DataFrame-176"><span class="linenos">176</span></a> <span class="k">def</span> <span class="nf">_resolve_pending_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-177"><a href="#DataFrame-177"><span class="linenos">177</span></a> <span class="n">df</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="DataFrame-178"><a href="#DataFrame-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span><span class="p">:</span>
-</span><span id="DataFrame-179"><a href="#DataFrame-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">df</span>
-</span><span id="DataFrame-180"><a href="#DataFrame-180"><span class="linenos">180</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="DataFrame-181"><a href="#DataFrame-181"><span class="linenos">181</span></a> <span class="n">hint_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;hint&quot;</span><span class="p">)</span> <span class="ow">or</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><span id="DataFrame-182"><a href="#DataFrame-182"><span class="linenos">182</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_partition_hints</span><span class="p">:</span>
-</span><span id="DataFrame-183"><a href="#DataFrame-183"><span class="linenos">183</span></a> <span class="n">hint_expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">hint</span><span class="p">)</span>
-</span><span id="DataFrame-184"><a href="#DataFrame-184"><span class="linenos">184</span></a> <span class="n">df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="DataFrame-185"><a href="#DataFrame-185"><span class="linenos">185</span></a>
-</span><span id="DataFrame-186"><a href="#DataFrame-186"><span class="linenos">186</span></a> <span class="n">join_aliases</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataFrame-187"><a href="#DataFrame-187"><span class="linenos">187</span></a> <span class="n">join_table</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-188"><a href="#DataFrame-188"><span class="linenos">188</span></a> <span class="k">for</span> <span class="n">join_table</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-189"><a href="#DataFrame-189"><span class="linenos">189</span></a> <span class="p">}</span>
-</span><span id="DataFrame-190"><a href="#DataFrame-190"><span class="linenos">190</span></a> <span class="k">if</span> <span class="n">join_aliases</span><span class="p">:</span>
-</span><span id="DataFrame-191"><a href="#DataFrame-191"><span class="linenos">191</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_join_hints</span><span class="p">:</span>
-</span><span id="DataFrame-192"><a href="#DataFrame-192"><span class="linenos">192</span></a> <span class="k">for</span> <span class="n">sequence_id_expression</span> <span class="ow">in</span> <span class="n">hint</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="DataFrame-193"><a href="#DataFrame-193"><span class="linenos">193</span></a> <span class="n">sequence_id_or_name</span> <span class="o">=</span> <span class="n">sequence_id_expression</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-194"><a href="#DataFrame-194"><span class="linenos">194</span></a> <span class="n">sequence_ids_to_match</span> <span class="o">=</span> <span class="p">[</span><span class="n">sequence_id_or_name</span><span class="p">]</span>
-</span><span id="DataFrame-195"><a href="#DataFrame-195"><span class="linenos">195</span></a> <span class="k">if</span> <span class="n">sequence_id_or_name</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</span><span class="p">:</span>
-</span><span id="DataFrame-196"><a href="#DataFrame-196"><span class="linenos">196</span></a> <span class="n">sequence_ids_to_match</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</span><span class="p">[</span>
-</span><span id="DataFrame-197"><a href="#DataFrame-197"><span class="linenos">197</span></a> <span class="n">sequence_id_or_name</span>
-</span><span id="DataFrame-198"><a href="#DataFrame-198"><span class="linenos">198</span></a> <span class="p">]</span>
-</span><span id="DataFrame-199"><a href="#DataFrame-199"><span class="linenos">199</span></a> <span class="n">matching_ctes</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-200"><a href="#DataFrame-200"><span class="linenos">200</span></a> <span class="n">cte</span>
-</span><span id="DataFrame-201"><a href="#DataFrame-201"><span class="linenos">201</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
-</span><span id="DataFrame-202"><a href="#DataFrame-202"><span class="linenos">202</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sequence_id&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">sequence_ids_to_match</span>
-</span><span id="DataFrame-203"><a href="#DataFrame-203"><span class="linenos">203</span></a> <span class="p">]</span>
-</span><span id="DataFrame-204"><a href="#DataFrame-204"><span class="linenos">204</span></a> <span class="k">for</span> <span class="n">matching_cte</span> <span class="ow">in</span> <span class="n">matching_ctes</span><span class="p">:</span>
-</span><span id="DataFrame-205"><a href="#DataFrame-205"><span class="linenos">205</span></a> <span class="k">if</span> <span class="n">matching_cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">join_aliases</span><span class="p">:</span>
-</span><span id="DataFrame-206"><a href="#DataFrame-206"><span class="linenos">206</span></a> <span class="n">sequence_id_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">matching_cte</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">this</span><span class="p">)</span>
-</span><span id="DataFrame-207"><a href="#DataFrame-207"><span class="linenos">207</span></a> <span class="n">df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="DataFrame-208"><a href="#DataFrame-208"><span class="linenos">208</span></a> <span class="k">break</span>
-</span><span id="DataFrame-209"><a href="#DataFrame-209"><span class="linenos">209</span></a> <span class="n">hint_expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">hint</span><span class="p">)</span>
-</span><span id="DataFrame-210"><a href="#DataFrame-210"><span class="linenos">210</span></a> <span class="k">if</span> <span class="n">hint_expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="DataFrame-211"><a href="#DataFrame-211"><span class="linenos">211</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hint&quot;</span><span class="p">,</span> <span class="n">hint_expression</span><span class="p">)</span>
-</span><span id="DataFrame-212"><a href="#DataFrame-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="n">df</span>
-</span><span id="DataFrame-213"><a href="#DataFrame-213"><span class="linenos">213</span></a>
-</span><span id="DataFrame-214"><a href="#DataFrame-214"><span class="linenos">214</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 class="n">hint_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-215"><a href="#DataFrame-215"><span class="linenos">215</span></a> <span class="n">hint_name</span> <span class="o">=</span> <span class="n">hint_name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="DataFrame-216"><a href="#DataFrame-216"><span class="linenos">216</span></a> <span class="n">hint_expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame-217"><a href="#DataFrame-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span>
-</span><span id="DataFrame-218"><a href="#DataFrame-218"><span class="linenos">218</span></a> <span class="n">this</span><span class="o">=</span><span class="n">hint_name</span><span class="p">,</span>
-</span><span id="DataFrame-219"><a href="#DataFrame-219"><span class="linenos">219</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">to_table</span><span class="p">(</span><span class="n">parameter</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">parameter</span> <span class="ow">in</span> <span class="n">args</span><span class="p">],</span>
-</span><span id="DataFrame-220"><a href="#DataFrame-220"><span class="linenos">220</span></a> <span class="p">)</span>
-</span><span id="DataFrame-221"><a href="#DataFrame-221"><span class="linenos">221</span></a> <span class="k">if</span> <span class="n">hint_name</span> <span class="ow">in</span> <span class="n">JOIN_HINTS</span>
-</span><span id="DataFrame-222"><a href="#DataFrame-222"><span class="linenos">222</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">(</span>
-</span><span id="DataFrame-223"><a href="#DataFrame-223"><span class="linenos">223</span></a> <span class="n">this</span><span class="o">=</span><span class="n">hint_name</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">parameter</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">parameter</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="DataFrame-174"><a href="#DataFrame-174"><span class="linenos">174</span></a> <span class="n">sel_columns</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">cte_expression</span><span class="p">)</span>
+</span><span id="DataFrame-175"><a href="#DataFrame-175"><span class="linenos">175</span></a> <span class="n">new_expression</span> <span class="o">=</span> <span class="n">new_expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">cte_name</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
+</span><span id="DataFrame-176"><a href="#DataFrame-176"><span class="linenos">176</span></a> <span class="o">*</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">sel_columns</span><span class="p">]</span>
+</span><span id="DataFrame-177"><a href="#DataFrame-177"><span class="linenos">177</span></a> <span class="p">)</span>
+</span><span id="DataFrame-178"><a href="#DataFrame-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">df</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">new_expression</span><span class="p">,</span> <span class="n">sequence_id</span><span class="o">=</span><span class="n">sequence_id</span><span class="p">)</span>
+</span><span id="DataFrame-179"><a href="#DataFrame-179"><span class="linenos">179</span></a>
+</span><span id="DataFrame-180"><a href="#DataFrame-180"><span class="linenos">180</span></a> <span class="k">def</span> <span class="nf">_resolve_pending_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-181"><a href="#DataFrame-181"><span class="linenos">181</span></a> <span class="n">df</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="DataFrame-182"><a href="#DataFrame-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span><span class="p">:</span>
+</span><span id="DataFrame-183"><a href="#DataFrame-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="n">df</span>
+</span><span id="DataFrame-184"><a href="#DataFrame-184"><span class="linenos">184</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="DataFrame-185"><a href="#DataFrame-185"><span class="linenos">185</span></a> <span class="n">hint_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;hint&quot;</span><span class="p">)</span> <span class="ow">or</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><span id="DataFrame-186"><a href="#DataFrame-186"><span class="linenos">186</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_partition_hints</span><span class="p">:</span>
+</span><span id="DataFrame-187"><a href="#DataFrame-187"><span class="linenos">187</span></a> <span class="n">hint_expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">hint</span><span class="p">)</span>
+</span><span id="DataFrame-188"><a href="#DataFrame-188"><span class="linenos">188</span></a> <span class="n">df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="DataFrame-189"><a href="#DataFrame-189"><span class="linenos">189</span></a>
+</span><span id="DataFrame-190"><a href="#DataFrame-190"><span class="linenos">190</span></a> <span class="n">join_aliases</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataFrame-191"><a href="#DataFrame-191"><span class="linenos">191</span></a> <span class="n">join_table</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-192"><a href="#DataFrame-192"><span class="linenos">192</span></a> <span class="k">for</span> <span class="n">join_table</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-193"><a href="#DataFrame-193"><span class="linenos">193</span></a> <span class="p">}</span>
+</span><span id="DataFrame-194"><a href="#DataFrame-194"><span class="linenos">194</span></a> <span class="k">if</span> <span class="n">join_aliases</span><span class="p">:</span>
+</span><span id="DataFrame-195"><a href="#DataFrame-195"><span class="linenos">195</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_join_hints</span><span class="p">:</span>
+</span><span id="DataFrame-196"><a href="#DataFrame-196"><span class="linenos">196</span></a> <span class="k">for</span> <span class="n">sequence_id_expression</span> <span class="ow">in</span> <span class="n">hint</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="DataFrame-197"><a href="#DataFrame-197"><span class="linenos">197</span></a> <span class="n">sequence_id_or_name</span> <span class="o">=</span> <span class="n">sequence_id_expression</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-198"><a href="#DataFrame-198"><span class="linenos">198</span></a> <span class="n">sequence_ids_to_match</span> <span class="o">=</span> <span class="p">[</span><span class="n">sequence_id_or_name</span><span class="p">]</span>
+</span><span id="DataFrame-199"><a href="#DataFrame-199"><span class="linenos">199</span></a> <span class="k">if</span> <span class="n">sequence_id_or_name</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</span><span class="p">:</span>
+</span><span id="DataFrame-200"><a href="#DataFrame-200"><span class="linenos">200</span></a> <span class="n">sequence_ids_to_match</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">name_to_sequence_id_mapping</span><span class="p">[</span>
+</span><span id="DataFrame-201"><a href="#DataFrame-201"><span class="linenos">201</span></a> <span class="n">sequence_id_or_name</span>
+</span><span id="DataFrame-202"><a href="#DataFrame-202"><span class="linenos">202</span></a> <span class="p">]</span>
+</span><span id="DataFrame-203"><a href="#DataFrame-203"><span class="linenos">203</span></a> <span class="n">matching_ctes</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-204"><a href="#DataFrame-204"><span class="linenos">204</span></a> <span class="n">cte</span>
+</span><span id="DataFrame-205"><a href="#DataFrame-205"><span class="linenos">205</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
+</span><span id="DataFrame-206"><a href="#DataFrame-206"><span class="linenos">206</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sequence_id&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">sequence_ids_to_match</span>
+</span><span id="DataFrame-207"><a href="#DataFrame-207"><span class="linenos">207</span></a> <span class="p">]</span>
+</span><span id="DataFrame-208"><a href="#DataFrame-208"><span class="linenos">208</span></a> <span class="k">for</span> <span class="n">matching_cte</span> <span class="ow">in</span> <span class="n">matching_ctes</span><span class="p">:</span>
+</span><span id="DataFrame-209"><a href="#DataFrame-209"><span class="linenos">209</span></a> <span class="k">if</span> <span class="n">matching_cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">join_aliases</span><span class="p">:</span>
+</span><span id="DataFrame-210"><a href="#DataFrame-210"><span class="linenos">210</span></a> <span class="n">sequence_id_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">matching_cte</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">this</span><span class="p">)</span>
+</span><span id="DataFrame-211"><a href="#DataFrame-211"><span class="linenos">211</span></a> <span class="n">df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="DataFrame-212"><a href="#DataFrame-212"><span class="linenos">212</span></a> <span class="k">break</span>
+</span><span id="DataFrame-213"><a href="#DataFrame-213"><span class="linenos">213</span></a> <span class="n">hint_expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">hint</span><span class="p">)</span>
+</span><span id="DataFrame-214"><a href="#DataFrame-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="n">hint_expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="DataFrame-215"><a href="#DataFrame-215"><span class="linenos">215</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hint&quot;</span><span class="p">,</span> <span class="n">hint_expression</span><span class="p">)</span>
+</span><span id="DataFrame-216"><a href="#DataFrame-216"><span class="linenos">216</span></a> <span class="k">return</span> <span class="n">df</span>
+</span><span id="DataFrame-217"><a href="#DataFrame-217"><span class="linenos">217</span></a>
+</span><span id="DataFrame-218"><a href="#DataFrame-218"><span class="linenos">218</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 class="n">hint_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-219"><a href="#DataFrame-219"><span class="linenos">219</span></a> <span class="n">hint_name</span> <span class="o">=</span> <span class="n">hint_name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="DataFrame-220"><a href="#DataFrame-220"><span class="linenos">220</span></a> <span class="n">hint_expression</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame-221"><a href="#DataFrame-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span>
+</span><span id="DataFrame-222"><a href="#DataFrame-222"><span class="linenos">222</span></a> <span class="n">this</span><span class="o">=</span><span class="n">hint_name</span><span class="p">,</span>
+</span><span id="DataFrame-223"><a href="#DataFrame-223"><span class="linenos">223</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">to_table</span><span class="p">(</span><span class="n">parameter</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">parameter</span> <span class="ow">in</span> <span class="n">args</span><span class="p">],</span>
</span><span id="DataFrame-224"><a href="#DataFrame-224"><span class="linenos">224</span></a> <span class="p">)</span>
-</span><span id="DataFrame-225"><a href="#DataFrame-225"><span class="linenos">225</span></a> <span class="p">)</span>
-</span><span id="DataFrame-226"><a href="#DataFrame-226"><span class="linenos">226</span></a> <span class="n">new_df</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="DataFrame-227"><a href="#DataFrame-227"><span class="linenos">227</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint_expression</span><span class="p">)</span>
-</span><span id="DataFrame-228"><a href="#DataFrame-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="n">new_df</span>
-</span><span id="DataFrame-229"><a href="#DataFrame-229"><span class="linenos">229</span></a>
-</span><span id="DataFrame-230"><a href="#DataFrame-230"><span class="linenos">230</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">klass</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span> <span class="n">distinct</span><span class="p">:</span> <span class="nb">bool</span><span class="p">):</span>
-</span><span id="DataFrame-231"><a href="#DataFrame-231"><span class="linenos">231</span></a> <span class="n">other_df</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="DataFrame-232"><a href="#DataFrame-232"><span class="linenos">232</span></a> <span class="n">base_expression</span> <span class="o">=</span> <span class="bp">self</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="DataFrame-233"><a href="#DataFrame-233"><span class="linenos">233</span></a> <span class="n">base_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span><span class="n">base_expression</span><span class="p">,</span> <span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
-</span><span id="DataFrame-234"><a href="#DataFrame-234"><span class="linenos">234</span></a> <span class="n">all_ctes</span> <span class="o">=</span> <span class="n">base_expression</span><span class="o">.</span><span class="n">ctes</span>
-</span><span id="DataFrame-235"><a href="#DataFrame-235"><span class="linenos">235</span></a> <span class="n">other_df</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;with&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame-236"><a href="#DataFrame-236"><span class="linenos">236</span></a> <span class="n">base_expression</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="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame-237"><a href="#DataFrame-237"><span class="linenos">237</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">klass</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">base_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">expression</span><span class="o">=</span><span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-238"><a href="#DataFrame-238"><span class="linenos">238</span></a> <span class="n">operation</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">all_ctes</span><span class="p">))</span>
-</span><span id="DataFrame-239"><a href="#DataFrame-239"><span class="linenos">239</span></a> <span class="k">return</span> <span class="bp">self</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">operation</span><span class="p">)</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="DataFrame-240"><a href="#DataFrame-240"><span class="linenos">240</span></a>
-</span><span id="DataFrame-241"><a href="#DataFrame-241"><span class="linenos">241</span></a> <span class="k">def</span> <span class="nf">_cache</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storage_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="DataFrame-242"><a href="#DataFrame-242"><span class="linenos">242</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="DataFrame-243"><a href="#DataFrame-243"><span class="linenos">243</span></a> <span class="n">df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</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">set</span><span class="p">(</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">,</span> <span class="n">storage_level</span><span class="p">)</span>
-</span><span id="DataFrame-244"><a href="#DataFrame-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">df</span>
-</span><span id="DataFrame-245"><a href="#DataFrame-245"><span class="linenos">245</span></a>
-</span><span id="DataFrame-246"><a href="#DataFrame-246"><span class="linenos">246</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataFrame-247"><a href="#DataFrame-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">_add_ctes_to_expression</span><span class="p">(</span><span class="bp">cls</span><span 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="n">ctes</span><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">CTE</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span>
-</span><span id="DataFrame-248"><a href="#DataFrame-248"><span class="linenos">248</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="DataFrame-249"><a href="#DataFrame-249"><span class="linenos">249</span></a> <span class="n">with_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;with&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-250"><a href="#DataFrame-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="n">with_expression</span><span class="p">:</span>
-</span><span id="DataFrame-251"><a href="#DataFrame-251"><span class="linenos">251</span></a> <span class="n">existing_ctes</span> <span class="o">=</span> <span class="n">with_expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="DataFrame-252"><a href="#DataFrame-252"><span class="linenos">252</span></a> <span class="n">existsing_cte_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">existing_ctes</span><span class="p">}</span>
-</span><span id="DataFrame-253"><a href="#DataFrame-253"><span class="linenos">253</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">ctes</span><span class="p">:</span>
-</span><span id="DataFrame-254"><a href="#DataFrame-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">existsing_cte_names</span><span class="p">:</span>
-</span><span id="DataFrame-255"><a href="#DataFrame-255"><span class="linenos">255</span></a> <span class="n">existing_ctes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cte</span><span class="p">)</span>
-</span><span id="DataFrame-256"><a href="#DataFrame-256"><span class="linenos">256</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-257"><a href="#DataFrame-257"><span class="linenos">257</span></a> <span class="n">existing_ctes</span> <span class="o">=</span> <span class="n">ctes</span>
-</span><span id="DataFrame-258"><a href="#DataFrame-258"><span class="linenos">258</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">existing_ctes</span><span class="p">))</span>
-</span><span id="DataFrame-259"><a href="#DataFrame-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="DataFrame-260"><a href="#DataFrame-260"><span class="linenos">260</span></a>
-</span><span id="DataFrame-261"><a href="#DataFrame-261"><span class="linenos">261</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataFrame-262"><a href="#DataFrame-262"><span class="linenos">262</span></a> <span class="k">def</span> <span class="nf">_get_outer_select_columns</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">DataFrame</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">Column</span><span class="p">]:</span>
-</span><span id="DataFrame-263"><a href="#DataFrame-263"><span class="linenos">263</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">item</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">item</span><span class="p">,</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
-</span><span id="DataFrame-264"><a href="#DataFrame-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">Column</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="p">(</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">Select</span><span class="p">)</span> <span class="ow">or</span> <span class="n">exp</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><span id="DataFrame-265"><a href="#DataFrame-265"><span class="linenos">265</span></a>
-</span><span id="DataFrame-266"><a href="#DataFrame-266"><span class="linenos">266</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataFrame-267"><a href="#DataFrame-267"><span class="linenos">267</span></a> <span class="k">def</span> <span class="nf">_create_hash_from_expression</span><span class="p">(</span><span class="bp">cls</span><span 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="DataFrame-268"><a href="#DataFrame-268"><span class="linenos">268</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</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="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-269"><a href="#DataFrame-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;t</span><span class="si">{</span><span class="n">zlib</span><span class="o">.</span><span class="n">crc32</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">[:</span><span class="mi">6</span><span class="p">]</span>
-</span><span id="DataFrame-270"><a href="#DataFrame-270"><span class="linenos">270</span></a>
-</span><span id="DataFrame-271"><a href="#DataFrame-271"><span class="linenos">271</span></a> <span class="k">def</span> <span class="nf">_get_select_expressions</span><span class="p">(</span>
-</span><span id="DataFrame-272"><a href="#DataFrame-272"><span class="linenos">272</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-273"><a href="#DataFrame-273"><span class="linenos">273</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">Tuple</span><span class="p">[</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">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">],</span> <span class="n">OutputExpressionContainer</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="DataFrame-274"><a href="#DataFrame-274"><span class="linenos">274</span></a> <span class="n">select_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><span id="DataFrame-275"><a href="#DataFrame-275"><span class="linenos">275</span></a> <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">Union</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">Cache</span><span class="p">],</span> <span class="n">OutputExpressionContainer</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="DataFrame-276"><a href="#DataFrame-276"><span class="linenos">276</span></a> <span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame-277"><a href="#DataFrame-277"><span class="linenos">277</span></a> <span class="n">main_select_ctes</span><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">CTE</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame-278"><a href="#DataFrame-278"><span class="linenos">278</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
-</span><span id="DataFrame-279"><a href="#DataFrame-279"><span class="linenos">279</span></a> <span class="n">cache_storage_level</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-280"><a href="#DataFrame-280"><span class="linenos">280</span></a> <span class="k">if</span> <span class="n">cache_storage_level</span><span class="p">:</span>
-</span><span id="DataFrame-281"><a href="#DataFrame-281"><span class="linenos">281</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-282"><a href="#DataFrame-282"><span class="linenos">282</span></a> <span class="n">select_expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">copy</span><span class="p">(</span><span class="n">main_select_ctes</span><span class="p">)))</span>
-</span><span id="DataFrame-283"><a href="#DataFrame-283"><span class="linenos">283</span></a> <span class="n">select_expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cte_alias_name&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame-284"><a href="#DataFrame-284"><span class="linenos">284</span></a> <span class="n">select_expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">,</span> <span class="n">cache_storage_level</span><span class="p">)</span>
-</span><span id="DataFrame-285"><a href="#DataFrame-285"><span class="linenos">285</span></a> <span class="n">select_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">Cache</span><span class="p">,</span> <span class="n">select_expression</span><span class="p">))</span>
-</span><span id="DataFrame-286"><a href="#DataFrame-286"><span class="linenos">286</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-287"><a href="#DataFrame-287"><span class="linenos">287</span></a> <span class="n">main_select_ctes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cte</span><span class="p">)</span>
-</span><span id="DataFrame-288"><a href="#DataFrame-288"><span class="linenos">288</span></a> <span class="n">main_select</span> <span class="o">=</span> <span class="bp">self</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="DataFrame-289"><a href="#DataFrame-289"><span class="linenos">289</span></a> <span class="k">if</span> <span class="n">main_select_ctes</span><span class="p">:</span>
-</span><span id="DataFrame-290"><a href="#DataFrame-290"><span class="linenos">290</span></a> <span class="n">main_select</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">main_select_ctes</span><span class="p">))</span>
-</span><span id="DataFrame-291"><a href="#DataFrame-291"><span class="linenos">291</span></a> <span class="n">expression_select_pair</span> <span class="o">=</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">output_expression_container</span><span class="p">),</span> <span class="n">main_select</span><span class="p">)</span>
-</span><span id="DataFrame-292"><a href="#DataFrame-292"><span class="linenos">292</span></a> <span class="n">select_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expression_select_pair</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="DataFrame-293"><a href="#DataFrame-293"><span class="linenos">293</span></a> <span class="k">return</span> <span class="n">select_expressions</span>
-</span><span id="DataFrame-294"><a href="#DataFrame-294"><span class="linenos">294</span></a>
-</span><span id="DataFrame-295"><a href="#DataFrame-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</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">optimize</span><span class="o">=</span><span class="kc">True</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="DataFrame-296"><a href="#DataFrame-296"><span class="linenos">296</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_pending_hints</span><span class="p">()</span>
-</span><span id="DataFrame-297"><a href="#DataFrame-297"><span class="linenos">297</span></a> <span class="n">select_expressions</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_get_select_expressions</span><span class="p">()</span>
-</span><span id="DataFrame-298"><a href="#DataFrame-298"><span class="linenos">298</span></a> <span class="n">output_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">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame-299"><a href="#DataFrame-299"><span class="linenos">299</span></a> <span class="n">replacement_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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><span id="DataFrame-300"><a href="#DataFrame-300"><span class="linenos">300</span></a> <span class="k">for</span> <span class="n">expression_type</span><span class="p">,</span> <span class="n">select_expression</span> <span class="ow">in</span> <span class="n">select_expressions</span><span class="p">:</span>
-</span><span id="DataFrame-301"><a href="#DataFrame-301"><span class="linenos">301</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">replace_id_value</span><span class="p">,</span> <span class="n">replacement_mapping</span><span class="p">)</span>
-</span><span id="DataFrame-302"><a href="#DataFrame-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="n">optimize</span><span class="p">:</span>
-</span><span id="DataFrame-303"><a href="#DataFrame-303"><span class="linenos">303</span></a> <span class="n">select_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">Select</span><span class="p">,</span> <span class="n">optimize_func</span><span class="p">(</span><span class="n">select_expression</span><span class="p">))</span>
-</span><span id="DataFrame-304"><a href="#DataFrame-304"><span class="linenos">304</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_replace_cte_names_with_hashes</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
-</span><span id="DataFrame-305"><a href="#DataFrame-305"><span class="linenos">305</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]</span>
-</span><span id="DataFrame-306"><a href="#DataFrame-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">:</span>
-</span><span id="DataFrame-307"><a href="#DataFrame-307"><span class="linenos">307</span></a> <span class="n">cache_table_name</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
-</span><span id="DataFrame-308"><a href="#DataFrame-308"><span class="linenos">308</span></a> <span class="n">cache_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">cache_table_name</span><span class="p">)</span>
-</span><span id="DataFrame-309"><a href="#DataFrame-309"><span class="linenos">309</span></a> <span class="n">original_alias_name</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cte_alias_name&quot;</span><span class="p">]</span>
-</span><span id="DataFrame-310"><a href="#DataFrame-310"><span class="linenos">310</span></a>
-</span><span id="DataFrame-311"><a href="#DataFrame-311"><span class="linenos">311</span></a> <span class="n">replacement_mapping</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">original_alias_name</span><span class="p">)]</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="c1"># type: ignore</span>
-</span><span id="DataFrame-312"><a href="#DataFrame-312"><span class="linenos">312</span></a> <span class="n">cache_table_name</span>
-</span><span id="DataFrame-313"><a href="#DataFrame-313"><span class="linenos">313</span></a> <span class="p">)</span>
-</span><span id="DataFrame-314"><a href="#DataFrame-314"><span class="linenos">314</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span>
-</span><span id="DataFrame-315"><a href="#DataFrame-315"><span class="linenos">315</span></a> <span class="n">cache_table_name</span><span class="p">,</span>
-</span><span id="DataFrame-316"><a href="#DataFrame-316"><span class="linenos">316</span></a> <span class="p">{</span>
-</span><span id="DataFrame-317"><a href="#DataFrame-317"><span class="linenos">317</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-318"><a href="#DataFrame-318"><span class="linenos">318</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="DataFrame-319"><a href="#DataFrame-319"><span class="linenos">319</span></a> <span class="p">},</span>
-</span><span id="DataFrame-320"><a href="#DataFrame-320"><span class="linenos">320</span></a> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">,</span>
-</span><span id="DataFrame-321"><a href="#DataFrame-321"><span class="linenos">321</span></a> <span class="p">)</span>
-</span><span id="DataFrame-322"><a href="#DataFrame-322"><span class="linenos">322</span></a> <span class="n">cache_storage_level</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">]</span>
-</span><span id="DataFrame-323"><a href="#DataFrame-323"><span class="linenos">323</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-324"><a href="#DataFrame-324"><span class="linenos">324</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="s2">&quot;storageLevel&quot;</span><span class="p">),</span>
-</span><span id="DataFrame-325"><a href="#DataFrame-325"><span class="linenos">325</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">cache_storage_level</span><span class="p">),</span>
-</span><span id="DataFrame-326"><a href="#DataFrame-326"><span class="linenos">326</span></a> <span class="p">]</span>
-</span><span id="DataFrame-327"><a href="#DataFrame-327"><span class="linenos">327</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">(</span>
-</span><span id="DataFrame-328"><a href="#DataFrame-328"><span class="linenos">328</span></a> <span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">select_expression</span><span class="p">,</span> <span class="n">lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span>
-</span><span id="DataFrame-329"><a href="#DataFrame-329"><span class="linenos">329</span></a> <span class="p">)</span>
-</span><span id="DataFrame-330"><a href="#DataFrame-330"><span class="linenos">330</span></a> <span class="c1"># We will drop the &quot;view&quot; if it exists before running the cache table</span>
-</span><span id="DataFrame-331"><a href="#DataFrame-331"><span class="linenos">331</span></a> <span class="n">output_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">Drop</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;VIEW&quot;</span><span class="p">))</span>
-</span><span id="DataFrame-332"><a href="#DataFrame-332"><span class="linenos">332</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span>
-</span><span id="DataFrame-333"><a href="#DataFrame-333"><span class="linenos">333</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-334"><a href="#DataFrame-334"><span class="linenos">334</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">select_expression</span><span class="p">)</span>
-</span><span id="DataFrame-335"><a href="#DataFrame-335"><span class="linenos">335</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">:</span>
-</span><span id="DataFrame-336"><a href="#DataFrame-336"><span class="linenos">336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-337"><a href="#DataFrame-337"><span class="linenos">337</span></a> <span class="n">select_without_ctes</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-338"><a href="#DataFrame-338"><span class="linenos">338</span></a> <span class="n">select_without_ctes</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="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame-339"><a href="#DataFrame-339"><span class="linenos">339</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">select_without_ctes</span><span class="p">)</span>
-</span><span id="DataFrame-340"><a href="#DataFrame-340"><span class="linenos">340</span></a> <span class="k">if</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
-</span><span id="DataFrame-341"><a href="#DataFrame-341"><span class="linenos">341</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">))</span>
-</span><span id="DataFrame-342"><a href="#DataFrame-342"><span class="linenos">342</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span>
-</span><span id="DataFrame-343"><a href="#DataFrame-343"><span class="linenos">343</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">select_expression</span>
-</span><span id="DataFrame-344"><a href="#DataFrame-344"><span class="linenos">344</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-345"><a href="#DataFrame-345"><span class="linenos">345</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 expression type: </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="DataFrame-346"><a href="#DataFrame-346"><span class="linenos">346</span></a> <span class="n">output_expressions</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="DataFrame-347"><a href="#DataFrame-347"><span class="linenos">347</span></a>
-</span><span id="DataFrame-348"><a href="#DataFrame-348"><span class="linenos">348</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="DataFrame-349"><a href="#DataFrame-349"><span class="linenos">349</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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">kwargs</span><span class="p">})</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">output_expressions</span>
-</span><span id="DataFrame-350"><a href="#DataFrame-350"><span class="linenos">350</span></a> <span class="p">]</span>
-</span><span id="DataFrame-351"><a href="#DataFrame-351"><span class="linenos">351</span></a>
-</span><span id="DataFrame-352"><a href="#DataFrame-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-353"><a href="#DataFrame-353"><span class="linenos">353</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="o">**</span><span class="n">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
-</span><span id="DataFrame-354"><a href="#DataFrame-354"><span class="linenos">354</span></a>
-</span><span id="DataFrame-355"><a href="#DataFrame-355"><span class="linenos">355</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-356"><a href="#DataFrame-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-357"><a href="#DataFrame-357"><span class="linenos">357</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-358"><a href="#DataFrame-358"><span class="linenos">358</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;append&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame-359"><a href="#DataFrame-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="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><span id="DataFrame-360"><a href="#DataFrame-360"><span class="linenos">360</span></a> <span class="n">ambiguous_cols</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-361"><a href="#DataFrame-361"><span class="linenos">361</span></a> <span class="n">col</span>
-</span><span id="DataFrame-362"><a href="#DataFrame-362"><span class="linenos">362</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span>
-</span><span id="DataFrame-363"><a href="#DataFrame-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">column_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="ow">and</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">column_expression</span><span class="o">.</span><span class="n">table</span>
-</span><span id="DataFrame-364"><a href="#DataFrame-364"><span class="linenos">364</span></a> <span class="p">]</span>
-</span><span id="DataFrame-365"><a href="#DataFrame-365"><span class="linenos">365</span></a> <span class="k">if</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
-</span><span id="DataFrame-366"><a href="#DataFrame-366"><span class="linenos">366</span></a> <span class="n">join_table_identifiers</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-367"><a href="#DataFrame-367"><span class="linenos">367</span></a> <span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</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="DataFrame-368"><a href="#DataFrame-368"><span class="linenos">368</span></a> <span class="p">]</span>
-</span><span id="DataFrame-369"><a href="#DataFrame-369"><span class="linenos">369</span></a> <span class="n">cte_names_in_join</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">join_table_identifiers</span><span class="p">]</span>
-</span><span id="DataFrame-370"><a href="#DataFrame-370"><span class="linenos">370</span></a> <span class="c1"># If we have columns that resolve to multiple CTE expressions then we want to use each CTE left-to-right</span>
-</span><span id="DataFrame-371"><a href="#DataFrame-371"><span class="linenos">371</span></a> <span class="c1"># and therefore we allow multiple columns with the same name in the result. This matches the behavior</span>
-</span><span id="DataFrame-372"><a href="#DataFrame-372"><span class="linenos">372</span></a> <span class="c1"># of Spark.</span>
-</span><span id="DataFrame-373"><a href="#DataFrame-373"><span class="linenos">373</span></a> <span class="n">resolved_column_position</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">Column</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">}</span>
-</span><span id="DataFrame-374"><a href="#DataFrame-374"><span class="linenos">374</span></a> <span class="k">for</span> <span class="n">ambiguous_col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
-</span><span id="DataFrame-375"><a href="#DataFrame-375"><span class="linenos">375</span></a> <span class="n">ctes_with_column</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-376"><a href="#DataFrame-376"><span class="linenos">376</span></a> <span class="n">cte</span>
-</span><span id="DataFrame-377"><a href="#DataFrame-377"><span class="linenos">377</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span>
-</span><span id="DataFrame-378"><a href="#DataFrame-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte_names_in_join</span>
-</span><span id="DataFrame-379"><a href="#DataFrame-379"><span class="linenos">379</span></a> <span class="ow">and</span> <span class="n">ambiguous_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span>
-</span><span id="DataFrame-380"><a href="#DataFrame-380"><span class="linenos">380</span></a> <span class="p">]</span>
-</span><span id="DataFrame-381"><a href="#DataFrame-381"><span class="linenos">381</span></a> <span class="c1"># Check if there is a CTE with this column that we haven&#39;t used before. If so, use it. Otherwise,</span>
-</span><span id="DataFrame-382"><a href="#DataFrame-382"><span class="linenos">382</span></a> <span class="c1"># use the same CTE we used before</span>
-</span><span id="DataFrame-383"><a href="#DataFrame-383"><span class="linenos">383</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">ctes_with_column</span><span class="p">,</span> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="DataFrame-384"><a href="#DataFrame-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
-</span><span id="DataFrame-385"><a href="#DataFrame-385"><span class="linenos">385</span></a> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="DataFrame-386"><a href="#DataFrame-386"><span class="linenos">386</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-387"><a href="#DataFrame-387"><span class="linenos">387</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">ctes_with_column</span><span class="p">[</span><span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]]</span>
-</span><span id="DataFrame-388"><a href="#DataFrame-388"><span class="linenos">388</span></a> <span class="n">ambiguous_col</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;table&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame-389"><a href="#DataFrame-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span>
-</span><span id="DataFrame-390"><a href="#DataFrame-390"><span class="linenos">390</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span>
-</span><span id="DataFrame-391"><a href="#DataFrame-391"><span class="linenos">391</span></a> <span class="p">)</span>
-</span><span id="DataFrame-392"><a href="#DataFrame-392"><span class="linenos">392</span></a>
-</span><span id="DataFrame-393"><a href="#DataFrame-393"><span class="linenos">393</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame-394"><a href="#DataFrame-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">alias</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">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-395"><a href="#DataFrame-395"><span class="linenos">395</span></a> <span class="n">new_sequence_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
-</span><span id="DataFrame-396"><a href="#DataFrame-396"><span class="linenos">396</span></a> <span class="n">df</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="DataFrame-397"><a href="#DataFrame-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">join_hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_join_hints</span><span class="p">:</span>
-</span><span id="DataFrame-398"><a href="#DataFrame-398"><span class="linenos">398</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">join_hint</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="DataFrame-399"><a href="#DataFrame-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">:</span>
-</span><span id="DataFrame-400"><a href="#DataFrame-400"><span class="linenos">400</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">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">new_sequence_id</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-401"><a href="#DataFrame-401"><span class="linenos">401</span></a> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_add_alias_to_mapping</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">new_sequence_id</span><span class="p">)</span>
-</span><span id="DataFrame-402"><a href="#DataFrame-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">(</span><span class="n">sequence_id</span><span class="o">=</span><span class="n">new_sequence_id</span><span class="p">)</span>
-</span><span id="DataFrame-403"><a href="#DataFrame-403"><span class="linenos">403</span></a>
-</span><span id="DataFrame-404"><a href="#DataFrame-404"><span class="linenos">404</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
-</span><span id="DataFrame-405"><a href="#DataFrame-405"><span class="linenos">405</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="n">column</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">Column</span><span class="p">,</span> <span class="nb">bool</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-406"><a href="#DataFrame-406"><span class="linenos">406</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
-</span><span id="DataFrame-407"><a href="#DataFrame-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="DataFrame-408"><a href="#DataFrame-408"><span class="linenos">408</span></a>
-</span><span id="DataFrame-409"><a href="#DataFrame-409"><span class="linenos">409</span></a> <span class="nb">filter</span> <span class="o">=</span> <span class="n">where</span>
-</span><span id="DataFrame-410"><a href="#DataFrame-410"><span class="linenos">410</span></a>
-</span><span id="DataFrame-411"><a href="#DataFrame-411"><span class="linenos">411</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">)</span>
-</span><span id="DataFrame-412"><a href="#DataFrame-412"><span class="linenos">412</span></a> <span class="k">def</span> <span class="nf">groupBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">GroupedData</span><span class="p">:</span>
-</span><span id="DataFrame-413"><a href="#DataFrame-413"><span class="linenos">413</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-414"><a href="#DataFrame-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">GroupedData</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span><span class="p">)</span>
-</span><span id="DataFrame-415"><a href="#DataFrame-415"><span class="linenos">415</span></a>
-</span><span id="DataFrame-416"><a href="#DataFrame-416"><span class="linenos">416</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-417"><a href="#DataFrame-417"><span class="linenos">417</span></a> <span class="k">def</span> <span class="nf">agg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exprs</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-418"><a href="#DataFrame-418"><span class="linenos">418</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">exprs</span><span class="p">)</span>
-</span><span id="DataFrame-419"><a href="#DataFrame-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">groupBy</span><span class="p">()</span><span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="o">*</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-420"><a href="#DataFrame-420"><span class="linenos">420</span></a>
-</span><span id="DataFrame-421"><a href="#DataFrame-421"><span class="linenos">421</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-422"><a href="#DataFrame-422"><span class="linenos">422</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="DataFrame-423"><a href="#DataFrame-423"><span class="linenos">423</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-424"><a href="#DataFrame-424"><span class="linenos">424</span></a> <span class="n">other_df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
-</span><span id="DataFrame-425"><a href="#DataFrame-425"><span class="linenos">425</span></a> <span class="n">on</span><span class="p">:</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">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="n">Column</span><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">Column</span><span class="p">]],</span>
-</span><span id="DataFrame-426"><a href="#DataFrame-426"><span class="linenos">426</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
-</span><span id="DataFrame-427"><a href="#DataFrame-427"><span class="linenos">427</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="DataFrame-428"><a href="#DataFrame-428"><span class="linenos">428</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-429"><a href="#DataFrame-429"><span class="linenos">429</span></a> <span class="n">other_df</span> <span class="o">=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="DataFrame-430"><a href="#DataFrame-430"><span class="linenos">430</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
-</span><span id="DataFrame-431"><a href="#DataFrame-431"><span class="linenos">431</span></a> <span class="c1"># We will determine actual &quot;join on&quot; expression later so we don&#39;t provide it at first</span>
-</span><span id="DataFrame-432"><a href="#DataFrame-432"><span class="linenos">432</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="DataFrame-433"><a href="#DataFrame-433"><span class="linenos">433</span></a> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="n">how</span><span class="o">.</span><span class="n">replace</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="DataFrame-434"><a href="#DataFrame-434"><span class="linenos">434</span></a> <span class="p">)</span>
-</span><span id="DataFrame-435"><a href="#DataFrame-435"><span class="linenos">435</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span><span class="n">join_expression</span><span class="p">,</span> <span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
-</span><span id="DataFrame-436"><a href="#DataFrame-436"><span class="linenos">436</span></a> <span class="n">self_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame-437"><a href="#DataFrame-437"><span class="linenos">437</span></a> <span class="n">other_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">other_df</span><span class="p">)</span>
-</span><span id="DataFrame-438"><a href="#DataFrame-438"><span class="linenos">438</span></a> <span class="c1"># Determines the join clause and select columns to be used passed on what type of columns were provided for</span>
-</span><span id="DataFrame-439"><a href="#DataFrame-439"><span class="linenos">439</span></a> <span class="c1"># the join. The columns returned changes based on how the on expression is provided.</span>
-</span><span id="DataFrame-440"><a href="#DataFrame-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span 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><span id="DataFrame-441"><a href="#DataFrame-441"><span class="linenos">441</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame-442"><a href="#DataFrame-442"><span class="linenos">442</span></a><span class="sd"> Unique characteristics of join on column names only:</span>
-</span><span id="DataFrame-443"><a href="#DataFrame-443"><span class="linenos">443</span></a><span class="sd"> * The column names are put at the front of the select list</span>
-</span><span id="DataFrame-444"><a href="#DataFrame-444"><span class="linenos">444</span></a><span class="sd"> * The column names are deduplicated across the entire select list and only the column names (other dups are allowed)</span>
-</span><span id="DataFrame-445"><a href="#DataFrame-445"><span class="linenos">445</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame-446"><a href="#DataFrame-446"><span class="linenos">446</span></a> <span class="n">table_names</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-447"><a href="#DataFrame-447"><span class="linenos">447</span></a> <span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-448"><a href="#DataFrame-448"><span class="linenos">448</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame-449"><a href="#DataFrame-449"><span class="linenos">449</span></a> <span class="p">]</span>
-</span><span id="DataFrame-450"><a href="#DataFrame-450"><span class="linenos">450</span></a> <span class="n">potential_ctes</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-451"><a href="#DataFrame-451"><span class="linenos">451</span></a> <span class="n">cte</span>
-</span><span id="DataFrame-452"><a href="#DataFrame-452"><span class="linenos">452</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">join_expression</span><span class="o">.</span><span class="n">ctes</span>
-</span><span id="DataFrame-453"><a href="#DataFrame-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">table_names</span>
-</span><span id="DataFrame-454"><a href="#DataFrame-454"><span class="linenos">454</span></a> <span class="ow">and</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">!=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span>
-</span><span id="DataFrame-455"><a href="#DataFrame-455"><span class="linenos">455</span></a> <span class="p">]</span>
-</span><span id="DataFrame-456"><a href="#DataFrame-456"><span class="linenos">456</span></a> <span class="c1"># Determine the table to reference for the left side of the join by checking each of the left side</span>
-</span><span id="DataFrame-457"><a href="#DataFrame-457"><span class="linenos">457</span></a> <span class="c1"># tables and see if they have the column being referenced.</span>
-</span><span id="DataFrame-458"><a href="#DataFrame-458"><span class="linenos">458</span></a> <span class="n">join_column_pairs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame-459"><a href="#DataFrame-459"><span class="linenos">459</span></a> <span class="k">for</span> <span class="n">join_column</span> <span class="ow">in</span> <span class="n">join_columns</span><span class="p">:</span>
-</span><span id="DataFrame-460"><a href="#DataFrame-460"><span class="linenos">460</span></a> <span class="n">num_matching_ctes</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="DataFrame-461"><a href="#DataFrame-461"><span class="linenos">461</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">potential_ctes</span><span class="p">:</span>
-</span><span id="DataFrame-462"><a href="#DataFrame-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
-</span><span id="DataFrame-463"><a href="#DataFrame-463"><span class="linenos">463</span></a> <span class="n">left_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame-464"><a href="#DataFrame-464"><span class="linenos">464</span></a> <span class="n">right_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">)</span>
-</span><span id="DataFrame-465"><a href="#DataFrame-465"><span class="linenos">465</span></a> <span class="n">join_column_pairs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span><span class="p">))</span>
-</span><span id="DataFrame-466"><a href="#DataFrame-466"><span class="linenos">466</span></a> <span class="n">num_matching_ctes</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="DataFrame-467"><a href="#DataFrame-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">num_matching_ctes</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="DataFrame-468"><a href="#DataFrame-468"><span class="linenos">468</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="DataFrame-469"><a href="#DataFrame-469"><span class="linenos">469</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> is ambiguous. Please specify the table name.&quot;</span>
-</span><span id="DataFrame-470"><a href="#DataFrame-470"><span class="linenos">470</span></a> <span class="p">)</span>
-</span><span id="DataFrame-471"><a href="#DataFrame-471"><span class="linenos">471</span></a> <span class="k">elif</span> <span class="n">num_matching_ctes</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="DataFrame-472"><a href="#DataFrame-472"><span class="linenos">472</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="DataFrame-473"><a href="#DataFrame-473"><span class="linenos">473</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> does not exist in any of the tables.&quot;</span>
-</span><span id="DataFrame-474"><a href="#DataFrame-474"><span class="linenos">474</span></a> <span class="p">)</span>
-</span><span id="DataFrame-475"><a href="#DataFrame-475"><span class="linenos">475</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span>
-</span><span id="DataFrame-476"><a href="#DataFrame-476"><span class="linenos">476</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span>
-</span><span id="DataFrame-477"><a href="#DataFrame-477"><span class="linenos">477</span></a> <span class="p">[</span><span class="n">left_column</span> <span class="o">==</span> <span class="n">right_column</span> <span class="k">for</span> <span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">],</span>
-</span><span id="DataFrame-478"><a href="#DataFrame-478"><span class="linenos">478</span></a> <span class="p">)</span>
-</span><span id="DataFrame-479"><a href="#DataFrame-479"><span class="linenos">479</span></a> <span class="n">join_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">left_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">left_col</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">]</span>
-</span><span id="DataFrame-480"><a href="#DataFrame-480"><span class="linenos">480</span></a> <span class="c1"># To match spark behavior only the join clause gets deduplicated and it gets put in the front of the column list</span>
-</span><span id="DataFrame-481"><a href="#DataFrame-481"><span class="linenos">481</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-482"><a href="#DataFrame-482"><span class="linenos">482</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-483"><a href="#DataFrame-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">)</span>
-</span><span id="DataFrame-484"><a href="#DataFrame-484"><span class="linenos">484</span></a> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span>
-</span><span id="DataFrame-485"><a href="#DataFrame-485"><span class="linenos">485</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span>
-</span><span id="DataFrame-486"><a href="#DataFrame-486"><span class="linenos">486</span></a> <span class="p">]</span>
-</span><span id="DataFrame-487"><a href="#DataFrame-487"><span class="linenos">487</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-488"><a href="#DataFrame-488"><span class="linenos">488</span></a> <span class="n">column_name</span>
-</span><span id="DataFrame-489"><a href="#DataFrame-489"><span class="linenos">489</span></a> <span class="k">for</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="n">select_column_names</span>
-</span><span id="DataFrame-490"><a href="#DataFrame-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">column_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">join_column_names</span>
-</span><span id="DataFrame-491"><a href="#DataFrame-491"><span class="linenos">491</span></a> <span class="p">]</span>
-</span><span id="DataFrame-492"><a href="#DataFrame-492"><span class="linenos">492</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="n">join_column_names</span> <span class="o">+</span> <span class="n">select_column_names</span>
-</span><span id="DataFrame-493"><a href="#DataFrame-493"><span class="linenos">493</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-494"><a href="#DataFrame-494"><span class="linenos">494</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame-495"><a href="#DataFrame-495"><span class="linenos">495</span></a><span class="sd"> Unique characteristics of join on expressions:</span>
-</span><span id="DataFrame-496"><a href="#DataFrame-496"><span class="linenos">496</span></a><span class="sd"> * There is no deduplication of the results.</span>
-</span><span id="DataFrame-497"><a href="#DataFrame-497"><span class="linenos">497</span></a><span class="sd"> * The left join dataframe columns go first and right come after. No sort preference is given to join columns</span>
-</span><span id="DataFrame-498"><a href="#DataFrame-498"><span class="linenos">498</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame-499"><a href="#DataFrame-499"><span class="linenos">499</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">join_columns</span><span class="p">,</span> <span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame-500"><a href="#DataFrame-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">join_columns</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="DataFrame-501"><a href="#DataFrame-501"><span class="linenos">501</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span> <span class="n">join_columns</span><span class="p">)]</span>
-</span><span id="DataFrame-502"><a href="#DataFrame-502"><span class="linenos">502</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="DataFrame-503"><a href="#DataFrame-503"><span class="linenos">503</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span><span class="p">]</span>
-</span><span id="DataFrame-504"><a href="#DataFrame-504"><span class="linenos">504</span></a>
-</span><span id="DataFrame-505"><a href="#DataFrame-505"><span class="linenos">505</span></a> <span class="c1"># Update the on expression with the actual join clause to replace the dummy one from before</span>
-</span><span id="DataFrame-506"><a href="#DataFrame-506"><span class="linenos">506</span></a> <span class="n">join_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="mi">1</span><span class="p">]</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">join_clause</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-507"><a href="#DataFrame-507"><span class="linenos">507</span></a> <span class="n">new_df</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">expression</span><span class="o">=</span><span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame-508"><a href="#DataFrame-508"><span class="linenos">508</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_join_hints</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">pending_join_hints</span><span class="p">)</span>
-</span><span id="DataFrame-509"><a href="#DataFrame-509"><span class="linenos">509</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="p">)</span>
-</span><span id="DataFrame-510"><a href="#DataFrame-510"><span class="linenos">510</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="o">.</span><span class="n">__wrapped__</span><span class="p">(</span><span class="n">new_df</span><span class="p">,</span> <span class="o">*</span><span class="n">select_column_names</span><span class="p">)</span>
-</span><span id="DataFrame-511"><a href="#DataFrame-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="n">new_df</span>
-</span><span id="DataFrame-512"><a href="#DataFrame-512"><span class="linenos">512</span></a>
-</span><span id="DataFrame-513"><a href="#DataFrame-513"><span class="linenos">513</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">)</span>
-</span><span id="DataFrame-514"><a href="#DataFrame-514"><span class="linenos">514</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span>
-</span><span id="DataFrame-515"><a href="#DataFrame-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-516"><a href="#DataFrame-516"><span class="linenos">516</span></a> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">],</span>
-</span><span id="DataFrame-517"><a href="#DataFrame-517"><span class="linenos">517</span></a> <span class="n">ascending</span><span 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">Union</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">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">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame-518"><a href="#DataFrame-518"><span class="linenos">518</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-519"><a href="#DataFrame-519"><span class="linenos">519</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame-520"><a href="#DataFrame-520"><span class="linenos">520</span></a><span class="sd"> This implementation lets any ordered columns take priority over whatever is provided in `ascending`. Spark</span>
-</span><span id="DataFrame-521"><a href="#DataFrame-521"><span class="linenos">521</span></a><span class="sd"> has irregular behavior and can result in runtime errors. Users shouldn&#39;t be mixing the two anyways so this</span>
-</span><span id="DataFrame-522"><a href="#DataFrame-522"><span class="linenos">522</span></a><span class="sd"> is unlikely to come up.</span>
-</span><span id="DataFrame-523"><a href="#DataFrame-523"><span class="linenos">523</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame-524"><a href="#DataFrame-524"><span class="linenos">524</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-525"><a href="#DataFrame-525"><span class="linenos">525</span></a> <span class="n">pre_ordered_col_indexes</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-526"><a href="#DataFrame-526"><span class="linenos">526</span></a> <span class="n">x</span>
-</span><span id="DataFrame-527"><a href="#DataFrame-527"><span class="linenos">527</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
-</span><span id="DataFrame-528"><a href="#DataFrame-528"><span class="linenos">528</span></a> <span class="n">i</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span 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="k">else</span> <span class="kc">None</span>
-</span><span id="DataFrame-529"><a href="#DataFrame-529"><span class="linenos">529</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame-530"><a href="#DataFrame-530"><span class="linenos">530</span></a> <span class="p">]</span>
-</span><span id="DataFrame-531"><a href="#DataFrame-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="DataFrame-532"><a href="#DataFrame-532"><span class="linenos">532</span></a> <span class="p">]</span>
-</span><span id="DataFrame-533"><a href="#DataFrame-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">ascending</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrame-534"><a href="#DataFrame-534"><span class="linenos">534</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="kc">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame-535"><a href="#DataFrame-535"><span class="linenos">535</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ascending</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="DataFrame-536"><a href="#DataFrame-536"><span class="linenos">536</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="n">ascending</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame-537"><a href="#DataFrame-537"><span class="linenos">537</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">(</span><span class="n">x</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">ascending</span><span class="p">)]</span>
-</span><span id="DataFrame-538"><a href="#DataFrame-538"><span class="linenos">538</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
-</span><span id="DataFrame-539"><a href="#DataFrame-539"><span class="linenos">539</span></a> <span class="n">ascending</span>
-</span><span id="DataFrame-540"><a href="#DataFrame-540"><span class="linenos">540</span></a> <span class="p">),</span> <span class="s2">&quot;The length of items in ascending must equal the number of columns provided&quot;</span>
-</span><span id="DataFrame-541"><a href="#DataFrame-541"><span class="linenos">541</span></a> <span class="n">col_and_ascending</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">ascending</span><span class="p">))</span>
-</span><span id="DataFrame-542"><a href="#DataFrame-542"><span class="linenos">542</span></a> <span class="n">order_by_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-543"><a href="#DataFrame-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="ow">not</span> <span class="n">asc</span><span class="p">)</span>
-</span><span id="DataFrame-544"><a href="#DataFrame-544"><span class="linenos">544</span></a> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pre_ordered_col_indexes</span>
-</span><span id="DataFrame-545"><a href="#DataFrame-545"><span class="linenos">545</span></a> <span class="k">else</span> <span class="n">columns</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">column_expression</span>
-</span><span id="DataFrame-546"><a href="#DataFrame-546"><span class="linenos">546</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">asc</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col_and_ascending</span><span class="p">)</span>
-</span><span id="DataFrame-547"><a href="#DataFrame-547"><span class="linenos">547</span></a> <span class="p">]</span>
-</span><span id="DataFrame-548"><a href="#DataFrame-548"><span class="linenos">548</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">order_by_columns</span><span class="p">))</span>
-</span><span id="DataFrame-549"><a href="#DataFrame-549"><span class="linenos">549</span></a>
-</span><span id="DataFrame-550"><a href="#DataFrame-550"><span class="linenos">550</span></a> <span class="n">sort</span> <span class="o">=</span> <span class="n">orderBy</span>
-</span><span id="DataFrame-551"><a href="#DataFrame-551"><span class="linenos">551</span></a>
-</span><span id="DataFrame-552"><a href="#DataFrame-552"><span class="linenos">552</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-553"><a href="#DataFrame-553"><span class="linenos">553</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-554"><a href="#DataFrame-554"><span class="linenos">554</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame-555"><a href="#DataFrame-555"><span class="linenos">555</span></a>
-</span><span id="DataFrame-556"><a href="#DataFrame-556"><span class="linenos">556</span></a> <span class="n">unionAll</span> <span class="o">=</span> <span class="n">union</span>
-</span><span id="DataFrame-557"><a href="#DataFrame-557"><span class="linenos">557</span></a>
-</span><span id="DataFrame-558"><a href="#DataFrame-558"><span class="linenos">558</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-559"><a href="#DataFrame-559"><span class="linenos">559</span></a> <span class="k">def</span> <span class="nf">unionByName</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">DataFrame</span><span class="p">,</span> <span class="n">allowMissingColumns</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="DataFrame-560"><a href="#DataFrame-560"><span class="linenos">560</span></a> <span class="n">l_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="DataFrame-561"><a href="#DataFrame-561"><span class="linenos">561</span></a> <span class="n">r_columns</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="DataFrame-562"><a href="#DataFrame-562"><span class="linenos">562</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
-</span><span id="DataFrame-563"><a href="#DataFrame-563"><span class="linenos">563</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
-</span><span id="DataFrame-564"><a href="#DataFrame-564"><span class="linenos">564</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
-</span><span id="DataFrame-565"><a href="#DataFrame-565"><span class="linenos">565</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-566"><a href="#DataFrame-566"><span class="linenos">566</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame-567"><a href="#DataFrame-567"><span class="linenos">567</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame-568"><a href="#DataFrame-568"><span class="linenos">568</span></a> <span class="n">r_columns_unused</span> <span class="o">=</span> <span class="n">copy</span><span class="p">(</span><span class="n">r_columns</span><span class="p">)</span>
-</span><span id="DataFrame-569"><a href="#DataFrame-569"><span class="linenos">569</span></a> <span class="k">for</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">l_columns</span><span class="p">:</span>
-</span><span id="DataFrame-570"><a href="#DataFrame-570"><span class="linenos">570</span></a> <span class="n">l_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
-</span><span id="DataFrame-571"><a href="#DataFrame-571"><span class="linenos">571</span></a> <span class="k">if</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">r_columns</span><span class="p">:</span>
-</span><span id="DataFrame-572"><a href="#DataFrame-572"><span class="linenos">572</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
-</span><span id="DataFrame-573"><a href="#DataFrame-573"><span class="linenos">573</span></a> <span class="n">r_columns_unused</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
-</span><span id="DataFrame-574"><a href="#DataFrame-574"><span class="linenos">574</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-575"><a href="#DataFrame-575"><span class="linenos">575</span></a> <span class="n">r_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">l_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="DataFrame-576"><a href="#DataFrame-576"><span class="linenos">576</span></a> <span class="k">for</span> <span class="n">r_column</span> <span class="ow">in</span> <span class="n">r_columns_unused</span><span class="p">:</span>
-</span><span id="DataFrame-577"><a href="#DataFrame-577"><span class="linenos">577</span></a> <span class="n">l_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">r_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="DataFrame-578"><a href="#DataFrame-578"><span class="linenos">578</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r_column</span><span class="p">)</span>
-</span><span id="DataFrame-579"><a href="#DataFrame-579"><span class="linenos">579</span></a> <span class="n">r_df</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame-580"><a href="#DataFrame-580"><span class="linenos">580</span></a> <span class="n">other</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">r_expressions</span><span class="p">))</span>
-</span><span id="DataFrame-581"><a href="#DataFrame-581"><span class="linenos">581</span></a> <span class="p">)</span>
-</span><span id="DataFrame-582"><a href="#DataFrame-582"><span class="linenos">582</span></a> <span class="n">l_df</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="DataFrame-583"><a href="#DataFrame-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
-</span><span id="DataFrame-584"><a href="#DataFrame-584"><span class="linenos">584</span></a> <span class="n">l_df</span> <span class="o">=</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">l_expressions</span><span class="p">))</span>
-</span><span id="DataFrame-585"><a href="#DataFrame-585"><span class="linenos">585</span></a> <span class="k">return</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">r_df</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame-586"><a href="#DataFrame-586"><span class="linenos">586</span></a>
-</span><span id="DataFrame-587"><a href="#DataFrame-587"><span class="linenos">587</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-588"><a href="#DataFrame-588"><span class="linenos">588</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-589"><a href="#DataFrame-589"><span class="linenos">589</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="DataFrame-590"><a href="#DataFrame-590"><span class="linenos">590</span></a>
-</span><span id="DataFrame-591"><a href="#DataFrame-591"><span class="linenos">591</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-592"><a href="#DataFrame-592"><span class="linenos">592</span></a> <span class="k">def</span> <span class="nf">intersectAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-593"><a href="#DataFrame-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame-594"><a href="#DataFrame-594"><span class="linenos">594</span></a>
-</span><span id="DataFrame-595"><a href="#DataFrame-595"><span class="linenos">595</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-596"><a href="#DataFrame-596"><span class="linenos">596</span></a> <span class="k">def</span> <span class="nf">exceptAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-597"><a href="#DataFrame-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame-598"><a href="#DataFrame-598"><span class="linenos">598</span></a>
-</span><span id="DataFrame-599"><a href="#DataFrame-599"><span class="linenos">599</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-600"><a href="#DataFrame-600"><span class="linenos">600</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">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-601"><a href="#DataFrame-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">distinct</span><span class="p">())</span>
-</span><span id="DataFrame-602"><a href="#DataFrame-602"><span class="linenos">602</span></a>
-</span><span id="DataFrame-603"><a href="#DataFrame-603"><span class="linenos">603</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-604"><a href="#DataFrame-604"><span class="linenos">604</span></a> <span class="k">def</span> <span class="nf">dropDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subset</span><span 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="DataFrame-605"><a href="#DataFrame-605"><span class="linenos">605</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subset</span><span class="p">:</span>
-</span><span id="DataFrame-606"><a href="#DataFrame-606"><span class="linenos">606</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
-</span><span id="DataFrame-607"><a href="#DataFrame-607"><span class="linenos">607</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
-</span><span id="DataFrame-608"><a href="#DataFrame-608"><span class="linenos">608</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">Window</span><span class="o">.</span><span class="n">partitionBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span><span class="o">.</span><span class="n">orderBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span>
-</span><span id="DataFrame-609"><a href="#DataFrame-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="DataFrame-610"><a href="#DataFrame-610"><span class="linenos">610</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-611"><a href="#DataFrame-611"><span class="linenos">611</span></a> <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span><span class="n">row_number</span><span class="p">()</span><span class="o">.</span><span class="n">over</span><span class="p">(</span><span class="n">window</span><span class="p">))</span>
-</span><span id="DataFrame-612"><a href="#DataFrame-612"><span class="linenos">612</span></a> <span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
-</span><span id="DataFrame-613"><a href="#DataFrame-613"><span class="linenos">613</span></a> <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-614"><a href="#DataFrame-614"><span class="linenos">614</span></a> <span class="p">)</span>
-</span><span id="DataFrame-615"><a href="#DataFrame-615"><span class="linenos">615</span></a>
-</span><span id="DataFrame-616"><a href="#DataFrame-616"><span class="linenos">616</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-617"><a href="#DataFrame-617"><span class="linenos">617</span></a> <span class="k">def</span> <span class="nf">dropna</span><span class="p">(</span>
-</span><span id="DataFrame-618"><a href="#DataFrame-618"><span class="linenos">618</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-619"><a href="#DataFrame-619"><span class="linenos">619</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="DataFrame-620"><a href="#DataFrame-620"><span class="linenos">620</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame-621"><a href="#DataFrame-621"><span class="linenos">621</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame-622"><a href="#DataFrame-622"><span class="linenos">622</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-623"><a href="#DataFrame-623"><span class="linenos">623</span></a> <span class="n">minimum_non_null</span> <span class="o">=</span> <span class="n">thresh</span> <span class="ow">or</span> <span class="mi">0</span> <span class="c1"># will be determined later if thresh is null</span>
-</span><span id="DataFrame-624"><a href="#DataFrame-624"><span class="linenos">624</span></a> <span class="n">new_df</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="DataFrame-625"><a href="#DataFrame-625"><span class="linenos">625</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-626"><a href="#DataFrame-626"><span class="linenos">626</span></a> <span class="k">if</span> <span class="n">subset</span><span class="p">:</span>
-</span><span id="DataFrame-627"><a href="#DataFrame-627"><span class="linenos">627</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
-</span><span id="DataFrame-628"><a href="#DataFrame-628"><span class="linenos">628</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-629"><a href="#DataFrame-629"><span class="linenos">629</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="n">all_columns</span>
-</span><span id="DataFrame-630"><a href="#DataFrame-630"><span class="linenos">630</span></a> <span class="k">if</span> <span class="n">thresh</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrame-631"><a href="#DataFrame-631"><span class="linenos">631</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">how</span> <span class="o">==</span> <span class="s2">&quot;any&quot;</span> <span class="k">else</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span>
-</span><span id="DataFrame-632"><a href="#DataFrame-632"><span class="linenos">632</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-633"><a href="#DataFrame-633"><span class="linenos">633</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span> <span class="o">-</span> <span class="n">minimum_non_null</span> <span class="o">+</span> <span class="mi">1</span>
-</span><span id="DataFrame-634"><a href="#DataFrame-634"><span class="linenos">634</span></a> <span class="k">if</span> <span class="n">minimum_num_nulls</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">):</span>
-</span><span id="DataFrame-635"><a href="#DataFrame-635"><span class="linenos">635</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
-</span><span id="DataFrame-636"><a href="#DataFrame-636"><span class="linenos">636</span></a> <span class="sa">f</span><span class="s2">&quot;The minimum num nulls for dropna must be less than or equal to the number of columns. &quot;</span>
-</span><span id="DataFrame-637"><a href="#DataFrame-637"><span class="linenos">637</span></a> <span class="sa">f</span><span class="s2">&quot;Minimum num nulls: </span><span class="si">{</span><span class="n">minimum_num_nulls</span><span class="si">}</span><span class="s2">, Num Columns: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DataFrame-638"><a href="#DataFrame-638"><span class="linenos">638</span></a> <span class="p">)</span>
-</span><span id="DataFrame-639"><a href="#DataFrame-639"><span class="linenos">639</span></a> <span class="n">if_null_checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-640"><a href="#DataFrame-640"><span class="linenos">640</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">null_check_columns</span>
-</span><span id="DataFrame-641"><a href="#DataFrame-641"><span class="linenos">641</span></a> <span class="p">]</span>
-</span><span id="DataFrame-642"><a href="#DataFrame-642"><span class="linenos">642</span></a> <span class="n">nulls_added_together</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="p">,</span> <span class="n">if_null_checks</span><span class="p">)</span>
-</span><span id="DataFrame-643"><a href="#DataFrame-643"><span class="linenos">643</span></a> <span class="n">num_nulls</span> <span class="o">=</span> <span class="n">nulls_added_together</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-644"><a href="#DataFrame-644"><span class="linenos">644</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">num_nulls</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="DataFrame-645"><a href="#DataFrame-645"><span class="linenos">645</span></a> <span class="n">filtered_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">minimum_num_nulls</span><span class="p">))</span>
-</span><span id="DataFrame-646"><a href="#DataFrame-646"><span class="linenos">646</span></a> <span class="n">final_df</span> <span class="o">=</span> <span class="n">filtered_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">all_columns</span><span class="p">)</span>
-</span><span id="DataFrame-647"><a href="#DataFrame-647"><span class="linenos">647</span></a> <span class="k">return</span> <span class="n">final_df</span>
-</span><span id="DataFrame-648"><a href="#DataFrame-648"><span class="linenos">648</span></a>
-</span><span id="DataFrame-649"><a href="#DataFrame-649"><span class="linenos">649</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-650"><a href="#DataFrame-650"><span class="linenos">650</span></a> <span class="k">def</span> <span class="nf">fillna</span><span class="p">(</span>
-</span><span id="DataFrame-651"><a href="#DataFrame-651"><span class="linenos">651</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-652"><a href="#DataFrame-652"><span class="linenos">652</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnLiterals</span><span class="p">],</span>
-</span><span id="DataFrame-653"><a href="#DataFrame-653"><span class="linenos">653</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame-654"><a href="#DataFrame-654"><span class="linenos">654</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-655"><a href="#DataFrame-655"><span class="linenos">655</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame-656"><a href="#DataFrame-656"><span class="linenos">656</span></a><span class="sd"> Functionality Difference: If you provide a value to replace a null and that type conflicts</span>
-</span><span id="DataFrame-657"><a href="#DataFrame-657"><span class="linenos">657</span></a><span class="sd"> with the type of the column then PySpark will just ignore your replacement.</span>
-</span><span id="DataFrame-658"><a href="#DataFrame-658"><span class="linenos">658</span></a><span class="sd"> This will try to cast them to be the same in some cases. So they won&#39;t always match.</span>
-</span><span id="DataFrame-659"><a href="#DataFrame-659"><span class="linenos">659</span></a><span class="sd"> Best to not mix types so make sure replacement is the same type as the column</span>
-</span><span id="DataFrame-660"><a href="#DataFrame-660"><span class="linenos">660</span></a>
-</span><span id="DataFrame-661"><a href="#DataFrame-661"><span class="linenos">661</span></a><span class="sd"> Possibility for improvement: Use `typeof` function to get the type of the column</span>
-</span><span id="DataFrame-662"><a href="#DataFrame-662"><span class="linenos">662</span></a><span class="sd"> and check if it matches the type of the value provided. If not then make it null.</span>
-</span><span id="DataFrame-663"><a href="#DataFrame-663"><span class="linenos">663</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame-664"><a href="#DataFrame-664"><span class="linenos">664</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
-</span><span id="DataFrame-665"><a href="#DataFrame-665"><span class="linenos">665</span></a>
-</span><span id="DataFrame-666"><a href="#DataFrame-666"><span class="linenos">666</span></a> <span class="n">values</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DataFrame-667"><a href="#DataFrame-667"><span class="linenos">667</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DataFrame-668"><a href="#DataFrame-668"><span class="linenos">668</span></a> <span class="n">new_df</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="DataFrame-669"><a href="#DataFrame-669"><span class="linenos">669</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-670"><a href="#DataFrame-670"><span class="linenos">670</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
-</span><span id="DataFrame-671"><a href="#DataFrame-671"><span class="linenos">671</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="DataFrame-672"><a href="#DataFrame-672"><span class="linenos">672</span></a> <span class="n">values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="DataFrame-673"><a href="#DataFrame-673"><span class="linenos">673</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
-</span><span id="DataFrame-674"><a href="#DataFrame-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="DataFrame-675"><a href="#DataFrame-675"><span class="linenos">675</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
-</span><span id="DataFrame-676"><a href="#DataFrame-676"><span class="linenos">676</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="DataFrame-677"><a href="#DataFrame-677"><span class="linenos">677</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame-678"><a href="#DataFrame-678"><span class="linenos">678</span></a> <span class="n">value_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
-</span><span id="DataFrame-679"><a href="#DataFrame-679"><span class="linenos">679</span></a>
-</span><span id="DataFrame-680"><a href="#DataFrame-680"><span class="linenos">680</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataFrame-681"><a href="#DataFrame-681"><span class="linenos">681</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="DataFrame-682"><a href="#DataFrame-682"><span class="linenos">682</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame-683"><a href="#DataFrame-683"><span class="linenos">683</span></a> <span class="p">)</span>
-</span><span id="DataFrame-684"><a href="#DataFrame-684"><span class="linenos">684</span></a> <span class="k">for</span> <span class="n">column</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">columns</span><span class="p">,</span> <span class="n">value_columns</span><span class="p">)</span>
-</span><span id="DataFrame-685"><a href="#DataFrame-685"><span class="linenos">685</span></a> <span class="p">}</span>
-</span><span id="DataFrame-686"><a href="#DataFrame-686"><span class="linenos">686</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">null_replacement_mapping</span><span class="p">}</span>
-</span><span id="DataFrame-687"><a href="#DataFrame-687"><span class="linenos">687</span></a> <span class="n">null_replacement_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-688"><a href="#DataFrame-688"><span class="linenos">688</span></a> <span class="n">null_replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span>
-</span><span id="DataFrame-689"><a href="#DataFrame-689"><span class="linenos">689</span></a> <span class="p">]</span>
-</span><span id="DataFrame-690"><a href="#DataFrame-690"><span class="linenos">690</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">null_replacement_columns</span><span class="p">)</span>
-</span><span id="DataFrame-691"><a href="#DataFrame-691"><span class="linenos">691</span></a> <span class="k">return</span> <span class="n">new_df</span>
-</span><span id="DataFrame-692"><a href="#DataFrame-692"><span class="linenos">692</span></a>
-</span><span id="DataFrame-693"><a href="#DataFrame-693"><span class="linenos">693</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame-694"><a href="#DataFrame-694"><span class="linenos">694</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
-</span><span id="DataFrame-695"><a href="#DataFrame-695"><span class="linenos">695</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame-696"><a href="#DataFrame-696"><span class="linenos">696</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
-</span><span id="DataFrame-697"><a href="#DataFrame-697"><span class="linenos">697</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">t</span><span class="o">.</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">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 class="p">,</span>
-</span><span id="DataFrame-698"><a href="#DataFrame-698"><span class="linenos">698</span></a> <span class="n">subset</span><span 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">ColumnOrName</span><span class="p">]</span> <span class="o">|</span> <span class="n">ColumnOrName</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame-699"><a href="#DataFrame-699"><span class="linenos">699</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-700"><a href="#DataFrame-700"><span class="linenos">700</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
-</span><span id="DataFrame-701"><a href="#DataFrame-701"><span class="linenos">701</span></a>
-</span><span id="DataFrame-702"><a href="#DataFrame-702"><span class="linenos">702</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DataFrame-703"><a href="#DataFrame-703"><span class="linenos">703</span></a> <span class="n">new_df</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="DataFrame-704"><a href="#DataFrame-704"><span class="linenos">704</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame-705"><a href="#DataFrame-705"><span class="linenos">705</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
-</span><span id="DataFrame-706"><a href="#DataFrame-706"><span class="linenos">706</span></a>
-</span><span id="DataFrame-707"><a href="#DataFrame-707"><span class="linenos">707</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
-</span><span id="DataFrame-708"><a href="#DataFrame-708"><span class="linenos">708</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="DataFrame-709"><a href="#DataFrame-709"><span class="linenos">709</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span>
-</span><span id="DataFrame-710"><a href="#DataFrame-710"><span class="linenos">710</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="DataFrame-711"><a href="#DataFrame-711"><span class="linenos">711</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">old_values</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="DataFrame-712"><a href="#DataFrame-712"><span class="linenos">712</span></a> <span class="k">assert</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 class="s2">&quot;value must be a list since the replacements are a list&quot;</span>
-</span><span id="DataFrame-713"><a href="#DataFrame-713"><span class="linenos">713</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
-</span><span id="DataFrame-714"><a href="#DataFrame-714"><span class="linenos">714</span></a> <span class="n">value</span>
-</span><span id="DataFrame-715"><a href="#DataFrame-715"><span class="linenos">715</span></a> <span class="p">),</span> <span class="s2">&quot;the replacements and values must be the same length&quot;</span>
-</span><span id="DataFrame-716"><a href="#DataFrame-716"><span class="linenos">716</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="n">to_replace</span>
-</span><span id="DataFrame-717"><a href="#DataFrame-717"><span class="linenos">717</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="DataFrame-718"><a href="#DataFrame-718"><span class="linenos">718</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-719"><a href="#DataFrame-719"><span class="linenos">719</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">to_replace</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame-720"><a href="#DataFrame-720"><span class="linenos">720</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame-721"><a href="#DataFrame-721"><span class="linenos">721</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">old_values</span><span class="p">]</span>
-</span><span id="DataFrame-722"><a href="#DataFrame-722"><span class="linenos">722</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">new_values</span><span class="p">]</span>
-</span><span id="DataFrame-723"><a href="#DataFrame-723"><span class="linenos">723</span></a>
-</span><span id="DataFrame-724"><a href="#DataFrame-724"><span class="linenos">724</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="DataFrame-725"><a href="#DataFrame-725"><span class="linenos">725</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="DataFrame-726"><a href="#DataFrame-726"><span class="linenos">726</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame-727"><a href="#DataFrame-727"><span class="linenos">727</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">old_values</span><span class="p">,</span> <span class="n">new_values</span><span class="p">)):</span>
-</span><span id="DataFrame-728"><a href="#DataFrame-728"><span class="linenos">728</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="DataFrame-729"><a href="#DataFrame-729"><span class="linenos">729</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span>
-</span><span id="DataFrame-730"><a href="#DataFrame-730"><span class="linenos">730</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-731"><a href="#DataFrame-731"><span class="linenos">731</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="DataFrame-732"><a href="#DataFrame-732"><span class="linenos">732</span></a> <span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span>
-</span><span id="DataFrame-733"><a href="#DataFrame-733"><span class="linenos">733</span></a> <span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame-734"><a href="#DataFrame-734"><span class="linenos">734</span></a> <span class="p">)</span>
-</span><span id="DataFrame-735"><a href="#DataFrame-735"><span class="linenos">735</span></a>
-</span><span id="DataFrame-736"><a href="#DataFrame-736"><span class="linenos">736</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">replacement_mapping</span><span class="p">}</span>
-</span><span id="DataFrame-737"><a href="#DataFrame-737"><span class="linenos">737</span></a> <span class="n">replacement_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">]</span>
-</span><span id="DataFrame-738"><a href="#DataFrame-738"><span class="linenos">738</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">replacement_columns</span><span class="p">)</span>
-</span><span id="DataFrame-739"><a href="#DataFrame-739"><span class="linenos">739</span></a> <span class="k">return</span> <span class="n">new_df</span>
-</span><span id="DataFrame-740"><a href="#DataFrame-740"><span class="linenos">740</span></a>
-</span><span id="DataFrame-741"><a href="#DataFrame-741"><span class="linenos">741</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-742"><a href="#DataFrame-742"><span class="linenos">742</span></a> <span class="k">def</span> <span class="nf">withColumn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-743"><a href="#DataFrame-743"><span class="linenos">743</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
-</span><span id="DataFrame-744"><a href="#DataFrame-744"><span class="linenos">744</span></a> <span class="n">existing_col_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
-</span><span id="DataFrame-745"><a href="#DataFrame-745"><span class="linenos">745</span></a> <span class="n">existing_col_index</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame-746"><a href="#DataFrame-746"><span class="linenos">746</span></a> <span class="n">existing_col_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">colName</span><span class="p">)</span> <span class="k">if</span> <span class="n">colName</span> <span class="ow">in</span> <span class="n">existing_col_names</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="DataFrame-747"><a href="#DataFrame-747"><span class="linenos">747</span></a> <span class="p">)</span>
-</span><span id="DataFrame-748"><a href="#DataFrame-748"><span class="linenos">748</span></a> <span class="k">if</span> <span class="n">existing_col_index</span><span class="p">:</span>
-</span><span id="DataFrame-749"><a href="#DataFrame-749"><span class="linenos">749</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="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-750"><a href="#DataFrame-750"><span class="linenos">750</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="n">existing_col_index</span><span class="p">]</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="DataFrame-751"><a href="#DataFrame-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
-</span><span id="DataFrame-752"><a href="#DataFrame-752"><span class="linenos">752</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">colName</span><span class="p">),</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="DataFrame-753"><a href="#DataFrame-753"><span class="linenos">753</span></a>
-</span><span id="DataFrame-754"><a href="#DataFrame-754"><span class="linenos">754</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-755"><a href="#DataFrame-755"><span class="linenos">755</span></a> <span class="k">def</span> <span class="nf">withColumnRenamed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">existing</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="DataFrame-756"><a href="#DataFrame-756"><span class="linenos">756</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="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame-757"><a href="#DataFrame-757"><span class="linenos">757</span></a> <span class="n">existing_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-758"><a href="#DataFrame-758"><span class="linenos">758</span></a> <span class="n">expression</span>
-</span><span id="DataFrame-759"><a href="#DataFrame-759"><span class="linenos">759</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="DataFrame-760"><a href="#DataFrame-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="n">existing</span>
-</span><span id="DataFrame-761"><a href="#DataFrame-761"><span class="linenos">761</span></a> <span class="p">]</span>
-</span><span id="DataFrame-762"><a href="#DataFrame-762"><span class="linenos">762</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">existing_columns</span><span class="p">:</span>
-</span><span id="DataFrame-763"><a href="#DataFrame-763"><span class="linenos">763</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Tried to rename a column that doesn&#39;t exist&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-764"><a href="#DataFrame-764"><span class="linenos">764</span></a> <span class="k">for</span> <span class="n">existing_column</span> <span class="ow">in</span> <span class="n">existing_columns</span><span class="p">:</span>
-</span><span id="DataFrame-765"><a href="#DataFrame-765"><span class="linenos">765</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">existing_column</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="DataFrame-766"><a href="#DataFrame-766"><span class="linenos">766</span></a> <span class="n">existing_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">alias_</span><span class="p">(</span><span class="n">existing_column</span><span class="p">,</span> <span class="n">new</span><span class="p">))</span>
-</span><span id="DataFrame-767"><a href="#DataFrame-767"><span class="linenos">767</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame-768"><a href="#DataFrame-768"><span class="linenos">768</span></a> <span class="n">existing_column</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">new</span><span class="p">))</span>
-</span><span id="DataFrame-769"><a href="#DataFrame-769"><span class="linenos">769</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
-</span><span id="DataFrame-770"><a href="#DataFrame-770"><span class="linenos">770</span></a>
-</span><span id="DataFrame-771"><a href="#DataFrame-771"><span class="linenos">771</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame-772"><a href="#DataFrame-772"><span class="linenos">772</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-773"><a href="#DataFrame-773"><span class="linenos">773</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</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="DataFrame-774"><a href="#DataFrame-774"><span class="linenos">774</span></a> <span class="n">drop_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-775"><a href="#DataFrame-775"><span class="linenos">775</span></a> <span class="n">new_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame-776"><a href="#DataFrame-776"><span class="linenos">776</span></a> <span class="n">col</span>
-</span><span id="DataFrame-777"><a href="#DataFrame-777"><span class="linenos">777</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">all_columns</span>
-</span><span id="DataFrame-778"><a href="#DataFrame-778"><span class="linenos">778</span></a> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">drop_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">drop_column</span> <span class="ow">in</span> <span class="n">drop_cols</span><span class="p">]</span>
-</span><span id="DataFrame-779"><a href="#DataFrame-779"><span class="linenos">779</span></a> <span class="p">]</span>
-</span><span id="DataFrame-780"><a href="#DataFrame-780"><span class="linenos">780</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</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">new_columns</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame-781"><a href="#DataFrame-781"><span class="linenos">781</span></a>
-</span><span id="DataFrame-782"><a href="#DataFrame-782"><span class="linenos">782</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">)</span>
-</span><span id="DataFrame-783"><a href="#DataFrame-783"><span class="linenos">783</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">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-784"><a href="#DataFrame-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">))</span>
-</span><span id="DataFrame-785"><a href="#DataFrame-785"><span class="linenos">785</span></a>
-</span><span id="DataFrame-786"><a href="#DataFrame-786"><span class="linenos">786</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame-787"><a href="#DataFrame-787"><span class="linenos">787</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 class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">parameters</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-788"><a href="#DataFrame-788"><span class="linenos">788</span></a> <span class="n">parameter_list</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span>
-</span><span id="DataFrame-789"><a href="#DataFrame-789"><span class="linenos">789</span></a> <span class="n">parameter_columns</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame-790"><a href="#DataFrame-790"><span class="linenos">790</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">parameter_list</span><span class="p">)</span>
-</span><span id="DataFrame-791"><a href="#DataFrame-791"><span class="linenos">791</span></a> <span class="k">if</span> <span class="n">parameters</span>
-</span><span id="DataFrame-792"><a href="#DataFrame-792"><span class="linenos">792</span></a> <span class="k">else</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">])</span>
-</span><span id="DataFrame-793"><a href="#DataFrame-793"><span class="linenos">793</span></a> <span class="p">)</span>
-</span><span id="DataFrame-794"><a href="#DataFrame-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">parameter_columns</span><span class="p">)</span>
-</span><span id="DataFrame-795"><a href="#DataFrame-795"><span class="linenos">795</span></a>
-</span><span id="DataFrame-796"><a href="#DataFrame-796"><span class="linenos">796</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame-797"><a href="#DataFrame-797"><span class="linenos">797</span></a> <span class="k">def</span> <span class="nf">repartition</span><span class="p">(</span>
-</span><span id="DataFrame-798"><a href="#DataFrame-798"><span class="linenos">798</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">ColumnOrName</span><span class="p">],</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">ColumnOrName</span>
-</span><span id="DataFrame-799"><a href="#DataFrame-799"><span class="linenos">799</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-800"><a href="#DataFrame-800"><span class="linenos">800</span></a> <span class="n">num_partition_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">numPartitions</span><span class="p">)</span>
-</span><span id="DataFrame-801"><a href="#DataFrame-801"><span class="linenos">801</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame-802"><a href="#DataFrame-802"><span class="linenos">802</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">num_partition_cols</span> <span class="o">+</span> <span class="n">columns</span>
-</span><span id="DataFrame-803"><a href="#DataFrame-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;repartition&quot;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="DataFrame-804"><a href="#DataFrame-804"><span class="linenos">804</span></a>
-</span><span id="DataFrame-805"><a href="#DataFrame-805"><span class="linenos">805</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame-806"><a href="#DataFrame-806"><span class="linenos">806</span></a> <span class="k">def</span> <span class="nf">coalesce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-807"><a href="#DataFrame-807"><span class="linenos">807</span></a> <span class="n">num_partitions</span> <span class="o">=</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="n">numPartitions</span><span class="p">])</span>
-</span><span id="DataFrame-808"><a href="#DataFrame-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</span><span class="p">,</span> <span class="n">num_partitions</span><span class="p">)</span>
-</span><span id="DataFrame-809"><a href="#DataFrame-809"><span class="linenos">809</span></a>
-</span><span id="DataFrame-810"><a href="#DataFrame-810"><span class="linenos">810</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame-811"><a href="#DataFrame-811"><span class="linenos">811</span></a> <span class="k">def</span> <span class="nf">cache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-812"><a href="#DataFrame-812"><span class="linenos">812</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storage_level</span><span class="o">=</span><span class="s2">&quot;MEMORY_AND_DISK&quot;</span><span class="p">)</span>
-</span><span id="DataFrame-813"><a href="#DataFrame-813"><span class="linenos">813</span></a>
-</span><span id="DataFrame-814"><a href="#DataFrame-814"><span class="linenos">814</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame-815"><a href="#DataFrame-815"><span class="linenos">815</span></a> <span class="k">def</span> <span class="nf">persist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storageLevel</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MEMORY_AND_DISK_SER&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame-816"><a href="#DataFrame-816"><span class="linenos">816</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame-817"><a href="#DataFrame-817"><span class="linenos">817</span></a><span class="sd"> Storage Level Options: https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-aux-cache-cache-table.html</span>
-</span><span id="DataFrame-818"><a href="#DataFrame-818"><span class="linenos">818</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame-819"><a href="#DataFrame-819"><span class="linenos">819</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storageLevel</span><span class="p">)</span>
+</span><span id="DataFrame-225"><a href="#DataFrame-225"><span class="linenos">225</span></a> <span class="k">if</span> <span class="n">hint_name</span> <span class="ow">in</span> <span class="n">JOIN_HINTS</span>
+</span><span id="DataFrame-226"><a href="#DataFrame-226"><span class="linenos">226</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">(</span>
+</span><span id="DataFrame-227"><a href="#DataFrame-227"><span class="linenos">227</span></a> <span class="n">this</span><span class="o">=</span><span class="n">hint_name</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">parameter</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">parameter</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="DataFrame-228"><a href="#DataFrame-228"><span class="linenos">228</span></a> <span class="p">)</span>
+</span><span id="DataFrame-229"><a href="#DataFrame-229"><span class="linenos">229</span></a> <span class="p">)</span>
+</span><span id="DataFrame-230"><a href="#DataFrame-230"><span class="linenos">230</span></a> <span class="n">new_df</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="DataFrame-231"><a href="#DataFrame-231"><span class="linenos">231</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint_expression</span><span class="p">)</span>
+</span><span id="DataFrame-232"><a href="#DataFrame-232"><span class="linenos">232</span></a> <span class="k">return</span> <span class="n">new_df</span>
+</span><span id="DataFrame-233"><a href="#DataFrame-233"><span class="linenos">233</span></a>
+</span><span id="DataFrame-234"><a href="#DataFrame-234"><span class="linenos">234</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">klass</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span> <span class="n">distinct</span><span class="p">:</span> <span class="nb">bool</span><span class="p">):</span>
+</span><span id="DataFrame-235"><a href="#DataFrame-235"><span class="linenos">235</span></a> <span class="n">other_df</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="DataFrame-236"><a href="#DataFrame-236"><span class="linenos">236</span></a> <span class="n">base_expression</span> <span class="o">=</span> <span class="bp">self</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="DataFrame-237"><a href="#DataFrame-237"><span class="linenos">237</span></a> <span class="n">base_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span><span class="n">base_expression</span><span class="p">,</span> <span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
+</span><span id="DataFrame-238"><a href="#DataFrame-238"><span class="linenos">238</span></a> <span class="n">all_ctes</span> <span class="o">=</span> <span class="n">base_expression</span><span class="o">.</span><span class="n">ctes</span>
+</span><span id="DataFrame-239"><a href="#DataFrame-239"><span class="linenos">239</span></a> <span class="n">other_df</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;with&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame-240"><a href="#DataFrame-240"><span class="linenos">240</span></a> <span class="n">base_expression</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="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame-241"><a href="#DataFrame-241"><span class="linenos">241</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">klass</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">base_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">expression</span><span class="o">=</span><span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-242"><a href="#DataFrame-242"><span class="linenos">242</span></a> <span class="n">operation</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">all_ctes</span><span class="p">))</span>
+</span><span id="DataFrame-243"><a href="#DataFrame-243"><span class="linenos">243</span></a> <span class="k">return</span> <span class="bp">self</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">operation</span><span class="p">)</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="DataFrame-244"><a href="#DataFrame-244"><span class="linenos">244</span></a>
+</span><span id="DataFrame-245"><a href="#DataFrame-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">_cache</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storage_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="DataFrame-246"><a href="#DataFrame-246"><span class="linenos">246</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="DataFrame-247"><a href="#DataFrame-247"><span class="linenos">247</span></a> <span class="n">df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</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">set</span><span class="p">(</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">,</span> <span class="n">storage_level</span><span class="p">)</span>
+</span><span id="DataFrame-248"><a href="#DataFrame-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">df</span>
+</span><span id="DataFrame-249"><a href="#DataFrame-249"><span class="linenos">249</span></a>
+</span><span id="DataFrame-250"><a href="#DataFrame-250"><span class="linenos">250</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataFrame-251"><a href="#DataFrame-251"><span class="linenos">251</span></a> <span class="k">def</span> <span class="nf">_add_ctes_to_expression</span><span class="p">(</span><span class="bp">cls</span><span 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="n">ctes</span><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">CTE</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span>
+</span><span id="DataFrame-252"><a href="#DataFrame-252"><span class="linenos">252</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="DataFrame-253"><a href="#DataFrame-253"><span class="linenos">253</span></a> <span class="n">with_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;with&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-254"><a href="#DataFrame-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">with_expression</span><span class="p">:</span>
+</span><span id="DataFrame-255"><a href="#DataFrame-255"><span class="linenos">255</span></a> <span class="n">existing_ctes</span> <span class="o">=</span> <span class="n">with_expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataFrame-256"><a href="#DataFrame-256"><span class="linenos">256</span></a> <span class="n">existsing_cte_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">existing_ctes</span><span class="p">}</span>
+</span><span id="DataFrame-257"><a href="#DataFrame-257"><span class="linenos">257</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">ctes</span><span class="p">:</span>
+</span><span id="DataFrame-258"><a href="#DataFrame-258"><span class="linenos">258</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">existsing_cte_names</span><span class="p">:</span>
+</span><span id="DataFrame-259"><a href="#DataFrame-259"><span class="linenos">259</span></a> <span class="n">existing_ctes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cte</span><span class="p">)</span>
+</span><span id="DataFrame-260"><a href="#DataFrame-260"><span class="linenos">260</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-261"><a href="#DataFrame-261"><span class="linenos">261</span></a> <span class="n">existing_ctes</span> <span class="o">=</span> <span class="n">ctes</span>
+</span><span id="DataFrame-262"><a href="#DataFrame-262"><span class="linenos">262</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">existing_ctes</span><span class="p">))</span>
+</span><span id="DataFrame-263"><a href="#DataFrame-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="DataFrame-264"><a href="#DataFrame-264"><span class="linenos">264</span></a>
+</span><span id="DataFrame-265"><a href="#DataFrame-265"><span class="linenos">265</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataFrame-266"><a href="#DataFrame-266"><span class="linenos">266</span></a> <span class="k">def</span> <span class="nf">_get_outer_select_columns</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">DataFrame</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">Column</span><span class="p">]:</span>
+</span><span id="DataFrame-267"><a href="#DataFrame-267"><span class="linenos">267</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">item</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">item</span><span class="p">,</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
+</span><span id="DataFrame-268"><a href="#DataFrame-268"><span class="linenos">268</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">Column</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="p">(</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">Select</span><span class="p">)</span> <span class="ow">or</span> <span class="n">exp</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><span id="DataFrame-269"><a href="#DataFrame-269"><span class="linenos">269</span></a>
+</span><span id="DataFrame-270"><a href="#DataFrame-270"><span class="linenos">270</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataFrame-271"><a href="#DataFrame-271"><span class="linenos">271</span></a> <span class="k">def</span> <span class="nf">_create_hash_from_expression</span><span class="p">(</span><span class="bp">cls</span><span 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="DataFrame-272"><a href="#DataFrame-272"><span class="linenos">272</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="DataFrame-273"><a href="#DataFrame-273"><span class="linenos">273</span></a>
+</span><span id="DataFrame-274"><a href="#DataFrame-274"><span class="linenos">274</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</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="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-275"><a href="#DataFrame-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;t</span><span class="si">{</span><span class="n">zlib</span><span class="o">.</span><span class="n">crc32</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">[:</span><span class="mi">6</span><span class="p">]</span>
+</span><span id="DataFrame-276"><a href="#DataFrame-276"><span class="linenos">276</span></a>
+</span><span id="DataFrame-277"><a href="#DataFrame-277"><span class="linenos">277</span></a> <span class="k">def</span> <span class="nf">_get_select_expressions</span><span class="p">(</span>
+</span><span id="DataFrame-278"><a href="#DataFrame-278"><span class="linenos">278</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-279"><a href="#DataFrame-279"><span class="linenos">279</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">Tuple</span><span class="p">[</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">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">],</span> <span class="n">OutputExpressionContainer</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="DataFrame-280"><a href="#DataFrame-280"><span class="linenos">280</span></a> <span class="n">select_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><span id="DataFrame-281"><a href="#DataFrame-281"><span class="linenos">281</span></a> <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">Union</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">Cache</span><span class="p">],</span> <span class="n">OutputExpressionContainer</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="DataFrame-282"><a href="#DataFrame-282"><span class="linenos">282</span></a> <span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame-283"><a href="#DataFrame-283"><span class="linenos">283</span></a> <span class="n">main_select_ctes</span><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">CTE</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame-284"><a href="#DataFrame-284"><span class="linenos">284</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
+</span><span id="DataFrame-285"><a href="#DataFrame-285"><span class="linenos">285</span></a> <span class="n">cache_storage_level</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-286"><a href="#DataFrame-286"><span class="linenos">286</span></a> <span class="k">if</span> <span class="n">cache_storage_level</span><span class="p">:</span>
+</span><span id="DataFrame-287"><a href="#DataFrame-287"><span class="linenos">287</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-288"><a href="#DataFrame-288"><span class="linenos">288</span></a> <span class="n">select_expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">copy</span><span class="p">(</span><span class="n">main_select_ctes</span><span class="p">)))</span>
+</span><span id="DataFrame-289"><a href="#DataFrame-289"><span class="linenos">289</span></a> <span class="n">select_expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cte_alias_name&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame-290"><a href="#DataFrame-290"><span class="linenos">290</span></a> <span class="n">select_expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">,</span> <span class="n">cache_storage_level</span><span class="p">)</span>
+</span><span id="DataFrame-291"><a href="#DataFrame-291"><span class="linenos">291</span></a> <span class="n">select_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">Cache</span><span class="p">,</span> <span class="n">select_expression</span><span class="p">))</span>
+</span><span id="DataFrame-292"><a href="#DataFrame-292"><span class="linenos">292</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-293"><a href="#DataFrame-293"><span class="linenos">293</span></a> <span class="n">main_select_ctes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cte</span><span class="p">)</span>
+</span><span id="DataFrame-294"><a href="#DataFrame-294"><span class="linenos">294</span></a> <span class="n">main_select</span> <span class="o">=</span> <span class="bp">self</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="DataFrame-295"><a href="#DataFrame-295"><span class="linenos">295</span></a> <span class="k">if</span> <span class="n">main_select_ctes</span><span class="p">:</span>
+</span><span id="DataFrame-296"><a href="#DataFrame-296"><span class="linenos">296</span></a> <span class="n">main_select</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">main_select_ctes</span><span class="p">))</span>
+</span><span id="DataFrame-297"><a href="#DataFrame-297"><span class="linenos">297</span></a> <span class="n">expression_select_pair</span> <span class="o">=</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">output_expression_container</span><span class="p">),</span> <span class="n">main_select</span><span class="p">)</span>
+</span><span id="DataFrame-298"><a href="#DataFrame-298"><span class="linenos">298</span></a> <span class="n">select_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expression_select_pair</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="DataFrame-299"><a href="#DataFrame-299"><span class="linenos">299</span></a> <span class="k">return</span> <span class="n">select_expressions</span>
+</span><span id="DataFrame-300"><a href="#DataFrame-300"><span class="linenos">300</span></a>
+</span><span id="DataFrame-301"><a href="#DataFrame-301"><span class="linenos">301</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="DataFrame-302"><a href="#DataFrame-302"><span class="linenos">302</span></a> <span class="bp">self</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">Optional</span><span class="p">[</span><span class="n">DialectType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">optimize</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">kwargs</span>
+</span><span id="DataFrame-303"><a href="#DataFrame-303"><span class="linenos">303</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="DataFrame-304"><a href="#DataFrame-304"><span class="linenos">304</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="DataFrame-305"><a href="#DataFrame-305"><span class="linenos">305</span></a>
+</span><span id="DataFrame-306"><a href="#DataFrame-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">dialect</span> <span class="ow">and</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">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">:</span>
+</span><span id="DataFrame-307"><a href="#DataFrame-307"><span class="linenos">307</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+</span><span id="DataFrame-308"><a href="#DataFrame-308"><span class="linenos">308</span></a> <span class="sa">f</span><span class="s2">&quot;The recommended way of defining a dialect is by doing `SparkSession.builder.config(&#39;sqlframe.dialect&#39;, &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;).getOrCreate()`. It is no longer needed then when calling `sql`. If you run into issues try updating your query to use this pattern.&quot;</span>
+</span><span id="DataFrame-309"><a href="#DataFrame-309"><span class="linenos">309</span></a> <span class="p">)</span>
+</span><span id="DataFrame-310"><a href="#DataFrame-310"><span class="linenos">310</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_pending_hints</span><span class="p">()</span>
+</span><span id="DataFrame-311"><a href="#DataFrame-311"><span class="linenos">311</span></a> <span class="n">select_expressions</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_get_select_expressions</span><span class="p">()</span>
+</span><span id="DataFrame-312"><a href="#DataFrame-312"><span class="linenos">312</span></a> <span class="n">output_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">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame-313"><a href="#DataFrame-313"><span class="linenos">313</span></a> <span class="n">replacement_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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><span id="DataFrame-314"><a href="#DataFrame-314"><span class="linenos">314</span></a> <span class="k">for</span> <span class="n">expression_type</span><span class="p">,</span> <span class="n">select_expression</span> <span class="ow">in</span> <span class="n">select_expressions</span><span class="p">:</span>
+</span><span id="DataFrame-315"><a href="#DataFrame-315"><span class="linenos">315</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">replace_id_value</span><span class="p">,</span> <span class="n">replacement_mapping</span><span class="p">)</span>
+</span><span id="DataFrame-316"><a href="#DataFrame-316"><span class="linenos">316</span></a> <span class="k">if</span> <span class="n">optimize</span><span class="p">:</span>
+</span><span id="DataFrame-317"><a href="#DataFrame-317"><span class="linenos">317</span></a> <span class="n">quote_identifiers</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame-318"><a href="#DataFrame-318"><span class="linenos">318</span></a> <span class="n">select_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><span id="DataFrame-319"><a href="#DataFrame-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">optimize_func</span><span class="p">(</span><span class="n">select_expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="DataFrame-320"><a href="#DataFrame-320"><span class="linenos">320</span></a> <span class="p">)</span>
+</span><span id="DataFrame-321"><a href="#DataFrame-321"><span class="linenos">321</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_replace_cte_names_with_hashes</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame-322"><a href="#DataFrame-322"><span class="linenos">322</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]</span>
+</span><span id="DataFrame-323"><a href="#DataFrame-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">:</span>
+</span><span id="DataFrame-324"><a href="#DataFrame-324"><span class="linenos">324</span></a> <span class="n">cache_table_name</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame-325"><a href="#DataFrame-325"><span class="linenos">325</span></a> <span class="n">cache_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">cache_table_name</span><span class="p">)</span>
+</span><span id="DataFrame-326"><a href="#DataFrame-326"><span class="linenos">326</span></a> <span class="n">original_alias_name</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cte_alias_name&quot;</span><span class="p">]</span>
+</span><span id="DataFrame-327"><a href="#DataFrame-327"><span class="linenos">327</span></a>
+</span><span id="DataFrame-328"><a href="#DataFrame-328"><span class="linenos">328</span></a> <span class="n">replacement_mapping</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">original_alias_name</span><span class="p">)]</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="c1"># type: ignore</span>
+</span><span id="DataFrame-329"><a href="#DataFrame-329"><span class="linenos">329</span></a> <span class="n">cache_table_name</span>
+</span><span id="DataFrame-330"><a href="#DataFrame-330"><span class="linenos">330</span></a> <span class="p">)</span>
+</span><span id="DataFrame-331"><a href="#DataFrame-331"><span class="linenos">331</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span>
+</span><span id="DataFrame-332"><a href="#DataFrame-332"><span class="linenos">332</span></a> <span class="n">cache_table_name</span><span class="p">,</span>
+</span><span id="DataFrame-333"><a href="#DataFrame-333"><span class="linenos">333</span></a> <span class="p">{</span>
+</span><span id="DataFrame-334"><a href="#DataFrame-334"><span class="linenos">334</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="DataFrame-335"><a href="#DataFrame-335"><span class="linenos">335</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="DataFrame-336"><a href="#DataFrame-336"><span class="linenos">336</span></a> <span class="p">)</span>
+</span><span id="DataFrame-337"><a href="#DataFrame-337"><span class="linenos">337</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataFrame-338"><a href="#DataFrame-338"><span class="linenos">338</span></a> <span class="p">},</span>
+</span><span id="DataFrame-339"><a href="#DataFrame-339"><span class="linenos">339</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="DataFrame-340"><a href="#DataFrame-340"><span class="linenos">340</span></a> <span class="p">)</span>
+</span><span id="DataFrame-341"><a href="#DataFrame-341"><span class="linenos">341</span></a> <span class="n">cache_storage_level</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">]</span>
+</span><span id="DataFrame-342"><a href="#DataFrame-342"><span class="linenos">342</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-343"><a href="#DataFrame-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;storageLevel&quot;</span><span class="p">),</span>
+</span><span id="DataFrame-344"><a href="#DataFrame-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">cache_storage_level</span><span class="p">),</span>
+</span><span id="DataFrame-345"><a href="#DataFrame-345"><span class="linenos">345</span></a> <span class="p">]</span>
+</span><span id="DataFrame-346"><a href="#DataFrame-346"><span class="linenos">346</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">(</span>
+</span><span id="DataFrame-347"><a href="#DataFrame-347"><span class="linenos">347</span></a> <span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">select_expression</span><span class="p">,</span> <span class="n">lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span>
+</span><span id="DataFrame-348"><a href="#DataFrame-348"><span class="linenos">348</span></a> <span class="p">)</span>
+</span><span id="DataFrame-349"><a href="#DataFrame-349"><span class="linenos">349</span></a> <span class="c1"># We will drop the &quot;view&quot; if it exists before running the cache table</span>
+</span><span id="DataFrame-350"><a href="#DataFrame-350"><span class="linenos">350</span></a> <span class="n">output_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">Drop</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;VIEW&quot;</span><span class="p">))</span>
+</span><span id="DataFrame-351"><a href="#DataFrame-351"><span class="linenos">351</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span>
+</span><span id="DataFrame-352"><a href="#DataFrame-352"><span class="linenos">352</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-353"><a href="#DataFrame-353"><span class="linenos">353</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">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame-354"><a href="#DataFrame-354"><span class="linenos">354</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">:</span>
+</span><span id="DataFrame-355"><a href="#DataFrame-355"><span class="linenos">355</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-356"><a href="#DataFrame-356"><span class="linenos">356</span></a> <span class="n">select_without_ctes</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-357"><a href="#DataFrame-357"><span class="linenos">357</span></a> <span class="n">select_without_ctes</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="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame-358"><a href="#DataFrame-358"><span class="linenos">358</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">select_without_ctes</span><span class="p">)</span>
+</span><span id="DataFrame-359"><a href="#DataFrame-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
+</span><span id="DataFrame-360"><a href="#DataFrame-360"><span class="linenos">360</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">))</span>
+</span><span id="DataFrame-361"><a href="#DataFrame-361"><span class="linenos">361</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span>
+</span><span id="DataFrame-362"><a href="#DataFrame-362"><span class="linenos">362</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">select_expression</span>
+</span><span id="DataFrame-363"><a href="#DataFrame-363"><span class="linenos">363</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-364"><a href="#DataFrame-364"><span class="linenos">364</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 expression type: </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="DataFrame-365"><a href="#DataFrame-365"><span class="linenos">365</span></a> <span class="n">output_expressions</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="DataFrame-366"><a href="#DataFrame-366"><span class="linenos">366</span></a>
+</span><span id="DataFrame-367"><a href="#DataFrame-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="DataFrame-368"><a href="#DataFrame-368"><span class="linenos">368</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">})</span>
+</span><span id="DataFrame-369"><a href="#DataFrame-369"><span class="linenos">369</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">output_expressions</span>
+</span><span id="DataFrame-370"><a href="#DataFrame-370"><span class="linenos">370</span></a> <span class="p">]</span>
+</span><span id="DataFrame-371"><a href="#DataFrame-371"><span class="linenos">371</span></a>
+</span><span id="DataFrame-372"><a href="#DataFrame-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-373"><a href="#DataFrame-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="o">**</span><span class="n">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
+</span><span id="DataFrame-374"><a href="#DataFrame-374"><span class="linenos">374</span></a>
+</span><span id="DataFrame-375"><a href="#DataFrame-375"><span class="linenos">375</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-376"><a href="#DataFrame-376"><span class="linenos">376</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-377"><a href="#DataFrame-377"><span class="linenos">377</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-378"><a href="#DataFrame-378"><span class="linenos">378</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;append&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame-379"><a href="#DataFrame-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="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><span id="DataFrame-380"><a href="#DataFrame-380"><span class="linenos">380</span></a> <span class="n">ambiguous_cols</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-381"><a href="#DataFrame-381"><span class="linenos">381</span></a> <span class="n">col</span>
+</span><span id="DataFrame-382"><a href="#DataFrame-382"><span class="linenos">382</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span>
+</span><span id="DataFrame-383"><a href="#DataFrame-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">column_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="ow">and</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">column_expression</span><span class="o">.</span><span class="n">table</span>
+</span><span id="DataFrame-384"><a href="#DataFrame-384"><span class="linenos">384</span></a> <span class="p">]</span>
+</span><span id="DataFrame-385"><a href="#DataFrame-385"><span class="linenos">385</span></a> <span class="k">if</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
+</span><span id="DataFrame-386"><a href="#DataFrame-386"><span class="linenos">386</span></a> <span class="n">join_table_identifiers</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-387"><a href="#DataFrame-387"><span class="linenos">387</span></a> <span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</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="DataFrame-388"><a href="#DataFrame-388"><span class="linenos">388</span></a> <span class="p">]</span>
+</span><span id="DataFrame-389"><a href="#DataFrame-389"><span class="linenos">389</span></a> <span class="n">cte_names_in_join</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">join_table_identifiers</span><span class="p">]</span>
+</span><span id="DataFrame-390"><a href="#DataFrame-390"><span class="linenos">390</span></a> <span class="c1"># If we have columns that resolve to multiple CTE expressions then we want to use each CTE left-to-right</span>
+</span><span id="DataFrame-391"><a href="#DataFrame-391"><span class="linenos">391</span></a> <span class="c1"># and therefore we allow multiple columns with the same name in the result. This matches the behavior</span>
+</span><span id="DataFrame-392"><a href="#DataFrame-392"><span class="linenos">392</span></a> <span class="c1"># of Spark.</span>
+</span><span id="DataFrame-393"><a href="#DataFrame-393"><span class="linenos">393</span></a> <span class="n">resolved_column_position</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">Column</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">}</span>
+</span><span id="DataFrame-394"><a href="#DataFrame-394"><span class="linenos">394</span></a> <span class="k">for</span> <span class="n">ambiguous_col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
+</span><span id="DataFrame-395"><a href="#DataFrame-395"><span class="linenos">395</span></a> <span class="n">ctes_with_column</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-396"><a href="#DataFrame-396"><span class="linenos">396</span></a> <span class="n">cte</span>
+</span><span id="DataFrame-397"><a href="#DataFrame-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span>
+</span><span id="DataFrame-398"><a href="#DataFrame-398"><span class="linenos">398</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte_names_in_join</span>
+</span><span id="DataFrame-399"><a href="#DataFrame-399"><span class="linenos">399</span></a> <span class="ow">and</span> <span class="n">ambiguous_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="DataFrame-400"><a href="#DataFrame-400"><span class="linenos">400</span></a> <span class="p">]</span>
+</span><span id="DataFrame-401"><a href="#DataFrame-401"><span class="linenos">401</span></a> <span class="c1"># Check if there is a CTE with this column that we haven&#39;t used before. If so, use it. Otherwise,</span>
+</span><span id="DataFrame-402"><a href="#DataFrame-402"><span class="linenos">402</span></a> <span class="c1"># use the same CTE we used before</span>
+</span><span id="DataFrame-403"><a href="#DataFrame-403"><span class="linenos">403</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">ctes_with_column</span><span class="p">,</span> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="DataFrame-404"><a href="#DataFrame-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
+</span><span id="DataFrame-405"><a href="#DataFrame-405"><span class="linenos">405</span></a> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="DataFrame-406"><a href="#DataFrame-406"><span class="linenos">406</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-407"><a href="#DataFrame-407"><span class="linenos">407</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">ctes_with_column</span><span class="p">[</span><span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]]</span>
+</span><span id="DataFrame-408"><a href="#DataFrame-408"><span class="linenos">408</span></a> <span class="n">ambiguous_col</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;table&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame-409"><a href="#DataFrame-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span>
+</span><span id="DataFrame-410"><a href="#DataFrame-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">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span>
+</span><span id="DataFrame-411"><a href="#DataFrame-411"><span class="linenos">411</span></a> <span class="p">)</span>
+</span><span id="DataFrame-412"><a href="#DataFrame-412"><span class="linenos">412</span></a>
+</span><span id="DataFrame-413"><a href="#DataFrame-413"><span class="linenos">413</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame-414"><a href="#DataFrame-414"><span class="linenos">414</span></a> <span class="k">def</span> <span class="nf">alias</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">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-415"><a href="#DataFrame-415"><span class="linenos">415</span></a> <span class="n">new_sequence_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
+</span><span id="DataFrame-416"><a href="#DataFrame-416"><span class="linenos">416</span></a> <span class="n">df</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="DataFrame-417"><a href="#DataFrame-417"><span class="linenos">417</span></a> <span class="k">for</span> <span class="n">join_hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_join_hints</span><span class="p">:</span>
+</span><span id="DataFrame-418"><a href="#DataFrame-418"><span class="linenos">418</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">join_hint</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="DataFrame-419"><a href="#DataFrame-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">:</span>
+</span><span id="DataFrame-420"><a href="#DataFrame-420"><span class="linenos">420</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">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">new_sequence_id</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-421"><a href="#DataFrame-421"><span class="linenos">421</span></a> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_add_alias_to_mapping</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">new_sequence_id</span><span class="p">)</span>
+</span><span id="DataFrame-422"><a href="#DataFrame-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">(</span><span class="n">sequence_id</span><span class="o">=</span><span class="n">new_sequence_id</span><span class="p">)</span>
+</span><span id="DataFrame-423"><a href="#DataFrame-423"><span class="linenos">423</span></a>
+</span><span id="DataFrame-424"><a href="#DataFrame-424"><span class="linenos">424</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
+</span><span id="DataFrame-425"><a href="#DataFrame-425"><span class="linenos">425</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="n">column</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">Column</span><span class="p">,</span> <span class="nb">bool</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-426"><a href="#DataFrame-426"><span class="linenos">426</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
+</span><span id="DataFrame-427"><a href="#DataFrame-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="DataFrame-428"><a href="#DataFrame-428"><span class="linenos">428</span></a>
+</span><span id="DataFrame-429"><a href="#DataFrame-429"><span class="linenos">429</span></a> <span class="nb">filter</span> <span class="o">=</span> <span class="n">where</span>
+</span><span id="DataFrame-430"><a href="#DataFrame-430"><span class="linenos">430</span></a>
+</span><span id="DataFrame-431"><a href="#DataFrame-431"><span class="linenos">431</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">)</span>
+</span><span id="DataFrame-432"><a href="#DataFrame-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">groupBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">GroupedData</span><span class="p">:</span>
+</span><span id="DataFrame-433"><a href="#DataFrame-433"><span class="linenos">433</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-434"><a href="#DataFrame-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="n">GroupedData</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span><span class="p">)</span>
+</span><span id="DataFrame-435"><a href="#DataFrame-435"><span class="linenos">435</span></a>
+</span><span id="DataFrame-436"><a href="#DataFrame-436"><span class="linenos">436</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-437"><a href="#DataFrame-437"><span class="linenos">437</span></a> <span class="k">def</span> <span class="nf">agg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exprs</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-438"><a href="#DataFrame-438"><span class="linenos">438</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">exprs</span><span class="p">)</span>
+</span><span id="DataFrame-439"><a href="#DataFrame-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">groupBy</span><span class="p">()</span><span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="o">*</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-440"><a href="#DataFrame-440"><span class="linenos">440</span></a>
+</span><span id="DataFrame-441"><a href="#DataFrame-441"><span class="linenos">441</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-442"><a href="#DataFrame-442"><span class="linenos">442</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="DataFrame-443"><a href="#DataFrame-443"><span class="linenos">443</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-444"><a href="#DataFrame-444"><span class="linenos">444</span></a> <span class="n">other_df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
+</span><span id="DataFrame-445"><a href="#DataFrame-445"><span class="linenos">445</span></a> <span class="n">on</span><span class="p">:</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">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="n">Column</span><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">Column</span><span class="p">]],</span>
+</span><span id="DataFrame-446"><a href="#DataFrame-446"><span class="linenos">446</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
+</span><span id="DataFrame-447"><a href="#DataFrame-447"><span class="linenos">447</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataFrame-448"><a href="#DataFrame-448"><span class="linenos">448</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-449"><a href="#DataFrame-449"><span class="linenos">449</span></a> <span class="n">other_df</span> <span class="o">=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="DataFrame-450"><a href="#DataFrame-450"><span class="linenos">450</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
+</span><span id="DataFrame-451"><a href="#DataFrame-451"><span class="linenos">451</span></a> <span class="c1"># We will determine actual &quot;join on&quot; expression later so we don&#39;t provide it at first</span>
+</span><span id="DataFrame-452"><a href="#DataFrame-452"><span class="linenos">452</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="DataFrame-453"><a href="#DataFrame-453"><span class="linenos">453</span></a> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="n">how</span><span class="o">.</span><span class="n">replace</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="DataFrame-454"><a href="#DataFrame-454"><span class="linenos">454</span></a> <span class="p">)</span>
+</span><span id="DataFrame-455"><a href="#DataFrame-455"><span class="linenos">455</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span><span class="n">join_expression</span><span class="p">,</span> <span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
+</span><span id="DataFrame-456"><a href="#DataFrame-456"><span class="linenos">456</span></a> <span class="n">self_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame-457"><a href="#DataFrame-457"><span class="linenos">457</span></a> <span class="n">other_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">other_df</span><span class="p">)</span>
+</span><span id="DataFrame-458"><a href="#DataFrame-458"><span class="linenos">458</span></a> <span class="c1"># Determines the join clause and select columns to be used passed on what type of columns were provided for</span>
+</span><span id="DataFrame-459"><a href="#DataFrame-459"><span class="linenos">459</span></a> <span class="c1"># the join. The columns returned changes based on how the on expression is provided.</span>
+</span><span id="DataFrame-460"><a href="#DataFrame-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span 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><span id="DataFrame-461"><a href="#DataFrame-461"><span class="linenos">461</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame-462"><a href="#DataFrame-462"><span class="linenos">462</span></a><span class="sd"> Unique characteristics of join on column names only:</span>
+</span><span id="DataFrame-463"><a href="#DataFrame-463"><span class="linenos">463</span></a><span class="sd"> * The column names are put at the front of the select list</span>
+</span><span id="DataFrame-464"><a href="#DataFrame-464"><span class="linenos">464</span></a><span class="sd"> * The column names are deduplicated across the entire select list and only the column names (other dups are allowed)</span>
+</span><span id="DataFrame-465"><a href="#DataFrame-465"><span class="linenos">465</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame-466"><a href="#DataFrame-466"><span class="linenos">466</span></a> <span class="n">table_names</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-467"><a href="#DataFrame-467"><span class="linenos">467</span></a> <span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-468"><a href="#DataFrame-468"><span class="linenos">468</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame-469"><a href="#DataFrame-469"><span class="linenos">469</span></a> <span class="p">]</span>
+</span><span id="DataFrame-470"><a href="#DataFrame-470"><span class="linenos">470</span></a> <span class="n">potential_ctes</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-471"><a href="#DataFrame-471"><span class="linenos">471</span></a> <span class="n">cte</span>
+</span><span id="DataFrame-472"><a href="#DataFrame-472"><span class="linenos">472</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">join_expression</span><span class="o">.</span><span class="n">ctes</span>
+</span><span id="DataFrame-473"><a href="#DataFrame-473"><span class="linenos">473</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">table_names</span>
+</span><span id="DataFrame-474"><a href="#DataFrame-474"><span class="linenos">474</span></a> <span class="ow">and</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">!=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span>
+</span><span id="DataFrame-475"><a href="#DataFrame-475"><span class="linenos">475</span></a> <span class="p">]</span>
+</span><span id="DataFrame-476"><a href="#DataFrame-476"><span class="linenos">476</span></a> <span class="c1"># Determine the table to reference for the left side of the join by checking each of the left side</span>
+</span><span id="DataFrame-477"><a href="#DataFrame-477"><span class="linenos">477</span></a> <span class="c1"># tables and see if they have the column being referenced.</span>
+</span><span id="DataFrame-478"><a href="#DataFrame-478"><span class="linenos">478</span></a> <span class="n">join_column_pairs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame-479"><a href="#DataFrame-479"><span class="linenos">479</span></a> <span class="k">for</span> <span class="n">join_column</span> <span class="ow">in</span> <span class="n">join_columns</span><span class="p">:</span>
+</span><span id="DataFrame-480"><a href="#DataFrame-480"><span class="linenos">480</span></a> <span class="n">num_matching_ctes</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="DataFrame-481"><a href="#DataFrame-481"><span class="linenos">481</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">potential_ctes</span><span class="p">:</span>
+</span><span id="DataFrame-482"><a href="#DataFrame-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
+</span><span id="DataFrame-483"><a href="#DataFrame-483"><span class="linenos">483</span></a> <span class="n">left_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame-484"><a href="#DataFrame-484"><span class="linenos">484</span></a> <span class="n">right_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">)</span>
+</span><span id="DataFrame-485"><a href="#DataFrame-485"><span class="linenos">485</span></a> <span class="n">join_column_pairs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span><span class="p">))</span>
+</span><span id="DataFrame-486"><a href="#DataFrame-486"><span class="linenos">486</span></a> <span class="n">num_matching_ctes</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="DataFrame-487"><a href="#DataFrame-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">num_matching_ctes</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="DataFrame-488"><a href="#DataFrame-488"><span class="linenos">488</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="DataFrame-489"><a href="#DataFrame-489"><span class="linenos">489</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> is ambiguous. Please specify the table name.&quot;</span>
+</span><span id="DataFrame-490"><a href="#DataFrame-490"><span class="linenos">490</span></a> <span class="p">)</span>
+</span><span id="DataFrame-491"><a href="#DataFrame-491"><span class="linenos">491</span></a> <span class="k">elif</span> <span class="n">num_matching_ctes</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="DataFrame-492"><a href="#DataFrame-492"><span class="linenos">492</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="DataFrame-493"><a href="#DataFrame-493"><span class="linenos">493</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> does not exist in any of the tables.&quot;</span>
+</span><span id="DataFrame-494"><a href="#DataFrame-494"><span class="linenos">494</span></a> <span class="p">)</span>
+</span><span id="DataFrame-495"><a href="#DataFrame-495"><span class="linenos">495</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span>
+</span><span id="DataFrame-496"><a href="#DataFrame-496"><span class="linenos">496</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span>
+</span><span id="DataFrame-497"><a href="#DataFrame-497"><span class="linenos">497</span></a> <span class="p">[</span><span class="n">left_column</span> <span class="o">==</span> <span class="n">right_column</span> <span class="k">for</span> <span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">],</span>
+</span><span id="DataFrame-498"><a href="#DataFrame-498"><span class="linenos">498</span></a> <span class="p">)</span>
+</span><span id="DataFrame-499"><a href="#DataFrame-499"><span class="linenos">499</span></a> <span class="n">join_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">left_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">left_col</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">]</span>
+</span><span id="DataFrame-500"><a href="#DataFrame-500"><span class="linenos">500</span></a> <span class="c1"># To match spark behavior only the join clause gets deduplicated and it gets put in the front of the column list</span>
+</span><span id="DataFrame-501"><a href="#DataFrame-501"><span class="linenos">501</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-502"><a href="#DataFrame-502"><span class="linenos">502</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-503"><a href="#DataFrame-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">)</span>
+</span><span id="DataFrame-504"><a href="#DataFrame-504"><span class="linenos">504</span></a> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span>
+</span><span id="DataFrame-505"><a href="#DataFrame-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">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span>
+</span><span id="DataFrame-506"><a href="#DataFrame-506"><span class="linenos">506</span></a> <span class="p">]</span>
+</span><span id="DataFrame-507"><a href="#DataFrame-507"><span class="linenos">507</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-508"><a href="#DataFrame-508"><span class="linenos">508</span></a> <span class="n">column_name</span>
+</span><span id="DataFrame-509"><a href="#DataFrame-509"><span class="linenos">509</span></a> <span class="k">for</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="n">select_column_names</span>
+</span><span id="DataFrame-510"><a href="#DataFrame-510"><span class="linenos">510</span></a> <span class="k">if</span> <span class="n">column_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">join_column_names</span>
+</span><span id="DataFrame-511"><a href="#DataFrame-511"><span class="linenos">511</span></a> <span class="p">]</span>
+</span><span id="DataFrame-512"><a href="#DataFrame-512"><span class="linenos">512</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="n">join_column_names</span> <span class="o">+</span> <span class="n">select_column_names</span>
+</span><span id="DataFrame-513"><a href="#DataFrame-513"><span class="linenos">513</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-514"><a href="#DataFrame-514"><span class="linenos">514</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame-515"><a href="#DataFrame-515"><span class="linenos">515</span></a><span class="sd"> Unique characteristics of join on expressions:</span>
+</span><span id="DataFrame-516"><a href="#DataFrame-516"><span class="linenos">516</span></a><span class="sd"> * There is no deduplication of the results.</span>
+</span><span id="DataFrame-517"><a href="#DataFrame-517"><span class="linenos">517</span></a><span class="sd"> * The left join dataframe columns go first and right come after. No sort preference is given to join columns</span>
+</span><span id="DataFrame-518"><a href="#DataFrame-518"><span class="linenos">518</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame-519"><a href="#DataFrame-519"><span class="linenos">519</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">join_columns</span><span class="p">,</span> <span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame-520"><a href="#DataFrame-520"><span class="linenos">520</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">join_columns</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="DataFrame-521"><a href="#DataFrame-521"><span class="linenos">521</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span> <span class="n">join_columns</span><span class="p">)]</span>
+</span><span id="DataFrame-522"><a href="#DataFrame-522"><span class="linenos">522</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="DataFrame-523"><a href="#DataFrame-523"><span class="linenos">523</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span><span class="p">]</span>
+</span><span id="DataFrame-524"><a href="#DataFrame-524"><span class="linenos">524</span></a>
+</span><span id="DataFrame-525"><a href="#DataFrame-525"><span class="linenos">525</span></a> <span class="c1"># Update the on expression with the actual join clause to replace the dummy one from before</span>
+</span><span id="DataFrame-526"><a href="#DataFrame-526"><span class="linenos">526</span></a> <span class="n">join_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="mi">1</span><span class="p">]</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">join_clause</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-527"><a href="#DataFrame-527"><span class="linenos">527</span></a> <span class="n">new_df</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">expression</span><span class="o">=</span><span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame-528"><a href="#DataFrame-528"><span class="linenos">528</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_join_hints</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">pending_join_hints</span><span class="p">)</span>
+</span><span id="DataFrame-529"><a href="#DataFrame-529"><span class="linenos">529</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="p">)</span>
+</span><span id="DataFrame-530"><a href="#DataFrame-530"><span class="linenos">530</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="o">.</span><span class="n">__wrapped__</span><span class="p">(</span><span class="n">new_df</span><span class="p">,</span> <span class="o">*</span><span class="n">select_column_names</span><span class="p">)</span>
+</span><span id="DataFrame-531"><a href="#DataFrame-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="n">new_df</span>
+</span><span id="DataFrame-532"><a href="#DataFrame-532"><span class="linenos">532</span></a>
+</span><span id="DataFrame-533"><a href="#DataFrame-533"><span class="linenos">533</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">)</span>
+</span><span id="DataFrame-534"><a href="#DataFrame-534"><span class="linenos">534</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span>
+</span><span id="DataFrame-535"><a href="#DataFrame-535"><span class="linenos">535</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-536"><a href="#DataFrame-536"><span class="linenos">536</span></a> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">],</span>
+</span><span id="DataFrame-537"><a href="#DataFrame-537"><span class="linenos">537</span></a> <span class="n">ascending</span><span 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">Union</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">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">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame-538"><a href="#DataFrame-538"><span class="linenos">538</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-539"><a href="#DataFrame-539"><span class="linenos">539</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame-540"><a href="#DataFrame-540"><span class="linenos">540</span></a><span class="sd"> This implementation lets any ordered columns take priority over whatever is provided in `ascending`. Spark</span>
+</span><span id="DataFrame-541"><a href="#DataFrame-541"><span class="linenos">541</span></a><span class="sd"> has irregular behavior and can result in runtime errors. Users shouldn&#39;t be mixing the two anyways so this</span>
+</span><span id="DataFrame-542"><a href="#DataFrame-542"><span class="linenos">542</span></a><span class="sd"> is unlikely to come up.</span>
+</span><span id="DataFrame-543"><a href="#DataFrame-543"><span class="linenos">543</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame-544"><a href="#DataFrame-544"><span class="linenos">544</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-545"><a href="#DataFrame-545"><span class="linenos">545</span></a> <span class="n">pre_ordered_col_indexes</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-546"><a href="#DataFrame-546"><span class="linenos">546</span></a> <span class="n">x</span>
+</span><span id="DataFrame-547"><a href="#DataFrame-547"><span class="linenos">547</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
+</span><span id="DataFrame-548"><a href="#DataFrame-548"><span class="linenos">548</span></a> <span class="n">i</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span 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="k">else</span> <span class="kc">None</span>
+</span><span id="DataFrame-549"><a href="#DataFrame-549"><span class="linenos">549</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame-550"><a href="#DataFrame-550"><span class="linenos">550</span></a> <span class="p">]</span>
+</span><span id="DataFrame-551"><a href="#DataFrame-551"><span class="linenos">551</span></a> <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="DataFrame-552"><a href="#DataFrame-552"><span class="linenos">552</span></a> <span class="p">]</span>
+</span><span id="DataFrame-553"><a href="#DataFrame-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="n">ascending</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrame-554"><a href="#DataFrame-554"><span class="linenos">554</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="kc">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame-555"><a href="#DataFrame-555"><span class="linenos">555</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ascending</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="DataFrame-556"><a href="#DataFrame-556"><span class="linenos">556</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="n">ascending</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame-557"><a href="#DataFrame-557"><span class="linenos">557</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">(</span><span class="n">x</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">ascending</span><span class="p">)]</span>
+</span><span id="DataFrame-558"><a href="#DataFrame-558"><span class="linenos">558</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
+</span><span id="DataFrame-559"><a href="#DataFrame-559"><span class="linenos">559</span></a> <span class="n">ascending</span>
+</span><span id="DataFrame-560"><a href="#DataFrame-560"><span class="linenos">560</span></a> <span class="p">),</span> <span class="s2">&quot;The length of items in ascending must equal the number of columns provided&quot;</span>
+</span><span id="DataFrame-561"><a href="#DataFrame-561"><span class="linenos">561</span></a> <span class="n">col_and_ascending</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">ascending</span><span class="p">))</span>
+</span><span id="DataFrame-562"><a href="#DataFrame-562"><span class="linenos">562</span></a> <span class="n">order_by_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-563"><a href="#DataFrame-563"><span class="linenos">563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="ow">not</span> <span class="n">asc</span><span class="p">)</span>
+</span><span id="DataFrame-564"><a href="#DataFrame-564"><span class="linenos">564</span></a> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pre_ordered_col_indexes</span>
+</span><span id="DataFrame-565"><a href="#DataFrame-565"><span class="linenos">565</span></a> <span class="k">else</span> <span class="n">columns</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">column_expression</span>
+</span><span id="DataFrame-566"><a href="#DataFrame-566"><span class="linenos">566</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">asc</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col_and_ascending</span><span class="p">)</span>
+</span><span id="DataFrame-567"><a href="#DataFrame-567"><span class="linenos">567</span></a> <span class="p">]</span>
+</span><span id="DataFrame-568"><a href="#DataFrame-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">order_by_columns</span><span class="p">))</span>
+</span><span id="DataFrame-569"><a href="#DataFrame-569"><span class="linenos">569</span></a>
+</span><span id="DataFrame-570"><a href="#DataFrame-570"><span class="linenos">570</span></a> <span class="n">sort</span> <span class="o">=</span> <span class="n">orderBy</span>
+</span><span id="DataFrame-571"><a href="#DataFrame-571"><span class="linenos">571</span></a>
+</span><span id="DataFrame-572"><a href="#DataFrame-572"><span class="linenos">572</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-573"><a href="#DataFrame-573"><span class="linenos">573</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-574"><a href="#DataFrame-574"><span class="linenos">574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame-575"><a href="#DataFrame-575"><span class="linenos">575</span></a>
+</span><span id="DataFrame-576"><a href="#DataFrame-576"><span class="linenos">576</span></a> <span class="n">unionAll</span> <span class="o">=</span> <span class="n">union</span>
+</span><span id="DataFrame-577"><a href="#DataFrame-577"><span class="linenos">577</span></a>
+</span><span id="DataFrame-578"><a href="#DataFrame-578"><span class="linenos">578</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-579"><a href="#DataFrame-579"><span class="linenos">579</span></a> <span class="k">def</span> <span class="nf">unionByName</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">DataFrame</span><span class="p">,</span> <span class="n">allowMissingColumns</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="DataFrame-580"><a href="#DataFrame-580"><span class="linenos">580</span></a> <span class="n">l_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="DataFrame-581"><a href="#DataFrame-581"><span class="linenos">581</span></a> <span class="n">r_columns</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="DataFrame-582"><a href="#DataFrame-582"><span class="linenos">582</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
+</span><span id="DataFrame-583"><a href="#DataFrame-583"><span class="linenos">583</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
+</span><span id="DataFrame-584"><a href="#DataFrame-584"><span class="linenos">584</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
+</span><span id="DataFrame-585"><a href="#DataFrame-585"><span class="linenos">585</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-586"><a href="#DataFrame-586"><span class="linenos">586</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame-587"><a href="#DataFrame-587"><span class="linenos">587</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame-588"><a href="#DataFrame-588"><span class="linenos">588</span></a> <span class="n">r_columns_unused</span> <span class="o">=</span> <span class="n">copy</span><span class="p">(</span><span class="n">r_columns</span><span class="p">)</span>
+</span><span id="DataFrame-589"><a href="#DataFrame-589"><span class="linenos">589</span></a> <span class="k">for</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">l_columns</span><span class="p">:</span>
+</span><span id="DataFrame-590"><a href="#DataFrame-590"><span class="linenos">590</span></a> <span class="n">l_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
+</span><span id="DataFrame-591"><a href="#DataFrame-591"><span class="linenos">591</span></a> <span class="k">if</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">r_columns</span><span class="p">:</span>
+</span><span id="DataFrame-592"><a href="#DataFrame-592"><span class="linenos">592</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
+</span><span id="DataFrame-593"><a href="#DataFrame-593"><span class="linenos">593</span></a> <span class="n">r_columns_unused</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
+</span><span id="DataFrame-594"><a href="#DataFrame-594"><span class="linenos">594</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-595"><a href="#DataFrame-595"><span class="linenos">595</span></a> <span class="n">r_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">l_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="DataFrame-596"><a href="#DataFrame-596"><span class="linenos">596</span></a> <span class="k">for</span> <span class="n">r_column</span> <span class="ow">in</span> <span class="n">r_columns_unused</span><span class="p">:</span>
+</span><span id="DataFrame-597"><a href="#DataFrame-597"><span class="linenos">597</span></a> <span class="n">l_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">r_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="DataFrame-598"><a href="#DataFrame-598"><span class="linenos">598</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r_column</span><span class="p">)</span>
+</span><span id="DataFrame-599"><a href="#DataFrame-599"><span class="linenos">599</span></a> <span class="n">r_df</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame-600"><a href="#DataFrame-600"><span class="linenos">600</span></a> <span class="n">other</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">r_expressions</span><span class="p">))</span>
+</span><span id="DataFrame-601"><a href="#DataFrame-601"><span class="linenos">601</span></a> <span class="p">)</span>
+</span><span id="DataFrame-602"><a href="#DataFrame-602"><span class="linenos">602</span></a> <span class="n">l_df</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="DataFrame-603"><a href="#DataFrame-603"><span class="linenos">603</span></a> <span class="k">if</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
+</span><span id="DataFrame-604"><a href="#DataFrame-604"><span class="linenos">604</span></a> <span class="n">l_df</span> <span class="o">=</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">l_expressions</span><span class="p">))</span>
+</span><span id="DataFrame-605"><a href="#DataFrame-605"><span class="linenos">605</span></a> <span class="k">return</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">r_df</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame-606"><a href="#DataFrame-606"><span class="linenos">606</span></a>
+</span><span id="DataFrame-607"><a href="#DataFrame-607"><span class="linenos">607</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-608"><a href="#DataFrame-608"><span class="linenos">608</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-609"><a href="#DataFrame-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="DataFrame-610"><a href="#DataFrame-610"><span class="linenos">610</span></a>
+</span><span id="DataFrame-611"><a href="#DataFrame-611"><span class="linenos">611</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-612"><a href="#DataFrame-612"><span class="linenos">612</span></a> <span class="k">def</span> <span class="nf">intersectAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-613"><a href="#DataFrame-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame-614"><a href="#DataFrame-614"><span class="linenos">614</span></a>
+</span><span id="DataFrame-615"><a href="#DataFrame-615"><span class="linenos">615</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-616"><a href="#DataFrame-616"><span class="linenos">616</span></a> <span class="k">def</span> <span class="nf">exceptAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-617"><a href="#DataFrame-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame-618"><a href="#DataFrame-618"><span class="linenos">618</span></a>
+</span><span id="DataFrame-619"><a href="#DataFrame-619"><span class="linenos">619</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-620"><a href="#DataFrame-620"><span class="linenos">620</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">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-621"><a href="#DataFrame-621"><span class="linenos">621</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">distinct</span><span class="p">())</span>
+</span><span id="DataFrame-622"><a href="#DataFrame-622"><span class="linenos">622</span></a>
+</span><span id="DataFrame-623"><a href="#DataFrame-623"><span class="linenos">623</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-624"><a href="#DataFrame-624"><span class="linenos">624</span></a> <span class="k">def</span> <span class="nf">dropDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subset</span><span 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="DataFrame-625"><a href="#DataFrame-625"><span class="linenos">625</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subset</span><span class="p">:</span>
+</span><span id="DataFrame-626"><a href="#DataFrame-626"><span class="linenos">626</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
+</span><span id="DataFrame-627"><a href="#DataFrame-627"><span class="linenos">627</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
+</span><span id="DataFrame-628"><a href="#DataFrame-628"><span class="linenos">628</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">Window</span><span class="o">.</span><span class="n">partitionBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span><span class="o">.</span><span class="n">orderBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span>
+</span><span id="DataFrame-629"><a href="#DataFrame-629"><span class="linenos">629</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="DataFrame-630"><a href="#DataFrame-630"><span class="linenos">630</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-631"><a href="#DataFrame-631"><span class="linenos">631</span></a> <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span><span class="n">row_number</span><span class="p">()</span><span class="o">.</span><span class="n">over</span><span class="p">(</span><span class="n">window</span><span class="p">))</span>
+</span><span id="DataFrame-632"><a href="#DataFrame-632"><span class="linenos">632</span></a> <span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
+</span><span id="DataFrame-633"><a href="#DataFrame-633"><span class="linenos">633</span></a> <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-634"><a href="#DataFrame-634"><span class="linenos">634</span></a> <span class="p">)</span>
+</span><span id="DataFrame-635"><a href="#DataFrame-635"><span class="linenos">635</span></a>
+</span><span id="DataFrame-636"><a href="#DataFrame-636"><span class="linenos">636</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-637"><a href="#DataFrame-637"><span class="linenos">637</span></a> <span class="k">def</span> <span class="nf">dropna</span><span class="p">(</span>
+</span><span id="DataFrame-638"><a href="#DataFrame-638"><span class="linenos">638</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-639"><a href="#DataFrame-639"><span class="linenos">639</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="DataFrame-640"><a href="#DataFrame-640"><span class="linenos">640</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame-641"><a href="#DataFrame-641"><span class="linenos">641</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame-642"><a href="#DataFrame-642"><span class="linenos">642</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-643"><a href="#DataFrame-643"><span class="linenos">643</span></a> <span class="n">minimum_non_null</span> <span class="o">=</span> <span class="n">thresh</span> <span class="ow">or</span> <span class="mi">0</span> <span class="c1"># will be determined later if thresh is null</span>
+</span><span id="DataFrame-644"><a href="#DataFrame-644"><span class="linenos">644</span></a> <span class="n">new_df</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="DataFrame-645"><a href="#DataFrame-645"><span class="linenos">645</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-646"><a href="#DataFrame-646"><span class="linenos">646</span></a> <span class="k">if</span> <span class="n">subset</span><span class="p">:</span>
+</span><span id="DataFrame-647"><a href="#DataFrame-647"><span class="linenos">647</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
+</span><span id="DataFrame-648"><a href="#DataFrame-648"><span class="linenos">648</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-649"><a href="#DataFrame-649"><span class="linenos">649</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="n">all_columns</span>
+</span><span id="DataFrame-650"><a href="#DataFrame-650"><span class="linenos">650</span></a> <span class="k">if</span> <span class="n">thresh</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrame-651"><a href="#DataFrame-651"><span class="linenos">651</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">how</span> <span class="o">==</span> <span class="s2">&quot;any&quot;</span> <span class="k">else</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span>
+</span><span id="DataFrame-652"><a href="#DataFrame-652"><span class="linenos">652</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-653"><a href="#DataFrame-653"><span class="linenos">653</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span> <span class="o">-</span> <span class="n">minimum_non_null</span> <span class="o">+</span> <span class="mi">1</span>
+</span><span id="DataFrame-654"><a href="#DataFrame-654"><span class="linenos">654</span></a> <span class="k">if</span> <span class="n">minimum_num_nulls</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">):</span>
+</span><span id="DataFrame-655"><a href="#DataFrame-655"><span class="linenos">655</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+</span><span id="DataFrame-656"><a href="#DataFrame-656"><span class="linenos">656</span></a> <span class="sa">f</span><span class="s2">&quot;The minimum num nulls for dropna must be less than or equal to the number of columns. &quot;</span>
+</span><span id="DataFrame-657"><a href="#DataFrame-657"><span class="linenos">657</span></a> <span class="sa">f</span><span class="s2">&quot;Minimum num nulls: </span><span class="si">{</span><span class="n">minimum_num_nulls</span><span class="si">}</span><span class="s2">, Num Columns: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DataFrame-658"><a href="#DataFrame-658"><span class="linenos">658</span></a> <span class="p">)</span>
+</span><span id="DataFrame-659"><a href="#DataFrame-659"><span class="linenos">659</span></a> <span class="n">if_null_checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-660"><a href="#DataFrame-660"><span class="linenos">660</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">null_check_columns</span>
+</span><span id="DataFrame-661"><a href="#DataFrame-661"><span class="linenos">661</span></a> <span class="p">]</span>
+</span><span id="DataFrame-662"><a href="#DataFrame-662"><span class="linenos">662</span></a> <span class="n">nulls_added_together</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="p">,</span> <span class="n">if_null_checks</span><span class="p">)</span>
+</span><span id="DataFrame-663"><a href="#DataFrame-663"><span class="linenos">663</span></a> <span class="n">num_nulls</span> <span class="o">=</span> <span class="n">nulls_added_together</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-664"><a href="#DataFrame-664"><span class="linenos">664</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">num_nulls</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="DataFrame-665"><a href="#DataFrame-665"><span class="linenos">665</span></a> <span class="n">filtered_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">minimum_num_nulls</span><span class="p">))</span>
+</span><span id="DataFrame-666"><a href="#DataFrame-666"><span class="linenos">666</span></a> <span class="n">final_df</span> <span class="o">=</span> <span class="n">filtered_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">all_columns</span><span class="p">)</span>
+</span><span id="DataFrame-667"><a href="#DataFrame-667"><span class="linenos">667</span></a> <span class="k">return</span> <span class="n">final_df</span>
+</span><span id="DataFrame-668"><a href="#DataFrame-668"><span class="linenos">668</span></a>
+</span><span id="DataFrame-669"><a href="#DataFrame-669"><span class="linenos">669</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-670"><a href="#DataFrame-670"><span class="linenos">670</span></a> <span class="k">def</span> <span class="nf">fillna</span><span class="p">(</span>
+</span><span id="DataFrame-671"><a href="#DataFrame-671"><span class="linenos">671</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-672"><a href="#DataFrame-672"><span class="linenos">672</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnLiterals</span><span class="p">],</span>
+</span><span id="DataFrame-673"><a href="#DataFrame-673"><span class="linenos">673</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame-674"><a href="#DataFrame-674"><span class="linenos">674</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-675"><a href="#DataFrame-675"><span class="linenos">675</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame-676"><a href="#DataFrame-676"><span class="linenos">676</span></a><span class="sd"> Functionality Difference: If you provide a value to replace a null and that type conflicts</span>
+</span><span id="DataFrame-677"><a href="#DataFrame-677"><span class="linenos">677</span></a><span class="sd"> with the type of the column then PySpark will just ignore your replacement.</span>
+</span><span id="DataFrame-678"><a href="#DataFrame-678"><span class="linenos">678</span></a><span class="sd"> This will try to cast them to be the same in some cases. So they won&#39;t always match.</span>
+</span><span id="DataFrame-679"><a href="#DataFrame-679"><span class="linenos">679</span></a><span class="sd"> Best to not mix types so make sure replacement is the same type as the column</span>
+</span><span id="DataFrame-680"><a href="#DataFrame-680"><span class="linenos">680</span></a>
+</span><span id="DataFrame-681"><a href="#DataFrame-681"><span class="linenos">681</span></a><span class="sd"> Possibility for improvement: Use `typeof` function to get the type of the column</span>
+</span><span id="DataFrame-682"><a href="#DataFrame-682"><span class="linenos">682</span></a><span class="sd"> and check if it matches the type of the value provided. If not then make it null.</span>
+</span><span id="DataFrame-683"><a href="#DataFrame-683"><span class="linenos">683</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame-684"><a href="#DataFrame-684"><span class="linenos">684</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
+</span><span id="DataFrame-685"><a href="#DataFrame-685"><span class="linenos">685</span></a>
+</span><span id="DataFrame-686"><a href="#DataFrame-686"><span class="linenos">686</span></a> <span class="n">values</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DataFrame-687"><a href="#DataFrame-687"><span class="linenos">687</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DataFrame-688"><a href="#DataFrame-688"><span class="linenos">688</span></a> <span class="n">new_df</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="DataFrame-689"><a href="#DataFrame-689"><span class="linenos">689</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-690"><a href="#DataFrame-690"><span class="linenos">690</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
+</span><span id="DataFrame-691"><a href="#DataFrame-691"><span class="linenos">691</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="DataFrame-692"><a href="#DataFrame-692"><span class="linenos">692</span></a> <span class="n">values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
+</span><span id="DataFrame-693"><a href="#DataFrame-693"><span class="linenos">693</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+</span><span id="DataFrame-694"><a href="#DataFrame-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="DataFrame-695"><a href="#DataFrame-695"><span class="linenos">695</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
+</span><span id="DataFrame-696"><a href="#DataFrame-696"><span class="linenos">696</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="DataFrame-697"><a href="#DataFrame-697"><span class="linenos">697</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame-698"><a href="#DataFrame-698"><span class="linenos">698</span></a> <span class="n">value_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
+</span><span id="DataFrame-699"><a href="#DataFrame-699"><span class="linenos">699</span></a>
+</span><span id="DataFrame-700"><a href="#DataFrame-700"><span class="linenos">700</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataFrame-701"><a href="#DataFrame-701"><span class="linenos">701</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="DataFrame-702"><a href="#DataFrame-702"><span class="linenos">702</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame-703"><a href="#DataFrame-703"><span class="linenos">703</span></a> <span class="p">)</span>
+</span><span id="DataFrame-704"><a href="#DataFrame-704"><span class="linenos">704</span></a> <span class="k">for</span> <span class="n">column</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">columns</span><span class="p">,</span> <span class="n">value_columns</span><span class="p">)</span>
+</span><span id="DataFrame-705"><a href="#DataFrame-705"><span class="linenos">705</span></a> <span class="p">}</span>
+</span><span id="DataFrame-706"><a href="#DataFrame-706"><span class="linenos">706</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">null_replacement_mapping</span><span class="p">}</span>
+</span><span id="DataFrame-707"><a href="#DataFrame-707"><span class="linenos">707</span></a> <span class="n">null_replacement_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-708"><a href="#DataFrame-708"><span class="linenos">708</span></a> <span class="n">null_replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span>
+</span><span id="DataFrame-709"><a href="#DataFrame-709"><span class="linenos">709</span></a> <span class="p">]</span>
+</span><span id="DataFrame-710"><a href="#DataFrame-710"><span class="linenos">710</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">null_replacement_columns</span><span class="p">)</span>
+</span><span id="DataFrame-711"><a href="#DataFrame-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="n">new_df</span>
+</span><span id="DataFrame-712"><a href="#DataFrame-712"><span class="linenos">712</span></a>
+</span><span id="DataFrame-713"><a href="#DataFrame-713"><span class="linenos">713</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame-714"><a href="#DataFrame-714"><span class="linenos">714</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
+</span><span id="DataFrame-715"><a href="#DataFrame-715"><span class="linenos">715</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame-716"><a href="#DataFrame-716"><span class="linenos">716</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
+</span><span id="DataFrame-717"><a href="#DataFrame-717"><span class="linenos">717</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">t</span><span class="o">.</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">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 class="p">,</span>
+</span><span id="DataFrame-718"><a href="#DataFrame-718"><span class="linenos">718</span></a> <span class="n">subset</span><span 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">ColumnOrName</span><span class="p">]</span> <span class="o">|</span> <span class="n">ColumnOrName</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame-719"><a href="#DataFrame-719"><span class="linenos">719</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-720"><a href="#DataFrame-720"><span class="linenos">720</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
+</span><span id="DataFrame-721"><a href="#DataFrame-721"><span class="linenos">721</span></a>
+</span><span id="DataFrame-722"><a href="#DataFrame-722"><span class="linenos">722</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DataFrame-723"><a href="#DataFrame-723"><span class="linenos">723</span></a> <span class="n">new_df</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="DataFrame-724"><a href="#DataFrame-724"><span class="linenos">724</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame-725"><a href="#DataFrame-725"><span class="linenos">725</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
+</span><span id="DataFrame-726"><a href="#DataFrame-726"><span class="linenos">726</span></a>
+</span><span id="DataFrame-727"><a href="#DataFrame-727"><span class="linenos">727</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
+</span><span id="DataFrame-728"><a href="#DataFrame-728"><span class="linenos">728</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="DataFrame-729"><a href="#DataFrame-729"><span class="linenos">729</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span>
+</span><span id="DataFrame-730"><a href="#DataFrame-730"><span class="linenos">730</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
+</span><span id="DataFrame-731"><a href="#DataFrame-731"><span class="linenos">731</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">old_values</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="DataFrame-732"><a href="#DataFrame-732"><span class="linenos">732</span></a> <span class="k">assert</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 class="s2">&quot;value must be a list since the replacements are a list&quot;</span>
+</span><span id="DataFrame-733"><a href="#DataFrame-733"><span class="linenos">733</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
+</span><span id="DataFrame-734"><a href="#DataFrame-734"><span class="linenos">734</span></a> <span class="n">value</span>
+</span><span id="DataFrame-735"><a href="#DataFrame-735"><span class="linenos">735</span></a> <span class="p">),</span> <span class="s2">&quot;the replacements and values must be the same length&quot;</span>
+</span><span id="DataFrame-736"><a href="#DataFrame-736"><span class="linenos">736</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="n">to_replace</span>
+</span><span id="DataFrame-737"><a href="#DataFrame-737"><span class="linenos">737</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="DataFrame-738"><a href="#DataFrame-738"><span class="linenos">738</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-739"><a href="#DataFrame-739"><span class="linenos">739</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">to_replace</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame-740"><a href="#DataFrame-740"><span class="linenos">740</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame-741"><a href="#DataFrame-741"><span class="linenos">741</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">old_values</span><span class="p">]</span>
+</span><span id="DataFrame-742"><a href="#DataFrame-742"><span class="linenos">742</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">new_values</span><span class="p">]</span>
+</span><span id="DataFrame-743"><a href="#DataFrame-743"><span class="linenos">743</span></a>
+</span><span id="DataFrame-744"><a href="#DataFrame-744"><span class="linenos">744</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="DataFrame-745"><a href="#DataFrame-745"><span class="linenos">745</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="DataFrame-746"><a href="#DataFrame-746"><span class="linenos">746</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame-747"><a href="#DataFrame-747"><span class="linenos">747</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">old_values</span><span class="p">,</span> <span class="n">new_values</span><span class="p">)):</span>
+</span><span id="DataFrame-748"><a href="#DataFrame-748"><span class="linenos">748</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="DataFrame-749"><a href="#DataFrame-749"><span class="linenos">749</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span>
+</span><span id="DataFrame-750"><a href="#DataFrame-750"><span class="linenos">750</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-751"><a href="#DataFrame-751"><span class="linenos">751</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="DataFrame-752"><a href="#DataFrame-752"><span class="linenos">752</span></a> <span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span>
+</span><span id="DataFrame-753"><a href="#DataFrame-753"><span class="linenos">753</span></a> <span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame-754"><a href="#DataFrame-754"><span class="linenos">754</span></a> <span class="p">)</span>
+</span><span id="DataFrame-755"><a href="#DataFrame-755"><span class="linenos">755</span></a>
+</span><span id="DataFrame-756"><a href="#DataFrame-756"><span class="linenos">756</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">replacement_mapping</span><span class="p">}</span>
+</span><span id="DataFrame-757"><a href="#DataFrame-757"><span class="linenos">757</span></a> <span class="n">replacement_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">]</span>
+</span><span id="DataFrame-758"><a href="#DataFrame-758"><span class="linenos">758</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">replacement_columns</span><span class="p">)</span>
+</span><span id="DataFrame-759"><a href="#DataFrame-759"><span class="linenos">759</span></a> <span class="k">return</span> <span class="n">new_df</span>
+</span><span id="DataFrame-760"><a href="#DataFrame-760"><span class="linenos">760</span></a>
+</span><span id="DataFrame-761"><a href="#DataFrame-761"><span class="linenos">761</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-762"><a href="#DataFrame-762"><span class="linenos">762</span></a> <span class="k">def</span> <span class="nf">withColumn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-763"><a href="#DataFrame-763"><span class="linenos">763</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
+</span><span id="DataFrame-764"><a href="#DataFrame-764"><span class="linenos">764</span></a> <span class="n">existing_col_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="DataFrame-765"><a href="#DataFrame-765"><span class="linenos">765</span></a> <span class="n">existing_col_index</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame-766"><a href="#DataFrame-766"><span class="linenos">766</span></a> <span class="n">existing_col_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">colName</span><span class="p">)</span> <span class="k">if</span> <span class="n">colName</span> <span class="ow">in</span> <span class="n">existing_col_names</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="DataFrame-767"><a href="#DataFrame-767"><span class="linenos">767</span></a> <span class="p">)</span>
+</span><span id="DataFrame-768"><a href="#DataFrame-768"><span class="linenos">768</span></a> <span class="k">if</span> <span class="n">existing_col_index</span><span class="p">:</span>
+</span><span id="DataFrame-769"><a href="#DataFrame-769"><span class="linenos">769</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="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-770"><a href="#DataFrame-770"><span class="linenos">770</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="n">existing_col_index</span><span class="p">]</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="DataFrame-771"><a href="#DataFrame-771"><span class="linenos">771</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
+</span><span id="DataFrame-772"><a href="#DataFrame-772"><span class="linenos">772</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">colName</span><span class="p">),</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="DataFrame-773"><a href="#DataFrame-773"><span class="linenos">773</span></a>
+</span><span id="DataFrame-774"><a href="#DataFrame-774"><span class="linenos">774</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-775"><a href="#DataFrame-775"><span class="linenos">775</span></a> <span class="k">def</span> <span class="nf">withColumnRenamed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">existing</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="DataFrame-776"><a href="#DataFrame-776"><span class="linenos">776</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="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame-777"><a href="#DataFrame-777"><span class="linenos">777</span></a> <span class="n">existing_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-778"><a href="#DataFrame-778"><span class="linenos">778</span></a> <span class="n">expression</span>
+</span><span id="DataFrame-779"><a href="#DataFrame-779"><span class="linenos">779</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataFrame-780"><a href="#DataFrame-780"><span class="linenos">780</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="n">existing</span>
+</span><span id="DataFrame-781"><a href="#DataFrame-781"><span class="linenos">781</span></a> <span class="p">]</span>
+</span><span id="DataFrame-782"><a href="#DataFrame-782"><span class="linenos">782</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">existing_columns</span><span class="p">:</span>
+</span><span id="DataFrame-783"><a href="#DataFrame-783"><span class="linenos">783</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Tried to rename a column that doesn&#39;t exist&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-784"><a href="#DataFrame-784"><span class="linenos">784</span></a> <span class="k">for</span> <span class="n">existing_column</span> <span class="ow">in</span> <span class="n">existing_columns</span><span class="p">:</span>
+</span><span id="DataFrame-785"><a href="#DataFrame-785"><span class="linenos">785</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">existing_column</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="DataFrame-786"><a href="#DataFrame-786"><span class="linenos">786</span></a> <span class="n">existing_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">alias_</span><span class="p">(</span><span class="n">existing_column</span><span class="p">,</span> <span class="n">new</span><span class="p">))</span>
+</span><span id="DataFrame-787"><a href="#DataFrame-787"><span class="linenos">787</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame-788"><a href="#DataFrame-788"><span class="linenos">788</span></a> <span class="n">existing_column</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">new</span><span class="p">))</span>
+</span><span id="DataFrame-789"><a href="#DataFrame-789"><span class="linenos">789</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
+</span><span id="DataFrame-790"><a href="#DataFrame-790"><span class="linenos">790</span></a>
+</span><span id="DataFrame-791"><a href="#DataFrame-791"><span class="linenos">791</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame-792"><a href="#DataFrame-792"><span class="linenos">792</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-793"><a href="#DataFrame-793"><span class="linenos">793</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</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="DataFrame-794"><a href="#DataFrame-794"><span class="linenos">794</span></a> <span class="n">drop_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-795"><a href="#DataFrame-795"><span class="linenos">795</span></a> <span class="n">new_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame-796"><a href="#DataFrame-796"><span class="linenos">796</span></a> <span class="n">col</span>
+</span><span id="DataFrame-797"><a href="#DataFrame-797"><span class="linenos">797</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">all_columns</span>
+</span><span id="DataFrame-798"><a href="#DataFrame-798"><span class="linenos">798</span></a> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">drop_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">drop_column</span> <span class="ow">in</span> <span class="n">drop_cols</span><span class="p">]</span>
+</span><span id="DataFrame-799"><a href="#DataFrame-799"><span class="linenos">799</span></a> <span class="p">]</span>
+</span><span id="DataFrame-800"><a href="#DataFrame-800"><span class="linenos">800</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</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">new_columns</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame-801"><a href="#DataFrame-801"><span class="linenos">801</span></a>
+</span><span id="DataFrame-802"><a href="#DataFrame-802"><span class="linenos">802</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">)</span>
+</span><span id="DataFrame-803"><a href="#DataFrame-803"><span class="linenos">803</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">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-804"><a href="#DataFrame-804"><span class="linenos">804</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">))</span>
+</span><span id="DataFrame-805"><a href="#DataFrame-805"><span class="linenos">805</span></a>
+</span><span id="DataFrame-806"><a href="#DataFrame-806"><span class="linenos">806</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame-807"><a href="#DataFrame-807"><span class="linenos">807</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 class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">parameters</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-808"><a href="#DataFrame-808"><span class="linenos">808</span></a> <span class="n">parameter_list</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span>
+</span><span id="DataFrame-809"><a href="#DataFrame-809"><span class="linenos">809</span></a> <span class="n">parameter_columns</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame-810"><a href="#DataFrame-810"><span class="linenos">810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">parameter_list</span><span class="p">)</span>
+</span><span id="DataFrame-811"><a href="#DataFrame-811"><span class="linenos">811</span></a> <span class="k">if</span> <span class="n">parameters</span>
+</span><span id="DataFrame-812"><a href="#DataFrame-812"><span class="linenos">812</span></a> <span class="k">else</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">])</span>
+</span><span id="DataFrame-813"><a href="#DataFrame-813"><span class="linenos">813</span></a> <span class="p">)</span>
+</span><span id="DataFrame-814"><a href="#DataFrame-814"><span class="linenos">814</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">parameter_columns</span><span class="p">)</span>
+</span><span id="DataFrame-815"><a href="#DataFrame-815"><span class="linenos">815</span></a>
+</span><span id="DataFrame-816"><a href="#DataFrame-816"><span class="linenos">816</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame-817"><a href="#DataFrame-817"><span class="linenos">817</span></a> <span class="k">def</span> <span class="nf">repartition</span><span class="p">(</span>
+</span><span id="DataFrame-818"><a href="#DataFrame-818"><span class="linenos">818</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">ColumnOrName</span><span class="p">],</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">ColumnOrName</span>
+</span><span id="DataFrame-819"><a href="#DataFrame-819"><span class="linenos">819</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-820"><a href="#DataFrame-820"><span class="linenos">820</span></a> <span class="n">num_partition_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">numPartitions</span><span class="p">)</span>
+</span><span id="DataFrame-821"><a href="#DataFrame-821"><span class="linenos">821</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame-822"><a href="#DataFrame-822"><span class="linenos">822</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">num_partition_cols</span> <span class="o">+</span> <span class="n">columns</span>
+</span><span id="DataFrame-823"><a href="#DataFrame-823"><span class="linenos">823</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;repartition&quot;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="DataFrame-824"><a href="#DataFrame-824"><span class="linenos">824</span></a>
+</span><span id="DataFrame-825"><a href="#DataFrame-825"><span class="linenos">825</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame-826"><a href="#DataFrame-826"><span class="linenos">826</span></a> <span class="k">def</span> <span class="nf">coalesce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-827"><a href="#DataFrame-827"><span class="linenos">827</span></a> <span class="n">num_partitions</span> <span class="o">=</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="n">numPartitions</span><span class="p">])</span>
+</span><span id="DataFrame-828"><a href="#DataFrame-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</span><span class="p">,</span> <span class="n">num_partitions</span><span class="p">)</span>
+</span><span id="DataFrame-829"><a href="#DataFrame-829"><span class="linenos">829</span></a>
+</span><span id="DataFrame-830"><a href="#DataFrame-830"><span class="linenos">830</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame-831"><a href="#DataFrame-831"><span class="linenos">831</span></a> <span class="k">def</span> <span class="nf">cache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-832"><a href="#DataFrame-832"><span class="linenos">832</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storage_level</span><span class="o">=</span><span class="s2">&quot;MEMORY_AND_DISK&quot;</span><span class="p">)</span>
+</span><span id="DataFrame-833"><a href="#DataFrame-833"><span class="linenos">833</span></a>
+</span><span id="DataFrame-834"><a href="#DataFrame-834"><span class="linenos">834</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame-835"><a href="#DataFrame-835"><span class="linenos">835</span></a> <span class="k">def</span> <span class="nf">persist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storageLevel</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MEMORY_AND_DISK_SER&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame-836"><a href="#DataFrame-836"><span class="linenos">836</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame-837"><a href="#DataFrame-837"><span class="linenos">837</span></a><span class="sd"> Storage Level Options: https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-aux-cache-cache-table.html</span>
+</span><span id="DataFrame-838"><a href="#DataFrame-838"><span class="linenos">838</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame-839"><a href="#DataFrame-839"><span class="linenos">839</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storageLevel</span><span class="p">)</span>
</span></pre></div>
@@ -1681,30 +1829,30 @@
<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;140247754743024&#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;140247754780976&#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;139783390855952&#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;139783390992784&#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>
</div>
<a class="headerlink" href="#DataFrame.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.__init__-46"><a href="#DataFrame.__init__-46"><span class="linenos">46</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="DataFrame.__init__-47"><a href="#DataFrame.__init__-47"><span class="linenos">47</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.__init__-48"><a href="#DataFrame.__init__-48"><span class="linenos">48</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">,</span>
-</span><span id="DataFrame.__init__-49"><a href="#DataFrame.__init__-49"><span class="linenos">49</span></a> <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="DataFrame.__init__-50"><a href="#DataFrame.__init__-50"><span class="linenos">50</span></a> <span class="n">branch_id</span><span 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="DataFrame.__init__-51"><a href="#DataFrame.__init__-51"><span class="linenos">51</span></a> <span class="n">sequence_id</span><span 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="DataFrame.__init__-52"><a href="#DataFrame.__init__-52"><span class="linenos">52</span></a> <span class="n">last_op</span><span class="p">:</span> <span class="n">Operation</span> <span class="o">=</span> <span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">,</span>
-</span><span id="DataFrame.__init__-53"><a href="#DataFrame.__init__-53"><span class="linenos">53</span></a> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame.__init__-54"><a href="#DataFrame.__init__-54"><span class="linenos">54</span></a> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">OutputExpressionContainer</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame.__init__-55"><a href="#DataFrame.__init__-55"><span class="linenos">55</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="DataFrame.__init__-56"><a href="#DataFrame.__init__-56"><span class="linenos">56</span></a> <span class="p">):</span>
-</span><span id="DataFrame.__init__-57"><a href="#DataFrame.__init__-57"><span class="linenos">57</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
-</span><span id="DataFrame.__init__-58"><a href="#DataFrame.__init__-58"><span class="linenos">58</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="DataFrame.__init__-59"><a href="#DataFrame.__init__-59"><span class="linenos">59</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">branch_id</span> <span class="o">=</span> <span class="n">branch_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_branch_id</span>
-</span><span id="DataFrame.__init__-60"><a href="#DataFrame.__init__-60"><span class="linenos">60</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span> <span class="o">=</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
-</span><span id="DataFrame.__init__-61"><a href="#DataFrame.__init__-61"><span class="linenos">61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span> <span class="o">=</span> <span class="n">last_op</span>
-</span><span id="DataFrame.__init__-62"><a href="#DataFrame.__init__-62"><span class="linenos">62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="o">=</span> <span class="n">pending_hints</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="DataFrame.__init__-63"><a href="#DataFrame.__init__-63"><span class="linenos">63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">output_expression_container</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.__init__-50"><a href="#DataFrame.__init__-50"><span class="linenos">50</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="DataFrame.__init__-51"><a href="#DataFrame.__init__-51"><span class="linenos">51</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.__init__-52"><a href="#DataFrame.__init__-52"><span class="linenos">52</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">,</span>
+</span><span id="DataFrame.__init__-53"><a href="#DataFrame.__init__-53"><span class="linenos">53</span></a> <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="DataFrame.__init__-54"><a href="#DataFrame.__init__-54"><span class="linenos">54</span></a> <span class="n">branch_id</span><span 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="DataFrame.__init__-55"><a href="#DataFrame.__init__-55"><span class="linenos">55</span></a> <span class="n">sequence_id</span><span 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="DataFrame.__init__-56"><a href="#DataFrame.__init__-56"><span class="linenos">56</span></a> <span class="n">last_op</span><span class="p">:</span> <span class="n">Operation</span> <span class="o">=</span> <span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">,</span>
+</span><span id="DataFrame.__init__-57"><a href="#DataFrame.__init__-57"><span class="linenos">57</span></a> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame.__init__-58"><a href="#DataFrame.__init__-58"><span class="linenos">58</span></a> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">OutputExpressionContainer</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame.__init__-59"><a href="#DataFrame.__init__-59"><span class="linenos">59</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataFrame.__init__-60"><a href="#DataFrame.__init__-60"><span class="linenos">60</span></a> <span class="p">):</span>
+</span><span id="DataFrame.__init__-61"><a href="#DataFrame.__init__-61"><span class="linenos">61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
+</span><span id="DataFrame.__init__-62"><a href="#DataFrame.__init__-62"><span class="linenos">62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="DataFrame.__init__-63"><a href="#DataFrame.__init__-63"><span class="linenos">63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">branch_id</span> <span class="o">=</span> <span class="n">branch_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_branch_id</span>
+</span><span id="DataFrame.__init__-64"><a href="#DataFrame.__init__-64"><span class="linenos">64</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span> <span class="o">=</span> <span class="n">sequence_id</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
+</span><span id="DataFrame.__init__-65"><a href="#DataFrame.__init__-65"><span class="linenos">65</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span> <span class="o">=</span> <span class="n">last_op</span>
+</span><span id="DataFrame.__init__-66"><a href="#DataFrame.__init__-66"><span class="linenos">66</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pending_hints</span> <span class="o">=</span> <span class="n">pending_hints</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="DataFrame.__init__-67"><a href="#DataFrame.__init__-67"><span class="linenos">67</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">output_expression_container</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span>
</span></pre></div>
@@ -1870,68 +2018,82 @@
<div class="attr function">
<span class="def">def</span>
- <span class="name">sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="s1">&#39;spark&#39;</span>, </span><span class="param"><span class="n">optimize</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
+ <span class="name">sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="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;139783386742896&#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">optimize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="DataFrame.sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#DataFrame.sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.sql-295"><a href="#DataFrame.sql-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</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">optimize</span><span class="o">=</span><span class="kc">True</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="DataFrame.sql-296"><a href="#DataFrame.sql-296"><span class="linenos">296</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_pending_hints</span><span class="p">()</span>
-</span><span id="DataFrame.sql-297"><a href="#DataFrame.sql-297"><span class="linenos">297</span></a> <span class="n">select_expressions</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_get_select_expressions</span><span class="p">()</span>
-</span><span id="DataFrame.sql-298"><a href="#DataFrame.sql-298"><span class="linenos">298</span></a> <span class="n">output_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">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame.sql-299"><a href="#DataFrame.sql-299"><span class="linenos">299</span></a> <span class="n">replacement_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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><span id="DataFrame.sql-300"><a href="#DataFrame.sql-300"><span class="linenos">300</span></a> <span class="k">for</span> <span class="n">expression_type</span><span class="p">,</span> <span class="n">select_expression</span> <span class="ow">in</span> <span class="n">select_expressions</span><span class="p">:</span>
-</span><span id="DataFrame.sql-301"><a href="#DataFrame.sql-301"><span class="linenos">301</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">replace_id_value</span><span class="p">,</span> <span class="n">replacement_mapping</span><span class="p">)</span>
-</span><span id="DataFrame.sql-302"><a href="#DataFrame.sql-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="n">optimize</span><span class="p">:</span>
-</span><span id="DataFrame.sql-303"><a href="#DataFrame.sql-303"><span class="linenos">303</span></a> <span class="n">select_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">Select</span><span class="p">,</span> <span class="n">optimize_func</span><span class="p">(</span><span class="n">select_expression</span><span class="p">))</span>
-</span><span id="DataFrame.sql-304"><a href="#DataFrame.sql-304"><span class="linenos">304</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_replace_cte_names_with_hashes</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
-</span><span id="DataFrame.sql-305"><a href="#DataFrame.sql-305"><span class="linenos">305</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]</span>
-</span><span id="DataFrame.sql-306"><a href="#DataFrame.sql-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">:</span>
-</span><span id="DataFrame.sql-307"><a href="#DataFrame.sql-307"><span class="linenos">307</span></a> <span class="n">cache_table_name</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
-</span><span id="DataFrame.sql-308"><a href="#DataFrame.sql-308"><span class="linenos">308</span></a> <span class="n">cache_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">cache_table_name</span><span class="p">)</span>
-</span><span id="DataFrame.sql-309"><a href="#DataFrame.sql-309"><span class="linenos">309</span></a> <span class="n">original_alias_name</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cte_alias_name&quot;</span><span class="p">]</span>
-</span><span id="DataFrame.sql-310"><a href="#DataFrame.sql-310"><span class="linenos">310</span></a>
-</span><span id="DataFrame.sql-311"><a href="#DataFrame.sql-311"><span class="linenos">311</span></a> <span class="n">replacement_mapping</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">original_alias_name</span><span class="p">)]</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="c1"># type: ignore</span>
-</span><span id="DataFrame.sql-312"><a href="#DataFrame.sql-312"><span class="linenos">312</span></a> <span class="n">cache_table_name</span>
-</span><span id="DataFrame.sql-313"><a href="#DataFrame.sql-313"><span class="linenos">313</span></a> <span class="p">)</span>
-</span><span id="DataFrame.sql-314"><a href="#DataFrame.sql-314"><span class="linenos">314</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span>
-</span><span id="DataFrame.sql-315"><a href="#DataFrame.sql-315"><span class="linenos">315</span></a> <span class="n">cache_table_name</span><span class="p">,</span>
-</span><span id="DataFrame.sql-316"><a href="#DataFrame.sql-316"><span class="linenos">316</span></a> <span class="p">{</span>
-</span><span id="DataFrame.sql-317"><a href="#DataFrame.sql-317"><span class="linenos">317</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="DataFrame.sql-318"><a href="#DataFrame.sql-318"><span class="linenos">318</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="DataFrame.sql-319"><a href="#DataFrame.sql-319"><span class="linenos">319</span></a> <span class="p">},</span>
-</span><span id="DataFrame.sql-320"><a href="#DataFrame.sql-320"><span class="linenos">320</span></a> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">,</span>
-</span><span id="DataFrame.sql-321"><a href="#DataFrame.sql-321"><span class="linenos">321</span></a> <span class="p">)</span>
-</span><span id="DataFrame.sql-322"><a href="#DataFrame.sql-322"><span class="linenos">322</span></a> <span class="n">cache_storage_level</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">]</span>
-</span><span id="DataFrame.sql-323"><a href="#DataFrame.sql-323"><span class="linenos">323</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.sql-324"><a href="#DataFrame.sql-324"><span class="linenos">324</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="s2">&quot;storageLevel&quot;</span><span class="p">),</span>
-</span><span id="DataFrame.sql-325"><a href="#DataFrame.sql-325"><span class="linenos">325</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">cache_storage_level</span><span class="p">),</span>
-</span><span id="DataFrame.sql-326"><a href="#DataFrame.sql-326"><span class="linenos">326</span></a> <span class="p">]</span>
-</span><span id="DataFrame.sql-327"><a href="#DataFrame.sql-327"><span class="linenos">327</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">(</span>
-</span><span id="DataFrame.sql-328"><a href="#DataFrame.sql-328"><span class="linenos">328</span></a> <span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">select_expression</span><span class="p">,</span> <span class="n">lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span>
-</span><span id="DataFrame.sql-329"><a href="#DataFrame.sql-329"><span class="linenos">329</span></a> <span class="p">)</span>
-</span><span id="DataFrame.sql-330"><a href="#DataFrame.sql-330"><span class="linenos">330</span></a> <span class="c1"># We will drop the &quot;view&quot; if it exists before running the cache table</span>
-</span><span id="DataFrame.sql-331"><a href="#DataFrame.sql-331"><span class="linenos">331</span></a> <span class="n">output_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">Drop</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;VIEW&quot;</span><span class="p">))</span>
-</span><span id="DataFrame.sql-332"><a href="#DataFrame.sql-332"><span class="linenos">332</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span>
-</span><span id="DataFrame.sql-333"><a href="#DataFrame.sql-333"><span class="linenos">333</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame.sql-334"><a href="#DataFrame.sql-334"><span class="linenos">334</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">select_expression</span><span class="p">)</span>
-</span><span id="DataFrame.sql-335"><a href="#DataFrame.sql-335"><span class="linenos">335</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">:</span>
-</span><span id="DataFrame.sql-336"><a href="#DataFrame.sql-336"><span class="linenos">336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame.sql-337"><a href="#DataFrame.sql-337"><span class="linenos">337</span></a> <span class="n">select_without_ctes</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame.sql-338"><a href="#DataFrame.sql-338"><span class="linenos">338</span></a> <span class="n">select_without_ctes</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="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame.sql-339"><a href="#DataFrame.sql-339"><span class="linenos">339</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">select_without_ctes</span><span class="p">)</span>
-</span><span id="DataFrame.sql-340"><a href="#DataFrame.sql-340"><span class="linenos">340</span></a> <span class="k">if</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
-</span><span id="DataFrame.sql-341"><a href="#DataFrame.sql-341"><span class="linenos">341</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">))</span>
-</span><span id="DataFrame.sql-342"><a href="#DataFrame.sql-342"><span class="linenos">342</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span>
-</span><span id="DataFrame.sql-343"><a href="#DataFrame.sql-343"><span class="linenos">343</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">select_expression</span>
-</span><span id="DataFrame.sql-344"><a href="#DataFrame.sql-344"><span class="linenos">344</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.sql-345"><a href="#DataFrame.sql-345"><span class="linenos">345</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 expression type: </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="DataFrame.sql-346"><a href="#DataFrame.sql-346"><span class="linenos">346</span></a> <span class="n">output_expressions</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="DataFrame.sql-347"><a href="#DataFrame.sql-347"><span class="linenos">347</span></a>
-</span><span id="DataFrame.sql-348"><a href="#DataFrame.sql-348"><span class="linenos">348</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="DataFrame.sql-349"><a href="#DataFrame.sql-349"><span class="linenos">349</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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">kwargs</span><span class="p">})</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">output_expressions</span>
-</span><span id="DataFrame.sql-350"><a href="#DataFrame.sql-350"><span class="linenos">350</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.sql-301"><a href="#DataFrame.sql-301"><span class="linenos">301</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="DataFrame.sql-302"><a href="#DataFrame.sql-302"><span class="linenos">302</span></a> <span class="bp">self</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">Optional</span><span class="p">[</span><span class="n">DialectType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">optimize</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">kwargs</span>
+</span><span id="DataFrame.sql-303"><a href="#DataFrame.sql-303"><span class="linenos">303</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="DataFrame.sql-304"><a href="#DataFrame.sql-304"><span class="linenos">304</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="DataFrame.sql-305"><a href="#DataFrame.sql-305"><span class="linenos">305</span></a>
+</span><span id="DataFrame.sql-306"><a href="#DataFrame.sql-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">dialect</span> <span class="ow">and</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">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">:</span>
+</span><span id="DataFrame.sql-307"><a href="#DataFrame.sql-307"><span class="linenos">307</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+</span><span id="DataFrame.sql-308"><a href="#DataFrame.sql-308"><span class="linenos">308</span></a> <span class="sa">f</span><span class="s2">&quot;The recommended way of defining a dialect is by doing `SparkSession.builder.config(&#39;sqlframe.dialect&#39;, &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;).getOrCreate()`. It is no longer needed then when calling `sql`. If you run into issues try updating your query to use this pattern.&quot;</span>
+</span><span id="DataFrame.sql-309"><a href="#DataFrame.sql-309"><span class="linenos">309</span></a> <span class="p">)</span>
+</span><span id="DataFrame.sql-310"><a href="#DataFrame.sql-310"><span class="linenos">310</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_pending_hints</span><span class="p">()</span>
+</span><span id="DataFrame.sql-311"><a href="#DataFrame.sql-311"><span class="linenos">311</span></a> <span class="n">select_expressions</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_get_select_expressions</span><span class="p">()</span>
+</span><span id="DataFrame.sql-312"><a href="#DataFrame.sql-312"><span class="linenos">312</span></a> <span class="n">output_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">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame.sql-313"><a href="#DataFrame.sql-313"><span class="linenos">313</span></a> <span class="n">replacement_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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><span id="DataFrame.sql-314"><a href="#DataFrame.sql-314"><span class="linenos">314</span></a> <span class="k">for</span> <span class="n">expression_type</span><span class="p">,</span> <span class="n">select_expression</span> <span class="ow">in</span> <span class="n">select_expressions</span><span class="p">:</span>
+</span><span id="DataFrame.sql-315"><a href="#DataFrame.sql-315"><span class="linenos">315</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">replace_id_value</span><span class="p">,</span> <span class="n">replacement_mapping</span><span class="p">)</span>
+</span><span id="DataFrame.sql-316"><a href="#DataFrame.sql-316"><span class="linenos">316</span></a> <span class="k">if</span> <span class="n">optimize</span><span class="p">:</span>
+</span><span id="DataFrame.sql-317"><a href="#DataFrame.sql-317"><span class="linenos">317</span></a> <span class="n">quote_identifiers</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame.sql-318"><a href="#DataFrame.sql-318"><span class="linenos">318</span></a> <span class="n">select_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><span id="DataFrame.sql-319"><a href="#DataFrame.sql-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">optimize_func</span><span class="p">(</span><span class="n">select_expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="DataFrame.sql-320"><a href="#DataFrame.sql-320"><span class="linenos">320</span></a> <span class="p">)</span>
+</span><span id="DataFrame.sql-321"><a href="#DataFrame.sql-321"><span class="linenos">321</span></a> <span class="n">select_expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_replace_cte_names_with_hashes</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame.sql-322"><a href="#DataFrame.sql-322"><span class="linenos">322</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">]</span>
+</span><span id="DataFrame.sql-323"><a href="#DataFrame.sql-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">:</span>
+</span><span id="DataFrame.sql-324"><a href="#DataFrame.sql-324"><span class="linenos">324</span></a> <span class="n">cache_table_name</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_create_hash_from_expression</span><span class="p">(</span><span class="n">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame.sql-325"><a href="#DataFrame.sql-325"><span class="linenos">325</span></a> <span class="n">cache_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">cache_table_name</span><span class="p">)</span>
+</span><span id="DataFrame.sql-326"><a href="#DataFrame.sql-326"><span class="linenos">326</span></a> <span class="n">original_alias_name</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cte_alias_name&quot;</span><span class="p">]</span>
+</span><span id="DataFrame.sql-327"><a href="#DataFrame.sql-327"><span class="linenos">327</span></a>
+</span><span id="DataFrame.sql-328"><a href="#DataFrame.sql-328"><span class="linenos">328</span></a> <span class="n">replacement_mapping</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">original_alias_name</span><span class="p">)]</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="c1"># type: ignore</span>
+</span><span id="DataFrame.sql-329"><a href="#DataFrame.sql-329"><span class="linenos">329</span></a> <span class="n">cache_table_name</span>
+</span><span id="DataFrame.sql-330"><a href="#DataFrame.sql-330"><span class="linenos">330</span></a> <span class="p">)</span>
+</span><span id="DataFrame.sql-331"><a href="#DataFrame.sql-331"><span class="linenos">331</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span>
+</span><span id="DataFrame.sql-332"><a href="#DataFrame.sql-332"><span class="linenos">332</span></a> <span class="n">cache_table_name</span><span class="p">,</span>
+</span><span id="DataFrame.sql-333"><a href="#DataFrame.sql-333"><span class="linenos">333</span></a> <span class="p">{</span>
+</span><span id="DataFrame.sql-334"><a href="#DataFrame.sql-334"><span class="linenos">334</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="DataFrame.sql-335"><a href="#DataFrame.sql-335"><span class="linenos">335</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="DataFrame.sql-336"><a href="#DataFrame.sql-336"><span class="linenos">336</span></a> <span class="p">)</span>
+</span><span id="DataFrame.sql-337"><a href="#DataFrame.sql-337"><span class="linenos">337</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataFrame.sql-338"><a href="#DataFrame.sql-338"><span class="linenos">338</span></a> <span class="p">},</span>
+</span><span id="DataFrame.sql-339"><a href="#DataFrame.sql-339"><span class="linenos">339</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="DataFrame.sql-340"><a href="#DataFrame.sql-340"><span class="linenos">340</span></a> <span class="p">)</span>
+</span><span id="DataFrame.sql-341"><a href="#DataFrame.sql-341"><span class="linenos">341</span></a> <span class="n">cache_storage_level</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;cache_storage_level&quot;</span><span class="p">]</span>
+</span><span id="DataFrame.sql-342"><a href="#DataFrame.sql-342"><span class="linenos">342</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.sql-343"><a href="#DataFrame.sql-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;storageLevel&quot;</span><span class="p">),</span>
+</span><span id="DataFrame.sql-344"><a href="#DataFrame.sql-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">cache_storage_level</span><span class="p">),</span>
+</span><span id="DataFrame.sql-345"><a href="#DataFrame.sql-345"><span class="linenos">345</span></a> <span class="p">]</span>
+</span><span id="DataFrame.sql-346"><a href="#DataFrame.sql-346"><span class="linenos">346</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">(</span>
+</span><span id="DataFrame.sql-347"><a href="#DataFrame.sql-347"><span class="linenos">347</span></a> <span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">select_expression</span><span class="p">,</span> <span class="n">lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span>
+</span><span id="DataFrame.sql-348"><a href="#DataFrame.sql-348"><span class="linenos">348</span></a> <span class="p">)</span>
+</span><span id="DataFrame.sql-349"><a href="#DataFrame.sql-349"><span class="linenos">349</span></a> <span class="c1"># We will drop the &quot;view&quot; if it exists before running the cache table</span>
+</span><span id="DataFrame.sql-350"><a href="#DataFrame.sql-350"><span class="linenos">350</span></a> <span class="n">output_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">Drop</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cache_table</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;VIEW&quot;</span><span class="p">))</span>
+</span><span id="DataFrame.sql-351"><a href="#DataFrame.sql-351"><span class="linenos">351</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span>
+</span><span id="DataFrame.sql-352"><a href="#DataFrame.sql-352"><span class="linenos">352</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame.sql-353"><a href="#DataFrame.sql-353"><span class="linenos">353</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">select_expression</span><span class="p">)</span>
+</span><span id="DataFrame.sql-354"><a href="#DataFrame.sql-354"><span class="linenos">354</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">:</span>
+</span><span id="DataFrame.sql-355"><a href="#DataFrame.sql-355"><span class="linenos">355</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">output_expression_container</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame.sql-356"><a href="#DataFrame.sql-356"><span class="linenos">356</span></a> <span class="n">select_without_ctes</span> <span class="o">=</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame.sql-357"><a href="#DataFrame.sql-357"><span class="linenos">357</span></a> <span class="n">select_without_ctes</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="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame.sql-358"><a href="#DataFrame.sql-358"><span class="linenos">358</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">select_without_ctes</span><span class="p">)</span>
+</span><span id="DataFrame.sql-359"><a href="#DataFrame.sql-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
+</span><span id="DataFrame.sql-360"><a href="#DataFrame.sql-360"><span class="linenos">360</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">With</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">select_expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">))</span>
+</span><span id="DataFrame.sql-361"><a href="#DataFrame.sql-361"><span class="linenos">361</span></a> <span class="k">elif</span> <span class="n">expression_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span>
+</span><span id="DataFrame.sql-362"><a href="#DataFrame.sql-362"><span class="linenos">362</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">select_expression</span>
+</span><span id="DataFrame.sql-363"><a href="#DataFrame.sql-363"><span class="linenos">363</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.sql-364"><a href="#DataFrame.sql-364"><span class="linenos">364</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 expression type: </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="DataFrame.sql-365"><a href="#DataFrame.sql-365"><span class="linenos">365</span></a> <span class="n">output_expressions</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="DataFrame.sql-366"><a href="#DataFrame.sql-366"><span class="linenos">366</span></a>
+</span><span id="DataFrame.sql-367"><a href="#DataFrame.sql-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="DataFrame.sql-368"><a href="#DataFrame.sql-368"><span class="linenos">368</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">})</span>
+</span><span id="DataFrame.sql-369"><a href="#DataFrame.sql-369"><span class="linenos">369</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">output_expressions</span>
+</span><span id="DataFrame.sql-370"><a href="#DataFrame.sql-370"><span class="linenos">370</span></a> <span class="p">]</span>
</span></pre></div>
@@ -1949,8 +2111,8 @@
</div>
<a class="headerlink" href="#DataFrame.copy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.copy-352"><a href="#DataFrame.copy-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.copy-353"><a href="#DataFrame.copy-353"><span class="linenos">353</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="o">**</span><span class="n">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.copy-372"><a href="#DataFrame.copy-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.copy-373"><a href="#DataFrame.copy-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span><span class="o">**</span><span class="n">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
</span></pre></div>
@@ -1969,43 +2131,43 @@
</div>
<a class="headerlink" href="#DataFrame.select"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.select-355"><a href="#DataFrame.select-355"><span class="linenos">355</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.select-356"><a href="#DataFrame.select-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.select-357"><a href="#DataFrame.select-357"><span class="linenos">357</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame.select-358"><a href="#DataFrame.select-358"><span class="linenos">358</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;append&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="DataFrame.select-359"><a href="#DataFrame.select-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="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><span id="DataFrame.select-360"><a href="#DataFrame.select-360"><span class="linenos">360</span></a> <span class="n">ambiguous_cols</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.select-361"><a href="#DataFrame.select-361"><span class="linenos">361</span></a> <span class="n">col</span>
-</span><span id="DataFrame.select-362"><a href="#DataFrame.select-362"><span class="linenos">362</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span>
-</span><span id="DataFrame.select-363"><a href="#DataFrame.select-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">column_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="ow">and</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">column_expression</span><span class="o">.</span><span class="n">table</span>
-</span><span id="DataFrame.select-364"><a href="#DataFrame.select-364"><span class="linenos">364</span></a> <span class="p">]</span>
-</span><span id="DataFrame.select-365"><a href="#DataFrame.select-365"><span class="linenos">365</span></a> <span class="k">if</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
-</span><span id="DataFrame.select-366"><a href="#DataFrame.select-366"><span class="linenos">366</span></a> <span class="n">join_table_identifiers</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.select-367"><a href="#DataFrame.select-367"><span class="linenos">367</span></a> <span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</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="DataFrame.select-368"><a href="#DataFrame.select-368"><span class="linenos">368</span></a> <span class="p">]</span>
-</span><span id="DataFrame.select-369"><a href="#DataFrame.select-369"><span class="linenos">369</span></a> <span class="n">cte_names_in_join</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">join_table_identifiers</span><span class="p">]</span>
-</span><span id="DataFrame.select-370"><a href="#DataFrame.select-370"><span class="linenos">370</span></a> <span class="c1"># If we have columns that resolve to multiple CTE expressions then we want to use each CTE left-to-right</span>
-</span><span id="DataFrame.select-371"><a href="#DataFrame.select-371"><span class="linenos">371</span></a> <span class="c1"># and therefore we allow multiple columns with the same name in the result. This matches the behavior</span>
-</span><span id="DataFrame.select-372"><a href="#DataFrame.select-372"><span class="linenos">372</span></a> <span class="c1"># of Spark.</span>
-</span><span id="DataFrame.select-373"><a href="#DataFrame.select-373"><span class="linenos">373</span></a> <span class="n">resolved_column_position</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">Column</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">}</span>
-</span><span id="DataFrame.select-374"><a href="#DataFrame.select-374"><span class="linenos">374</span></a> <span class="k">for</span> <span class="n">ambiguous_col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
-</span><span id="DataFrame.select-375"><a href="#DataFrame.select-375"><span class="linenos">375</span></a> <span class="n">ctes_with_column</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.select-376"><a href="#DataFrame.select-376"><span class="linenos">376</span></a> <span class="n">cte</span>
-</span><span id="DataFrame.select-377"><a href="#DataFrame.select-377"><span class="linenos">377</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span>
-</span><span id="DataFrame.select-378"><a href="#DataFrame.select-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte_names_in_join</span>
-</span><span id="DataFrame.select-379"><a href="#DataFrame.select-379"><span class="linenos">379</span></a> <span class="ow">and</span> <span class="n">ambiguous_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span>
-</span><span id="DataFrame.select-380"><a href="#DataFrame.select-380"><span class="linenos">380</span></a> <span class="p">]</span>
-</span><span id="DataFrame.select-381"><a href="#DataFrame.select-381"><span class="linenos">381</span></a> <span class="c1"># Check if there is a CTE with this column that we haven&#39;t used before. If so, use it. Otherwise,</span>
-</span><span id="DataFrame.select-382"><a href="#DataFrame.select-382"><span class="linenos">382</span></a> <span class="c1"># use the same CTE we used before</span>
-</span><span id="DataFrame.select-383"><a href="#DataFrame.select-383"><span class="linenos">383</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">ctes_with_column</span><span class="p">,</span> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="DataFrame.select-384"><a href="#DataFrame.select-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
-</span><span id="DataFrame.select-385"><a href="#DataFrame.select-385"><span class="linenos">385</span></a> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="DataFrame.select-386"><a href="#DataFrame.select-386"><span class="linenos">386</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.select-387"><a href="#DataFrame.select-387"><span class="linenos">387</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">ctes_with_column</span><span class="p">[</span><span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]]</span>
-</span><span id="DataFrame.select-388"><a href="#DataFrame.select-388"><span class="linenos">388</span></a> <span class="n">ambiguous_col</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;table&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame.select-389"><a href="#DataFrame.select-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span>
-</span><span id="DataFrame.select-390"><a href="#DataFrame.select-390"><span class="linenos">390</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span>
-</span><span id="DataFrame.select-391"><a href="#DataFrame.select-391"><span class="linenos">391</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.select-375"><a href="#DataFrame.select-375"><span class="linenos">375</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.select-376"><a href="#DataFrame.select-376"><span class="linenos">376</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.select-377"><a href="#DataFrame.select-377"><span class="linenos">377</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame.select-378"><a href="#DataFrame.select-378"><span class="linenos">378</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;append&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="DataFrame.select-379"><a href="#DataFrame.select-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="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><span id="DataFrame.select-380"><a href="#DataFrame.select-380"><span class="linenos">380</span></a> <span class="n">ambiguous_cols</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.select-381"><a href="#DataFrame.select-381"><span class="linenos">381</span></a> <span class="n">col</span>
+</span><span id="DataFrame.select-382"><a href="#DataFrame.select-382"><span class="linenos">382</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span>
+</span><span id="DataFrame.select-383"><a href="#DataFrame.select-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">column_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="ow">and</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">column_expression</span><span class="o">.</span><span class="n">table</span>
+</span><span id="DataFrame.select-384"><a href="#DataFrame.select-384"><span class="linenos">384</span></a> <span class="p">]</span>
+</span><span id="DataFrame.select-385"><a href="#DataFrame.select-385"><span class="linenos">385</span></a> <span class="k">if</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
+</span><span id="DataFrame.select-386"><a href="#DataFrame.select-386"><span class="linenos">386</span></a> <span class="n">join_table_identifiers</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.select-387"><a href="#DataFrame.select-387"><span class="linenos">387</span></a> <span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</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="DataFrame.select-388"><a href="#DataFrame.select-388"><span class="linenos">388</span></a> <span class="p">]</span>
+</span><span id="DataFrame.select-389"><a href="#DataFrame.select-389"><span class="linenos">389</span></a> <span class="n">cte_names_in_join</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">join_table_identifiers</span><span class="p">]</span>
+</span><span id="DataFrame.select-390"><a href="#DataFrame.select-390"><span class="linenos">390</span></a> <span class="c1"># If we have columns that resolve to multiple CTE expressions then we want to use each CTE left-to-right</span>
+</span><span id="DataFrame.select-391"><a href="#DataFrame.select-391"><span class="linenos">391</span></a> <span class="c1"># and therefore we allow multiple columns with the same name in the result. This matches the behavior</span>
+</span><span id="DataFrame.select-392"><a href="#DataFrame.select-392"><span class="linenos">392</span></a> <span class="c1"># of Spark.</span>
+</span><span id="DataFrame.select-393"><a href="#DataFrame.select-393"><span class="linenos">393</span></a> <span class="n">resolved_column_position</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">Column</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">}</span>
+</span><span id="DataFrame.select-394"><a href="#DataFrame.select-394"><span class="linenos">394</span></a> <span class="k">for</span> <span class="n">ambiguous_col</span> <span class="ow">in</span> <span class="n">ambiguous_cols</span><span class="p">:</span>
+</span><span id="DataFrame.select-395"><a href="#DataFrame.select-395"><span class="linenos">395</span></a> <span class="n">ctes_with_column</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.select-396"><a href="#DataFrame.select-396"><span class="linenos">396</span></a> <span class="n">cte</span>
+</span><span id="DataFrame.select-397"><a href="#DataFrame.select-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span>
+</span><span id="DataFrame.select-398"><a href="#DataFrame.select-398"><span class="linenos">398</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte_names_in_join</span>
+</span><span id="DataFrame.select-399"><a href="#DataFrame.select-399"><span class="linenos">399</span></a> <span class="ow">and</span> <span class="n">ambiguous_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="DataFrame.select-400"><a href="#DataFrame.select-400"><span class="linenos">400</span></a> <span class="p">]</span>
+</span><span id="DataFrame.select-401"><a href="#DataFrame.select-401"><span class="linenos">401</span></a> <span class="c1"># Check if there is a CTE with this column that we haven&#39;t used before. If so, use it. Otherwise,</span>
+</span><span id="DataFrame.select-402"><a href="#DataFrame.select-402"><span class="linenos">402</span></a> <span class="c1"># use the same CTE we used before</span>
+</span><span id="DataFrame.select-403"><a href="#DataFrame.select-403"><span class="linenos">403</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">ctes_with_column</span><span class="p">,</span> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="DataFrame.select-404"><a href="#DataFrame.select-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
+</span><span id="DataFrame.select-405"><a href="#DataFrame.select-405"><span class="linenos">405</span></a> <span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="DataFrame.select-406"><a href="#DataFrame.select-406"><span class="linenos">406</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.select-407"><a href="#DataFrame.select-407"><span class="linenos">407</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">ctes_with_column</span><span class="p">[</span><span class="n">resolved_column_position</span><span class="p">[</span><span class="n">ambiguous_col</span><span class="p">]]</span>
+</span><span id="DataFrame.select-408"><a href="#DataFrame.select-408"><span class="linenos">408</span></a> <span class="n">ambiguous_col</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;table&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame.select-409"><a href="#DataFrame.select-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span>
+</span><span id="DataFrame.select-410"><a href="#DataFrame.select-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">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span>
+</span><span id="DataFrame.select-411"><a href="#DataFrame.select-411"><span class="linenos">411</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2024,16 +2186,16 @@
</div>
<a class="headerlink" href="#DataFrame.alias"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.alias-393"><a href="#DataFrame.alias-393"><span class="linenos">393</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame.alias-394"><a href="#DataFrame.alias-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">alias</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">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.alias-395"><a href="#DataFrame.alias-395"><span class="linenos">395</span></a> <span class="n">new_sequence_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
-</span><span id="DataFrame.alias-396"><a href="#DataFrame.alias-396"><span class="linenos">396</span></a> <span class="n">df</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="DataFrame.alias-397"><a href="#DataFrame.alias-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">join_hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_join_hints</span><span class="p">:</span>
-</span><span id="DataFrame.alias-398"><a href="#DataFrame.alias-398"><span class="linenos">398</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">join_hint</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="DataFrame.alias-399"><a href="#DataFrame.alias-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">:</span>
-</span><span id="DataFrame.alias-400"><a href="#DataFrame.alias-400"><span class="linenos">400</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">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">new_sequence_id</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame.alias-401"><a href="#DataFrame.alias-401"><span class="linenos">401</span></a> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_add_alias_to_mapping</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">new_sequence_id</span><span class="p">)</span>
-</span><span id="DataFrame.alias-402"><a href="#DataFrame.alias-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">(</span><span class="n">sequence_id</span><span class="o">=</span><span class="n">new_sequence_id</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.alias-413"><a href="#DataFrame.alias-413"><span class="linenos">413</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame.alias-414"><a href="#DataFrame.alias-414"><span class="linenos">414</span></a> <span class="k">def</span> <span class="nf">alias</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">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.alias-415"><a href="#DataFrame.alias-415"><span class="linenos">415</span></a> <span class="n">new_sequence_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_random_sequence_id</span>
+</span><span id="DataFrame.alias-416"><a href="#DataFrame.alias-416"><span class="linenos">416</span></a> <span class="n">df</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="DataFrame.alias-417"><a href="#DataFrame.alias-417"><span class="linenos">417</span></a> <span class="k">for</span> <span class="n">join_hint</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">pending_join_hints</span><span class="p">:</span>
+</span><span id="DataFrame.alias-418"><a href="#DataFrame.alias-418"><span class="linenos">418</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">join_hint</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="DataFrame.alias-419"><a href="#DataFrame.alias-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">:</span>
+</span><span id="DataFrame.alias-420"><a href="#DataFrame.alias-420"><span class="linenos">420</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">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">new_sequence_id</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame.alias-421"><a href="#DataFrame.alias-421"><span class="linenos">421</span></a> <span class="n">df</span><span class="o">.</span><span class="n">spark</span><span class="o">.</span><span class="n">_add_alias_to_mapping</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">new_sequence_id</span><span class="p">)</span>
+</span><span id="DataFrame.alias-422"><a href="#DataFrame.alias-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">(</span><span class="n">sequence_id</span><span class="o">=</span><span class="n">new_sequence_id</span><span class="p">)</span>
</span></pre></div>
@@ -2052,10 +2214,10 @@
</div>
<a class="headerlink" href="#DataFrame.where"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.where-404"><a href="#DataFrame.where-404"><span class="linenos">404</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
-</span><span id="DataFrame.where-405"><a href="#DataFrame.where-405"><span class="linenos">405</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="n">column</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">Column</span><span class="p">,</span> <span class="nb">bool</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.where-406"><a href="#DataFrame.where-406"><span class="linenos">406</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
-</span><span id="DataFrame.where-407"><a href="#DataFrame.where-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.where-424"><a href="#DataFrame.where-424"><span class="linenos">424</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
+</span><span id="DataFrame.where-425"><a href="#DataFrame.where-425"><span class="linenos">425</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="n">column</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">Column</span><span class="p">,</span> <span class="nb">bool</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.where-426"><a href="#DataFrame.where-426"><span class="linenos">426</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
+</span><span id="DataFrame.where-427"><a href="#DataFrame.where-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
</span></pre></div>
@@ -2074,10 +2236,10 @@
</div>
<a class="headerlink" href="#DataFrame.filter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.filter-404"><a href="#DataFrame.filter-404"><span class="linenos">404</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
-</span><span id="DataFrame.filter-405"><a href="#DataFrame.filter-405"><span class="linenos">405</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="n">column</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">Column</span><span class="p">,</span> <span class="nb">bool</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.filter-406"><a href="#DataFrame.filter-406"><span class="linenos">406</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
-</span><span id="DataFrame.filter-407"><a href="#DataFrame.filter-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.filter-424"><a href="#DataFrame.filter-424"><span class="linenos">424</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
+</span><span id="DataFrame.filter-425"><a href="#DataFrame.filter-425"><span class="linenos">425</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="n">column</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">Column</span><span class="p">,</span> <span class="nb">bool</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.filter-426"><a href="#DataFrame.filter-426"><span class="linenos">426</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
+</span><span id="DataFrame.filter-427"><a href="#DataFrame.filter-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
</span></pre></div>
@@ -2096,10 +2258,10 @@
</div>
<a class="headerlink" href="#DataFrame.groupBy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.groupBy-411"><a href="#DataFrame.groupBy-411"><span class="linenos">411</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">)</span>
-</span><span id="DataFrame.groupBy-412"><a href="#DataFrame.groupBy-412"><span class="linenos">412</span></a> <span class="k">def</span> <span class="nf">groupBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">GroupedData</span><span class="p">:</span>
-</span><span id="DataFrame.groupBy-413"><a href="#DataFrame.groupBy-413"><span class="linenos">413</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame.groupBy-414"><a href="#DataFrame.groupBy-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">GroupedData</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.groupBy-431"><a href="#DataFrame.groupBy-431"><span class="linenos">431</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">)</span>
+</span><span id="DataFrame.groupBy-432"><a href="#DataFrame.groupBy-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">groupBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</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">GroupedData</span><span class="p">:</span>
+</span><span id="DataFrame.groupBy-433"><a href="#DataFrame.groupBy-433"><span class="linenos">433</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame.groupBy-434"><a href="#DataFrame.groupBy-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="n">GroupedData</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_op</span><span class="p">)</span>
</span></pre></div>
@@ -2118,10 +2280,10 @@
</div>
<a class="headerlink" href="#DataFrame.agg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.agg-416"><a href="#DataFrame.agg-416"><span class="linenos">416</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.agg-417"><a href="#DataFrame.agg-417"><span class="linenos">417</span></a> <span class="k">def</span> <span class="nf">agg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exprs</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">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.agg-418"><a href="#DataFrame.agg-418"><span class="linenos">418</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">exprs</span><span class="p">)</span>
-</span><span id="DataFrame.agg-419"><a href="#DataFrame.agg-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">groupBy</span><span class="p">()</span><span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="o">*</span><span class="n">cols</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.agg-436"><a href="#DataFrame.agg-436"><span class="linenos">436</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.agg-437"><a href="#DataFrame.agg-437"><span class="linenos">437</span></a> <span class="k">def</span> <span class="nf">agg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exprs</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">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.agg-438"><a href="#DataFrame.agg-438"><span class="linenos">438</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">exprs</span><span class="p">)</span>
+</span><span id="DataFrame.agg-439"><a href="#DataFrame.agg-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">groupBy</span><span class="p">()</span><span class="o">.</span><span class="n">agg</span><span class="p">(</span><span class="o">*</span><span class="n">cols</span><span class="p">)</span>
</span></pre></div>
@@ -2140,97 +2302,97 @@
</div>
<a class="headerlink" href="#DataFrame.join"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.join-421"><a href="#DataFrame.join-421"><span class="linenos">421</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.join-422"><a href="#DataFrame.join-422"><span class="linenos">422</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="DataFrame.join-423"><a href="#DataFrame.join-423"><span class="linenos">423</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.join-424"><a href="#DataFrame.join-424"><span class="linenos">424</span></a> <span class="n">other_df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
-</span><span id="DataFrame.join-425"><a href="#DataFrame.join-425"><span class="linenos">425</span></a> <span class="n">on</span><span class="p">:</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">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="n">Column</span><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">Column</span><span class="p">]],</span>
-</span><span id="DataFrame.join-426"><a href="#DataFrame.join-426"><span class="linenos">426</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
-</span><span id="DataFrame.join-427"><a href="#DataFrame.join-427"><span class="linenos">427</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="DataFrame.join-428"><a href="#DataFrame.join-428"><span class="linenos">428</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.join-429"><a href="#DataFrame.join-429"><span class="linenos">429</span></a> <span class="n">other_df</span> <span class="o">=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
-</span><span id="DataFrame.join-430"><a href="#DataFrame.join-430"><span class="linenos">430</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
-</span><span id="DataFrame.join-431"><a href="#DataFrame.join-431"><span class="linenos">431</span></a> <span class="c1"># We will determine actual &quot;join on&quot; expression later so we don&#39;t provide it at first</span>
-</span><span id="DataFrame.join-432"><a href="#DataFrame.join-432"><span class="linenos">432</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="DataFrame.join-433"><a href="#DataFrame.join-433"><span class="linenos">433</span></a> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="n">how</span><span class="o">.</span><span class="n">replace</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="DataFrame.join-434"><a href="#DataFrame.join-434"><span class="linenos">434</span></a> <span class="p">)</span>
-</span><span id="DataFrame.join-435"><a href="#DataFrame.join-435"><span class="linenos">435</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span><span class="n">join_expression</span><span class="p">,</span> <span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
-</span><span id="DataFrame.join-436"><a href="#DataFrame.join-436"><span class="linenos">436</span></a> <span class="n">self_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame.join-437"><a href="#DataFrame.join-437"><span class="linenos">437</span></a> <span class="n">other_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">other_df</span><span class="p">)</span>
-</span><span id="DataFrame.join-438"><a href="#DataFrame.join-438"><span class="linenos">438</span></a> <span class="c1"># Determines the join clause and select columns to be used passed on what type of columns were provided for</span>
-</span><span id="DataFrame.join-439"><a href="#DataFrame.join-439"><span class="linenos">439</span></a> <span class="c1"># the join. The columns returned changes based on how the on expression is provided.</span>
-</span><span id="DataFrame.join-440"><a href="#DataFrame.join-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span 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><span id="DataFrame.join-441"><a href="#DataFrame.join-441"><span class="linenos">441</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame.join-442"><a href="#DataFrame.join-442"><span class="linenos">442</span></a><span class="sd"> Unique characteristics of join on column names only:</span>
-</span><span id="DataFrame.join-443"><a href="#DataFrame.join-443"><span class="linenos">443</span></a><span class="sd"> * The column names are put at the front of the select list</span>
-</span><span id="DataFrame.join-444"><a href="#DataFrame.join-444"><span class="linenos">444</span></a><span class="sd"> * The column names are deduplicated across the entire select list and only the column names (other dups are allowed)</span>
-</span><span id="DataFrame.join-445"><a href="#DataFrame.join-445"><span class="linenos">445</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame.join-446"><a href="#DataFrame.join-446"><span class="linenos">446</span></a> <span class="n">table_names</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.join-447"><a href="#DataFrame.join-447"><span class="linenos">447</span></a> <span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame.join-448"><a href="#DataFrame.join-448"><span class="linenos">448</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame.join-449"><a href="#DataFrame.join-449"><span class="linenos">449</span></a> <span class="p">]</span>
-</span><span id="DataFrame.join-450"><a href="#DataFrame.join-450"><span class="linenos">450</span></a> <span class="n">potential_ctes</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.join-451"><a href="#DataFrame.join-451"><span class="linenos">451</span></a> <span class="n">cte</span>
-</span><span id="DataFrame.join-452"><a href="#DataFrame.join-452"><span class="linenos">452</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">join_expression</span><span class="o">.</span><span class="n">ctes</span>
-</span><span id="DataFrame.join-453"><a href="#DataFrame.join-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">table_names</span>
-</span><span id="DataFrame.join-454"><a href="#DataFrame.join-454"><span class="linenos">454</span></a> <span class="ow">and</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">!=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span>
-</span><span id="DataFrame.join-455"><a href="#DataFrame.join-455"><span class="linenos">455</span></a> <span class="p">]</span>
-</span><span id="DataFrame.join-456"><a href="#DataFrame.join-456"><span class="linenos">456</span></a> <span class="c1"># Determine the table to reference for the left side of the join by checking each of the left side</span>
-</span><span id="DataFrame.join-457"><a href="#DataFrame.join-457"><span class="linenos">457</span></a> <span class="c1"># tables and see if they have the column being referenced.</span>
-</span><span id="DataFrame.join-458"><a href="#DataFrame.join-458"><span class="linenos">458</span></a> <span class="n">join_column_pairs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame.join-459"><a href="#DataFrame.join-459"><span class="linenos">459</span></a> <span class="k">for</span> <span class="n">join_column</span> <span class="ow">in</span> <span class="n">join_columns</span><span class="p">:</span>
-</span><span id="DataFrame.join-460"><a href="#DataFrame.join-460"><span class="linenos">460</span></a> <span class="n">num_matching_ctes</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="DataFrame.join-461"><a href="#DataFrame.join-461"><span class="linenos">461</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">potential_ctes</span><span class="p">:</span>
-</span><span id="DataFrame.join-462"><a href="#DataFrame.join-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
-</span><span id="DataFrame.join-463"><a href="#DataFrame.join-463"><span class="linenos">463</span></a> <span class="n">left_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame.join-464"><a href="#DataFrame.join-464"><span class="linenos">464</span></a> <span class="n">right_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">)</span>
-</span><span id="DataFrame.join-465"><a href="#DataFrame.join-465"><span class="linenos">465</span></a> <span class="n">join_column_pairs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span><span class="p">))</span>
-</span><span id="DataFrame.join-466"><a href="#DataFrame.join-466"><span class="linenos">466</span></a> <span class="n">num_matching_ctes</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="DataFrame.join-467"><a href="#DataFrame.join-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">num_matching_ctes</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="DataFrame.join-468"><a href="#DataFrame.join-468"><span class="linenos">468</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="DataFrame.join-469"><a href="#DataFrame.join-469"><span class="linenos">469</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> is ambiguous. Please specify the table name.&quot;</span>
-</span><span id="DataFrame.join-470"><a href="#DataFrame.join-470"><span class="linenos">470</span></a> <span class="p">)</span>
-</span><span id="DataFrame.join-471"><a href="#DataFrame.join-471"><span class="linenos">471</span></a> <span class="k">elif</span> <span class="n">num_matching_ctes</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="DataFrame.join-472"><a href="#DataFrame.join-472"><span class="linenos">472</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="DataFrame.join-473"><a href="#DataFrame.join-473"><span class="linenos">473</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> does not exist in any of the tables.&quot;</span>
-</span><span id="DataFrame.join-474"><a href="#DataFrame.join-474"><span class="linenos">474</span></a> <span class="p">)</span>
-</span><span id="DataFrame.join-475"><a href="#DataFrame.join-475"><span class="linenos">475</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span>
-</span><span id="DataFrame.join-476"><a href="#DataFrame.join-476"><span class="linenos">476</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span>
-</span><span id="DataFrame.join-477"><a href="#DataFrame.join-477"><span class="linenos">477</span></a> <span class="p">[</span><span class="n">left_column</span> <span class="o">==</span> <span class="n">right_column</span> <span class="k">for</span> <span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">],</span>
-</span><span id="DataFrame.join-478"><a href="#DataFrame.join-478"><span class="linenos">478</span></a> <span class="p">)</span>
-</span><span id="DataFrame.join-479"><a href="#DataFrame.join-479"><span class="linenos">479</span></a> <span class="n">join_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">left_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">left_col</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">]</span>
-</span><span id="DataFrame.join-480"><a href="#DataFrame.join-480"><span class="linenos">480</span></a> <span class="c1"># To match spark behavior only the join clause gets deduplicated and it gets put in the front of the column list</span>
-</span><span id="DataFrame.join-481"><a href="#DataFrame.join-481"><span class="linenos">481</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.join-482"><a href="#DataFrame.join-482"><span class="linenos">482</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame.join-483"><a href="#DataFrame.join-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">)</span>
-</span><span id="DataFrame.join-484"><a href="#DataFrame.join-484"><span class="linenos">484</span></a> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span>
-</span><span id="DataFrame.join-485"><a href="#DataFrame.join-485"><span class="linenos">485</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span>
-</span><span id="DataFrame.join-486"><a href="#DataFrame.join-486"><span class="linenos">486</span></a> <span class="p">]</span>
-</span><span id="DataFrame.join-487"><a href="#DataFrame.join-487"><span class="linenos">487</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.join-488"><a href="#DataFrame.join-488"><span class="linenos">488</span></a> <span class="n">column_name</span>
-</span><span id="DataFrame.join-489"><a href="#DataFrame.join-489"><span class="linenos">489</span></a> <span class="k">for</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="n">select_column_names</span>
-</span><span id="DataFrame.join-490"><a href="#DataFrame.join-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">column_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">join_column_names</span>
-</span><span id="DataFrame.join-491"><a href="#DataFrame.join-491"><span class="linenos">491</span></a> <span class="p">]</span>
-</span><span id="DataFrame.join-492"><a href="#DataFrame.join-492"><span class="linenos">492</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="n">join_column_names</span> <span class="o">+</span> <span class="n">select_column_names</span>
-</span><span id="DataFrame.join-493"><a href="#DataFrame.join-493"><span class="linenos">493</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.join-494"><a href="#DataFrame.join-494"><span class="linenos">494</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame.join-495"><a href="#DataFrame.join-495"><span class="linenos">495</span></a><span class="sd"> Unique characteristics of join on expressions:</span>
-</span><span id="DataFrame.join-496"><a href="#DataFrame.join-496"><span class="linenos">496</span></a><span class="sd"> * There is no deduplication of the results.</span>
-</span><span id="DataFrame.join-497"><a href="#DataFrame.join-497"><span class="linenos">497</span></a><span class="sd"> * The left join dataframe columns go first and right come after. No sort preference is given to join columns</span>
-</span><span id="DataFrame.join-498"><a href="#DataFrame.join-498"><span class="linenos">498</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame.join-499"><a href="#DataFrame.join-499"><span class="linenos">499</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">join_columns</span><span class="p">,</span> <span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame.join-500"><a href="#DataFrame.join-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">join_columns</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="DataFrame.join-501"><a href="#DataFrame.join-501"><span class="linenos">501</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span> <span class="n">join_columns</span><span class="p">)]</span>
-</span><span id="DataFrame.join-502"><a href="#DataFrame.join-502"><span class="linenos">502</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="DataFrame.join-503"><a href="#DataFrame.join-503"><span class="linenos">503</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span><span class="p">]</span>
-</span><span id="DataFrame.join-504"><a href="#DataFrame.join-504"><span class="linenos">504</span></a>
-</span><span id="DataFrame.join-505"><a href="#DataFrame.join-505"><span class="linenos">505</span></a> <span class="c1"># Update the on expression with the actual join clause to replace the dummy one from before</span>
-</span><span id="DataFrame.join-506"><a href="#DataFrame.join-506"><span class="linenos">506</span></a> <span class="n">join_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="mi">1</span><span class="p">]</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">join_clause</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame.join-507"><a href="#DataFrame.join-507"><span class="linenos">507</span></a> <span class="n">new_df</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">expression</span><span class="o">=</span><span class="n">join_expression</span><span class="p">)</span>
-</span><span id="DataFrame.join-508"><a href="#DataFrame.join-508"><span class="linenos">508</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_join_hints</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">pending_join_hints</span><span class="p">)</span>
-</span><span id="DataFrame.join-509"><a href="#DataFrame.join-509"><span class="linenos">509</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="p">)</span>
-</span><span id="DataFrame.join-510"><a href="#DataFrame.join-510"><span class="linenos">510</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="o">.</span><span class="n">__wrapped__</span><span class="p">(</span><span class="n">new_df</span><span class="p">,</span> <span class="o">*</span><span class="n">select_column_names</span><span class="p">)</span>
-</span><span id="DataFrame.join-511"><a href="#DataFrame.join-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="n">new_df</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.join-441"><a href="#DataFrame.join-441"><span class="linenos">441</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.join-442"><a href="#DataFrame.join-442"><span class="linenos">442</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="DataFrame.join-443"><a href="#DataFrame.join-443"><span class="linenos">443</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.join-444"><a href="#DataFrame.join-444"><span class="linenos">444</span></a> <span class="n">other_df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
+</span><span id="DataFrame.join-445"><a href="#DataFrame.join-445"><span class="linenos">445</span></a> <span class="n">on</span><span class="p">:</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">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="n">Column</span><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">Column</span><span class="p">]],</span>
+</span><span id="DataFrame.join-446"><a href="#DataFrame.join-446"><span class="linenos">446</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
+</span><span id="DataFrame.join-447"><a href="#DataFrame.join-447"><span class="linenos">447</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataFrame.join-448"><a href="#DataFrame.join-448"><span class="linenos">448</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.join-449"><a href="#DataFrame.join-449"><span class="linenos">449</span></a> <span class="n">other_df</span> <span class="o">=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span>
+</span><span id="DataFrame.join-450"><a href="#DataFrame.join-450"><span class="linenos">450</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
+</span><span id="DataFrame.join-451"><a href="#DataFrame.join-451"><span class="linenos">451</span></a> <span class="c1"># We will determine actual &quot;join on&quot; expression later so we don&#39;t provide it at first</span>
+</span><span id="DataFrame.join-452"><a href="#DataFrame.join-452"><span class="linenos">452</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="DataFrame.join-453"><a href="#DataFrame.join-453"><span class="linenos">453</span></a> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="n">how</span><span class="o">.</span><span class="n">replace</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="DataFrame.join-454"><a href="#DataFrame.join-454"><span class="linenos">454</span></a> <span class="p">)</span>
+</span><span id="DataFrame.join-455"><a href="#DataFrame.join-455"><span class="linenos">455</span></a> <span class="n">join_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_ctes_to_expression</span><span class="p">(</span><span class="n">join_expression</span><span class="p">,</span> <span class="n">other_df</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
+</span><span id="DataFrame.join-456"><a href="#DataFrame.join-456"><span class="linenos">456</span></a> <span class="n">self_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame.join-457"><a href="#DataFrame.join-457"><span class="linenos">457</span></a> <span class="n">other_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">other_df</span><span class="p">)</span>
+</span><span id="DataFrame.join-458"><a href="#DataFrame.join-458"><span class="linenos">458</span></a> <span class="c1"># Determines the join clause and select columns to be used passed on what type of columns were provided for</span>
+</span><span id="DataFrame.join-459"><a href="#DataFrame.join-459"><span class="linenos">459</span></a> <span class="c1"># the join. The columns returned changes based on how the on expression is provided.</span>
+</span><span id="DataFrame.join-460"><a href="#DataFrame.join-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span 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><span id="DataFrame.join-461"><a href="#DataFrame.join-461"><span class="linenos">461</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame.join-462"><a href="#DataFrame.join-462"><span class="linenos">462</span></a><span class="sd"> Unique characteristics of join on column names only:</span>
+</span><span id="DataFrame.join-463"><a href="#DataFrame.join-463"><span class="linenos">463</span></a><span class="sd"> * The column names are put at the front of the select list</span>
+</span><span id="DataFrame.join-464"><a href="#DataFrame.join-464"><span class="linenos">464</span></a><span class="sd"> * The column names are deduplicated across the entire select list and only the column names (other dups are allowed)</span>
+</span><span id="DataFrame.join-465"><a href="#DataFrame.join-465"><span class="linenos">465</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame.join-466"><a href="#DataFrame.join-466"><span class="linenos">466</span></a> <span class="n">table_names</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.join-467"><a href="#DataFrame.join-467"><span class="linenos">467</span></a> <span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame.join-468"><a href="#DataFrame.join-468"><span class="linenos">468</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">get_tables_from_expression_with_join</span><span class="p">(</span><span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame.join-469"><a href="#DataFrame.join-469"><span class="linenos">469</span></a> <span class="p">]</span>
+</span><span id="DataFrame.join-470"><a href="#DataFrame.join-470"><span class="linenos">470</span></a> <span class="n">potential_ctes</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.join-471"><a href="#DataFrame.join-471"><span class="linenos">471</span></a> <span class="n">cte</span>
+</span><span id="DataFrame.join-472"><a href="#DataFrame.join-472"><span class="linenos">472</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">join_expression</span><span class="o">.</span><span class="n">ctes</span>
+</span><span id="DataFrame.join-473"><a href="#DataFrame.join-473"><span class="linenos">473</span></a> <span class="k">if</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">table_names</span>
+</span><span id="DataFrame.join-474"><a href="#DataFrame.join-474"><span class="linenos">474</span></a> <span class="ow">and</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">!=</span> <span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span>
+</span><span id="DataFrame.join-475"><a href="#DataFrame.join-475"><span class="linenos">475</span></a> <span class="p">]</span>
+</span><span id="DataFrame.join-476"><a href="#DataFrame.join-476"><span class="linenos">476</span></a> <span class="c1"># Determine the table to reference for the left side of the join by checking each of the left side</span>
+</span><span id="DataFrame.join-477"><a href="#DataFrame.join-477"><span class="linenos">477</span></a> <span class="c1"># tables and see if they have the column being referenced.</span>
+</span><span id="DataFrame.join-478"><a href="#DataFrame.join-478"><span class="linenos">478</span></a> <span class="n">join_column_pairs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame.join-479"><a href="#DataFrame.join-479"><span class="linenos">479</span></a> <span class="k">for</span> <span class="n">join_column</span> <span class="ow">in</span> <span class="n">join_columns</span><span class="p">:</span>
+</span><span id="DataFrame.join-480"><a href="#DataFrame.join-480"><span class="linenos">480</span></a> <span class="n">num_matching_ctes</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="DataFrame.join-481"><a href="#DataFrame.join-481"><span class="linenos">481</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">potential_ctes</span><span class="p">:</span>
+</span><span id="DataFrame.join-482"><a href="#DataFrame.join-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
+</span><span id="DataFrame.join-483"><a href="#DataFrame.join-483"><span class="linenos">483</span></a> <span class="n">left_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame.join-484"><a href="#DataFrame.join-484"><span class="linenos">484</span></a> <span class="n">right_column</span> <span class="o">=</span> <span class="n">join_column</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">set_table_name</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">latest_cte_name</span><span class="p">)</span>
+</span><span id="DataFrame.join-485"><a href="#DataFrame.join-485"><span class="linenos">485</span></a> <span class="n">join_column_pairs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span><span class="p">))</span>
+</span><span id="DataFrame.join-486"><a href="#DataFrame.join-486"><span class="linenos">486</span></a> <span class="n">num_matching_ctes</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="DataFrame.join-487"><a href="#DataFrame.join-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">num_matching_ctes</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="DataFrame.join-488"><a href="#DataFrame.join-488"><span class="linenos">488</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="DataFrame.join-489"><a href="#DataFrame.join-489"><span class="linenos">489</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> is ambiguous. Please specify the table name.&quot;</span>
+</span><span id="DataFrame.join-490"><a href="#DataFrame.join-490"><span class="linenos">490</span></a> <span class="p">)</span>
+</span><span id="DataFrame.join-491"><a href="#DataFrame.join-491"><span class="linenos">491</span></a> <span class="k">elif</span> <span class="n">num_matching_ctes</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="DataFrame.join-492"><a href="#DataFrame.join-492"><span class="linenos">492</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="DataFrame.join-493"><a href="#DataFrame.join-493"><span class="linenos">493</span></a> <span class="sa">f</span><span class="s2">&quot;Column </span><span class="si">{</span><span class="n">join_column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="si">}</span><span class="s2"> does not exist in any of the tables.&quot;</span>
+</span><span id="DataFrame.join-494"><a href="#DataFrame.join-494"><span class="linenos">494</span></a> <span class="p">)</span>
+</span><span id="DataFrame.join-495"><a href="#DataFrame.join-495"><span class="linenos">495</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span>
+</span><span id="DataFrame.join-496"><a href="#DataFrame.join-496"><span class="linenos">496</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span>
+</span><span id="DataFrame.join-497"><a href="#DataFrame.join-497"><span class="linenos">497</span></a> <span class="p">[</span><span class="n">left_column</span> <span class="o">==</span> <span class="n">right_column</span> <span class="k">for</span> <span class="n">left_column</span><span class="p">,</span> <span class="n">right_column</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">],</span>
+</span><span id="DataFrame.join-498"><a href="#DataFrame.join-498"><span class="linenos">498</span></a> <span class="p">)</span>
+</span><span id="DataFrame.join-499"><a href="#DataFrame.join-499"><span class="linenos">499</span></a> <span class="n">join_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">left_col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">left_col</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">join_column_pairs</span><span class="p">]</span>
+</span><span id="DataFrame.join-500"><a href="#DataFrame.join-500"><span class="linenos">500</span></a> <span class="c1"># To match spark behavior only the join clause gets deduplicated and it gets put in the front of the column list</span>
+</span><span id="DataFrame.join-501"><a href="#DataFrame.join-501"><span class="linenos">501</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.join-502"><a href="#DataFrame.join-502"><span class="linenos">502</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame.join-503"><a href="#DataFrame.join-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">)</span>
+</span><span id="DataFrame.join-504"><a href="#DataFrame.join-504"><span class="linenos">504</span></a> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span>
+</span><span id="DataFrame.join-505"><a href="#DataFrame.join-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">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span>
+</span><span id="DataFrame.join-506"><a href="#DataFrame.join-506"><span class="linenos">506</span></a> <span class="p">]</span>
+</span><span id="DataFrame.join-507"><a href="#DataFrame.join-507"><span class="linenos">507</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.join-508"><a href="#DataFrame.join-508"><span class="linenos">508</span></a> <span class="n">column_name</span>
+</span><span id="DataFrame.join-509"><a href="#DataFrame.join-509"><span class="linenos">509</span></a> <span class="k">for</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="n">select_column_names</span>
+</span><span id="DataFrame.join-510"><a href="#DataFrame.join-510"><span class="linenos">510</span></a> <span class="k">if</span> <span class="n">column_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">join_column_names</span>
+</span><span id="DataFrame.join-511"><a href="#DataFrame.join-511"><span class="linenos">511</span></a> <span class="p">]</span>
+</span><span id="DataFrame.join-512"><a href="#DataFrame.join-512"><span class="linenos">512</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="n">join_column_names</span> <span class="o">+</span> <span class="n">select_column_names</span>
+</span><span id="DataFrame.join-513"><a href="#DataFrame.join-513"><span class="linenos">513</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.join-514"><a href="#DataFrame.join-514"><span class="linenos">514</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame.join-515"><a href="#DataFrame.join-515"><span class="linenos">515</span></a><span class="sd"> Unique characteristics of join on expressions:</span>
+</span><span id="DataFrame.join-516"><a href="#DataFrame.join-516"><span class="linenos">516</span></a><span class="sd"> * There is no deduplication of the results.</span>
+</span><span id="DataFrame.join-517"><a href="#DataFrame.join-517"><span class="linenos">517</span></a><span class="sd"> * The left join dataframe columns go first and right come after. No sort preference is given to join columns</span>
+</span><span id="DataFrame.join-518"><a href="#DataFrame.join-518"><span class="linenos">518</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame.join-519"><a href="#DataFrame.join-519"><span class="linenos">519</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">join_columns</span><span class="p">,</span> <span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame.join-520"><a href="#DataFrame.join-520"><span class="linenos">520</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">join_columns</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="DataFrame.join-521"><a href="#DataFrame.join-521"><span class="linenos">521</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">&amp;</span> <span class="n">y</span><span class="p">,</span> <span class="n">join_columns</span><span class="p">)]</span>
+</span><span id="DataFrame.join-522"><a href="#DataFrame.join-522"><span class="linenos">522</span></a> <span class="n">join_clause</span> <span class="o">=</span> <span class="n">join_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="DataFrame.join-523"><a href="#DataFrame.join-523"><span class="linenos">523</span></a> <span class="n">select_column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">self_columns</span> <span class="o">+</span> <span class="n">other_columns</span><span class="p">]</span>
+</span><span id="DataFrame.join-524"><a href="#DataFrame.join-524"><span class="linenos">524</span></a>
+</span><span id="DataFrame.join-525"><a href="#DataFrame.join-525"><span class="linenos">525</span></a> <span class="c1"># Update the on expression with the actual join clause to replace the dummy one from before</span>
+</span><span id="DataFrame.join-526"><a href="#DataFrame.join-526"><span class="linenos">526</span></a> <span class="n">join_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="mi">1</span><span class="p">]</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">join_clause</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame.join-527"><a href="#DataFrame.join-527"><span class="linenos">527</span></a> <span class="n">new_df</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">expression</span><span class="o">=</span><span class="n">join_expression</span><span class="p">)</span>
+</span><span id="DataFrame.join-528"><a href="#DataFrame.join-528"><span class="linenos">528</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_join_hints</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">pending_join_hints</span><span class="p">)</span>
+</span><span id="DataFrame.join-529"><a href="#DataFrame.join-529"><span class="linenos">529</span></a> <span class="n">new_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">other_df</span><span class="o">.</span><span class="n">pending_hints</span><span class="p">)</span>
+</span><span id="DataFrame.join-530"><a href="#DataFrame.join-530"><span class="linenos">530</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="o">.</span><span class="n">__wrapped__</span><span class="p">(</span><span class="n">new_df</span><span class="p">,</span> <span class="o">*</span><span class="n">select_column_names</span><span class="p">)</span>
+</span><span id="DataFrame.join-531"><a href="#DataFrame.join-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="n">new_df</span>
</span></pre></div>
@@ -2249,42 +2411,42 @@
</div>
<a class="headerlink" href="#DataFrame.orderBy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.orderBy-513"><a href="#DataFrame.orderBy-513"><span class="linenos">513</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-514"><a href="#DataFrame.orderBy-514"><span class="linenos">514</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span>
-</span><span id="DataFrame.orderBy-515"><a href="#DataFrame.orderBy-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.orderBy-516"><a href="#DataFrame.orderBy-516"><span class="linenos">516</span></a> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">],</span>
-</span><span id="DataFrame.orderBy-517"><a href="#DataFrame.orderBy-517"><span class="linenos">517</span></a> <span class="n">ascending</span><span 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">Union</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">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">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame.orderBy-518"><a href="#DataFrame.orderBy-518"><span class="linenos">518</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.orderBy-519"><a href="#DataFrame.orderBy-519"><span class="linenos">519</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame.orderBy-520"><a href="#DataFrame.orderBy-520"><span class="linenos">520</span></a><span class="sd"> This implementation lets any ordered columns take priority over whatever is provided in `ascending`. Spark</span>
-</span><span id="DataFrame.orderBy-521"><a href="#DataFrame.orderBy-521"><span class="linenos">521</span></a><span class="sd"> has irregular behavior and can result in runtime errors. Users shouldn&#39;t be mixing the two anyways so this</span>
-</span><span id="DataFrame.orderBy-522"><a href="#DataFrame.orderBy-522"><span class="linenos">522</span></a><span class="sd"> is unlikely to come up.</span>
-</span><span id="DataFrame.orderBy-523"><a href="#DataFrame.orderBy-523"><span class="linenos">523</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame.orderBy-524"><a href="#DataFrame.orderBy-524"><span class="linenos">524</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-525"><a href="#DataFrame.orderBy-525"><span class="linenos">525</span></a> <span class="n">pre_ordered_col_indexes</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.orderBy-526"><a href="#DataFrame.orderBy-526"><span class="linenos">526</span></a> <span class="n">x</span>
-</span><span id="DataFrame.orderBy-527"><a href="#DataFrame.orderBy-527"><span class="linenos">527</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
-</span><span id="DataFrame.orderBy-528"><a href="#DataFrame.orderBy-528"><span class="linenos">528</span></a> <span class="n">i</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span 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="k">else</span> <span class="kc">None</span>
-</span><span id="DataFrame.orderBy-529"><a href="#DataFrame.orderBy-529"><span class="linenos">529</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-530"><a href="#DataFrame.orderBy-530"><span class="linenos">530</span></a> <span class="p">]</span>
-</span><span id="DataFrame.orderBy-531"><a href="#DataFrame.orderBy-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="DataFrame.orderBy-532"><a href="#DataFrame.orderBy-532"><span class="linenos">532</span></a> <span class="p">]</span>
-</span><span id="DataFrame.orderBy-533"><a href="#DataFrame.orderBy-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">ascending</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrame.orderBy-534"><a href="#DataFrame.orderBy-534"><span class="linenos">534</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="kc">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-535"><a href="#DataFrame.orderBy-535"><span class="linenos">535</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ascending</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="DataFrame.orderBy-536"><a href="#DataFrame.orderBy-536"><span class="linenos">536</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="n">ascending</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-537"><a href="#DataFrame.orderBy-537"><span class="linenos">537</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">(</span><span class="n">x</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">ascending</span><span class="p">)]</span>
-</span><span id="DataFrame.orderBy-538"><a href="#DataFrame.orderBy-538"><span class="linenos">538</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
-</span><span id="DataFrame.orderBy-539"><a href="#DataFrame.orderBy-539"><span class="linenos">539</span></a> <span class="n">ascending</span>
-</span><span id="DataFrame.orderBy-540"><a href="#DataFrame.orderBy-540"><span class="linenos">540</span></a> <span class="p">),</span> <span class="s2">&quot;The length of items in ascending must equal the number of columns provided&quot;</span>
-</span><span id="DataFrame.orderBy-541"><a href="#DataFrame.orderBy-541"><span class="linenos">541</span></a> <span class="n">col_and_ascending</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">ascending</span><span class="p">))</span>
-</span><span id="DataFrame.orderBy-542"><a href="#DataFrame.orderBy-542"><span class="linenos">542</span></a> <span class="n">order_by_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.orderBy-543"><a href="#DataFrame.orderBy-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="ow">not</span> <span class="n">asc</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-544"><a href="#DataFrame.orderBy-544"><span class="linenos">544</span></a> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pre_ordered_col_indexes</span>
-</span><span id="DataFrame.orderBy-545"><a href="#DataFrame.orderBy-545"><span class="linenos">545</span></a> <span class="k">else</span> <span class="n">columns</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">column_expression</span>
-</span><span id="DataFrame.orderBy-546"><a href="#DataFrame.orderBy-546"><span class="linenos">546</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">asc</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col_and_ascending</span><span class="p">)</span>
-</span><span id="DataFrame.orderBy-547"><a href="#DataFrame.orderBy-547"><span class="linenos">547</span></a> <span class="p">]</span>
-</span><span id="DataFrame.orderBy-548"><a href="#DataFrame.orderBy-548"><span class="linenos">548</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">order_by_columns</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.orderBy-533"><a href="#DataFrame.orderBy-533"><span class="linenos">533</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-534"><a href="#DataFrame.orderBy-534"><span class="linenos">534</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span>
+</span><span id="DataFrame.orderBy-535"><a href="#DataFrame.orderBy-535"><span class="linenos">535</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.orderBy-536"><a href="#DataFrame.orderBy-536"><span class="linenos">536</span></a> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">],</span>
+</span><span id="DataFrame.orderBy-537"><a href="#DataFrame.orderBy-537"><span class="linenos">537</span></a> <span class="n">ascending</span><span 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">Union</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">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">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame.orderBy-538"><a href="#DataFrame.orderBy-538"><span class="linenos">538</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.orderBy-539"><a href="#DataFrame.orderBy-539"><span class="linenos">539</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame.orderBy-540"><a href="#DataFrame.orderBy-540"><span class="linenos">540</span></a><span class="sd"> This implementation lets any ordered columns take priority over whatever is provided in `ascending`. Spark</span>
+</span><span id="DataFrame.orderBy-541"><a href="#DataFrame.orderBy-541"><span class="linenos">541</span></a><span class="sd"> has irregular behavior and can result in runtime errors. Users shouldn&#39;t be mixing the two anyways so this</span>
+</span><span id="DataFrame.orderBy-542"><a href="#DataFrame.orderBy-542"><span class="linenos">542</span></a><span class="sd"> is unlikely to come up.</span>
+</span><span id="DataFrame.orderBy-543"><a href="#DataFrame.orderBy-543"><span class="linenos">543</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame.orderBy-544"><a href="#DataFrame.orderBy-544"><span class="linenos">544</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-545"><a href="#DataFrame.orderBy-545"><span class="linenos">545</span></a> <span class="n">pre_ordered_col_indexes</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.orderBy-546"><a href="#DataFrame.orderBy-546"><span class="linenos">546</span></a> <span class="n">x</span>
+</span><span id="DataFrame.orderBy-547"><a href="#DataFrame.orderBy-547"><span class="linenos">547</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
+</span><span id="DataFrame.orderBy-548"><a href="#DataFrame.orderBy-548"><span class="linenos">548</span></a> <span class="n">i</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span 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="k">else</span> <span class="kc">None</span>
+</span><span id="DataFrame.orderBy-549"><a href="#DataFrame.orderBy-549"><span class="linenos">549</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-550"><a href="#DataFrame.orderBy-550"><span class="linenos">550</span></a> <span class="p">]</span>
+</span><span id="DataFrame.orderBy-551"><a href="#DataFrame.orderBy-551"><span class="linenos">551</span></a> <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="DataFrame.orderBy-552"><a href="#DataFrame.orderBy-552"><span class="linenos">552</span></a> <span class="p">]</span>
+</span><span id="DataFrame.orderBy-553"><a href="#DataFrame.orderBy-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="n">ascending</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrame.orderBy-554"><a href="#DataFrame.orderBy-554"><span class="linenos">554</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="kc">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-555"><a href="#DataFrame.orderBy-555"><span class="linenos">555</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ascending</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="DataFrame.orderBy-556"><a href="#DataFrame.orderBy-556"><span class="linenos">556</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="n">ascending</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-557"><a href="#DataFrame.orderBy-557"><span class="linenos">557</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">(</span><span class="n">x</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">ascending</span><span class="p">)]</span>
+</span><span id="DataFrame.orderBy-558"><a href="#DataFrame.orderBy-558"><span class="linenos">558</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
+</span><span id="DataFrame.orderBy-559"><a href="#DataFrame.orderBy-559"><span class="linenos">559</span></a> <span class="n">ascending</span>
+</span><span id="DataFrame.orderBy-560"><a href="#DataFrame.orderBy-560"><span class="linenos">560</span></a> <span class="p">),</span> <span class="s2">&quot;The length of items in ascending must equal the number of columns provided&quot;</span>
+</span><span id="DataFrame.orderBy-561"><a href="#DataFrame.orderBy-561"><span class="linenos">561</span></a> <span class="n">col_and_ascending</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">ascending</span><span class="p">))</span>
+</span><span id="DataFrame.orderBy-562"><a href="#DataFrame.orderBy-562"><span class="linenos">562</span></a> <span class="n">order_by_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.orderBy-563"><a href="#DataFrame.orderBy-563"><span class="linenos">563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="ow">not</span> <span class="n">asc</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-564"><a href="#DataFrame.orderBy-564"><span class="linenos">564</span></a> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pre_ordered_col_indexes</span>
+</span><span id="DataFrame.orderBy-565"><a href="#DataFrame.orderBy-565"><span class="linenos">565</span></a> <span class="k">else</span> <span class="n">columns</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">column_expression</span>
+</span><span id="DataFrame.orderBy-566"><a href="#DataFrame.orderBy-566"><span class="linenos">566</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">asc</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col_and_ascending</span><span class="p">)</span>
+</span><span id="DataFrame.orderBy-567"><a href="#DataFrame.orderBy-567"><span class="linenos">567</span></a> <span class="p">]</span>
+</span><span id="DataFrame.orderBy-568"><a href="#DataFrame.orderBy-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">order_by_columns</span><span class="p">))</span>
</span></pre></div>
@@ -2307,42 +2469,42 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.sort"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.sort-513"><a href="#DataFrame.sort-513"><span class="linenos">513</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">)</span>
-</span><span id="DataFrame.sort-514"><a href="#DataFrame.sort-514"><span class="linenos">514</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span>
-</span><span id="DataFrame.sort-515"><a href="#DataFrame.sort-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.sort-516"><a href="#DataFrame.sort-516"><span class="linenos">516</span></a> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">],</span>
-</span><span id="DataFrame.sort-517"><a href="#DataFrame.sort-517"><span class="linenos">517</span></a> <span class="n">ascending</span><span 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">Union</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">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">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame.sort-518"><a href="#DataFrame.sort-518"><span class="linenos">518</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.sort-519"><a href="#DataFrame.sort-519"><span class="linenos">519</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame.sort-520"><a href="#DataFrame.sort-520"><span class="linenos">520</span></a><span class="sd"> This implementation lets any ordered columns take priority over whatever is provided in `ascending`. Spark</span>
-</span><span id="DataFrame.sort-521"><a href="#DataFrame.sort-521"><span class="linenos">521</span></a><span class="sd"> has irregular behavior and can result in runtime errors. Users shouldn&#39;t be mixing the two anyways so this</span>
-</span><span id="DataFrame.sort-522"><a href="#DataFrame.sort-522"><span class="linenos">522</span></a><span class="sd"> is unlikely to come up.</span>
-</span><span id="DataFrame.sort-523"><a href="#DataFrame.sort-523"><span class="linenos">523</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame.sort-524"><a href="#DataFrame.sort-524"><span class="linenos">524</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame.sort-525"><a href="#DataFrame.sort-525"><span class="linenos">525</span></a> <span class="n">pre_ordered_col_indexes</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.sort-526"><a href="#DataFrame.sort-526"><span class="linenos">526</span></a> <span class="n">x</span>
-</span><span id="DataFrame.sort-527"><a href="#DataFrame.sort-527"><span class="linenos">527</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
-</span><span id="DataFrame.sort-528"><a href="#DataFrame.sort-528"><span class="linenos">528</span></a> <span class="n">i</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span 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="k">else</span> <span class="kc">None</span>
-</span><span id="DataFrame.sort-529"><a href="#DataFrame.sort-529"><span class="linenos">529</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.sort-530"><a href="#DataFrame.sort-530"><span class="linenos">530</span></a> <span class="p">]</span>
-</span><span id="DataFrame.sort-531"><a href="#DataFrame.sort-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="DataFrame.sort-532"><a href="#DataFrame.sort-532"><span class="linenos">532</span></a> <span class="p">]</span>
-</span><span id="DataFrame.sort-533"><a href="#DataFrame.sort-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">ascending</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrame.sort-534"><a href="#DataFrame.sort-534"><span class="linenos">534</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="kc">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.sort-535"><a href="#DataFrame.sort-535"><span class="linenos">535</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ascending</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="DataFrame.sort-536"><a href="#DataFrame.sort-536"><span class="linenos">536</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="n">ascending</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.sort-537"><a href="#DataFrame.sort-537"><span class="linenos">537</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">(</span><span class="n">x</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">ascending</span><span class="p">)]</span>
-</span><span id="DataFrame.sort-538"><a href="#DataFrame.sort-538"><span class="linenos">538</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
-</span><span id="DataFrame.sort-539"><a href="#DataFrame.sort-539"><span class="linenos">539</span></a> <span class="n">ascending</span>
-</span><span id="DataFrame.sort-540"><a href="#DataFrame.sort-540"><span class="linenos">540</span></a> <span class="p">),</span> <span class="s2">&quot;The length of items in ascending must equal the number of columns provided&quot;</span>
-</span><span id="DataFrame.sort-541"><a href="#DataFrame.sort-541"><span class="linenos">541</span></a> <span class="n">col_and_ascending</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">ascending</span><span class="p">))</span>
-</span><span id="DataFrame.sort-542"><a href="#DataFrame.sort-542"><span class="linenos">542</span></a> <span class="n">order_by_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.sort-543"><a href="#DataFrame.sort-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="ow">not</span> <span class="n">asc</span><span class="p">)</span>
-</span><span id="DataFrame.sort-544"><a href="#DataFrame.sort-544"><span class="linenos">544</span></a> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pre_ordered_col_indexes</span>
-</span><span id="DataFrame.sort-545"><a href="#DataFrame.sort-545"><span class="linenos">545</span></a> <span class="k">else</span> <span class="n">columns</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">column_expression</span>
-</span><span id="DataFrame.sort-546"><a href="#DataFrame.sort-546"><span class="linenos">546</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">asc</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col_and_ascending</span><span class="p">)</span>
-</span><span id="DataFrame.sort-547"><a href="#DataFrame.sort-547"><span class="linenos">547</span></a> <span class="p">]</span>
-</span><span id="DataFrame.sort-548"><a href="#DataFrame.sort-548"><span class="linenos">548</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">order_by_columns</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.sort-533"><a href="#DataFrame.sort-533"><span class="linenos">533</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">)</span>
+</span><span id="DataFrame.sort-534"><a href="#DataFrame.sort-534"><span class="linenos">534</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span>
+</span><span id="DataFrame.sort-535"><a href="#DataFrame.sort-535"><span class="linenos">535</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.sort-536"><a href="#DataFrame.sort-536"><span class="linenos">536</span></a> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">],</span>
+</span><span id="DataFrame.sort-537"><a href="#DataFrame.sort-537"><span class="linenos">537</span></a> <span class="n">ascending</span><span 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">Union</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">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">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame.sort-538"><a href="#DataFrame.sort-538"><span class="linenos">538</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.sort-539"><a href="#DataFrame.sort-539"><span class="linenos">539</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame.sort-540"><a href="#DataFrame.sort-540"><span class="linenos">540</span></a><span class="sd"> This implementation lets any ordered columns take priority over whatever is provided in `ascending`. Spark</span>
+</span><span id="DataFrame.sort-541"><a href="#DataFrame.sort-541"><span class="linenos">541</span></a><span class="sd"> has irregular behavior and can result in runtime errors. Users shouldn&#39;t be mixing the two anyways so this</span>
+</span><span id="DataFrame.sort-542"><a href="#DataFrame.sort-542"><span class="linenos">542</span></a><span class="sd"> is unlikely to come up.</span>
+</span><span id="DataFrame.sort-543"><a href="#DataFrame.sort-543"><span class="linenos">543</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame.sort-544"><a href="#DataFrame.sort-544"><span class="linenos">544</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame.sort-545"><a href="#DataFrame.sort-545"><span class="linenos">545</span></a> <span class="n">pre_ordered_col_indexes</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.sort-546"><a href="#DataFrame.sort-546"><span class="linenos">546</span></a> <span class="n">x</span>
+</span><span id="DataFrame.sort-547"><a href="#DataFrame.sort-547"><span class="linenos">547</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span>
+</span><span id="DataFrame.sort-548"><a href="#DataFrame.sort-548"><span class="linenos">548</span></a> <span class="n">i</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">col</span><span 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="k">else</span> <span class="kc">None</span>
+</span><span id="DataFrame.sort-549"><a href="#DataFrame.sort-549"><span class="linenos">549</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.sort-550"><a href="#DataFrame.sort-550"><span class="linenos">550</span></a> <span class="p">]</span>
+</span><span id="DataFrame.sort-551"><a href="#DataFrame.sort-551"><span class="linenos">551</span></a> <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="DataFrame.sort-552"><a href="#DataFrame.sort-552"><span class="linenos">552</span></a> <span class="p">]</span>
+</span><span id="DataFrame.sort-553"><a href="#DataFrame.sort-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="n">ascending</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrame.sort-554"><a href="#DataFrame.sort-554"><span class="linenos">554</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="kc">True</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.sort-555"><a href="#DataFrame.sort-555"><span class="linenos">555</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ascending</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="DataFrame.sort-556"><a href="#DataFrame.sort-556"><span class="linenos">556</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="n">ascending</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.sort-557"><a href="#DataFrame.sort-557"><span class="linenos">557</span></a> <span class="n">ascending</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">(</span><span class="n">x</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">ascending</span><span class="p">)]</span>
+</span><span id="DataFrame.sort-558"><a href="#DataFrame.sort-558"><span class="linenos">558</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
+</span><span id="DataFrame.sort-559"><a href="#DataFrame.sort-559"><span class="linenos">559</span></a> <span class="n">ascending</span>
+</span><span id="DataFrame.sort-560"><a href="#DataFrame.sort-560"><span class="linenos">560</span></a> <span class="p">),</span> <span class="s2">&quot;The length of items in ascending must equal the number of columns provided&quot;</span>
+</span><span id="DataFrame.sort-561"><a href="#DataFrame.sort-561"><span class="linenos">561</span></a> <span class="n">col_and_ascending</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="n">ascending</span><span class="p">))</span>
+</span><span id="DataFrame.sort-562"><a href="#DataFrame.sort-562"><span class="linenos">562</span></a> <span class="n">order_by_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.sort-563"><a href="#DataFrame.sort-563"><span class="linenos">563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">col</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="ow">not</span> <span class="n">asc</span><span class="p">)</span>
+</span><span id="DataFrame.sort-564"><a href="#DataFrame.sort-564"><span class="linenos">564</span></a> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pre_ordered_col_indexes</span>
+</span><span id="DataFrame.sort-565"><a href="#DataFrame.sort-565"><span class="linenos">565</span></a> <span class="k">else</span> <span class="n">columns</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">column_expression</span>
+</span><span id="DataFrame.sort-566"><a href="#DataFrame.sort-566"><span class="linenos">566</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">asc</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col_and_ascending</span><span class="p">)</span>
+</span><span id="DataFrame.sort-567"><a href="#DataFrame.sort-567"><span class="linenos">567</span></a> <span class="p">]</span>
+</span><span id="DataFrame.sort-568"><a href="#DataFrame.sort-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">order_by_columns</span><span class="p">))</span>
</span></pre></div>
@@ -2365,9 +2527,9 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.union"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.union-552"><a href="#DataFrame.union-552"><span class="linenos">552</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.union-553"><a href="#DataFrame.union-553"><span class="linenos">553</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.union-554"><a href="#DataFrame.union-554"><span class="linenos">554</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.union-572"><a href="#DataFrame.union-572"><span class="linenos">572</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.union-573"><a href="#DataFrame.union-573"><span class="linenos">573</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.union-574"><a href="#DataFrame.union-574"><span class="linenos">574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -2386,9 +2548,9 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.unionAll"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.unionAll-552"><a href="#DataFrame.unionAll-552"><span class="linenos">552</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.unionAll-553"><a href="#DataFrame.unionAll-553"><span class="linenos">553</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.unionAll-554"><a href="#DataFrame.unionAll-554"><span class="linenos">554</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.unionAll-572"><a href="#DataFrame.unionAll-572"><span class="linenos">572</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.unionAll-573"><a href="#DataFrame.unionAll-573"><span class="linenos">573</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.unionAll-574"><a href="#DataFrame.unionAll-574"><span class="linenos">574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -2407,34 +2569,34 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.unionByName"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.unionByName-558"><a href="#DataFrame.unionByName-558"><span class="linenos">558</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.unionByName-559"><a href="#DataFrame.unionByName-559"><span class="linenos">559</span></a> <span class="k">def</span> <span class="nf">unionByName</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">DataFrame</span><span class="p">,</span> <span class="n">allowMissingColumns</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="DataFrame.unionByName-560"><a href="#DataFrame.unionByName-560"><span class="linenos">560</span></a> <span class="n">l_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="DataFrame.unionByName-561"><a href="#DataFrame.unionByName-561"><span class="linenos">561</span></a> <span class="n">r_columns</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="DataFrame.unionByName-562"><a href="#DataFrame.unionByName-562"><span class="linenos">562</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-563"><a href="#DataFrame.unionByName-563"><span class="linenos">563</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
-</span><span id="DataFrame.unionByName-564"><a href="#DataFrame.unionByName-564"><span class="linenos">564</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
-</span><span id="DataFrame.unionByName-565"><a href="#DataFrame.unionByName-565"><span class="linenos">565</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-566"><a href="#DataFrame.unionByName-566"><span class="linenos">566</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame.unionByName-567"><a href="#DataFrame.unionByName-567"><span class="linenos">567</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="DataFrame.unionByName-568"><a href="#DataFrame.unionByName-568"><span class="linenos">568</span></a> <span class="n">r_columns_unused</span> <span class="o">=</span> <span class="n">copy</span><span class="p">(</span><span class="n">r_columns</span><span class="p">)</span>
-</span><span id="DataFrame.unionByName-569"><a href="#DataFrame.unionByName-569"><span class="linenos">569</span></a> <span class="k">for</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">l_columns</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-570"><a href="#DataFrame.unionByName-570"><span class="linenos">570</span></a> <span class="n">l_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
-</span><span id="DataFrame.unionByName-571"><a href="#DataFrame.unionByName-571"><span class="linenos">571</span></a> <span class="k">if</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">r_columns</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-572"><a href="#DataFrame.unionByName-572"><span class="linenos">572</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
-</span><span id="DataFrame.unionByName-573"><a href="#DataFrame.unionByName-573"><span class="linenos">573</span></a> <span class="n">r_columns_unused</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
-</span><span id="DataFrame.unionByName-574"><a href="#DataFrame.unionByName-574"><span class="linenos">574</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-575"><a href="#DataFrame.unionByName-575"><span class="linenos">575</span></a> <span class="n">r_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">l_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="DataFrame.unionByName-576"><a href="#DataFrame.unionByName-576"><span class="linenos">576</span></a> <span class="k">for</span> <span class="n">r_column</span> <span class="ow">in</span> <span class="n">r_columns_unused</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-577"><a href="#DataFrame.unionByName-577"><span class="linenos">577</span></a> <span class="n">l_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">r_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="DataFrame.unionByName-578"><a href="#DataFrame.unionByName-578"><span class="linenos">578</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r_column</span><span class="p">)</span>
-</span><span id="DataFrame.unionByName-579"><a href="#DataFrame.unionByName-579"><span class="linenos">579</span></a> <span class="n">r_df</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame.unionByName-580"><a href="#DataFrame.unionByName-580"><span class="linenos">580</span></a> <span class="n">other</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">r_expressions</span><span class="p">))</span>
-</span><span id="DataFrame.unionByName-581"><a href="#DataFrame.unionByName-581"><span class="linenos">581</span></a> <span class="p">)</span>
-</span><span id="DataFrame.unionByName-582"><a href="#DataFrame.unionByName-582"><span class="linenos">582</span></a> <span class="n">l_df</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="DataFrame.unionByName-583"><a href="#DataFrame.unionByName-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
-</span><span id="DataFrame.unionByName-584"><a href="#DataFrame.unionByName-584"><span class="linenos">584</span></a> <span class="n">l_df</span> <span class="o">=</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">l_expressions</span><span class="p">))</span>
-</span><span id="DataFrame.unionByName-585"><a href="#DataFrame.unionByName-585"><span class="linenos">585</span></a> <span class="k">return</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">r_df</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.unionByName-578"><a href="#DataFrame.unionByName-578"><span class="linenos">578</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.unionByName-579"><a href="#DataFrame.unionByName-579"><span class="linenos">579</span></a> <span class="k">def</span> <span class="nf">unionByName</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">DataFrame</span><span class="p">,</span> <span class="n">allowMissingColumns</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="DataFrame.unionByName-580"><a href="#DataFrame.unionByName-580"><span class="linenos">580</span></a> <span class="n">l_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="DataFrame.unionByName-581"><a href="#DataFrame.unionByName-581"><span class="linenos">581</span></a> <span class="n">r_columns</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="DataFrame.unionByName-582"><a href="#DataFrame.unionByName-582"><span class="linenos">582</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-583"><a href="#DataFrame.unionByName-583"><span class="linenos">583</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
+</span><span id="DataFrame.unionByName-584"><a href="#DataFrame.unionByName-584"><span class="linenos">584</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="n">l_columns</span>
+</span><span id="DataFrame.unionByName-585"><a href="#DataFrame.unionByName-585"><span class="linenos">585</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-586"><a href="#DataFrame.unionByName-586"><span class="linenos">586</span></a> <span class="n">l_expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame.unionByName-587"><a href="#DataFrame.unionByName-587"><span class="linenos">587</span></a> <span class="n">r_expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="DataFrame.unionByName-588"><a href="#DataFrame.unionByName-588"><span class="linenos">588</span></a> <span class="n">r_columns_unused</span> <span class="o">=</span> <span class="n">copy</span><span class="p">(</span><span class="n">r_columns</span><span class="p">)</span>
+</span><span id="DataFrame.unionByName-589"><a href="#DataFrame.unionByName-589"><span class="linenos">589</span></a> <span class="k">for</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">l_columns</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-590"><a href="#DataFrame.unionByName-590"><span class="linenos">590</span></a> <span class="n">l_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
+</span><span id="DataFrame.unionByName-591"><a href="#DataFrame.unionByName-591"><span class="linenos">591</span></a> <span class="k">if</span> <span class="n">l_column</span> <span class="ow">in</span> <span class="n">r_columns</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-592"><a href="#DataFrame.unionByName-592"><span class="linenos">592</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
+</span><span id="DataFrame.unionByName-593"><a href="#DataFrame.unionByName-593"><span class="linenos">593</span></a> <span class="n">r_columns_unused</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">l_column</span><span class="p">)</span>
+</span><span id="DataFrame.unionByName-594"><a href="#DataFrame.unionByName-594"><span class="linenos">594</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-595"><a href="#DataFrame.unionByName-595"><span class="linenos">595</span></a> <span class="n">r_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">l_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="DataFrame.unionByName-596"><a href="#DataFrame.unionByName-596"><span class="linenos">596</span></a> <span class="k">for</span> <span class="n">r_column</span> <span class="ow">in</span> <span class="n">r_columns_unused</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-597"><a href="#DataFrame.unionByName-597"><span class="linenos">597</span></a> <span class="n">l_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">alias_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">(),</span> <span class="n">r_column</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="DataFrame.unionByName-598"><a href="#DataFrame.unionByName-598"><span class="linenos">598</span></a> <span class="n">r_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r_column</span><span class="p">)</span>
+</span><span id="DataFrame.unionByName-599"><a href="#DataFrame.unionByName-599"><span class="linenos">599</span></a> <span class="n">r_df</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame.unionByName-600"><a href="#DataFrame.unionByName-600"><span class="linenos">600</span></a> <span class="n">other</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">r_expressions</span><span class="p">))</span>
+</span><span id="DataFrame.unionByName-601"><a href="#DataFrame.unionByName-601"><span class="linenos">601</span></a> <span class="p">)</span>
+</span><span id="DataFrame.unionByName-602"><a href="#DataFrame.unionByName-602"><span class="linenos">602</span></a> <span class="n">l_df</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="DataFrame.unionByName-603"><a href="#DataFrame.unionByName-603"><span class="linenos">603</span></a> <span class="k">if</span> <span class="n">allowMissingColumns</span><span class="p">:</span>
+</span><span id="DataFrame.unionByName-604"><a href="#DataFrame.unionByName-604"><span class="linenos">604</span></a> <span class="n">l_df</span> <span class="o">=</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">l_expressions</span><span class="p">))</span>
+</span><span id="DataFrame.unionByName-605"><a href="#DataFrame.unionByName-605"><span class="linenos">605</span></a> <span class="k">return</span> <span class="n">l_df</span><span class="o">.</span><span class="n">_set_operation</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span> <span class="n">r_df</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -2453,9 +2615,9 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.intersect"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.intersect-587"><a href="#DataFrame.intersect-587"><span class="linenos">587</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.intersect-588"><a href="#DataFrame.intersect-588"><span class="linenos">588</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.intersect-589"><a href="#DataFrame.intersect-589"><span class="linenos">589</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.intersect-607"><a href="#DataFrame.intersect-607"><span class="linenos">607</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.intersect-608"><a href="#DataFrame.intersect-608"><span class="linenos">608</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">other</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.intersect-609"><a href="#DataFrame.intersect-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span></pre></div>
@@ -2474,9 +2636,9 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.intersectAll"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.intersectAll-591"><a href="#DataFrame.intersectAll-591"><span class="linenos">591</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.intersectAll-592"><a href="#DataFrame.intersectAll-592"><span class="linenos">592</span></a> <span class="k">def</span> <span class="nf">intersectAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.intersectAll-593"><a href="#DataFrame.intersectAll-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.intersectAll-611"><a href="#DataFrame.intersectAll-611"><span class="linenos">611</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.intersectAll-612"><a href="#DataFrame.intersectAll-612"><span class="linenos">612</span></a> <span class="k">def</span> <span class="nf">intersectAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.intersectAll-613"><a href="#DataFrame.intersectAll-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -2495,9 +2657,9 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.exceptAll"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.exceptAll-595"><a href="#DataFrame.exceptAll-595"><span class="linenos">595</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.exceptAll-596"><a href="#DataFrame.exceptAll-596"><span class="linenos">596</span></a> <span class="k">def</span> <span class="nf">exceptAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.exceptAll-597"><a href="#DataFrame.exceptAll-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.exceptAll-615"><a href="#DataFrame.exceptAll-615"><span class="linenos">615</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.exceptAll-616"><a href="#DataFrame.exceptAll-616"><span class="linenos">616</span></a> <span class="k">def</span> <span class="nf">exceptAll</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">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.exceptAll-617"><a href="#DataFrame.exceptAll-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_operation</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="n">other</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -2516,9 +2678,9 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.distinct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.distinct-599"><a href="#DataFrame.distinct-599"><span class="linenos">599</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.distinct-600"><a href="#DataFrame.distinct-600"><span class="linenos">600</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">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.distinct-601"><a href="#DataFrame.distinct-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">distinct</span><span class="p">())</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.distinct-619"><a href="#DataFrame.distinct-619"><span class="linenos">619</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.distinct-620"><a href="#DataFrame.distinct-620"><span class="linenos">620</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">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.distinct-621"><a href="#DataFrame.distinct-621"><span class="linenos">621</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">distinct</span><span class="p">())</span>
</span></pre></div>
@@ -2537,18 +2699,18 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.dropDuplicates"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.dropDuplicates-603"><a href="#DataFrame.dropDuplicates-603"><span class="linenos">603</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.dropDuplicates-604"><a href="#DataFrame.dropDuplicates-604"><span class="linenos">604</span></a> <span class="k">def</span> <span class="nf">dropDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subset</span><span 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="DataFrame.dropDuplicates-605"><a href="#DataFrame.dropDuplicates-605"><span class="linenos">605</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subset</span><span class="p">:</span>
-</span><span id="DataFrame.dropDuplicates-606"><a href="#DataFrame.dropDuplicates-606"><span class="linenos">606</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
-</span><span id="DataFrame.dropDuplicates-607"><a href="#DataFrame.dropDuplicates-607"><span class="linenos">607</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
-</span><span id="DataFrame.dropDuplicates-608"><a href="#DataFrame.dropDuplicates-608"><span class="linenos">608</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">Window</span><span class="o">.</span><span class="n">partitionBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span><span class="o">.</span><span class="n">orderBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span>
-</span><span id="DataFrame.dropDuplicates-609"><a href="#DataFrame.dropDuplicates-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="DataFrame.dropDuplicates-610"><a href="#DataFrame.dropDuplicates-610"><span class="linenos">610</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame.dropDuplicates-611"><a href="#DataFrame.dropDuplicates-611"><span class="linenos">611</span></a> <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span><span class="n">row_number</span><span class="p">()</span><span class="o">.</span><span class="n">over</span><span class="p">(</span><span class="n">window</span><span class="p">))</span>
-</span><span id="DataFrame.dropDuplicates-612"><a href="#DataFrame.dropDuplicates-612"><span class="linenos">612</span></a> <span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
-</span><span id="DataFrame.dropDuplicates-613"><a href="#DataFrame.dropDuplicates-613"><span class="linenos">613</span></a> <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span>
-</span><span id="DataFrame.dropDuplicates-614"><a href="#DataFrame.dropDuplicates-614"><span class="linenos">614</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.dropDuplicates-623"><a href="#DataFrame.dropDuplicates-623"><span class="linenos">623</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.dropDuplicates-624"><a href="#DataFrame.dropDuplicates-624"><span class="linenos">624</span></a> <span class="k">def</span> <span class="nf">dropDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subset</span><span 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="DataFrame.dropDuplicates-625"><a href="#DataFrame.dropDuplicates-625"><span class="linenos">625</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subset</span><span class="p">:</span>
+</span><span id="DataFrame.dropDuplicates-626"><a href="#DataFrame.dropDuplicates-626"><span class="linenos">626</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
+</span><span id="DataFrame.dropDuplicates-627"><a href="#DataFrame.dropDuplicates-627"><span class="linenos">627</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
+</span><span id="DataFrame.dropDuplicates-628"><a href="#DataFrame.dropDuplicates-628"><span class="linenos">628</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">Window</span><span class="o">.</span><span class="n">partitionBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span><span class="o">.</span><span class="n">orderBy</span><span class="p">(</span><span class="o">*</span><span class="n">column_names</span><span class="p">)</span>
+</span><span id="DataFrame.dropDuplicates-629"><a href="#DataFrame.dropDuplicates-629"><span class="linenos">629</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="DataFrame.dropDuplicates-630"><a href="#DataFrame.dropDuplicates-630"><span class="linenos">630</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame.dropDuplicates-631"><a href="#DataFrame.dropDuplicates-631"><span class="linenos">631</span></a> <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span><span class="n">row_number</span><span class="p">()</span><span class="o">.</span><span class="n">over</span><span class="p">(</span><span class="n">window</span><span class="p">))</span>
+</span><span id="DataFrame.dropDuplicates-632"><a href="#DataFrame.dropDuplicates-632"><span class="linenos">632</span></a> <span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
+</span><span id="DataFrame.dropDuplicates-633"><a href="#DataFrame.dropDuplicates-633"><span class="linenos">633</span></a> <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">&quot;row_num&quot;</span><span class="p">)</span>
+</span><span id="DataFrame.dropDuplicates-634"><a href="#DataFrame.dropDuplicates-634"><span class="linenos">634</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2567,38 +2729,38 @@ is unlikely to come up.</p>
</div>
<a class="headerlink" href="#DataFrame.dropna"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.dropna-616"><a href="#DataFrame.dropna-616"><span class="linenos">616</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-617"><a href="#DataFrame.dropna-617"><span class="linenos">617</span></a> <span class="k">def</span> <span class="nf">dropna</span><span class="p">(</span>
-</span><span id="DataFrame.dropna-618"><a href="#DataFrame.dropna-618"><span class="linenos">618</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.dropna-619"><a href="#DataFrame.dropna-619"><span class="linenos">619</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="DataFrame.dropna-620"><a href="#DataFrame.dropna-620"><span class="linenos">620</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame.dropna-621"><a href="#DataFrame.dropna-621"><span class="linenos">621</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame.dropna-622"><a href="#DataFrame.dropna-622"><span class="linenos">622</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.dropna-623"><a href="#DataFrame.dropna-623"><span class="linenos">623</span></a> <span class="n">minimum_non_null</span> <span class="o">=</span> <span class="n">thresh</span> <span class="ow">or</span> <span class="mi">0</span> <span class="c1"># will be determined later if thresh is null</span>
-</span><span id="DataFrame.dropna-624"><a href="#DataFrame.dropna-624"><span class="linenos">624</span></a> <span class="n">new_df</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="DataFrame.dropna-625"><a href="#DataFrame.dropna-625"><span class="linenos">625</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-626"><a href="#DataFrame.dropna-626"><span class="linenos">626</span></a> <span class="k">if</span> <span class="n">subset</span><span class="p">:</span>
-</span><span id="DataFrame.dropna-627"><a href="#DataFrame.dropna-627"><span class="linenos">627</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-628"><a href="#DataFrame.dropna-628"><span class="linenos">628</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.dropna-629"><a href="#DataFrame.dropna-629"><span class="linenos">629</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="n">all_columns</span>
-</span><span id="DataFrame.dropna-630"><a href="#DataFrame.dropna-630"><span class="linenos">630</span></a> <span class="k">if</span> <span class="n">thresh</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrame.dropna-631"><a href="#DataFrame.dropna-631"><span class="linenos">631</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">how</span> <span class="o">==</span> <span class="s2">&quot;any&quot;</span> <span class="k">else</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-632"><a href="#DataFrame.dropna-632"><span class="linenos">632</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.dropna-633"><a href="#DataFrame.dropna-633"><span class="linenos">633</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span> <span class="o">-</span> <span class="n">minimum_non_null</span> <span class="o">+</span> <span class="mi">1</span>
-</span><span id="DataFrame.dropna-634"><a href="#DataFrame.dropna-634"><span class="linenos">634</span></a> <span class="k">if</span> <span class="n">minimum_num_nulls</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">):</span>
-</span><span id="DataFrame.dropna-635"><a href="#DataFrame.dropna-635"><span class="linenos">635</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
-</span><span id="DataFrame.dropna-636"><a href="#DataFrame.dropna-636"><span class="linenos">636</span></a> <span class="sa">f</span><span class="s2">&quot;The minimum num nulls for dropna must be less than or equal to the number of columns. &quot;</span>
-</span><span id="DataFrame.dropna-637"><a href="#DataFrame.dropna-637"><span class="linenos">637</span></a> <span class="sa">f</span><span class="s2">&quot;Minimum num nulls: </span><span class="si">{</span><span class="n">minimum_num_nulls</span><span class="si">}</span><span class="s2">, Num Columns: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DataFrame.dropna-638"><a href="#DataFrame.dropna-638"><span class="linenos">638</span></a> <span class="p">)</span>
-</span><span id="DataFrame.dropna-639"><a href="#DataFrame.dropna-639"><span class="linenos">639</span></a> <span class="n">if_null_checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.dropna-640"><a href="#DataFrame.dropna-640"><span class="linenos">640</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">null_check_columns</span>
-</span><span id="DataFrame.dropna-641"><a href="#DataFrame.dropna-641"><span class="linenos">641</span></a> <span class="p">]</span>
-</span><span id="DataFrame.dropna-642"><a href="#DataFrame.dropna-642"><span class="linenos">642</span></a> <span class="n">nulls_added_together</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="p">,</span> <span class="n">if_null_checks</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-643"><a href="#DataFrame.dropna-643"><span class="linenos">643</span></a> <span class="n">num_nulls</span> <span class="o">=</span> <span class="n">nulls_added_together</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-644"><a href="#DataFrame.dropna-644"><span class="linenos">644</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">num_nulls</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-645"><a href="#DataFrame.dropna-645"><span class="linenos">645</span></a> <span class="n">filtered_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">minimum_num_nulls</span><span class="p">))</span>
-</span><span id="DataFrame.dropna-646"><a href="#DataFrame.dropna-646"><span class="linenos">646</span></a> <span class="n">final_df</span> <span class="o">=</span> <span class="n">filtered_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">all_columns</span><span class="p">)</span>
-</span><span id="DataFrame.dropna-647"><a href="#DataFrame.dropna-647"><span class="linenos">647</span></a> <span class="k">return</span> <span class="n">final_df</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.dropna-636"><a href="#DataFrame.dropna-636"><span class="linenos">636</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-637"><a href="#DataFrame.dropna-637"><span class="linenos">637</span></a> <span class="k">def</span> <span class="nf">dropna</span><span class="p">(</span>
+</span><span id="DataFrame.dropna-638"><a href="#DataFrame.dropna-638"><span class="linenos">638</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.dropna-639"><a href="#DataFrame.dropna-639"><span class="linenos">639</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="DataFrame.dropna-640"><a href="#DataFrame.dropna-640"><span class="linenos">640</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame.dropna-641"><a href="#DataFrame.dropna-641"><span class="linenos">641</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame.dropna-642"><a href="#DataFrame.dropna-642"><span class="linenos">642</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.dropna-643"><a href="#DataFrame.dropna-643"><span class="linenos">643</span></a> <span class="n">minimum_non_null</span> <span class="o">=</span> <span class="n">thresh</span> <span class="ow">or</span> <span class="mi">0</span> <span class="c1"># will be determined later if thresh is null</span>
+</span><span id="DataFrame.dropna-644"><a href="#DataFrame.dropna-644"><span class="linenos">644</span></a> <span class="n">new_df</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="DataFrame.dropna-645"><a href="#DataFrame.dropna-645"><span class="linenos">645</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-646"><a href="#DataFrame.dropna-646"><span class="linenos">646</span></a> <span class="k">if</span> <span class="n">subset</span><span class="p">:</span>
+</span><span id="DataFrame.dropna-647"><a href="#DataFrame.dropna-647"><span class="linenos">647</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-648"><a href="#DataFrame.dropna-648"><span class="linenos">648</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.dropna-649"><a href="#DataFrame.dropna-649"><span class="linenos">649</span></a> <span class="n">null_check_columns</span> <span class="o">=</span> <span class="n">all_columns</span>
+</span><span id="DataFrame.dropna-650"><a href="#DataFrame.dropna-650"><span class="linenos">650</span></a> <span class="k">if</span> <span class="n">thresh</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrame.dropna-651"><a href="#DataFrame.dropna-651"><span class="linenos">651</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">how</span> <span class="o">==</span> <span class="s2">&quot;any&quot;</span> <span class="k">else</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-652"><a href="#DataFrame.dropna-652"><span class="linenos">652</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.dropna-653"><a href="#DataFrame.dropna-653"><span class="linenos">653</span></a> <span class="n">minimum_num_nulls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span> <span class="o">-</span> <span class="n">minimum_non_null</span> <span class="o">+</span> <span class="mi">1</span>
+</span><span id="DataFrame.dropna-654"><a href="#DataFrame.dropna-654"><span class="linenos">654</span></a> <span class="k">if</span> <span class="n">minimum_num_nulls</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">):</span>
+</span><span id="DataFrame.dropna-655"><a href="#DataFrame.dropna-655"><span class="linenos">655</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+</span><span id="DataFrame.dropna-656"><a href="#DataFrame.dropna-656"><span class="linenos">656</span></a> <span class="sa">f</span><span class="s2">&quot;The minimum num nulls for dropna must be less than or equal to the number of columns. &quot;</span>
+</span><span id="DataFrame.dropna-657"><a href="#DataFrame.dropna-657"><span class="linenos">657</span></a> <span class="sa">f</span><span class="s2">&quot;Minimum num nulls: </span><span class="si">{</span><span class="n">minimum_num_nulls</span><span class="si">}</span><span class="s2">, Num Columns: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">null_check_columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DataFrame.dropna-658"><a href="#DataFrame.dropna-658"><span class="linenos">658</span></a> <span class="p">)</span>
+</span><span id="DataFrame.dropna-659"><a href="#DataFrame.dropna-659"><span class="linenos">659</span></a> <span class="n">if_null_checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.dropna-660"><a href="#DataFrame.dropna-660"><span class="linenos">660</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">null_check_columns</span>
+</span><span id="DataFrame.dropna-661"><a href="#DataFrame.dropna-661"><span class="linenos">661</span></a> <span class="p">]</span>
+</span><span id="DataFrame.dropna-662"><a href="#DataFrame.dropna-662"><span class="linenos">662</span></a> <span class="n">nulls_added_together</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="p">,</span> <span class="n">if_null_checks</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-663"><a href="#DataFrame.dropna-663"><span class="linenos">663</span></a> <span class="n">num_nulls</span> <span class="o">=</span> <span class="n">nulls_added_together</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-664"><a href="#DataFrame.dropna-664"><span class="linenos">664</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">num_nulls</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-665"><a href="#DataFrame.dropna-665"><span class="linenos">665</span></a> <span class="n">filtered_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;num_nulls&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">minimum_num_nulls</span><span class="p">))</span>
+</span><span id="DataFrame.dropna-666"><a href="#DataFrame.dropna-666"><span class="linenos">666</span></a> <span class="n">final_df</span> <span class="o">=</span> <span class="n">filtered_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">all_columns</span><span class="p">)</span>
+</span><span id="DataFrame.dropna-667"><a href="#DataFrame.dropna-667"><span class="linenos">667</span></a> <span class="k">return</span> <span class="n">final_df</span>
</span></pre></div>
@@ -2611,55 +2773,55 @@ 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;140247750367872&#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;139783386404304&#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>
</div>
<a class="headerlink" href="#DataFrame.fillna"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.fillna-649"><a href="#DataFrame.fillna-649"><span class="linenos">649</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.fillna-650"><a href="#DataFrame.fillna-650"><span class="linenos">650</span></a> <span class="k">def</span> <span class="nf">fillna</span><span class="p">(</span>
-</span><span id="DataFrame.fillna-651"><a href="#DataFrame.fillna-651"><span class="linenos">651</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.fillna-652"><a href="#DataFrame.fillna-652"><span class="linenos">652</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnLiterals</span><span class="p">],</span>
-</span><span id="DataFrame.fillna-653"><a href="#DataFrame.fillna-653"><span class="linenos">653</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame.fillna-654"><a href="#DataFrame.fillna-654"><span class="linenos">654</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.fillna-655"><a href="#DataFrame.fillna-655"><span class="linenos">655</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame.fillna-656"><a href="#DataFrame.fillna-656"><span class="linenos">656</span></a><span class="sd"> Functionality Difference: If you provide a value to replace a null and that type conflicts</span>
-</span><span id="DataFrame.fillna-657"><a href="#DataFrame.fillna-657"><span class="linenos">657</span></a><span class="sd"> with the type of the column then PySpark will just ignore your replacement.</span>
-</span><span id="DataFrame.fillna-658"><a href="#DataFrame.fillna-658"><span class="linenos">658</span></a><span class="sd"> This will try to cast them to be the same in some cases. So they won&#39;t always match.</span>
-</span><span id="DataFrame.fillna-659"><a href="#DataFrame.fillna-659"><span class="linenos">659</span></a><span class="sd"> Best to not mix types so make sure replacement is the same type as the column</span>
-</span><span id="DataFrame.fillna-660"><a href="#DataFrame.fillna-660"><span class="linenos">660</span></a>
-</span><span id="DataFrame.fillna-661"><a href="#DataFrame.fillna-661"><span class="linenos">661</span></a><span class="sd"> Possibility for improvement: Use `typeof` function to get the type of the column</span>
-</span><span id="DataFrame.fillna-662"><a href="#DataFrame.fillna-662"><span class="linenos">662</span></a><span class="sd"> and check if it matches the type of the value provided. If not then make it null.</span>
-</span><span id="DataFrame.fillna-663"><a href="#DataFrame.fillna-663"><span class="linenos">663</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame.fillna-664"><a href="#DataFrame.fillna-664"><span class="linenos">664</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
-</span><span id="DataFrame.fillna-665"><a href="#DataFrame.fillna-665"><span class="linenos">665</span></a>
-</span><span id="DataFrame.fillna-666"><a href="#DataFrame.fillna-666"><span class="linenos">666</span></a> <span class="n">values</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DataFrame.fillna-667"><a href="#DataFrame.fillna-667"><span class="linenos">667</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DataFrame.fillna-668"><a href="#DataFrame.fillna-668"><span class="linenos">668</span></a> <span class="n">new_df</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="DataFrame.fillna-669"><a href="#DataFrame.fillna-669"><span class="linenos">669</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame.fillna-670"><a href="#DataFrame.fillna-670"><span class="linenos">670</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
-</span><span id="DataFrame.fillna-671"><a href="#DataFrame.fillna-671"><span class="linenos">671</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="DataFrame.fillna-672"><a href="#DataFrame.fillna-672"><span class="linenos">672</span></a> <span class="n">values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="DataFrame.fillna-673"><a href="#DataFrame.fillna-673"><span class="linenos">673</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
-</span><span id="DataFrame.fillna-674"><a href="#DataFrame.fillna-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="DataFrame.fillna-675"><a href="#DataFrame.fillna-675"><span class="linenos">675</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
-</span><span id="DataFrame.fillna-676"><a href="#DataFrame.fillna-676"><span class="linenos">676</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="DataFrame.fillna-677"><a href="#DataFrame.fillna-677"><span class="linenos">677</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.fillna-678"><a href="#DataFrame.fillna-678"><span class="linenos">678</span></a> <span class="n">value_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
-</span><span id="DataFrame.fillna-679"><a href="#DataFrame.fillna-679"><span class="linenos">679</span></a>
-</span><span id="DataFrame.fillna-680"><a href="#DataFrame.fillna-680"><span class="linenos">680</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataFrame.fillna-681"><a href="#DataFrame.fillna-681"><span class="linenos">681</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="DataFrame.fillna-682"><a href="#DataFrame.fillna-682"><span class="linenos">682</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
-</span><span id="DataFrame.fillna-683"><a href="#DataFrame.fillna-683"><span class="linenos">683</span></a> <span class="p">)</span>
-</span><span id="DataFrame.fillna-684"><a href="#DataFrame.fillna-684"><span class="linenos">684</span></a> <span class="k">for</span> <span class="n">column</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">columns</span><span class="p">,</span> <span class="n">value_columns</span><span class="p">)</span>
-</span><span id="DataFrame.fillna-685"><a href="#DataFrame.fillna-685"><span class="linenos">685</span></a> <span class="p">}</span>
-</span><span id="DataFrame.fillna-686"><a href="#DataFrame.fillna-686"><span class="linenos">686</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">null_replacement_mapping</span><span class="p">}</span>
-</span><span id="DataFrame.fillna-687"><a href="#DataFrame.fillna-687"><span class="linenos">687</span></a> <span class="n">null_replacement_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.fillna-688"><a href="#DataFrame.fillna-688"><span class="linenos">688</span></a> <span class="n">null_replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span>
-</span><span id="DataFrame.fillna-689"><a href="#DataFrame.fillna-689"><span class="linenos">689</span></a> <span class="p">]</span>
-</span><span id="DataFrame.fillna-690"><a href="#DataFrame.fillna-690"><span class="linenos">690</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">null_replacement_columns</span><span class="p">)</span>
-</span><span id="DataFrame.fillna-691"><a href="#DataFrame.fillna-691"><span class="linenos">691</span></a> <span class="k">return</span> <span class="n">new_df</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.fillna-669"><a href="#DataFrame.fillna-669"><span class="linenos">669</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.fillna-670"><a href="#DataFrame.fillna-670"><span class="linenos">670</span></a> <span class="k">def</span> <span class="nf">fillna</span><span class="p">(</span>
+</span><span id="DataFrame.fillna-671"><a href="#DataFrame.fillna-671"><span class="linenos">671</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.fillna-672"><a href="#DataFrame.fillna-672"><span class="linenos">672</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnLiterals</span><span class="p">],</span>
+</span><span id="DataFrame.fillna-673"><a href="#DataFrame.fillna-673"><span class="linenos">673</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrame.fillna-674"><a href="#DataFrame.fillna-674"><span class="linenos">674</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.fillna-675"><a href="#DataFrame.fillna-675"><span class="linenos">675</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame.fillna-676"><a href="#DataFrame.fillna-676"><span class="linenos">676</span></a><span class="sd"> Functionality Difference: If you provide a value to replace a null and that type conflicts</span>
+</span><span id="DataFrame.fillna-677"><a href="#DataFrame.fillna-677"><span class="linenos">677</span></a><span class="sd"> with the type of the column then PySpark will just ignore your replacement.</span>
+</span><span id="DataFrame.fillna-678"><a href="#DataFrame.fillna-678"><span class="linenos">678</span></a><span class="sd"> This will try to cast them to be the same in some cases. So they won&#39;t always match.</span>
+</span><span id="DataFrame.fillna-679"><a href="#DataFrame.fillna-679"><span class="linenos">679</span></a><span class="sd"> Best to not mix types so make sure replacement is the same type as the column</span>
+</span><span id="DataFrame.fillna-680"><a href="#DataFrame.fillna-680"><span class="linenos">680</span></a>
+</span><span id="DataFrame.fillna-681"><a href="#DataFrame.fillna-681"><span class="linenos">681</span></a><span class="sd"> Possibility for improvement: Use `typeof` function to get the type of the column</span>
+</span><span id="DataFrame.fillna-682"><a href="#DataFrame.fillna-682"><span class="linenos">682</span></a><span class="sd"> and check if it matches the type of the value provided. If not then make it null.</span>
+</span><span id="DataFrame.fillna-683"><a href="#DataFrame.fillna-683"><span class="linenos">683</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame.fillna-684"><a href="#DataFrame.fillna-684"><span class="linenos">684</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
+</span><span id="DataFrame.fillna-685"><a href="#DataFrame.fillna-685"><span class="linenos">685</span></a>
+</span><span id="DataFrame.fillna-686"><a href="#DataFrame.fillna-686"><span class="linenos">686</span></a> <span class="n">values</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DataFrame.fillna-687"><a href="#DataFrame.fillna-687"><span class="linenos">687</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DataFrame.fillna-688"><a href="#DataFrame.fillna-688"><span class="linenos">688</span></a> <span class="n">new_df</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="DataFrame.fillna-689"><a href="#DataFrame.fillna-689"><span class="linenos">689</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame.fillna-690"><a href="#DataFrame.fillna-690"><span class="linenos">690</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
+</span><span id="DataFrame.fillna-691"><a href="#DataFrame.fillna-691"><span class="linenos">691</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="DataFrame.fillna-692"><a href="#DataFrame.fillna-692"><span class="linenos">692</span></a> <span class="n">values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
+</span><span id="DataFrame.fillna-693"><a href="#DataFrame.fillna-693"><span class="linenos">693</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+</span><span id="DataFrame.fillna-694"><a href="#DataFrame.fillna-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="DataFrame.fillna-695"><a href="#DataFrame.fillna-695"><span class="linenos">695</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
+</span><span id="DataFrame.fillna-696"><a href="#DataFrame.fillna-696"><span class="linenos">696</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="DataFrame.fillna-697"><a href="#DataFrame.fillna-697"><span class="linenos">697</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.fillna-698"><a href="#DataFrame.fillna-698"><span class="linenos">698</span></a> <span class="n">value_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
+</span><span id="DataFrame.fillna-699"><a href="#DataFrame.fillna-699"><span class="linenos">699</span></a>
+</span><span id="DataFrame.fillna-700"><a href="#DataFrame.fillna-700"><span class="linenos">700</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataFrame.fillna-701"><a href="#DataFrame.fillna-701"><span class="linenos">701</span></a> <span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="DataFrame.fillna-702"><a href="#DataFrame.fillna-702"><span class="linenos">702</span></a> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">isNull</span><span class="p">(),</span> <span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
+</span><span id="DataFrame.fillna-703"><a href="#DataFrame.fillna-703"><span class="linenos">703</span></a> <span class="p">)</span>
+</span><span id="DataFrame.fillna-704"><a href="#DataFrame.fillna-704"><span class="linenos">704</span></a> <span class="k">for</span> <span class="n">column</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">columns</span><span class="p">,</span> <span class="n">value_columns</span><span class="p">)</span>
+</span><span id="DataFrame.fillna-705"><a href="#DataFrame.fillna-705"><span class="linenos">705</span></a> <span class="p">}</span>
+</span><span id="DataFrame.fillna-706"><a href="#DataFrame.fillna-706"><span class="linenos">706</span></a> <span class="n">null_replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">null_replacement_mapping</span><span class="p">}</span>
+</span><span id="DataFrame.fillna-707"><a href="#DataFrame.fillna-707"><span class="linenos">707</span></a> <span class="n">null_replacement_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.fillna-708"><a href="#DataFrame.fillna-708"><span class="linenos">708</span></a> <span class="n">null_replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span>
+</span><span id="DataFrame.fillna-709"><a href="#DataFrame.fillna-709"><span class="linenos">709</span></a> <span class="p">]</span>
+</span><span id="DataFrame.fillna-710"><a href="#DataFrame.fillna-710"><span class="linenos">710</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">null_replacement_columns</span><span class="p">)</span>
+</span><span id="DataFrame.fillna-711"><a href="#DataFrame.fillna-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="n">new_df</span>
</span></pre></div>
@@ -2680,59 +2842,59 @@ 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;140247750893600&#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;140247750893600&#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;139783387045152&#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;139783387045152&#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>
</div>
<a class="headerlink" href="#DataFrame.replace"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.replace-693"><a href="#DataFrame.replace-693"><span class="linenos">693</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
-</span><span id="DataFrame.replace-694"><a href="#DataFrame.replace-694"><span class="linenos">694</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
-</span><span id="DataFrame.replace-695"><a href="#DataFrame.replace-695"><span class="linenos">695</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrame.replace-696"><a href="#DataFrame.replace-696"><span class="linenos">696</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
-</span><span id="DataFrame.replace-697"><a href="#DataFrame.replace-697"><span class="linenos">697</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">t</span><span class="o">.</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">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 class="p">,</span>
-</span><span id="DataFrame.replace-698"><a href="#DataFrame.replace-698"><span class="linenos">698</span></a> <span class="n">subset</span><span 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">ColumnOrName</span><span class="p">]</span> <span class="o">|</span> <span class="n">ColumnOrName</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrame.replace-699"><a href="#DataFrame.replace-699"><span class="linenos">699</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.replace-700"><a href="#DataFrame.replace-700"><span class="linenos">700</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
-</span><span id="DataFrame.replace-701"><a href="#DataFrame.replace-701"><span class="linenos">701</span></a>
-</span><span id="DataFrame.replace-702"><a href="#DataFrame.replace-702"><span class="linenos">702</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DataFrame.replace-703"><a href="#DataFrame.replace-703"><span class="linenos">703</span></a> <span class="n">new_df</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="DataFrame.replace-704"><a href="#DataFrame.replace-704"><span class="linenos">704</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DataFrame.replace-705"><a href="#DataFrame.replace-705"><span class="linenos">705</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
-</span><span id="DataFrame.replace-706"><a href="#DataFrame.replace-706"><span class="linenos">706</span></a>
-</span><span id="DataFrame.replace-707"><a href="#DataFrame.replace-707"><span class="linenos">707</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
-</span><span id="DataFrame.replace-708"><a href="#DataFrame.replace-708"><span class="linenos">708</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="DataFrame.replace-709"><a href="#DataFrame.replace-709"><span class="linenos">709</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span>
-</span><span id="DataFrame.replace-710"><a href="#DataFrame.replace-710"><span class="linenos">710</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="DataFrame.replace-711"><a href="#DataFrame.replace-711"><span class="linenos">711</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">old_values</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="DataFrame.replace-712"><a href="#DataFrame.replace-712"><span class="linenos">712</span></a> <span class="k">assert</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 class="s2">&quot;value must be a list since the replacements are a list&quot;</span>
-</span><span id="DataFrame.replace-713"><a href="#DataFrame.replace-713"><span class="linenos">713</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
-</span><span id="DataFrame.replace-714"><a href="#DataFrame.replace-714"><span class="linenos">714</span></a> <span class="n">value</span>
-</span><span id="DataFrame.replace-715"><a href="#DataFrame.replace-715"><span class="linenos">715</span></a> <span class="p">),</span> <span class="s2">&quot;the replacements and values must be the same length&quot;</span>
-</span><span id="DataFrame.replace-716"><a href="#DataFrame.replace-716"><span class="linenos">716</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="n">to_replace</span>
-</span><span id="DataFrame.replace-717"><a href="#DataFrame.replace-717"><span class="linenos">717</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="DataFrame.replace-718"><a href="#DataFrame.replace-718"><span class="linenos">718</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.replace-719"><a href="#DataFrame.replace-719"><span class="linenos">719</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">to_replace</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.replace-720"><a href="#DataFrame.replace-720"><span class="linenos">720</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="DataFrame.replace-721"><a href="#DataFrame.replace-721"><span class="linenos">721</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">old_values</span><span class="p">]</span>
-</span><span id="DataFrame.replace-722"><a href="#DataFrame.replace-722"><span class="linenos">722</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">new_values</span><span class="p">]</span>
-</span><span id="DataFrame.replace-723"><a href="#DataFrame.replace-723"><span class="linenos">723</span></a>
-</span><span id="DataFrame.replace-724"><a href="#DataFrame.replace-724"><span class="linenos">724</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="DataFrame.replace-725"><a href="#DataFrame.replace-725"><span class="linenos">725</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="DataFrame.replace-726"><a href="#DataFrame.replace-726"><span class="linenos">726</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="DataFrame.replace-727"><a href="#DataFrame.replace-727"><span class="linenos">727</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">old_values</span><span class="p">,</span> <span class="n">new_values</span><span class="p">)):</span>
-</span><span id="DataFrame.replace-728"><a href="#DataFrame.replace-728"><span class="linenos">728</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="DataFrame.replace-729"><a href="#DataFrame.replace-729"><span class="linenos">729</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span>
-</span><span id="DataFrame.replace-730"><a href="#DataFrame.replace-730"><span class="linenos">730</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.replace-731"><a href="#DataFrame.replace-731"><span class="linenos">731</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="DataFrame.replace-732"><a href="#DataFrame.replace-732"><span class="linenos">732</span></a> <span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span>
-</span><span id="DataFrame.replace-733"><a href="#DataFrame.replace-733"><span class="linenos">733</span></a> <span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="DataFrame.replace-734"><a href="#DataFrame.replace-734"><span class="linenos">734</span></a> <span class="p">)</span>
-</span><span id="DataFrame.replace-735"><a href="#DataFrame.replace-735"><span class="linenos">735</span></a>
-</span><span id="DataFrame.replace-736"><a href="#DataFrame.replace-736"><span class="linenos">736</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">replacement_mapping</span><span class="p">}</span>
-</span><span id="DataFrame.replace-737"><a href="#DataFrame.replace-737"><span class="linenos">737</span></a> <span class="n">replacement_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">]</span>
-</span><span id="DataFrame.replace-738"><a href="#DataFrame.replace-738"><span class="linenos">738</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">replacement_columns</span><span class="p">)</span>
-</span><span id="DataFrame.replace-739"><a href="#DataFrame.replace-739"><span class="linenos">739</span></a> <span class="k">return</span> <span class="n">new_df</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.replace-713"><a href="#DataFrame.replace-713"><span class="linenos">713</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
+</span><span id="DataFrame.replace-714"><a href="#DataFrame.replace-714"><span class="linenos">714</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
+</span><span id="DataFrame.replace-715"><a href="#DataFrame.replace-715"><span class="linenos">715</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrame.replace-716"><a href="#DataFrame.replace-716"><span class="linenos">716</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
+</span><span id="DataFrame.replace-717"><a href="#DataFrame.replace-717"><span class="linenos">717</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">t</span><span class="o">.</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">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 class="p">,</span>
+</span><span id="DataFrame.replace-718"><a href="#DataFrame.replace-718"><span class="linenos">718</span></a> <span class="n">subset</span><span 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">ColumnOrName</span><span class="p">]</span> <span class="o">|</span> <span class="n">ColumnOrName</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrame.replace-719"><a href="#DataFrame.replace-719"><span class="linenos">719</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.replace-720"><a href="#DataFrame.replace-720"><span class="linenos">720</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
+</span><span id="DataFrame.replace-721"><a href="#DataFrame.replace-721"><span class="linenos">721</span></a>
+</span><span id="DataFrame.replace-722"><a href="#DataFrame.replace-722"><span class="linenos">722</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DataFrame.replace-723"><a href="#DataFrame.replace-723"><span class="linenos">723</span></a> <span class="n">new_df</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="DataFrame.replace-724"><a href="#DataFrame.replace-724"><span class="linenos">724</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</span><span class="p">(</span><span class="n">new_df</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DataFrame.replace-725"><a href="#DataFrame.replace-725"><span class="linenos">725</span></a> <span class="n">all_column_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">}</span>
+</span><span id="DataFrame.replace-726"><a href="#DataFrame.replace-726"><span class="linenos">726</span></a>
+</span><span id="DataFrame.replace-727"><a href="#DataFrame.replace-727"><span class="linenos">727</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">subset</span><span class="p">)</span> <span class="k">if</span> <span class="n">subset</span> <span class="k">else</span> <span class="n">all_columns</span>
+</span><span id="DataFrame.replace-728"><a href="#DataFrame.replace-728"><span class="linenos">728</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="DataFrame.replace-729"><a href="#DataFrame.replace-729"><span class="linenos">729</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span>
+</span><span id="DataFrame.replace-730"><a href="#DataFrame.replace-730"><span class="linenos">730</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">to_replace</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
+</span><span id="DataFrame.replace-731"><a href="#DataFrame.replace-731"><span class="linenos">731</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">old_values</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_replace</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="DataFrame.replace-732"><a href="#DataFrame.replace-732"><span class="linenos">732</span></a> <span class="k">assert</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 class="s2">&quot;value must be a list since the replacements are a list&quot;</span>
+</span><span id="DataFrame.replace-733"><a href="#DataFrame.replace-733"><span class="linenos">733</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">to_replace</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span>
+</span><span id="DataFrame.replace-734"><a href="#DataFrame.replace-734"><span class="linenos">734</span></a> <span class="n">value</span>
+</span><span id="DataFrame.replace-735"><a href="#DataFrame.replace-735"><span class="linenos">735</span></a> <span class="p">),</span> <span class="s2">&quot;the replacements and values must be the same length&quot;</span>
+</span><span id="DataFrame.replace-736"><a href="#DataFrame.replace-736"><span class="linenos">736</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="n">to_replace</span>
+</span><span id="DataFrame.replace-737"><a href="#DataFrame.replace-737"><span class="linenos">737</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="DataFrame.replace-738"><a href="#DataFrame.replace-738"><span class="linenos">738</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.replace-739"><a href="#DataFrame.replace-739"><span class="linenos">739</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">to_replace</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.replace-740"><a href="#DataFrame.replace-740"><span class="linenos">740</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="DataFrame.replace-741"><a href="#DataFrame.replace-741"><span class="linenos">741</span></a> <span class="n">old_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">old_values</span><span class="p">]</span>
+</span><span id="DataFrame.replace-742"><a href="#DataFrame.replace-742"><span class="linenos">742</span></a> <span class="n">new_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">new_values</span><span class="p">]</span>
+</span><span id="DataFrame.replace-743"><a href="#DataFrame.replace-743"><span class="linenos">743</span></a>
+</span><span id="DataFrame.replace-744"><a href="#DataFrame.replace-744"><span class="linenos">744</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="DataFrame.replace-745"><a href="#DataFrame.replace-745"><span class="linenos">745</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="DataFrame.replace-746"><a href="#DataFrame.replace-746"><span class="linenos">746</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="DataFrame.replace-747"><a href="#DataFrame.replace-747"><span class="linenos">747</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">old_values</span><span class="p">,</span> <span class="n">new_values</span><span class="p">)):</span>
+</span><span id="DataFrame.replace-748"><a href="#DataFrame.replace-748"><span class="linenos">748</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="DataFrame.replace-749"><a href="#DataFrame.replace-749"><span class="linenos">749</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span>
+</span><span id="DataFrame.replace-750"><a href="#DataFrame.replace-750"><span class="linenos">750</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.replace-751"><a href="#DataFrame.replace-751"><span class="linenos">751</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">column</span> <span class="o">==</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="DataFrame.replace-752"><a href="#DataFrame.replace-752"><span class="linenos">752</span></a> <span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">otherwise</span><span class="p">(</span><span class="n">column</span><span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span>
+</span><span id="DataFrame.replace-753"><a href="#DataFrame.replace-753"><span class="linenos">753</span></a> <span class="n">column</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="DataFrame.replace-754"><a href="#DataFrame.replace-754"><span class="linenos">754</span></a> <span class="p">)</span>
+</span><span id="DataFrame.replace-755"><a href="#DataFrame.replace-755"><span class="linenos">755</span></a>
+</span><span id="DataFrame.replace-756"><a href="#DataFrame.replace-756"><span class="linenos">756</span></a> <span class="n">replacement_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_column_mapping</span><span class="p">,</span> <span class="o">**</span><span class="n">replacement_mapping</span><span class="p">}</span>
+</span><span id="DataFrame.replace-757"><a href="#DataFrame.replace-757"><span class="linenos">757</span></a> <span class="n">replacement_columns</span> <span class="o">=</span> <span class="p">[</span><span class="n">replacement_mapping</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">all_columns</span><span class="p">]</span>
+</span><span id="DataFrame.replace-758"><a href="#DataFrame.replace-758"><span class="linenos">758</span></a> <span class="n">new_df</span> <span class="o">=</span> <span class="n">new_df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">replacement_columns</span><span class="p">)</span>
+</span><span id="DataFrame.replace-759"><a href="#DataFrame.replace-759"><span class="linenos">759</span></a> <span class="k">return</span> <span class="n">new_df</span>
</span></pre></div>
@@ -2751,18 +2913,18 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.withColumn"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.withColumn-741"><a href="#DataFrame.withColumn-741"><span class="linenos">741</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.withColumn-742"><a href="#DataFrame.withColumn-742"><span class="linenos">742</span></a> <span class="k">def</span> <span class="nf">withColumn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.withColumn-743"><a href="#DataFrame.withColumn-743"><span class="linenos">743</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
-</span><span id="DataFrame.withColumn-744"><a href="#DataFrame.withColumn-744"><span class="linenos">744</span></a> <span class="n">existing_col_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
-</span><span id="DataFrame.withColumn-745"><a href="#DataFrame.withColumn-745"><span class="linenos">745</span></a> <span class="n">existing_col_index</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame.withColumn-746"><a href="#DataFrame.withColumn-746"><span class="linenos">746</span></a> <span class="n">existing_col_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">colName</span><span class="p">)</span> <span class="k">if</span> <span class="n">colName</span> <span class="ow">in</span> <span class="n">existing_col_names</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="DataFrame.withColumn-747"><a href="#DataFrame.withColumn-747"><span class="linenos">747</span></a> <span class="p">)</span>
-</span><span id="DataFrame.withColumn-748"><a href="#DataFrame.withColumn-748"><span class="linenos">748</span></a> <span class="k">if</span> <span class="n">existing_col_index</span><span class="p">:</span>
-</span><span id="DataFrame.withColumn-749"><a href="#DataFrame.withColumn-749"><span class="linenos">749</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="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame.withColumn-750"><a href="#DataFrame.withColumn-750"><span class="linenos">750</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="n">existing_col_index</span><span class="p">]</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="DataFrame.withColumn-751"><a href="#DataFrame.withColumn-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
-</span><span id="DataFrame.withColumn-752"><a href="#DataFrame.withColumn-752"><span class="linenos">752</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">colName</span><span class="p">),</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.withColumn-761"><a href="#DataFrame.withColumn-761"><span class="linenos">761</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.withColumn-762"><a href="#DataFrame.withColumn-762"><span class="linenos">762</span></a> <span class="k">def</span> <span class="nf">withColumn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.withColumn-763"><a href="#DataFrame.withColumn-763"><span class="linenos">763</span></a> <span class="n">col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_col</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>
+</span><span id="DataFrame.withColumn-764"><a href="#DataFrame.withColumn-764"><span class="linenos">764</span></a> <span class="n">existing_col_names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="DataFrame.withColumn-765"><a href="#DataFrame.withColumn-765"><span class="linenos">765</span></a> <span class="n">existing_col_index</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame.withColumn-766"><a href="#DataFrame.withColumn-766"><span class="linenos">766</span></a> <span class="n">existing_col_names</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">colName</span><span class="p">)</span> <span class="k">if</span> <span class="n">colName</span> <span class="ow">in</span> <span class="n">existing_col_names</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="DataFrame.withColumn-767"><a href="#DataFrame.withColumn-767"><span class="linenos">767</span></a> <span class="p">)</span>
+</span><span id="DataFrame.withColumn-768"><a href="#DataFrame.withColumn-768"><span class="linenos">768</span></a> <span class="k">if</span> <span class="n">existing_col_index</span><span class="p">:</span>
+</span><span id="DataFrame.withColumn-769"><a href="#DataFrame.withColumn-769"><span class="linenos">769</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="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame.withColumn-770"><a href="#DataFrame.withColumn-770"><span class="linenos">770</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="n">existing_col_index</span><span class="p">]</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="DataFrame.withColumn-771"><a href="#DataFrame.withColumn-771"><span class="linenos">771</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
+</span><span id="DataFrame.withColumn-772"><a href="#DataFrame.withColumn-772"><span class="linenos">772</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="n">colName</span><span class="p">),</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></pre></div>
@@ -2781,22 +2943,22 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.withColumnRenamed"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.withColumnRenamed-754"><a href="#DataFrame.withColumnRenamed-754"><span class="linenos">754</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.withColumnRenamed-755"><a href="#DataFrame.withColumnRenamed-755"><span class="linenos">755</span></a> <span class="k">def</span> <span class="nf">withColumnRenamed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">existing</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="DataFrame.withColumnRenamed-756"><a href="#DataFrame.withColumnRenamed-756"><span class="linenos">756</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="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="DataFrame.withColumnRenamed-757"><a href="#DataFrame.withColumnRenamed-757"><span class="linenos">757</span></a> <span class="n">existing_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.withColumnRenamed-758"><a href="#DataFrame.withColumnRenamed-758"><span class="linenos">758</span></a> <span class="n">expression</span>
-</span><span id="DataFrame.withColumnRenamed-759"><a href="#DataFrame.withColumnRenamed-759"><span class="linenos">759</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="DataFrame.withColumnRenamed-760"><a href="#DataFrame.withColumnRenamed-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="n">existing</span>
-</span><span id="DataFrame.withColumnRenamed-761"><a href="#DataFrame.withColumnRenamed-761"><span class="linenos">761</span></a> <span class="p">]</span>
-</span><span id="DataFrame.withColumnRenamed-762"><a href="#DataFrame.withColumnRenamed-762"><span class="linenos">762</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">existing_columns</span><span class="p">:</span>
-</span><span id="DataFrame.withColumnRenamed-763"><a href="#DataFrame.withColumnRenamed-763"><span class="linenos">763</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Tried to rename a column that doesn&#39;t exist&quot;</span><span class="p">)</span>
-</span><span id="DataFrame.withColumnRenamed-764"><a href="#DataFrame.withColumnRenamed-764"><span class="linenos">764</span></a> <span class="k">for</span> <span class="n">existing_column</span> <span class="ow">in</span> <span class="n">existing_columns</span><span class="p">:</span>
-</span><span id="DataFrame.withColumnRenamed-765"><a href="#DataFrame.withColumnRenamed-765"><span class="linenos">765</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">existing_column</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="DataFrame.withColumnRenamed-766"><a href="#DataFrame.withColumnRenamed-766"><span class="linenos">766</span></a> <span class="n">existing_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">alias_</span><span class="p">(</span><span class="n">existing_column</span><span class="p">,</span> <span class="n">new</span><span class="p">))</span>
-</span><span id="DataFrame.withColumnRenamed-767"><a href="#DataFrame.withColumnRenamed-767"><span class="linenos">767</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataFrame.withColumnRenamed-768"><a href="#DataFrame.withColumnRenamed-768"><span class="linenos">768</span></a> <span class="n">existing_column</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">new</span><span class="p">))</span>
-</span><span id="DataFrame.withColumnRenamed-769"><a href="#DataFrame.withColumnRenamed-769"><span class="linenos">769</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.withColumnRenamed-774"><a href="#DataFrame.withColumnRenamed-774"><span class="linenos">774</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.withColumnRenamed-775"><a href="#DataFrame.withColumnRenamed-775"><span class="linenos">775</span></a> <span class="k">def</span> <span class="nf">withColumnRenamed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">existing</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="DataFrame.withColumnRenamed-776"><a href="#DataFrame.withColumnRenamed-776"><span class="linenos">776</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="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="DataFrame.withColumnRenamed-777"><a href="#DataFrame.withColumnRenamed-777"><span class="linenos">777</span></a> <span class="n">existing_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.withColumnRenamed-778"><a href="#DataFrame.withColumnRenamed-778"><span class="linenos">778</span></a> <span class="n">expression</span>
+</span><span id="DataFrame.withColumnRenamed-779"><a href="#DataFrame.withColumnRenamed-779"><span class="linenos">779</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataFrame.withColumnRenamed-780"><a href="#DataFrame.withColumnRenamed-780"><span class="linenos">780</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="o">==</span> <span class="n">existing</span>
+</span><span id="DataFrame.withColumnRenamed-781"><a href="#DataFrame.withColumnRenamed-781"><span class="linenos">781</span></a> <span class="p">]</span>
+</span><span id="DataFrame.withColumnRenamed-782"><a href="#DataFrame.withColumnRenamed-782"><span class="linenos">782</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">existing_columns</span><span class="p">:</span>
+</span><span id="DataFrame.withColumnRenamed-783"><a href="#DataFrame.withColumnRenamed-783"><span class="linenos">783</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Tried to rename a column that doesn&#39;t exist&quot;</span><span class="p">)</span>
+</span><span id="DataFrame.withColumnRenamed-784"><a href="#DataFrame.withColumnRenamed-784"><span class="linenos">784</span></a> <span class="k">for</span> <span class="n">existing_column</span> <span class="ow">in</span> <span class="n">existing_columns</span><span class="p">:</span>
+</span><span id="DataFrame.withColumnRenamed-785"><a href="#DataFrame.withColumnRenamed-785"><span class="linenos">785</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">existing_column</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="DataFrame.withColumnRenamed-786"><a href="#DataFrame.withColumnRenamed-786"><span class="linenos">786</span></a> <span class="n">existing_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">alias_</span><span class="p">(</span><span class="n">existing_column</span><span class="p">,</span> <span class="n">new</span><span class="p">))</span>
+</span><span id="DataFrame.withColumnRenamed-787"><a href="#DataFrame.withColumnRenamed-787"><span class="linenos">787</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataFrame.withColumnRenamed-788"><a href="#DataFrame.withColumnRenamed-788"><span class="linenos">788</span></a> <span class="n">existing_column</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">new</span><span class="p">))</span>
+</span><span id="DataFrame.withColumnRenamed-789"><a href="#DataFrame.withColumnRenamed-789"><span class="linenos">789</span></a> <span class="k">return</span> <span class="bp">self</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="p">)</span>
</span></pre></div>
@@ -2815,16 +2977,16 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.drop"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.drop-771"><a href="#DataFrame.drop-771"><span class="linenos">771</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
-</span><span id="DataFrame.drop-772"><a href="#DataFrame.drop-772"><span class="linenos">772</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.drop-773"><a href="#DataFrame.drop-773"><span class="linenos">773</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</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="DataFrame.drop-774"><a href="#DataFrame.drop-774"><span class="linenos">774</span></a> <span class="n">drop_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame.drop-775"><a href="#DataFrame.drop-775"><span class="linenos">775</span></a> <span class="n">new_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="DataFrame.drop-776"><a href="#DataFrame.drop-776"><span class="linenos">776</span></a> <span class="n">col</span>
-</span><span id="DataFrame.drop-777"><a href="#DataFrame.drop-777"><span class="linenos">777</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">all_columns</span>
-</span><span id="DataFrame.drop-778"><a href="#DataFrame.drop-778"><span class="linenos">778</span></a> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">drop_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">drop_column</span> <span class="ow">in</span> <span class="n">drop_cols</span><span class="p">]</span>
-</span><span id="DataFrame.drop-779"><a href="#DataFrame.drop-779"><span class="linenos">779</span></a> <span class="p">]</span>
-</span><span id="DataFrame.drop-780"><a href="#DataFrame.drop-780"><span class="linenos">780</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</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">new_columns</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.drop-791"><a href="#DataFrame.drop-791"><span class="linenos">791</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">SELECT</span><span class="p">)</span>
+</span><span id="DataFrame.drop-792"><a href="#DataFrame.drop-792"><span class="linenos">792</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</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">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.drop-793"><a href="#DataFrame.drop-793"><span class="linenos">793</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_outer_select_columns</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="DataFrame.drop-794"><a href="#DataFrame.drop-794"><span class="linenos">794</span></a> <span class="n">drop_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame.drop-795"><a href="#DataFrame.drop-795"><span class="linenos">795</span></a> <span class="n">new_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="DataFrame.drop-796"><a href="#DataFrame.drop-796"><span class="linenos">796</span></a> <span class="n">col</span>
+</span><span id="DataFrame.drop-797"><a href="#DataFrame.drop-797"><span class="linenos">797</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">all_columns</span>
+</span><span id="DataFrame.drop-798"><a href="#DataFrame.drop-798"><span class="linenos">798</span></a> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">drop_column</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="k">for</span> <span class="n">drop_column</span> <span class="ow">in</span> <span class="n">drop_cols</span><span class="p">]</span>
+</span><span id="DataFrame.drop-799"><a href="#DataFrame.drop-799"><span class="linenos">799</span></a> <span class="p">]</span>
+</span><span id="DataFrame.drop-800"><a href="#DataFrame.drop-800"><span class="linenos">800</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</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">new_columns</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -2843,9 +3005,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.limit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.limit-782"><a href="#DataFrame.limit-782"><span class="linenos">782</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">)</span>
-</span><span id="DataFrame.limit-783"><a href="#DataFrame.limit-783"><span class="linenos">783</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">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.limit-784"><a href="#DataFrame.limit-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.limit-802"><a href="#DataFrame.limit-802"><span class="linenos">802</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">)</span>
+</span><span id="DataFrame.limit-803"><a href="#DataFrame.limit-803"><span class="linenos">803</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">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.limit-804"><a href="#DataFrame.limit-804"><span class="linenos">804</span></a> <span class="k">return</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">))</span>
</span></pre></div>
@@ -2864,15 +3026,15 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.hint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.hint-786"><a href="#DataFrame.hint-786"><span class="linenos">786</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame.hint-787"><a href="#DataFrame.hint-787"><span class="linenos">787</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 class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">parameters</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.hint-788"><a href="#DataFrame.hint-788"><span class="linenos">788</span></a> <span class="n">parameter_list</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span>
-</span><span id="DataFrame.hint-789"><a href="#DataFrame.hint-789"><span class="linenos">789</span></a> <span class="n">parameter_columns</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DataFrame.hint-790"><a href="#DataFrame.hint-790"><span class="linenos">790</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">parameter_list</span><span class="p">)</span>
-</span><span id="DataFrame.hint-791"><a href="#DataFrame.hint-791"><span class="linenos">791</span></a> <span class="k">if</span> <span class="n">parameters</span>
-</span><span id="DataFrame.hint-792"><a href="#DataFrame.hint-792"><span class="linenos">792</span></a> <span class="k">else</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">])</span>
-</span><span id="DataFrame.hint-793"><a href="#DataFrame.hint-793"><span class="linenos">793</span></a> <span class="p">)</span>
-</span><span id="DataFrame.hint-794"><a href="#DataFrame.hint-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">parameter_columns</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.hint-806"><a href="#DataFrame.hint-806"><span class="linenos">806</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame.hint-807"><a href="#DataFrame.hint-807"><span class="linenos">807</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 class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">parameters</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.hint-808"><a href="#DataFrame.hint-808"><span class="linenos">808</span></a> <span class="n">parameter_list</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span>
+</span><span id="DataFrame.hint-809"><a href="#DataFrame.hint-809"><span class="linenos">809</span></a> <span class="n">parameter_columns</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DataFrame.hint-810"><a href="#DataFrame.hint-810"><span class="linenos">810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">parameter_list</span><span class="p">)</span>
+</span><span id="DataFrame.hint-811"><a href="#DataFrame.hint-811"><span class="linenos">811</span></a> <span class="k">if</span> <span class="n">parameters</span>
+</span><span id="DataFrame.hint-812"><a href="#DataFrame.hint-812"><span class="linenos">812</span></a> <span class="k">else</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">])</span>
+</span><span id="DataFrame.hint-813"><a href="#DataFrame.hint-813"><span class="linenos">813</span></a> <span class="p">)</span>
+</span><span id="DataFrame.hint-814"><a href="#DataFrame.hint-814"><span class="linenos">814</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">parameter_columns</span><span class="p">)</span>
</span></pre></div>
@@ -2885,20 +3047,20 @@ 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;140247750971488&#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;140247751075264&#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;139783387109344&#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;139783385252336&#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>
</div>
<a class="headerlink" href="#DataFrame.repartition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.repartition-796"><a href="#DataFrame.repartition-796"><span class="linenos">796</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame.repartition-797"><a href="#DataFrame.repartition-797"><span class="linenos">797</span></a> <span class="k">def</span> <span class="nf">repartition</span><span class="p">(</span>
-</span><span id="DataFrame.repartition-798"><a href="#DataFrame.repartition-798"><span class="linenos">798</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">ColumnOrName</span><span class="p">],</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">ColumnOrName</span>
-</span><span id="DataFrame.repartition-799"><a href="#DataFrame.repartition-799"><span class="linenos">799</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.repartition-800"><a href="#DataFrame.repartition-800"><span class="linenos">800</span></a> <span class="n">num_partition_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">numPartitions</span><span class="p">)</span>
-</span><span id="DataFrame.repartition-801"><a href="#DataFrame.repartition-801"><span class="linenos">801</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
-</span><span id="DataFrame.repartition-802"><a href="#DataFrame.repartition-802"><span class="linenos">802</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">num_partition_cols</span> <span class="o">+</span> <span class="n">columns</span>
-</span><span id="DataFrame.repartition-803"><a href="#DataFrame.repartition-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;repartition&quot;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.repartition-816"><a href="#DataFrame.repartition-816"><span class="linenos">816</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame.repartition-817"><a href="#DataFrame.repartition-817"><span class="linenos">817</span></a> <span class="k">def</span> <span class="nf">repartition</span><span class="p">(</span>
+</span><span id="DataFrame.repartition-818"><a href="#DataFrame.repartition-818"><span class="linenos">818</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">ColumnOrName</span><span class="p">],</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">ColumnOrName</span>
+</span><span id="DataFrame.repartition-819"><a href="#DataFrame.repartition-819"><span class="linenos">819</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.repartition-820"><a href="#DataFrame.repartition-820"><span class="linenos">820</span></a> <span class="n">num_partition_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_list_of_columns</span><span class="p">(</span><span class="n">numPartitions</span><span class="p">)</span>
+</span><span id="DataFrame.repartition-821"><a href="#DataFrame.repartition-821"><span class="linenos">821</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_and_normalize_cols</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
+</span><span id="DataFrame.repartition-822"><a href="#DataFrame.repartition-822"><span class="linenos">822</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">num_partition_cols</span> <span class="o">+</span> <span class="n">columns</span>
+</span><span id="DataFrame.repartition-823"><a href="#DataFrame.repartition-823"><span class="linenos">823</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;repartition&quot;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -2917,10 +3079,10 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.coalesce"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.coalesce-805"><a href="#DataFrame.coalesce-805"><span class="linenos">805</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame.coalesce-806"><a href="#DataFrame.coalesce-806"><span class="linenos">806</span></a> <span class="k">def</span> <span class="nf">coalesce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.coalesce-807"><a href="#DataFrame.coalesce-807"><span class="linenos">807</span></a> <span class="n">num_partitions</span> <span class="o">=</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="n">numPartitions</span><span class="p">])</span>
-</span><span id="DataFrame.coalesce-808"><a href="#DataFrame.coalesce-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</span><span class="p">,</span> <span class="n">num_partitions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.coalesce-825"><a href="#DataFrame.coalesce-825"><span class="linenos">825</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame.coalesce-826"><a href="#DataFrame.coalesce-826"><span class="linenos">826</span></a> <span class="k">def</span> <span class="nf">coalesce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numPartitions</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.coalesce-827"><a href="#DataFrame.coalesce-827"><span class="linenos">827</span></a> <span class="n">num_partitions</span> <span class="o">=</span> <span class="n">Column</span><span class="o">.</span><span class="n">ensure_cols</span><span class="p">([</span><span class="n">numPartitions</span><span class="p">])</span>
+</span><span id="DataFrame.coalesce-828"><a href="#DataFrame.coalesce-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hint</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</span><span class="p">,</span> <span class="n">num_partitions</span><span class="p">)</span>
</span></pre></div>
@@ -2939,9 +3101,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.cache"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.cache-810"><a href="#DataFrame.cache-810"><span class="linenos">810</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame.cache-811"><a href="#DataFrame.cache-811"><span class="linenos">811</span></a> <span class="k">def</span> <span class="nf">cache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.cache-812"><a href="#DataFrame.cache-812"><span class="linenos">812</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storage_level</span><span class="o">=</span><span class="s2">&quot;MEMORY_AND_DISK&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.cache-830"><a href="#DataFrame.cache-830"><span class="linenos">830</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame.cache-831"><a href="#DataFrame.cache-831"><span class="linenos">831</span></a> <span class="k">def</span> <span class="nf">cache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.cache-832"><a href="#DataFrame.cache-832"><span class="linenos">832</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storage_level</span><span class="o">=</span><span class="s2">&quot;MEMORY_AND_DISK&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -2960,12 +3122,12 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#DataFrame.persist"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.persist-814"><a href="#DataFrame.persist-814"><span class="linenos">814</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
-</span><span id="DataFrame.persist-815"><a href="#DataFrame.persist-815"><span class="linenos">815</span></a> <span class="k">def</span> <span class="nf">persist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storageLevel</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MEMORY_AND_DISK_SER&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrame.persist-816"><a href="#DataFrame.persist-816"><span class="linenos">816</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="DataFrame.persist-817"><a href="#DataFrame.persist-817"><span class="linenos">817</span></a><span class="sd"> Storage Level Options: https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-aux-cache-cache-table.html</span>
-</span><span id="DataFrame.persist-818"><a href="#DataFrame.persist-818"><span class="linenos">818</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DataFrame.persist-819"><a href="#DataFrame.persist-819"><span class="linenos">819</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storageLevel</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrame.persist-834"><a href="#DataFrame.persist-834"><span class="linenos">834</span></a> <span class="nd">@operation</span><span class="p">(</span><span class="n">Operation</span><span class="o">.</span><span class="n">NO_OP</span><span class="p">)</span>
+</span><span id="DataFrame.persist-835"><a href="#DataFrame.persist-835"><span class="linenos">835</span></a> <span class="k">def</span> <span class="nf">persist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storageLevel</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MEMORY_AND_DISK_SER&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrame.persist-836"><a href="#DataFrame.persist-836"><span class="linenos">836</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataFrame.persist-837"><a href="#DataFrame.persist-837"><span class="linenos">837</span></a><span class="sd"> Storage Level Options: https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-aux-cache-cache-table.html</span>
+</span><span id="DataFrame.persist-838"><a href="#DataFrame.persist-838"><span class="linenos">838</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataFrame.persist-839"><a href="#DataFrame.persist-839"><span class="linenos">839</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">(</span><span class="n">storageLevel</span><span class="p">)</span>
</span></pre></div>
@@ -3268,21 +3430,22 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column-17"><a href="#Column-17"><span class="linenos"> 17</span></a><span class="k">class</span> <span class="nc">Column</span><span class="p">:</span>
-</span><span id="Column-18"><a href="#Column-18"><span class="linenos"> 18</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">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">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]):</span>
-</span><span id="Column-19"><a href="#Column-19"><span class="linenos"> 19</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">Column</span><span class="p">):</span>
-</span><span id="Column-20"><a href="#Column-20"><span class="linenos"> 20</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
-</span><span id="Column-21"><a href="#Column-21"><span class="linenos"> 21</span></a> <span class="k">elif</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)):</span>
-</span><span id="Column-22"><a href="#Column-22"><span class="linenos"> 22</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
-</span><span id="Column-23"><a href="#Column-23"><span class="linenos"> 23</span></a>
-</span><span id="Column-24"><a href="#Column-24"><span class="linenos"> 24</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</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="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="Column-25"><a href="#Column-25"><span class="linenos"> 25</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Column-26"><a href="#Column-26"><span class="linenos"> 26</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;Could not parse </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Column-27"><a href="#Column-27"><span class="linenos"> 27</span></a>
-</span><span id="Column-28"><a href="#Column-28"><span class="linenos"> 28</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">Column</span><span class="p">):</span>
-</span><span id="Column-29"><a href="#Column-29"><span class="linenos"> 29</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column-16"><a href="#Column-16"><span class="linenos"> 16</span></a><span class="k">class</span> <span class="nc">Column</span><span class="p">:</span>
+</span><span id="Column-17"><a href="#Column-17"><span class="linenos"> 17</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">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">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]):</span>
+</span><span id="Column-18"><a href="#Column-18"><span class="linenos"> 18</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="Column-19"><a href="#Column-19"><span class="linenos"> 19</span></a>
+</span><span id="Column-20"><a href="#Column-20"><span class="linenos"> 20</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">Column</span><span class="p">):</span>
+</span><span id="Column-21"><a href="#Column-21"><span class="linenos"> 21</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
+</span><span id="Column-22"><a href="#Column-22"><span class="linenos"> 22</span></a> <span class="k">elif</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)):</span>
+</span><span id="Column-23"><a href="#Column-23"><span class="linenos"> 23</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
+</span><span id="Column-24"><a href="#Column-24"><span class="linenos"> 24</span></a> <span class="k">elif</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">Column</span><span class="p">):</span>
+</span><span id="Column-25"><a href="#Column-25"><span class="linenos"> 25</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</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">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Column-26"><a href="#Column-26"><span class="linenos"> 26</span></a> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="Column-27"><a href="#Column-27"><span class="linenos"> 27</span></a> <span class="p">)</span>
+</span><span id="Column-28"><a href="#Column-28"><span class="linenos"> 28</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Column-29"><a href="#Column-29"><span class="linenos"> 29</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;Could not parse </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Column-30"><a href="#Column-30"><span class="linenos"> 30</span></a>
-</span><span id="Column-31"><a href="#Column-31"><span class="linenos"> 31</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">Expression</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Column-31"><a href="#Column-31"><span class="linenos"> 31</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">Expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="c1"># type: ignore</span>
</span><span id="Column-32"><a href="#Column-32"><span class="linenos"> 32</span></a>
</span><span id="Column-33"><a href="#Column-33"><span class="linenos"> 33</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><span id="Column-34"><a href="#Column-34"><span class="linenos"> 34</span></a> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
@@ -3462,125 +3625,129 @@ and check if it matches the type of the value provided. If not then make it null
</span><span id="Column-208"><a href="#Column-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Column-209"><a href="#Column-209"><span class="linenos">209</span></a>
</span><span id="Column-210"><a href="#Column-210"><span class="linenos">210</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Column-211"><a href="#Column-211"><span class="linenos">211</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">sql</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="s2">&quot;spark&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">})</span>
+</span><span id="Column-211"><a href="#Column-211"><span class="linenos">211</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
</span><span id="Column-212"><a href="#Column-212"><span class="linenos">212</span></a>
-</span><span id="Column-213"><a href="#Column-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">alias</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="n">Column</span><span class="p">:</span>
-</span><span id="Column-214"><a href="#Column-214"><span class="linenos">214</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
-</span><span id="Column-215"><a href="#Column-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-216"><a href="#Column-216"><span class="linenos">216</span></a>
-</span><span id="Column-217"><a href="#Column-217"><span class="linenos">217</span></a> <span class="k">def</span> <span class="nf">asc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-218"><a href="#Column-218"><span class="linenos">218</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Column-219"><a href="#Column-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-220"><a href="#Column-220"><span class="linenos">220</span></a>
-</span><span id="Column-221"><a href="#Column-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">desc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-222"><a href="#Column-222"><span class="linenos">222</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Column-223"><a href="#Column-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-224"><a href="#Column-224"><span class="linenos">224</span></a>
-</span><span id="Column-225"><a href="#Column-225"><span class="linenos">225</span></a> <span class="n">asc_nulls_first</span> <span class="o">=</span> <span class="n">asc</span>
+</span><span id="Column-213"><a href="#Column-213"><span class="linenos">213</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">sql</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">})</span>
+</span><span id="Column-214"><a href="#Column-214"><span class="linenos">214</span></a>
+</span><span id="Column-215"><a href="#Column-215"><span class="linenos">215</span></a> <span class="k">def</span> <span class="nf">alias</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="n">Column</span><span class="p">:</span>
+</span><span id="Column-216"><a href="#Column-216"><span class="linenos">216</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+</span><span id="Column-217"><a href="#Column-217"><span class="linenos">217</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+</span><span id="Column-218"><a href="#Column-218"><span class="linenos">218</span></a>
+</span><span id="Column-219"><a href="#Column-219"><span class="linenos">219</span></a> <span class="k">def</span> <span class="nf">asc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-220"><a href="#Column-220"><span class="linenos">220</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Column-221"><a href="#Column-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+</span><span id="Column-222"><a href="#Column-222"><span class="linenos">222</span></a>
+</span><span id="Column-223"><a href="#Column-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">desc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-224"><a href="#Column-224"><span class="linenos">224</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Column-225"><a href="#Column-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span><span id="Column-226"><a href="#Column-226"><span class="linenos">226</span></a>
-</span><span id="Column-227"><a href="#Column-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="nf">asc_nulls_last</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-228"><a href="#Column-228"><span class="linenos">228</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Column-229"><a href="#Column-229"><span class="linenos">229</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-230"><a href="#Column-230"><span class="linenos">230</span></a>
-</span><span id="Column-231"><a href="#Column-231"><span class="linenos">231</span></a> <span class="k">def</span> <span class="nf">desc_nulls_first</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-232"><a href="#Column-232"><span class="linenos">232</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Column-233"><a href="#Column-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-234"><a href="#Column-234"><span class="linenos">234</span></a>
-</span><span id="Column-235"><a href="#Column-235"><span class="linenos">235</span></a> <span class="n">desc_nulls_last</span> <span class="o">=</span> <span class="n">desc</span>
+</span><span id="Column-227"><a href="#Column-227"><span class="linenos">227</span></a> <span class="n">asc_nulls_first</span> <span class="o">=</span> <span class="n">asc</span>
+</span><span id="Column-228"><a href="#Column-228"><span class="linenos">228</span></a>
+</span><span id="Column-229"><a href="#Column-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">asc_nulls_last</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-230"><a href="#Column-230"><span class="linenos">230</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Column-231"><a href="#Column-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+</span><span id="Column-232"><a href="#Column-232"><span class="linenos">232</span></a>
+</span><span id="Column-233"><a href="#Column-233"><span class="linenos">233</span></a> <span class="k">def</span> <span class="nf">desc_nulls_first</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-234"><a href="#Column-234"><span class="linenos">234</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Column-235"><a href="#Column-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span><span id="Column-236"><a href="#Column-236"><span class="linenos">236</span></a>
-</span><span id="Column-237"><a href="#Column-237"><span class="linenos">237</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">Column</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-238"><a href="#Column-238"><span class="linenos">238</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">when</span>
-</span><span id="Column-239"><a href="#Column-239"><span class="linenos">239</span></a>
-</span><span id="Column-240"><a href="#Column-240"><span class="linenos">240</span></a> <span class="n">column_with_if</span> <span class="o">=</span> <span class="n">when</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
-</span><span id="Column-241"><a href="#Column-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Case</span><span class="p">):</span>
-</span><span id="Column-242"><a href="#Column-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="n">column_with_if</span>
-</span><span id="Column-243"><a href="#Column-243"><span class="linenos">243</span></a> <span class="n">new_column</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="Column-244"><a href="#Column-244"><span class="linenos">244</span></a> <span class="n">new_column</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;ifs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">column_with_if</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;ifs&quot;</span><span class="p">])</span>
-</span><span id="Column-245"><a href="#Column-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">new_column</span>
-</span><span id="Column-246"><a href="#Column-246"><span class="linenos">246</span></a>
-</span><span id="Column-247"><a href="#Column-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">otherwise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-248"><a href="#Column-248"><span class="linenos">248</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
-</span><span id="Column-249"><a href="#Column-249"><span class="linenos">249</span></a>
-</span><span id="Column-250"><a href="#Column-250"><span class="linenos">250</span></a> <span class="n">true_value</span> <span class="o">=</span> <span class="n">value</span> <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">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Column-251"><a href="#Column-251"><span class="linenos">251</span></a> <span class="n">new_column</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="Column-252"><a href="#Column-252"><span class="linenos">252</span></a> <span class="n">new_column</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;default&quot;</span><span class="p">,</span> <span class="n">true_value</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
-</span><span id="Column-253"><a href="#Column-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">new_column</span>
-</span><span id="Column-254"><a href="#Column-254"><span class="linenos">254</span></a>
-</span><span id="Column-255"><a href="#Column-255"><span class="linenos">255</span></a> <span class="k">def</span> <span class="nf">isNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-256"><a href="#Column-256"><span class="linenos">256</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column-257"><a href="#Column-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-258"><a href="#Column-258"><span class="linenos">258</span></a>
-</span><span id="Column-259"><a href="#Column-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">isNotNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-260"><a href="#Column-260"><span class="linenos">260</span></a> <span class="n">new_expression</span> <span class="o">=</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">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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column-261"><a href="#Column-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
-</span><span id="Column-262"><a href="#Column-262"><span class="linenos">262</span></a>
-</span><span id="Column-263"><a href="#Column-263"><span class="linenos">263</span></a> <span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataType</span><span class="p">:</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">DataType</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-264"><a href="#Column-264"><span class="linenos">264</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Column-265"><a href="#Column-265"><span class="linenos">265</span></a><span class="sd"> Functionality Difference: PySpark cast accepts a datatype instance of the datatype class</span>
-</span><span id="Column-266"><a href="#Column-266"><span class="linenos">266</span></a><span class="sd"> Sqlglot doesn&#39;t currently replicate this class so it only accepts a string</span>
-</span><span id="Column-267"><a href="#Column-267"><span class="linenos">267</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Column-268"><a href="#Column-268"><span class="linenos">268</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataType</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
-</span><span id="Column-269"><a href="#Column-269"><span class="linenos">269</span></a> <span class="n">dataType</span> <span class="o">=</span> <span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span>
-</span><span id="Column-270"><a href="#Column-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">Column</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">dataType</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><span id="Column-237"><a href="#Column-237"><span class="linenos">237</span></a> <span class="n">desc_nulls_last</span> <span class="o">=</span> <span class="n">desc</span>
+</span><span id="Column-238"><a href="#Column-238"><span class="linenos">238</span></a>
+</span><span id="Column-239"><a href="#Column-239"><span class="linenos">239</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">Column</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-240"><a href="#Column-240"><span class="linenos">240</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">when</span>
+</span><span id="Column-241"><a href="#Column-241"><span class="linenos">241</span></a>
+</span><span id="Column-242"><a href="#Column-242"><span class="linenos">242</span></a> <span class="n">column_with_if</span> <span class="o">=</span> <span class="n">when</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="Column-243"><a href="#Column-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Case</span><span class="p">):</span>
+</span><span id="Column-244"><a href="#Column-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">column_with_if</span>
+</span><span id="Column-245"><a href="#Column-245"><span class="linenos">245</span></a> <span class="n">new_column</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="Column-246"><a href="#Column-246"><span class="linenos">246</span></a> <span class="n">new_column</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;ifs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">column_with_if</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;ifs&quot;</span><span class="p">])</span>
+</span><span id="Column-247"><a href="#Column-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">new_column</span>
+</span><span id="Column-248"><a href="#Column-248"><span class="linenos">248</span></a>
+</span><span id="Column-249"><a href="#Column-249"><span class="linenos">249</span></a> <span class="k">def</span> <span class="nf">otherwise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-250"><a href="#Column-250"><span class="linenos">250</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
+</span><span id="Column-251"><a href="#Column-251"><span class="linenos">251</span></a>
+</span><span id="Column-252"><a href="#Column-252"><span class="linenos">252</span></a> <span class="n">true_value</span> <span class="o">=</span> <span class="n">value</span> <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">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Column-253"><a href="#Column-253"><span class="linenos">253</span></a> <span class="n">new_column</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="Column-254"><a href="#Column-254"><span class="linenos">254</span></a> <span class="n">new_column</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;default&quot;</span><span class="p">,</span> <span class="n">true_value</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
+</span><span id="Column-255"><a href="#Column-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">new_column</span>
+</span><span id="Column-256"><a href="#Column-256"><span class="linenos">256</span></a>
+</span><span id="Column-257"><a href="#Column-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">isNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-258"><a href="#Column-258"><span class="linenos">258</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column-259"><a href="#Column-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+</span><span id="Column-260"><a href="#Column-260"><span class="linenos">260</span></a>
+</span><span id="Column-261"><a href="#Column-261"><span class="linenos">261</span></a> <span class="k">def</span> <span class="nf">isNotNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-262"><a href="#Column-262"><span class="linenos">262</span></a> <span class="n">new_expression</span> <span class="o">=</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">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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column-263"><a href="#Column-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+</span><span id="Column-264"><a href="#Column-264"><span class="linenos">264</span></a>
+</span><span id="Column-265"><a href="#Column-265"><span class="linenos">265</span></a> <span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataType</span><span class="p">:</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">DataType</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-266"><a href="#Column-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Column-267"><a href="#Column-267"><span class="linenos">267</span></a><span class="sd"> Functionality Difference: PySpark cast accepts a datatype instance of the datatype class</span>
+</span><span id="Column-268"><a href="#Column-268"><span class="linenos">268</span></a><span class="sd"> Sqlglot doesn&#39;t currently replicate this class so it only accepts a string</span>
+</span><span id="Column-269"><a href="#Column-269"><span class="linenos">269</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Column-270"><a href="#Column-270"><span class="linenos">270</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
</span><span id="Column-271"><a href="#Column-271"><span class="linenos">271</span></a>
-</span><span id="Column-272"><a href="#Column-272"><span class="linenos">272</span></a> <span class="k">def</span> <span class="nf">startswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-273"><a href="#Column-273"><span class="linenos">273</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
-</span><span id="Column-274"><a href="#Column-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="Column-272"><a href="#Column-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataType</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
+</span><span id="Column-273"><a href="#Column-273"><span class="linenos">273</span></a> <span class="n">dataType</span> <span class="o">=</span> <span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span>
+</span><span id="Column-274"><a href="#Column-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="n">Column</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">dataType</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">))</span>
</span><span id="Column-275"><a href="#Column-275"><span class="linenos">275</span></a>
-</span><span id="Column-276"><a href="#Column-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">endswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-276"><a href="#Column-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">startswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
</span><span id="Column-277"><a href="#Column-277"><span class="linenos">277</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
-</span><span id="Column-278"><a href="#Column-278"><span class="linenos">278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;ENDSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="Column-278"><a href="#Column-278"><span class="linenos">278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
</span><span id="Column-279"><a href="#Column-279"><span class="linenos">279</span></a>
-</span><span id="Column-280"><a href="#Column-280"><span class="linenos">280</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">regexp</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-281"><a href="#Column-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column-282"><a href="#Column-282"><span class="linenos">282</span></a> <span class="n">column</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">callable_expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</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">_lit</span><span class="p">(</span><span class="n">regexp</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column-283"><a href="#Column-283"><span class="linenos">283</span></a> <span class="p">)</span>
-</span><span id="Column-284"><a href="#Column-284"><span class="linenos">284</span></a>
-</span><span id="Column-285"><a href="#Column-285"><span class="linenos">285</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="nb">str</span><span class="p">):</span>
-</span><span id="Column-286"><a href="#Column-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column-287"><a href="#Column-287"><span class="linenos">287</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column-288"><a href="#Column-288"><span class="linenos">288</span></a> <span class="p">)</span>
-</span><span id="Column-289"><a href="#Column-289"><span class="linenos">289</span></a>
-</span><span id="Column-290"><a href="#Column-290"><span class="linenos">290</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="nb">str</span><span class="p">):</span>
-</span><span id="Column-291"><a href="#Column-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column-292"><a href="#Column-292"><span class="linenos">292</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column-293"><a href="#Column-293"><span class="linenos">293</span></a> <span class="p">)</span>
-</span><span id="Column-294"><a href="#Column-294"><span class="linenos">294</span></a>
-</span><span id="Column-295"><a href="#Column-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">substr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">startPos</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">],</span> <span class="n">length</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-296"><a href="#Column-296"><span class="linenos">296</span></a> <span class="n">startPos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">startPos</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">startPos</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">startPos</span>
-</span><span id="Column-297"><a href="#Column-297"><span class="linenos">297</span></a> <span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">length</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">length</span>
-</span><span id="Column-298"><a href="#Column-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column-299"><a href="#Column-299"><span class="linenos">299</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">startPos</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">length</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column-300"><a href="#Column-300"><span class="linenos">300</span></a> <span class="p">)</span>
-</span><span id="Column-301"><a href="#Column-301"><span class="linenos">301</span></a>
-</span><span id="Column-302"><a href="#Column-302"><span class="linenos">302</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</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">ColumnOrLiteral</span><span class="p">]]):</span>
-</span><span id="Column-303"><a href="#Column-303"><span class="linenos">303</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
-</span><span id="Column-304"><a href="#Column-304"><span class="linenos">304</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">_lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</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="Column-305"><a href="#Column-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span><span class="bp">self</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Column-306"><a href="#Column-306"><span class="linenos">306</span></a>
-</span><span id="Column-307"><a href="#Column-307"><span class="linenos">307</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span>
-</span><span id="Column-308"><a href="#Column-308"><span class="linenos">308</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Column-309"><a href="#Column-309"><span class="linenos">309</span></a> <span class="n">lowerBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
-</span><span id="Column-310"><a href="#Column-310"><span class="linenos">310</span></a> <span class="n">upperBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
-</span><span id="Column-311"><a href="#Column-311"><span class="linenos">311</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-312"><a href="#Column-312"><span class="linenos">312</span></a> <span class="n">lower_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Column-313"><a href="#Column-313"><span class="linenos">313</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lowerBound</span>
-</span><span id="Column-314"><a href="#Column-314"><span class="linenos">314</span></a> <span class="p">)</span>
-</span><span id="Column-315"><a href="#Column-315"><span class="linenos">315</span></a> <span class="n">upper_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Column-316"><a href="#Column-316"><span class="linenos">316</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">upperBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">upperBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">upperBound</span>
-</span><span id="Column-317"><a href="#Column-317"><span class="linenos">317</span></a> <span class="p">)</span>
-</span><span id="Column-318"><a href="#Column-318"><span class="linenos">318</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
-</span><span id="Column-319"><a href="#Column-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">(</span>
-</span><span id="Column-320"><a href="#Column-320"><span class="linenos">320</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span>
-</span><span id="Column-321"><a href="#Column-321"><span class="linenos">321</span></a> <span class="n">low</span><span class="o">=</span><span class="n">lower_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Column-322"><a href="#Column-322"><span class="linenos">322</span></a> <span class="n">high</span><span class="o">=</span><span class="n">upper_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Column-323"><a href="#Column-323"><span class="linenos">323</span></a> <span class="p">)</span>
-</span><span id="Column-324"><a href="#Column-324"><span class="linenos">324</span></a> <span class="p">)</span>
-</span><span id="Column-325"><a href="#Column-325"><span class="linenos">325</span></a>
-</span><span id="Column-326"><a href="#Column-326"><span class="linenos">326</span></a> <span class="k">def</span> <span class="nf">over</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="p">:</span> <span class="n">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column-327"><a href="#Column-327"><span class="linenos">327</span></a> <span class="n">window_expression</span> <span class="o">=</span> <span class="n">window</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="Column-328"><a href="#Column-328"><span class="linenos">328</span></a> <span class="n">window_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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
-</span><span id="Column-329"><a href="#Column-329"><span class="linenos">329</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">window_expression</span><span class="p">)</span>
+</span><span id="Column-280"><a href="#Column-280"><span class="linenos">280</span></a> <span class="k">def</span> <span class="nf">endswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-281"><a href="#Column-281"><span class="linenos">281</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
+</span><span id="Column-282"><a href="#Column-282"><span class="linenos">282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;ENDSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="Column-283"><a href="#Column-283"><span class="linenos">283</span></a>
+</span><span id="Column-284"><a href="#Column-284"><span class="linenos">284</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">regexp</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-285"><a href="#Column-285"><span class="linenos">285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column-286"><a href="#Column-286"><span class="linenos">286</span></a> <span class="n">column</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">callable_expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</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">_lit</span><span class="p">(</span><span class="n">regexp</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column-287"><a href="#Column-287"><span class="linenos">287</span></a> <span class="p">)</span>
+</span><span id="Column-288"><a href="#Column-288"><span class="linenos">288</span></a>
+</span><span id="Column-289"><a href="#Column-289"><span class="linenos">289</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="nb">str</span><span class="p">):</span>
+</span><span id="Column-290"><a href="#Column-290"><span class="linenos">290</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column-291"><a href="#Column-291"><span class="linenos">291</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column-292"><a href="#Column-292"><span class="linenos">292</span></a> <span class="p">)</span>
+</span><span id="Column-293"><a href="#Column-293"><span class="linenos">293</span></a>
+</span><span id="Column-294"><a href="#Column-294"><span class="linenos">294</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="nb">str</span><span class="p">):</span>
+</span><span id="Column-295"><a href="#Column-295"><span class="linenos">295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column-296"><a href="#Column-296"><span class="linenos">296</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column-297"><a href="#Column-297"><span class="linenos">297</span></a> <span class="p">)</span>
+</span><span id="Column-298"><a href="#Column-298"><span class="linenos">298</span></a>
+</span><span id="Column-299"><a href="#Column-299"><span class="linenos">299</span></a> <span class="k">def</span> <span class="nf">substr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">startPos</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">],</span> <span class="n">length</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-300"><a href="#Column-300"><span class="linenos">300</span></a> <span class="n">startPos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">startPos</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">startPos</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">startPos</span>
+</span><span id="Column-301"><a href="#Column-301"><span class="linenos">301</span></a> <span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">length</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">length</span>
+</span><span id="Column-302"><a href="#Column-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column-303"><a href="#Column-303"><span class="linenos">303</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">startPos</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">length</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column-304"><a href="#Column-304"><span class="linenos">304</span></a> <span class="p">)</span>
+</span><span id="Column-305"><a href="#Column-305"><span class="linenos">305</span></a>
+</span><span id="Column-306"><a href="#Column-306"><span class="linenos">306</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</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">ColumnOrLiteral</span><span class="p">]]):</span>
+</span><span id="Column-307"><a href="#Column-307"><span class="linenos">307</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
+</span><span id="Column-308"><a href="#Column-308"><span class="linenos">308</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">_lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</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="Column-309"><a href="#Column-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span><span class="bp">self</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Column-310"><a href="#Column-310"><span class="linenos">310</span></a>
+</span><span id="Column-311"><a href="#Column-311"><span class="linenos">311</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span>
+</span><span id="Column-312"><a href="#Column-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Column-313"><a href="#Column-313"><span class="linenos">313</span></a> <span class="n">lowerBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
+</span><span id="Column-314"><a href="#Column-314"><span class="linenos">314</span></a> <span class="n">upperBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
+</span><span id="Column-315"><a href="#Column-315"><span class="linenos">315</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-316"><a href="#Column-316"><span class="linenos">316</span></a> <span class="n">lower_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Column-317"><a href="#Column-317"><span class="linenos">317</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lowerBound</span>
+</span><span id="Column-318"><a href="#Column-318"><span class="linenos">318</span></a> <span class="p">)</span>
+</span><span id="Column-319"><a href="#Column-319"><span class="linenos">319</span></a> <span class="n">upper_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Column-320"><a href="#Column-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">upperBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">upperBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">upperBound</span>
+</span><span id="Column-321"><a href="#Column-321"><span class="linenos">321</span></a> <span class="p">)</span>
+</span><span id="Column-322"><a href="#Column-322"><span class="linenos">322</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
+</span><span id="Column-323"><a href="#Column-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">(</span>
+</span><span id="Column-324"><a href="#Column-324"><span class="linenos">324</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span>
+</span><span id="Column-325"><a href="#Column-325"><span class="linenos">325</span></a> <span class="n">low</span><span class="o">=</span><span class="n">lower_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Column-326"><a href="#Column-326"><span class="linenos">326</span></a> <span class="n">high</span><span class="o">=</span><span class="n">upper_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Column-327"><a href="#Column-327"><span class="linenos">327</span></a> <span class="p">)</span>
+</span><span id="Column-328"><a href="#Column-328"><span class="linenos">328</span></a> <span class="p">)</span>
+</span><span id="Column-329"><a href="#Column-329"><span class="linenos">329</span></a>
+</span><span id="Column-330"><a href="#Column-330"><span class="linenos">330</span></a> <span class="k">def</span> <span class="nf">over</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="p">:</span> <span class="n">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column-331"><a href="#Column-331"><span class="linenos">331</span></a> <span class="n">window_expression</span> <span class="o">=</span> <span class="n">window</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="Column-332"><a href="#Column-332"><span class="linenos">332</span></a> <span class="n">window_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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
+</span><span id="Column-333"><a href="#Column-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">window_expression</span><span class="p">)</span>
</span></pre></div>
@@ -3590,26 +3757,27 @@ 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;140247752861744&#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;139783388983456&#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>
</div>
<a class="headerlink" href="#Column.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.__init__-18"><a href="#Column.__init__-18"><span class="linenos">18</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">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">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]):</span>
-</span><span id="Column.__init__-19"><a href="#Column.__init__-19"><span class="linenos">19</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">Column</span><span class="p">):</span>
-</span><span id="Column.__init__-20"><a href="#Column.__init__-20"><span class="linenos">20</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
-</span><span id="Column.__init__-21"><a href="#Column.__init__-21"><span class="linenos">21</span></a> <span class="k">elif</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)):</span>
-</span><span id="Column.__init__-22"><a href="#Column.__init__-22"><span class="linenos">22</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
-</span><span id="Column.__init__-23"><a href="#Column.__init__-23"><span class="linenos">23</span></a>
-</span><span id="Column.__init__-24"><a href="#Column.__init__-24"><span class="linenos">24</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</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="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="Column.__init__-25"><a href="#Column.__init__-25"><span class="linenos">25</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Column.__init__-26"><a href="#Column.__init__-26"><span class="linenos">26</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;Could not parse </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Column.__init__-27"><a href="#Column.__init__-27"><span class="linenos">27</span></a>
-</span><span id="Column.__init__-28"><a href="#Column.__init__-28"><span class="linenos">28</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">Column</span><span class="p">):</span>
-</span><span id="Column.__init__-29"><a href="#Column.__init__-29"><span class="linenos">29</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.__init__-17"><a href="#Column.__init__-17"><span class="linenos">17</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">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">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]):</span>
+</span><span id="Column.__init__-18"><a href="#Column.__init__-18"><span class="linenos">18</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="Column.__init__-19"><a href="#Column.__init__-19"><span class="linenos">19</span></a>
+</span><span id="Column.__init__-20"><a href="#Column.__init__-20"><span class="linenos">20</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">Column</span><span class="p">):</span>
+</span><span id="Column.__init__-21"><a href="#Column.__init__-21"><span class="linenos">21</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
+</span><span id="Column.__init__-22"><a href="#Column.__init__-22"><span class="linenos">22</span></a> <span class="k">elif</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)):</span>
+</span><span id="Column.__init__-23"><a href="#Column.__init__-23"><span class="linenos">23</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="c1"># type: ignore</span>
+</span><span id="Column.__init__-24"><a href="#Column.__init__-24"><span class="linenos">24</span></a> <span class="k">elif</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">Column</span><span class="p">):</span>
+</span><span id="Column.__init__-25"><a href="#Column.__init__-25"><span class="linenos">25</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">sqlglot</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">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Column.__init__-26"><a href="#Column.__init__-26"><span class="linenos">26</span></a> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="Column.__init__-27"><a href="#Column.__init__-27"><span class="linenos">27</span></a> <span class="p">)</span>
+</span><span id="Column.__init__-28"><a href="#Column.__init__-28"><span class="linenos">28</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Column.__init__-29"><a href="#Column.__init__-29"><span class="linenos">29</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;Could not parse </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Column.__init__-30"><a href="#Column.__init__-30"><span class="linenos">30</span></a>
-</span><span id="Column.__init__-31"><a href="#Column.__init__-31"><span class="linenos">31</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">Expression</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Column.__init__-31"><a href="#Column.__init__-31"><span class="linenos">31</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">Expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="c1"># type: ignore</span>
</span></pre></div>
@@ -3633,7 +3801,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;140247751170832&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.Column</a></span>:</span></span>
+ <span class="name">ensure_col</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139783385138224&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.ensure_col-view-source"><span>View Source</span></label>
@@ -3654,7 +3822,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;140247751312000&#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;139783385241568&#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>
@@ -3675,7 +3843,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;140247751388768&#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;140247751253904&#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;139783385488768&#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;139783385479632&#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>
@@ -3702,7 +3870,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;140247749317376&#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;139783385296528&#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>
@@ -3739,7 +3907,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;140247749362688&#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;139783385553008&#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>
@@ -3760,7 +3928,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;140247749371856&#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;139783385581360&#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>
@@ -3918,7 +4086,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Column.sql-210"><a href="#Column.sql-210"><span class="linenos">210</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Column.sql-211"><a href="#Column.sql-211"><span class="linenos">211</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">sql</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="s2">&quot;spark&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">})</span>
+</span><span id="Column.sql-211"><a href="#Column.sql-211"><span class="linenos">211</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="Column.sql-212"><a href="#Column.sql-212"><span class="linenos">212</span></a>
+</span><span id="Column.sql-213"><a href="#Column.sql-213"><span class="linenos">213</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">sql</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">})</span>
</span></pre></div>
@@ -3936,9 +4106,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.alias"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.alias-213"><a href="#Column.alias-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">alias</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="n">Column</span><span class="p">:</span>
-</span><span id="Column.alias-214"><a href="#Column.alias-214"><span class="linenos">214</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
-</span><span id="Column.alias-215"><a href="#Column.alias-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.alias-215"><a href="#Column.alias-215"><span class="linenos">215</span></a> <span class="k">def</span> <span class="nf">alias</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="n">Column</span><span class="p">:</span>
+</span><span id="Column.alias-216"><a href="#Column.alias-216"><span class="linenos">216</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+</span><span id="Column.alias-217"><a href="#Column.alias-217"><span class="linenos">217</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -3956,9 +4126,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.asc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.asc-217"><a href="#Column.asc-217"><span class="linenos">217</span></a> <span class="k">def</span> <span class="nf">asc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.asc-218"><a href="#Column.asc-218"><span class="linenos">218</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Column.asc-219"><a href="#Column.asc-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.asc-219"><a href="#Column.asc-219"><span class="linenos">219</span></a> <span class="k">def</span> <span class="nf">asc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.asc-220"><a href="#Column.asc-220"><span class="linenos">220</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Column.asc-221"><a href="#Column.asc-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -3976,9 +4146,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.desc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.desc-221"><a href="#Column.desc-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">desc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.desc-222"><a href="#Column.desc-222"><span class="linenos">222</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Column.desc-223"><a href="#Column.desc-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.desc-223"><a href="#Column.desc-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">desc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.desc-224"><a href="#Column.desc-224"><span class="linenos">224</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Column.desc-225"><a href="#Column.desc-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -3996,9 +4166,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.asc_nulls_first"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.asc_nulls_first-217"><a href="#Column.asc_nulls_first-217"><span class="linenos">217</span></a> <span class="k">def</span> <span class="nf">asc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.asc_nulls_first-218"><a href="#Column.asc_nulls_first-218"><span class="linenos">218</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Column.asc_nulls_first-219"><a href="#Column.asc_nulls_first-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.asc_nulls_first-219"><a href="#Column.asc_nulls_first-219"><span class="linenos">219</span></a> <span class="k">def</span> <span class="nf">asc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.asc_nulls_first-220"><a href="#Column.asc_nulls_first-220"><span class="linenos">220</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Column.asc_nulls_first-221"><a href="#Column.asc_nulls_first-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4016,9 +4186,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.asc_nulls_last"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.asc_nulls_last-227"><a href="#Column.asc_nulls_last-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="nf">asc_nulls_last</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.asc_nulls_last-228"><a href="#Column.asc_nulls_last-228"><span class="linenos">228</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Column.asc_nulls_last-229"><a href="#Column.asc_nulls_last-229"><span class="linenos">229</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.asc_nulls_last-229"><a href="#Column.asc_nulls_last-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">asc_nulls_last</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.asc_nulls_last-230"><a href="#Column.asc_nulls_last-230"><span class="linenos">230</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Column.asc_nulls_last-231"><a href="#Column.asc_nulls_last-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4036,9 +4206,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.desc_nulls_first"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.desc_nulls_first-231"><a href="#Column.desc_nulls_first-231"><span class="linenos">231</span></a> <span class="k">def</span> <span class="nf">desc_nulls_first</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.desc_nulls_first-232"><a href="#Column.desc_nulls_first-232"><span class="linenos">232</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Column.desc_nulls_first-233"><a href="#Column.desc_nulls_first-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.desc_nulls_first-233"><a href="#Column.desc_nulls_first-233"><span class="linenos">233</span></a> <span class="k">def</span> <span class="nf">desc_nulls_first</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.desc_nulls_first-234"><a href="#Column.desc_nulls_first-234"><span class="linenos">234</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Column.desc_nulls_first-235"><a href="#Column.desc_nulls_first-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4056,9 +4226,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.desc_nulls_last"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.desc_nulls_last-221"><a href="#Column.desc_nulls_last-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">desc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.desc_nulls_last-222"><a href="#Column.desc_nulls_last-222"><span class="linenos">222</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Column.desc_nulls_last-223"><a href="#Column.desc_nulls_last-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.desc_nulls_last-223"><a href="#Column.desc_nulls_last-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">desc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.desc_nulls_last-224"><a href="#Column.desc_nulls_last-224"><span class="linenos">224</span></a> <span class="n">new_expression</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Column.desc_nulls_last-225"><a href="#Column.desc_nulls_last-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4076,15 +4246,15 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.when"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.when-237"><a href="#Column.when-237"><span class="linenos">237</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">Column</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.when-238"><a href="#Column.when-238"><span class="linenos">238</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">when</span>
-</span><span id="Column.when-239"><a href="#Column.when-239"><span class="linenos">239</span></a>
-</span><span id="Column.when-240"><a href="#Column.when-240"><span class="linenos">240</span></a> <span class="n">column_with_if</span> <span class="o">=</span> <span class="n">when</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
-</span><span id="Column.when-241"><a href="#Column.when-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Case</span><span class="p">):</span>
-</span><span id="Column.when-242"><a href="#Column.when-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="n">column_with_if</span>
-</span><span id="Column.when-243"><a href="#Column.when-243"><span class="linenos">243</span></a> <span class="n">new_column</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="Column.when-244"><a href="#Column.when-244"><span class="linenos">244</span></a> <span class="n">new_column</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;ifs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">column_with_if</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;ifs&quot;</span><span class="p">])</span>
-</span><span id="Column.when-245"><a href="#Column.when-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">new_column</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.when-239"><a href="#Column.when-239"><span class="linenos">239</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">Column</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.when-240"><a href="#Column.when-240"><span class="linenos">240</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">when</span>
+</span><span id="Column.when-241"><a href="#Column.when-241"><span class="linenos">241</span></a>
+</span><span id="Column.when-242"><a href="#Column.when-242"><span class="linenos">242</span></a> <span class="n">column_with_if</span> <span class="o">=</span> <span class="n">when</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="Column.when-243"><a href="#Column.when-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Case</span><span class="p">):</span>
+</span><span id="Column.when-244"><a href="#Column.when-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">column_with_if</span>
+</span><span id="Column.when-245"><a href="#Column.when-245"><span class="linenos">245</span></a> <span class="n">new_column</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="Column.when-246"><a href="#Column.when-246"><span class="linenos">246</span></a> <span class="n">new_column</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;ifs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">column_with_if</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;ifs&quot;</span><span class="p">])</span>
+</span><span id="Column.when-247"><a href="#Column.when-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">new_column</span>
</span></pre></div>
@@ -4102,13 +4272,13 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.otherwise"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.otherwise-247"><a href="#Column.otherwise-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">otherwise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.otherwise-248"><a href="#Column.otherwise-248"><span class="linenos">248</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
-</span><span id="Column.otherwise-249"><a href="#Column.otherwise-249"><span class="linenos">249</span></a>
-</span><span id="Column.otherwise-250"><a href="#Column.otherwise-250"><span class="linenos">250</span></a> <span class="n">true_value</span> <span class="o">=</span> <span class="n">value</span> <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">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Column.otherwise-251"><a href="#Column.otherwise-251"><span class="linenos">251</span></a> <span class="n">new_column</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="Column.otherwise-252"><a href="#Column.otherwise-252"><span class="linenos">252</span></a> <span class="n">new_column</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;default&quot;</span><span class="p">,</span> <span class="n">true_value</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
-</span><span id="Column.otherwise-253"><a href="#Column.otherwise-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">new_column</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.otherwise-249"><a href="#Column.otherwise-249"><span class="linenos">249</span></a> <span class="k">def</span> <span class="nf">otherwise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.otherwise-250"><a href="#Column.otherwise-250"><span class="linenos">250</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.functions</span> <span class="kn">import</span> <span class="n">lit</span>
+</span><span id="Column.otherwise-251"><a href="#Column.otherwise-251"><span class="linenos">251</span></a>
+</span><span id="Column.otherwise-252"><a href="#Column.otherwise-252"><span class="linenos">252</span></a> <span class="n">true_value</span> <span class="o">=</span> <span class="n">value</span> <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">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Column.otherwise-253"><a href="#Column.otherwise-253"><span class="linenos">253</span></a> <span class="n">new_column</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="Column.otherwise-254"><a href="#Column.otherwise-254"><span class="linenos">254</span></a> <span class="n">new_column</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;default&quot;</span><span class="p">,</span> <span class="n">true_value</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
+</span><span id="Column.otherwise-255"><a href="#Column.otherwise-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">new_column</span>
</span></pre></div>
@@ -4126,9 +4296,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.isNull"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.isNull-255"><a href="#Column.isNull-255"><span class="linenos">255</span></a> <span class="k">def</span> <span class="nf">isNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.isNull-256"><a href="#Column.isNull-256"><span class="linenos">256</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column.isNull-257"><a href="#Column.isNull-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.isNull-257"><a href="#Column.isNull-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">isNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.isNull-258"><a href="#Column.isNull-258"><span class="linenos">258</span></a> <span class="n">new_expression</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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column.isNull-259"><a href="#Column.isNull-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4146,9 +4316,9 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.isNotNull"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.isNotNull-259"><a href="#Column.isNotNull-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">isNotNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.isNotNull-260"><a href="#Column.isNotNull-260"><span class="linenos">260</span></a> <span class="n">new_expression</span> <span class="o">=</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">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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column.isNotNull-261"><a href="#Column.isNotNull-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.isNotNull-261"><a href="#Column.isNotNull-261"><span class="linenos">261</span></a> <span class="k">def</span> <span class="nf">isNotNull</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.isNotNull-262"><a href="#Column.isNotNull-262"><span class="linenos">262</span></a> <span class="n">new_expression</span> <span class="o">=</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">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="bp">self</span><span class="o">.</span><span class="n">column_expression</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="Column.isNotNull-263"><a href="#Column.isNotNull-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">new_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4166,14 +4336,16 @@ and check if it matches the type of the value provided. If not then make it null
</div>
<a class="headerlink" href="#Column.cast"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.cast-263"><a href="#Column.cast-263"><span class="linenos">263</span></a> <span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataType</span><span class="p">:</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">DataType</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.cast-264"><a href="#Column.cast-264"><span class="linenos">264</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Column.cast-265"><a href="#Column.cast-265"><span class="linenos">265</span></a><span class="sd"> Functionality Difference: PySpark cast accepts a datatype instance of the datatype class</span>
-</span><span id="Column.cast-266"><a href="#Column.cast-266"><span class="linenos">266</span></a><span class="sd"> Sqlglot doesn&#39;t currently replicate this class so it only accepts a string</span>
-</span><span id="Column.cast-267"><a href="#Column.cast-267"><span class="linenos">267</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Column.cast-268"><a href="#Column.cast-268"><span class="linenos">268</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataType</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
-</span><span id="Column.cast-269"><a href="#Column.cast-269"><span class="linenos">269</span></a> <span class="n">dataType</span> <span class="o">=</span> <span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span>
-</span><span id="Column.cast-270"><a href="#Column.cast-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">Column</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">dataType</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.cast-265"><a href="#Column.cast-265"><span class="linenos">265</span></a> <span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataType</span><span class="p">:</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">DataType</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.cast-266"><a href="#Column.cast-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Column.cast-267"><a href="#Column.cast-267"><span class="linenos">267</span></a><span class="sd"> Functionality Difference: PySpark cast accepts a datatype instance of the datatype class</span>
+</span><span id="Column.cast-268"><a href="#Column.cast-268"><span class="linenos">268</span></a><span class="sd"> Sqlglot doesn&#39;t currently replicate this class so it only accepts a string</span>
+</span><span id="Column.cast-269"><a href="#Column.cast-269"><span class="linenos">269</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Column.cast-270"><a href="#Column.cast-270"><span class="linenos">270</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="Column.cast-271"><a href="#Column.cast-271"><span class="linenos">271</span></a>
+</span><span id="Column.cast-272"><a href="#Column.cast-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataType</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
+</span><span id="Column.cast-273"><a href="#Column.cast-273"><span class="linenos">273</span></a> <span class="n">dataType</span> <span class="o">=</span> <span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span>
+</span><span id="Column.cast-274"><a href="#Column.cast-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="n">Column</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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span> <span class="n">dataType</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">))</span>
</span></pre></div>
@@ -4194,9 +4366,9 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#Column.startswith"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.startswith-272"><a href="#Column.startswith-272"><span class="linenos">272</span></a> <span class="k">def</span> <span class="nf">startswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.startswith-273"><a href="#Column.startswith-273"><span class="linenos">273</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
-</span><span id="Column.startswith-274"><a href="#Column.startswith-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.startswith-276"><a href="#Column.startswith-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">startswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.startswith-277"><a href="#Column.startswith-277"><span class="linenos">277</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
+</span><span id="Column.startswith-278"><a href="#Column.startswith-278"><span class="linenos">278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
</span></pre></div>
@@ -4214,9 +4386,9 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#Column.endswith"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.endswith-276"><a href="#Column.endswith-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">endswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.endswith-277"><a href="#Column.endswith-277"><span class="linenos">277</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
-</span><span id="Column.endswith-278"><a href="#Column.endswith-278"><span class="linenos">278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;ENDSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.endswith-280"><a href="#Column.endswith-280"><span class="linenos">280</span></a> <span class="k">def</span> <span class="nf">endswith</span><span class="p">(</span><span class="bp">self</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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.endswith-281"><a href="#Column.endswith-281"><span class="linenos">281</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">value</span>
+</span><span id="Column.endswith-282"><a href="#Column.endswith-282"><span class="linenos">282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_anonymous_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;ENDSWITH&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
</span></pre></div>
@@ -4234,10 +4406,10 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#Column.rlike"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.rlike-280"><a href="#Column.rlike-280"><span class="linenos">280</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">regexp</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.rlike-281"><a href="#Column.rlike-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column.rlike-282"><a href="#Column.rlike-282"><span class="linenos">282</span></a> <span class="n">column</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">callable_expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</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">_lit</span><span class="p">(</span><span class="n">regexp</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column.rlike-283"><a href="#Column.rlike-283"><span class="linenos">283</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.rlike-284"><a href="#Column.rlike-284"><span class="linenos">284</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">regexp</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.rlike-285"><a href="#Column.rlike-285"><span class="linenos">285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column.rlike-286"><a href="#Column.rlike-286"><span class="linenos">286</span></a> <span class="n">column</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">callable_expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</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">_lit</span><span class="p">(</span><span class="n">regexp</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column.rlike-287"><a href="#Column.rlike-287"><span class="linenos">287</span></a> <span class="p">)</span>
</span></pre></div>
@@ -4255,10 +4427,10 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#Column.like"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.like-285"><a href="#Column.like-285"><span class="linenos">285</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="nb">str</span><span class="p">):</span>
-</span><span id="Column.like-286"><a href="#Column.like-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column.like-287"><a href="#Column.like-287"><span class="linenos">287</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column.like-288"><a href="#Column.like-288"><span class="linenos">288</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.like-289"><a href="#Column.like-289"><span class="linenos">289</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="nb">str</span><span class="p">):</span>
+</span><span id="Column.like-290"><a href="#Column.like-290"><span class="linenos">290</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column.like-291"><a href="#Column.like-291"><span class="linenos">291</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column.like-292"><a href="#Column.like-292"><span class="linenos">292</span></a> <span class="p">)</span>
</span></pre></div>
@@ -4276,10 +4448,10 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#Column.ilike"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.ilike-290"><a href="#Column.ilike-290"><span class="linenos">290</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="nb">str</span><span class="p">):</span>
-</span><span id="Column.ilike-291"><a href="#Column.ilike-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column.ilike-292"><a href="#Column.ilike-292"><span class="linenos">292</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column.ilike-293"><a href="#Column.ilike-293"><span class="linenos">293</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.ilike-294"><a href="#Column.ilike-294"><span class="linenos">294</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="nb">str</span><span class="p">):</span>
+</span><span id="Column.ilike-295"><a href="#Column.ilike-295"><span class="linenos">295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column.ilike-296"><a href="#Column.ilike-296"><span class="linenos">296</span></a> <span class="bp">self</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="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column.ilike-297"><a href="#Column.ilike-297"><span class="linenos">297</span></a> <span class="p">)</span>
</span></pre></div>
@@ -4297,12 +4469,12 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#Column.substr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.substr-295"><a href="#Column.substr-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">substr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">startPos</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">],</span> <span class="n">length</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.substr-296"><a href="#Column.substr-296"><span class="linenos">296</span></a> <span class="n">startPos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">startPos</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">startPos</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">startPos</span>
-</span><span id="Column.substr-297"><a href="#Column.substr-297"><span class="linenos">297</span></a> <span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">length</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">length</span>
-</span><span id="Column.substr-298"><a href="#Column.substr-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
-</span><span id="Column.substr-299"><a href="#Column.substr-299"><span class="linenos">299</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">startPos</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">length</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Column.substr-300"><a href="#Column.substr-300"><span class="linenos">300</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.substr-299"><a href="#Column.substr-299"><span class="linenos">299</span></a> <span class="k">def</span> <span class="nf">substr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">startPos</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">],</span> <span class="n">length</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Column</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.substr-300"><a href="#Column.substr-300"><span class="linenos">300</span></a> <span class="n">startPos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">startPos</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">startPos</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">startPos</span>
+</span><span id="Column.substr-301"><a href="#Column.substr-301"><span class="linenos">301</span></a> <span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">length</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">length</span>
+</span><span id="Column.substr-302"><a href="#Column.substr-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span>
+</span><span id="Column.substr-303"><a href="#Column.substr-303"><span class="linenos">303</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">startPos</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">length</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Column.substr-304"><a href="#Column.substr-304"><span class="linenos">304</span></a> <span class="p">)</span>
</span></pre></div>
@@ -4314,16 +4486,16 @@ 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;140247749611664&#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;140247749611664&#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;139783385776384&#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;139783385776384&#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>
</div>
<a class="headerlink" href="#Column.isin"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.isin-302"><a href="#Column.isin-302"><span class="linenos">302</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</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">ColumnOrLiteral</span><span class="p">]]):</span>
-</span><span id="Column.isin-303"><a href="#Column.isin-303"><span class="linenos">303</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
-</span><span id="Column.isin-304"><a href="#Column.isin-304"><span class="linenos">304</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">_lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</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="Column.isin-305"><a href="#Column.isin-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span><span class="bp">self</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.isin-306"><a href="#Column.isin-306"><span class="linenos">306</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</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">ColumnOrLiteral</span><span class="p">]]):</span>
+</span><span id="Column.isin-307"><a href="#Column.isin-307"><span class="linenos">307</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
+</span><span id="Column.isin-308"><a href="#Column.isin-308"><span class="linenos">308</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">_lit</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</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="Column.isin-309"><a href="#Column.isin-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="n">Column</span><span class="o">.</span><span class="n">invoke_expression_over_column</span><span class="p">(</span><span class="bp">self</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span></pre></div>
@@ -4335,30 +4507,30 @@ 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;140247749668688&#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;140247749746240&#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;139783385884480&#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;139783385922576&#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>
</div>
<a class="headerlink" href="#Column.between"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.between-307"><a href="#Column.between-307"><span class="linenos">307</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span>
-</span><span id="Column.between-308"><a href="#Column.between-308"><span class="linenos">308</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Column.between-309"><a href="#Column.between-309"><span class="linenos">309</span></a> <span class="n">lowerBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
-</span><span id="Column.between-310"><a href="#Column.between-310"><span class="linenos">310</span></a> <span class="n">upperBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
-</span><span id="Column.between-311"><a href="#Column.between-311"><span class="linenos">311</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.between-312"><a href="#Column.between-312"><span class="linenos">312</span></a> <span class="n">lower_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Column.between-313"><a href="#Column.between-313"><span class="linenos">313</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lowerBound</span>
-</span><span id="Column.between-314"><a href="#Column.between-314"><span class="linenos">314</span></a> <span class="p">)</span>
-</span><span id="Column.between-315"><a href="#Column.between-315"><span class="linenos">315</span></a> <span class="n">upper_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Column.between-316"><a href="#Column.between-316"><span class="linenos">316</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">upperBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">upperBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">upperBound</span>
-</span><span id="Column.between-317"><a href="#Column.between-317"><span class="linenos">317</span></a> <span class="p">)</span>
-</span><span id="Column.between-318"><a href="#Column.between-318"><span class="linenos">318</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
-</span><span id="Column.between-319"><a href="#Column.between-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">(</span>
-</span><span id="Column.between-320"><a href="#Column.between-320"><span class="linenos">320</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span>
-</span><span id="Column.between-321"><a href="#Column.between-321"><span class="linenos">321</span></a> <span class="n">low</span><span class="o">=</span><span class="n">lower_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Column.between-322"><a href="#Column.between-322"><span class="linenos">322</span></a> <span class="n">high</span><span class="o">=</span><span class="n">upper_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Column.between-323"><a href="#Column.between-323"><span class="linenos">323</span></a> <span class="p">)</span>
-</span><span id="Column.between-324"><a href="#Column.between-324"><span class="linenos">324</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.between-311"><a href="#Column.between-311"><span class="linenos">311</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span>
+</span><span id="Column.between-312"><a href="#Column.between-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Column.between-313"><a href="#Column.between-313"><span class="linenos">313</span></a> <span class="n">lowerBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
+</span><span id="Column.between-314"><a href="#Column.between-314"><span class="linenos">314</span></a> <span class="n">upperBound</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrLiteral</span><span class="p">],</span>
+</span><span id="Column.between-315"><a href="#Column.between-315"><span class="linenos">315</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.between-316"><a href="#Column.between-316"><span class="linenos">316</span></a> <span class="n">lower_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Column.between-317"><a href="#Column.between-317"><span class="linenos">317</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lowerBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">lowerBound</span>
+</span><span id="Column.between-318"><a href="#Column.between-318"><span class="linenos">318</span></a> <span class="p">)</span>
+</span><span id="Column.between-319"><a href="#Column.between-319"><span class="linenos">319</span></a> <span class="n">upper_bound_exp</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Column.between-320"><a href="#Column.between-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_lit</span><span class="p">(</span><span class="n">upperBound</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">upperBound</span><span class="p">,</span> <span class="n">Column</span><span class="p">)</span> <span class="k">else</span> <span class="n">upperBound</span>
+</span><span id="Column.between-321"><a href="#Column.between-321"><span class="linenos">321</span></a> <span class="p">)</span>
+</span><span id="Column.between-322"><a href="#Column.between-322"><span class="linenos">322</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
+</span><span id="Column.between-323"><a href="#Column.between-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">(</span>
+</span><span id="Column.between-324"><a href="#Column.between-324"><span class="linenos">324</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">,</span>
+</span><span id="Column.between-325"><a href="#Column.between-325"><span class="linenos">325</span></a> <span class="n">low</span><span class="o">=</span><span class="n">lower_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Column.between-326"><a href="#Column.between-326"><span class="linenos">326</span></a> <span class="n">high</span><span class="o">=</span><span class="n">upper_bound_exp</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Column.between-327"><a href="#Column.between-327"><span class="linenos">327</span></a> <span class="p">)</span>
+</span><span id="Column.between-328"><a href="#Column.between-328"><span class="linenos">328</span></a> <span class="p">)</span>
</span></pre></div>
@@ -4370,16 +4542,16 @@ 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;140247749805200&#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;139783385963904&#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>
</div>
<a class="headerlink" href="#Column.over"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.over-326"><a href="#Column.over-326"><span class="linenos">326</span></a> <span class="k">def</span> <span class="nf">over</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="p">:</span> <span class="n">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="Column.over-327"><a href="#Column.over-327"><span class="linenos">327</span></a> <span class="n">window_expression</span> <span class="o">=</span> <span class="n">window</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="Column.over-328"><a href="#Column.over-328"><span class="linenos">328</span></a> <span class="n">window_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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
-</span><span id="Column.over-329"><a href="#Column.over-329"><span class="linenos">329</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">window_expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.over-330"><a href="#Column.over-330"><span class="linenos">330</span></a> <span class="k">def</span> <span class="nf">over</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="p">:</span> <span class="n">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="Column.over-331"><a href="#Column.over-331"><span class="linenos">331</span></a> <span class="n">window_expression</span> <span class="o">=</span> <span class="n">window</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="Column.over-332"><a href="#Column.over-332"><span class="linenos">332</span></a> <span class="n">window_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="bp">self</span><span class="o">.</span><span class="n">column_expression</span><span class="p">)</span>
+</span><span id="Column.over-333"><a href="#Column.over-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span><span class="n">window_expression</span><span class="p">)</span>
</span></pre></div>
@@ -4398,32 +4570,32 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameNaFunctions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions-822"><a href="#DataFrameNaFunctions-822"><span class="linenos">822</span></a><span class="k">class</span> <span class="nc">DataFrameNaFunctions</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions-823"><a href="#DataFrameNaFunctions-823"><span class="linenos">823</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">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">):</span>
-</span><span id="DataFrameNaFunctions-824"><a href="#DataFrameNaFunctions-824"><span class="linenos">824</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">df</span> <span class="o">=</span> <span class="n">df</span>
-</span><span id="DataFrameNaFunctions-825"><a href="#DataFrameNaFunctions-825"><span class="linenos">825</span></a>
-</span><span id="DataFrameNaFunctions-826"><a href="#DataFrameNaFunctions-826"><span class="linenos">826</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span>
-</span><span id="DataFrameNaFunctions-827"><a href="#DataFrameNaFunctions-827"><span class="linenos">827</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions-828"><a href="#DataFrameNaFunctions-828"><span class="linenos">828</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions-829"><a href="#DataFrameNaFunctions-829"><span class="linenos">829</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions-830"><a href="#DataFrameNaFunctions-830"><span class="linenos">830</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions-831"><a href="#DataFrameNaFunctions-831"><span class="linenos">831</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions-832"><a href="#DataFrameNaFunctions-832"><span class="linenos">832</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="n">how</span><span class="p">,</span> <span class="n">thresh</span><span class="o">=</span><span class="n">thresh</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
-</span><span id="DataFrameNaFunctions-833"><a href="#DataFrameNaFunctions-833"><span class="linenos">833</span></a>
-</span><span id="DataFrameNaFunctions-834"><a href="#DataFrameNaFunctions-834"><span class="linenos">834</span></a> <span class="k">def</span> <span class="nf">fill</span><span class="p">(</span>
-</span><span id="DataFrameNaFunctions-835"><a href="#DataFrameNaFunctions-835"><span class="linenos">835</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions-836"><a href="#DataFrameNaFunctions-836"><span class="linenos">836</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bool</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">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><span id="DataFrameNaFunctions-837"><a href="#DataFrameNaFunctions-837"><span class="linenos">837</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions-838"><a href="#DataFrameNaFunctions-838"><span class="linenos">838</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions-839"><a href="#DataFrameNaFunctions-839"><span class="linenos">839</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
-</span><span id="DataFrameNaFunctions-840"><a href="#DataFrameNaFunctions-840"><span class="linenos">840</span></a>
-</span><span id="DataFrameNaFunctions-841"><a href="#DataFrameNaFunctions-841"><span class="linenos">841</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
-</span><span id="DataFrameNaFunctions-842"><a href="#DataFrameNaFunctions-842"><span class="linenos">842</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions-843"><a href="#DataFrameNaFunctions-843"><span class="linenos">843</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
-</span><span id="DataFrameNaFunctions-844"><a href="#DataFrameNaFunctions-844"><span class="linenos">844</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">t</span><span class="o">.</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">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 class="p">,</span>
-</span><span id="DataFrameNaFunctions-845"><a href="#DataFrameNaFunctions-845"><span class="linenos">845</span></a> <span class="n">subset</span><span 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">Union</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">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="DataFrameNaFunctions-846"><a href="#DataFrameNaFunctions-846"><span class="linenos">846</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions-847"><a href="#DataFrameNaFunctions-847"><span class="linenos">847</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">to_replace</span><span class="o">=</span><span class="n">to_replace</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions-842"><a href="#DataFrameNaFunctions-842"><span class="linenos">842</span></a><span class="k">class</span> <span class="nc">DataFrameNaFunctions</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions-843"><a href="#DataFrameNaFunctions-843"><span class="linenos">843</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">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">):</span>
+</span><span id="DataFrameNaFunctions-844"><a href="#DataFrameNaFunctions-844"><span class="linenos">844</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">df</span> <span class="o">=</span> <span class="n">df</span>
+</span><span id="DataFrameNaFunctions-845"><a href="#DataFrameNaFunctions-845"><span class="linenos">845</span></a>
+</span><span id="DataFrameNaFunctions-846"><a href="#DataFrameNaFunctions-846"><span class="linenos">846</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span>
+</span><span id="DataFrameNaFunctions-847"><a href="#DataFrameNaFunctions-847"><span class="linenos">847</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions-848"><a href="#DataFrameNaFunctions-848"><span class="linenos">848</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions-849"><a href="#DataFrameNaFunctions-849"><span class="linenos">849</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions-850"><a href="#DataFrameNaFunctions-850"><span class="linenos">850</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions-851"><a href="#DataFrameNaFunctions-851"><span class="linenos">851</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions-852"><a href="#DataFrameNaFunctions-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="n">how</span><span class="p">,</span> <span class="n">thresh</span><span class="o">=</span><span class="n">thresh</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
+</span><span id="DataFrameNaFunctions-853"><a href="#DataFrameNaFunctions-853"><span class="linenos">853</span></a>
+</span><span id="DataFrameNaFunctions-854"><a href="#DataFrameNaFunctions-854"><span class="linenos">854</span></a> <span class="k">def</span> <span class="nf">fill</span><span class="p">(</span>
+</span><span id="DataFrameNaFunctions-855"><a href="#DataFrameNaFunctions-855"><span class="linenos">855</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions-856"><a href="#DataFrameNaFunctions-856"><span class="linenos">856</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bool</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">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><span id="DataFrameNaFunctions-857"><a href="#DataFrameNaFunctions-857"><span class="linenos">857</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions-858"><a href="#DataFrameNaFunctions-858"><span class="linenos">858</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions-859"><a href="#DataFrameNaFunctions-859"><span class="linenos">859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
+</span><span id="DataFrameNaFunctions-860"><a href="#DataFrameNaFunctions-860"><span class="linenos">860</span></a>
+</span><span id="DataFrameNaFunctions-861"><a href="#DataFrameNaFunctions-861"><span class="linenos">861</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
+</span><span id="DataFrameNaFunctions-862"><a href="#DataFrameNaFunctions-862"><span class="linenos">862</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions-863"><a href="#DataFrameNaFunctions-863"><span class="linenos">863</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
+</span><span id="DataFrameNaFunctions-864"><a href="#DataFrameNaFunctions-864"><span class="linenos">864</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">t</span><span class="o">.</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">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 class="p">,</span>
+</span><span id="DataFrameNaFunctions-865"><a href="#DataFrameNaFunctions-865"><span class="linenos">865</span></a> <span class="n">subset</span><span 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">Union</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">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="DataFrameNaFunctions-866"><a href="#DataFrameNaFunctions-866"><span class="linenos">866</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions-867"><a href="#DataFrameNaFunctions-867"><span class="linenos">867</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">to_replace</span><span class="o">=</span><span class="n">to_replace</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
</span></pre></div>
@@ -4439,8 +4611,8 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameNaFunctions.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.__init__-823"><a href="#DataFrameNaFunctions.__init__-823"><span class="linenos">823</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">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">):</span>
-</span><span id="DataFrameNaFunctions.__init__-824"><a href="#DataFrameNaFunctions.__init__-824"><span class="linenos">824</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">df</span> <span class="o">=</span> <span class="n">df</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.__init__-843"><a href="#DataFrameNaFunctions.__init__-843"><span class="linenos">843</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">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">):</span>
+</span><span id="DataFrameNaFunctions.__init__-844"><a href="#DataFrameNaFunctions.__init__-844"><span class="linenos">844</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">df</span> <span class="o">=</span> <span class="n">df</span>
</span></pre></div>
@@ -4469,13 +4641,13 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameNaFunctions.drop"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.drop-826"><a href="#DataFrameNaFunctions.drop-826"><span class="linenos">826</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span>
-</span><span id="DataFrameNaFunctions.drop-827"><a href="#DataFrameNaFunctions.drop-827"><span class="linenos">827</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions.drop-828"><a href="#DataFrameNaFunctions.drop-828"><span class="linenos">828</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions.drop-829"><a href="#DataFrameNaFunctions.drop-829"><span class="linenos">829</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions.drop-830"><a href="#DataFrameNaFunctions.drop-830"><span class="linenos">830</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions.drop-831"><a href="#DataFrameNaFunctions.drop-831"><span class="linenos">831</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions.drop-832"><a href="#DataFrameNaFunctions.drop-832"><span class="linenos">832</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="n">how</span><span class="p">,</span> <span class="n">thresh</span><span class="o">=</span><span class="n">thresh</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.drop-846"><a href="#DataFrameNaFunctions.drop-846"><span class="linenos">846</span></a> <span class="k">def</span> <span class="nf">drop</span><span class="p">(</span>
+</span><span id="DataFrameNaFunctions.drop-847"><a href="#DataFrameNaFunctions.drop-847"><span class="linenos">847</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions.drop-848"><a href="#DataFrameNaFunctions.drop-848"><span class="linenos">848</span></a> <span class="n">how</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions.drop-849"><a href="#DataFrameNaFunctions.drop-849"><span class="linenos">849</span></a> <span class="n">thresh</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions.drop-850"><a href="#DataFrameNaFunctions.drop-850"><span class="linenos">850</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions.drop-851"><a href="#DataFrameNaFunctions.drop-851"><span class="linenos">851</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions.drop-852"><a href="#DataFrameNaFunctions.drop-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="n">how</span><span class="p">,</span> <span class="n">thresh</span><span class="o">=</span><span class="n">thresh</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
</span></pre></div>
@@ -4493,12 +4665,12 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameNaFunctions.fill"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.fill-834"><a href="#DataFrameNaFunctions.fill-834"><span class="linenos">834</span></a> <span class="k">def</span> <span class="nf">fill</span><span class="p">(</span>
-</span><span id="DataFrameNaFunctions.fill-835"><a href="#DataFrameNaFunctions.fill-835"><span class="linenos">835</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions.fill-836"><a href="#DataFrameNaFunctions.fill-836"><span class="linenos">836</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bool</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">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><span id="DataFrameNaFunctions.fill-837"><a href="#DataFrameNaFunctions.fill-837"><span class="linenos">837</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions.fill-838"><a href="#DataFrameNaFunctions.fill-838"><span class="linenos">838</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions.fill-839"><a href="#DataFrameNaFunctions.fill-839"><span class="linenos">839</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.fill-854"><a href="#DataFrameNaFunctions.fill-854"><span class="linenos">854</span></a> <span class="k">def</span> <span class="nf">fill</span><span class="p">(</span>
+</span><span id="DataFrameNaFunctions.fill-855"><a href="#DataFrameNaFunctions.fill-855"><span class="linenos">855</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions.fill-856"><a href="#DataFrameNaFunctions.fill-856"><span class="linenos">856</span></a> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bool</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">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><span id="DataFrameNaFunctions.fill-857"><a href="#DataFrameNaFunctions.fill-857"><span class="linenos">857</span></a> <span class="n">subset</span><span 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">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><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="DataFrameNaFunctions.fill-858"><a href="#DataFrameNaFunctions.fill-858"><span class="linenos">858</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions.fill-859"><a href="#DataFrameNaFunctions.fill-859"><span class="linenos">859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
</span></pre></div>
@@ -4516,13 +4688,13 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameNaFunctions.replace"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.replace-841"><a href="#DataFrameNaFunctions.replace-841"><span class="linenos">841</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
-</span><span id="DataFrameNaFunctions.replace-842"><a href="#DataFrameNaFunctions.replace-842"><span class="linenos">842</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameNaFunctions.replace-843"><a href="#DataFrameNaFunctions.replace-843"><span class="linenos">843</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
-</span><span id="DataFrameNaFunctions.replace-844"><a href="#DataFrameNaFunctions.replace-844"><span class="linenos">844</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">t</span><span class="o">.</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">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 class="p">,</span>
-</span><span id="DataFrameNaFunctions.replace-845"><a href="#DataFrameNaFunctions.replace-845"><span class="linenos">845</span></a> <span class="n">subset</span><span 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">Union</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">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="DataFrameNaFunctions.replace-846"><a href="#DataFrameNaFunctions.replace-846"><span class="linenos">846</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameNaFunctions.replace-847"><a href="#DataFrameNaFunctions.replace-847"><span class="linenos">847</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">to_replace</span><span class="o">=</span><span class="n">to_replace</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameNaFunctions.replace-861"><a href="#DataFrameNaFunctions.replace-861"><span class="linenos">861</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span>
+</span><span id="DataFrameNaFunctions.replace-862"><a href="#DataFrameNaFunctions.replace-862"><span class="linenos">862</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameNaFunctions.replace-863"><a href="#DataFrameNaFunctions.replace-863"><span class="linenos">863</span></a> <span class="n">to_replace</span><span class="p">:</span> <span class="n">t</span><span class="o">.</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">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">Dict</span><span class="p">],</span>
+</span><span id="DataFrameNaFunctions.replace-864"><a href="#DataFrameNaFunctions.replace-864"><span class="linenos">864</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">t</span><span class="o">.</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">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 class="p">,</span>
+</span><span id="DataFrameNaFunctions.replace-865"><a href="#DataFrameNaFunctions.replace-865"><span class="linenos">865</span></a> <span class="n">subset</span><span 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">Union</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">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="DataFrameNaFunctions.replace-866"><a href="#DataFrameNaFunctions.replace-866"><span class="linenos">866</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameNaFunctions.replace-867"><a href="#DataFrameNaFunctions.replace-867"><span class="linenos">867</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">to_replace</span><span class="o">=</span><span class="n">to_replace</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">subset</span><span class="o">=</span><span class="n">subset</span><span class="p">)</span>
</span></pre></div>
@@ -4615,7 +4787,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;140247750117552&#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;140247750117552&#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;139783386046256&#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;139783386046256&#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>
@@ -4636,7 +4808,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;140247750312768&#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;140247750312768&#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;139783383106176&#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;139783383106176&#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>
@@ -4713,88 +4885,90 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</span><span id="WindowSpec-49"><a href="#WindowSpec-49"><span class="linenos"> 49</span></a> <span class="k">return</span> <span class="n">WindowSpec</span><span class="p">(</span><span class="bp">self</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="WindowSpec-50"><a href="#WindowSpec-50"><span class="linenos"> 50</span></a>
</span><span id="WindowSpec-51"><a href="#WindowSpec-51"><span class="linenos"> 51</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="WindowSpec-52"><a href="#WindowSpec-52"><span class="linenos"> 52</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">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="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="WindowSpec-52"><a href="#WindowSpec-52"><span class="linenos"> 52</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
</span><span id="WindowSpec-53"><a href="#WindowSpec-53"><span class="linenos"> 53</span></a>
-</span><span id="WindowSpec-54"><a href="#WindowSpec-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">partitionBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec-55"><a href="#WindowSpec-55"><span class="linenos"> 55</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
-</span><span id="WindowSpec-56"><a href="#WindowSpec-56"><span class="linenos"> 56</span></a>
-</span><span id="WindowSpec-57"><a href="#WindowSpec-57"><span class="linenos"> 57</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
-</span><span id="WindowSpec-58"><a href="#WindowSpec-58"><span class="linenos"> 58</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
-</span><span id="WindowSpec-59"><a href="#WindowSpec-59"><span class="linenos"> 59</span></a> <span class="n">window_spec</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="WindowSpec-60"><a href="#WindowSpec-60"><span class="linenos"> 60</span></a> <span class="n">partition_by_expressions</span> <span class="o">=</span> <span class="n">window_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;partition_by&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="WindowSpec-61"><a href="#WindowSpec-61"><span class="linenos"> 61</span></a> <span class="n">partition_by_expressions</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="WindowSpec-62"><a href="#WindowSpec-62"><span class="linenos"> 62</span></a> <span class="n">window_spec</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;partition_by&quot;</span><span class="p">,</span> <span class="n">partition_by_expressions</span><span class="p">)</span>
-</span><span id="WindowSpec-63"><a href="#WindowSpec-63"><span class="linenos"> 63</span></a> <span class="k">return</span> <span class="n">window_spec</span>
-</span><span id="WindowSpec-64"><a href="#WindowSpec-64"><span class="linenos"> 64</span></a>
-</span><span id="WindowSpec-65"><a href="#WindowSpec-65"><span class="linenos"> 65</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec-66"><a href="#WindowSpec-66"><span class="linenos"> 66</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
-</span><span id="WindowSpec-67"><a href="#WindowSpec-67"><span class="linenos"> 67</span></a>
-</span><span id="WindowSpec-68"><a href="#WindowSpec-68"><span class="linenos"> 68</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
-</span><span id="WindowSpec-69"><a href="#WindowSpec-69"><span class="linenos"> 69</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
-</span><span id="WindowSpec-70"><a href="#WindowSpec-70"><span class="linenos"> 70</span></a> <span class="n">window_spec</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="WindowSpec-71"><a href="#WindowSpec-71"><span class="linenos"> 71</span></a> <span class="k">if</span> <span class="n">window_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;order&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="WindowSpec-72"><a href="#WindowSpec-72"><span class="linenos"> 72</span></a> <span class="n">window_spec</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;order&quot;</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">expressions</span><span class="o">=</span><span class="p">[]))</span>
-</span><span id="WindowSpec-73"><a href="#WindowSpec-73"><span class="linenos"> 73</span></a> <span class="n">order_by</span> <span class="o">=</span> <span class="n">window_spec</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;order&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="WindowSpec-74"><a href="#WindowSpec-74"><span class="linenos"> 74</span></a> <span class="n">order_by</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="WindowSpec-75"><a href="#WindowSpec-75"><span class="linenos"> 75</span></a> <span class="n">window_spec</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;order&quot;</span><span class="p">]</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">order_by</span><span class="p">)</span>
-</span><span id="WindowSpec-76"><a href="#WindowSpec-76"><span class="linenos"> 76</span></a> <span class="k">return</span> <span class="n">window_spec</span>
-</span><span id="WindowSpec-77"><a href="#WindowSpec-77"><span class="linenos"> 77</span></a>
-</span><span id="WindowSpec-78"><a href="#WindowSpec-78"><span class="linenos"> 78</span></a> <span class="k">def</span> <span class="nf">_calc_start_end</span><span class="p">(</span>
-</span><span id="WindowSpec-79"><a href="#WindowSpec-79"><span class="linenos"> 79</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span>
-</span><span id="WindowSpec-80"><a href="#WindowSpec-80"><span class="linenos"> 80</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]]:</span>
-</span><span id="WindowSpec-81"><a href="#WindowSpec-81"><span class="linenos"> 81</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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">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="WindowSpec-82"><a href="#WindowSpec-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="WindowSpec-83"><a href="#WindowSpec-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="WindowSpec-84"><a href="#WindowSpec-84"><span class="linenos"> 84</span></a> <span class="p">}</span>
-</span><span id="WindowSpec-85"><a href="#WindowSpec-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="n">Window</span><span class="o">.</span><span class="n">currentRow</span><span class="p">:</span>
-</span><span id="WindowSpec-86"><a href="#WindowSpec-86"><span class="linenos"> 86</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="WindowSpec-87"><a href="#WindowSpec-87"><span class="linenos"> 87</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="WindowSpec-88"><a href="#WindowSpec-88"><span class="linenos"> 88</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="WindowSpec-89"><a href="#WindowSpec-89"><span class="linenos"> 89</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="WindowSpec-90"><a href="#WindowSpec-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="WindowSpec-91"><a href="#WindowSpec-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">,</span>
-</span><span id="WindowSpec-92"><a href="#WindowSpec-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="s2">&quot;UNBOUNDED&quot;</span>
-</span><span id="WindowSpec-93"><a href="#WindowSpec-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">&lt;=</span> <span class="n">Window</span><span class="o">.</span><span class="n">unboundedPreceding</span>
-</span><span id="WindowSpec-94"><a href="#WindowSpec-94"><span class="linenos"> 94</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">start</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="WindowSpec-95"><a href="#WindowSpec-95"><span class="linenos"> 95</span></a> <span class="p">},</span>
-</span><span id="WindowSpec-96"><a href="#WindowSpec-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
-</span><span id="WindowSpec-97"><a href="#WindowSpec-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">==</span> <span class="n">Window</span><span class="o">.</span><span class="n">currentRow</span><span class="p">:</span>
-</span><span id="WindowSpec-98"><a href="#WindowSpec-98"><span class="linenos"> 98</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="WindowSpec-99"><a href="#WindowSpec-99"><span class="linenos"> 99</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="WindowSpec-100"><a href="#WindowSpec-100"><span class="linenos">100</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="WindowSpec-101"><a href="#WindowSpec-101"><span class="linenos">101</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="WindowSpec-102"><a href="#WindowSpec-102"><span class="linenos">102</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="WindowSpec-103"><a href="#WindowSpec-103"><span class="linenos">103</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span>
-</span><span id="WindowSpec-104"><a href="#WindowSpec-104"><span class="linenos">104</span></a> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="s2">&quot;UNBOUNDED&quot;</span>
-</span><span id="WindowSpec-105"><a href="#WindowSpec-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">&gt;=</span> <span class="n">Window</span><span class="o">.</span><span class="n">unboundedFollowing</span>
-</span><span id="WindowSpec-106"><a href="#WindowSpec-106"><span class="linenos">106</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">end</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="WindowSpec-107"><a href="#WindowSpec-107"><span class="linenos">107</span></a> <span class="p">},</span>
-</span><span id="WindowSpec-108"><a href="#WindowSpec-108"><span class="linenos">108</span></a> <span class="p">}</span>
-</span><span id="WindowSpec-109"><a href="#WindowSpec-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="n">kwargs</span>
-</span><span id="WindowSpec-110"><a href="#WindowSpec-110"><span class="linenos">110</span></a>
-</span><span id="WindowSpec-111"><a href="#WindowSpec-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">rowsBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec-112"><a href="#WindowSpec-112"><span class="linenos">112</span></a> <span class="n">window_spec</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="WindowSpec-113"><a href="#WindowSpec-113"><span class="linenos">113</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec-114"><a href="#WindowSpec-114"><span class="linenos">114</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;ROWS&quot;</span>
-</span><span id="WindowSpec-115"><a href="#WindowSpec-115"><span class="linenos">115</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="WindowSpec-116"><a href="#WindowSpec-116"><span class="linenos">116</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
-</span><span id="WindowSpec-117"><a href="#WindowSpec-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
-</span><span id="WindowSpec-118"><a href="#WindowSpec-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
-</span><span id="WindowSpec-119"><a href="#WindowSpec-119"><span class="linenos">119</span></a> <span class="p">),</span>
-</span><span id="WindowSpec-120"><a href="#WindowSpec-120"><span class="linenos">120</span></a> <span class="p">)</span>
-</span><span id="WindowSpec-121"><a href="#WindowSpec-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">window_spec</span>
-</span><span id="WindowSpec-122"><a href="#WindowSpec-122"><span class="linenos">122</span></a>
-</span><span id="WindowSpec-123"><a href="#WindowSpec-123"><span class="linenos">123</span></a> <span class="k">def</span> <span class="nf">rangeBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec-124"><a href="#WindowSpec-124"><span class="linenos">124</span></a> <span class="n">window_spec</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="WindowSpec-125"><a href="#WindowSpec-125"><span class="linenos">125</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec-126"><a href="#WindowSpec-126"><span class="linenos">126</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;RANGE&quot;</span>
-</span><span id="WindowSpec-127"><a href="#WindowSpec-127"><span class="linenos">127</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="WindowSpec-128"><a href="#WindowSpec-128"><span class="linenos">128</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
-</span><span id="WindowSpec-129"><a href="#WindowSpec-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
-</span><span id="WindowSpec-130"><a href="#WindowSpec-130"><span class="linenos">130</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
-</span><span id="WindowSpec-131"><a href="#WindowSpec-131"><span class="linenos">131</span></a> <span class="p">),</span>
-</span><span id="WindowSpec-132"><a href="#WindowSpec-132"><span class="linenos">132</span></a> <span class="p">)</span>
-</span><span id="WindowSpec-133"><a href="#WindowSpec-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+</span><span id="WindowSpec-54"><a href="#WindowSpec-54"><span class="linenos"> 54</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">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="WindowSpec-55"><a href="#WindowSpec-55"><span class="linenos"> 55</span></a>
+</span><span id="WindowSpec-56"><a href="#WindowSpec-56"><span class="linenos"> 56</span></a> <span class="k">def</span> <span class="nf">partitionBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec-57"><a href="#WindowSpec-57"><span class="linenos"> 57</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
+</span><span id="WindowSpec-58"><a href="#WindowSpec-58"><span class="linenos"> 58</span></a>
+</span><span id="WindowSpec-59"><a href="#WindowSpec-59"><span class="linenos"> 59</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
+</span><span id="WindowSpec-60"><a href="#WindowSpec-60"><span class="linenos"> 60</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
+</span><span id="WindowSpec-61"><a href="#WindowSpec-61"><span class="linenos"> 61</span></a> <span class="n">window_spec</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="WindowSpec-62"><a href="#WindowSpec-62"><span class="linenos"> 62</span></a> <span class="n">partition_by_expressions</span> <span class="o">=</span> <span class="n">window_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;partition_by&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="WindowSpec-63"><a href="#WindowSpec-63"><span class="linenos"> 63</span></a> <span class="n">partition_by_expressions</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="WindowSpec-64"><a href="#WindowSpec-64"><span class="linenos"> 64</span></a> <span class="n">window_spec</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;partition_by&quot;</span><span class="p">,</span> <span class="n">partition_by_expressions</span><span class="p">)</span>
+</span><span id="WindowSpec-65"><a href="#WindowSpec-65"><span class="linenos"> 65</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+</span><span id="WindowSpec-66"><a href="#WindowSpec-66"><span class="linenos"> 66</span></a>
+</span><span id="WindowSpec-67"><a href="#WindowSpec-67"><span class="linenos"> 67</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec-68"><a href="#WindowSpec-68"><span class="linenos"> 68</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
+</span><span id="WindowSpec-69"><a href="#WindowSpec-69"><span class="linenos"> 69</span></a>
+</span><span id="WindowSpec-70"><a href="#WindowSpec-70"><span class="linenos"> 70</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
+</span><span id="WindowSpec-71"><a href="#WindowSpec-71"><span class="linenos"> 71</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
+</span><span id="WindowSpec-72"><a href="#WindowSpec-72"><span class="linenos"> 72</span></a> <span class="n">window_spec</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="WindowSpec-73"><a href="#WindowSpec-73"><span class="linenos"> 73</span></a> <span class="k">if</span> <span class="n">window_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;order&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="WindowSpec-74"><a href="#WindowSpec-74"><span class="linenos"> 74</span></a> <span class="n">window_spec</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;order&quot;</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">expressions</span><span class="o">=</span><span class="p">[]))</span>
+</span><span id="WindowSpec-75"><a href="#WindowSpec-75"><span class="linenos"> 75</span></a> <span class="n">order_by</span> <span class="o">=</span> <span class="n">window_spec</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;order&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="WindowSpec-76"><a href="#WindowSpec-76"><span class="linenos"> 76</span></a> <span class="n">order_by</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="WindowSpec-77"><a href="#WindowSpec-77"><span class="linenos"> 77</span></a> <span class="n">window_spec</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;order&quot;</span><span class="p">]</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">order_by</span><span class="p">)</span>
+</span><span id="WindowSpec-78"><a href="#WindowSpec-78"><span class="linenos"> 78</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+</span><span id="WindowSpec-79"><a href="#WindowSpec-79"><span class="linenos"> 79</span></a>
+</span><span id="WindowSpec-80"><a href="#WindowSpec-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">_calc_start_end</span><span class="p">(</span>
+</span><span id="WindowSpec-81"><a href="#WindowSpec-81"><span class="linenos"> 81</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span>
+</span><span id="WindowSpec-82"><a href="#WindowSpec-82"><span class="linenos"> 82</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]]:</span>
+</span><span id="WindowSpec-83"><a href="#WindowSpec-83"><span class="linenos"> 83</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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">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="WindowSpec-84"><a href="#WindowSpec-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="WindowSpec-85"><a href="#WindowSpec-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="WindowSpec-86"><a href="#WindowSpec-86"><span class="linenos"> 86</span></a> <span class="p">}</span>
+</span><span id="WindowSpec-87"><a href="#WindowSpec-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="n">Window</span><span class="o">.</span><span class="n">currentRow</span><span class="p">:</span>
+</span><span id="WindowSpec-88"><a href="#WindowSpec-88"><span class="linenos"> 88</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="WindowSpec-89"><a href="#WindowSpec-89"><span class="linenos"> 89</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="WindowSpec-90"><a href="#WindowSpec-90"><span class="linenos"> 90</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="WindowSpec-91"><a href="#WindowSpec-91"><span class="linenos"> 91</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="WindowSpec-92"><a href="#WindowSpec-92"><span class="linenos"> 92</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="WindowSpec-93"><a href="#WindowSpec-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">,</span>
+</span><span id="WindowSpec-94"><a href="#WindowSpec-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="s2">&quot;UNBOUNDED&quot;</span>
+</span><span id="WindowSpec-95"><a href="#WindowSpec-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">&lt;=</span> <span class="n">Window</span><span class="o">.</span><span class="n">unboundedPreceding</span>
+</span><span id="WindowSpec-96"><a href="#WindowSpec-96"><span class="linenos"> 96</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">start</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="WindowSpec-97"><a href="#WindowSpec-97"><span class="linenos"> 97</span></a> <span class="p">},</span>
+</span><span id="WindowSpec-98"><a href="#WindowSpec-98"><span class="linenos"> 98</span></a> <span class="p">}</span>
+</span><span id="WindowSpec-99"><a href="#WindowSpec-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">==</span> <span class="n">Window</span><span class="o">.</span><span class="n">currentRow</span><span class="p">:</span>
+</span><span id="WindowSpec-100"><a href="#WindowSpec-100"><span class="linenos">100</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="WindowSpec-101"><a href="#WindowSpec-101"><span class="linenos">101</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="WindowSpec-102"><a href="#WindowSpec-102"><span class="linenos">102</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="WindowSpec-103"><a href="#WindowSpec-103"><span class="linenos">103</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="WindowSpec-104"><a href="#WindowSpec-104"><span class="linenos">104</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="WindowSpec-105"><a href="#WindowSpec-105"><span class="linenos">105</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span>
+</span><span id="WindowSpec-106"><a href="#WindowSpec-106"><span class="linenos">106</span></a> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="s2">&quot;UNBOUNDED&quot;</span>
+</span><span id="WindowSpec-107"><a href="#WindowSpec-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">&gt;=</span> <span class="n">Window</span><span class="o">.</span><span class="n">unboundedFollowing</span>
+</span><span id="WindowSpec-108"><a href="#WindowSpec-108"><span class="linenos">108</span></a> <span class="k">else</span> <span class="n">F</span><span class="o">.</span><span class="n">lit</span><span class="p">(</span><span class="n">end</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="WindowSpec-109"><a href="#WindowSpec-109"><span class="linenos">109</span></a> <span class="p">},</span>
+</span><span id="WindowSpec-110"><a href="#WindowSpec-110"><span class="linenos">110</span></a> <span class="p">}</span>
+</span><span id="WindowSpec-111"><a href="#WindowSpec-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="n">kwargs</span>
+</span><span id="WindowSpec-112"><a href="#WindowSpec-112"><span class="linenos">112</span></a>
+</span><span id="WindowSpec-113"><a href="#WindowSpec-113"><span class="linenos">113</span></a> <span class="k">def</span> <span class="nf">rowsBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec-114"><a href="#WindowSpec-114"><span class="linenos">114</span></a> <span class="n">window_spec</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="WindowSpec-115"><a href="#WindowSpec-115"><span class="linenos">115</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec-116"><a href="#WindowSpec-116"><span class="linenos">116</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;ROWS&quot;</span>
+</span><span id="WindowSpec-117"><a href="#WindowSpec-117"><span class="linenos">117</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="WindowSpec-118"><a href="#WindowSpec-118"><span class="linenos">118</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
+</span><span id="WindowSpec-119"><a href="#WindowSpec-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
+</span><span id="WindowSpec-120"><a href="#WindowSpec-120"><span class="linenos">120</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
+</span><span id="WindowSpec-121"><a href="#WindowSpec-121"><span class="linenos">121</span></a> <span class="p">),</span>
+</span><span id="WindowSpec-122"><a href="#WindowSpec-122"><span class="linenos">122</span></a> <span class="p">)</span>
+</span><span id="WindowSpec-123"><a href="#WindowSpec-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+</span><span id="WindowSpec-124"><a href="#WindowSpec-124"><span class="linenos">124</span></a>
+</span><span id="WindowSpec-125"><a href="#WindowSpec-125"><span class="linenos">125</span></a> <span class="k">def</span> <span class="nf">rangeBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec-126"><a href="#WindowSpec-126"><span class="linenos">126</span></a> <span class="n">window_spec</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="WindowSpec-127"><a href="#WindowSpec-127"><span class="linenos">127</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec-128"><a href="#WindowSpec-128"><span class="linenos">128</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;RANGE&quot;</span>
+</span><span id="WindowSpec-129"><a href="#WindowSpec-129"><span class="linenos">129</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="WindowSpec-130"><a href="#WindowSpec-130"><span class="linenos">130</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
+</span><span id="WindowSpec-131"><a href="#WindowSpec-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
+</span><span id="WindowSpec-132"><a href="#WindowSpec-132"><span class="linenos">132</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
+</span><span id="WindowSpec-133"><a href="#WindowSpec-133"><span class="linenos">133</span></a> <span class="p">),</span>
+</span><span id="WindowSpec-134"><a href="#WindowSpec-134"><span class="linenos">134</span></a> <span class="p">)</span>
+</span><span id="WindowSpec-135"><a href="#WindowSpec-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">window_spec</span>
</span></pre></div>
@@ -4860,7 +5034,9 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#WindowSpec.sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.sql-51"><a href="#WindowSpec.sql-51"><span class="linenos">51</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="WindowSpec.sql-52"><a href="#WindowSpec.sql-52"><span class="linenos">52</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">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="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="WindowSpec.sql-52"><a href="#WindowSpec.sql-52"><span class="linenos">52</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="WindowSpec.sql-53"><a href="#WindowSpec.sql-53"><span class="linenos">53</span></a>
+</span><span id="WindowSpec.sql-54"><a href="#WindowSpec.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">expression</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="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
@@ -4872,22 +5048,22 @@ 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;140247749874528&#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;140247749874528&#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;139783383225664&#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;139783383225664&#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>
</div>
<a class="headerlink" href="#WindowSpec.partitionBy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.partitionBy-54"><a href="#WindowSpec.partitionBy-54"><span class="linenos">54</span></a> <span class="k">def</span> <span class="nf">partitionBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec.partitionBy-55"><a href="#WindowSpec.partitionBy-55"><span class="linenos">55</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
-</span><span id="WindowSpec.partitionBy-56"><a href="#WindowSpec.partitionBy-56"><span class="linenos">56</span></a>
-</span><span id="WindowSpec.partitionBy-57"><a href="#WindowSpec.partitionBy-57"><span class="linenos">57</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
-</span><span id="WindowSpec.partitionBy-58"><a href="#WindowSpec.partitionBy-58"><span class="linenos">58</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
-</span><span id="WindowSpec.partitionBy-59"><a href="#WindowSpec.partitionBy-59"><span class="linenos">59</span></a> <span class="n">window_spec</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="WindowSpec.partitionBy-60"><a href="#WindowSpec.partitionBy-60"><span class="linenos">60</span></a> <span class="n">partition_by_expressions</span> <span class="o">=</span> <span class="n">window_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;partition_by&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="WindowSpec.partitionBy-61"><a href="#WindowSpec.partitionBy-61"><span class="linenos">61</span></a> <span class="n">partition_by_expressions</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="WindowSpec.partitionBy-62"><a href="#WindowSpec.partitionBy-62"><span class="linenos">62</span></a> <span class="n">window_spec</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;partition_by&quot;</span><span class="p">,</span> <span class="n">partition_by_expressions</span><span class="p">)</span>
-</span><span id="WindowSpec.partitionBy-63"><a href="#WindowSpec.partitionBy-63"><span class="linenos">63</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.partitionBy-56"><a href="#WindowSpec.partitionBy-56"><span class="linenos">56</span></a> <span class="k">def</span> <span class="nf">partitionBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec.partitionBy-57"><a href="#WindowSpec.partitionBy-57"><span class="linenos">57</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
+</span><span id="WindowSpec.partitionBy-58"><a href="#WindowSpec.partitionBy-58"><span class="linenos">58</span></a>
+</span><span id="WindowSpec.partitionBy-59"><a href="#WindowSpec.partitionBy-59"><span class="linenos">59</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
+</span><span id="WindowSpec.partitionBy-60"><a href="#WindowSpec.partitionBy-60"><span class="linenos">60</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
+</span><span id="WindowSpec.partitionBy-61"><a href="#WindowSpec.partitionBy-61"><span class="linenos">61</span></a> <span class="n">window_spec</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="WindowSpec.partitionBy-62"><a href="#WindowSpec.partitionBy-62"><span class="linenos">62</span></a> <span class="n">partition_by_expressions</span> <span class="o">=</span> <span class="n">window_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;partition_by&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="WindowSpec.partitionBy-63"><a href="#WindowSpec.partitionBy-63"><span class="linenos">63</span></a> <span class="n">partition_by_expressions</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="WindowSpec.partitionBy-64"><a href="#WindowSpec.partitionBy-64"><span class="linenos">64</span></a> <span class="n">window_spec</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;partition_by&quot;</span><span class="p">,</span> <span class="n">partition_by_expressions</span><span class="p">)</span>
+</span><span id="WindowSpec.partitionBy-65"><a href="#WindowSpec.partitionBy-65"><span class="linenos">65</span></a> <span class="k">return</span> <span class="n">window_spec</span>
</span></pre></div>
@@ -4899,24 +5075,24 @@ 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;140247750159776&#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;140247750159776&#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;139783383272656&#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;139783383272656&#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>
</div>
<a class="headerlink" href="#WindowSpec.orderBy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.orderBy-65"><a href="#WindowSpec.orderBy-65"><span class="linenos">65</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec.orderBy-66"><a href="#WindowSpec.orderBy-66"><span class="linenos">66</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
-</span><span id="WindowSpec.orderBy-67"><a href="#WindowSpec.orderBy-67"><span class="linenos">67</span></a>
-</span><span id="WindowSpec.orderBy-68"><a href="#WindowSpec.orderBy-68"><span class="linenos">68</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
-</span><span id="WindowSpec.orderBy-69"><a href="#WindowSpec.orderBy-69"><span class="linenos">69</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
-</span><span id="WindowSpec.orderBy-70"><a href="#WindowSpec.orderBy-70"><span class="linenos">70</span></a> <span class="n">window_spec</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="WindowSpec.orderBy-71"><a href="#WindowSpec.orderBy-71"><span class="linenos">71</span></a> <span class="k">if</span> <span class="n">window_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;order&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="WindowSpec.orderBy-72"><a href="#WindowSpec.orderBy-72"><span class="linenos">72</span></a> <span class="n">window_spec</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;order&quot;</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">expressions</span><span class="o">=</span><span class="p">[]))</span>
-</span><span id="WindowSpec.orderBy-73"><a href="#WindowSpec.orderBy-73"><span class="linenos">73</span></a> <span class="n">order_by</span> <span class="o">=</span> <span class="n">window_spec</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;order&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="WindowSpec.orderBy-74"><a href="#WindowSpec.orderBy-74"><span class="linenos">74</span></a> <span class="n">order_by</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="WindowSpec.orderBy-75"><a href="#WindowSpec.orderBy-75"><span class="linenos">75</span></a> <span class="n">window_spec</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;order&quot;</span><span class="p">]</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">order_by</span><span class="p">)</span>
-</span><span id="WindowSpec.orderBy-76"><a href="#WindowSpec.orderBy-76"><span class="linenos">76</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.orderBy-67"><a href="#WindowSpec.orderBy-67"><span class="linenos">67</span></a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">ColumnOrName</span><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">ColumnOrName</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec.orderBy-68"><a href="#WindowSpec.orderBy-68"><span class="linenos">68</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.column</span> <span class="kn">import</span> <span class="n">Column</span>
+</span><span id="WindowSpec.orderBy-69"><a href="#WindowSpec.orderBy-69"><span class="linenos">69</span></a>
+</span><span id="WindowSpec.orderBy-70"><a href="#WindowSpec.orderBy-70"><span class="linenos">70</span></a> <span class="n">cols</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">set</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span> <span class="k">else</span> <span class="n">cols</span> <span class="c1"># type: ignore</span>
+</span><span id="WindowSpec.orderBy-71"><a href="#WindowSpec.orderBy-71"><span class="linenos">71</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="o">.</span><span class="n">ensure_col</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span>
+</span><span id="WindowSpec.orderBy-72"><a href="#WindowSpec.orderBy-72"><span class="linenos">72</span></a> <span class="n">window_spec</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="WindowSpec.orderBy-73"><a href="#WindowSpec.orderBy-73"><span class="linenos">73</span></a> <span class="k">if</span> <span class="n">window_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;order&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="WindowSpec.orderBy-74"><a href="#WindowSpec.orderBy-74"><span class="linenos">74</span></a> <span class="n">window_spec</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;order&quot;</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">expressions</span><span class="o">=</span><span class="p">[]))</span>
+</span><span id="WindowSpec.orderBy-75"><a href="#WindowSpec.orderBy-75"><span class="linenos">75</span></a> <span class="n">order_by</span> <span class="o">=</span> <span class="n">window_spec</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;order&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="WindowSpec.orderBy-76"><a href="#WindowSpec.orderBy-76"><span class="linenos">76</span></a> <span class="n">order_by</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="WindowSpec.orderBy-77"><a href="#WindowSpec.orderBy-77"><span class="linenos">77</span></a> <span class="n">window_spec</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;order&quot;</span><span class="p">]</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">order_by</span><span class="p">)</span>
+</span><span id="WindowSpec.orderBy-78"><a href="#WindowSpec.orderBy-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="n">window_spec</span>
</span></pre></div>
@@ -4934,17 +5110,17 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#WindowSpec.rowsBetween"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.rowsBetween-111"><a href="#WindowSpec.rowsBetween-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">rowsBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec.rowsBetween-112"><a href="#WindowSpec.rowsBetween-112"><span class="linenos">112</span></a> <span class="n">window_spec</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="WindowSpec.rowsBetween-113"><a href="#WindowSpec.rowsBetween-113"><span class="linenos">113</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec.rowsBetween-114"><a href="#WindowSpec.rowsBetween-114"><span class="linenos">114</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;ROWS&quot;</span>
-</span><span id="WindowSpec.rowsBetween-115"><a href="#WindowSpec.rowsBetween-115"><span class="linenos">115</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="WindowSpec.rowsBetween-116"><a href="#WindowSpec.rowsBetween-116"><span class="linenos">116</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
-</span><span id="WindowSpec.rowsBetween-117"><a href="#WindowSpec.rowsBetween-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
-</span><span id="WindowSpec.rowsBetween-118"><a href="#WindowSpec.rowsBetween-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
-</span><span id="WindowSpec.rowsBetween-119"><a href="#WindowSpec.rowsBetween-119"><span class="linenos">119</span></a> <span class="p">),</span>
-</span><span id="WindowSpec.rowsBetween-120"><a href="#WindowSpec.rowsBetween-120"><span class="linenos">120</span></a> <span class="p">)</span>
-</span><span id="WindowSpec.rowsBetween-121"><a href="#WindowSpec.rowsBetween-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.rowsBetween-113"><a href="#WindowSpec.rowsBetween-113"><span class="linenos">113</span></a> <span class="k">def</span> <span class="nf">rowsBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec.rowsBetween-114"><a href="#WindowSpec.rowsBetween-114"><span class="linenos">114</span></a> <span class="n">window_spec</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="WindowSpec.rowsBetween-115"><a href="#WindowSpec.rowsBetween-115"><span class="linenos">115</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec.rowsBetween-116"><a href="#WindowSpec.rowsBetween-116"><span class="linenos">116</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;ROWS&quot;</span>
+</span><span id="WindowSpec.rowsBetween-117"><a href="#WindowSpec.rowsBetween-117"><span class="linenos">117</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="WindowSpec.rowsBetween-118"><a href="#WindowSpec.rowsBetween-118"><span class="linenos">118</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
+</span><span id="WindowSpec.rowsBetween-119"><a href="#WindowSpec.rowsBetween-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
+</span><span id="WindowSpec.rowsBetween-120"><a href="#WindowSpec.rowsBetween-120"><span class="linenos">120</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
+</span><span id="WindowSpec.rowsBetween-121"><a href="#WindowSpec.rowsBetween-121"><span class="linenos">121</span></a> <span class="p">),</span>
+</span><span id="WindowSpec.rowsBetween-122"><a href="#WindowSpec.rowsBetween-122"><span class="linenos">122</span></a> <span class="p">)</span>
+</span><span id="WindowSpec.rowsBetween-123"><a href="#WindowSpec.rowsBetween-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="n">window_spec</span>
</span></pre></div>
@@ -4962,17 +5138,17 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#WindowSpec.rangeBetween"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.rangeBetween-123"><a href="#WindowSpec.rangeBetween-123"><span class="linenos">123</span></a> <span class="k">def</span> <span class="nf">rangeBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
-</span><span id="WindowSpec.rangeBetween-124"><a href="#WindowSpec.rangeBetween-124"><span class="linenos">124</span></a> <span class="n">window_spec</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="WindowSpec.rangeBetween-125"><a href="#WindowSpec.rangeBetween-125"><span class="linenos">125</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec.rangeBetween-126"><a href="#WindowSpec.rangeBetween-126"><span class="linenos">126</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;RANGE&quot;</span>
-</span><span id="WindowSpec.rangeBetween-127"><a href="#WindowSpec.rangeBetween-127"><span class="linenos">127</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="WindowSpec.rangeBetween-128"><a href="#WindowSpec.rangeBetween-128"><span class="linenos">128</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
-</span><span id="WindowSpec.rangeBetween-129"><a href="#WindowSpec.rangeBetween-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
-</span><span id="WindowSpec.rangeBetween-130"><a href="#WindowSpec.rangeBetween-130"><span class="linenos">130</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
-</span><span id="WindowSpec.rangeBetween-131"><a href="#WindowSpec.rangeBetween-131"><span class="linenos">131</span></a> <span class="p">),</span>
-</span><span id="WindowSpec.rangeBetween-132"><a href="#WindowSpec.rangeBetween-132"><span class="linenos">132</span></a> <span class="p">)</span>
-</span><span id="WindowSpec.rangeBetween-133"><a href="#WindowSpec.rangeBetween-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">window_spec</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec.rangeBetween-125"><a href="#WindowSpec.rangeBetween-125"><span class="linenos">125</span></a> <span class="k">def</span> <span class="nf">rangeBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">WindowSpec</span><span class="p">:</span>
+</span><span id="WindowSpec.rangeBetween-126"><a href="#WindowSpec.rangeBetween-126"><span class="linenos">126</span></a> <span class="n">window_spec</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="WindowSpec.rangeBetween-127"><a href="#WindowSpec.rangeBetween-127"><span class="linenos">127</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_calc_start_end</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="WindowSpec.rangeBetween-128"><a href="#WindowSpec.rangeBetween-128"><span class="linenos">128</span></a> <span class="n">spec</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;RANGE&quot;</span>
+</span><span id="WindowSpec.rangeBetween-129"><a href="#WindowSpec.rangeBetween-129"><span class="linenos">129</span></a> <span class="n">window_spec</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="WindowSpec.rangeBetween-130"><a href="#WindowSpec.rangeBetween-130"><span class="linenos">130</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">,</span>
+</span><span id="WindowSpec.rangeBetween-131"><a href="#WindowSpec.rangeBetween-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">(</span>
+</span><span id="WindowSpec.rangeBetween-132"><a href="#WindowSpec.rangeBetween-132"><span class="linenos">132</span></a> <span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">window_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 class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</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">spec</span><span class="p">}</span>
+</span><span id="WindowSpec.rangeBetween-133"><a href="#WindowSpec.rangeBetween-133"><span class="linenos">133</span></a> <span class="p">),</span>
+</span><span id="WindowSpec.rangeBetween-134"><a href="#WindowSpec.rangeBetween-134"><span class="linenos">134</span></a> <span class="p">)</span>
+</span><span id="WindowSpec.rangeBetween-135"><a href="#WindowSpec.rangeBetween-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">window_spec</span>
</span></pre></div>
@@ -4991,23 +5167,33 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameReader"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameReader-16"><a href="#DataFrameReader-16"><span class="linenos">16</span></a><span class="k">class</span> <span class="nc">DataFrameReader</span><span class="p">:</span>
-</span><span id="DataFrameReader-17"><a href="#DataFrameReader-17"><span class="linenos">17</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">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">):</span>
-</span><span id="DataFrameReader-18"><a href="#DataFrameReader-18"><span class="linenos">18</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
-</span><span id="DataFrameReader-19"><a href="#DataFrameReader-19"><span class="linenos">19</span></a>
-</span><span id="DataFrameReader-20"><a href="#DataFrameReader-20"><span class="linenos">20</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameReader-21"><a href="#DataFrameReader-21"><span class="linenos">21</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameReader-15"><a href="#DataFrameReader-15"><span class="linenos">15</span></a><span class="k">class</span> <span class="nc">DataFrameReader</span><span class="p">:</span>
+</span><span id="DataFrameReader-16"><a href="#DataFrameReader-16"><span class="linenos">16</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">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">):</span>
+</span><span id="DataFrameReader-17"><a href="#DataFrameReader-17"><span class="linenos">17</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
+</span><span id="DataFrameReader-18"><a href="#DataFrameReader-18"><span class="linenos">18</span></a>
+</span><span id="DataFrameReader-19"><a href="#DataFrameReader-19"><span class="linenos">19</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameReader-20"><a href="#DataFrameReader-20"><span class="linenos">20</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
+</span><span id="DataFrameReader-21"><a href="#DataFrameReader-21"><span class="linenos">21</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
</span><span id="DataFrameReader-22"><a href="#DataFrameReader-22"><span class="linenos">22</span></a>
-</span><span id="DataFrameReader-23"><a href="#DataFrameReader-23"><span class="linenos">23</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span><span class="n">tableName</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><span id="DataFrameReader-23"><a href="#DataFrameReader-23"><span class="linenos">23</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="DataFrameReader-24"><a href="#DataFrameReader-24"><span class="linenos">24</span></a>
</span><span id="DataFrameReader-25"><a href="#DataFrameReader-25"><span class="linenos">25</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span>
</span><span id="DataFrameReader-26"><a href="#DataFrameReader-26"><span class="linenos">26</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="p">,</span>
</span><span id="DataFrameReader-27"><a href="#DataFrameReader-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span>
-</span><span id="DataFrameReader-28"><a href="#DataFrameReader-28"><span class="linenos">28</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</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="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">))</span>
-</span><span id="DataFrameReader-29"><a href="#DataFrameReader-29"><span class="linenos">29</span></a> <span class="o">.</span><span class="n">select</span><span class="p">(</span>
-</span><span id="DataFrameReader-30"><a href="#DataFrameReader-30"><span class="linenos">30</span></a> <span class="o">*</span><span class="p">(</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">sqlglot</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">tableName</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><span id="DataFrameReader-31"><a href="#DataFrameReader-31"><span class="linenos">31</span></a> <span class="p">),</span>
-</span><span id="DataFrameReader-32"><a href="#DataFrameReader-32"><span class="linenos">32</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader-28"><a href="#DataFrameReader-28"><span class="linenos">28</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span>
+</span><span id="DataFrameReader-29"><a href="#DataFrameReader-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="DataFrameReader-30"><a href="#DataFrameReader-30"><span class="linenos">30</span></a> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">normalize_identifier</span>
+</span><span id="DataFrameReader-31"><a href="#DataFrameReader-31"><span class="linenos">31</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader-32"><a href="#DataFrameReader-32"><span class="linenos">32</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader-33"><a href="#DataFrameReader-33"><span class="linenos">33</span></a> <span class="o">.</span><span class="n">select</span><span class="p">(</span>
+</span><span id="DataFrameReader-34"><a href="#DataFrameReader-34"><span class="linenos">34</span></a> <span class="o">*</span><span class="p">(</span>
+</span><span id="DataFrameReader-35"><a href="#DataFrameReader-35"><span class="linenos">35</span></a> <span class="n">column</span>
+</span><span id="DataFrameReader-36"><a href="#DataFrameReader-36"><span class="linenos">36</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">sqlglot</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><span id="DataFrameReader-37"><a href="#DataFrameReader-37"><span class="linenos">37</span></a> <span class="n">tableName</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="DataFrameReader-38"><a href="#DataFrameReader-38"><span class="linenos">38</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader-39"><a href="#DataFrameReader-39"><span class="linenos">39</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader-40"><a href="#DataFrameReader-40"><span class="linenos">40</span></a> <span class="p">),</span>
+</span><span id="DataFrameReader-41"><a href="#DataFrameReader-41"><span class="linenos">41</span></a> <span class="p">)</span>
</span></pre></div>
@@ -5023,8 +5209,8 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameReader.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameReader.__init__-17"><a href="#DataFrameReader.__init__-17"><span class="linenos">17</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">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">):</span>
-</span><span id="DataFrameReader.__init__-18"><a href="#DataFrameReader.__init__-18"><span class="linenos">18</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameReader.__init__-16"><a href="#DataFrameReader.__init__-16"><span class="linenos">16</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">spark</span><span class="p">:</span> <span class="n">SparkSession</span><span class="p">):</span>
+</span><span id="DataFrameReader.__init__-17"><a href="#DataFrameReader.__init__-17"><span class="linenos">17</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span> <span class="o">=</span> <span class="n">spark</span>
</span></pre></div>
@@ -5053,19 +5239,29 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameReader.table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameReader.table-20"><a href="#DataFrameReader.table-20"><span class="linenos">20</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="DataFrameReader.table-21"><a href="#DataFrameReader.table-21"><span class="linenos">21</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameReader.table-19"><a href="#DataFrameReader.table-19"><span class="linenos">19</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="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="DataFrameReader.table-20"><a href="#DataFrameReader.table-20"><span class="linenos">20</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.dataframe</span> <span class="kn">import</span> <span class="n">DataFrame</span>
+</span><span id="DataFrameReader.table-21"><a href="#DataFrameReader.table-21"><span class="linenos">21</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
</span><span id="DataFrameReader.table-22"><a href="#DataFrameReader.table-22"><span class="linenos">22</span></a>
-</span><span id="DataFrameReader.table-23"><a href="#DataFrameReader.table-23"><span class="linenos">23</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span><span class="n">tableName</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><span id="DataFrameReader.table-23"><a href="#DataFrameReader.table-23"><span class="linenos">23</span></a> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">add_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="DataFrameReader.table-24"><a href="#DataFrameReader.table-24"><span class="linenos">24</span></a>
</span><span id="DataFrameReader.table-25"><a href="#DataFrameReader.table-25"><span class="linenos">25</span></a> <span class="k">return</span> <span class="n">DataFrame</span><span class="p">(</span>
</span><span id="DataFrameReader.table-26"><a href="#DataFrameReader.table-26"><span class="linenos">26</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">spark</span><span class="p">,</span>
</span><span id="DataFrameReader.table-27"><a href="#DataFrameReader.table-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">()</span>
-</span><span id="DataFrameReader.table-28"><a href="#DataFrameReader.table-28"><span class="linenos">28</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</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="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">))</span>
-</span><span id="DataFrameReader.table-29"><a href="#DataFrameReader.table-29"><span class="linenos">29</span></a> <span class="o">.</span><span class="n">select</span><span class="p">(</span>
-</span><span id="DataFrameReader.table-30"><a href="#DataFrameReader.table-30"><span class="linenos">30</span></a> <span class="o">*</span><span class="p">(</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">sqlglot</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">tableName</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><span id="DataFrameReader.table-31"><a href="#DataFrameReader.table-31"><span class="linenos">31</span></a> <span class="p">),</span>
-</span><span id="DataFrameReader.table-32"><a href="#DataFrameReader.table-32"><span class="linenos">32</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader.table-28"><a href="#DataFrameReader.table-28"><span class="linenos">28</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span>
+</span><span id="DataFrameReader.table-29"><a href="#DataFrameReader.table-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="DataFrameReader.table-30"><a href="#DataFrameReader.table-30"><span class="linenos">30</span></a> <span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">normalize_identifier</span>
+</span><span id="DataFrameReader.table-31"><a href="#DataFrameReader.table-31"><span class="linenos">31</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader.table-32"><a href="#DataFrameReader.table-32"><span class="linenos">32</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader.table-33"><a href="#DataFrameReader.table-33"><span class="linenos">33</span></a> <span class="o">.</span><span class="n">select</span><span class="p">(</span>
+</span><span id="DataFrameReader.table-34"><a href="#DataFrameReader.table-34"><span class="linenos">34</span></a> <span class="o">*</span><span class="p">(</span>
+</span><span id="DataFrameReader.table-35"><a href="#DataFrameReader.table-35"><span class="linenos">35</span></a> <span class="n">column</span>
+</span><span id="DataFrameReader.table-36"><a href="#DataFrameReader.table-36"><span class="linenos">36</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">sqlglot</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><span id="DataFrameReader.table-37"><a href="#DataFrameReader.table-37"><span class="linenos">37</span></a> <span class="n">tableName</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="DataFrameReader.table-38"><a href="#DataFrameReader.table-38"><span class="linenos">38</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader.table-39"><a href="#DataFrameReader.table-39"><span class="linenos">39</span></a> <span class="p">)</span>
+</span><span id="DataFrameReader.table-40"><a href="#DataFrameReader.table-40"><span class="linenos">40</span></a> <span class="p">),</span>
+</span><span id="DataFrameReader.table-41"><a href="#DataFrameReader.table-41"><span class="linenos">41</span></a> <span class="p">)</span>
</span></pre></div>
@@ -5084,68 +5280,72 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter-35"><a href="#DataFrameWriter-35"><span class="linenos">35</span></a><span class="k">class</span> <span class="nc">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter-36"><a href="#DataFrameWriter-36"><span class="linenos">36</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="DataFrameWriter-37"><a href="#DataFrameWriter-37"><span class="linenos">37</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameWriter-38"><a href="#DataFrameWriter-38"><span class="linenos">38</span></a> <span class="n">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
-</span><span id="DataFrameWriter-39"><a href="#DataFrameWriter-39"><span class="linenos">39</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SparkSession</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrameWriter-40"><a href="#DataFrameWriter-40"><span class="linenos">40</span></a> <span class="n">mode</span><span 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="DataFrameWriter-41"><a href="#DataFrameWriter-41"><span class="linenos">41</span></a> <span class="n">by_name</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="DataFrameWriter-42"><a href="#DataFrameWriter-42"><span class="linenos">42</span></a> <span class="p">):</span>
-</span><span id="DataFrameWriter-43"><a href="#DataFrameWriter-43"><span class="linenos">43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span> <span class="o">=</span> <span class="n">df</span>
-</span><span id="DataFrameWriter-44"><a href="#DataFrameWriter-44"><span class="linenos">44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_spark</span> <span class="o">=</span> <span class="n">spark</span> <span class="ow">or</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span>
-</span><span id="DataFrameWriter-45"><a href="#DataFrameWriter-45"><span class="linenos">45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span>
-</span><span id="DataFrameWriter-46"><a href="#DataFrameWriter-46"><span class="linenos">46</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span> <span class="o">=</span> <span class="n">by_name</span>
-</span><span id="DataFrameWriter-47"><a href="#DataFrameWriter-47"><span class="linenos">47</span></a>
-</span><span id="DataFrameWriter-48"><a href="#DataFrameWriter-48"><span class="linenos">48</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter-49"><a href="#DataFrameWriter-49"><span class="linenos">49</span></a> <span class="k">return</span> <span class="n">DataFrameWriter</span><span class="p">(</span>
-</span><span id="DataFrameWriter-50"><a href="#DataFrameWriter-50"><span class="linenos">50</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="DataFrameWriter-51"><a href="#DataFrameWriter-51"><span class="linenos">51</span></a> <span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">k</span><span class="p">:</span> <span class="n">v</span>
-</span><span id="DataFrameWriter-52"><a href="#DataFrameWriter-52"><span class="linenos">52</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">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="DataFrameWriter-53"><a href="#DataFrameWriter-53"><span class="linenos">53</span></a> <span class="p">}</span>
-</span><span id="DataFrameWriter-54"><a href="#DataFrameWriter-54"><span class="linenos">54</span></a> <span class="p">)</span>
-</span><span id="DataFrameWriter-55"><a href="#DataFrameWriter-55"><span class="linenos">55</span></a>
-</span><span id="DataFrameWriter-56"><a href="#DataFrameWriter-56"><span class="linenos">56</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">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="DataFrameWriter-57"><a href="#DataFrameWriter-57"><span class="linenos">57</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="DataFrameWriter-58"><a href="#DataFrameWriter-58"><span class="linenos">58</span></a>
-</span><span id="DataFrameWriter-59"><a href="#DataFrameWriter-59"><span class="linenos">59</span></a> <span class="k">def</span> <span class="nf">mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">saveMode</span><span 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">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter-60"><a href="#DataFrameWriter-60"><span class="linenos">60</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_mode</span><span class="o">=</span><span class="n">saveMode</span><span class="p">)</span>
-</span><span id="DataFrameWriter-61"><a href="#DataFrameWriter-61"><span class="linenos">61</span></a>
-</span><span id="DataFrameWriter-62"><a href="#DataFrameWriter-62"><span class="linenos">62</span></a> <span class="nd">@property</span>
-</span><span id="DataFrameWriter-63"><a href="#DataFrameWriter-63"><span class="linenos">63</span></a> <span class="k">def</span> <span class="nf">byName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DataFrameWriter-64"><a href="#DataFrameWriter-64"><span class="linenos">64</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">by_name</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="DataFrameWriter-65"><a href="#DataFrameWriter-65"><span class="linenos">65</span></a>
-</span><span id="DataFrameWriter-66"><a href="#DataFrameWriter-66"><span class="linenos">66</span></a> <span class="k">def</span> <span class="nf">insertInto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">overwrite</span><span 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">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter-67"><a href="#DataFrameWriter-67"><span class="linenos">67</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">(</span>
-</span><span id="DataFrameWriter-68"><a href="#DataFrameWriter-68"><span class="linenos">68</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="DataFrameWriter-69"><a href="#DataFrameWriter-69"><span class="linenos">69</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">),</span>
-</span><span id="DataFrameWriter-70"><a href="#DataFrameWriter-70"><span class="linenos">70</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="n">overwrite</span><span class="p">,</span>
-</span><span id="DataFrameWriter-71"><a href="#DataFrameWriter-71"><span class="linenos">71</span></a> <span class="p">}</span>
-</span><span id="DataFrameWriter-72"><a href="#DataFrameWriter-72"><span class="linenos">72</span></a> <span class="p">)</span>
-</span><span id="DataFrameWriter-73"><a href="#DataFrameWriter-73"><span class="linenos">73</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">)</span>
-</span><span id="DataFrameWriter-74"><a href="#DataFrameWriter-74"><span class="linenos">74</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span><span class="p">:</span>
-</span><span id="DataFrameWriter-75"><a href="#DataFrameWriter-75"><span class="linenos">75</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">sqlglot</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">tableName</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 class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="DataFrameWriter-76"><a href="#DataFrameWriter-76"><span class="linenos">76</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</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">columns</span><span class="p">)</span>
-</span><span id="DataFrameWriter-77"><a href="#DataFrameWriter-77"><span class="linenos">77</span></a>
-</span><span id="DataFrameWriter-78"><a href="#DataFrameWriter-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="n">df</span><span class="p">)</span>
-</span><span id="DataFrameWriter-79"><a href="#DataFrameWriter-79"><span class="linenos">79</span></a>
-</span><span id="DataFrameWriter-80"><a href="#DataFrameWriter-80"><span class="linenos">80</span></a> <span class="k">def</span> <span class="nf">saveAsTable</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="nb">format</span><span 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="n">mode</span><span 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="DataFrameWriter-81"><a href="#DataFrameWriter-81"><span class="linenos">81</span></a> <span class="k">if</span> <span class="nb">format</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrameWriter-82"><a href="#DataFrameWriter-82"><span class="linenos">82</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Providing Format in the save as table is not supported&quot;</span><span class="p">)</span>
-</span><span id="DataFrameWriter-83"><a href="#DataFrameWriter-83"><span class="linenos">83</span></a> <span class="n">exists</span><span class="p">,</span> <span class="n">replace</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">mode</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">)</span>
-</span><span id="DataFrameWriter-84"><a href="#DataFrameWriter-84"><span class="linenos">84</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;append&quot;</span><span class="p">:</span>
-</span><span id="DataFrameWriter-85"><a href="#DataFrameWriter-85"><span class="linenos">85</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insertInto</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
-</span><span id="DataFrameWriter-86"><a href="#DataFrameWriter-86"><span class="linenos">86</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span>
-</span><span id="DataFrameWriter-87"><a href="#DataFrameWriter-87"><span class="linenos">87</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="DataFrameWriter-88"><a href="#DataFrameWriter-88"><span class="linenos">88</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span>
-</span><span id="DataFrameWriter-89"><a href="#DataFrameWriter-89"><span class="linenos">89</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="DataFrameWriter-90"><a href="#DataFrameWriter-90"><span class="linenos">90</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span>
-</span><span id="DataFrameWriter-91"><a href="#DataFrameWriter-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">to_table</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="DataFrameWriter-92"><a href="#DataFrameWriter-92"><span class="linenos">92</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="DataFrameWriter-93"><a href="#DataFrameWriter-93"><span class="linenos">93</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="DataFrameWriter-94"><a href="#DataFrameWriter-94"><span class="linenos">94</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
-</span><span id="DataFrameWriter-95"><a href="#DataFrameWriter-95"><span class="linenos">95</span></a> <span class="p">)</span>
-</span><span id="DataFrameWriter-96"><a href="#DataFrameWriter-96"><span class="linenos">96</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter-44"><a href="#DataFrameWriter-44"><span class="linenos"> 44</span></a><span class="k">class</span> <span class="nc">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter-45"><a href="#DataFrameWriter-45"><span class="linenos"> 45</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="DataFrameWriter-46"><a href="#DataFrameWriter-46"><span class="linenos"> 46</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameWriter-47"><a href="#DataFrameWriter-47"><span class="linenos"> 47</span></a> <span class="n">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
+</span><span id="DataFrameWriter-48"><a href="#DataFrameWriter-48"><span class="linenos"> 48</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SparkSession</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrameWriter-49"><a href="#DataFrameWriter-49"><span class="linenos"> 49</span></a> <span class="n">mode</span><span 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="DataFrameWriter-50"><a href="#DataFrameWriter-50"><span class="linenos"> 50</span></a> <span class="n">by_name</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="DataFrameWriter-51"><a href="#DataFrameWriter-51"><span class="linenos"> 51</span></a> <span class="p">):</span>
+</span><span id="DataFrameWriter-52"><a href="#DataFrameWriter-52"><span class="linenos"> 52</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span> <span class="o">=</span> <span class="n">df</span>
+</span><span id="DataFrameWriter-53"><a href="#DataFrameWriter-53"><span class="linenos"> 53</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_spark</span> <span class="o">=</span> <span class="n">spark</span> <span class="ow">or</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span>
+</span><span id="DataFrameWriter-54"><a href="#DataFrameWriter-54"><span class="linenos"> 54</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span>
+</span><span id="DataFrameWriter-55"><a href="#DataFrameWriter-55"><span class="linenos"> 55</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span> <span class="o">=</span> <span class="n">by_name</span>
+</span><span id="DataFrameWriter-56"><a href="#DataFrameWriter-56"><span class="linenos"> 56</span></a>
+</span><span id="DataFrameWriter-57"><a href="#DataFrameWriter-57"><span class="linenos"> 57</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter-58"><a href="#DataFrameWriter-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="n">DataFrameWriter</span><span class="p">(</span>
+</span><span id="DataFrameWriter-59"><a href="#DataFrameWriter-59"><span class="linenos"> 59</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="DataFrameWriter-60"><a href="#DataFrameWriter-60"><span class="linenos"> 60</span></a> <span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">k</span><span class="p">:</span> <span class="n">v</span>
+</span><span id="DataFrameWriter-61"><a href="#DataFrameWriter-61"><span class="linenos"> 61</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">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="DataFrameWriter-62"><a href="#DataFrameWriter-62"><span class="linenos"> 62</span></a> <span class="p">}</span>
+</span><span id="DataFrameWriter-63"><a href="#DataFrameWriter-63"><span class="linenos"> 63</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter-64"><a href="#DataFrameWriter-64"><span class="linenos"> 64</span></a>
+</span><span id="DataFrameWriter-65"><a href="#DataFrameWriter-65"><span class="linenos"> 65</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">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="DataFrameWriter-66"><a href="#DataFrameWriter-66"><span class="linenos"> 66</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="DataFrameWriter-67"><a href="#DataFrameWriter-67"><span class="linenos"> 67</span></a>
+</span><span id="DataFrameWriter-68"><a href="#DataFrameWriter-68"><span class="linenos"> 68</span></a> <span class="k">def</span> <span class="nf">mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">saveMode</span><span 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">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter-69"><a href="#DataFrameWriter-69"><span class="linenos"> 69</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_mode</span><span class="o">=</span><span class="n">saveMode</span><span class="p">)</span>
+</span><span id="DataFrameWriter-70"><a href="#DataFrameWriter-70"><span class="linenos"> 70</span></a>
+</span><span id="DataFrameWriter-71"><a href="#DataFrameWriter-71"><span class="linenos"> 71</span></a> <span class="nd">@property</span>
+</span><span id="DataFrameWriter-72"><a href="#DataFrameWriter-72"><span class="linenos"> 72</span></a> <span class="k">def</span> <span class="nf">byName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DataFrameWriter-73"><a href="#DataFrameWriter-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">by_name</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="DataFrameWriter-74"><a href="#DataFrameWriter-74"><span class="linenos"> 74</span></a>
+</span><span id="DataFrameWriter-75"><a href="#DataFrameWriter-75"><span class="linenos"> 75</span></a> <span class="k">def</span> <span class="nf">insertInto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">overwrite</span><span 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">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter-76"><a href="#DataFrameWriter-76"><span class="linenos"> 76</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
+</span><span id="DataFrameWriter-77"><a href="#DataFrameWriter-77"><span class="linenos"> 77</span></a>
+</span><span id="DataFrameWriter-78"><a href="#DataFrameWriter-78"><span class="linenos"> 78</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">(</span>
+</span><span id="DataFrameWriter-79"><a href="#DataFrameWriter-79"><span class="linenos"> 79</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="DataFrameWriter-80"><a href="#DataFrameWriter-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">),</span>
+</span><span id="DataFrameWriter-81"><a href="#DataFrameWriter-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="n">overwrite</span><span class="p">,</span>
+</span><span id="DataFrameWriter-82"><a href="#DataFrameWriter-82"><span class="linenos"> 82</span></a> <span class="p">}</span>
+</span><span id="DataFrameWriter-83"><a href="#DataFrameWriter-83"><span class="linenos"> 83</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter-84"><a href="#DataFrameWriter-84"><span class="linenos"> 84</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">)</span>
+</span><span id="DataFrameWriter-85"><a href="#DataFrameWriter-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span><span class="p">:</span>
+</span><span id="DataFrameWriter-86"><a href="#DataFrameWriter-86"><span class="linenos"> 86</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">sqlglot</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><span id="DataFrameWriter-87"><a href="#DataFrameWriter-87"><span class="linenos"> 87</span></a> <span class="n">tableName</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 class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="DataFrameWriter-88"><a href="#DataFrameWriter-88"><span class="linenos"> 88</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter-89"><a href="#DataFrameWriter-89"><span class="linenos"> 89</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</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">columns</span><span class="p">)</span>
+</span><span id="DataFrameWriter-90"><a href="#DataFrameWriter-90"><span class="linenos"> 90</span></a>
+</span><span id="DataFrameWriter-91"><a href="#DataFrameWriter-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="n">df</span><span class="p">)</span>
+</span><span id="DataFrameWriter-92"><a href="#DataFrameWriter-92"><span class="linenos"> 92</span></a>
+</span><span id="DataFrameWriter-93"><a href="#DataFrameWriter-93"><span class="linenos"> 93</span></a> <span class="k">def</span> <span class="nf">saveAsTable</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="nb">format</span><span 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="n">mode</span><span 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="DataFrameWriter-94"><a href="#DataFrameWriter-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="nb">format</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrameWriter-95"><a href="#DataFrameWriter-95"><span class="linenos"> 95</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Providing Format in the save as table is not supported&quot;</span><span class="p">)</span>
+</span><span id="DataFrameWriter-96"><a href="#DataFrameWriter-96"><span class="linenos"> 96</span></a> <span class="n">exists</span><span class="p">,</span> <span class="n">replace</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">mode</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">)</span>
+</span><span id="DataFrameWriter-97"><a href="#DataFrameWriter-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;append&quot;</span><span class="p">:</span>
+</span><span id="DataFrameWriter-98"><a href="#DataFrameWriter-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insertInto</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</span><span id="DataFrameWriter-99"><a href="#DataFrameWriter-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span>
+</span><span id="DataFrameWriter-100"><a href="#DataFrameWriter-100"><span class="linenos">100</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DataFrameWriter-101"><a href="#DataFrameWriter-101"><span class="linenos">101</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span>
+</span><span id="DataFrameWriter-102"><a href="#DataFrameWriter-102"><span class="linenos">102</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DataFrameWriter-103"><a href="#DataFrameWriter-103"><span class="linenos">103</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span>
+</span><span id="DataFrameWriter-104"><a href="#DataFrameWriter-104"><span class="linenos">104</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="DataFrameWriter-105"><a href="#DataFrameWriter-105"><span class="linenos">105</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="DataFrameWriter-106"><a href="#DataFrameWriter-106"><span class="linenos">106</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="DataFrameWriter-107"><a href="#DataFrameWriter-107"><span class="linenos">107</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
+</span><span id="DataFrameWriter-108"><a href="#DataFrameWriter-108"><span class="linenos">108</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter-109"><a href="#DataFrameWriter-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">))</span>
</span></pre></div>
@@ -5161,17 +5361,17 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.__init__-36"><a href="#DataFrameWriter.__init__-36"><span class="linenos">36</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="DataFrameWriter.__init__-37"><a href="#DataFrameWriter.__init__-37"><span class="linenos">37</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DataFrameWriter.__init__-38"><a href="#DataFrameWriter.__init__-38"><span class="linenos">38</span></a> <span class="n">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
-</span><span id="DataFrameWriter.__init__-39"><a href="#DataFrameWriter.__init__-39"><span class="linenos">39</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SparkSession</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DataFrameWriter.__init__-40"><a href="#DataFrameWriter.__init__-40"><span class="linenos">40</span></a> <span class="n">mode</span><span 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="DataFrameWriter.__init__-41"><a href="#DataFrameWriter.__init__-41"><span class="linenos">41</span></a> <span class="n">by_name</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="DataFrameWriter.__init__-42"><a href="#DataFrameWriter.__init__-42"><span class="linenos">42</span></a> <span class="p">):</span>
-</span><span id="DataFrameWriter.__init__-43"><a href="#DataFrameWriter.__init__-43"><span class="linenos">43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span> <span class="o">=</span> <span class="n">df</span>
-</span><span id="DataFrameWriter.__init__-44"><a href="#DataFrameWriter.__init__-44"><span class="linenos">44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_spark</span> <span class="o">=</span> <span class="n">spark</span> <span class="ow">or</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span>
-</span><span id="DataFrameWriter.__init__-45"><a href="#DataFrameWriter.__init__-45"><span class="linenos">45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span>
-</span><span id="DataFrameWriter.__init__-46"><a href="#DataFrameWriter.__init__-46"><span class="linenos">46</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span> <span class="o">=</span> <span class="n">by_name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.__init__-45"><a href="#DataFrameWriter.__init__-45"><span class="linenos">45</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="DataFrameWriter.__init__-46"><a href="#DataFrameWriter.__init__-46"><span class="linenos">46</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DataFrameWriter.__init__-47"><a href="#DataFrameWriter.__init__-47"><span class="linenos">47</span></a> <span class="n">df</span><span class="p">:</span> <span class="n">DataFrame</span><span class="p">,</span>
+</span><span id="DataFrameWriter.__init__-48"><a href="#DataFrameWriter.__init__-48"><span class="linenos">48</span></a> <span class="n">spark</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">SparkSession</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DataFrameWriter.__init__-49"><a href="#DataFrameWriter.__init__-49"><span class="linenos">49</span></a> <span class="n">mode</span><span 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="DataFrameWriter.__init__-50"><a href="#DataFrameWriter.__init__-50"><span class="linenos">50</span></a> <span class="n">by_name</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="DataFrameWriter.__init__-51"><a href="#DataFrameWriter.__init__-51"><span class="linenos">51</span></a> <span class="p">):</span>
+</span><span id="DataFrameWriter.__init__-52"><a href="#DataFrameWriter.__init__-52"><span class="linenos">52</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span> <span class="o">=</span> <span class="n">df</span>
+</span><span id="DataFrameWriter.__init__-53"><a href="#DataFrameWriter.__init__-53"><span class="linenos">53</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_spark</span> <span class="o">=</span> <span class="n">spark</span> <span class="ow">or</span> <span class="n">df</span><span class="o">.</span><span class="n">spark</span>
+</span><span id="DataFrameWriter.__init__-54"><a href="#DataFrameWriter.__init__-54"><span class="linenos">54</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span>
+</span><span id="DataFrameWriter.__init__-55"><a href="#DataFrameWriter.__init__-55"><span class="linenos">55</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span> <span class="o">=</span> <span class="n">by_name</span>
</span></pre></div>
@@ -5189,13 +5389,13 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter.copy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.copy-48"><a href="#DataFrameWriter.copy-48"><span class="linenos">48</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter.copy-49"><a href="#DataFrameWriter.copy-49"><span class="linenos">49</span></a> <span class="k">return</span> <span class="n">DataFrameWriter</span><span class="p">(</span>
-</span><span id="DataFrameWriter.copy-50"><a href="#DataFrameWriter.copy-50"><span class="linenos">50</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="DataFrameWriter.copy-51"><a href="#DataFrameWriter.copy-51"><span class="linenos">51</span></a> <span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">k</span><span class="p">:</span> <span class="n">v</span>
-</span><span id="DataFrameWriter.copy-52"><a href="#DataFrameWriter.copy-52"><span class="linenos">52</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">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="DataFrameWriter.copy-53"><a href="#DataFrameWriter.copy-53"><span class="linenos">53</span></a> <span class="p">}</span>
-</span><span id="DataFrameWriter.copy-54"><a href="#DataFrameWriter.copy-54"><span class="linenos">54</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.copy-57"><a href="#DataFrameWriter.copy-57"><span class="linenos">57</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter.copy-58"><a href="#DataFrameWriter.copy-58"><span class="linenos">58</span></a> <span class="k">return</span> <span class="n">DataFrameWriter</span><span class="p">(</span>
+</span><span id="DataFrameWriter.copy-59"><a href="#DataFrameWriter.copy-59"><span class="linenos">59</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="DataFrameWriter.copy-60"><a href="#DataFrameWriter.copy-60"><span class="linenos">60</span></a> <span class="n">k</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">k</span><span class="p">:</span> <span class="n">v</span>
+</span><span id="DataFrameWriter.copy-61"><a href="#DataFrameWriter.copy-61"><span class="linenos">61</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">object_to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="DataFrameWriter.copy-62"><a href="#DataFrameWriter.copy-62"><span class="linenos">62</span></a> <span class="p">}</span>
+</span><span id="DataFrameWriter.copy-63"><a href="#DataFrameWriter.copy-63"><span class="linenos">63</span></a> <span class="p">)</span>
</span></pre></div>
@@ -5213,8 +5413,8 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter.sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.sql-56"><a href="#DataFrameWriter.sql-56"><span class="linenos">56</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">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="DataFrameWriter.sql-57"><a href="#DataFrameWriter.sql-57"><span class="linenos">57</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">sql</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="DataFrameWriter.sql-65"><a href="#DataFrameWriter.sql-65"><span class="linenos">65</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">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="DataFrameWriter.sql-66"><a href="#DataFrameWriter.sql-66"><span class="linenos">66</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
@@ -5232,8 +5432,8 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter.mode"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.mode-59"><a href="#DataFrameWriter.mode-59"><span class="linenos">59</span></a> <span class="k">def</span> <span class="nf">mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">saveMode</span><span 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">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter.mode-60"><a href="#DataFrameWriter.mode-60"><span class="linenos">60</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_mode</span><span class="o">=</span><span class="n">saveMode</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.mode-68"><a href="#DataFrameWriter.mode-68"><span class="linenos">68</span></a> <span class="k">def</span> <span class="nf">mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">saveMode</span><span 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">-&gt;</span> <span class="n">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter.mode-69"><a href="#DataFrameWriter.mode-69"><span class="linenos">69</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_mode</span><span class="o">=</span><span class="n">saveMode</span><span class="p">)</span>
</span></pre></div>
@@ -5262,19 +5462,23 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter.insertInto"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.insertInto-66"><a href="#DataFrameWriter.insertInto-66"><span class="linenos">66</span></a> <span class="k">def</span> <span class="nf">insertInto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">overwrite</span><span 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">DataFrameWriter</span><span class="p">:</span>
-</span><span id="DataFrameWriter.insertInto-67"><a href="#DataFrameWriter.insertInto-67"><span class="linenos">67</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">(</span>
-</span><span id="DataFrameWriter.insertInto-68"><a href="#DataFrameWriter.insertInto-68"><span class="linenos">68</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="DataFrameWriter.insertInto-69"><a href="#DataFrameWriter.insertInto-69"><span class="linenos">69</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">),</span>
-</span><span id="DataFrameWriter.insertInto-70"><a href="#DataFrameWriter.insertInto-70"><span class="linenos">70</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="n">overwrite</span><span class="p">,</span>
-</span><span id="DataFrameWriter.insertInto-71"><a href="#DataFrameWriter.insertInto-71"><span class="linenos">71</span></a> <span class="p">}</span>
-</span><span id="DataFrameWriter.insertInto-72"><a href="#DataFrameWriter.insertInto-72"><span class="linenos">72</span></a> <span class="p">)</span>
-</span><span id="DataFrameWriter.insertInto-73"><a href="#DataFrameWriter.insertInto-73"><span class="linenos">73</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">)</span>
-</span><span id="DataFrameWriter.insertInto-74"><a href="#DataFrameWriter.insertInto-74"><span class="linenos">74</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span><span class="p">:</span>
-</span><span id="DataFrameWriter.insertInto-75"><a href="#DataFrameWriter.insertInto-75"><span class="linenos">75</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">sqlglot</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">tableName</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 class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
-</span><span id="DataFrameWriter.insertInto-76"><a href="#DataFrameWriter.insertInto-76"><span class="linenos">76</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</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">columns</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.insertInto-75"><a href="#DataFrameWriter.insertInto-75"><span class="linenos">75</span></a> <span class="k">def</span> <span class="nf">insertInto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">overwrite</span><span 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">DataFrameWriter</span><span class="p">:</span>
+</span><span id="DataFrameWriter.insertInto-76"><a href="#DataFrameWriter.insertInto-76"><span class="linenos">76</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dataframe.sql.session</span> <span class="kn">import</span> <span class="n">SparkSession</span>
</span><span id="DataFrameWriter.insertInto-77"><a href="#DataFrameWriter.insertInto-77"><span class="linenos">77</span></a>
-</span><span id="DataFrameWriter.insertInto-78"><a href="#DataFrameWriter.insertInto-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="n">df</span><span class="p">)</span>
+</span><span id="DataFrameWriter.insertInto-78"><a href="#DataFrameWriter.insertInto-78"><span class="linenos">78</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">(</span>
+</span><span id="DataFrameWriter.insertInto-79"><a href="#DataFrameWriter.insertInto-79"><span class="linenos">79</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="DataFrameWriter.insertInto-80"><a href="#DataFrameWriter.insertInto-80"><span class="linenos">80</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">tableName</span><span class="p">),</span>
+</span><span id="DataFrameWriter.insertInto-81"><a href="#DataFrameWriter.insertInto-81"><span class="linenos">81</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="n">overwrite</span><span class="p">,</span>
+</span><span id="DataFrameWriter.insertInto-82"><a href="#DataFrameWriter.insertInto-82"><span class="linenos">82</span></a> <span class="p">}</span>
+</span><span id="DataFrameWriter.insertInto-83"><a href="#DataFrameWriter.insertInto-83"><span class="linenos">83</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter.insertInto-84"><a href="#DataFrameWriter.insertInto-84"><span class="linenos">84</span></a> <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">)</span>
+</span><span id="DataFrameWriter.insertInto-85"><a href="#DataFrameWriter.insertInto-85"><span class="linenos">85</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_by_name</span><span class="p">:</span>
+</span><span id="DataFrameWriter.insertInto-86"><a href="#DataFrameWriter.insertInto-86"><span class="linenos">86</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">sqlglot</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><span id="DataFrameWriter.insertInto-87"><a href="#DataFrameWriter.insertInto-87"><span class="linenos">87</span></a> <span class="n">tableName</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 class="n">dialect</span><span class="o">=</span><span class="n">SparkSession</span><span class="p">()</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="DataFrameWriter.insertInto-88"><a href="#DataFrameWriter.insertInto-88"><span class="linenos">88</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter.insertInto-89"><a href="#DataFrameWriter.insertInto-89"><span class="linenos">89</span></a> <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">_convert_leaf_to_cte</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">columns</span><span class="p">)</span>
+</span><span id="DataFrameWriter.insertInto-90"><a href="#DataFrameWriter.insertInto-90"><span class="linenos">90</span></a>
+</span><span id="DataFrameWriter.insertInto-91"><a href="#DataFrameWriter.insertInto-91"><span class="linenos">91</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="n">df</span><span class="p">)</span>
</span></pre></div>
@@ -5292,23 +5496,23 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
</div>
<a class="headerlink" href="#DataFrameWriter.saveAsTable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.saveAsTable-80"><a href="#DataFrameWriter.saveAsTable-80"><span class="linenos">80</span></a> <span class="k">def</span> <span class="nf">saveAsTable</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="nb">format</span><span 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="n">mode</span><span 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="DataFrameWriter.saveAsTable-81"><a href="#DataFrameWriter.saveAsTable-81"><span class="linenos">81</span></a> <span class="k">if</span> <span class="nb">format</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataFrameWriter.saveAsTable-82"><a href="#DataFrameWriter.saveAsTable-82"><span class="linenos">82</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Providing Format in the save as table is not supported&quot;</span><span class="p">)</span>
-</span><span id="DataFrameWriter.saveAsTable-83"><a href="#DataFrameWriter.saveAsTable-83"><span class="linenos">83</span></a> <span class="n">exists</span><span class="p">,</span> <span class="n">replace</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">mode</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">)</span>
-</span><span id="DataFrameWriter.saveAsTable-84"><a href="#DataFrameWriter.saveAsTable-84"><span class="linenos">84</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;append&quot;</span><span class="p">:</span>
-</span><span id="DataFrameWriter.saveAsTable-85"><a href="#DataFrameWriter.saveAsTable-85"><span class="linenos">85</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insertInto</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
-</span><span id="DataFrameWriter.saveAsTable-86"><a href="#DataFrameWriter.saveAsTable-86"><span class="linenos">86</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span>
-</span><span id="DataFrameWriter.saveAsTable-87"><a href="#DataFrameWriter.saveAsTable-87"><span class="linenos">87</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="DataFrameWriter.saveAsTable-88"><a href="#DataFrameWriter.saveAsTable-88"><span class="linenos">88</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span>
-</span><span id="DataFrameWriter.saveAsTable-89"><a href="#DataFrameWriter.saveAsTable-89"><span class="linenos">89</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="DataFrameWriter.saveAsTable-90"><a href="#DataFrameWriter.saveAsTable-90"><span class="linenos">90</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span>
-</span><span id="DataFrameWriter.saveAsTable-91"><a href="#DataFrameWriter.saveAsTable-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">to_table</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="DataFrameWriter.saveAsTable-92"><a href="#DataFrameWriter.saveAsTable-92"><span class="linenos">92</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="DataFrameWriter.saveAsTable-93"><a href="#DataFrameWriter.saveAsTable-93"><span class="linenos">93</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="DataFrameWriter.saveAsTable-94"><a href="#DataFrameWriter.saveAsTable-94"><span class="linenos">94</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
-</span><span id="DataFrameWriter.saveAsTable-95"><a href="#DataFrameWriter.saveAsTable-95"><span class="linenos">95</span></a> <span class="p">)</span>
-</span><span id="DataFrameWriter.saveAsTable-96"><a href="#DataFrameWriter.saveAsTable-96"><span class="linenos">96</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataFrameWriter.saveAsTable-93"><a href="#DataFrameWriter.saveAsTable-93"><span class="linenos"> 93</span></a> <span class="k">def</span> <span class="nf">saveAsTable</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="nb">format</span><span 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="n">mode</span><span 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="DataFrameWriter.saveAsTable-94"><a href="#DataFrameWriter.saveAsTable-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="nb">format</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataFrameWriter.saveAsTable-95"><a href="#DataFrameWriter.saveAsTable-95"><span class="linenos"> 95</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Providing Format in the save as table is not supported&quot;</span><span class="p">)</span>
+</span><span id="DataFrameWriter.saveAsTable-96"><a href="#DataFrameWriter.saveAsTable-96"><span class="linenos"> 96</span></a> <span class="n">exists</span><span class="p">,</span> <span class="n">replace</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">mode</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">)</span>
+</span><span id="DataFrameWriter.saveAsTable-97"><a href="#DataFrameWriter.saveAsTable-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;append&quot;</span><span class="p">:</span>
+</span><span id="DataFrameWriter.saveAsTable-98"><a href="#DataFrameWriter.saveAsTable-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insertInto</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</span><span id="DataFrameWriter.saveAsTable-99"><a href="#DataFrameWriter.saveAsTable-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span>
+</span><span id="DataFrameWriter.saveAsTable-100"><a href="#DataFrameWriter.saveAsTable-100"><span class="linenos">100</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DataFrameWriter.saveAsTable-101"><a href="#DataFrameWriter.saveAsTable-101"><span class="linenos">101</span></a> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span>
+</span><span id="DataFrameWriter.saveAsTable-102"><a href="#DataFrameWriter.saveAsTable-102"><span class="linenos">102</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DataFrameWriter.saveAsTable-103"><a href="#DataFrameWriter.saveAsTable-103"><span class="linenos">103</span></a> <span class="n">output_expression_container</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span>
+</span><span id="DataFrameWriter.saveAsTable-104"><a href="#DataFrameWriter.saveAsTable-104"><span class="linenos">104</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">to_table</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="DataFrameWriter.saveAsTable-105"><a href="#DataFrameWriter.saveAsTable-105"><span class="linenos">105</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="DataFrameWriter.saveAsTable-106"><a href="#DataFrameWriter.saveAsTable-106"><span class="linenos">106</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="DataFrameWriter.saveAsTable-107"><a href="#DataFrameWriter.saveAsTable-107"><span class="linenos">107</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
+</span><span id="DataFrameWriter.saveAsTable-108"><a href="#DataFrameWriter.saveAsTable-108"><span class="linenos">108</span></a> <span class="p">)</span>
+</span><span id="DataFrameWriter.saveAsTable-109"><a href="#DataFrameWriter.saveAsTable-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">_df</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_df</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">output_expression_container</span><span class="o">=</span><span class="n">output_expression_container</span><span class="p">))</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects.html b/docs/sqlglot/dialects.html
index 5fe8470..3eec625 100644
--- a/docs/sqlglot/dialects.html
+++ b/docs/sqlglot/dialects.html
@@ -38,6 +38,7 @@
<li><a href="dialects/clickhouse.html">clickhouse</a></li>
<li><a href="dialects/databricks.html">databricks</a></li>
<li><a href="dialects/dialect.html">dialect</a></li>
+ <li><a href="dialects/doris.html">doris</a></li>
<li><a href="dialects/drill.html">drill</a></li>
<li><a href="dialects/duckdb.html">duckdb</a></li>
<li><a href="dialects/hive.html">hive</a></li>
@@ -195,23 +196,24 @@ logic for some expressions; this is usually done by adding new entries to the <c
</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.clickhouse</span> <span class="kn">import</span> <span class="n">ClickHouse</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.databricks</span> <span class="kn">import</span> <span class="n">Databricks</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos">62</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 class="p">,</span> <span class="n">Dialects</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.drill</span> <span class="kn">import</span> <span class="n">Drill</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.duckdb</span> <span class="kn">import</span> <span class="n">DuckDB</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos">65</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-66"><a href="#L-66"><span class="linenos">66</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.oracle</span> <span class="kn">import</span> <span class="n">Oracle</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.postgres</span> <span class="kn">import</span> <span class="n">Postgres</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.presto</span> <span class="kn">import</span> <span class="n">Presto</span>
-</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.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><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.doris</span> <span class="kn">import</span> <span class="n">Doris</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.drill</span> <span class="kn">import</span> <span class="n">Drill</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.duckdb</span> <span class="kn">import</span> <span class="n">DuckDB</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos">66</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-67"><a href="#L-67"><span class="linenos">67</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.oracle</span> <span class="kn">import</span> <span class="n">Oracle</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.postgres</span> <span class="kn">import</span> <span class="n">Postgres</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.presto</span> <span class="kn">import</span> <span class="n">Presto</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.redshift</span> <span class="kn">import</span> <span class="n">Redshift</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.snowflake</span> <span class="kn">import</span> <span class="n">Snowflake</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.spark</span> <span class="kn">import</span> <span class="n">Spark</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.spark2</span> <span class="kn">import</span> <span class="n">Spark2</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.sqlite</span> <span class="kn">import</span> <span class="n">SQLite</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.starrocks</span> <span class="kn">import</span> <span class="n">StarRocks</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.tableau</span> <span class="kn">import</span> <span class="n">Tableau</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.teradata</span> <span class="kn">import</span> <span class="n">Teradata</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.trino</span> <span class="kn">import</span> <span class="n">Trino</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos">80</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 56e23af..2385883 100644
--- a/docs/sqlglot/dialects/bigquery.html
+++ b/docs/sqlglot/dialects/bigquery.html
@@ -100,6 +100,9 @@
<a class="variable" href="#BigQuery.Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a>
</li>
<li>
+ <a class="variable" href="#BigQuery.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#BigQuery.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
@@ -121,6 +124,9 @@
<a class="variable" href="#BigQuery.Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#BigQuery.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#BigQuery.Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a>
</li>
<li>
@@ -175,6 +181,9 @@
<a class="variable" href="#BigQuery.Generator.ESCAPE_LINE_BREAK">ESCAPE_LINE_BREAK</a>
</li>
<li>
+ <a class="variable" href="#BigQuery.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#BigQuery.Generator.TRANSFORMS">TRANSFORMS</a>
</li>
<li>
@@ -220,6 +229,9 @@
<a class="function" href="#BigQuery.Generator.with_properties">with_properties</a>
</li>
<li>
+ <a class="function" href="#BigQuery.Generator.version_sql">version_sql</a>
+ </li>
+ <li>
<a class="variable" href="#BigQuery.Generator.INVERSE_TIME_MAPPING">INVERSE_TIME_MAPPING</a>
</li>
<li>
@@ -247,10 +259,7 @@
<a class="variable" href="#BigQuery.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#BigQuery.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#BigQuery.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#BigQuery.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#BigQuery.Generator.BIT_START">BIT_START</a>
@@ -364,624 +373,647 @@
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">format_time_lambda</span><span class="p">,</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">parse_date_delta_with_interval</span><span class="p">,</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">rename_func</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 class="p">,</span> <span class="n">split_num_words</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 class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">parse_date_delta_with_interval</span><span class="p">,</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="p">)</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span><span class="p">,</span> <span class="n">split_num_words</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.tokens</span> <span class="kn">import</span> <span class="n">TokenType</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">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
</span><span id="L-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">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">data_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</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="o">.</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-33"><a href="#L-33"><span class="linenos"> 33</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-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">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-36"><a href="#L-36"><span class="linenos"> 36</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">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 class="p">)</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">interval</span> <span class="o">=</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="o">.</span><span class="n">copy</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-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;</span><span class="si">{</span><span class="n">data_type</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">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">interval</span><span class="p">)</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 class="k">return</span> <span class="n">func</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
+</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">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">data_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</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="o">.</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-34"><a href="#L-34"><span class="linenos"> 34</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-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="n">expression</span><span class="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-37"><a href="#L-37"><span class="linenos"> 37</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">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 class="p">)</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">interval</span> <span class="o">=</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="o">.</span><span class="n">copy</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-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_type</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">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">interval</span><span class="p">)</span><span class="si">}</span><span class="s2">)&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">return</span> <span class="n">func</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">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-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</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-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="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-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="n">structs</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="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-53"><a href="#L-53"><span class="linenos"> 53</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-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">t</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</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">columns</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">else</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;_c</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">expressions</span><span class="p">))),</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="p">]</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="p">)</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span 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-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 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-65"><a href="#L-65"><span class="linenos"> 65</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">_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-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</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-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="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-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="n">structs</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-54"><a href="#L-54"><span class="linenos"> 54</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-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">t</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</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">columns</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">else</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;_c</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">expressions</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="p">]</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">)</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span 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-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">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-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">_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-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">else</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="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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</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">_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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</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-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">this</span> <span 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-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;RETURNS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="k">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-77"><a href="#L-77"><span class="linenos"> 77</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-78"><a href="#L-78"><span class="linenos"> 78</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-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">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-81"><a href="#L-81"><span class="linenos"> 81</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-82"><a href="#L-82"><span class="linenos"> 82</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-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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="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">Literal</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">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-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="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-88"><a href="#L-88"><span class="linenos"> 88</span></a>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">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-90"><a href="#L-90"><span class="linenos"> 90</span></a>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="k">def</span> <span class="nf">_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-78"><a href="#L-78"><span class="linenos"> 78</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-79"><a href="#L-79"><span class="linenos"> 79</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-80"><a href="#L-80"><span class="linenos"> 80</span></a>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">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-82"><a href="#L-82"><span class="linenos"> 82</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-83"><a href="#L-83"><span class="linenos"> 83</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-84"><a href="#L-84"><span class="linenos"> 84</span></a>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="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">Literal</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">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-87"><a href="#L-87"><span class="linenos"> 87</span></a>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">return</span> <span class="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-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">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-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">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-93"><a href="#L-93"><span class="linenos"> 93</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-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="sd"> These are added by the optimizer&#39;s qualify_column step.</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</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><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="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-100"><a href="#L-100"><span class="linenos">100</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">find_all</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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unnest</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">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">))</span> <span class="ow">and</span> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</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-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</span></a>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">expression</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 class="c1"># https://issuetracker.google.com/issues/162294746</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="c1"># workaround for bigquery bug when grouping by an expression and then ordering</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a><span class="c1"># WITH x AS (SELECT 1 y)</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a><span class="c1"># SELECT y + 1 z</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="c1"># FROM x</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="c1"># GROUP BY x + 1</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="c1"># ORDER by z</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="k">def</span> <span class="nf">_alias_ordered_group</span><span 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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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-119"><a href="#L-119"><span class="linenos">119</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-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">if</span> <span class="n">group</span> <span class="ow">and</span> <span class="n">order</span><span class="p">:</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">select</span><span class="o">.</span><span class="n">this</span><span class="p">:</span> <span class="n">select</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-124"><a href="#L-124"><span class="linenos">124</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><span id="L-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="p">}</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="k">def</span> <span class="nf">_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-94"><a href="#L-94"><span class="linenos"> 94</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-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="sd"> These are added by the optimizer&#39;s qualify_column step.</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">find_all_in_scope</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">unnest_aliases</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">for</span> <span class="n">unnest</span> <span class="ow">in</span> <span class="n">find_all_in_scope</span><span 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><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unnest</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">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">))</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="p">}</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="n">unnest_aliases</span><span class="p">:</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <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">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">unnest_aliases</span><span class="p">:</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">column</span><span class="o">.</span><span class="n">db</span> <span class="ow">in</span> <span class="n">unnest_aliases</span><span class="p">:</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="kc">None</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">return</span> <span class="n">expression</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="c1"># https://issuetracker.google.com/issues/162294746</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="c1"># workaround for bigquery bug when grouping by an expression and then ordering</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="c1"># WITH x AS (SELECT 1 y)</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a><span class="c1"># SELECT y + 1 z</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="c1"># FROM x</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="c1"># GROUP BY x + 1</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="c1"># ORDER by z</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="k">def</span> <span class="nf">_alias_ordered_group</span><span 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-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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-126"><a href="#L-126"><span class="linenos">126</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-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">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">e</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">alias</span><span class="p">))</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
-</span><span id="L-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">_pushdown_cte_column_names</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;BigQuery doesn&#39;t allow column names when defining a CTE, so we try to push them down.&quot;&quot;&quot;</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">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">cte_query</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="n">cte_query</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">&quot;Can&#39;t push down CTE column names for star queries. Run the query through&quot;</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot; the optimizer or use &#39;qualify&#39; to expand the star projections first.&quot;</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <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">expression</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">group</span> <span class="ow">and</span> <span class="n">order</span><span class="p">:</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">select</span><span class="o">.</span><span class="n">this</span><span class="p">:</span> <span class="n">select</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-131"><a href="#L-131"><span class="linenos">131</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><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">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-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><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">expressions</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">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">e</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">alias</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">return</span> <span class="n">expression</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="k">def</span> <span class="nf">_pushdown_cte_column_names</span><span 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-145"><a href="#L-145"><span class="linenos">145</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;BigQuery doesn&#39;t allow column names when defining a CTE, so we try to push them down.&quot;&quot;&quot;</span>
+</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">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">cte_query</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">column_names</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-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;alias&quot;</span><span class="p">]</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="kc">None</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">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">select</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">column_names</span><span class="p">,</span> <span class="n">cte_query</span><span class="o">.</span><span class="n">selects</span><span class="p">):</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</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">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-156"><a href="#L-156"><span class="linenos">156</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-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"># Inner aliases are shadowed by the CTE column names</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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">alias_</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">name</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">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><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="k">def</span> <span class="nf">_parse_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</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">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;bigquery&quot;</span><span class="p">)([</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">seq_get</span><span 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">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">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="k">return</span> <span class="n">this</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">if</span> <span class="n">cte_query</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="s2">&quot;Can&#39;t push down CTE column names for star queries. Run the query through&quot;</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="s2">&quot; the optimizer or use &#39;qualify&#39; to expand the star projections first.&quot;</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 class="k">return</span> <span class="n">expression</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">column_names</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-157"><a href="#L-157"><span class="linenos">157</span></a> <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">set</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-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">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">select</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">column_names</span><span class="p">,</span> <span class="n">cte_query</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">to_replace</span> <span class="o">=</span> <span class="n">select</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="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-163"><a href="#L-163"><span class="linenos">163</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-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="c1"># Inner aliases are shadowed by the CTE column names</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</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">alias_</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">return</span> <span class="n">expression</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">_parse_date</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">expr_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span> <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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="n">expr_type</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-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">_parse_to_hex</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="c1"># TO_HEX(MD5(..)) is common in BigQuery, so it&#39;s parsed into MD5 to simplify its transpilation</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">seq_get</span><span 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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>
+</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">_parse_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</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">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;bigquery&quot;</span><span class="p">)([</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">seq_get</span><span 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">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="n">this</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><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a><span class="k">def</span> <span class="nf">_parse_date</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">expr_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span> <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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">expr_type</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a><span class="k">class</span> <span class="nc">BigQuery</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">True</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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#case_sensitivity</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">def</span> <span class="nf">_parse_to_hex</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="c1"># TO_HEX(MD5(..)) is common in BigQuery, so it&#39;s parsed into MD5 to simplify its transpilation</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">seq_get</span><span 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="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="c1"># bigquery udfs are case sensitive</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;%D&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <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">class</span> <span class="nc">BigQuery</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">True</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"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#case_sensitivity</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">FORMAT_MAPPING</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="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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</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><span id="L-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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><span id="L-203"><a href="#L-203"><span class="linenos">203</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><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;SSSSS&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-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;TZH&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&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="c1"># The _PARTITIONTIME and _PARTITIONDATE pseudo-columns are not returned by a SELECT * statement</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/querying-partitioned-tables#query_an_ingestion-time_partitioned_table</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">PSEUDOCOLUMNS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;_PARTITIONTIME&quot;</span><span class="p">,</span> <span class="s2">&quot;_PARTITIONDATE&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="nd">@classmethod</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="c1"># In BigQuery, CTEs aren&#39;t case-sensitive, but table names are (by default, at least).</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="c1"># The following check is essentially a heuristic to detect tables based on whether or</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="c1"># not they&#39;re qualified.</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</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">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-223"><a href="#L-223"><span class="linenos">223</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-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">if</span> <span class="p">(</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="ow">not</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">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="n">parent</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_table&quot;</span><span class="p">)</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="p">):</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="c1"># bigquery udfs are case sensitive</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">TIME_MAPPING</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="s2">&quot;%D&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
+</span><span id="L-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">FORMAT_MAPPING</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;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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</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><span id="L-206"><a href="#L-206"><span class="linenos">206</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-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><span id="L-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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><span id="L-210"><a href="#L-210"><span class="linenos">210</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><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;SSSSS&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-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;TZH&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><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="c1"># The _PARTITIONTIME and _PARTITIONDATE pseudo-columns are not returned by a SELECT * statement</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/querying-partitioned-tables#query_an_ingestion-time_partitioned_table</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">PSEUDOCOLUMNS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;_PARTITIONTIME&quot;</span><span class="p">,</span> <span class="s2">&quot;_PARTITIONDATE&quot;</span><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="nd">@classmethod</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="c1"># In BigQuery, CTEs aren&#39;t case-sensitive, but table names are (by default, at least).</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="c1"># The following check is essentially a heuristic to detect tables based on whether or</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="c1"># not they&#39;re qualified.</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">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-230"><a href="#L-230"><span class="linenos">230</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-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">return</span> <span class="n">expression</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">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-235"><a href="#L-235"><span class="linenos">235</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 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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-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="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-241"><a href="#L-241"><span class="linenos">241</span></a>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</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 class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</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">RAW_STRINGS</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="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;RECORD&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-261"><a href="#L-261"><span class="linenos">261</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">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-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 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-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">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-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</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><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="n">LOG_BASE_FIRST</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 class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</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="n">FUNCTIONS</span> <span class="o">=</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_date</span><span class="p">,</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</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-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</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="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><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="p">),</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span 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-283"><a href="#L-283"><span class="linenos">283</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-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;GENERATE_ARRAY&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-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">_parse_to_hex</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;PARSE_DATE&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">StrToDate</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</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 class="n">seq_get</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">seq_get</span><span 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-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="s2">&quot;PARSE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_timestamp</span><span class="p">,</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="p">),</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="ow">not</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">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="n">parent</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_table&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">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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="L-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">return</span> <span class="n">expression</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">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-242"><a href="#L-242"><span class="linenos">242</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 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-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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-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">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-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">BYTE_STRINGS</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="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">)</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="p">]</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="p">]</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;RECORD&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-268"><a href="#L-268"><span class="linenos">268</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">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;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-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;FOR SYSTEM_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="p">}</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</span></a>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</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">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_date</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">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-287"><a href="#L-287"><span class="linenos">287</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-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</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="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><span id="L-290"><a href="#L-290"><span class="linenos">290</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-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 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-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="s2">&quot;GENERATE_ARRAY&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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">_parse_to_hex</span><span class="p">,</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;PARSE_DATE&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">StrToDate</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">)(</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="p">[</span><span class="n">seq_get</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">seq_get</span><span 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-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="p">),</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_timestamp</span><span class="p">,</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="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-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="p">),</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="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-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="s2">&quot;TO_JSON_STRING&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-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="p">}</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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-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">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-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="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</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">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-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><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</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">TABLE</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="p">}</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</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><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="p">}</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</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-338"><a href="#L-338"><span class="linenos">338</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-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="p">),</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="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-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">CONSTRAINT_PARSERS</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="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><span id="L-345"><a href="#L-345"><span class="linenos">345</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-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="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names</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">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-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</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">DASH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</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">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">table_name</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</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">this</span> <span class="o">=</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">table_name</span><span class="p">,</span> <span class="n">quoted</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;quoted&quot;</span><span class="p">))</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</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-307"><a href="#L-307"><span class="linenos">307</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-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">else</span> <span class="kc">None</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="s2">&quot;SHA256&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">256</span><span class="p">)),</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="s2">&quot;SHA512&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">512</span><span class="p">)),</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="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-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="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-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;TO_JSON_STRING&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-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">FUNCTION_PARSERS</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">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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="p">}</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">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-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">NO_PAREN_FUNCTIONS</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="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><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">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-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">NESTED_TYPE_TOKENS</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">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><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">TABLE</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="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</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><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">VALUES</span><span class="p">,</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="p">}</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</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-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="p">),</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="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-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><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</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><span id="L-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="p">}</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">def</span> <span class="nf">_parse_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">Table</span><span class="p">:</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</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">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">Optional</span><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">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <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">table</span><span class="o">.</span><span class="n">name</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-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="p">)</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</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">DASH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">table_name</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</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">rest</span> <span class="ow">and</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 class="n">this</span> <span class="o">=</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">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="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</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="n">table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</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><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">return</span> <span class="n">table</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">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-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">this</span> <span class="o">=</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">table_name</span><span class="p">,</span> <span class="n">quoted</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;quoted&quot;</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">return</span> <span class="n">this</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">_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">Table</span><span class="p">:</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <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">Optional</span><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">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">split_num_words</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">name</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-380"><a href="#L-380"><span class="linenos">380</span></a> <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">if</span> <span class="n">rest</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">this</span> <span class="o">=</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">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="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">]))</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</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><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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span 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-389"><a href="#L-389"><span class="linenos">389</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-390"><a href="#L-390"><span class="linenos">390</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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_pushdown_cte_column_names</span><span class="p">]),</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</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;DATE&quot;</span><span class="p">),</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-399"><a href="#L-399"><span class="linenos">399</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-400"><a href="#L-400"><span class="linenos">400</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-401"><a href="#L-401"><span class="linenos">401</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-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GENERATE_ARRAY&quot;</span><span class="p">),</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</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-407"><a href="#L-407"><span class="linenos">407</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_STRING&quot;</span><span class="p">),</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</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">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;TO_HEX&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;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-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MD5&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">Min</span><span class="p">:</span> <span class="n">min_or_least</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">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-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">e</span><span class="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">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-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">),</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="p">),</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-422"><a href="#L-422"><span class="linenos">422</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-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="p">[</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">_unqualify_unnest</span><span class="p">,</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</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-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">_alias_ordered_group</span><span class="p">,</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="p">]</span>
-</span><span id="L-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">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-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;PARSE_DATE(</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-435"><a href="#L-435"><span class="linenos">435</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="s2">&quot;PARSE_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 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-437"><a href="#L-437"><span class="linenos">437</span></a> <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">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-439"><a href="#L-439"><span class="linenos">439</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-440"><a href="#L-440"><span class="linenos">440</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-441"><a href="#L-441"><span class="linenos">441</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-442"><a href="#L-442"><span class="linenos">442</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-443"><a href="#L-443"><span class="linenos">443</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-444"><a href="#L-444"><span class="linenos">444</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-445"><a href="#L-445"><span class="linenos">445</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-446"><a href="#L-446"><span class="linenos">446</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-447"><a href="#L-447"><span class="linenos">447</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-448"><a href="#L-448"><span class="linenos">448</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-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="p">}</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTES&quot;</span><span class="p">,</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">exp</span><span 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-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">exp</span><span 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-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">exp</span><span 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-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">exp</span><span 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-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">exp</span><span 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-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">exp</span><span 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-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">exp</span><span 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-473"><a href="#L-473"><span class="linenos">473</span></a> <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="n">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</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-478"><a href="#L-478"><span class="linenos">478</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-479"><a href="#L-479"><span class="linenos">479</span></a> <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"># from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">RESERVED_KEYWORDS</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">RESERVED_KEYWORDS</span><span class="p">,</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="s2">&quot;and&quot;</span><span class="p">,</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="s2">&quot;array&quot;</span><span class="p">,</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="s2">&quot;as&quot;</span><span class="p">,</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="s2">&quot;asc&quot;</span><span class="p">,</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="s2">&quot;assert_rows_modified&quot;</span><span class="p">,</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="s2">&quot;at&quot;</span><span class="p">,</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="s2">&quot;between&quot;</span><span class="p">,</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="s2">&quot;by&quot;</span><span class="p">,</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="s2">&quot;case&quot;</span><span class="p">,</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="s2">&quot;cast&quot;</span><span class="p">,</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">,</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="s2">&quot;contains&quot;</span><span class="p">,</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="s2">&quot;create&quot;</span><span class="p">,</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="s2">&quot;cross&quot;</span><span class="p">,</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">,</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="s2">&quot;current&quot;</span><span class="p">,</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="s2">&quot;define&quot;</span><span class="p">,</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="s2">&quot;desc&quot;</span><span class="p">,</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">,</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="s2">&quot;end&quot;</span><span class="p">,</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="s2">&quot;enum&quot;</span><span class="p">,</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="s2">&quot;escape&quot;</span><span class="p">,</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="s2">&quot;except&quot;</span><span class="p">,</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="s2">&quot;exclude&quot;</span><span class="p">,</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">,</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="s2">&quot;extract&quot;</span><span class="p">,</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="s2">&quot;fetch&quot;</span><span class="p">,</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="s2">&quot;following&quot;</span><span class="p">,</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="s2">&quot;for&quot;</span><span class="p">,</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="s2">&quot;full&quot;</span><span class="p">,</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="s2">&quot;group&quot;</span><span class="p">,</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="s2">&quot;grouping&quot;</span><span class="p">,</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="s2">&quot;groups&quot;</span><span class="p">,</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="s2">&quot;hash&quot;</span><span class="p">,</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="s2">&quot;having&quot;</span><span class="p">,</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="s2">&quot;if&quot;</span><span class="p">,</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">,</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="s2">&quot;in&quot;</span><span class="p">,</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="s2">&quot;intersect&quot;</span><span class="p">,</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="s2">&quot;interval&quot;</span><span class="p">,</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="s2">&quot;into&quot;</span><span class="p">,</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="s2">&quot;is&quot;</span><span class="p">,</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="s2">&quot;join&quot;</span><span class="p">,</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="s2">&quot;lateral&quot;</span><span class="p">,</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="s2">&quot;like&quot;</span><span class="p">,</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">,</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="s2">&quot;lookup&quot;</span><span class="p">,</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="s2">&quot;merge&quot;</span><span class="p">,</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">,</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="s2">&quot;new&quot;</span><span class="p">,</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="s2">&quot;no&quot;</span><span class="p">,</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="s2">&quot;not&quot;</span><span class="p">,</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="s2">&quot;null&quot;</span><span class="p">,</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="s2">&quot;nulls&quot;</span><span class="p">,</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="s2">&quot;of&quot;</span><span class="p">,</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="s2">&quot;on&quot;</span><span class="p">,</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="s2">&quot;or&quot;</span><span class="p">,</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="s2">&quot;order&quot;</span><span class="p">,</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="s2">&quot;outer&quot;</span><span class="p">,</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="s2">&quot;over&quot;</span><span class="p">,</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">,</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="s2">&quot;preceding&quot;</span><span class="p">,</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="s2">&quot;proto&quot;</span><span class="p">,</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="s2">&quot;range&quot;</span><span class="p">,</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="s2">&quot;recursive&quot;</span><span class="p">,</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="s2">&quot;respect&quot;</span><span class="p">,</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="s2">&quot;right&quot;</span><span class="p">,</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">,</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">,</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="s2">&quot;select&quot;</span><span class="p">,</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="s2">&quot;set&quot;</span><span class="p">,</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="s2">&quot;some&quot;</span><span class="p">,</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="s2">&quot;struct&quot;</span><span class="p">,</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="s2">&quot;tablesample&quot;</span><span class="p">,</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="s2">&quot;then&quot;</span><span class="p">,</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="s2">&quot;to&quot;</span><span class="p">,</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="s2">&quot;treat&quot;</span><span class="p">,</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="s2">&quot;true&quot;</span><span class="p">,</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="s2">&quot;unbounded&quot;</span><span class="p">,</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="s2">&quot;union&quot;</span><span class="p">,</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">,</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="s2">&quot;when&quot;</span><span class="p">,</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="s2">&quot;window&quot;</span><span class="p">,</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="s2">&quot;within&quot;</span><span class="p">,</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="p">}</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a>
-</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="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-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a>
-</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos">587</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <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-589"><a href="#L-589"><span class="linenos">589</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">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;zone&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><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a>
-</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="k">def</span> <span class="nf">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-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a>
-</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="n">table</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="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-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span 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-402"><a href="#L-402"><span class="linenos">402</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-403"><a href="#L-403"><span class="linenos">403</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-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</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">_pushdown_cte_column_names</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">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-408"><a href="#L-408"><span class="linenos">408</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-409"><a href="#L-409"><span class="linenos">409</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;DATE&quot;</span><span class="p">),</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_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">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-412"><a href="#L-412"><span class="linenos">412</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-413"><a href="#L-413"><span class="linenos">413</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-414"><a href="#L-414"><span class="linenos">414</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-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GENERATE_ARRAY&quot;</span><span class="p">),</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-417"><a href="#L-417"><span class="linenos">417</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-418"><a href="#L-418"><span class="linenos">418</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-419"><a href="#L-419"><span class="linenos">419</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-420"><a href="#L-420"><span class="linenos">420</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_STRING&quot;</span><span class="p">),</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">:</span> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</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">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;TO_HEX&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;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-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</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">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-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">e</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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span 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-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">),</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="p">),</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-436"><a href="#L-436"><span class="linenos">436</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-437"><a href="#L-437"><span class="linenos">437</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-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">[</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">,</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">_unqualify_unnest</span><span class="p">,</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</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-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">_alias_ordered_group</span><span class="p">,</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="p">]</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="p">),</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="sa">f</span><span class="s2">&quot;SHA256&quot;</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;length&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;256&quot;</span> <span class="k">else</span> <span class="s2">&quot;SHA512&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="p">),</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-449"><a href="#L-449"><span class="linenos">449</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-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</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">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;PARSE_DATE(</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-452"><a href="#L-452"><span class="linenos">452</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="s2">&quot;PARSE_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 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-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="p">),</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="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-456"><a href="#L-456"><span class="linenos">456</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-457"><a href="#L-457"><span class="linenos">457</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-458"><a href="#L-458"><span class="linenos">458</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-459"><a href="#L-459"><span class="linenos">459</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-460"><a href="#L-460"><span class="linenos">460</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-461"><a href="#L-461"><span class="linenos">461</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-462"><a href="#L-462"><span class="linenos">462</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-463"><a href="#L-463"><span class="linenos">463</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-464"><a href="#L-464"><span class="linenos">464</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-465"><a href="#L-465"><span class="linenos">465</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-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="p">}</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span 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-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">exp</span><span 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-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">exp</span><span 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-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">exp</span><span 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-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">exp</span><span 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-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="n">exp</span><span 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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="n">exp</span><span 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-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">exp</span><span 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-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">exp</span><span 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-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">exp</span><span 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-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">exp</span><span 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-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">exp</span><span 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-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">exp</span><span 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-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">exp</span><span 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-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">exp</span><span 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-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">exp</span><span 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-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">exp</span><span 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-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">exp</span><span 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-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">exp</span><span 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-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="n">exp</span><span 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-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="p">}</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="p">}</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="c1"># from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="o">*</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="s2">&quot;and&quot;</span><span class="p">,</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="s2">&quot;array&quot;</span><span class="p">,</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="s2">&quot;as&quot;</span><span class="p">,</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="s2">&quot;asc&quot;</span><span class="p">,</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="s2">&quot;assert_rows_modified&quot;</span><span class="p">,</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="s2">&quot;at&quot;</span><span class="p">,</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="s2">&quot;between&quot;</span><span class="p">,</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="s2">&quot;by&quot;</span><span class="p">,</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="s2">&quot;case&quot;</span><span class="p">,</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="s2">&quot;cast&quot;</span><span class="p">,</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">,</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="s2">&quot;contains&quot;</span><span class="p">,</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="s2">&quot;create&quot;</span><span class="p">,</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="s2">&quot;cross&quot;</span><span class="p">,</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="s2">&quot;cube&quot;</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&quot;</span><span class="p">,</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="s2">&quot;define&quot;</span><span class="p">,</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="s2">&quot;desc&quot;</span><span class="p">,</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">,</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="s2">&quot;end&quot;</span><span class="p">,</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="s2">&quot;enum&quot;</span><span class="p">,</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="s2">&quot;escape&quot;</span><span class="p">,</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="s2">&quot;except&quot;</span><span class="p">,</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="s2">&quot;exclude&quot;</span><span class="p">,</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">,</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="s2">&quot;extract&quot;</span><span class="p">,</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="s2">&quot;fetch&quot;</span><span class="p">,</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="s2">&quot;following&quot;</span><span class="p">,</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="s2">&quot;for&quot;</span><span class="p">,</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="s2">&quot;full&quot;</span><span class="p">,</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="s2">&quot;group&quot;</span><span class="p">,</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="s2">&quot;grouping&quot;</span><span class="p">,</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="s2">&quot;groups&quot;</span><span class="p">,</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="s2">&quot;hash&quot;</span><span class="p">,</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="s2">&quot;having&quot;</span><span class="p">,</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="s2">&quot;if&quot;</span><span class="p">,</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">,</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="s2">&quot;in&quot;</span><span class="p">,</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="s2">&quot;intersect&quot;</span><span class="p">,</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="s2">&quot;interval&quot;</span><span class="p">,</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="s2">&quot;into&quot;</span><span class="p">,</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="s2">&quot;is&quot;</span><span class="p">,</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="s2">&quot;join&quot;</span><span class="p">,</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="s2">&quot;lateral&quot;</span><span class="p">,</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="s2">&quot;like&quot;</span><span class="p">,</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">,</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="s2">&quot;lookup&quot;</span><span class="p">,</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="s2">&quot;merge&quot;</span><span class="p">,</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">,</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="s2">&quot;new&quot;</span><span class="p">,</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="s2">&quot;no&quot;</span><span class="p">,</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="s2">&quot;not&quot;</span><span class="p">,</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="s2">&quot;null&quot;</span><span class="p">,</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="s2">&quot;nulls&quot;</span><span class="p">,</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="s2">&quot;of&quot;</span><span class="p">,</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="s2">&quot;on&quot;</span><span class="p">,</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="s2">&quot;or&quot;</span><span class="p">,</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="s2">&quot;order&quot;</span><span class="p">,</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="s2">&quot;outer&quot;</span><span class="p">,</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="s2">&quot;over&quot;</span><span class="p">,</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">,</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="s2">&quot;preceding&quot;</span><span class="p">,</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="s2">&quot;proto&quot;</span><span class="p">,</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="s2">&quot;range&quot;</span><span class="p">,</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="s2">&quot;recursive&quot;</span><span class="p">,</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="s2">&quot;respect&quot;</span><span class="p">,</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="s2">&quot;right&quot;</span><span class="p">,</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">,</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">,</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="s2">&quot;select&quot;</span><span class="p">,</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="s2">&quot;set&quot;</span><span class="p">,</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="s2">&quot;some&quot;</span><span class="p">,</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="s2">&quot;struct&quot;</span><span class="p">,</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="s2">&quot;tablesample&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;then&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;to&quot;</span><span class="p">,</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="s2">&quot;treat&quot;</span><span class="p">,</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="s2">&quot;true&quot;</span><span class="p">,</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="s2">&quot;unbounded&quot;</span><span class="p">,</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="s2">&quot;union&quot;</span><span class="p">,</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">,</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="s2">&quot;when&quot;</span><span class="p">,</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="s2">&quot;window&quot;</span><span class="p">,</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="s2">&quot;within&quot;</span><span class="p">,</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="p">}</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a>
+</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="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-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a>
-</span><span id="L-602"><a href="#L-602"><span class="linenos">602</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-603"><a href="#L-603"><span class="linenos">603</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-604"><a href="#L-604"><span class="linenos">604</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-605"><a href="#L-605"><span class="linenos">605</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-606"><a href="#L-606"><span class="linenos">606</span></a>
-</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="k">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-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos">604</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <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-606"><a href="#L-606"><span class="linenos">606</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">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;zone&quot;</span><span class="p">))</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="p">)</span>
</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a>
-</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="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-610"><a href="#L-610"><span class="linenos">610</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a>
-</span><span id="L-612"><a href="#L-612"><span class="linenos">612</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-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a>
-</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="k">def</span> <span class="nf">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-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a>
-</span><span id="L-618"><a href="#L-618"><span class="linenos">618</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-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</span></a>
-</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="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-622"><a href="#L-622"><span class="linenos">622</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-623"><a href="#L-623"><span class="linenos">623</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-624"><a href="#L-624"><span class="linenos">624</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-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a>
+</span><span id="L-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a>
+</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
+</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a>
+</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a> <span class="k">def</span> <span class="nf">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-620"><a href="#L-620"><span class="linenos">620</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-621"><a href="#L-621"><span class="linenos">621</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-622"><a href="#L-622"><span class="linenos">622</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-623"><a href="#L-623"><span class="linenos">623</span></a>
+</span><span id="L-624"><a href="#L-624"><span class="linenos">624</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-625"><a href="#L-625"><span class="linenos">625</span></a>
-</span><span id="L-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</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-628"><a href="#L-628"><span class="linenos">628</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-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-630"><a href="#L-630"><span class="linenos">630</span></a>
-</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="k">def</span> <span class="nf">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-632"><a href="#L-632"><span class="linenos">632</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><span id="L-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a>
+</span><span id="L-629"><a href="#L-629"><span class="linenos">629</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-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a>
+</span><span id="L-632"><a href="#L-632"><span class="linenos">632</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-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</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="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-636"><a href="#L-636"><span class="linenos">636</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-637"><a href="#L-637"><span class="linenos">637</span></a>
+</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="k">def</span> <span class="nf">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-639"><a href="#L-639"><span class="linenos">639</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-640"><a href="#L-640"><span class="linenos">640</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-641"><a href="#L-641"><span class="linenos">641</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-642"><a href="#L-642"><span class="linenos">642</span></a>
+</span><span id="L-643"><a href="#L-643"><span class="linenos">643</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-644"><a href="#L-644"><span class="linenos">644</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-645"><a href="#L-645"><span class="linenos">645</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-646"><a href="#L-646"><span class="linenos">646</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-647"><a href="#L-647"><span class="linenos">647</span></a>
+</span><span id="L-648"><a href="#L-648"><span class="linenos">648</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-649"><a href="#L-649"><span class="linenos">649</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><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 class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos">653</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-654"><a href="#L-654"><span class="linenos">654</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="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">)</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1009,458 +1041,474 @@
</div>
<a class="headerlink" href="#BigQuery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery-182"><a href="#BigQuery-182"><span class="linenos">182</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-183"><a href="#BigQuery-183"><span class="linenos">183</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-184"><a href="#BigQuery-184"><span class="linenos">184</span></a>
-</span><span id="BigQuery-185"><a href="#BigQuery-185"><span class="linenos">185</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#case_sensitivity</span>
-</span><span id="BigQuery-186"><a href="#BigQuery-186"><span class="linenos">186</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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="c1"># bigquery udfs are case sensitive</span>
-</span><span id="BigQuery-189"><a href="#BigQuery-189"><span class="linenos">189</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-190"><a href="#BigQuery-190"><span class="linenos">190</span></a>
-</span><span id="BigQuery-191"><a href="#BigQuery-191"><span class="linenos">191</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-192"><a href="#BigQuery-192"><span class="linenos">192</span></a> <span class="s2">&quot;%D&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-193"><a href="#BigQuery-193"><span class="linenos">193</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery-189"><a href="#BigQuery-189"><span class="linenos">189</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-190"><a href="#BigQuery-190"><span class="linenos">190</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-191"><a href="#BigQuery-191"><span class="linenos">191</span></a>
+</span><span id="BigQuery-192"><a href="#BigQuery-192"><span class="linenos">192</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#case_sensitivity</span>
+</span><span id="BigQuery-193"><a href="#BigQuery-193"><span class="linenos">193</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">FORMAT_MAPPING</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="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="BigQuery-197"><a href="#BigQuery-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><span id="BigQuery-198"><a href="#BigQuery-198"><span class="linenos">198</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-199"><a href="#BigQuery-199"><span class="linenos">199</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><span id="BigQuery-200"><a href="#BigQuery-200"><span class="linenos">200</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="BigQuery-201"><a href="#BigQuery-201"><span class="linenos">201</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="BigQuery-202"><a href="#BigQuery-202"><span class="linenos">202</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="BigQuery-203"><a href="#BigQuery-203"><span class="linenos">203</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><span id="BigQuery-204"><a href="#BigQuery-204"><span class="linenos">204</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><span id="BigQuery-205"><a href="#BigQuery-205"><span class="linenos">205</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-206"><a href="#BigQuery-206"><span class="linenos">206</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="BigQuery-207"><a href="#BigQuery-207"><span class="linenos">207</span></a> <span class="s2">&quot;SSSSS&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="BigQuery-208"><a href="#BigQuery-208"><span class="linenos">208</span></a> <span class="s2">&quot;TZH&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&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><span id="BigQuery-211"><a href="#BigQuery-211"><span class="linenos">211</span></a> <span class="c1"># The _PARTITIONTIME and _PARTITIONDATE pseudo-columns are not returned by a SELECT * statement</span>
-</span><span id="BigQuery-212"><a href="#BigQuery-212"><span class="linenos">212</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/querying-partitioned-tables#query_an_ingestion-time_partitioned_table</span>
-</span><span id="BigQuery-213"><a href="#BigQuery-213"><span class="linenos">213</span></a> <span class="n">PSEUDOCOLUMNS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;_PARTITIONTIME&quot;</span><span class="p">,</span> <span class="s2">&quot;_PARTITIONDATE&quot;</span><span class="p">}</span>
-</span><span id="BigQuery-214"><a href="#BigQuery-214"><span class="linenos">214</span></a>
-</span><span id="BigQuery-215"><a href="#BigQuery-215"><span class="linenos">215</span></a> <span class="nd">@classmethod</span>
-</span><span id="BigQuery-216"><a href="#BigQuery-216"><span class="linenos">216</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="BigQuery-217"><a href="#BigQuery-217"><span class="linenos">217</span></a> <span class="c1"># In BigQuery, CTEs aren&#39;t case-sensitive, but table names are (by default, at least).</span>
-</span><span id="BigQuery-218"><a href="#BigQuery-218"><span class="linenos">218</span></a> <span class="c1"># The following check is essentially a heuristic to detect tables based on whether or</span>
-</span><span id="BigQuery-219"><a href="#BigQuery-219"><span class="linenos">219</span></a> <span class="c1"># not they&#39;re qualified.</span>
-</span><span id="BigQuery-220"><a href="#BigQuery-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="BigQuery-221"><a href="#BigQuery-221"><span class="linenos">221</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="BigQuery-222"><a href="#BigQuery-222"><span class="linenos">222</span></a>
-</span><span id="BigQuery-223"><a href="#BigQuery-223"><span class="linenos">223</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="BigQuery-224"><a href="#BigQuery-224"><span class="linenos">224</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="BigQuery-225"><a href="#BigQuery-225"><span class="linenos">225</span></a>
-</span><span id="BigQuery-226"><a href="#BigQuery-226"><span class="linenos">226</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="BigQuery-227"><a href="#BigQuery-227"><span class="linenos">227</span></a> <span class="ow">not</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">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="BigQuery-228"><a href="#BigQuery-228"><span class="linenos">228</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="n">parent</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
-</span><span id="BigQuery-229"><a href="#BigQuery-229"><span class="linenos">229</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_table&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-230"><a href="#BigQuery-230"><span class="linenos">230</span></a> <span class="p">):</span>
-</span><span id="BigQuery-231"><a href="#BigQuery-231"><span class="linenos">231</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="BigQuery-195"><a href="#BigQuery-195"><span class="linenos">195</span></a> <span class="c1"># bigquery udfs are case sensitive</span>
+</span><span id="BigQuery-196"><a href="#BigQuery-196"><span class="linenos">196</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-197"><a href="#BigQuery-197"><span class="linenos">197</span></a>
+</span><span id="BigQuery-198"><a href="#BigQuery-198"><span class="linenos">198</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-199"><a href="#BigQuery-199"><span class="linenos">199</span></a> <span class="s2">&quot;%D&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-200"><a href="#BigQuery-200"><span class="linenos">200</span></a> <span class="p">}</span>
+</span><span id="BigQuery-201"><a href="#BigQuery-201"><span class="linenos">201</span></a>
+</span><span id="BigQuery-202"><a href="#BigQuery-202"><span class="linenos">202</span></a> <span class="n">FORMAT_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-203"><a href="#BigQuery-203"><span class="linenos">203</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-204"><a href="#BigQuery-204"><span class="linenos">204</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="BigQuery-205"><a href="#BigQuery-205"><span class="linenos">205</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-206"><a href="#BigQuery-206"><span class="linenos">206</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><span id="BigQuery-207"><a href="#BigQuery-207"><span class="linenos">207</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="BigQuery-208"><a href="#BigQuery-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><span id="BigQuery-209"><a href="#BigQuery-209"><span class="linenos">209</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="BigQuery-210"><a href="#BigQuery-210"><span class="linenos">210</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><span id="BigQuery-211"><a href="#BigQuery-211"><span class="linenos">211</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><span id="BigQuery-212"><a href="#BigQuery-212"><span class="linenos">212</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-213"><a href="#BigQuery-213"><span class="linenos">213</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="BigQuery-214"><a href="#BigQuery-214"><span class="linenos">214</span></a> <span class="s2">&quot;SSSSS&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="BigQuery-215"><a href="#BigQuery-215"><span class="linenos">215</span></a> <span class="s2">&quot;TZH&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-216"><a href="#BigQuery-216"><span class="linenos">216</span></a> <span class="p">}</span>
+</span><span id="BigQuery-217"><a href="#BigQuery-217"><span class="linenos">217</span></a>
+</span><span id="BigQuery-218"><a href="#BigQuery-218"><span class="linenos">218</span></a> <span class="c1"># The _PARTITIONTIME and _PARTITIONDATE pseudo-columns are not returned by a SELECT * statement</span>
+</span><span id="BigQuery-219"><a href="#BigQuery-219"><span class="linenos">219</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/querying-partitioned-tables#query_an_ingestion-time_partitioned_table</span>
+</span><span id="BigQuery-220"><a href="#BigQuery-220"><span class="linenos">220</span></a> <span class="n">PSEUDOCOLUMNS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;_PARTITIONTIME&quot;</span><span class="p">,</span> <span class="s2">&quot;_PARTITIONDATE&quot;</span><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="nd">@classmethod</span>
+</span><span id="BigQuery-223"><a href="#BigQuery-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="BigQuery-224"><a href="#BigQuery-224"><span class="linenos">224</span></a> <span class="c1"># In BigQuery, CTEs aren&#39;t case-sensitive, but table names are (by default, at least).</span>
+</span><span id="BigQuery-225"><a href="#BigQuery-225"><span class="linenos">225</span></a> <span class="c1"># The following check is essentially a heuristic to detect tables based on whether or</span>
+</span><span id="BigQuery-226"><a href="#BigQuery-226"><span class="linenos">226</span></a> <span class="c1"># not they&#39;re qualified.</span>
+</span><span id="BigQuery-227"><a href="#BigQuery-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">Identifier</span><span class="p">):</span>
+</span><span id="BigQuery-228"><a href="#BigQuery-228"><span class="linenos">228</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="BigQuery-229"><a href="#BigQuery-229"><span class="linenos">229</span></a>
+</span><span id="BigQuery-230"><a href="#BigQuery-230"><span class="linenos">230</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="BigQuery-231"><a href="#BigQuery-231"><span class="linenos">231</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="BigQuery-232"><a href="#BigQuery-232"><span class="linenos">232</span></a>
-</span><span id="BigQuery-233"><a href="#BigQuery-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="BigQuery-234"><a href="#BigQuery-234"><span class="linenos">234</span></a>
-</span><span id="BigQuery-235"><a href="#BigQuery-235"><span class="linenos">235</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-236"><a href="#BigQuery-236"><span class="linenos">236</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 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-237"><a href="#BigQuery-237"><span class="linenos">237</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-238"><a href="#BigQuery-238"><span class="linenos">238</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-239"><a href="#BigQuery-239"><span class="linenos">239</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-240"><a href="#BigQuery-240"><span class="linenos">240</span></a>
-</span><span id="BigQuery-241"><a href="#BigQuery-241"><span class="linenos">241</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-242"><a href="#BigQuery-242"><span class="linenos">242</span></a>
-</span><span id="BigQuery-243"><a href="#BigQuery-243"><span class="linenos">243</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="BigQuery-244"><a href="#BigQuery-244"><span class="linenos">244</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-245"><a href="#BigQuery-245"><span class="linenos">245</span></a> <span class="p">]</span>
-</span><span id="BigQuery-246"><a href="#BigQuery-246"><span class="linenos">246</span></a>
-</span><span id="BigQuery-247"><a href="#BigQuery-247"><span class="linenos">247</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="BigQuery-248"><a href="#BigQuery-248"><span class="linenos">248</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-249"><a href="#BigQuery-249"><span class="linenos">249</span></a> <span class="p">]</span>
-</span><span id="BigQuery-250"><a href="#BigQuery-250"><span class="linenos">250</span></a>
-</span><span id="BigQuery-251"><a href="#BigQuery-251"><span class="linenos">251</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-252"><a href="#BigQuery-252"><span class="linenos">252</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-253"><a href="#BigQuery-253"><span class="linenos">253</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-254"><a href="#BigQuery-254"><span class="linenos">254</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-255"><a href="#BigQuery-255"><span class="linenos">255</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-256"><a href="#BigQuery-256"><span class="linenos">256</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-257"><a href="#BigQuery-257"><span class="linenos">257</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-258"><a href="#BigQuery-258"><span class="linenos">258</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-259"><a href="#BigQuery-259"><span class="linenos">259</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-260"><a href="#BigQuery-260"><span class="linenos">260</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-261"><a href="#BigQuery-261"><span class="linenos">261</span></a> <span class="s2">&quot;RECORD&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="BigQuery-262"><a href="#BigQuery-262"><span class="linenos">262</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">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="BigQuery-263"><a href="#BigQuery-263"><span class="linenos">263</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-264"><a href="#BigQuery-264"><span class="linenos">264</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-265"><a href="#BigQuery-265"><span class="linenos">265</span></a> <span class="p">}</span>
-</span><span id="BigQuery-266"><a href="#BigQuery-266"><span class="linenos">266</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-267"><a href="#BigQuery-267"><span class="linenos">267</span></a>
-</span><span id="BigQuery-268"><a href="#BigQuery-268"><span class="linenos">268</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-269"><a href="#BigQuery-269"><span class="linenos">269</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</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">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-272"><a href="#BigQuery-272"><span class="linenos">272</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-273"><a href="#BigQuery-273"><span class="linenos">273</span></a>
-</span><span id="BigQuery-274"><a href="#BigQuery-274"><span class="linenos">274</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-275"><a href="#BigQuery-275"><span class="linenos">275</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="BigQuery-276"><a href="#BigQuery-276"><span class="linenos">276</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_date</span><span class="p">,</span>
-</span><span id="BigQuery-277"><a href="#BigQuery-277"><span class="linenos">277</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-278"><a href="#BigQuery-278"><span class="linenos">278</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-279"><a href="#BigQuery-279"><span class="linenos">279</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-280"><a href="#BigQuery-280"><span class="linenos">280</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="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><span id="BigQuery-281"><a href="#BigQuery-281"><span class="linenos">281</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-282"><a href="#BigQuery-282"><span class="linenos">282</span></a> <span class="p">),</span>
-</span><span id="BigQuery-283"><a href="#BigQuery-283"><span class="linenos">283</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-284"><a href="#BigQuery-284"><span class="linenos">284</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-285"><a href="#BigQuery-285"><span class="linenos">285</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="BigQuery-286"><a href="#BigQuery-286"><span class="linenos">286</span></a> <span class="s2">&quot;GENERATE_ARRAY&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="BigQuery-287"><a href="#BigQuery-287"><span class="linenos">287</span></a> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="BigQuery-288"><a href="#BigQuery-288"><span class="linenos">288</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">_parse_to_hex</span><span class="p">,</span>
-</span><span id="BigQuery-289"><a href="#BigQuery-289"><span class="linenos">289</span></a> <span class="s2">&quot;PARSE_DATE&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">StrToDate</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">)(</span>
-</span><span id="BigQuery-290"><a href="#BigQuery-290"><span class="linenos">290</span></a> <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="n">seq_get</span><span 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-291"><a href="#BigQuery-291"><span class="linenos">291</span></a> <span class="p">),</span>
-</span><span id="BigQuery-292"><a href="#BigQuery-292"><span class="linenos">292</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_timestamp</span><span class="p">,</span>
-</span><span id="BigQuery-293"><a href="#BigQuery-293"><span class="linenos">293</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-294"><a href="#BigQuery-294"><span class="linenos">294</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-295"><a href="#BigQuery-295"><span class="linenos">295</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-296"><a href="#BigQuery-296"><span class="linenos">296</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-297"><a href="#BigQuery-297"><span class="linenos">297</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-298"><a href="#BigQuery-298"><span class="linenos">298</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-299"><a href="#BigQuery-299"><span class="linenos">299</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-300"><a href="#BigQuery-300"><span class="linenos">300</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-301"><a href="#BigQuery-301"><span class="linenos">301</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="BigQuery-302"><a href="#BigQuery-302"><span class="linenos">302</span></a> <span class="p">),</span>
-</span><span id="BigQuery-303"><a href="#BigQuery-303"><span class="linenos">303</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span>
-</span><span id="BigQuery-304"><a href="#BigQuery-304"><span class="linenos">304</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split</span>
+</span><span id="BigQuery-233"><a href="#BigQuery-233"><span class="linenos">233</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="BigQuery-234"><a href="#BigQuery-234"><span class="linenos">234</span></a> <span class="ow">not</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">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="BigQuery-235"><a href="#BigQuery-235"><span class="linenos">235</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="n">parent</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
+</span><span id="BigQuery-236"><a href="#BigQuery-236"><span class="linenos">236</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_table&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-237"><a href="#BigQuery-237"><span class="linenos">237</span></a> <span class="p">):</span>
+</span><span id="BigQuery-238"><a href="#BigQuery-238"><span class="linenos">238</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="BigQuery-239"><a href="#BigQuery-239"><span class="linenos">239</span></a>
+</span><span id="BigQuery-240"><a href="#BigQuery-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="BigQuery-241"><a href="#BigQuery-241"><span class="linenos">241</span></a>
+</span><span id="BigQuery-242"><a href="#BigQuery-242"><span class="linenos">242</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="BigQuery-243"><a href="#BigQuery-243"><span class="linenos">243</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 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-244"><a href="#BigQuery-244"><span class="linenos">244</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-245"><a href="#BigQuery-245"><span class="linenos">245</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-246"><a href="#BigQuery-246"><span class="linenos">246</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-247"><a href="#BigQuery-247"><span class="linenos">247</span></a>
+</span><span id="BigQuery-248"><a href="#BigQuery-248"><span class="linenos">248</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-249"><a href="#BigQuery-249"><span class="linenos">249</span></a>
+</span><span id="BigQuery-250"><a href="#BigQuery-250"><span class="linenos">250</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="BigQuery-251"><a href="#BigQuery-251"><span class="linenos">251</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-252"><a href="#BigQuery-252"><span class="linenos">252</span></a> <span class="p">]</span>
+</span><span id="BigQuery-253"><a href="#BigQuery-253"><span class="linenos">253</span></a>
+</span><span id="BigQuery-254"><a href="#BigQuery-254"><span class="linenos">254</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="BigQuery-255"><a href="#BigQuery-255"><span class="linenos">255</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-256"><a href="#BigQuery-256"><span class="linenos">256</span></a> <span class="p">]</span>
+</span><span id="BigQuery-257"><a href="#BigQuery-257"><span class="linenos">257</span></a>
+</span><span id="BigQuery-258"><a href="#BigQuery-258"><span class="linenos">258</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-259"><a href="#BigQuery-259"><span class="linenos">259</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-260"><a href="#BigQuery-260"><span class="linenos">260</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-261"><a href="#BigQuery-261"><span class="linenos">261</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-262"><a href="#BigQuery-262"><span class="linenos">262</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-263"><a href="#BigQuery-263"><span class="linenos">263</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-264"><a href="#BigQuery-264"><span class="linenos">264</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-265"><a href="#BigQuery-265"><span class="linenos">265</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-266"><a href="#BigQuery-266"><span class="linenos">266</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-267"><a href="#BigQuery-267"><span class="linenos">267</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-268"><a href="#BigQuery-268"><span class="linenos">268</span></a> <span class="s2">&quot;RECORD&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="BigQuery-269"><a href="#BigQuery-269"><span class="linenos">269</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">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="BigQuery-270"><a href="#BigQuery-270"><span class="linenos">270</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-271"><a href="#BigQuery-271"><span class="linenos">271</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-272"><a href="#BigQuery-272"><span class="linenos">272</span></a> <span class="s2">&quot;FOR SYSTEM_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="BigQuery-273"><a href="#BigQuery-273"><span class="linenos">273</span></a> <span class="p">}</span>
+</span><span id="BigQuery-274"><a href="#BigQuery-274"><span class="linenos">274</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-275"><a href="#BigQuery-275"><span class="linenos">275</span></a>
+</span><span id="BigQuery-276"><a href="#BigQuery-276"><span class="linenos">276</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="BigQuery-277"><a href="#BigQuery-277"><span class="linenos">277</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-278"><a href="#BigQuery-278"><span class="linenos">278</span></a>
+</span><span id="BigQuery-279"><a href="#BigQuery-279"><span class="linenos">279</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-280"><a href="#BigQuery-280"><span class="linenos">280</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-281"><a href="#BigQuery-281"><span class="linenos">281</span></a>
+</span><span id="BigQuery-282"><a href="#BigQuery-282"><span class="linenos">282</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-283"><a href="#BigQuery-283"><span class="linenos">283</span></a>
+</span><span id="BigQuery-284"><a href="#BigQuery-284"><span class="linenos">284</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-285"><a href="#BigQuery-285"><span class="linenos">285</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="BigQuery-286"><a href="#BigQuery-286"><span class="linenos">286</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_date</span><span class="p">,</span>
+</span><span id="BigQuery-287"><a href="#BigQuery-287"><span class="linenos">287</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-288"><a href="#BigQuery-288"><span class="linenos">288</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-289"><a href="#BigQuery-289"><span class="linenos">289</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-290"><a href="#BigQuery-290"><span class="linenos">290</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="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><span id="BigQuery-291"><a href="#BigQuery-291"><span class="linenos">291</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-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 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-294"><a href="#BigQuery-294"><span class="linenos">294</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-295"><a href="#BigQuery-295"><span class="linenos">295</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="BigQuery-296"><a href="#BigQuery-296"><span class="linenos">296</span></a> <span class="s2">&quot;GENERATE_ARRAY&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="BigQuery-297"><a href="#BigQuery-297"><span class="linenos">297</span></a> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="BigQuery-298"><a href="#BigQuery-298"><span class="linenos">298</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">_parse_to_hex</span><span class="p">,</span>
+</span><span id="BigQuery-299"><a href="#BigQuery-299"><span class="linenos">299</span></a> <span class="s2">&quot;PARSE_DATE&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">StrToDate</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">)(</span>
+</span><span id="BigQuery-300"><a href="#BigQuery-300"><span class="linenos">300</span></a> <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="n">seq_get</span><span 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-301"><a href="#BigQuery-301"><span class="linenos">301</span></a> <span class="p">),</span>
+</span><span id="BigQuery-302"><a href="#BigQuery-302"><span class="linenos">302</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_timestamp</span><span class="p">,</span>
+</span><span id="BigQuery-303"><a href="#BigQuery-303"><span class="linenos">303</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-304"><a href="#BigQuery-304"><span class="linenos">304</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-305"><a href="#BigQuery-305"><span class="linenos">305</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-306"><a href="#BigQuery-306"><span class="linenos">306</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="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="BigQuery-307"><a href="#BigQuery-307"><span class="linenos">307</span></a> <span class="p">),</span>
-</span><span id="BigQuery-308"><a href="#BigQuery-308"><span class="linenos">308</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-309"><a href="#BigQuery-309"><span class="linenos">309</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-310"><a href="#BigQuery-310"><span class="linenos">310</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-311"><a href="#BigQuery-311"><span class="linenos">311</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-312"><a href="#BigQuery-312"><span class="linenos">312</span></a> <span class="s2">&quot;TO_JSON_STRING&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="BigQuery-313"><a href="#BigQuery-313"><span class="linenos">313</span></a> <span class="p">}</span>
-</span><span id="BigQuery-314"><a href="#BigQuery-314"><span class="linenos">314</span></a>
-</span><span id="BigQuery-315"><a href="#BigQuery-315"><span class="linenos">315</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-316"><a href="#BigQuery-316"><span class="linenos">316</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="BigQuery-317"><a href="#BigQuery-317"><span class="linenos">317</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-318"><a href="#BigQuery-318"><span class="linenos">318</span></a> <span class="p">}</span>
-</span><span id="BigQuery-319"><a href="#BigQuery-319"><span class="linenos">319</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-320"><a href="#BigQuery-320"><span class="linenos">320</span></a>
-</span><span id="BigQuery-321"><a href="#BigQuery-321"><span class="linenos">321</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-322"><a href="#BigQuery-322"><span class="linenos">322</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><span id="BigQuery-323"><a href="#BigQuery-323"><span class="linenos">323</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-324"><a href="#BigQuery-324"><span class="linenos">324</span></a> <span class="p">}</span>
-</span><span id="BigQuery-325"><a href="#BigQuery-325"><span class="linenos">325</span></a>
-</span><span id="BigQuery-326"><a href="#BigQuery-326"><span class="linenos">326</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-327"><a href="#BigQuery-327"><span class="linenos">327</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><span id="BigQuery-328"><a href="#BigQuery-328"><span class="linenos">328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="BigQuery-329"><a href="#BigQuery-329"><span class="linenos">329</span></a> <span class="p">}</span>
-</span><span id="BigQuery-330"><a href="#BigQuery-330"><span class="linenos">330</span></a>
-</span><span id="BigQuery-331"><a href="#BigQuery-331"><span class="linenos">331</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-332"><a href="#BigQuery-332"><span class="linenos">332</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><span id="BigQuery-333"><a href="#BigQuery-333"><span class="linenos">333</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="BigQuery-334"><a href="#BigQuery-334"><span class="linenos">334</span></a> <span class="p">}</span>
-</span><span id="BigQuery-335"><a href="#BigQuery-335"><span class="linenos">335</span></a>
-</span><span id="BigQuery-336"><a href="#BigQuery-336"><span class="linenos">336</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-337"><a href="#BigQuery-337"><span class="linenos">337</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
-</span><span id="BigQuery-338"><a href="#BigQuery-338"><span class="linenos">338</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-339"><a href="#BigQuery-339"><span class="linenos">339</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-340"><a href="#BigQuery-340"><span class="linenos">340</span></a> <span class="p">),</span>
-</span><span id="BigQuery-341"><a href="#BigQuery-341"><span class="linenos">341</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-342"><a href="#BigQuery-342"><span class="linenos">342</span></a> <span class="p">}</span>
-</span><span id="BigQuery-343"><a href="#BigQuery-343"><span class="linenos">343</span></a>
-</span><span id="BigQuery-344"><a href="#BigQuery-344"><span class="linenos">344</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-345"><a href="#BigQuery-345"><span class="linenos">345</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
-</span><span id="BigQuery-346"><a href="#BigQuery-346"><span class="linenos">346</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-347"><a href="#BigQuery-347"><span class="linenos">347</span></a> <span class="p">}</span>
-</span><span id="BigQuery-348"><a href="#BigQuery-348"><span class="linenos">348</span></a>
-</span><span id="BigQuery-349"><a href="#BigQuery-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="BigQuery-350"><a href="#BigQuery-350"><span class="linenos">350</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="BigQuery-351"><a href="#BigQuery-351"><span class="linenos">351</span></a>
-</span><span id="BigQuery-352"><a href="#BigQuery-352"><span class="linenos">352</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names</span>
-</span><span id="BigQuery-353"><a href="#BigQuery-353"><span class="linenos">353</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="BigQuery-354"><a href="#BigQuery-354"><span class="linenos">354</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="BigQuery-355"><a href="#BigQuery-355"><span class="linenos">355</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">DASH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="BigQuery-356"><a href="#BigQuery-356"><span class="linenos">356</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="BigQuery-357"><a href="#BigQuery-357"><span class="linenos">357</span></a> <span class="n">table_name</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="BigQuery-358"><a href="#BigQuery-358"><span class="linenos">358</span></a>
-</span><span id="BigQuery-359"><a href="#BigQuery-359"><span class="linenos">359</span></a> <span class="n">this</span> <span class="o">=</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">table_name</span><span class="p">,</span> <span class="n">quoted</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;quoted&quot;</span><span class="p">))</span>
+</span><span id="BigQuery-306"><a href="#BigQuery-306"><span class="linenos">306</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-307"><a href="#BigQuery-307"><span class="linenos">307</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-308"><a href="#BigQuery-308"><span class="linenos">308</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-309"><a href="#BigQuery-309"><span class="linenos">309</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-310"><a href="#BigQuery-310"><span class="linenos">310</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-311"><a href="#BigQuery-311"><span class="linenos">311</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="BigQuery-312"><a href="#BigQuery-312"><span class="linenos">312</span></a> <span class="p">),</span>
+</span><span id="BigQuery-313"><a href="#BigQuery-313"><span class="linenos">313</span></a> <span class="s2">&quot;SHA256&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">256</span><span class="p">)),</span>
+</span><span id="BigQuery-314"><a href="#BigQuery-314"><span class="linenos">314</span></a> <span class="s2">&quot;SHA512&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">512</span><span class="p">)),</span>
+</span><span id="BigQuery-315"><a href="#BigQuery-315"><span class="linenos">315</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span>
+</span><span id="BigQuery-316"><a href="#BigQuery-316"><span class="linenos">316</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split</span>
+</span><span id="BigQuery-317"><a href="#BigQuery-317"><span class="linenos">317</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-318"><a href="#BigQuery-318"><span class="linenos">318</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="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="BigQuery-319"><a href="#BigQuery-319"><span class="linenos">319</span></a> <span class="p">),</span>
+</span><span id="BigQuery-320"><a href="#BigQuery-320"><span class="linenos">320</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-321"><a href="#BigQuery-321"><span class="linenos">321</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-322"><a href="#BigQuery-322"><span class="linenos">322</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-323"><a href="#BigQuery-323"><span class="linenos">323</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-324"><a href="#BigQuery-324"><span class="linenos">324</span></a> <span class="s2">&quot;TO_JSON_STRING&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="BigQuery-325"><a href="#BigQuery-325"><span class="linenos">325</span></a> <span class="p">}</span>
+</span><span id="BigQuery-326"><a href="#BigQuery-326"><span class="linenos">326</span></a>
+</span><span id="BigQuery-327"><a href="#BigQuery-327"><span class="linenos">327</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-328"><a href="#BigQuery-328"><span class="linenos">328</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="BigQuery-329"><a href="#BigQuery-329"><span class="linenos">329</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-330"><a href="#BigQuery-330"><span class="linenos">330</span></a> <span class="p">}</span>
+</span><span id="BigQuery-331"><a href="#BigQuery-331"><span class="linenos">331</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-332"><a href="#BigQuery-332"><span class="linenos">332</span></a>
+</span><span id="BigQuery-333"><a href="#BigQuery-333"><span class="linenos">333</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-334"><a href="#BigQuery-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
+</span><span id="BigQuery-335"><a href="#BigQuery-335"><span class="linenos">335</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-336"><a href="#BigQuery-336"><span class="linenos">336</span></a> <span class="p">}</span>
+</span><span id="BigQuery-337"><a href="#BigQuery-337"><span class="linenos">337</span></a>
+</span><span id="BigQuery-338"><a href="#BigQuery-338"><span class="linenos">338</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-339"><a href="#BigQuery-339"><span class="linenos">339</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><span id="BigQuery-340"><a href="#BigQuery-340"><span class="linenos">340</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="BigQuery-341"><a href="#BigQuery-341"><span class="linenos">341</span></a> <span class="p">}</span>
+</span><span id="BigQuery-342"><a href="#BigQuery-342"><span class="linenos">342</span></a>
+</span><span id="BigQuery-343"><a href="#BigQuery-343"><span class="linenos">343</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-344"><a href="#BigQuery-344"><span class="linenos">344</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><span id="BigQuery-345"><a href="#BigQuery-345"><span class="linenos">345</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
+</span><span id="BigQuery-346"><a href="#BigQuery-346"><span class="linenos">346</span></a> <span class="p">}</span>
+</span><span id="BigQuery-347"><a href="#BigQuery-347"><span class="linenos">347</span></a>
+</span><span id="BigQuery-348"><a href="#BigQuery-348"><span class="linenos">348</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-349"><a href="#BigQuery-349"><span class="linenos">349</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
+</span><span id="BigQuery-350"><a href="#BigQuery-350"><span class="linenos">350</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-351"><a href="#BigQuery-351"><span class="linenos">351</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-352"><a href="#BigQuery-352"><span class="linenos">352</span></a> <span class="p">),</span>
+</span><span id="BigQuery-353"><a href="#BigQuery-353"><span class="linenos">353</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-354"><a href="#BigQuery-354"><span class="linenos">354</span></a> <span class="p">}</span>
+</span><span id="BigQuery-355"><a href="#BigQuery-355"><span class="linenos">355</span></a>
+</span><span id="BigQuery-356"><a href="#BigQuery-356"><span class="linenos">356</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-357"><a href="#BigQuery-357"><span class="linenos">357</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><span id="BigQuery-358"><a href="#BigQuery-358"><span class="linenos">358</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-359"><a href="#BigQuery-359"><span class="linenos">359</span></a> <span class="p">}</span>
</span><span id="BigQuery-360"><a href="#BigQuery-360"><span class="linenos">360</span></a>
-</span><span id="BigQuery-361"><a href="#BigQuery-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="BigQuery-362"><a href="#BigQuery-362"><span class="linenos">362</span></a>
-</span><span id="BigQuery-363"><a href="#BigQuery-363"><span class="linenos">363</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">Table</span><span class="p">:</span>
-</span><span id="BigQuery-364"><a href="#BigQuery-364"><span class="linenos">364</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="BigQuery-365"><a href="#BigQuery-365"><span class="linenos">365</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
-</span><span id="BigQuery-366"><a href="#BigQuery-366"><span class="linenos">366</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="BigQuery-367"><a href="#BigQuery-367"><span class="linenos">367</span></a> <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">Optional</span><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">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
-</span><span id="BigQuery-368"><a href="#BigQuery-368"><span class="linenos">368</span></a> <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">table</span><span class="o">.</span><span class="n">name</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="BigQuery-369"><a href="#BigQuery-369"><span class="linenos">369</span></a> <span class="p">)</span>
+</span><span id="BigQuery-361"><a href="#BigQuery-361"><span class="linenos">361</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="BigQuery-362"><a href="#BigQuery-362"><span class="linenos">362</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="BigQuery-363"><a href="#BigQuery-363"><span class="linenos">363</span></a>
+</span><span id="BigQuery-364"><a href="#BigQuery-364"><span class="linenos">364</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names</span>
+</span><span id="BigQuery-365"><a href="#BigQuery-365"><span class="linenos">365</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="BigQuery-366"><a href="#BigQuery-366"><span class="linenos">366</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="BigQuery-367"><a href="#BigQuery-367"><span class="linenos">367</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">DASH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="BigQuery-368"><a href="#BigQuery-368"><span class="linenos">368</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="BigQuery-369"><a href="#BigQuery-369"><span class="linenos">369</span></a> <span class="n">table_name</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="BigQuery-370"><a href="#BigQuery-370"><span class="linenos">370</span></a>
-</span><span id="BigQuery-371"><a href="#BigQuery-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="n">rest</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="BigQuery-372"><a href="#BigQuery-372"><span class="linenos">372</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="o">.</span><span class="n">build</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="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">]))</span>
-</span><span id="BigQuery-373"><a href="#BigQuery-373"><span class="linenos">373</span></a>
-</span><span id="BigQuery-374"><a href="#BigQuery-374"><span class="linenos">374</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</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><span id="BigQuery-375"><a href="#BigQuery-375"><span class="linenos">375</span></a>
-</span><span id="BigQuery-376"><a href="#BigQuery-376"><span class="linenos">376</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="BigQuery-377"><a href="#BigQuery-377"><span class="linenos">377</span></a>
-</span><span id="BigQuery-378"><a href="#BigQuery-378"><span class="linenos">378</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-379"><a href="#BigQuery-379"><span class="linenos">379</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-380"><a href="#BigQuery-380"><span class="linenos">380</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-381"><a href="#BigQuery-381"><span class="linenos">381</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-382"><a href="#BigQuery-382"><span class="linenos">382</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-383"><a href="#BigQuery-383"><span class="linenos">383</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-384"><a href="#BigQuery-384"><span class="linenos">384</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="BigQuery-385"><a href="#BigQuery-385"><span class="linenos">385</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-386"><a href="#BigQuery-386"><span class="linenos">386</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-371"><a href="#BigQuery-371"><span class="linenos">371</span></a> <span class="n">this</span> <span class="o">=</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">table_name</span><span class="p">,</span> <span class="n">quoted</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;quoted&quot;</span><span class="p">))</span>
+</span><span id="BigQuery-372"><a href="#BigQuery-372"><span class="linenos">372</span></a>
+</span><span id="BigQuery-373"><a href="#BigQuery-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="BigQuery-374"><a href="#BigQuery-374"><span class="linenos">374</span></a>
+</span><span id="BigQuery-375"><a href="#BigQuery-375"><span class="linenos">375</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">Table</span><span class="p">:</span>
+</span><span id="BigQuery-376"><a href="#BigQuery-376"><span class="linenos">376</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="BigQuery-377"><a href="#BigQuery-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+</span><span id="BigQuery-378"><a href="#BigQuery-378"><span class="linenos">378</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="BigQuery-379"><a href="#BigQuery-379"><span class="linenos">379</span></a> <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">Optional</span><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">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+</span><span id="BigQuery-380"><a href="#BigQuery-380"><span class="linenos">380</span></a> <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">table</span><span class="o">.</span><span class="n">name</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="BigQuery-381"><a href="#BigQuery-381"><span class="linenos">381</span></a> <span class="p">)</span>
+</span><span id="BigQuery-382"><a href="#BigQuery-382"><span class="linenos">382</span></a>
+</span><span id="BigQuery-383"><a href="#BigQuery-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="n">rest</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="BigQuery-384"><a href="#BigQuery-384"><span class="linenos">384</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="o">.</span><span class="n">build</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="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">]))</span>
+</span><span id="BigQuery-385"><a href="#BigQuery-385"><span class="linenos">385</span></a>
+</span><span id="BigQuery-386"><a href="#BigQuery-386"><span class="linenos">386</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</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><span id="BigQuery-387"><a href="#BigQuery-387"><span class="linenos">387</span></a>
-</span><span id="BigQuery-388"><a href="#BigQuery-388"><span class="linenos">388</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-389"><a href="#BigQuery-389"><span class="linenos">389</span></a> <span 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="BigQuery-390"><a href="#BigQuery-390"><span class="linenos">390</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="BigQuery-391"><a href="#BigQuery-391"><span class="linenos">391</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-392"><a href="#BigQuery-392"><span class="linenos">392</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-393"><a href="#BigQuery-393"><span class="linenos">393</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-394"><a href="#BigQuery-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</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">_pushdown_cte_column_names</span><span class="p">]),</span>
-</span><span id="BigQuery-395"><a href="#BigQuery-395"><span class="linenos">395</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-396"><a href="#BigQuery-396"><span class="linenos">396</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-397"><a href="#BigQuery-397"><span class="linenos">397</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;DATE&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-398"><a href="#BigQuery-398"><span class="linenos">398</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-399"><a href="#BigQuery-399"><span class="linenos">399</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-400"><a href="#BigQuery-400"><span class="linenos">400</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-401"><a href="#BigQuery-401"><span class="linenos">401</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-402"><a href="#BigQuery-402"><span class="linenos">402</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-403"><a href="#BigQuery-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GENERATE_ARRAY&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-404"><a href="#BigQuery-404"><span class="linenos">404</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-405"><a href="#BigQuery-405"><span class="linenos">405</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="BigQuery-406"><a href="#BigQuery-406"><span class="linenos">406</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-407"><a href="#BigQuery-407"><span class="linenos">407</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-408"><a href="#BigQuery-408"><span class="linenos">408</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_STRING&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-409"><a href="#BigQuery-409"><span class="linenos">409</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-410"><a href="#BigQuery-410"><span class="linenos">410</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;TO_HEX&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;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="BigQuery-411"><a href="#BigQuery-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-412"><a href="#BigQuery-412"><span class="linenos">412</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-413"><a href="#BigQuery-413"><span class="linenos">413</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-414"><a href="#BigQuery-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-415"><a href="#BigQuery-415"><span class="linenos">415</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-416"><a href="#BigQuery-416"><span class="linenos">416</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="BigQuery-417"><a href="#BigQuery-417"><span class="linenos">417</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="BigQuery-418"><a href="#BigQuery-418"><span class="linenos">418</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-419"><a href="#BigQuery-419"><span class="linenos">419</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-420"><a href="#BigQuery-420"><span class="linenos">420</span></a> <span class="p">),</span>
-</span><span id="BigQuery-421"><a href="#BigQuery-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="BigQuery-422"><a href="#BigQuery-422"><span class="linenos">422</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-423"><a href="#BigQuery-423"><span class="linenos">423</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-424"><a href="#BigQuery-424"><span class="linenos">424</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-425"><a href="#BigQuery-425"><span class="linenos">425</span></a> <span class="p">[</span>
-</span><span id="BigQuery-426"><a href="#BigQuery-426"><span class="linenos">426</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="BigQuery-427"><a href="#BigQuery-427"><span class="linenos">427</span></a> <span class="n">_unqualify_unnest</span><span class="p">,</span>
-</span><span id="BigQuery-428"><a href="#BigQuery-428"><span class="linenos">428</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="BigQuery-429"><a href="#BigQuery-429"><span class="linenos">429</span></a> <span class="n">_alias_ordered_group</span><span class="p">,</span>
-</span><span id="BigQuery-430"><a href="#BigQuery-430"><span class="linenos">430</span></a> <span class="p">]</span>
-</span><span id="BigQuery-431"><a href="#BigQuery-431"><span class="linenos">431</span></a> <span class="p">),</span>
-</span><span id="BigQuery-432"><a href="#BigQuery-432"><span class="linenos">432</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-433"><a href="#BigQuery-433"><span class="linenos">433</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-434"><a href="#BigQuery-434"><span class="linenos">434</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-435"><a href="#BigQuery-435"><span class="linenos">435</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;PARSE_DATE(</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-436"><a href="#BigQuery-436"><span class="linenos">436</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="BigQuery-437"><a href="#BigQuery-437"><span class="linenos">437</span></a> <span class="s2">&quot;PARSE_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 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-438"><a href="#BigQuery-438"><span class="linenos">438</span></a> <span class="p">),</span>
-</span><span id="BigQuery-439"><a href="#BigQuery-439"><span class="linenos">439</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-440"><a href="#BigQuery-440"><span class="linenos">440</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-441"><a href="#BigQuery-441"><span class="linenos">441</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-442"><a href="#BigQuery-442"><span class="linenos">442</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-443"><a href="#BigQuery-443"><span class="linenos">443</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-444"><a href="#BigQuery-444"><span class="linenos">444</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-445"><a href="#BigQuery-445"><span class="linenos">445</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-446"><a href="#BigQuery-446"><span class="linenos">446</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-447"><a href="#BigQuery-447"><span class="linenos">447</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="BigQuery-448"><a href="#BigQuery-448"><span class="linenos">448</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-449"><a href="#BigQuery-449"><span class="linenos">449</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-450"><a href="#BigQuery-450"><span class="linenos">450</span></a> <span class="p">}</span>
-</span><span id="BigQuery-451"><a href="#BigQuery-451"><span class="linenos">451</span></a>
-</span><span id="BigQuery-452"><a href="#BigQuery-452"><span class="linenos">452</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-453"><a href="#BigQuery-453"><span class="linenos">453</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="BigQuery-454"><a href="#BigQuery-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-455"><a href="#BigQuery-455"><span class="linenos">455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-456"><a href="#BigQuery-456"><span class="linenos">456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTES&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-457"><a href="#BigQuery-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-458"><a href="#BigQuery-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-459"><a href="#BigQuery-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-460"><a href="#BigQuery-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-461"><a href="#BigQuery-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-462"><a href="#BigQuery-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-463"><a href="#BigQuery-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-464"><a href="#BigQuery-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-465"><a href="#BigQuery-465"><span class="linenos">465</span></a> <span class="n">exp</span><span 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-466"><a href="#BigQuery-466"><span class="linenos">466</span></a> <span class="n">exp</span><span 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-467"><a href="#BigQuery-467"><span class="linenos">467</span></a> <span class="n">exp</span><span 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-468"><a href="#BigQuery-468"><span class="linenos">468</span></a> <span class="n">exp</span><span 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-469"><a href="#BigQuery-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-470"><a href="#BigQuery-470"><span class="linenos">470</span></a> <span class="n">exp</span><span 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-471"><a href="#BigQuery-471"><span class="linenos">471</span></a> <span class="n">exp</span><span 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-472"><a href="#BigQuery-472"><span class="linenos">472</span></a> <span class="n">exp</span><span 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-473"><a href="#BigQuery-473"><span class="linenos">473</span></a> <span class="n">exp</span><span 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-474"><a href="#BigQuery-474"><span class="linenos">474</span></a> <span class="p">}</span>
-</span><span id="BigQuery-475"><a href="#BigQuery-475"><span class="linenos">475</span></a>
-</span><span id="BigQuery-476"><a href="#BigQuery-476"><span class="linenos">476</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-477"><a href="#BigQuery-477"><span class="linenos">477</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="BigQuery-478"><a href="#BigQuery-478"><span class="linenos">478</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-479"><a href="#BigQuery-479"><span class="linenos">479</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-480"><a href="#BigQuery-480"><span class="linenos">480</span></a> <span class="p">}</span>
-</span><span id="BigQuery-481"><a href="#BigQuery-481"><span class="linenos">481</span></a>
-</span><span id="BigQuery-482"><a href="#BigQuery-482"><span class="linenos">482</span></a> <span class="c1"># from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords</span>
-</span><span id="BigQuery-483"><a href="#BigQuery-483"><span class="linenos">483</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-484"><a href="#BigQuery-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">RESERVED_KEYWORDS</span><span class="p">,</span>
-</span><span id="BigQuery-485"><a href="#BigQuery-485"><span class="linenos">485</span></a> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-486"><a href="#BigQuery-486"><span class="linenos">486</span></a> <span class="s2">&quot;and&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-487"><a href="#BigQuery-487"><span class="linenos">487</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-488"><a href="#BigQuery-488"><span class="linenos">488</span></a> <span class="s2">&quot;array&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-489"><a href="#BigQuery-489"><span class="linenos">489</span></a> <span class="s2">&quot;as&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-490"><a href="#BigQuery-490"><span class="linenos">490</span></a> <span class="s2">&quot;asc&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-491"><a href="#BigQuery-491"><span class="linenos">491</span></a> <span class="s2">&quot;assert_rows_modified&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-492"><a href="#BigQuery-492"><span class="linenos">492</span></a> <span class="s2">&quot;at&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-493"><a href="#BigQuery-493"><span class="linenos">493</span></a> <span class="s2">&quot;between&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-494"><a href="#BigQuery-494"><span class="linenos">494</span></a> <span class="s2">&quot;by&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-495"><a href="#BigQuery-495"><span class="linenos">495</span></a> <span class="s2">&quot;case&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-496"><a href="#BigQuery-496"><span class="linenos">496</span></a> <span class="s2">&quot;cast&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-497"><a href="#BigQuery-497"><span class="linenos">497</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-498"><a href="#BigQuery-498"><span class="linenos">498</span></a> <span class="s2">&quot;contains&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-499"><a href="#BigQuery-499"><span class="linenos">499</span></a> <span class="s2">&quot;create&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-500"><a href="#BigQuery-500"><span class="linenos">500</span></a> <span class="s2">&quot;cross&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-501"><a href="#BigQuery-501"><span class="linenos">501</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-502"><a href="#BigQuery-502"><span class="linenos">502</span></a> <span class="s2">&quot;current&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-503"><a href="#BigQuery-503"><span class="linenos">503</span></a> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-504"><a href="#BigQuery-504"><span class="linenos">504</span></a> <span class="s2">&quot;define&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-505"><a href="#BigQuery-505"><span class="linenos">505</span></a> <span class="s2">&quot;desc&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-506"><a href="#BigQuery-506"><span class="linenos">506</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-507"><a href="#BigQuery-507"><span class="linenos">507</span></a> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-508"><a href="#BigQuery-508"><span class="linenos">508</span></a> <span class="s2">&quot;end&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-509"><a href="#BigQuery-509"><span class="linenos">509</span></a> <span class="s2">&quot;enum&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-510"><a href="#BigQuery-510"><span class="linenos">510</span></a> <span class="s2">&quot;escape&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-511"><a href="#BigQuery-511"><span class="linenos">511</span></a> <span class="s2">&quot;except&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-512"><a href="#BigQuery-512"><span class="linenos">512</span></a> <span class="s2">&quot;exclude&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-513"><a href="#BigQuery-513"><span class="linenos">513</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-514"><a href="#BigQuery-514"><span class="linenos">514</span></a> <span class="s2">&quot;extract&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-515"><a href="#BigQuery-515"><span class="linenos">515</span></a> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-516"><a href="#BigQuery-516"><span class="linenos">516</span></a> <span class="s2">&quot;fetch&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-517"><a href="#BigQuery-517"><span class="linenos">517</span></a> <span class="s2">&quot;following&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-518"><a href="#BigQuery-518"><span class="linenos">518</span></a> <span class="s2">&quot;for&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-519"><a href="#BigQuery-519"><span class="linenos">519</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-520"><a href="#BigQuery-520"><span class="linenos">520</span></a> <span class="s2">&quot;full&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-521"><a href="#BigQuery-521"><span class="linenos">521</span></a> <span class="s2">&quot;group&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-522"><a href="#BigQuery-522"><span class="linenos">522</span></a> <span class="s2">&quot;grouping&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-523"><a href="#BigQuery-523"><span class="linenos">523</span></a> <span class="s2">&quot;groups&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-524"><a href="#BigQuery-524"><span class="linenos">524</span></a> <span class="s2">&quot;hash&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-525"><a href="#BigQuery-525"><span class="linenos">525</span></a> <span class="s2">&quot;having&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-526"><a href="#BigQuery-526"><span class="linenos">526</span></a> <span class="s2">&quot;if&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-527"><a href="#BigQuery-527"><span class="linenos">527</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-528"><a href="#BigQuery-528"><span class="linenos">528</span></a> <span class="s2">&quot;in&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-529"><a href="#BigQuery-529"><span class="linenos">529</span></a> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-530"><a href="#BigQuery-530"><span class="linenos">530</span></a> <span class="s2">&quot;intersect&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-531"><a href="#BigQuery-531"><span class="linenos">531</span></a> <span class="s2">&quot;interval&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-532"><a href="#BigQuery-532"><span class="linenos">532</span></a> <span class="s2">&quot;into&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-533"><a href="#BigQuery-533"><span class="linenos">533</span></a> <span class="s2">&quot;is&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-534"><a href="#BigQuery-534"><span class="linenos">534</span></a> <span class="s2">&quot;join&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-535"><a href="#BigQuery-535"><span class="linenos">535</span></a> <span class="s2">&quot;lateral&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-536"><a href="#BigQuery-536"><span class="linenos">536</span></a> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-537"><a href="#BigQuery-537"><span class="linenos">537</span></a> <span class="s2">&quot;like&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-538"><a href="#BigQuery-538"><span class="linenos">538</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-539"><a href="#BigQuery-539"><span class="linenos">539</span></a> <span class="s2">&quot;lookup&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-540"><a href="#BigQuery-540"><span class="linenos">540</span></a> <span class="s2">&quot;merge&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-541"><a href="#BigQuery-541"><span class="linenos">541</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-542"><a href="#BigQuery-542"><span class="linenos">542</span></a> <span class="s2">&quot;new&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-543"><a href="#BigQuery-543"><span class="linenos">543</span></a> <span class="s2">&quot;no&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-544"><a href="#BigQuery-544"><span class="linenos">544</span></a> <span class="s2">&quot;not&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-545"><a href="#BigQuery-545"><span class="linenos">545</span></a> <span class="s2">&quot;null&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-546"><a href="#BigQuery-546"><span class="linenos">546</span></a> <span class="s2">&quot;nulls&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-547"><a href="#BigQuery-547"><span class="linenos">547</span></a> <span class="s2">&quot;of&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-548"><a href="#BigQuery-548"><span class="linenos">548</span></a> <span class="s2">&quot;on&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-549"><a href="#BigQuery-549"><span class="linenos">549</span></a> <span class="s2">&quot;or&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-550"><a href="#BigQuery-550"><span class="linenos">550</span></a> <span class="s2">&quot;order&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-551"><a href="#BigQuery-551"><span class="linenos">551</span></a> <span class="s2">&quot;outer&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-552"><a href="#BigQuery-552"><span class="linenos">552</span></a> <span class="s2">&quot;over&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-553"><a href="#BigQuery-553"><span class="linenos">553</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-554"><a href="#BigQuery-554"><span class="linenos">554</span></a> <span class="s2">&quot;preceding&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-555"><a href="#BigQuery-555"><span class="linenos">555</span></a> <span class="s2">&quot;proto&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-556"><a href="#BigQuery-556"><span class="linenos">556</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-557"><a href="#BigQuery-557"><span class="linenos">557</span></a> <span class="s2">&quot;range&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-558"><a href="#BigQuery-558"><span class="linenos">558</span></a> <span class="s2">&quot;recursive&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-559"><a href="#BigQuery-559"><span class="linenos">559</span></a> <span class="s2">&quot;respect&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-560"><a href="#BigQuery-560"><span class="linenos">560</span></a> <span class="s2">&quot;right&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-561"><a href="#BigQuery-561"><span class="linenos">561</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-562"><a href="#BigQuery-562"><span class="linenos">562</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-563"><a href="#BigQuery-563"><span class="linenos">563</span></a> <span class="s2">&quot;select&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-564"><a href="#BigQuery-564"><span class="linenos">564</span></a> <span class="s2">&quot;set&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-565"><a href="#BigQuery-565"><span class="linenos">565</span></a> <span class="s2">&quot;some&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-566"><a href="#BigQuery-566"><span class="linenos">566</span></a> <span class="s2">&quot;struct&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-567"><a href="#BigQuery-567"><span class="linenos">567</span></a> <span class="s2">&quot;tablesample&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-568"><a href="#BigQuery-568"><span class="linenos">568</span></a> <span class="s2">&quot;then&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-569"><a href="#BigQuery-569"><span class="linenos">569</span></a> <span class="s2">&quot;to&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-570"><a href="#BigQuery-570"><span class="linenos">570</span></a> <span class="s2">&quot;treat&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-571"><a href="#BigQuery-571"><span class="linenos">571</span></a> <span class="s2">&quot;true&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-572"><a href="#BigQuery-572"><span class="linenos">572</span></a> <span class="s2">&quot;unbounded&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-573"><a href="#BigQuery-573"><span class="linenos">573</span></a> <span class="s2">&quot;union&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-574"><a href="#BigQuery-574"><span class="linenos">574</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-575"><a href="#BigQuery-575"><span class="linenos">575</span></a> <span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-576"><a href="#BigQuery-576"><span class="linenos">576</span></a> <span class="s2">&quot;when&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-577"><a href="#BigQuery-577"><span class="linenos">577</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-578"><a href="#BigQuery-578"><span class="linenos">578</span></a> <span class="s2">&quot;window&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-579"><a href="#BigQuery-579"><span class="linenos">579</span></a> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-580"><a href="#BigQuery-580"><span class="linenos">580</span></a> <span class="s2">&quot;within&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-581"><a href="#BigQuery-581"><span class="linenos">581</span></a> <span class="p">}</span>
-</span><span id="BigQuery-582"><a href="#BigQuery-582"><span class="linenos">582</span></a>
-</span><span id="BigQuery-583"><a href="#BigQuery-583"><span class="linenos">583</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="BigQuery-584"><a href="#BigQuery-584"><span class="linenos">584</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="BigQuery-585"><a href="#BigQuery-585"><span class="linenos">585</span></a>
-</span><span id="BigQuery-586"><a href="#BigQuery-586"><span class="linenos">586</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
-</span><span id="BigQuery-587"><a href="#BigQuery-587"><span class="linenos">587</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
-</span><span id="BigQuery-588"><a href="#BigQuery-588"><span class="linenos">588</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="BigQuery-589"><a href="#BigQuery-589"><span class="linenos">589</span></a> <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="BigQuery-590"><a href="#BigQuery-590"><span class="linenos">590</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">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;zone&quot;</span><span class="p">))</span>
-</span><span id="BigQuery-591"><a href="#BigQuery-591"><span class="linenos">591</span></a> <span class="p">)</span>
-</span><span id="BigQuery-592"><a href="#BigQuery-592"><span class="linenos">592</span></a>
-</span><span id="BigQuery-593"><a href="#BigQuery-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="BigQuery-594"><a href="#BigQuery-594"><span class="linenos">594</span></a>
-</span><span id="BigQuery-595"><a href="#BigQuery-595"><span class="linenos">595</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="BigQuery-596"><a href="#BigQuery-596"><span class="linenos">596</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-597"><a href="#BigQuery-597"><span class="linenos">597</span></a>
-</span><span id="BigQuery-598"><a href="#BigQuery-598"><span class="linenos">598</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="BigQuery-599"><a href="#BigQuery-599"><span class="linenos">599</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
-</span><span id="BigQuery-600"><a href="#BigQuery-600"><span class="linenos">600</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-601"><a href="#BigQuery-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="BigQuery-388"><a href="#BigQuery-388"><span class="linenos">388</span></a> <span class="k">return</span> <span class="n">table</span>
+</span><span id="BigQuery-389"><a href="#BigQuery-389"><span class="linenos">389</span></a>
+</span><span id="BigQuery-390"><a href="#BigQuery-390"><span class="linenos">390</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-391"><a href="#BigQuery-391"><span class="linenos">391</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-392"><a href="#BigQuery-392"><span class="linenos">392</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-393"><a href="#BigQuery-393"><span class="linenos">393</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-394"><a href="#BigQuery-394"><span class="linenos">394</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-395"><a href="#BigQuery-395"><span class="linenos">395</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-396"><a href="#BigQuery-396"><span class="linenos">396</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="BigQuery-397"><a href="#BigQuery-397"><span class="linenos">397</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-398"><a href="#BigQuery-398"><span class="linenos">398</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-399"><a href="#BigQuery-399"><span class="linenos">399</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-400"><a href="#BigQuery-400"><span class="linenos">400</span></a>
+</span><span id="BigQuery-401"><a href="#BigQuery-401"><span class="linenos">401</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-402"><a href="#BigQuery-402"><span class="linenos">402</span></a> <span 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="BigQuery-403"><a href="#BigQuery-403"><span class="linenos">403</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="BigQuery-404"><a href="#BigQuery-404"><span class="linenos">404</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-405"><a href="#BigQuery-405"><span class="linenos">405</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-406"><a href="#BigQuery-406"><span class="linenos">406</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-407"><a href="#BigQuery-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</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">_pushdown_cte_column_names</span><span class="p">]),</span>
+</span><span id="BigQuery-408"><a href="#BigQuery-408"><span class="linenos">408</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-409"><a href="#BigQuery-409"><span class="linenos">409</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-410"><a href="#BigQuery-410"><span class="linenos">410</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;DATE&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-411"><a href="#BigQuery-411"><span class="linenos">411</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-412"><a href="#BigQuery-412"><span class="linenos">412</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-413"><a href="#BigQuery-413"><span class="linenos">413</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-414"><a href="#BigQuery-414"><span class="linenos">414</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-415"><a href="#BigQuery-415"><span class="linenos">415</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-416"><a href="#BigQuery-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GENERATE_ARRAY&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-417"><a href="#BigQuery-417"><span class="linenos">417</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-418"><a href="#BigQuery-418"><span class="linenos">418</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="BigQuery-419"><a href="#BigQuery-419"><span class="linenos">419</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-420"><a href="#BigQuery-420"><span class="linenos">420</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-421"><a href="#BigQuery-421"><span class="linenos">421</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_STRING&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-422"><a href="#BigQuery-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">:</span> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="BigQuery-423"><a href="#BigQuery-423"><span class="linenos">423</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-424"><a href="#BigQuery-424"><span class="linenos">424</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;TO_HEX&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;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="BigQuery-425"><a href="#BigQuery-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-426"><a href="#BigQuery-426"><span class="linenos">426</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-427"><a href="#BigQuery-427"><span class="linenos">427</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-428"><a href="#BigQuery-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-429"><a href="#BigQuery-429"><span class="linenos">429</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-430"><a href="#BigQuery-430"><span class="linenos">430</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="BigQuery-431"><a href="#BigQuery-431"><span class="linenos">431</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="BigQuery-432"><a href="#BigQuery-432"><span class="linenos">432</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-433"><a href="#BigQuery-433"><span class="linenos">433</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-434"><a href="#BigQuery-434"><span class="linenos">434</span></a> <span class="p">),</span>
+</span><span id="BigQuery-435"><a href="#BigQuery-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="BigQuery-436"><a href="#BigQuery-436"><span class="linenos">436</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-437"><a href="#BigQuery-437"><span class="linenos">437</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-438"><a href="#BigQuery-438"><span class="linenos">438</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-439"><a href="#BigQuery-439"><span class="linenos">439</span></a> <span class="p">[</span>
+</span><span id="BigQuery-440"><a href="#BigQuery-440"><span class="linenos">440</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="BigQuery-441"><a href="#BigQuery-441"><span class="linenos">441</span></a> <span class="n">_unqualify_unnest</span><span class="p">,</span>
+</span><span id="BigQuery-442"><a href="#BigQuery-442"><span class="linenos">442</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="BigQuery-443"><a href="#BigQuery-443"><span class="linenos">443</span></a> <span class="n">_alias_ordered_group</span><span class="p">,</span>
+</span><span id="BigQuery-444"><a href="#BigQuery-444"><span class="linenos">444</span></a> <span class="p">]</span>
+</span><span id="BigQuery-445"><a href="#BigQuery-445"><span class="linenos">445</span></a> <span class="p">),</span>
+</span><span id="BigQuery-446"><a href="#BigQuery-446"><span class="linenos">446</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="BigQuery-447"><a href="#BigQuery-447"><span class="linenos">447</span></a> <span class="sa">f</span><span class="s2">&quot;SHA256&quot;</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;length&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;256&quot;</span> <span class="k">else</span> <span class="s2">&quot;SHA512&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="BigQuery-448"><a href="#BigQuery-448"><span class="linenos">448</span></a> <span class="p">),</span>
+</span><span id="BigQuery-449"><a href="#BigQuery-449"><span class="linenos">449</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-450"><a href="#BigQuery-450"><span class="linenos">450</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-451"><a href="#BigQuery-451"><span class="linenos">451</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-452"><a href="#BigQuery-452"><span class="linenos">452</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;PARSE_DATE(</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-453"><a href="#BigQuery-453"><span class="linenos">453</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="BigQuery-454"><a href="#BigQuery-454"><span class="linenos">454</span></a> <span class="s2">&quot;PARSE_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 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-455"><a href="#BigQuery-455"><span class="linenos">455</span></a> <span class="p">),</span>
+</span><span id="BigQuery-456"><a href="#BigQuery-456"><span class="linenos">456</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-457"><a href="#BigQuery-457"><span class="linenos">457</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-458"><a href="#BigQuery-458"><span class="linenos">458</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-459"><a href="#BigQuery-459"><span class="linenos">459</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-460"><a href="#BigQuery-460"><span class="linenos">460</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-461"><a href="#BigQuery-461"><span class="linenos">461</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-462"><a href="#BigQuery-462"><span class="linenos">462</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-463"><a href="#BigQuery-463"><span class="linenos">463</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-464"><a href="#BigQuery-464"><span class="linenos">464</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="BigQuery-465"><a href="#BigQuery-465"><span class="linenos">465</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-466"><a href="#BigQuery-466"><span class="linenos">466</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-467"><a href="#BigQuery-467"><span class="linenos">467</span></a> <span class="p">}</span>
+</span><span id="BigQuery-468"><a href="#BigQuery-468"><span class="linenos">468</span></a>
+</span><span id="BigQuery-469"><a href="#BigQuery-469"><span class="linenos">469</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-470"><a href="#BigQuery-470"><span class="linenos">470</span></a> <span 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="BigQuery-471"><a href="#BigQuery-471"><span class="linenos">471</span></a> <span class="n">exp</span><span 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-472"><a href="#BigQuery-472"><span class="linenos">472</span></a> <span class="n">exp</span><span 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-473"><a href="#BigQuery-473"><span class="linenos">473</span></a> <span class="n">exp</span><span 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-474"><a href="#BigQuery-474"><span class="linenos">474</span></a> <span class="n">exp</span><span 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-475"><a href="#BigQuery-475"><span class="linenos">475</span></a> <span class="n">exp</span><span 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-476"><a href="#BigQuery-476"><span class="linenos">476</span></a> <span class="n">exp</span><span 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-477"><a href="#BigQuery-477"><span class="linenos">477</span></a> <span class="n">exp</span><span 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-478"><a href="#BigQuery-478"><span class="linenos">478</span></a> <span class="n">exp</span><span 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-479"><a href="#BigQuery-479"><span class="linenos">479</span></a> <span class="n">exp</span><span 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-480"><a href="#BigQuery-480"><span class="linenos">480</span></a> <span class="n">exp</span><span 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-481"><a href="#BigQuery-481"><span class="linenos">481</span></a> <span class="n">exp</span><span 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-482"><a href="#BigQuery-482"><span class="linenos">482</span></a> <span class="n">exp</span><span 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-483"><a href="#BigQuery-483"><span class="linenos">483</span></a> <span class="n">exp</span><span 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-484"><a href="#BigQuery-484"><span class="linenos">484</span></a> <span class="n">exp</span><span 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-485"><a href="#BigQuery-485"><span class="linenos">485</span></a> <span class="n">exp</span><span 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-486"><a href="#BigQuery-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-487"><a href="#BigQuery-487"><span class="linenos">487</span></a> <span class="n">exp</span><span 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-488"><a href="#BigQuery-488"><span class="linenos">488</span></a> <span class="n">exp</span><span 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-489"><a href="#BigQuery-489"><span class="linenos">489</span></a> <span class="n">exp</span><span 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-490"><a href="#BigQuery-490"><span class="linenos">490</span></a> <span class="n">exp</span><span 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-491"><a href="#BigQuery-491"><span class="linenos">491</span></a> <span class="p">}</span>
+</span><span id="BigQuery-492"><a href="#BigQuery-492"><span class="linenos">492</span></a>
+</span><span id="BigQuery-493"><a href="#BigQuery-493"><span class="linenos">493</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-494"><a href="#BigQuery-494"><span class="linenos">494</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="BigQuery-495"><a href="#BigQuery-495"><span class="linenos">495</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-496"><a href="#BigQuery-496"><span class="linenos">496</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="BigQuery-497"><a href="#BigQuery-497"><span class="linenos">497</span></a> <span class="p">}</span>
+</span><span id="BigQuery-498"><a href="#BigQuery-498"><span class="linenos">498</span></a>
+</span><span id="BigQuery-499"><a href="#BigQuery-499"><span class="linenos">499</span></a> <span class="c1"># from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords</span>
+</span><span id="BigQuery-500"><a href="#BigQuery-500"><span class="linenos">500</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-501"><a href="#BigQuery-501"><span class="linenos">501</span></a> <span class="o">*</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span>
+</span><span id="BigQuery-502"><a href="#BigQuery-502"><span class="linenos">502</span></a> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-503"><a href="#BigQuery-503"><span class="linenos">503</span></a> <span class="s2">&quot;and&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-504"><a href="#BigQuery-504"><span class="linenos">504</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-505"><a href="#BigQuery-505"><span class="linenos">505</span></a> <span class="s2">&quot;array&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-506"><a href="#BigQuery-506"><span class="linenos">506</span></a> <span class="s2">&quot;as&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-507"><a href="#BigQuery-507"><span class="linenos">507</span></a> <span class="s2">&quot;asc&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-508"><a href="#BigQuery-508"><span class="linenos">508</span></a> <span class="s2">&quot;assert_rows_modified&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-509"><a href="#BigQuery-509"><span class="linenos">509</span></a> <span class="s2">&quot;at&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-510"><a href="#BigQuery-510"><span class="linenos">510</span></a> <span class="s2">&quot;between&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-511"><a href="#BigQuery-511"><span class="linenos">511</span></a> <span class="s2">&quot;by&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-512"><a href="#BigQuery-512"><span class="linenos">512</span></a> <span class="s2">&quot;case&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-513"><a href="#BigQuery-513"><span class="linenos">513</span></a> <span class="s2">&quot;cast&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-514"><a href="#BigQuery-514"><span class="linenos">514</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-515"><a href="#BigQuery-515"><span class="linenos">515</span></a> <span class="s2">&quot;contains&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-516"><a href="#BigQuery-516"><span class="linenos">516</span></a> <span class="s2">&quot;create&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-517"><a href="#BigQuery-517"><span class="linenos">517</span></a> <span class="s2">&quot;cross&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-518"><a href="#BigQuery-518"><span class="linenos">518</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-519"><a href="#BigQuery-519"><span class="linenos">519</span></a> <span class="s2">&quot;current&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-520"><a href="#BigQuery-520"><span class="linenos">520</span></a> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-521"><a href="#BigQuery-521"><span class="linenos">521</span></a> <span class="s2">&quot;define&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-522"><a href="#BigQuery-522"><span class="linenos">522</span></a> <span class="s2">&quot;desc&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-523"><a href="#BigQuery-523"><span class="linenos">523</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-524"><a href="#BigQuery-524"><span class="linenos">524</span></a> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-525"><a href="#BigQuery-525"><span class="linenos">525</span></a> <span class="s2">&quot;end&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-526"><a href="#BigQuery-526"><span class="linenos">526</span></a> <span class="s2">&quot;enum&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-527"><a href="#BigQuery-527"><span class="linenos">527</span></a> <span class="s2">&quot;escape&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-528"><a href="#BigQuery-528"><span class="linenos">528</span></a> <span class="s2">&quot;except&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-529"><a href="#BigQuery-529"><span class="linenos">529</span></a> <span class="s2">&quot;exclude&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-530"><a href="#BigQuery-530"><span class="linenos">530</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-531"><a href="#BigQuery-531"><span class="linenos">531</span></a> <span class="s2">&quot;extract&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-532"><a href="#BigQuery-532"><span class="linenos">532</span></a> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-533"><a href="#BigQuery-533"><span class="linenos">533</span></a> <span class="s2">&quot;fetch&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-534"><a href="#BigQuery-534"><span class="linenos">534</span></a> <span class="s2">&quot;following&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-535"><a href="#BigQuery-535"><span class="linenos">535</span></a> <span class="s2">&quot;for&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-536"><a href="#BigQuery-536"><span class="linenos">536</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-537"><a href="#BigQuery-537"><span class="linenos">537</span></a> <span class="s2">&quot;full&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-538"><a href="#BigQuery-538"><span class="linenos">538</span></a> <span class="s2">&quot;group&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-539"><a href="#BigQuery-539"><span class="linenos">539</span></a> <span class="s2">&quot;grouping&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-540"><a href="#BigQuery-540"><span class="linenos">540</span></a> <span class="s2">&quot;groups&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-541"><a href="#BigQuery-541"><span class="linenos">541</span></a> <span class="s2">&quot;hash&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-542"><a href="#BigQuery-542"><span class="linenos">542</span></a> <span class="s2">&quot;having&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-543"><a href="#BigQuery-543"><span class="linenos">543</span></a> <span class="s2">&quot;if&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-544"><a href="#BigQuery-544"><span class="linenos">544</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-545"><a href="#BigQuery-545"><span class="linenos">545</span></a> <span class="s2">&quot;in&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-546"><a href="#BigQuery-546"><span class="linenos">546</span></a> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-547"><a href="#BigQuery-547"><span class="linenos">547</span></a> <span class="s2">&quot;intersect&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-548"><a href="#BigQuery-548"><span class="linenos">548</span></a> <span class="s2">&quot;interval&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-549"><a href="#BigQuery-549"><span class="linenos">549</span></a> <span class="s2">&quot;into&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-550"><a href="#BigQuery-550"><span class="linenos">550</span></a> <span class="s2">&quot;is&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-551"><a href="#BigQuery-551"><span class="linenos">551</span></a> <span class="s2">&quot;join&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-552"><a href="#BigQuery-552"><span class="linenos">552</span></a> <span class="s2">&quot;lateral&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-553"><a href="#BigQuery-553"><span class="linenos">553</span></a> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-554"><a href="#BigQuery-554"><span class="linenos">554</span></a> <span class="s2">&quot;like&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-555"><a href="#BigQuery-555"><span class="linenos">555</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-556"><a href="#BigQuery-556"><span class="linenos">556</span></a> <span class="s2">&quot;lookup&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-557"><a href="#BigQuery-557"><span class="linenos">557</span></a> <span class="s2">&quot;merge&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-558"><a href="#BigQuery-558"><span class="linenos">558</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-559"><a href="#BigQuery-559"><span class="linenos">559</span></a> <span class="s2">&quot;new&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-560"><a href="#BigQuery-560"><span class="linenos">560</span></a> <span class="s2">&quot;no&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-561"><a href="#BigQuery-561"><span class="linenos">561</span></a> <span class="s2">&quot;not&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-562"><a href="#BigQuery-562"><span class="linenos">562</span></a> <span class="s2">&quot;null&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-563"><a href="#BigQuery-563"><span class="linenos">563</span></a> <span class="s2">&quot;nulls&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-564"><a href="#BigQuery-564"><span class="linenos">564</span></a> <span class="s2">&quot;of&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-565"><a href="#BigQuery-565"><span class="linenos">565</span></a> <span class="s2">&quot;on&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-566"><a href="#BigQuery-566"><span class="linenos">566</span></a> <span class="s2">&quot;or&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-567"><a href="#BigQuery-567"><span class="linenos">567</span></a> <span class="s2">&quot;order&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-568"><a href="#BigQuery-568"><span class="linenos">568</span></a> <span class="s2">&quot;outer&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-569"><a href="#BigQuery-569"><span class="linenos">569</span></a> <span class="s2">&quot;over&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-570"><a href="#BigQuery-570"><span class="linenos">570</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-571"><a href="#BigQuery-571"><span class="linenos">571</span></a> <span class="s2">&quot;preceding&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-572"><a href="#BigQuery-572"><span class="linenos">572</span></a> <span class="s2">&quot;proto&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-573"><a href="#BigQuery-573"><span class="linenos">573</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-574"><a href="#BigQuery-574"><span class="linenos">574</span></a> <span class="s2">&quot;range&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-575"><a href="#BigQuery-575"><span class="linenos">575</span></a> <span class="s2">&quot;recursive&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-576"><a href="#BigQuery-576"><span class="linenos">576</span></a> <span class="s2">&quot;respect&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-577"><a href="#BigQuery-577"><span class="linenos">577</span></a> <span class="s2">&quot;right&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-578"><a href="#BigQuery-578"><span class="linenos">578</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-579"><a href="#BigQuery-579"><span class="linenos">579</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-580"><a href="#BigQuery-580"><span class="linenos">580</span></a> <span class="s2">&quot;select&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-581"><a href="#BigQuery-581"><span class="linenos">581</span></a> <span class="s2">&quot;set&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-582"><a href="#BigQuery-582"><span class="linenos">582</span></a> <span class="s2">&quot;some&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-583"><a href="#BigQuery-583"><span class="linenos">583</span></a> <span class="s2">&quot;struct&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-584"><a href="#BigQuery-584"><span class="linenos">584</span></a> <span class="s2">&quot;tablesample&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-585"><a href="#BigQuery-585"><span class="linenos">585</span></a> <span class="s2">&quot;then&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-586"><a href="#BigQuery-586"><span class="linenos">586</span></a> <span class="s2">&quot;to&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-587"><a href="#BigQuery-587"><span class="linenos">587</span></a> <span class="s2">&quot;treat&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-588"><a href="#BigQuery-588"><span class="linenos">588</span></a> <span class="s2">&quot;true&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-589"><a href="#BigQuery-589"><span class="linenos">589</span></a> <span class="s2">&quot;unbounded&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-590"><a href="#BigQuery-590"><span class="linenos">590</span></a> <span class="s2">&quot;union&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-591"><a href="#BigQuery-591"><span class="linenos">591</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-592"><a href="#BigQuery-592"><span class="linenos">592</span></a> <span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-593"><a href="#BigQuery-593"><span class="linenos">593</span></a> <span class="s2">&quot;when&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-594"><a href="#BigQuery-594"><span class="linenos">594</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-595"><a href="#BigQuery-595"><span class="linenos">595</span></a> <span class="s2">&quot;window&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-596"><a href="#BigQuery-596"><span class="linenos">596</span></a> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-597"><a href="#BigQuery-597"><span class="linenos">597</span></a> <span class="s2">&quot;within&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-598"><a href="#BigQuery-598"><span class="linenos">598</span></a> <span class="p">}</span>
+</span><span id="BigQuery-599"><a href="#BigQuery-599"><span class="linenos">599</span></a>
+</span><span id="BigQuery-600"><a href="#BigQuery-600"><span class="linenos">600</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="BigQuery-601"><a href="#BigQuery-601"><span class="linenos">601</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
</span><span id="BigQuery-602"><a href="#BigQuery-602"><span class="linenos">602</span></a>
-</span><span id="BigQuery-603"><a href="#BigQuery-603"><span class="linenos">603</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-604"><a href="#BigQuery-604"><span class="linenos">604</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-605"><a href="#BigQuery-605"><span class="linenos">605</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-606"><a href="#BigQuery-606"><span class="linenos">606</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-607"><a href="#BigQuery-607"><span class="linenos">607</span></a>
-</span><span id="BigQuery-608"><a href="#BigQuery-608"><span class="linenos">608</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-603"><a href="#BigQuery-603"><span class="linenos">603</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
+</span><span id="BigQuery-604"><a href="#BigQuery-604"><span class="linenos">604</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
+</span><span id="BigQuery-605"><a href="#BigQuery-605"><span class="linenos">605</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="BigQuery-606"><a href="#BigQuery-606"><span class="linenos">606</span></a> <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="BigQuery-607"><a href="#BigQuery-607"><span class="linenos">607</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">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;zone&quot;</span><span class="p">))</span>
+</span><span id="BigQuery-608"><a href="#BigQuery-608"><span class="linenos">608</span></a> <span class="p">)</span>
</span><span id="BigQuery-609"><a href="#BigQuery-609"><span class="linenos">609</span></a>
-</span><span id="BigQuery-610"><a href="#BigQuery-610"><span class="linenos">610</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-611"><a href="#BigQuery-611"><span class="linenos">611</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
-</span><span id="BigQuery-612"><a href="#BigQuery-612"><span class="linenos">612</span></a>
-</span><span id="BigQuery-613"><a href="#BigQuery-613"><span class="linenos">613</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-614"><a href="#BigQuery-614"><span class="linenos">614</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
-</span><span id="BigQuery-615"><a href="#BigQuery-615"><span class="linenos">615</span></a>
-</span><span id="BigQuery-616"><a href="#BigQuery-616"><span class="linenos">616</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-617"><a href="#BigQuery-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
-</span><span id="BigQuery-618"><a href="#BigQuery-618"><span class="linenos">618</span></a>
-</span><span id="BigQuery-619"><a href="#BigQuery-619"><span class="linenos">619</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-620"><a href="#BigQuery-620"><span class="linenos">620</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-621"><a href="#BigQuery-621"><span class="linenos">621</span></a>
-</span><span id="BigQuery-622"><a href="#BigQuery-622"><span class="linenos">622</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-623"><a href="#BigQuery-623"><span class="linenos">623</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-624"><a href="#BigQuery-624"><span class="linenos">624</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-625"><a href="#BigQuery-625"><span class="linenos">625</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-610"><a href="#BigQuery-610"><span class="linenos">610</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="BigQuery-611"><a href="#BigQuery-611"><span class="linenos">611</span></a>
+</span><span id="BigQuery-612"><a href="#BigQuery-612"><span class="linenos">612</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="BigQuery-613"><a href="#BigQuery-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-614"><a href="#BigQuery-614"><span class="linenos">614</span></a>
+</span><span id="BigQuery-615"><a href="#BigQuery-615"><span class="linenos">615</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery-616"><a href="#BigQuery-616"><span class="linenos">616</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
+</span><span id="BigQuery-617"><a href="#BigQuery-617"><span class="linenos">617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-618"><a href="#BigQuery-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="BigQuery-619"><a href="#BigQuery-619"><span class="linenos">619</span></a>
+</span><span id="BigQuery-620"><a href="#BigQuery-620"><span class="linenos">620</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-621"><a href="#BigQuery-621"><span class="linenos">621</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-622"><a href="#BigQuery-622"><span class="linenos">622</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-623"><a href="#BigQuery-623"><span class="linenos">623</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-624"><a href="#BigQuery-624"><span class="linenos">624</span></a>
+</span><span id="BigQuery-625"><a href="#BigQuery-625"><span class="linenos">625</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-626"><a href="#BigQuery-626"><span class="linenos">626</span></a>
-</span><span id="BigQuery-627"><a href="#BigQuery-627"><span class="linenos">627</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-628"><a href="#BigQuery-628"><span class="linenos">628</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-629"><a href="#BigQuery-629"><span class="linenos">629</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-630"><a href="#BigQuery-630"><span class="linenos">630</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-631"><a href="#BigQuery-631"><span class="linenos">631</span></a>
-</span><span id="BigQuery-632"><a href="#BigQuery-632"><span class="linenos">632</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-633"><a href="#BigQuery-633"><span class="linenos">633</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><span id="BigQuery-627"><a href="#BigQuery-627"><span class="linenos">627</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-628"><a href="#BigQuery-628"><span class="linenos">628</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
+</span><span id="BigQuery-629"><a href="#BigQuery-629"><span class="linenos">629</span></a>
+</span><span id="BigQuery-630"><a href="#BigQuery-630"><span class="linenos">630</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-631"><a href="#BigQuery-631"><span class="linenos">631</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
+</span><span id="BigQuery-632"><a href="#BigQuery-632"><span class="linenos">632</span></a>
+</span><span id="BigQuery-633"><a href="#BigQuery-633"><span class="linenos">633</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-634"><a href="#BigQuery-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
+</span><span id="BigQuery-635"><a href="#BigQuery-635"><span class="linenos">635</span></a>
+</span><span id="BigQuery-636"><a href="#BigQuery-636"><span class="linenos">636</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-637"><a href="#BigQuery-637"><span class="linenos">637</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-638"><a href="#BigQuery-638"><span class="linenos">638</span></a>
+</span><span id="BigQuery-639"><a href="#BigQuery-639"><span class="linenos">639</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-640"><a href="#BigQuery-640"><span class="linenos">640</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-641"><a href="#BigQuery-641"><span class="linenos">641</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-642"><a href="#BigQuery-642"><span class="linenos">642</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-643"><a href="#BigQuery-643"><span class="linenos">643</span></a>
+</span><span id="BigQuery-644"><a href="#BigQuery-644"><span class="linenos">644</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-645"><a href="#BigQuery-645"><span class="linenos">645</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-646"><a href="#BigQuery-646"><span class="linenos">646</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-647"><a href="#BigQuery-647"><span class="linenos">647</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-648"><a href="#BigQuery-648"><span class="linenos">648</span></a>
+</span><span id="BigQuery-649"><a href="#BigQuery-649"><span class="linenos">649</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-650"><a href="#BigQuery-650"><span class="linenos">650</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><span id="BigQuery-651"><a href="#BigQuery-651"><span class="linenos">651</span></a>
+</span><span id="BigQuery-652"><a href="#BigQuery-652"><span class="linenos">652</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery-653"><a href="#BigQuery-653"><span class="linenos">653</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;TIMESTAMP&quot;</span><span class="p">:</span>
+</span><span id="BigQuery-654"><a href="#BigQuery-654"><span class="linenos">654</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="BigQuery-655"><a href="#BigQuery-655"><span class="linenos">655</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="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-656"><a href="#BigQuery-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1551,25 +1599,25 @@
</div>
<a class="headerlink" href="#BigQuery.normalize_identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.normalize_identifier-215"><a href="#BigQuery.normalize_identifier-215"><span class="linenos">215</span></a> <span class="nd">@classmethod</span>
-</span><span id="BigQuery.normalize_identifier-216"><a href="#BigQuery.normalize_identifier-216"><span class="linenos">216</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="BigQuery.normalize_identifier-217"><a href="#BigQuery.normalize_identifier-217"><span class="linenos">217</span></a> <span class="c1"># In BigQuery, CTEs aren&#39;t case-sensitive, but table names are (by default, at least).</span>
-</span><span id="BigQuery.normalize_identifier-218"><a href="#BigQuery.normalize_identifier-218"><span class="linenos">218</span></a> <span class="c1"># The following check is essentially a heuristic to detect tables based on whether or</span>
-</span><span id="BigQuery.normalize_identifier-219"><a href="#BigQuery.normalize_identifier-219"><span class="linenos">219</span></a> <span class="c1"># not they&#39;re qualified.</span>
-</span><span id="BigQuery.normalize_identifier-220"><a href="#BigQuery.normalize_identifier-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="BigQuery.normalize_identifier-221"><a href="#BigQuery.normalize_identifier-221"><span class="linenos">221</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="BigQuery.normalize_identifier-222"><a href="#BigQuery.normalize_identifier-222"><span class="linenos">222</span></a>
-</span><span id="BigQuery.normalize_identifier-223"><a href="#BigQuery.normalize_identifier-223"><span class="linenos">223</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="BigQuery.normalize_identifier-224"><a href="#BigQuery.normalize_identifier-224"><span class="linenos">224</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="BigQuery.normalize_identifier-225"><a href="#BigQuery.normalize_identifier-225"><span class="linenos">225</span></a>
-</span><span id="BigQuery.normalize_identifier-226"><a href="#BigQuery.normalize_identifier-226"><span class="linenos">226</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="BigQuery.normalize_identifier-227"><a href="#BigQuery.normalize_identifier-227"><span class="linenos">227</span></a> <span class="ow">not</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">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="BigQuery.normalize_identifier-228"><a href="#BigQuery.normalize_identifier-228"><span class="linenos">228</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="n">parent</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
-</span><span id="BigQuery.normalize_identifier-229"><a href="#BigQuery.normalize_identifier-229"><span class="linenos">229</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_table&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.normalize_identifier-230"><a href="#BigQuery.normalize_identifier-230"><span class="linenos">230</span></a> <span class="p">):</span>
-</span><span id="BigQuery.normalize_identifier-231"><a href="#BigQuery.normalize_identifier-231"><span class="linenos">231</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.normalize_identifier-222"><a href="#BigQuery.normalize_identifier-222"><span class="linenos">222</span></a> <span class="nd">@classmethod</span>
+</span><span id="BigQuery.normalize_identifier-223"><a href="#BigQuery.normalize_identifier-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="BigQuery.normalize_identifier-224"><a href="#BigQuery.normalize_identifier-224"><span class="linenos">224</span></a> <span class="c1"># In BigQuery, CTEs aren&#39;t case-sensitive, but table names are (by default, at least).</span>
+</span><span id="BigQuery.normalize_identifier-225"><a href="#BigQuery.normalize_identifier-225"><span class="linenos">225</span></a> <span class="c1"># The following check is essentially a heuristic to detect tables based on whether or</span>
+</span><span id="BigQuery.normalize_identifier-226"><a href="#BigQuery.normalize_identifier-226"><span class="linenos">226</span></a> <span class="c1"># not they&#39;re qualified.</span>
+</span><span id="BigQuery.normalize_identifier-227"><a href="#BigQuery.normalize_identifier-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">Identifier</span><span class="p">):</span>
+</span><span id="BigQuery.normalize_identifier-228"><a href="#BigQuery.normalize_identifier-228"><span class="linenos">228</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="BigQuery.normalize_identifier-229"><a href="#BigQuery.normalize_identifier-229"><span class="linenos">229</span></a>
+</span><span id="BigQuery.normalize_identifier-230"><a href="#BigQuery.normalize_identifier-230"><span class="linenos">230</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="BigQuery.normalize_identifier-231"><a href="#BigQuery.normalize_identifier-231"><span class="linenos">231</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="BigQuery.normalize_identifier-232"><a href="#BigQuery.normalize_identifier-232"><span class="linenos">232</span></a>
-</span><span id="BigQuery.normalize_identifier-233"><a href="#BigQuery.normalize_identifier-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="BigQuery.normalize_identifier-233"><a href="#BigQuery.normalize_identifier-233"><span class="linenos">233</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="BigQuery.normalize_identifier-234"><a href="#BigQuery.normalize_identifier-234"><span class="linenos">234</span></a> <span class="ow">not</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">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="BigQuery.normalize_identifier-235"><a href="#BigQuery.normalize_identifier-235"><span class="linenos">235</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="n">parent</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
+</span><span id="BigQuery.normalize_identifier-236"><a href="#BigQuery.normalize_identifier-236"><span class="linenos">236</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_table&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.normalize_identifier-237"><a href="#BigQuery.normalize_identifier-237"><span class="linenos">237</span></a> <span class="p">):</span>
+</span><span id="BigQuery.normalize_identifier-238"><a href="#BigQuery.normalize_identifier-238"><span class="linenos">238</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="BigQuery.normalize_identifier-239"><a href="#BigQuery.normalize_identifier-239"><span class="linenos">239</span></a>
+</span><span id="BigQuery.normalize_identifier-240"><a href="#BigQuery.normalize_identifier-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1792,6 +1840,7 @@ they will be normalized regardless of being quoted or not.</p>
<dd id="BigQuery.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="BigQuery.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="BigQuery.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="BigQuery.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="BigQuery.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="BigQuery.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
<dd id="BigQuery.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
@@ -1826,38 +1875,39 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#BigQuery.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Tokenizer-235"><a href="#BigQuery.Tokenizer-235"><span class="linenos">235</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-236"><a href="#BigQuery.Tokenizer-236"><span class="linenos">236</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 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-237"><a href="#BigQuery.Tokenizer-237"><span class="linenos">237</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-238"><a href="#BigQuery.Tokenizer-238"><span class="linenos">238</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-239"><a href="#BigQuery.Tokenizer-239"><span class="linenos">239</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-240"><a href="#BigQuery.Tokenizer-240"><span class="linenos">240</span></a>
-</span><span id="BigQuery.Tokenizer-241"><a href="#BigQuery.Tokenizer-241"><span class="linenos">241</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-242"><a href="#BigQuery.Tokenizer-242"><span class="linenos">242</span></a>
-</span><span id="BigQuery.Tokenizer-243"><a href="#BigQuery.Tokenizer-243"><span class="linenos">243</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="BigQuery.Tokenizer-244"><a href="#BigQuery.Tokenizer-244"><span class="linenos">244</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Tokenizer-245"><a href="#BigQuery.Tokenizer-245"><span class="linenos">245</span></a> <span class="p">]</span>
-</span><span id="BigQuery.Tokenizer-246"><a href="#BigQuery.Tokenizer-246"><span class="linenos">246</span></a>
-</span><span id="BigQuery.Tokenizer-247"><a href="#BigQuery.Tokenizer-247"><span class="linenos">247</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="BigQuery.Tokenizer-248"><a href="#BigQuery.Tokenizer-248"><span class="linenos">248</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-249"><a href="#BigQuery.Tokenizer-249"><span class="linenos">249</span></a> <span class="p">]</span>
-</span><span id="BigQuery.Tokenizer-250"><a href="#BigQuery.Tokenizer-250"><span class="linenos">250</span></a>
-</span><span id="BigQuery.Tokenizer-251"><a href="#BigQuery.Tokenizer-251"><span class="linenos">251</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Tokenizer-252"><a href="#BigQuery.Tokenizer-252"><span class="linenos">252</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-253"><a href="#BigQuery.Tokenizer-253"><span class="linenos">253</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-254"><a href="#BigQuery.Tokenizer-254"><span class="linenos">254</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-255"><a href="#BigQuery.Tokenizer-255"><span class="linenos">255</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-256"><a href="#BigQuery.Tokenizer-256"><span class="linenos">256</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-257"><a href="#BigQuery.Tokenizer-257"><span class="linenos">257</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-258"><a href="#BigQuery.Tokenizer-258"><span class="linenos">258</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-259"><a href="#BigQuery.Tokenizer-259"><span class="linenos">259</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-260"><a href="#BigQuery.Tokenizer-260"><span class="linenos">260</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-261"><a href="#BigQuery.Tokenizer-261"><span class="linenos">261</span></a> <span class="s2">&quot;RECORD&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="BigQuery.Tokenizer-262"><a href="#BigQuery.Tokenizer-262"><span class="linenos">262</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">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="BigQuery.Tokenizer-263"><a href="#BigQuery.Tokenizer-263"><span class="linenos">263</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-264"><a href="#BigQuery.Tokenizer-264"><span class="linenos">264</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-265"><a href="#BigQuery.Tokenizer-265"><span class="linenos">265</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Tokenizer-266"><a href="#BigQuery.Tokenizer-266"><span class="linenos">266</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-242"><a href="#BigQuery.Tokenizer-242"><span class="linenos">242</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="BigQuery.Tokenizer-243"><a href="#BigQuery.Tokenizer-243"><span class="linenos">243</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 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-244"><a href="#BigQuery.Tokenizer-244"><span class="linenos">244</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-245"><a href="#BigQuery.Tokenizer-245"><span class="linenos">245</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-246"><a href="#BigQuery.Tokenizer-246"><span class="linenos">246</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-247"><a href="#BigQuery.Tokenizer-247"><span class="linenos">247</span></a>
+</span><span id="BigQuery.Tokenizer-248"><a href="#BigQuery.Tokenizer-248"><span class="linenos">248</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-249"><a href="#BigQuery.Tokenizer-249"><span class="linenos">249</span></a>
+</span><span id="BigQuery.Tokenizer-250"><a href="#BigQuery.Tokenizer-250"><span class="linenos">250</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="BigQuery.Tokenizer-251"><a href="#BigQuery.Tokenizer-251"><span class="linenos">251</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Tokenizer-252"><a href="#BigQuery.Tokenizer-252"><span class="linenos">252</span></a> <span class="p">]</span>
+</span><span id="BigQuery.Tokenizer-253"><a href="#BigQuery.Tokenizer-253"><span class="linenos">253</span></a>
+</span><span id="BigQuery.Tokenizer-254"><a href="#BigQuery.Tokenizer-254"><span class="linenos">254</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="BigQuery.Tokenizer-255"><a href="#BigQuery.Tokenizer-255"><span class="linenos">255</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">q</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="k">for</span> <span class="n">q</span> <span class="ow">in</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="nb">str</span><span class="p">],</span> <span class="n">QUOTES</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-256"><a href="#BigQuery.Tokenizer-256"><span class="linenos">256</span></a> <span class="p">]</span>
+</span><span id="BigQuery.Tokenizer-257"><a href="#BigQuery.Tokenizer-257"><span class="linenos">257</span></a>
+</span><span id="BigQuery.Tokenizer-258"><a href="#BigQuery.Tokenizer-258"><span class="linenos">258</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Tokenizer-259"><a href="#BigQuery.Tokenizer-259"><span class="linenos">259</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-260"><a href="#BigQuery.Tokenizer-260"><span class="linenos">260</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-261"><a href="#BigQuery.Tokenizer-261"><span class="linenos">261</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-262"><a href="#BigQuery.Tokenizer-262"><span class="linenos">262</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-263"><a href="#BigQuery.Tokenizer-263"><span class="linenos">263</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-264"><a href="#BigQuery.Tokenizer-264"><span class="linenos">264</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-265"><a href="#BigQuery.Tokenizer-265"><span class="linenos">265</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-266"><a href="#BigQuery.Tokenizer-266"><span class="linenos">266</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-267"><a href="#BigQuery.Tokenizer-267"><span class="linenos">267</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-268"><a href="#BigQuery.Tokenizer-268"><span class="linenos">268</span></a> <span class="s2">&quot;RECORD&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="BigQuery.Tokenizer-269"><a href="#BigQuery.Tokenizer-269"><span class="linenos">269</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">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="BigQuery.Tokenizer-270"><a href="#BigQuery.Tokenizer-270"><span class="linenos">270</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-271"><a href="#BigQuery.Tokenizer-271"><span class="linenos">271</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-272"><a href="#BigQuery.Tokenizer-272"><span class="linenos">272</span></a> <span class="s2">&quot;FOR SYSTEM_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="BigQuery.Tokenizer-273"><a href="#BigQuery.Tokenizer-273"><span class="linenos">273</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Tokenizer-274"><a href="#BigQuery.Tokenizer-274"><span class="linenos">274</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>
@@ -1953,7 +2003,7 @@ they will be normalized regardless of being quoted or not.</p>
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="BigQuery.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;ANY TYPE&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;BEGIN TRANSACTION&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &#39;BYTES&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;FLOAT64&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;INT64&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;RECORD&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;NOT DETERMINISTIC&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;ANY TYPE&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;BEGIN TRANSACTION&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &#39;BYTES&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;FLOAT64&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;INT64&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;RECORD&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;NOT DETERMINISTIC&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;FOR SYSTEM_TIME&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;}</span>
</div>
@@ -1998,115 +2048,119 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#BigQuery.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Parser-268"><a href="#BigQuery.Parser-268"><span class="linenos">268</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-269"><a href="#BigQuery.Parser-269"><span class="linenos">269</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Parser-270"><a href="#BigQuery.Parser-270"><span class="linenos">270</span></a>
-</span><span id="BigQuery.Parser-271"><a href="#BigQuery.Parser-271"><span class="linenos">271</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Parser-272"><a href="#BigQuery.Parser-272"><span class="linenos">272</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Parser-273"><a href="#BigQuery.Parser-273"><span class="linenos">273</span></a>
-</span><span id="BigQuery.Parser-274"><a href="#BigQuery.Parser-274"><span class="linenos">274</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-275"><a href="#BigQuery.Parser-275"><span class="linenos">275</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-276"><a href="#BigQuery.Parser-276"><span class="linenos">276</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_date</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-277"><a href="#BigQuery.Parser-277"><span class="linenos">277</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-278"><a href="#BigQuery.Parser-278"><span class="linenos">278</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-279"><a href="#BigQuery.Parser-279"><span class="linenos">279</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-280"><a href="#BigQuery.Parser-280"><span class="linenos">280</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="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><span id="BigQuery.Parser-281"><a href="#BigQuery.Parser-281"><span class="linenos">281</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-282"><a href="#BigQuery.Parser-282"><span class="linenos">282</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-283"><a href="#BigQuery.Parser-283"><span class="linenos">283</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-284"><a href="#BigQuery.Parser-284"><span class="linenos">284</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-285"><a href="#BigQuery.Parser-285"><span class="linenos">285</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="BigQuery.Parser-286"><a href="#BigQuery.Parser-286"><span class="linenos">286</span></a> <span class="s2">&quot;GENERATE_ARRAY&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="BigQuery.Parser-287"><a href="#BigQuery.Parser-287"><span class="linenos">287</span></a> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-288"><a href="#BigQuery.Parser-288"><span class="linenos">288</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">_parse_to_hex</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-289"><a href="#BigQuery.Parser-289"><span class="linenos">289</span></a> <span class="s2">&quot;PARSE_DATE&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">StrToDate</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">)(</span>
-</span><span id="BigQuery.Parser-290"><a href="#BigQuery.Parser-290"><span class="linenos">290</span></a> <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="n">seq_get</span><span 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-291"><a href="#BigQuery.Parser-291"><span class="linenos">291</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-292"><a href="#BigQuery.Parser-292"><span class="linenos">292</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_timestamp</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-293"><a href="#BigQuery.Parser-293"><span class="linenos">293</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-294"><a href="#BigQuery.Parser-294"><span class="linenos">294</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-295"><a href="#BigQuery.Parser-295"><span class="linenos">295</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-296"><a href="#BigQuery.Parser-296"><span class="linenos">296</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-297"><a href="#BigQuery.Parser-297"><span class="linenos">297</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-298"><a href="#BigQuery.Parser-298"><span class="linenos">298</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-299"><a href="#BigQuery.Parser-299"><span class="linenos">299</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-300"><a href="#BigQuery.Parser-300"><span class="linenos">300</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-301"><a href="#BigQuery.Parser-301"><span class="linenos">301</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-302"><a href="#BigQuery.Parser-302"><span class="linenos">302</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-303"><a href="#BigQuery.Parser-303"><span class="linenos">303</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span>
-</span><span id="BigQuery.Parser-304"><a href="#BigQuery.Parser-304"><span class="linenos">304</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Parser-276"><a href="#BigQuery.Parser-276"><span class="linenos">276</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="BigQuery.Parser-277"><a href="#BigQuery.Parser-277"><span class="linenos">277</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Parser-278"><a href="#BigQuery.Parser-278"><span class="linenos">278</span></a>
+</span><span id="BigQuery.Parser-279"><a href="#BigQuery.Parser-279"><span class="linenos">279</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Parser-280"><a href="#BigQuery.Parser-280"><span class="linenos">280</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Parser-281"><a href="#BigQuery.Parser-281"><span class="linenos">281</span></a>
+</span><span id="BigQuery.Parser-282"><a href="#BigQuery.Parser-282"><span class="linenos">282</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Parser-283"><a href="#BigQuery.Parser-283"><span class="linenos">283</span></a>
+</span><span id="BigQuery.Parser-284"><a href="#BigQuery.Parser-284"><span class="linenos">284</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-285"><a href="#BigQuery.Parser-285"><span class="linenos">285</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-286"><a href="#BigQuery.Parser-286"><span class="linenos">286</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_date</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-287"><a href="#BigQuery.Parser-287"><span class="linenos">287</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-288"><a href="#BigQuery.Parser-288"><span class="linenos">288</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-289"><a href="#BigQuery.Parser-289"><span class="linenos">289</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-290"><a href="#BigQuery.Parser-290"><span class="linenos">290</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="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><span id="BigQuery.Parser-291"><a href="#BigQuery.Parser-291"><span class="linenos">291</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-292"><a href="#BigQuery.Parser-292"><span class="linenos">292</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-293"><a href="#BigQuery.Parser-293"><span class="linenos">293</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-294"><a href="#BigQuery.Parser-294"><span class="linenos">294</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-295"><a href="#BigQuery.Parser-295"><span class="linenos">295</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="BigQuery.Parser-296"><a href="#BigQuery.Parser-296"><span class="linenos">296</span></a> <span class="s2">&quot;GENERATE_ARRAY&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="BigQuery.Parser-297"><a href="#BigQuery.Parser-297"><span class="linenos">297</span></a> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-298"><a href="#BigQuery.Parser-298"><span class="linenos">298</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">_parse_to_hex</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-299"><a href="#BigQuery.Parser-299"><span class="linenos">299</span></a> <span class="s2">&quot;PARSE_DATE&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">StrToDate</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">)(</span>
+</span><span id="BigQuery.Parser-300"><a href="#BigQuery.Parser-300"><span class="linenos">300</span></a> <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="n">seq_get</span><span 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-301"><a href="#BigQuery.Parser-301"><span class="linenos">301</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-302"><a href="#BigQuery.Parser-302"><span class="linenos">302</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_timestamp</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-303"><a href="#BigQuery.Parser-303"><span class="linenos">303</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-304"><a href="#BigQuery.Parser-304"><span class="linenos">304</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-305"><a href="#BigQuery.Parser-305"><span class="linenos">305</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-306"><a href="#BigQuery.Parser-306"><span class="linenos">306</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="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="BigQuery.Parser-307"><a href="#BigQuery.Parser-307"><span class="linenos">307</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-308"><a href="#BigQuery.Parser-308"><span class="linenos">308</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-309"><a href="#BigQuery.Parser-309"><span class="linenos">309</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-310"><a href="#BigQuery.Parser-310"><span class="linenos">310</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-311"><a href="#BigQuery.Parser-311"><span class="linenos">311</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-312"><a href="#BigQuery.Parser-312"><span class="linenos">312</span></a> <span class="s2">&quot;TO_JSON_STRING&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="BigQuery.Parser-313"><a href="#BigQuery.Parser-313"><span class="linenos">313</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-314"><a href="#BigQuery.Parser-314"><span class="linenos">314</span></a>
-</span><span id="BigQuery.Parser-315"><a href="#BigQuery.Parser-315"><span class="linenos">315</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-316"><a href="#BigQuery.Parser-316"><span class="linenos">316</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-317"><a href="#BigQuery.Parser-317"><span class="linenos">317</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-318"><a href="#BigQuery.Parser-318"><span class="linenos">318</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-319"><a href="#BigQuery.Parser-319"><span class="linenos">319</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-320"><a href="#BigQuery.Parser-320"><span class="linenos">320</span></a>
-</span><span id="BigQuery.Parser-321"><a href="#BigQuery.Parser-321"><span class="linenos">321</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-322"><a href="#BigQuery.Parser-322"><span class="linenos">322</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><span id="BigQuery.Parser-323"><a href="#BigQuery.Parser-323"><span class="linenos">323</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-324"><a href="#BigQuery.Parser-324"><span class="linenos">324</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-325"><a href="#BigQuery.Parser-325"><span class="linenos">325</span></a>
-</span><span id="BigQuery.Parser-326"><a href="#BigQuery.Parser-326"><span class="linenos">326</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-327"><a href="#BigQuery.Parser-327"><span class="linenos">327</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><span id="BigQuery.Parser-328"><a href="#BigQuery.Parser-328"><span class="linenos">328</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-329"><a href="#BigQuery.Parser-329"><span class="linenos">329</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-330"><a href="#BigQuery.Parser-330"><span class="linenos">330</span></a>
-</span><span id="BigQuery.Parser-331"><a href="#BigQuery.Parser-331"><span class="linenos">331</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-332"><a href="#BigQuery.Parser-332"><span class="linenos">332</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><span id="BigQuery.Parser-333"><a href="#BigQuery.Parser-333"><span class="linenos">333</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-334"><a href="#BigQuery.Parser-334"><span class="linenos">334</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-335"><a href="#BigQuery.Parser-335"><span class="linenos">335</span></a>
-</span><span id="BigQuery.Parser-336"><a href="#BigQuery.Parser-336"><span class="linenos">336</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-337"><a href="#BigQuery.Parser-337"><span class="linenos">337</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-338"><a href="#BigQuery.Parser-338"><span class="linenos">338</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-339"><a href="#BigQuery.Parser-339"><span class="linenos">339</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-340"><a href="#BigQuery.Parser-340"><span class="linenos">340</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-341"><a href="#BigQuery.Parser-341"><span class="linenos">341</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-342"><a href="#BigQuery.Parser-342"><span class="linenos">342</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-343"><a href="#BigQuery.Parser-343"><span class="linenos">343</span></a>
-</span><span id="BigQuery.Parser-344"><a href="#BigQuery.Parser-344"><span class="linenos">344</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-345"><a href="#BigQuery.Parser-345"><span class="linenos">345</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-346"><a href="#BigQuery.Parser-346"><span class="linenos">346</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-347"><a href="#BigQuery.Parser-347"><span class="linenos">347</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-348"><a href="#BigQuery.Parser-348"><span class="linenos">348</span></a>
-</span><span id="BigQuery.Parser-349"><a href="#BigQuery.Parser-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="BigQuery.Parser-350"><a href="#BigQuery.Parser-350"><span class="linenos">350</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="BigQuery.Parser-351"><a href="#BigQuery.Parser-351"><span class="linenos">351</span></a>
-</span><span id="BigQuery.Parser-352"><a href="#BigQuery.Parser-352"><span class="linenos">352</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names</span>
-</span><span id="BigQuery.Parser-353"><a href="#BigQuery.Parser-353"><span class="linenos">353</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="BigQuery.Parser-354"><a href="#BigQuery.Parser-354"><span class="linenos">354</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="BigQuery.Parser-355"><a href="#BigQuery.Parser-355"><span class="linenos">355</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">DASH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="BigQuery.Parser-356"><a href="#BigQuery.Parser-356"><span class="linenos">356</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="BigQuery.Parser-357"><a href="#BigQuery.Parser-357"><span class="linenos">357</span></a> <span class="n">table_name</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="BigQuery.Parser-358"><a href="#BigQuery.Parser-358"><span class="linenos">358</span></a>
-</span><span id="BigQuery.Parser-359"><a href="#BigQuery.Parser-359"><span class="linenos">359</span></a> <span class="n">this</span> <span class="o">=</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">table_name</span><span class="p">,</span> <span class="n">quoted</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;quoted&quot;</span><span class="p">))</span>
+</span><span id="BigQuery.Parser-306"><a href="#BigQuery.Parser-306"><span class="linenos">306</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-307"><a href="#BigQuery.Parser-307"><span class="linenos">307</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-308"><a href="#BigQuery.Parser-308"><span class="linenos">308</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-309"><a href="#BigQuery.Parser-309"><span class="linenos">309</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-310"><a href="#BigQuery.Parser-310"><span class="linenos">310</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-311"><a href="#BigQuery.Parser-311"><span class="linenos">311</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-312"><a href="#BigQuery.Parser-312"><span class="linenos">312</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-313"><a href="#BigQuery.Parser-313"><span class="linenos">313</span></a> <span class="s2">&quot;SHA256&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">256</span><span class="p">)),</span>
+</span><span id="BigQuery.Parser-314"><a href="#BigQuery.Parser-314"><span class="linenos">314</span></a> <span class="s2">&quot;SHA512&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">512</span><span class="p">)),</span>
+</span><span id="BigQuery.Parser-315"><a href="#BigQuery.Parser-315"><span class="linenos">315</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">(</span>
+</span><span id="BigQuery.Parser-316"><a href="#BigQuery.Parser-316"><span class="linenos">316</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split</span>
+</span><span id="BigQuery.Parser-317"><a href="#BigQuery.Parser-317"><span class="linenos">317</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-318"><a href="#BigQuery.Parser-318"><span class="linenos">318</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="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="BigQuery.Parser-319"><a href="#BigQuery.Parser-319"><span class="linenos">319</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-320"><a href="#BigQuery.Parser-320"><span class="linenos">320</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-321"><a href="#BigQuery.Parser-321"><span class="linenos">321</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-322"><a href="#BigQuery.Parser-322"><span class="linenos">322</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-323"><a href="#BigQuery.Parser-323"><span class="linenos">323</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-324"><a href="#BigQuery.Parser-324"><span class="linenos">324</span></a> <span class="s2">&quot;TO_JSON_STRING&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="BigQuery.Parser-325"><a href="#BigQuery.Parser-325"><span class="linenos">325</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-326"><a href="#BigQuery.Parser-326"><span class="linenos">326</span></a>
+</span><span id="BigQuery.Parser-327"><a href="#BigQuery.Parser-327"><span class="linenos">327</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-328"><a href="#BigQuery.Parser-328"><span class="linenos">328</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="BigQuery.Parser-329"><a href="#BigQuery.Parser-329"><span class="linenos">329</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-330"><a href="#BigQuery.Parser-330"><span class="linenos">330</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-331"><a href="#BigQuery.Parser-331"><span class="linenos">331</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-332"><a href="#BigQuery.Parser-332"><span class="linenos">332</span></a>
+</span><span id="BigQuery.Parser-333"><a href="#BigQuery.Parser-333"><span class="linenos">333</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-334"><a href="#BigQuery.Parser-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-335"><a href="#BigQuery.Parser-335"><span class="linenos">335</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-336"><a href="#BigQuery.Parser-336"><span class="linenos">336</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-337"><a href="#BigQuery.Parser-337"><span class="linenos">337</span></a>
+</span><span id="BigQuery.Parser-338"><a href="#BigQuery.Parser-338"><span class="linenos">338</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-339"><a href="#BigQuery.Parser-339"><span class="linenos">339</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><span id="BigQuery.Parser-340"><a href="#BigQuery.Parser-340"><span class="linenos">340</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-341"><a href="#BigQuery.Parser-341"><span class="linenos">341</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-342"><a href="#BigQuery.Parser-342"><span class="linenos">342</span></a>
+</span><span id="BigQuery.Parser-343"><a href="#BigQuery.Parser-343"><span class="linenos">343</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-344"><a href="#BigQuery.Parser-344"><span class="linenos">344</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><span id="BigQuery.Parser-345"><a href="#BigQuery.Parser-345"><span class="linenos">345</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-346"><a href="#BigQuery.Parser-346"><span class="linenos">346</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-347"><a href="#BigQuery.Parser-347"><span class="linenos">347</span></a>
+</span><span id="BigQuery.Parser-348"><a href="#BigQuery.Parser-348"><span class="linenos">348</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-349"><a href="#BigQuery.Parser-349"><span class="linenos">349</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-350"><a href="#BigQuery.Parser-350"><span class="linenos">350</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-351"><a href="#BigQuery.Parser-351"><span class="linenos">351</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-352"><a href="#BigQuery.Parser-352"><span class="linenos">352</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-353"><a href="#BigQuery.Parser-353"><span class="linenos">353</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-354"><a href="#BigQuery.Parser-354"><span class="linenos">354</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-355"><a href="#BigQuery.Parser-355"><span class="linenos">355</span></a>
+</span><span id="BigQuery.Parser-356"><a href="#BigQuery.Parser-356"><span class="linenos">356</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-357"><a href="#BigQuery.Parser-357"><span class="linenos">357</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><span id="BigQuery.Parser-358"><a href="#BigQuery.Parser-358"><span class="linenos">358</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-359"><a href="#BigQuery.Parser-359"><span class="linenos">359</span></a> <span class="p">}</span>
</span><span id="BigQuery.Parser-360"><a href="#BigQuery.Parser-360"><span class="linenos">360</span></a>
-</span><span id="BigQuery.Parser-361"><a href="#BigQuery.Parser-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="BigQuery.Parser-362"><a href="#BigQuery.Parser-362"><span class="linenos">362</span></a>
-</span><span id="BigQuery.Parser-363"><a href="#BigQuery.Parser-363"><span class="linenos">363</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">Table</span><span class="p">:</span>
-</span><span id="BigQuery.Parser-364"><a href="#BigQuery.Parser-364"><span class="linenos">364</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="BigQuery.Parser-365"><a href="#BigQuery.Parser-365"><span class="linenos">365</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
-</span><span id="BigQuery.Parser-366"><a href="#BigQuery.Parser-366"><span class="linenos">366</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="BigQuery.Parser-367"><a href="#BigQuery.Parser-367"><span class="linenos">367</span></a> <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">Optional</span><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">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
-</span><span id="BigQuery.Parser-368"><a href="#BigQuery.Parser-368"><span class="linenos">368</span></a> <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">table</span><span class="o">.</span><span class="n">name</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="BigQuery.Parser-369"><a href="#BigQuery.Parser-369"><span class="linenos">369</span></a> <span class="p">)</span>
+</span><span id="BigQuery.Parser-361"><a href="#BigQuery.Parser-361"><span class="linenos">361</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="BigQuery.Parser-362"><a href="#BigQuery.Parser-362"><span class="linenos">362</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="BigQuery.Parser-363"><a href="#BigQuery.Parser-363"><span class="linenos">363</span></a>
+</span><span id="BigQuery.Parser-364"><a href="#BigQuery.Parser-364"><span class="linenos">364</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names</span>
+</span><span id="BigQuery.Parser-365"><a href="#BigQuery.Parser-365"><span class="linenos">365</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="BigQuery.Parser-366"><a href="#BigQuery.Parser-366"><span class="linenos">366</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="BigQuery.Parser-367"><a href="#BigQuery.Parser-367"><span class="linenos">367</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">DASH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="BigQuery.Parser-368"><a href="#BigQuery.Parser-368"><span class="linenos">368</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="BigQuery.Parser-369"><a href="#BigQuery.Parser-369"><span class="linenos">369</span></a> <span class="n">table_name</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="BigQuery.Parser-370"><a href="#BigQuery.Parser-370"><span class="linenos">370</span></a>
-</span><span id="BigQuery.Parser-371"><a href="#BigQuery.Parser-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="n">rest</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="BigQuery.Parser-372"><a href="#BigQuery.Parser-372"><span class="linenos">372</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="o">.</span><span class="n">build</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="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">]))</span>
-</span><span id="BigQuery.Parser-373"><a href="#BigQuery.Parser-373"><span class="linenos">373</span></a>
-</span><span id="BigQuery.Parser-374"><a href="#BigQuery.Parser-374"><span class="linenos">374</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</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><span id="BigQuery.Parser-375"><a href="#BigQuery.Parser-375"><span class="linenos">375</span></a>
-</span><span id="BigQuery.Parser-376"><a href="#BigQuery.Parser-376"><span class="linenos">376</span></a> <span class="k">return</span> <span class="n">table</span>
+</span><span id="BigQuery.Parser-371"><a href="#BigQuery.Parser-371"><span class="linenos">371</span></a> <span class="n">this</span> <span class="o">=</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">table_name</span><span class="p">,</span> <span class="n">quoted</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;quoted&quot;</span><span class="p">))</span>
+</span><span id="BigQuery.Parser-372"><a href="#BigQuery.Parser-372"><span class="linenos">372</span></a>
+</span><span id="BigQuery.Parser-373"><a href="#BigQuery.Parser-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="BigQuery.Parser-374"><a href="#BigQuery.Parser-374"><span class="linenos">374</span></a>
+</span><span id="BigQuery.Parser-375"><a href="#BigQuery.Parser-375"><span class="linenos">375</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">Table</span><span class="p">:</span>
+</span><span id="BigQuery.Parser-376"><a href="#BigQuery.Parser-376"><span class="linenos">376</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="BigQuery.Parser-377"><a href="#BigQuery.Parser-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+</span><span id="BigQuery.Parser-378"><a href="#BigQuery.Parser-378"><span class="linenos">378</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="BigQuery.Parser-379"><a href="#BigQuery.Parser-379"><span class="linenos">379</span></a> <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">Optional</span><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">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+</span><span id="BigQuery.Parser-380"><a href="#BigQuery.Parser-380"><span class="linenos">380</span></a> <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">table</span><span class="o">.</span><span class="n">name</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="BigQuery.Parser-381"><a href="#BigQuery.Parser-381"><span class="linenos">381</span></a> <span class="p">)</span>
+</span><span id="BigQuery.Parser-382"><a href="#BigQuery.Parser-382"><span class="linenos">382</span></a>
+</span><span id="BigQuery.Parser-383"><a href="#BigQuery.Parser-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="n">rest</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="BigQuery.Parser-384"><a href="#BigQuery.Parser-384"><span class="linenos">384</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="o">.</span><span class="n">build</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="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">]))</span>
+</span><span id="BigQuery.Parser-385"><a href="#BigQuery.Parser-385"><span class="linenos">385</span></a>
+</span><span id="BigQuery.Parser-386"><a href="#BigQuery.Parser-386"><span class="linenos">386</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</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><span id="BigQuery.Parser-387"><a href="#BigQuery.Parser-387"><span class="linenos">387</span></a>
+</span><span id="BigQuery.Parser-388"><a href="#BigQuery.Parser-388"><span class="linenos">388</span></a> <span class="k">return</span> <span class="n">table</span>
</span></pre></div>
@@ -2163,11 +2217,23 @@ Default: 3</li>
</div>
+ <div id="BigQuery.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#BigQuery.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="BigQuery.Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="BigQuery.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_date&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DIV&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;GENERATE_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;TO_HEX&#39;: &lt;function _parse_to_hex&gt;, &#39;PARSE_DATE&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;PARSE_TIMESTAMP&#39;: &lt;function _parse_timestamp&gt;, &#39;REGEXP_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;TO_JSON_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_date&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DIV&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;GENERATE_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;TO_HEX&#39;: &lt;function _parse_to_hex&gt;, &#39;PARSE_DATE&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;PARSE_TIMESTAMP&#39;: &lt;function _parse_timestamp&gt;, &#39;REGEXP_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHA256&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;SHA512&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;, &#39;TO_JSON_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;}</span>
</div>
@@ -2206,7 +2272,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">NESTED_TYPE_TOKENS</span> =
<input id="BigQuery.Parser.NESTED_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
</div>
@@ -2219,7 +2285,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="BigQuery.Parser.ID_VAR_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -2245,7 +2311,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CONSTRAINT_PARSERS</span> =
<input id="BigQuery.Parser.CONSTRAINT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;OPTIONS&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NONCLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;WITH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;OPTIONS&#39;: &lt;function <a href="#BigQuery.Parser">BigQuery.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2254,6 +2320,18 @@ Default: 3</li>
</div>
+ <div id="BigQuery.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#BigQuery.Tokenizer">sqlglot.dialects.bigquery.BigQuery.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#BigQuery.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="BigQuery.Parser.UNNEST_COLUMN_ONLY" class="classattr">
<div class="attr variable">
<span class="name">UNNEST_COLUMN_ONLY</span><span class="annotation">: bool</span> =
@@ -2357,6 +2435,7 @@ Default: 3</li>
<dl>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="BigQuery.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
+ <dd id="BigQuery.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="BigQuery.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="BigQuery.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
<dd id="BigQuery.Parser.SUBQUERY_PREDICATES" class="variable"><a href="../parser.html#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a></dd>
@@ -2375,6 +2454,7 @@ Default: 3</li>
<dd id="BigQuery.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="BigQuery.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="BigQuery.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="BigQuery.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="BigQuery.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="BigQuery.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="BigQuery.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -2392,6 +2472,7 @@ Default: 3</li>
<dd id="BigQuery.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="BigQuery.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="BigQuery.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="BigQuery.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="BigQuery.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="BigQuery.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="BigQuery.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -2409,9 +2490,11 @@ Default: 3</li>
<dd id="BigQuery.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="BigQuery.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="BigQuery.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="BigQuery.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="BigQuery.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="BigQuery.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="BigQuery.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
+ <dd id="BigQuery.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="BigQuery.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="BigQuery.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="BigQuery.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -2444,262 +2527,273 @@ Default: 3</li>
</div>
<a class="headerlink" href="#BigQuery.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator-378"><a href="#BigQuery.Generator-378"><span class="linenos">378</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-379"><a href="#BigQuery.Generator-379"><span class="linenos">379</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Generator-380"><a href="#BigQuery.Generator-380"><span class="linenos">380</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-381"><a href="#BigQuery.Generator-381"><span class="linenos">381</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-382"><a href="#BigQuery.Generator-382"><span class="linenos">382</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-383"><a href="#BigQuery.Generator-383"><span class="linenos">383</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-384"><a href="#BigQuery.Generator-384"><span class="linenos">384</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="BigQuery.Generator-385"><a href="#BigQuery.Generator-385"><span class="linenos">385</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-386"><a href="#BigQuery.Generator-386"><span class="linenos">386</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Generator-387"><a href="#BigQuery.Generator-387"><span class="linenos">387</span></a>
-</span><span id="BigQuery.Generator-388"><a href="#BigQuery.Generator-388"><span class="linenos">388</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-389"><a href="#BigQuery.Generator-389"><span class="linenos">389</span></a> <span 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="BigQuery.Generator-390"><a href="#BigQuery.Generator-390"><span class="linenos">390</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="BigQuery.Generator-391"><a href="#BigQuery.Generator-391"><span class="linenos">391</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-392"><a href="#BigQuery.Generator-392"><span class="linenos">392</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-393"><a href="#BigQuery.Generator-393"><span class="linenos">393</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-394"><a href="#BigQuery.Generator-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</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">_pushdown_cte_column_names</span><span class="p">]),</span>
-</span><span id="BigQuery.Generator-395"><a href="#BigQuery.Generator-395"><span class="linenos">395</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-396"><a href="#BigQuery.Generator-396"><span class="linenos">396</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-397"><a href="#BigQuery.Generator-397"><span class="linenos">397</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;DATE&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-398"><a href="#BigQuery.Generator-398"><span class="linenos">398</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-399"><a href="#BigQuery.Generator-399"><span class="linenos">399</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-400"><a href="#BigQuery.Generator-400"><span class="linenos">400</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-401"><a href="#BigQuery.Generator-401"><span class="linenos">401</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-402"><a href="#BigQuery.Generator-402"><span class="linenos">402</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-403"><a href="#BigQuery.Generator-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GENERATE_ARRAY&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-404"><a href="#BigQuery.Generator-404"><span class="linenos">404</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-405"><a href="#BigQuery.Generator-405"><span class="linenos">405</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="BigQuery.Generator-406"><a href="#BigQuery.Generator-406"><span class="linenos">406</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-407"><a href="#BigQuery.Generator-407"><span class="linenos">407</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-408"><a href="#BigQuery.Generator-408"><span class="linenos">408</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_STRING&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-409"><a href="#BigQuery.Generator-409"><span class="linenos">409</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-410"><a href="#BigQuery.Generator-410"><span class="linenos">410</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;TO_HEX&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;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="BigQuery.Generator-411"><a href="#BigQuery.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-412"><a href="#BigQuery.Generator-412"><span class="linenos">412</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-413"><a href="#BigQuery.Generator-413"><span class="linenos">413</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-414"><a href="#BigQuery.Generator-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-415"><a href="#BigQuery.Generator-415"><span class="linenos">415</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-416"><a href="#BigQuery.Generator-416"><span class="linenos">416</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-417"><a href="#BigQuery.Generator-417"><span class="linenos">417</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-418"><a href="#BigQuery.Generator-418"><span class="linenos">418</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-419"><a href="#BigQuery.Generator-419"><span class="linenos">419</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-420"><a href="#BigQuery.Generator-420"><span class="linenos">420</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Generator-421"><a href="#BigQuery.Generator-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-422"><a href="#BigQuery.Generator-422"><span class="linenos">422</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-423"><a href="#BigQuery.Generator-423"><span class="linenos">423</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-424"><a href="#BigQuery.Generator-424"><span class="linenos">424</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-425"><a href="#BigQuery.Generator-425"><span class="linenos">425</span></a> <span class="p">[</span>
-</span><span id="BigQuery.Generator-426"><a href="#BigQuery.Generator-426"><span class="linenos">426</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="BigQuery.Generator-427"><a href="#BigQuery.Generator-427"><span class="linenos">427</span></a> <span class="n">_unqualify_unnest</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-428"><a href="#BigQuery.Generator-428"><span class="linenos">428</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="BigQuery.Generator-429"><a href="#BigQuery.Generator-429"><span class="linenos">429</span></a> <span class="n">_alias_ordered_group</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-430"><a href="#BigQuery.Generator-430"><span class="linenos">430</span></a> <span class="p">]</span>
-</span><span id="BigQuery.Generator-431"><a href="#BigQuery.Generator-431"><span class="linenos">431</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Generator-432"><a href="#BigQuery.Generator-432"><span class="linenos">432</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-433"><a href="#BigQuery.Generator-433"><span class="linenos">433</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-434"><a href="#BigQuery.Generator-434"><span class="linenos">434</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-435"><a href="#BigQuery.Generator-435"><span class="linenos">435</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;PARSE_DATE(</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-436"><a href="#BigQuery.Generator-436"><span class="linenos">436</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="BigQuery.Generator-437"><a href="#BigQuery.Generator-437"><span class="linenos">437</span></a> <span class="s2">&quot;PARSE_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 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-438"><a href="#BigQuery.Generator-438"><span class="linenos">438</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Generator-439"><a href="#BigQuery.Generator-439"><span class="linenos">439</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-440"><a href="#BigQuery.Generator-440"><span class="linenos">440</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-441"><a href="#BigQuery.Generator-441"><span class="linenos">441</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-442"><a href="#BigQuery.Generator-442"><span class="linenos">442</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-443"><a href="#BigQuery.Generator-443"><span class="linenos">443</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-444"><a href="#BigQuery.Generator-444"><span class="linenos">444</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-445"><a href="#BigQuery.Generator-445"><span class="linenos">445</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-446"><a href="#BigQuery.Generator-446"><span class="linenos">446</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-447"><a href="#BigQuery.Generator-447"><span class="linenos">447</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="BigQuery.Generator-448"><a href="#BigQuery.Generator-448"><span class="linenos">448</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-449"><a href="#BigQuery.Generator-449"><span class="linenos">449</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-450"><a href="#BigQuery.Generator-450"><span class="linenos">450</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-451"><a href="#BigQuery.Generator-451"><span class="linenos">451</span></a>
-</span><span id="BigQuery.Generator-452"><a href="#BigQuery.Generator-452"><span class="linenos">452</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-453"><a href="#BigQuery.Generator-453"><span class="linenos">453</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-454"><a href="#BigQuery.Generator-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-455"><a href="#BigQuery.Generator-455"><span class="linenos">455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-456"><a href="#BigQuery.Generator-456"><span class="linenos">456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTES&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-457"><a href="#BigQuery.Generator-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-458"><a href="#BigQuery.Generator-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-459"><a href="#BigQuery.Generator-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-460"><a href="#BigQuery.Generator-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-461"><a href="#BigQuery.Generator-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-462"><a href="#BigQuery.Generator-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-463"><a href="#BigQuery.Generator-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-464"><a href="#BigQuery.Generator-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-465"><a href="#BigQuery.Generator-465"><span class="linenos">465</span></a> <span class="n">exp</span><span 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-466"><a href="#BigQuery.Generator-466"><span class="linenos">466</span></a> <span class="n">exp</span><span 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-467"><a href="#BigQuery.Generator-467"><span class="linenos">467</span></a> <span class="n">exp</span><span 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-468"><a href="#BigQuery.Generator-468"><span class="linenos">468</span></a> <span class="n">exp</span><span 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-469"><a href="#BigQuery.Generator-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-470"><a href="#BigQuery.Generator-470"><span class="linenos">470</span></a> <span class="n">exp</span><span 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-471"><a href="#BigQuery.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span 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-472"><a href="#BigQuery.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span 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-473"><a href="#BigQuery.Generator-473"><span class="linenos">473</span></a> <span class="n">exp</span><span 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-474"><a href="#BigQuery.Generator-474"><span class="linenos">474</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-475"><a href="#BigQuery.Generator-475"><span class="linenos">475</span></a>
-</span><span id="BigQuery.Generator-476"><a href="#BigQuery.Generator-476"><span class="linenos">476</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-477"><a href="#BigQuery.Generator-477"><span class="linenos">477</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-478"><a href="#BigQuery.Generator-478"><span class="linenos">478</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-479"><a href="#BigQuery.Generator-479"><span class="linenos">479</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-480"><a href="#BigQuery.Generator-480"><span class="linenos">480</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-481"><a href="#BigQuery.Generator-481"><span class="linenos">481</span></a>
-</span><span id="BigQuery.Generator-482"><a href="#BigQuery.Generator-482"><span class="linenos">482</span></a> <span class="c1"># from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords</span>
-</span><span id="BigQuery.Generator-483"><a href="#BigQuery.Generator-483"><span class="linenos">483</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-484"><a href="#BigQuery.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">RESERVED_KEYWORDS</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-485"><a href="#BigQuery.Generator-485"><span class="linenos">485</span></a> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-486"><a href="#BigQuery.Generator-486"><span class="linenos">486</span></a> <span class="s2">&quot;and&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-487"><a href="#BigQuery.Generator-487"><span class="linenos">487</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-488"><a href="#BigQuery.Generator-488"><span class="linenos">488</span></a> <span class="s2">&quot;array&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-489"><a href="#BigQuery.Generator-489"><span class="linenos">489</span></a> <span class="s2">&quot;as&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-490"><a href="#BigQuery.Generator-490"><span class="linenos">490</span></a> <span class="s2">&quot;asc&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-491"><a href="#BigQuery.Generator-491"><span class="linenos">491</span></a> <span class="s2">&quot;assert_rows_modified&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-492"><a href="#BigQuery.Generator-492"><span class="linenos">492</span></a> <span class="s2">&quot;at&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-493"><a href="#BigQuery.Generator-493"><span class="linenos">493</span></a> <span class="s2">&quot;between&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-494"><a href="#BigQuery.Generator-494"><span class="linenos">494</span></a> <span class="s2">&quot;by&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-495"><a href="#BigQuery.Generator-495"><span class="linenos">495</span></a> <span class="s2">&quot;case&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-496"><a href="#BigQuery.Generator-496"><span class="linenos">496</span></a> <span class="s2">&quot;cast&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-497"><a href="#BigQuery.Generator-497"><span class="linenos">497</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-498"><a href="#BigQuery.Generator-498"><span class="linenos">498</span></a> <span class="s2">&quot;contains&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-499"><a href="#BigQuery.Generator-499"><span class="linenos">499</span></a> <span class="s2">&quot;create&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-500"><a href="#BigQuery.Generator-500"><span class="linenos">500</span></a> <span class="s2">&quot;cross&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-501"><a href="#BigQuery.Generator-501"><span class="linenos">501</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-502"><a href="#BigQuery.Generator-502"><span class="linenos">502</span></a> <span class="s2">&quot;current&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-503"><a href="#BigQuery.Generator-503"><span class="linenos">503</span></a> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-504"><a href="#BigQuery.Generator-504"><span class="linenos">504</span></a> <span class="s2">&quot;define&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-505"><a href="#BigQuery.Generator-505"><span class="linenos">505</span></a> <span class="s2">&quot;desc&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-506"><a href="#BigQuery.Generator-506"><span class="linenos">506</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-507"><a href="#BigQuery.Generator-507"><span class="linenos">507</span></a> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-508"><a href="#BigQuery.Generator-508"><span class="linenos">508</span></a> <span class="s2">&quot;end&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-509"><a href="#BigQuery.Generator-509"><span class="linenos">509</span></a> <span class="s2">&quot;enum&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-510"><a href="#BigQuery.Generator-510"><span class="linenos">510</span></a> <span class="s2">&quot;escape&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-511"><a href="#BigQuery.Generator-511"><span class="linenos">511</span></a> <span class="s2">&quot;except&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-512"><a href="#BigQuery.Generator-512"><span class="linenos">512</span></a> <span class="s2">&quot;exclude&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-513"><a href="#BigQuery.Generator-513"><span class="linenos">513</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-514"><a href="#BigQuery.Generator-514"><span class="linenos">514</span></a> <span class="s2">&quot;extract&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-515"><a href="#BigQuery.Generator-515"><span class="linenos">515</span></a> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-516"><a href="#BigQuery.Generator-516"><span class="linenos">516</span></a> <span class="s2">&quot;fetch&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-517"><a href="#BigQuery.Generator-517"><span class="linenos">517</span></a> <span class="s2">&quot;following&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-518"><a href="#BigQuery.Generator-518"><span class="linenos">518</span></a> <span class="s2">&quot;for&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-519"><a href="#BigQuery.Generator-519"><span class="linenos">519</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-520"><a href="#BigQuery.Generator-520"><span class="linenos">520</span></a> <span class="s2">&quot;full&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-521"><a href="#BigQuery.Generator-521"><span class="linenos">521</span></a> <span class="s2">&quot;group&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-522"><a href="#BigQuery.Generator-522"><span class="linenos">522</span></a> <span class="s2">&quot;grouping&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-523"><a href="#BigQuery.Generator-523"><span class="linenos">523</span></a> <span class="s2">&quot;groups&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-524"><a href="#BigQuery.Generator-524"><span class="linenos">524</span></a> <span class="s2">&quot;hash&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-525"><a href="#BigQuery.Generator-525"><span class="linenos">525</span></a> <span class="s2">&quot;having&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-526"><a href="#BigQuery.Generator-526"><span class="linenos">526</span></a> <span class="s2">&quot;if&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-527"><a href="#BigQuery.Generator-527"><span class="linenos">527</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-528"><a href="#BigQuery.Generator-528"><span class="linenos">528</span></a> <span class="s2">&quot;in&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-529"><a href="#BigQuery.Generator-529"><span class="linenos">529</span></a> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-530"><a href="#BigQuery.Generator-530"><span class="linenos">530</span></a> <span class="s2">&quot;intersect&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-531"><a href="#BigQuery.Generator-531"><span class="linenos">531</span></a> <span class="s2">&quot;interval&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-532"><a href="#BigQuery.Generator-532"><span class="linenos">532</span></a> <span class="s2">&quot;into&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-533"><a href="#BigQuery.Generator-533"><span class="linenos">533</span></a> <span class="s2">&quot;is&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-534"><a href="#BigQuery.Generator-534"><span class="linenos">534</span></a> <span class="s2">&quot;join&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-535"><a href="#BigQuery.Generator-535"><span class="linenos">535</span></a> <span class="s2">&quot;lateral&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-536"><a href="#BigQuery.Generator-536"><span class="linenos">536</span></a> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-537"><a href="#BigQuery.Generator-537"><span class="linenos">537</span></a> <span class="s2">&quot;like&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-538"><a href="#BigQuery.Generator-538"><span class="linenos">538</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-539"><a href="#BigQuery.Generator-539"><span class="linenos">539</span></a> <span class="s2">&quot;lookup&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-540"><a href="#BigQuery.Generator-540"><span class="linenos">540</span></a> <span class="s2">&quot;merge&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-541"><a href="#BigQuery.Generator-541"><span class="linenos">541</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-542"><a href="#BigQuery.Generator-542"><span class="linenos">542</span></a> <span class="s2">&quot;new&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-543"><a href="#BigQuery.Generator-543"><span class="linenos">543</span></a> <span class="s2">&quot;no&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-544"><a href="#BigQuery.Generator-544"><span class="linenos">544</span></a> <span class="s2">&quot;not&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-545"><a href="#BigQuery.Generator-545"><span class="linenos">545</span></a> <span class="s2">&quot;null&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-546"><a href="#BigQuery.Generator-546"><span class="linenos">546</span></a> <span class="s2">&quot;nulls&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-547"><a href="#BigQuery.Generator-547"><span class="linenos">547</span></a> <span class="s2">&quot;of&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-548"><a href="#BigQuery.Generator-548"><span class="linenos">548</span></a> <span class="s2">&quot;on&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-549"><a href="#BigQuery.Generator-549"><span class="linenos">549</span></a> <span class="s2">&quot;or&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-550"><a href="#BigQuery.Generator-550"><span class="linenos">550</span></a> <span class="s2">&quot;order&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-551"><a href="#BigQuery.Generator-551"><span class="linenos">551</span></a> <span class="s2">&quot;outer&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-552"><a href="#BigQuery.Generator-552"><span class="linenos">552</span></a> <span class="s2">&quot;over&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-553"><a href="#BigQuery.Generator-553"><span class="linenos">553</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-554"><a href="#BigQuery.Generator-554"><span class="linenos">554</span></a> <span class="s2">&quot;preceding&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-555"><a href="#BigQuery.Generator-555"><span class="linenos">555</span></a> <span class="s2">&quot;proto&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-556"><a href="#BigQuery.Generator-556"><span class="linenos">556</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-557"><a href="#BigQuery.Generator-557"><span class="linenos">557</span></a> <span class="s2">&quot;range&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-558"><a href="#BigQuery.Generator-558"><span class="linenos">558</span></a> <span class="s2">&quot;recursive&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-559"><a href="#BigQuery.Generator-559"><span class="linenos">559</span></a> <span class="s2">&quot;respect&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-560"><a href="#BigQuery.Generator-560"><span class="linenos">560</span></a> <span class="s2">&quot;right&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-561"><a href="#BigQuery.Generator-561"><span class="linenos">561</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-562"><a href="#BigQuery.Generator-562"><span class="linenos">562</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-563"><a href="#BigQuery.Generator-563"><span class="linenos">563</span></a> <span class="s2">&quot;select&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-564"><a href="#BigQuery.Generator-564"><span class="linenos">564</span></a> <span class="s2">&quot;set&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-565"><a href="#BigQuery.Generator-565"><span class="linenos">565</span></a> <span class="s2">&quot;some&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-566"><a href="#BigQuery.Generator-566"><span class="linenos">566</span></a> <span class="s2">&quot;struct&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-567"><a href="#BigQuery.Generator-567"><span class="linenos">567</span></a> <span class="s2">&quot;tablesample&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-568"><a href="#BigQuery.Generator-568"><span class="linenos">568</span></a> <span class="s2">&quot;then&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-569"><a href="#BigQuery.Generator-569"><span class="linenos">569</span></a> <span class="s2">&quot;to&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-570"><a href="#BigQuery.Generator-570"><span class="linenos">570</span></a> <span class="s2">&quot;treat&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-571"><a href="#BigQuery.Generator-571"><span class="linenos">571</span></a> <span class="s2">&quot;true&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-572"><a href="#BigQuery.Generator-572"><span class="linenos">572</span></a> <span class="s2">&quot;unbounded&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-573"><a href="#BigQuery.Generator-573"><span class="linenos">573</span></a> <span class="s2">&quot;union&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-574"><a href="#BigQuery.Generator-574"><span class="linenos">574</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-575"><a href="#BigQuery.Generator-575"><span class="linenos">575</span></a> <span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-576"><a href="#BigQuery.Generator-576"><span class="linenos">576</span></a> <span class="s2">&quot;when&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-577"><a href="#BigQuery.Generator-577"><span class="linenos">577</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-578"><a href="#BigQuery.Generator-578"><span class="linenos">578</span></a> <span class="s2">&quot;window&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-579"><a href="#BigQuery.Generator-579"><span class="linenos">579</span></a> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-580"><a href="#BigQuery.Generator-580"><span class="linenos">580</span></a> <span class="s2">&quot;within&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-581"><a href="#BigQuery.Generator-581"><span class="linenos">581</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-582"><a href="#BigQuery.Generator-582"><span class="linenos">582</span></a>
-</span><span id="BigQuery.Generator-583"><a href="#BigQuery.Generator-583"><span class="linenos">583</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="BigQuery.Generator-584"><a href="#BigQuery.Generator-584"><span class="linenos">584</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="BigQuery.Generator-585"><a href="#BigQuery.Generator-585"><span class="linenos">585</span></a>
-</span><span id="BigQuery.Generator-586"><a href="#BigQuery.Generator-586"><span class="linenos">586</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
-</span><span id="BigQuery.Generator-587"><a href="#BigQuery.Generator-587"><span class="linenos">587</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
-</span><span id="BigQuery.Generator-588"><a href="#BigQuery.Generator-588"><span class="linenos">588</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="BigQuery.Generator-589"><a href="#BigQuery.Generator-589"><span class="linenos">589</span></a> <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="BigQuery.Generator-590"><a href="#BigQuery.Generator-590"><span class="linenos">590</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">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;zone&quot;</span><span class="p">))</span>
-</span><span id="BigQuery.Generator-591"><a href="#BigQuery.Generator-591"><span class="linenos">591</span></a> <span class="p">)</span>
-</span><span id="BigQuery.Generator-592"><a href="#BigQuery.Generator-592"><span class="linenos">592</span></a>
-</span><span id="BigQuery.Generator-593"><a href="#BigQuery.Generator-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="BigQuery.Generator-594"><a href="#BigQuery.Generator-594"><span class="linenos">594</span></a>
-</span><span id="BigQuery.Generator-595"><a href="#BigQuery.Generator-595"><span class="linenos">595</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="BigQuery.Generator-596"><a href="#BigQuery.Generator-596"><span class="linenos">596</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator-597"><a href="#BigQuery.Generator-597"><span class="linenos">597</span></a>
-</span><span id="BigQuery.Generator-598"><a href="#BigQuery.Generator-598"><span class="linenos">598</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="BigQuery.Generator-599"><a href="#BigQuery.Generator-599"><span class="linenos">599</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
-</span><span id="BigQuery.Generator-600"><a href="#BigQuery.Generator-600"><span class="linenos">600</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator-601"><a href="#BigQuery.Generator-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator-390"><a href="#BigQuery.Generator-390"><span class="linenos">390</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-391"><a href="#BigQuery.Generator-391"><span class="linenos">391</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Generator-392"><a href="#BigQuery.Generator-392"><span class="linenos">392</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-393"><a href="#BigQuery.Generator-393"><span class="linenos">393</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-394"><a href="#BigQuery.Generator-394"><span class="linenos">394</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-395"><a href="#BigQuery.Generator-395"><span class="linenos">395</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-396"><a href="#BigQuery.Generator-396"><span class="linenos">396</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="BigQuery.Generator-397"><a href="#BigQuery.Generator-397"><span class="linenos">397</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-398"><a href="#BigQuery.Generator-398"><span class="linenos">398</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Generator-399"><a href="#BigQuery.Generator-399"><span class="linenos">399</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-400"><a href="#BigQuery.Generator-400"><span class="linenos">400</span></a>
+</span><span id="BigQuery.Generator-401"><a href="#BigQuery.Generator-401"><span class="linenos">401</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-402"><a href="#BigQuery.Generator-402"><span class="linenos">402</span></a> <span 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="BigQuery.Generator-403"><a href="#BigQuery.Generator-403"><span class="linenos">403</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="BigQuery.Generator-404"><a href="#BigQuery.Generator-404"><span class="linenos">404</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-405"><a href="#BigQuery.Generator-405"><span class="linenos">405</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-406"><a href="#BigQuery.Generator-406"><span class="linenos">406</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-407"><a href="#BigQuery.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</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">_pushdown_cte_column_names</span><span class="p">]),</span>
+</span><span id="BigQuery.Generator-408"><a href="#BigQuery.Generator-408"><span class="linenos">408</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-409"><a href="#BigQuery.Generator-409"><span class="linenos">409</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-410"><a href="#BigQuery.Generator-410"><span class="linenos">410</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;DATE&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-411"><a href="#BigQuery.Generator-411"><span class="linenos">411</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-412"><a href="#BigQuery.Generator-412"><span class="linenos">412</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-413"><a href="#BigQuery.Generator-413"><span class="linenos">413</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-414"><a href="#BigQuery.Generator-414"><span class="linenos">414</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-415"><a href="#BigQuery.Generator-415"><span class="linenos">415</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-416"><a href="#BigQuery.Generator-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GENERATE_ARRAY&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-417"><a href="#BigQuery.Generator-417"><span class="linenos">417</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-418"><a href="#BigQuery.Generator-418"><span class="linenos">418</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="BigQuery.Generator-419"><a href="#BigQuery.Generator-419"><span class="linenos">419</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-420"><a href="#BigQuery.Generator-420"><span class="linenos">420</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-421"><a href="#BigQuery.Generator-421"><span class="linenos">421</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_STRING&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-422"><a href="#BigQuery.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">:</span> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-423"><a href="#BigQuery.Generator-423"><span class="linenos">423</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-424"><a href="#BigQuery.Generator-424"><span class="linenos">424</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;TO_HEX&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;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="BigQuery.Generator-425"><a href="#BigQuery.Generator-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-426"><a href="#BigQuery.Generator-426"><span class="linenos">426</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-427"><a href="#BigQuery.Generator-427"><span class="linenos">427</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-428"><a href="#BigQuery.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-429"><a href="#BigQuery.Generator-429"><span class="linenos">429</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-430"><a href="#BigQuery.Generator-430"><span class="linenos">430</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-431"><a href="#BigQuery.Generator-431"><span class="linenos">431</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-432"><a href="#BigQuery.Generator-432"><span class="linenos">432</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-433"><a href="#BigQuery.Generator-433"><span class="linenos">433</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-434"><a href="#BigQuery.Generator-434"><span class="linenos">434</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Generator-435"><a href="#BigQuery.Generator-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-436"><a href="#BigQuery.Generator-436"><span class="linenos">436</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-437"><a href="#BigQuery.Generator-437"><span class="linenos">437</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-438"><a href="#BigQuery.Generator-438"><span class="linenos">438</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-439"><a href="#BigQuery.Generator-439"><span class="linenos">439</span></a> <span class="p">[</span>
+</span><span id="BigQuery.Generator-440"><a href="#BigQuery.Generator-440"><span class="linenos">440</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="BigQuery.Generator-441"><a href="#BigQuery.Generator-441"><span class="linenos">441</span></a> <span class="n">_unqualify_unnest</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-442"><a href="#BigQuery.Generator-442"><span class="linenos">442</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="BigQuery.Generator-443"><a href="#BigQuery.Generator-443"><span class="linenos">443</span></a> <span class="n">_alias_ordered_group</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-444"><a href="#BigQuery.Generator-444"><span class="linenos">444</span></a> <span class="p">]</span>
+</span><span id="BigQuery.Generator-445"><a href="#BigQuery.Generator-445"><span class="linenos">445</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Generator-446"><a href="#BigQuery.Generator-446"><span class="linenos">446</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="BigQuery.Generator-447"><a href="#BigQuery.Generator-447"><span class="linenos">447</span></a> <span class="sa">f</span><span class="s2">&quot;SHA256&quot;</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;length&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;256&quot;</span> <span class="k">else</span> <span class="s2">&quot;SHA512&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="BigQuery.Generator-448"><a href="#BigQuery.Generator-448"><span class="linenos">448</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Generator-449"><a href="#BigQuery.Generator-449"><span class="linenos">449</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-450"><a href="#BigQuery.Generator-450"><span class="linenos">450</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-451"><a href="#BigQuery.Generator-451"><span class="linenos">451</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-452"><a href="#BigQuery.Generator-452"><span class="linenos">452</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;PARSE_DATE(</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-453"><a href="#BigQuery.Generator-453"><span class="linenos">453</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="BigQuery.Generator-454"><a href="#BigQuery.Generator-454"><span class="linenos">454</span></a> <span class="s2">&quot;PARSE_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 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-455"><a href="#BigQuery.Generator-455"><span class="linenos">455</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Generator-456"><a href="#BigQuery.Generator-456"><span class="linenos">456</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-457"><a href="#BigQuery.Generator-457"><span class="linenos">457</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-458"><a href="#BigQuery.Generator-458"><span class="linenos">458</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-459"><a href="#BigQuery.Generator-459"><span class="linenos">459</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-460"><a href="#BigQuery.Generator-460"><span class="linenos">460</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-461"><a href="#BigQuery.Generator-461"><span class="linenos">461</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-462"><a href="#BigQuery.Generator-462"><span class="linenos">462</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-463"><a href="#BigQuery.Generator-463"><span class="linenos">463</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-464"><a href="#BigQuery.Generator-464"><span class="linenos">464</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="BigQuery.Generator-465"><a href="#BigQuery.Generator-465"><span class="linenos">465</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-466"><a href="#BigQuery.Generator-466"><span class="linenos">466</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-467"><a href="#BigQuery.Generator-467"><span class="linenos">467</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-468"><a href="#BigQuery.Generator-468"><span class="linenos">468</span></a>
+</span><span id="BigQuery.Generator-469"><a href="#BigQuery.Generator-469"><span class="linenos">469</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-470"><a href="#BigQuery.Generator-470"><span class="linenos">470</span></a> <span 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="BigQuery.Generator-471"><a href="#BigQuery.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span 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-472"><a href="#BigQuery.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span 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-473"><a href="#BigQuery.Generator-473"><span class="linenos">473</span></a> <span class="n">exp</span><span 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-474"><a href="#BigQuery.Generator-474"><span class="linenos">474</span></a> <span class="n">exp</span><span 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-475"><a href="#BigQuery.Generator-475"><span class="linenos">475</span></a> <span class="n">exp</span><span 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-476"><a href="#BigQuery.Generator-476"><span class="linenos">476</span></a> <span class="n">exp</span><span 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-477"><a href="#BigQuery.Generator-477"><span class="linenos">477</span></a> <span class="n">exp</span><span 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-478"><a href="#BigQuery.Generator-478"><span class="linenos">478</span></a> <span class="n">exp</span><span 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-479"><a href="#BigQuery.Generator-479"><span class="linenos">479</span></a> <span class="n">exp</span><span 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-480"><a href="#BigQuery.Generator-480"><span class="linenos">480</span></a> <span class="n">exp</span><span 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-481"><a href="#BigQuery.Generator-481"><span class="linenos">481</span></a> <span class="n">exp</span><span 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-482"><a href="#BigQuery.Generator-482"><span class="linenos">482</span></a> <span class="n">exp</span><span 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-483"><a href="#BigQuery.Generator-483"><span class="linenos">483</span></a> <span class="n">exp</span><span 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-484"><a href="#BigQuery.Generator-484"><span class="linenos">484</span></a> <span class="n">exp</span><span 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-485"><a href="#BigQuery.Generator-485"><span class="linenos">485</span></a> <span class="n">exp</span><span 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-486"><a href="#BigQuery.Generator-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-487"><a href="#BigQuery.Generator-487"><span class="linenos">487</span></a> <span class="n">exp</span><span 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-488"><a href="#BigQuery.Generator-488"><span class="linenos">488</span></a> <span class="n">exp</span><span 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-489"><a href="#BigQuery.Generator-489"><span class="linenos">489</span></a> <span class="n">exp</span><span 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-490"><a href="#BigQuery.Generator-490"><span class="linenos">490</span></a> <span class="n">exp</span><span 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-491"><a href="#BigQuery.Generator-491"><span class="linenos">491</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-492"><a href="#BigQuery.Generator-492"><span class="linenos">492</span></a>
+</span><span id="BigQuery.Generator-493"><a href="#BigQuery.Generator-493"><span class="linenos">493</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-494"><a href="#BigQuery.Generator-494"><span class="linenos">494</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-495"><a href="#BigQuery.Generator-495"><span class="linenos">495</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-496"><a href="#BigQuery.Generator-496"><span class="linenos">496</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-497"><a href="#BigQuery.Generator-497"><span class="linenos">497</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-498"><a href="#BigQuery.Generator-498"><span class="linenos">498</span></a>
+</span><span id="BigQuery.Generator-499"><a href="#BigQuery.Generator-499"><span class="linenos">499</span></a> <span class="c1"># from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords</span>
+</span><span id="BigQuery.Generator-500"><a href="#BigQuery.Generator-500"><span class="linenos">500</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-501"><a href="#BigQuery.Generator-501"><span class="linenos">501</span></a> <span class="o">*</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-502"><a href="#BigQuery.Generator-502"><span class="linenos">502</span></a> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-503"><a href="#BigQuery.Generator-503"><span class="linenos">503</span></a> <span class="s2">&quot;and&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-504"><a href="#BigQuery.Generator-504"><span class="linenos">504</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-505"><a href="#BigQuery.Generator-505"><span class="linenos">505</span></a> <span class="s2">&quot;array&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-506"><a href="#BigQuery.Generator-506"><span class="linenos">506</span></a> <span class="s2">&quot;as&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-507"><a href="#BigQuery.Generator-507"><span class="linenos">507</span></a> <span class="s2">&quot;asc&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-508"><a href="#BigQuery.Generator-508"><span class="linenos">508</span></a> <span class="s2">&quot;assert_rows_modified&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-509"><a href="#BigQuery.Generator-509"><span class="linenos">509</span></a> <span class="s2">&quot;at&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-510"><a href="#BigQuery.Generator-510"><span class="linenos">510</span></a> <span class="s2">&quot;between&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-511"><a href="#BigQuery.Generator-511"><span class="linenos">511</span></a> <span class="s2">&quot;by&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-512"><a href="#BigQuery.Generator-512"><span class="linenos">512</span></a> <span class="s2">&quot;case&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-513"><a href="#BigQuery.Generator-513"><span class="linenos">513</span></a> <span class="s2">&quot;cast&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-514"><a href="#BigQuery.Generator-514"><span class="linenos">514</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-515"><a href="#BigQuery.Generator-515"><span class="linenos">515</span></a> <span class="s2">&quot;contains&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-516"><a href="#BigQuery.Generator-516"><span class="linenos">516</span></a> <span class="s2">&quot;create&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-517"><a href="#BigQuery.Generator-517"><span class="linenos">517</span></a> <span class="s2">&quot;cross&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-518"><a href="#BigQuery.Generator-518"><span class="linenos">518</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-519"><a href="#BigQuery.Generator-519"><span class="linenos">519</span></a> <span class="s2">&quot;current&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-520"><a href="#BigQuery.Generator-520"><span class="linenos">520</span></a> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-521"><a href="#BigQuery.Generator-521"><span class="linenos">521</span></a> <span class="s2">&quot;define&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-522"><a href="#BigQuery.Generator-522"><span class="linenos">522</span></a> <span class="s2">&quot;desc&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-523"><a href="#BigQuery.Generator-523"><span class="linenos">523</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-524"><a href="#BigQuery.Generator-524"><span class="linenos">524</span></a> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-525"><a href="#BigQuery.Generator-525"><span class="linenos">525</span></a> <span class="s2">&quot;end&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-526"><a href="#BigQuery.Generator-526"><span class="linenos">526</span></a> <span class="s2">&quot;enum&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-527"><a href="#BigQuery.Generator-527"><span class="linenos">527</span></a> <span class="s2">&quot;escape&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-528"><a href="#BigQuery.Generator-528"><span class="linenos">528</span></a> <span class="s2">&quot;except&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-529"><a href="#BigQuery.Generator-529"><span class="linenos">529</span></a> <span class="s2">&quot;exclude&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-530"><a href="#BigQuery.Generator-530"><span class="linenos">530</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-531"><a href="#BigQuery.Generator-531"><span class="linenos">531</span></a> <span class="s2">&quot;extract&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-532"><a href="#BigQuery.Generator-532"><span class="linenos">532</span></a> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-533"><a href="#BigQuery.Generator-533"><span class="linenos">533</span></a> <span class="s2">&quot;fetch&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-534"><a href="#BigQuery.Generator-534"><span class="linenos">534</span></a> <span class="s2">&quot;following&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-535"><a href="#BigQuery.Generator-535"><span class="linenos">535</span></a> <span class="s2">&quot;for&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-536"><a href="#BigQuery.Generator-536"><span class="linenos">536</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-537"><a href="#BigQuery.Generator-537"><span class="linenos">537</span></a> <span class="s2">&quot;full&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-538"><a href="#BigQuery.Generator-538"><span class="linenos">538</span></a> <span class="s2">&quot;group&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-539"><a href="#BigQuery.Generator-539"><span class="linenos">539</span></a> <span class="s2">&quot;grouping&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-540"><a href="#BigQuery.Generator-540"><span class="linenos">540</span></a> <span class="s2">&quot;groups&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-541"><a href="#BigQuery.Generator-541"><span class="linenos">541</span></a> <span class="s2">&quot;hash&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-542"><a href="#BigQuery.Generator-542"><span class="linenos">542</span></a> <span class="s2">&quot;having&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-543"><a href="#BigQuery.Generator-543"><span class="linenos">543</span></a> <span class="s2">&quot;if&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-544"><a href="#BigQuery.Generator-544"><span class="linenos">544</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-545"><a href="#BigQuery.Generator-545"><span class="linenos">545</span></a> <span class="s2">&quot;in&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-546"><a href="#BigQuery.Generator-546"><span class="linenos">546</span></a> <span class="s2">&quot;inner&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-547"><a href="#BigQuery.Generator-547"><span class="linenos">547</span></a> <span class="s2">&quot;intersect&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-548"><a href="#BigQuery.Generator-548"><span class="linenos">548</span></a> <span class="s2">&quot;interval&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-549"><a href="#BigQuery.Generator-549"><span class="linenos">549</span></a> <span class="s2">&quot;into&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-550"><a href="#BigQuery.Generator-550"><span class="linenos">550</span></a> <span class="s2">&quot;is&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-551"><a href="#BigQuery.Generator-551"><span class="linenos">551</span></a> <span class="s2">&quot;join&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-552"><a href="#BigQuery.Generator-552"><span class="linenos">552</span></a> <span class="s2">&quot;lateral&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-553"><a href="#BigQuery.Generator-553"><span class="linenos">553</span></a> <span class="s2">&quot;left&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-554"><a href="#BigQuery.Generator-554"><span class="linenos">554</span></a> <span class="s2">&quot;like&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-555"><a href="#BigQuery.Generator-555"><span class="linenos">555</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-556"><a href="#BigQuery.Generator-556"><span class="linenos">556</span></a> <span class="s2">&quot;lookup&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-557"><a href="#BigQuery.Generator-557"><span class="linenos">557</span></a> <span class="s2">&quot;merge&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-558"><a href="#BigQuery.Generator-558"><span class="linenos">558</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-559"><a href="#BigQuery.Generator-559"><span class="linenos">559</span></a> <span class="s2">&quot;new&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-560"><a href="#BigQuery.Generator-560"><span class="linenos">560</span></a> <span class="s2">&quot;no&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-561"><a href="#BigQuery.Generator-561"><span class="linenos">561</span></a> <span class="s2">&quot;not&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-562"><a href="#BigQuery.Generator-562"><span class="linenos">562</span></a> <span class="s2">&quot;null&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-563"><a href="#BigQuery.Generator-563"><span class="linenos">563</span></a> <span class="s2">&quot;nulls&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-564"><a href="#BigQuery.Generator-564"><span class="linenos">564</span></a> <span class="s2">&quot;of&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-565"><a href="#BigQuery.Generator-565"><span class="linenos">565</span></a> <span class="s2">&quot;on&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-566"><a href="#BigQuery.Generator-566"><span class="linenos">566</span></a> <span class="s2">&quot;or&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-567"><a href="#BigQuery.Generator-567"><span class="linenos">567</span></a> <span class="s2">&quot;order&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-568"><a href="#BigQuery.Generator-568"><span class="linenos">568</span></a> <span class="s2">&quot;outer&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-569"><a href="#BigQuery.Generator-569"><span class="linenos">569</span></a> <span class="s2">&quot;over&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-570"><a href="#BigQuery.Generator-570"><span class="linenos">570</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-571"><a href="#BigQuery.Generator-571"><span class="linenos">571</span></a> <span class="s2">&quot;preceding&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-572"><a href="#BigQuery.Generator-572"><span class="linenos">572</span></a> <span class="s2">&quot;proto&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-573"><a href="#BigQuery.Generator-573"><span class="linenos">573</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-574"><a href="#BigQuery.Generator-574"><span class="linenos">574</span></a> <span class="s2">&quot;range&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-575"><a href="#BigQuery.Generator-575"><span class="linenos">575</span></a> <span class="s2">&quot;recursive&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-576"><a href="#BigQuery.Generator-576"><span class="linenos">576</span></a> <span class="s2">&quot;respect&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-577"><a href="#BigQuery.Generator-577"><span class="linenos">577</span></a> <span class="s2">&quot;right&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-578"><a href="#BigQuery.Generator-578"><span class="linenos">578</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-579"><a href="#BigQuery.Generator-579"><span class="linenos">579</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-580"><a href="#BigQuery.Generator-580"><span class="linenos">580</span></a> <span class="s2">&quot;select&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-581"><a href="#BigQuery.Generator-581"><span class="linenos">581</span></a> <span class="s2">&quot;set&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-582"><a href="#BigQuery.Generator-582"><span class="linenos">582</span></a> <span class="s2">&quot;some&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-583"><a href="#BigQuery.Generator-583"><span class="linenos">583</span></a> <span class="s2">&quot;struct&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-584"><a href="#BigQuery.Generator-584"><span class="linenos">584</span></a> <span class="s2">&quot;tablesample&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-585"><a href="#BigQuery.Generator-585"><span class="linenos">585</span></a> <span class="s2">&quot;then&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-586"><a href="#BigQuery.Generator-586"><span class="linenos">586</span></a> <span class="s2">&quot;to&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-587"><a href="#BigQuery.Generator-587"><span class="linenos">587</span></a> <span class="s2">&quot;treat&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-588"><a href="#BigQuery.Generator-588"><span class="linenos">588</span></a> <span class="s2">&quot;true&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-589"><a href="#BigQuery.Generator-589"><span class="linenos">589</span></a> <span class="s2">&quot;unbounded&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-590"><a href="#BigQuery.Generator-590"><span class="linenos">590</span></a> <span class="s2">&quot;union&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-591"><a href="#BigQuery.Generator-591"><span class="linenos">591</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-592"><a href="#BigQuery.Generator-592"><span class="linenos">592</span></a> <span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-593"><a href="#BigQuery.Generator-593"><span class="linenos">593</span></a> <span class="s2">&quot;when&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-594"><a href="#BigQuery.Generator-594"><span class="linenos">594</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-595"><a href="#BigQuery.Generator-595"><span class="linenos">595</span></a> <span class="s2">&quot;window&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-596"><a href="#BigQuery.Generator-596"><span class="linenos">596</span></a> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-597"><a href="#BigQuery.Generator-597"><span class="linenos">597</span></a> <span class="s2">&quot;within&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-598"><a href="#BigQuery.Generator-598"><span class="linenos">598</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-599"><a href="#BigQuery.Generator-599"><span class="linenos">599</span></a>
+</span><span id="BigQuery.Generator-600"><a href="#BigQuery.Generator-600"><span class="linenos">600</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="BigQuery.Generator-601"><a href="#BigQuery.Generator-601"><span class="linenos">601</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
</span><span id="BigQuery.Generator-602"><a href="#BigQuery.Generator-602"><span class="linenos">602</span></a>
-</span><span id="BigQuery.Generator-603"><a href="#BigQuery.Generator-603"><span class="linenos">603</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-604"><a href="#BigQuery.Generator-604"><span class="linenos">604</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-605"><a href="#BigQuery.Generator-605"><span class="linenos">605</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-606"><a href="#BigQuery.Generator-606"><span class="linenos">606</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-607"><a href="#BigQuery.Generator-607"><span class="linenos">607</span></a>
-</span><span id="BigQuery.Generator-608"><a href="#BigQuery.Generator-608"><span class="linenos">608</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-603"><a href="#BigQuery.Generator-603"><span class="linenos">603</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
+</span><span id="BigQuery.Generator-604"><a href="#BigQuery.Generator-604"><span class="linenos">604</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
+</span><span id="BigQuery.Generator-605"><a href="#BigQuery.Generator-605"><span class="linenos">605</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="BigQuery.Generator-606"><a href="#BigQuery.Generator-606"><span class="linenos">606</span></a> <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="BigQuery.Generator-607"><a href="#BigQuery.Generator-607"><span class="linenos">607</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">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;zone&quot;</span><span class="p">))</span>
+</span><span id="BigQuery.Generator-608"><a href="#BigQuery.Generator-608"><span class="linenos">608</span></a> <span class="p">)</span>
</span><span id="BigQuery.Generator-609"><a href="#BigQuery.Generator-609"><span class="linenos">609</span></a>
-</span><span id="BigQuery.Generator-610"><a href="#BigQuery.Generator-610"><span class="linenos">610</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-611"><a href="#BigQuery.Generator-611"><span class="linenos">611</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
-</span><span id="BigQuery.Generator-612"><a href="#BigQuery.Generator-612"><span class="linenos">612</span></a>
-</span><span id="BigQuery.Generator-613"><a href="#BigQuery.Generator-613"><span class="linenos">613</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-614"><a href="#BigQuery.Generator-614"><span class="linenos">614</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
-</span><span id="BigQuery.Generator-615"><a href="#BigQuery.Generator-615"><span class="linenos">615</span></a>
-</span><span id="BigQuery.Generator-616"><a href="#BigQuery.Generator-616"><span class="linenos">616</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-617"><a href="#BigQuery.Generator-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
-</span><span id="BigQuery.Generator-618"><a href="#BigQuery.Generator-618"><span class="linenos">618</span></a>
-</span><span id="BigQuery.Generator-619"><a href="#BigQuery.Generator-619"><span class="linenos">619</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-620"><a href="#BigQuery.Generator-620"><span class="linenos">620</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-621"><a href="#BigQuery.Generator-621"><span class="linenos">621</span></a>
-</span><span id="BigQuery.Generator-622"><a href="#BigQuery.Generator-622"><span class="linenos">622</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-623"><a href="#BigQuery.Generator-623"><span class="linenos">623</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-624"><a href="#BigQuery.Generator-624"><span class="linenos">624</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-625"><a href="#BigQuery.Generator-625"><span class="linenos">625</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-610"><a href="#BigQuery.Generator-610"><span class="linenos">610</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-611"><a href="#BigQuery.Generator-611"><span class="linenos">611</span></a>
+</span><span id="BigQuery.Generator-612"><a href="#BigQuery.Generator-612"><span class="linenos">612</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="BigQuery.Generator-613"><a href="#BigQuery.Generator-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-614"><a href="#BigQuery.Generator-614"><span class="linenos">614</span></a>
+</span><span id="BigQuery.Generator-615"><a href="#BigQuery.Generator-615"><span class="linenos">615</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery.Generator-616"><a href="#BigQuery.Generator-616"><span class="linenos">616</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
+</span><span id="BigQuery.Generator-617"><a href="#BigQuery.Generator-617"><span class="linenos">617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-618"><a href="#BigQuery.Generator-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-619"><a href="#BigQuery.Generator-619"><span class="linenos">619</span></a>
+</span><span id="BigQuery.Generator-620"><a href="#BigQuery.Generator-620"><span class="linenos">620</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-621"><a href="#BigQuery.Generator-621"><span class="linenos">621</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-622"><a href="#BigQuery.Generator-622"><span class="linenos">622</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-623"><a href="#BigQuery.Generator-623"><span class="linenos">623</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-624"><a href="#BigQuery.Generator-624"><span class="linenos">624</span></a>
+</span><span id="BigQuery.Generator-625"><a href="#BigQuery.Generator-625"><span class="linenos">625</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-626"><a href="#BigQuery.Generator-626"><span class="linenos">626</span></a>
-</span><span id="BigQuery.Generator-627"><a href="#BigQuery.Generator-627"><span class="linenos">627</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-628"><a href="#BigQuery.Generator-628"><span class="linenos">628</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-629"><a href="#BigQuery.Generator-629"><span class="linenos">629</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-630"><a href="#BigQuery.Generator-630"><span class="linenos">630</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-631"><a href="#BigQuery.Generator-631"><span class="linenos">631</span></a>
-</span><span id="BigQuery.Generator-632"><a href="#BigQuery.Generator-632"><span class="linenos">632</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-633"><a href="#BigQuery.Generator-633"><span class="linenos">633</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><span id="BigQuery.Generator-627"><a href="#BigQuery.Generator-627"><span class="linenos">627</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-628"><a href="#BigQuery.Generator-628"><span class="linenos">628</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
+</span><span id="BigQuery.Generator-629"><a href="#BigQuery.Generator-629"><span class="linenos">629</span></a>
+</span><span id="BigQuery.Generator-630"><a href="#BigQuery.Generator-630"><span class="linenos">630</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-631"><a href="#BigQuery.Generator-631"><span class="linenos">631</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
+</span><span id="BigQuery.Generator-632"><a href="#BigQuery.Generator-632"><span class="linenos">632</span></a>
+</span><span id="BigQuery.Generator-633"><a href="#BigQuery.Generator-633"><span class="linenos">633</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-634"><a href="#BigQuery.Generator-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
+</span><span id="BigQuery.Generator-635"><a href="#BigQuery.Generator-635"><span class="linenos">635</span></a>
+</span><span id="BigQuery.Generator-636"><a href="#BigQuery.Generator-636"><span class="linenos">636</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-637"><a href="#BigQuery.Generator-637"><span class="linenos">637</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-638"><a href="#BigQuery.Generator-638"><span class="linenos">638</span></a>
+</span><span id="BigQuery.Generator-639"><a href="#BigQuery.Generator-639"><span class="linenos">639</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-640"><a href="#BigQuery.Generator-640"><span class="linenos">640</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-641"><a href="#BigQuery.Generator-641"><span class="linenos">641</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-642"><a href="#BigQuery.Generator-642"><span class="linenos">642</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-643"><a href="#BigQuery.Generator-643"><span class="linenos">643</span></a>
+</span><span id="BigQuery.Generator-644"><a href="#BigQuery.Generator-644"><span class="linenos">644</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-645"><a href="#BigQuery.Generator-645"><span class="linenos">645</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-646"><a href="#BigQuery.Generator-646"><span class="linenos">646</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-647"><a href="#BigQuery.Generator-647"><span class="linenos">647</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-648"><a href="#BigQuery.Generator-648"><span class="linenos">648</span></a>
+</span><span id="BigQuery.Generator-649"><a href="#BigQuery.Generator-649"><span class="linenos">649</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-650"><a href="#BigQuery.Generator-650"><span class="linenos">650</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><span id="BigQuery.Generator-651"><a href="#BigQuery.Generator-651"><span class="linenos">651</span></a>
+</span><span id="BigQuery.Generator-652"><a href="#BigQuery.Generator-652"><span class="linenos">652</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery.Generator-653"><a href="#BigQuery.Generator-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span>
+</span><span id="BigQuery.Generator-654"><a href="#BigQuery.Generator-654"><span class="linenos">654</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="BigQuery.Generator-655"><a href="#BigQuery.Generator-655"><span class="linenos">655</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="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-656"><a href="#BigQuery.Generator-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2838,11 +2932,23 @@ Default: True</li>
</div>
+ <div id="BigQuery.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#BigQuery.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="BigQuery.Generator.TRANSFORMS" class="classattr">
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="BigQuery.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function _returnsproperty_sql&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#CTE">sqlglot.expressions.CTE</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function regexp_replace_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Values">sqlglot.expressions.Values</a>&#39;&gt;: &lt;function _derived_table_values_to_unnest&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function _returnsproperty_sql&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#CTE">sqlglot.expressions.CTE</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONKeyValue">sqlglot.expressions.JSONKeyValue</a>&#39;&gt;: &lt;function json_keyvalue_comma_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function regexp_replace_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function <a href="#BigQuery.Generator">BigQuery.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Values">sqlglot.expressions.Values</a>&#39;&gt;: &lt;function _derived_table_values_to_unnest&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2868,7 +2974,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="BigQuery.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -2881,7 +2987,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">RESERVED_KEYWORDS</span> =
<input id="BigQuery.Generator.RESERVED_KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&#39;at&#39;, &#39;cross&#39;, &#39;right&#39;, &#39;lookup&#39;, &#39;and&#39;, &#39;union&#39;, &#39;exists&#39;, &#39;contains&#39;, &#39;treat&#39;, &#39;on&#39;, &#39;assert_rows_modified&#39;, &#39;for&#39;, &#39;then&#39;, &#39;end&#39;, &#39;fetch&#39;, &#39;with&#39;, &#39;between&#39;, &#39;array&#39;, &#39;extract&#39;, &#39;else&#39;, &#39;within&#39;, &#39;inner&#39;, &#39;asc&#39;, &#39;partition&#39;, &#39;escape&#39;, &#39;to&#39;, &#39;collate&#39;, &#39;null&#39;, &#39;merge&#39;, &#39;using&#39;, &#39;window&#39;, &#39;interval&#39;, &#39;rollup&#39;, &#39;select&#39;, &#39;define&#39;, &#39;grouping&#39;, &#39;of&#39;, &#39;tablesample&#39;, &#39;create&#39;, &#39;when&#39;, &#39;by&#39;, &#39;case&#39;, &#39;where&#39;, &#39;nulls&#39;, &#39;join&#39;, &#39;true&#39;, &#39;range&#39;, &#39;enum&#39;, &#39;new&#39;, &#39;exclude&#39;, &#39;cube&#39;, &#39;some&#39;, &#39;natural&#39;, &#39;into&#39;, &#39;hash&#39;, &#39;respect&#39;, &#39;order&#39;, &#39;unnest&#39;, &#39;unbounded&#39;, &#39;current&#39;, &#39;from&#39;, &#39;following&#39;, &#39;ignore&#39;, &#39;qualify&#39;, &#39;like&#39;, &#39;except&#39;, &#39;intersect&#39;, &#39;desc&#39;, &#39;over&#39;, &#39;rows&#39;, &#39;as&#39;, &#39;groups&#39;, &#39;if&#39;, &#39;is&#39;, &#39;outer&#39;, &#39;group&#39;, &#39;set&#39;, &#39;no&#39;, &#39;not&#39;, &#39;or&#39;, &#39;proto&#39;, &#39;lateral&#39;, &#39;false&#39;, &#39;full&#39;, &#39;left&#39;, &#39;all&#39;, &#39;default&#39;, &#39;struct&#39;, &#39;cast&#39;, &#39;having&#39;, &#39;any&#39;, &#39;distinct&#39;, &#39;limit&#39;, &#39;in&#39;, &#39;preceding&#39;, &#39;recursive&#39;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&#39;lateral&#39;, &#39;all&#39;, &#39;having&#39;, &#39;by&#39;, &#39;from&#39;, &#39;tablesample&#39;, &#39;true&#39;, &#39;within&#39;, &#39;collate&#39;, &#39;window&#39;, &#39;rows&#39;, &#39;unnest&#39;, &#39;preceding&#39;, &#39;between&#39;, &#39;then&#39;, &#39;at&#39;, &#39;lookup&#39;, &#39;left&#39;, &#39;cross&#39;, &#39;join&#39;, &#39;any&#39;, &#39;inner&#39;, &#39;when&#39;, &#39;array&#39;, &#39;natural&#39;, &#39;merge&#39;, &#39;treat&#39;, &#39;default&#39;, &#39;in&#39;, &#39;on&#39;, &#39;respect&#39;, &#39;where&#39;, &#39;range&#39;, &#39;fetch&#39;, &#39;enum&#39;, &#39;rollup&#39;, &#39;exists&#39;, &#39;limit&#39;, &#39;struct&#39;, &#39;over&#39;, &#39;nulls&#39;, &#39;select&#39;, &#39;for&#39;, &#39;qualify&#39;, &#39;groups&#39;, &#39;contains&#39;, &#39;intersect&#39;, &#39;right&#39;, &#39;using&#39;, &#39;cast&#39;, &#39;recursive&#39;, &#39;set&#39;, &#39;distinct&#39;, &#39;is&#39;, &#39;end&#39;, &#39;new&#39;, &#39;define&#39;, &#39;with&#39;, &#39;as&#39;, &#39;exclude&#39;, &#39;full&#39;, &#39;to&#39;, &#39;assert_rows_modified&#39;, &#39;order&#39;, &#39;no&#39;, &#39;false&#39;, &#39;group&#39;, &#39;into&#39;, &#39;null&#39;, &#39;escape&#39;, &#39;proto&#39;, &#39;create&#39;, &#39;outer&#39;, &#39;except&#39;, &#39;if&#39;, &#39;interval&#39;, &#39;grouping&#39;, &#39;or&#39;, &#39;following&#39;, &#39;like&#39;, &#39;current&#39;, &#39;desc&#39;, &#39;cube&#39;, &#39;partition&#39;, &#39;of&#39;, &#39;ignore&#39;, &#39;not&#39;, &#39;some&#39;, &#39;case&#39;, &#39;and&#39;, &#39;asc&#39;, &#39;hash&#39;, &#39;unbounded&#39;, &#39;union&#39;, &#39;extract&#39;, &#39;else&#39;}</span>
</div>
@@ -2901,17 +3007,17 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.attimezone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.attimezone_sql-583"><a href="#BigQuery.Generator.attimezone_sql-583"><span class="linenos">583</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="BigQuery.Generator.attimezone_sql-584"><a href="#BigQuery.Generator.attimezone_sql-584"><span class="linenos">584</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="BigQuery.Generator.attimezone_sql-585"><a href="#BigQuery.Generator.attimezone_sql-585"><span class="linenos">585</span></a>
-</span><span id="BigQuery.Generator.attimezone_sql-586"><a href="#BigQuery.Generator.attimezone_sql-586"><span class="linenos">586</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
-</span><span id="BigQuery.Generator.attimezone_sql-587"><a href="#BigQuery.Generator.attimezone_sql-587"><span class="linenos">587</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
-</span><span id="BigQuery.Generator.attimezone_sql-588"><a href="#BigQuery.Generator.attimezone_sql-588"><span class="linenos">588</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="BigQuery.Generator.attimezone_sql-589"><a href="#BigQuery.Generator.attimezone_sql-589"><span class="linenos">589</span></a> <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="BigQuery.Generator.attimezone_sql-590"><a href="#BigQuery.Generator.attimezone_sql-590"><span class="linenos">590</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">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;zone&quot;</span><span class="p">))</span>
-</span><span id="BigQuery.Generator.attimezone_sql-591"><a href="#BigQuery.Generator.attimezone_sql-591"><span class="linenos">591</span></a> <span class="p">)</span>
-</span><span id="BigQuery.Generator.attimezone_sql-592"><a href="#BigQuery.Generator.attimezone_sql-592"><span class="linenos">592</span></a>
-</span><span id="BigQuery.Generator.attimezone_sql-593"><a href="#BigQuery.Generator.attimezone_sql-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_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.attimezone_sql-600"><a href="#BigQuery.Generator.attimezone_sql-600"><span class="linenos">600</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="BigQuery.Generator.attimezone_sql-601"><a href="#BigQuery.Generator.attimezone_sql-601"><span class="linenos">601</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="BigQuery.Generator.attimezone_sql-602"><a href="#BigQuery.Generator.attimezone_sql-602"><span class="linenos">602</span></a>
+</span><span id="BigQuery.Generator.attimezone_sql-603"><a href="#BigQuery.Generator.attimezone_sql-603"><span class="linenos">603</span></a> <span class="c1"># BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT &lt;fmt&gt; [AT TIME ZONE &lt;tz&gt;]]).</span>
+</span><span id="BigQuery.Generator.attimezone_sql-604"><a href="#BigQuery.Generator.attimezone_sql-604"><span class="linenos">604</span></a> <span class="c1"># Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.</span>
+</span><span id="BigQuery.Generator.attimezone_sql-605"><a href="#BigQuery.Generator.attimezone_sql-605"><span class="linenos">605</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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">parent</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="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="BigQuery.Generator.attimezone_sql-606"><a href="#BigQuery.Generator.attimezone_sql-606"><span class="linenos">606</span></a> <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="BigQuery.Generator.attimezone_sql-607"><a href="#BigQuery.Generator.attimezone_sql-607"><span class="linenos">607</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">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;zone&quot;</span><span class="p">))</span>
+</span><span id="BigQuery.Generator.attimezone_sql-608"><a href="#BigQuery.Generator.attimezone_sql-608"><span class="linenos">608</span></a> <span class="p">)</span>
+</span><span id="BigQuery.Generator.attimezone_sql-609"><a href="#BigQuery.Generator.attimezone_sql-609"><span class="linenos">609</span></a>
+</span><span id="BigQuery.Generator.attimezone_sql-610"><a href="#BigQuery.Generator.attimezone_sql-610"><span class="linenos">610</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">attimezone_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2929,8 +3035,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.trycast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.trycast_sql-595"><a href="#BigQuery.Generator.trycast_sql-595"><span class="linenos">595</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="BigQuery.Generator.trycast_sql-596"><a href="#BigQuery.Generator.trycast_sql-596"><span class="linenos">596</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.trycast_sql-612"><a href="#BigQuery.Generator.trycast_sql-612"><span class="linenos">612</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="BigQuery.Generator.trycast_sql-613"><a href="#BigQuery.Generator.trycast_sql-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;SAFE_&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -2948,10 +3054,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.cte_sql-598"><a href="#BigQuery.Generator.cte_sql-598"><span class="linenos">598</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="BigQuery.Generator.cte_sql-599"><a href="#BigQuery.Generator.cte_sql-599"><span class="linenos">599</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
-</span><span id="BigQuery.Generator.cte_sql-600"><a href="#BigQuery.Generator.cte_sql-600"><span class="linenos">600</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator.cte_sql-601"><a href="#BigQuery.Generator.cte_sql-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.cte_sql-615"><a href="#BigQuery.Generator.cte_sql-615"><span class="linenos">615</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.cte_sql-616"><a href="#BigQuery.Generator.cte_sql-616"><span class="linenos">616</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.cte_sql-617"><a href="#BigQuery.Generator.cte_sql-617"><span class="linenos">617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Column names in CTE definition are not supported.&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator.cte_sql-618"><a href="#BigQuery.Generator.cte_sql-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2969,12 +3075,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-603"><a href="#BigQuery.Generator.array_sql-603"><span class="linenos">603</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-604"><a href="#BigQuery.Generator.array_sql-604"><span class="linenos">604</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-605"><a href="#BigQuery.Generator.array_sql-605"><span class="linenos">605</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-606"><a href="#BigQuery.Generator.array_sql-606"><span class="linenos">606</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-607"><a href="#BigQuery.Generator.array_sql-607"><span class="linenos">607</span></a>
-</span><span id="BigQuery.Generator.array_sql-608"><a href="#BigQuery.Generator.array_sql-608"><span class="linenos">608</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-620"><a href="#BigQuery.Generator.array_sql-620"><span class="linenos">620</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-621"><a href="#BigQuery.Generator.array_sql-621"><span class="linenos">621</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-622"><a href="#BigQuery.Generator.array_sql-622"><span class="linenos">622</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-623"><a href="#BigQuery.Generator.array_sql-623"><span class="linenos">623</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-624"><a href="#BigQuery.Generator.array_sql-624"><span class="linenos">624</span></a>
+</span><span id="BigQuery.Generator.array_sql-625"><a href="#BigQuery.Generator.array_sql-625"><span class="linenos">625</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>
@@ -2992,8 +3098,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-610"><a href="#BigQuery.Generator.transaction_sql-610"><span class="linenos">610</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-611"><a href="#BigQuery.Generator.transaction_sql-611"><span class="linenos">611</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-627"><a href="#BigQuery.Generator.transaction_sql-627"><span class="linenos">627</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-628"><a href="#BigQuery.Generator.transaction_sql-628"><span class="linenos">628</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
</span></pre></div>
@@ -3011,8 +3117,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-613"><a href="#BigQuery.Generator.commit_sql-613"><span class="linenos">613</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-614"><a href="#BigQuery.Generator.commit_sql-614"><span class="linenos">614</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-630"><a href="#BigQuery.Generator.commit_sql-630"><span class="linenos">630</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-631"><a href="#BigQuery.Generator.commit_sql-631"><span class="linenos">631</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
</span></pre></div>
@@ -3030,8 +3136,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-616"><a href="#BigQuery.Generator.rollback_sql-616"><span class="linenos">616</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-617"><a href="#BigQuery.Generator.rollback_sql-617"><span class="linenos">617</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-633"><a href="#BigQuery.Generator.rollback_sql-633"><span class="linenos">633</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-634"><a href="#BigQuery.Generator.rollback_sql-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
</span></pre></div>
@@ -3049,8 +3155,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-619"><a href="#BigQuery.Generator.in_unnest_op-619"><span class="linenos">619</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-620"><a href="#BigQuery.Generator.in_unnest_op-620"><span class="linenos">620</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-636"><a href="#BigQuery.Generator.in_unnest_op-636"><span class="linenos">636</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-637"><a href="#BigQuery.Generator.in_unnest_op-637"><span class="linenos">637</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>
@@ -3068,10 +3174,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-622"><a href="#BigQuery.Generator.except_op-622"><span class="linenos">622</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-623"><a href="#BigQuery.Generator.except_op-623"><span class="linenos">623</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-624"><a href="#BigQuery.Generator.except_op-624"><span class="linenos">624</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-625"><a href="#BigQuery.Generator.except_op-625"><span class="linenos">625</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-639"><a href="#BigQuery.Generator.except_op-639"><span class="linenos">639</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-640"><a href="#BigQuery.Generator.except_op-640"><span class="linenos">640</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-641"><a href="#BigQuery.Generator.except_op-641"><span class="linenos">641</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-642"><a href="#BigQuery.Generator.except_op-642"><span class="linenos">642</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>
@@ -3089,10 +3195,10 @@ 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-627"><a href="#BigQuery.Generator.intersect_op-627"><span class="linenos">627</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-628"><a href="#BigQuery.Generator.intersect_op-628"><span class="linenos">628</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-629"><a href="#BigQuery.Generator.intersect_op-629"><span class="linenos">629</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-630"><a href="#BigQuery.Generator.intersect_op-630"><span class="linenos">630</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-644"><a href="#BigQuery.Generator.intersect_op-644"><span class="linenos">644</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-645"><a href="#BigQuery.Generator.intersect_op-645"><span class="linenos">645</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-646"><a href="#BigQuery.Generator.intersect_op-646"><span class="linenos">646</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-647"><a href="#BigQuery.Generator.intersect_op-647"><span class="linenos">647</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>
@@ -3110,8 +3216,30 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.with_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.with_properties-632"><a href="#BigQuery.Generator.with_properties-632"><span class="linenos">632</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-633"><a href="#BigQuery.Generator.with_properties-633"><span class="linenos">633</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.with_properties-649"><a href="#BigQuery.Generator.with_properties-649"><span class="linenos">649</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-650"><a href="#BigQuery.Generator.with_properties-650"><span class="linenos">650</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>
+
+
+
+
+ </div>
+ <div id="BigQuery.Generator.version_sql" class="classattr">
+ <input id="BigQuery.Generator.version_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">version_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#Version">sqlglot.expressions.Version</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="BigQuery.Generator.version_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#BigQuery.Generator.version_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.version_sql-652"><a href="#BigQuery.Generator.version_sql-652"><span class="linenos">652</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.version_sql-653"><a href="#BigQuery.Generator.version_sql-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.version_sql-654"><a href="#BigQuery.Generator.version_sql-654"><span class="linenos">654</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="BigQuery.Generator.version_sql-655"><a href="#BigQuery.Generator.version_sql-655"><span class="linenos">655</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="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator.version_sql-656"><a href="#BigQuery.Generator.version_sql-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3178,26 +3306,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.can_identify-253"><a href="#BigQuery.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="BigQuery.Generator.can_identify-254"><a href="#BigQuery.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="BigQuery.Generator.can_identify-255"><a href="#BigQuery.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="BigQuery.Generator.can_identify-256"><a href="#BigQuery.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="BigQuery.Generator.can_identify-257"><a href="#BigQuery.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="BigQuery.Generator.can_identify-258"><a href="#BigQuery.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="BigQuery.Generator.can_identify-259"><a href="#BigQuery.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="BigQuery.Generator.can_identify-260"><a href="#BigQuery.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="BigQuery.Generator.can_identify-261"><a href="#BigQuery.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="BigQuery.Generator.can_identify-262"><a href="#BigQuery.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="BigQuery.Generator.can_identify-263"><a href="#BigQuery.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="BigQuery.Generator.can_identify-264"><a href="#BigQuery.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="BigQuery.Generator.can_identify-265"><a href="#BigQuery.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="BigQuery.Generator.can_identify-266"><a href="#BigQuery.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="BigQuery.Generator.can_identify-267"><a href="#BigQuery.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="BigQuery.Generator.can_identify-268"><a href="#BigQuery.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="BigQuery.Generator.can_identify-269"><a href="#BigQuery.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="BigQuery.Generator.can_identify-270"><a href="#BigQuery.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.can_identify-256"><a href="#BigQuery.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="BigQuery.Generator.can_identify-257"><a href="#BigQuery.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.can_identify-258"><a href="#BigQuery.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="BigQuery.Generator.can_identify-259"><a href="#BigQuery.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="BigQuery.Generator.can_identify-260"><a href="#BigQuery.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="BigQuery.Generator.can_identify-261"><a href="#BigQuery.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="BigQuery.Generator.can_identify-262"><a href="#BigQuery.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="BigQuery.Generator.can_identify-263"><a href="#BigQuery.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="BigQuery.Generator.can_identify-264"><a href="#BigQuery.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="BigQuery.Generator.can_identify-265"><a href="#BigQuery.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="BigQuery.Generator.can_identify-266"><a href="#BigQuery.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="BigQuery.Generator.can_identify-267"><a href="#BigQuery.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="BigQuery.Generator.can_identify-268"><a href="#BigQuery.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="BigQuery.Generator.can_identify-269"><a href="#BigQuery.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.can_identify-270"><a href="#BigQuery.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="BigQuery.Generator.can_identify-271"><a href="#BigQuery.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="BigQuery.Generator.can_identify-272"><a href="#BigQuery.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator.can_identify-272"><a href="#BigQuery.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.can_identify-273"><a href="#BigQuery.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="BigQuery.Generator.can_identify-274"><a href="#BigQuery.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="BigQuery.Generator.can_identify-275"><a href="#BigQuery.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -3268,26 +3396,14 @@ Default: True</li>
</div>
- <div id="BigQuery.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#BigQuery.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="BigQuery.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="BigQuery.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#BigQuery.Tokenizer">sqlglot.dialects.bigquery.BigQuery.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#BigQuery.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#BigQuery.Generator.TOKENIZER_CLASS"></a>
@@ -3386,8 +3502,10 @@ Default: True</li>
<dd id="BigQuery.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="BigQuery.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="BigQuery.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="BigQuery.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="BigQuery.Generator.SELECT_KINDS" class="variable"><a href="../generator.html#Generator.SELECT_KINDS">SELECT_KINDS</a></dd>
<dd id="BigQuery.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="BigQuery.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="BigQuery.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="BigQuery.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="BigQuery.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -3430,6 +3548,7 @@ Default: True</li>
<dd id="BigQuery.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="BigQuery.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="BigQuery.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="BigQuery.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="BigQuery.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="BigQuery.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="BigQuery.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -3447,7 +3566,7 @@ Default: True</li>
<dd id="BigQuery.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="BigQuery.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="BigQuery.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="BigQuery.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="BigQuery.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="BigQuery.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="BigQuery.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="BigQuery.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -3497,6 +3616,8 @@ Default: True</li>
<dd id="BigQuery.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="BigQuery.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="BigQuery.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="BigQuery.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="BigQuery.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="BigQuery.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="BigQuery.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="BigQuery.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -3650,6 +3771,8 @@ Default: True</li>
<dd id="BigQuery.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="BigQuery.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="BigQuery.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="BigQuery.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="BigQuery.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/clickhouse.html b/docs/sqlglot/dialects/clickhouse.html
index 544149c..4da4873 100644
--- a/docs/sqlglot/dialects/clickhouse.html
+++ b/docs/sqlglot/dialects/clickhouse.html
@@ -70,6 +70,9 @@
<a class="class" href="#ClickHouse.Parser">ClickHouse.Parser</a>
<ul class="memberlist">
<li>
+ <a class="variable" href="#ClickHouse.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#ClickHouse.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
@@ -100,6 +103,9 @@
<a class="variable" href="#ClickHouse.Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#ClickHouse.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#ClickHouse.Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a>
</li>
<li>
@@ -133,6 +139,12 @@
<a class="variable" href="#ClickHouse.Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a>
</li>
<li>
+ <a class="variable" href="#ClickHouse.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
+ <a class="variable" href="#ClickHouse.Generator.STRING_TYPE_MAPPING">STRING_TYPE_MAPPING</a>
+ </li>
+ <li>
<a class="variable" href="#ClickHouse.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -157,6 +169,9 @@
<a class="variable" href="#ClickHouse.Generator.ON_CLUSTER_TARGETS">ON_CLUSTER_TARGETS</a>
</li>
<li>
+ <a class="function" href="#ClickHouse.Generator.datatype_sql">datatype_sql</a>
+ </li>
+ <li>
<a class="function" href="#ClickHouse.Generator.safeconcat_sql">safeconcat_sql</a>
</li>
<li>
@@ -211,10 +226,7 @@
<a class="variable" href="#ClickHouse.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#ClickHouse.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#ClickHouse.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#ClickHouse.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#ClickHouse.Generator.BIT_START">BIT_START</a>
@@ -327,396 +339,449 @@
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">var_map_sql</span><span class="p">,</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="p">)</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.errors</span> <span class="kn">import</span> <span class="n">ParseError</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.parser</span> <span class="kn">import</span> <span class="n">parse_var_map</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.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">TokenType</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</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-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">parse_var_map</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">TokenType</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="k">def</span> <span class="nf">_lower_func</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">index</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">)</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="k">return</span> <span class="n">sql</span><span class="p">[:</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">+</span> <span class="n">sql</span><span class="p">[</span><span class="n">index</span><span class="p">:]</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</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="k">def</span> <span class="nf">_lower_func</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">index</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">)</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="k">return</span> <span class="n">sql</span><span class="p">[:</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">+</span> <span class="n">sql</span><span class="p">[</span><span class="n">index</span><span class="p">:]</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</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-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</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="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-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</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-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">KEYWORDS</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">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-37"><a href="#L-37"><span class="linenos"> 37</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-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;FLOAT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</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-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</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-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</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-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="L-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><span id="L-60"><a href="#L-60"><span class="linenos"> 60</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-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</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-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="p">}</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
-</span><span id="L-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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span 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-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_quantile</span><span class="p">(),</span>
-</span><span id="L-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><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
-</span><span id="L-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="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-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="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
-</span><span id="L-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_KINDS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</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="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</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-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</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">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-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="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-38"><a href="#L-38"><span class="linenos"> 38</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-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;FLOAT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</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-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</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-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="p">}</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</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">FUNCTIONS</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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="L-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="p">),</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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="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-82"><a href="#L-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
+</span><span id="L-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">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
+</span><span id="L-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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_quantile</span><span class="p">(),</span>
+</span><span id="L-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="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
+</span><span id="L-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">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="p">}</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">LOG_DEFAULTS_TO_LN</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">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-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>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">QUERY_MODIFIER_PARSERS</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="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">),</span>
-</span><span id="L-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 class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">JOIN_KINDS</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="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</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_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-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">):</span>
-</span><span id="L-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">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">If</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="n">this</span><span class="p">,</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">false</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="p">)</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">}</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">return</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">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-136"><a href="#L-136"><span class="linenos">136</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="kc">None</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">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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="bp">self</span><span 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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <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">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-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">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">this</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">_parse_table</span><span class="p">(</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-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">Optional</span><span class="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="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="n">this</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">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-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="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-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">_parse_join_parts</span><span class="p">(</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-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">if</span> <span class="n">kind_pre</span><span class="p">:</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
-</span><span id="L-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">return</span> <span class="p">(</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">is_global</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</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-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><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">&quot;settings&quot;</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">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">),</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <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">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="L-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">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-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">):</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="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-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">false</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-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><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">this</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">_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-156"><a href="#L-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="bp">self</span><span 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-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
+</span><span id="L-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="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-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">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">def</span> <span class="nf">_parse_table</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="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</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><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="n">this</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">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-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="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="L-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">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-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="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="p">)</span> <span class="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-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-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">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="L-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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
-</span><span id="L-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">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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">ParameterizedAgg</span><span class="p">,</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="p">)</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="p">)</span> <span class="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-248"><a href="#L-248"><span class="linenos">248</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-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
-</span><span id="L-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">if</span> <span class="bp">self</span><span 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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="n">params</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">return</span> <span class="kc">None</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">def</span> <span class="nf">_parse_quantile</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">if</span> <span class="n">params</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
+</span><span id="L-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">return</span> <span class="p">(</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">is_global</span><span class="p">,</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-230"><a href="#L-230"><span class="linenos">230</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-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><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-235"><a href="#L-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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-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="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+</span><span id="L-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="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="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-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="p">)</span>
+</span><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">func</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">def</span> <span class="nf">_parse_wrapped_id_vars</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="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-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="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
-</span><span id="L-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="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">else</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">_retreat</span><span class="p">(</span><span class="n">index</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="kc">None</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">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-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</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-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">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="o">**</span><span class="n">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-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">exp</span><span 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-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">exp</span><span 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-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&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">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&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">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&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">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&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">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&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><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="p">{</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span 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-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</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-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">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;quantile&quot;</span><span class="p">))</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;xor&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
-</span><span id="L-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">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</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-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="p">}</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</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">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</span></a> <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-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="o">*</span><span class="p">[</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="p">],</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="p">)</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</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-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">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="p">]</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</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="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</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-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">_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-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">if</span> <span class="bp">self</span><span 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-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="n">params</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="k">return</span> <span class="kc">None</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">def</span> <span class="nf">_parse_quantile</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
+</span><span id="L-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">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-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_primary_key</span><span class="p">(</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <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">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="kc">None</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="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-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span 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-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</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="n">STRING_TYPE_MAPPING</span> <span class="o">=</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">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&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">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&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">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="p">}</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="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-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&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">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-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">exp</span><span 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-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">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-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">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
+</span><span id="L-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">TRANSFORMS</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="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-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</span></a> <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">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-361"><a href="#L-361"><span class="linenos">361</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-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 class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">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;quantile&quot;</span><span class="p">))</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;xor&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="p">}</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</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-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <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="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">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-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
-</span><span id="L-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">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="L-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="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="p">}</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">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-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="c1">#</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">return</span> <span class="s2">&quot;String&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">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-408"><a href="#L-408"><span class="linenos">408</span></a>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><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="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</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="o">.</span><span class="n">copy</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <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">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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="p">],</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="p">)</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</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-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">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="p">]</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="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-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="p">)</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -732,387 +797,439 @@
</div>
<a class="headerlink" href="#ClickHouse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse-24"><a href="#ClickHouse-24"><span class="linenos"> 24</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="ClickHouse-25"><a href="#ClickHouse-25"><span class="linenos"> 25</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-26"><a href="#ClickHouse-26"><span class="linenos"> 26</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="ClickHouse-27"><a href="#ClickHouse-27"><span class="linenos"> 27</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse-28"><a href="#ClickHouse-28"><span class="linenos"> 28</span></a>
-</span><span id="ClickHouse-29"><a href="#ClickHouse-29"><span class="linenos"> 29</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="ClickHouse-30"><a href="#ClickHouse-30"><span class="linenos"> 30</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse-31"><a href="#ClickHouse-31"><span class="linenos"> 31</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse-32"><a href="#ClickHouse-32"><span class="linenos"> 32</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse-33"><a href="#ClickHouse-33"><span class="linenos"> 33</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse-34"><a href="#ClickHouse-34"><span class="linenos"> 34</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse-35"><a href="#ClickHouse-35"><span class="linenos"> 35</span></a>
-</span><span id="ClickHouse-36"><a href="#ClickHouse-36"><span class="linenos"> 36</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-37"><a href="#ClickHouse-37"><span class="linenos"> 37</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="ClickHouse-38"><a href="#ClickHouse-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;ATTACH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="ClickHouse-39"><a href="#ClickHouse-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="ClickHouse-40"><a href="#ClickHouse-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="ClickHouse-41"><a href="#ClickHouse-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="ClickHouse-42"><a href="#ClickHouse-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;FLOAT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="ClickHouse-43"><a href="#ClickHouse-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="ClickHouse-44"><a href="#ClickHouse-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
-</span><span id="ClickHouse-45"><a href="#ClickHouse-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="ClickHouse-46"><a href="#ClickHouse-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="ClickHouse-47"><a href="#ClickHouse-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="ClickHouse-48"><a href="#ClickHouse-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="ClickHouse-49"><a href="#ClickHouse-49"><span class="linenos"> 49</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="ClickHouse-50"><a href="#ClickHouse-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="ClickHouse-51"><a href="#ClickHouse-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="ClickHouse-52"><a href="#ClickHouse-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="ClickHouse-53"><a href="#ClickHouse-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="ClickHouse-54"><a href="#ClickHouse-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="ClickHouse-55"><a href="#ClickHouse-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="ClickHouse-56"><a href="#ClickHouse-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="ClickHouse-57"><a href="#ClickHouse-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="ClickHouse-58"><a href="#ClickHouse-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="ClickHouse-59"><a href="#ClickHouse-59"><span class="linenos"> 59</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-60"><a href="#ClickHouse-60"><span class="linenos"> 60</span></a>
-</span><span id="ClickHouse-61"><a href="#ClickHouse-61"><span class="linenos"> 61</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="ClickHouse-62"><a href="#ClickHouse-62"><span class="linenos"> 62</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-63"><a href="#ClickHouse-63"><span class="linenos"> 63</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="ClickHouse-64"><a href="#ClickHouse-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-65"><a href="#ClickHouse-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
-</span><span id="ClickHouse-66"><a href="#ClickHouse-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-67"><a href="#ClickHouse-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-68"><a href="#ClickHouse-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
-</span><span id="ClickHouse-69"><a href="#ClickHouse-69"><span class="linenos"> 69</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-70"><a href="#ClickHouse-70"><span class="linenos"> 70</span></a>
-</span><span id="ClickHouse-71"><a href="#ClickHouse-71"><span class="linenos"> 71</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
-</span><span id="ClickHouse-72"><a href="#ClickHouse-72"><span class="linenos"> 72</span></a>
-</span><span id="ClickHouse-73"><a href="#ClickHouse-73"><span class="linenos"> 73</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-74"><a href="#ClickHouse-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="ClickHouse-75"><a href="#ClickHouse-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_quantile</span><span class="p">(),</span>
-</span><span id="ClickHouse-76"><a href="#ClickHouse-76"><span class="linenos"> 76</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-77"><a href="#ClickHouse-77"><span class="linenos"> 77</span></a>
-</span><span id="ClickHouse-78"><a href="#ClickHouse-78"><span class="linenos"> 78</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-79"><a href="#ClickHouse-79"><span class="linenos"> 79</span></a>
-</span><span id="ClickHouse-80"><a href="#ClickHouse-80"><span class="linenos"> 80</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse-81"><a href="#ClickHouse-81"><span class="linenos"> 81</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-82"><a href="#ClickHouse-82"><span class="linenos"> 82</span></a>
-</span><span id="ClickHouse-83"><a href="#ClickHouse-83"><span class="linenos"> 83</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-84"><a href="#ClickHouse-84"><span class="linenos"> 84</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse-85"><a href="#ClickHouse-85"><span class="linenos"> 85</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
-</span><span id="ClickHouse-86"><a href="#ClickHouse-86"><span class="linenos"> 86</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="ClickHouse-87"><a href="#ClickHouse-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-88"><a href="#ClickHouse-88"><span class="linenos"> 88</span></a>
-</span><span id="ClickHouse-89"><a href="#ClickHouse-89"><span class="linenos"> 89</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
-</span><span id="ClickHouse-90"><a href="#ClickHouse-90"><span class="linenos"> 90</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
-</span><span id="ClickHouse-91"><a href="#ClickHouse-91"><span class="linenos"> 91</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse-92"><a href="#ClickHouse-92"><span class="linenos"> 92</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
-</span><span id="ClickHouse-93"><a href="#ClickHouse-93"><span class="linenos"> 93</span></a>
-</span><span id="ClickHouse-94"><a href="#ClickHouse-94"><span class="linenos"> 94</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-95"><a href="#ClickHouse-95"><span class="linenos"> 95</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span>
-</span><span id="ClickHouse-96"><a href="#ClickHouse-96"><span class="linenos"> 96</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse-97"><a href="#ClickHouse-97"><span class="linenos"> 97</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="ClickHouse-98"><a href="#ClickHouse-98"><span class="linenos"> 98</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="ClickHouse-99"><a href="#ClickHouse-99"><span class="linenos"> 99</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="ClickHouse-100"><a href="#ClickHouse-100"><span class="linenos">100</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse-101"><a href="#ClickHouse-101"><span class="linenos">101</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse-25"><a href="#ClickHouse-25"><span class="linenos"> 25</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="ClickHouse-26"><a href="#ClickHouse-26"><span class="linenos"> 26</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-27"><a href="#ClickHouse-27"><span class="linenos"> 27</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="ClickHouse-28"><a href="#ClickHouse-28"><span class="linenos"> 28</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse-29"><a href="#ClickHouse-29"><span class="linenos"> 29</span></a>
+</span><span id="ClickHouse-30"><a href="#ClickHouse-30"><span class="linenos"> 30</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="ClickHouse-31"><a href="#ClickHouse-31"><span class="linenos"> 31</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse-32"><a href="#ClickHouse-32"><span class="linenos"> 32</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse-33"><a href="#ClickHouse-33"><span class="linenos"> 33</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse-34"><a href="#ClickHouse-34"><span class="linenos"> 34</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse-35"><a href="#ClickHouse-35"><span class="linenos"> 35</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse-36"><a href="#ClickHouse-36"><span class="linenos"> 36</span></a>
+</span><span id="ClickHouse-37"><a href="#ClickHouse-37"><span class="linenos"> 37</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-38"><a href="#ClickHouse-38"><span class="linenos"> 38</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="ClickHouse-39"><a href="#ClickHouse-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;ATTACH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="ClickHouse-40"><a href="#ClickHouse-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="ClickHouse-41"><a href="#ClickHouse-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="ClickHouse-42"><a href="#ClickHouse-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="ClickHouse-43"><a href="#ClickHouse-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="ClickHouse-44"><a href="#ClickHouse-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="ClickHouse-45"><a href="#ClickHouse-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="ClickHouse-46"><a href="#ClickHouse-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="ClickHouse-47"><a href="#ClickHouse-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;FLOAT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="ClickHouse-48"><a href="#ClickHouse-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="ClickHouse-49"><a href="#ClickHouse-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
+</span><span id="ClickHouse-50"><a href="#ClickHouse-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="ClickHouse-51"><a href="#ClickHouse-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="ClickHouse-52"><a href="#ClickHouse-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="ClickHouse-53"><a href="#ClickHouse-53"><span class="linenos"> 53</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="ClickHouse-54"><a href="#ClickHouse-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="ClickHouse-55"><a href="#ClickHouse-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="ClickHouse-56"><a href="#ClickHouse-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="ClickHouse-57"><a href="#ClickHouse-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="ClickHouse-58"><a href="#ClickHouse-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="ClickHouse-59"><a href="#ClickHouse-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="ClickHouse-60"><a href="#ClickHouse-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="ClickHouse-61"><a href="#ClickHouse-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="ClickHouse-62"><a href="#ClickHouse-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="ClickHouse-63"><a href="#ClickHouse-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="ClickHouse-64"><a href="#ClickHouse-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="ClickHouse-65"><a href="#ClickHouse-65"><span class="linenos"> 65</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-66"><a href="#ClickHouse-66"><span class="linenos"> 66</span></a>
+</span><span id="ClickHouse-67"><a href="#ClickHouse-67"><span class="linenos"> 67</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="ClickHouse-68"><a href="#ClickHouse-68"><span class="linenos"> 68</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-69"><a href="#ClickHouse-69"><span class="linenos"> 69</span></a>
+</span><span id="ClickHouse-70"><a href="#ClickHouse-70"><span class="linenos"> 70</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-71"><a href="#ClickHouse-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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="ClickHouse-72"><a href="#ClickHouse-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-73"><a href="#ClickHouse-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="ClickHouse-74"><a href="#ClickHouse-74"><span class="linenos"> 74</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse-75"><a href="#ClickHouse-75"><span class="linenos"> 75</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-76"><a href="#ClickHouse-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="ClickHouse-77"><a href="#ClickHouse-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse-78"><a href="#ClickHouse-78"><span class="linenos"> 78</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-79"><a href="#ClickHouse-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse-80"><a href="#ClickHouse-80"><span class="linenos"> 80</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse-81"><a href="#ClickHouse-81"><span class="linenos"> 81</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-82"><a href="#ClickHouse-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse-83"><a href="#ClickHouse-83"><span class="linenos"> 83</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse-84"><a href="#ClickHouse-84"><span class="linenos"> 84</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-85"><a href="#ClickHouse-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
+</span><span id="ClickHouse-86"><a href="#ClickHouse-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-87"><a href="#ClickHouse-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-88"><a href="#ClickHouse-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
+</span><span id="ClickHouse-89"><a href="#ClickHouse-89"><span class="linenos"> 89</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-90"><a href="#ClickHouse-90"><span class="linenos"> 90</span></a>
+</span><span id="ClickHouse-91"><a href="#ClickHouse-91"><span class="linenos"> 91</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
+</span><span id="ClickHouse-92"><a href="#ClickHouse-92"><span class="linenos"> 92</span></a>
+</span><span id="ClickHouse-93"><a href="#ClickHouse-93"><span class="linenos"> 93</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-94"><a href="#ClickHouse-94"><span class="linenos"> 94</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse-95"><a href="#ClickHouse-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_quantile</span><span class="p">(),</span>
+</span><span id="ClickHouse-96"><a href="#ClickHouse-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-97"><a href="#ClickHouse-97"><span class="linenos"> 97</span></a>
+</span><span id="ClickHouse-98"><a href="#ClickHouse-98"><span class="linenos"> 98</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-99"><a href="#ClickHouse-99"><span class="linenos"> 99</span></a>
+</span><span id="ClickHouse-100"><a href="#ClickHouse-100"><span class="linenos">100</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse-101"><a href="#ClickHouse-101"><span class="linenos">101</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-102"><a href="#ClickHouse-102"><span class="linenos">102</span></a>
-</span><span id="ClickHouse-103"><a href="#ClickHouse-103"><span class="linenos">103</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="ClickHouse-104"><a href="#ClickHouse-104"><span class="linenos">104</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse-105"><a href="#ClickHouse-105"><span class="linenos">105</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="ClickHouse-106"><a href="#ClickHouse-106"><span class="linenos">106</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="ClickHouse-107"><a href="#ClickHouse-107"><span class="linenos">107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="ClickHouse-108"><a href="#ClickHouse-108"><span class="linenos">108</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="ClickHouse-109"><a href="#ClickHouse-109"><span class="linenos">109</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse-110"><a href="#ClickHouse-110"><span class="linenos">110</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-111"><a href="#ClickHouse-111"><span class="linenos">111</span></a>
-</span><span id="ClickHouse-112"><a href="#ClickHouse-112"><span class="linenos">112</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse-103"><a href="#ClickHouse-103"><span class="linenos">103</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-104"><a href="#ClickHouse-104"><span class="linenos">104</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse-105"><a href="#ClickHouse-105"><span class="linenos">105</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="ClickHouse-106"><a href="#ClickHouse-106"><span class="linenos">106</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="ClickHouse-107"><a href="#ClickHouse-107"><span class="linenos">107</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-108"><a href="#ClickHouse-108"><span class="linenos">108</span></a>
+</span><span id="ClickHouse-109"><a href="#ClickHouse-109"><span class="linenos">109</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
+</span><span id="ClickHouse-110"><a href="#ClickHouse-110"><span class="linenos">110</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
+</span><span id="ClickHouse-111"><a href="#ClickHouse-111"><span class="linenos">111</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse-112"><a href="#ClickHouse-112"><span class="linenos">112</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
</span><span id="ClickHouse-113"><a href="#ClickHouse-113"><span class="linenos">113</span></a>
-</span><span id="ClickHouse-114"><a href="#ClickHouse-114"><span class="linenos">114</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-115"><a href="#ClickHouse-115"><span class="linenos">115</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse-116"><a href="#ClickHouse-116"><span class="linenos">116</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="ClickHouse-117"><a href="#ClickHouse-117"><span class="linenos">117</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-118"><a href="#ClickHouse-118"><span class="linenos">118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">),</span>
-</span><span id="ClickHouse-119"><a href="#ClickHouse-119"><span class="linenos">119</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-120"><a href="#ClickHouse-120"><span class="linenos">120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="ClickHouse-114"><a href="#ClickHouse-114"><span class="linenos">114</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-115"><a href="#ClickHouse-115"><span class="linenos">115</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span>
+</span><span id="ClickHouse-116"><a href="#ClickHouse-116"><span class="linenos">116</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="ClickHouse-117"><a href="#ClickHouse-117"><span class="linenos">117</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="ClickHouse-118"><a href="#ClickHouse-118"><span class="linenos">118</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="ClickHouse-119"><a href="#ClickHouse-119"><span class="linenos">119</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="ClickHouse-120"><a href="#ClickHouse-120"><span class="linenos">120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
</span><span id="ClickHouse-121"><a href="#ClickHouse-121"><span class="linenos">121</span></a> <span class="p">}</span>
</span><span id="ClickHouse-122"><a href="#ClickHouse-122"><span class="linenos">122</span></a>
-</span><span id="ClickHouse-123"><a href="#ClickHouse-123"><span class="linenos">123</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-124"><a href="#ClickHouse-124"><span class="linenos">124</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="ClickHouse-125"><a href="#ClickHouse-125"><span class="linenos">125</span></a>
-</span><span id="ClickHouse-126"><a href="#ClickHouse-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">):</span>
-</span><span id="ClickHouse-127"><a href="#ClickHouse-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="ClickHouse-128"><a href="#ClickHouse-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
-</span><span id="ClickHouse-129"><a href="#ClickHouse-129"><span class="linenos">129</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-130"><a href="#ClickHouse-130"><span class="linenos">130</span></a> <span class="n">true</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="ClickHouse-131"><a href="#ClickHouse-131"><span class="linenos">131</span></a> <span class="n">false</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="ClickHouse-132"><a href="#ClickHouse-132"><span class="linenos">132</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-123"><a href="#ClickHouse-123"><span class="linenos">123</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="ClickHouse-124"><a href="#ClickHouse-124"><span class="linenos">124</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="ClickHouse-125"><a href="#ClickHouse-125"><span class="linenos">125</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="ClickHouse-126"><a href="#ClickHouse-126"><span class="linenos">126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="ClickHouse-127"><a href="#ClickHouse-127"><span class="linenos">127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="ClickHouse-128"><a href="#ClickHouse-128"><span class="linenos">128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="ClickHouse-129"><a href="#ClickHouse-129"><span class="linenos">129</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="ClickHouse-130"><a href="#ClickHouse-130"><span class="linenos">130</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-131"><a href="#ClickHouse-131"><span class="linenos">131</span></a>
+</span><span id="ClickHouse-132"><a href="#ClickHouse-132"><span class="linenos">132</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse-133"><a href="#ClickHouse-133"><span class="linenos">133</span></a>
-</span><span id="ClickHouse-134"><a href="#ClickHouse-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse-135"><a href="#ClickHouse-135"><span class="linenos">135</span></a>
-</span><span id="ClickHouse-136"><a href="#ClickHouse-136"><span class="linenos">136</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-137"><a href="#ClickHouse-137"><span class="linenos">137</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="ClickHouse-138"><a href="#ClickHouse-138"><span class="linenos">138</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
-</span><span id="ClickHouse-139"><a href="#ClickHouse-139"><span class="linenos">139</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
-</span><span id="ClickHouse-140"><a href="#ClickHouse-140"><span class="linenos">140</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ClickHouse-141"><a href="#ClickHouse-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse-142"><a href="#ClickHouse-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse-143"><a href="#ClickHouse-143"><span class="linenos">143</span></a>
-</span><span id="ClickHouse-144"><a href="#ClickHouse-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="ClickHouse-145"><a href="#ClickHouse-145"><span class="linenos">145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
-</span><span id="ClickHouse-146"><a href="#ClickHouse-146"><span class="linenos">146</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="ClickHouse-147"><a href="#ClickHouse-147"><span class="linenos">147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
-</span><span id="ClickHouse-148"><a href="#ClickHouse-148"><span class="linenos">148</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-149"><a href="#ClickHouse-149"><span class="linenos">149</span></a>
-</span><span id="ClickHouse-150"><a href="#ClickHouse-150"><span class="linenos">150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="ClickHouse-151"><a href="#ClickHouse-151"><span class="linenos">151</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-152"><a href="#ClickHouse-152"><span class="linenos">152</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse-153"><a href="#ClickHouse-153"><span class="linenos">153</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting }&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-154"><a href="#ClickHouse-154"><span class="linenos">154</span></a>
-</span><span id="ClickHouse-155"><a href="#ClickHouse-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="ClickHouse-156"><a href="#ClickHouse-156"><span class="linenos">156</span></a>
-</span><span id="ClickHouse-157"><a href="#ClickHouse-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="ClickHouse-158"><a href="#ClickHouse-158"><span class="linenos">158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-159"><a href="#ClickHouse-159"><span class="linenos">159</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
-</span><span id="ClickHouse-160"><a href="#ClickHouse-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse-161"><a href="#ClickHouse-161"><span class="linenos">161</span></a>
-</span><span id="ClickHouse-162"><a href="#ClickHouse-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse-163"><a href="#ClickHouse-163"><span class="linenos">163</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-164"><a href="#ClickHouse-164"><span class="linenos">164</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-165"><a href="#ClickHouse-165"><span class="linenos">165</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-166"><a href="#ClickHouse-166"><span class="linenos">166</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse-167"><a href="#ClickHouse-167"><span class="linenos">167</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-168"><a href="#ClickHouse-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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-169"><a href="#ClickHouse-169"><span class="linenos">169</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse-170"><a href="#ClickHouse-170"><span class="linenos">170</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span>
-</span><span id="ClickHouse-171"><a href="#ClickHouse-171"><span class="linenos">171</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-172"><a href="#ClickHouse-172"><span class="linenos">172</span></a>
-</span><span id="ClickHouse-173"><a href="#ClickHouse-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
-</span><span id="ClickHouse-174"><a href="#ClickHouse-174"><span class="linenos">174</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-175"><a href="#ClickHouse-175"><span class="linenos">175</span></a>
-</span><span id="ClickHouse-176"><a href="#ClickHouse-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse-177"><a href="#ClickHouse-177"><span class="linenos">177</span></a>
-</span><span id="ClickHouse-178"><a href="#ClickHouse-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="ClickHouse-179"><a href="#ClickHouse-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-180"><a href="#ClickHouse-180"><span class="linenos">180</span></a>
-</span><span id="ClickHouse-181"><a href="#ClickHouse-181"><span class="linenos">181</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
-</span><span id="ClickHouse-182"><a href="#ClickHouse-182"><span class="linenos">182</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="ClickHouse-183"><a href="#ClickHouse-183"><span class="linenos">183</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse-184"><a href="#ClickHouse-184"><span class="linenos">184</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="ClickHouse-185"><a href="#ClickHouse-185"><span class="linenos">185</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
-</span><span id="ClickHouse-186"><a href="#ClickHouse-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
-</span><span id="ClickHouse-187"><a href="#ClickHouse-187"><span class="linenos">187</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="ClickHouse-188"><a href="#ClickHouse-188"><span class="linenos">188</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
-</span><span id="ClickHouse-189"><a href="#ClickHouse-189"><span class="linenos">189</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse-190"><a href="#ClickHouse-190"><span class="linenos">190</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
-</span><span id="ClickHouse-191"><a href="#ClickHouse-191"><span class="linenos">191</span></a>
-</span><span id="ClickHouse-192"><a href="#ClickHouse-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="ClickHouse-193"><a href="#ClickHouse-193"><span class="linenos">193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-194"><a href="#ClickHouse-194"><span class="linenos">194</span></a>
-</span><span id="ClickHouse-195"><a href="#ClickHouse-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-196"><a href="#ClickHouse-196"><span class="linenos">196</span></a>
-</span><span id="ClickHouse-197"><a href="#ClickHouse-197"><span class="linenos">197</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="ClickHouse-198"><a href="#ClickHouse-198"><span class="linenos">198</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-199"><a href="#ClickHouse-199"><span class="linenos">199</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
-</span><span id="ClickHouse-200"><a href="#ClickHouse-200"><span class="linenos">200</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-201"><a href="#ClickHouse-201"><span class="linenos">201</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-202"><a href="#ClickHouse-202"><span class="linenos">202</span></a>
-</span><span id="ClickHouse-203"><a href="#ClickHouse-203"><span class="linenos">203</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
-</span><span id="ClickHouse-204"><a href="#ClickHouse-204"><span class="linenos">204</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-205"><a href="#ClickHouse-205"><span class="linenos">205</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-206"><a href="#ClickHouse-206"><span class="linenos">206</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
-</span><span id="ClickHouse-207"><a href="#ClickHouse-207"><span class="linenos">207</span></a>
-</span><span id="ClickHouse-208"><a href="#ClickHouse-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="ClickHouse-209"><a href="#ClickHouse-209"><span class="linenos">209</span></a> <span class="n">is_global</span><span class="p">,</span>
-</span><span id="ClickHouse-210"><a href="#ClickHouse-210"><span class="linenos">210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse-211"><a href="#ClickHouse-211"><span class="linenos">211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse-212"><a href="#ClickHouse-212"><span class="linenos">212</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-213"><a href="#ClickHouse-213"><span class="linenos">213</span></a>
-</span><span id="ClickHouse-214"><a href="#ClickHouse-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="ClickHouse-215"><a href="#ClickHouse-215"><span class="linenos">215</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-216"><a href="#ClickHouse-216"><span class="linenos">216</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="ClickHouse-217"><a href="#ClickHouse-217"><span class="linenos">217</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-218"><a href="#ClickHouse-218"><span class="linenos">218</span></a>
-</span><span id="ClickHouse-219"><a href="#ClickHouse-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="ClickHouse-220"><a href="#ClickHouse-220"><span class="linenos">220</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
-</span><span id="ClickHouse-221"><a href="#ClickHouse-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="ClickHouse-134"><a href="#ClickHouse-134"><span class="linenos">134</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-135"><a href="#ClickHouse-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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse-136"><a href="#ClickHouse-136"><span class="linenos">136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="ClickHouse-137"><a href="#ClickHouse-137"><span class="linenos">137</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-138"><a href="#ClickHouse-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">),</span>
+</span><span id="ClickHouse-139"><a href="#ClickHouse-139"><span class="linenos">139</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-140"><a href="#ClickHouse-140"><span class="linenos">140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="ClickHouse-141"><a href="#ClickHouse-141"><span class="linenos">141</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-142"><a href="#ClickHouse-142"><span class="linenos">142</span></a>
+</span><span id="ClickHouse-143"><a href="#ClickHouse-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-144"><a href="#ClickHouse-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="ClickHouse-145"><a href="#ClickHouse-145"><span class="linenos">145</span></a>
+</span><span id="ClickHouse-146"><a href="#ClickHouse-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">):</span>
+</span><span id="ClickHouse-147"><a href="#ClickHouse-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="ClickHouse-148"><a href="#ClickHouse-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
+</span><span id="ClickHouse-149"><a href="#ClickHouse-149"><span class="linenos">149</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-150"><a href="#ClickHouse-150"><span class="linenos">150</span></a> <span class="n">true</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="ClickHouse-151"><a href="#ClickHouse-151"><span class="linenos">151</span></a> <span class="n">false</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="ClickHouse-152"><a href="#ClickHouse-152"><span class="linenos">152</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-153"><a href="#ClickHouse-153"><span class="linenos">153</span></a>
+</span><span id="ClickHouse-154"><a href="#ClickHouse-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse-155"><a href="#ClickHouse-155"><span class="linenos">155</span></a>
+</span><span id="ClickHouse-156"><a href="#ClickHouse-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-157"><a href="#ClickHouse-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="ClickHouse-158"><a href="#ClickHouse-158"><span class="linenos">158</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
+</span><span id="ClickHouse-159"><a href="#ClickHouse-159"><span class="linenos">159</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
+</span><span id="ClickHouse-160"><a href="#ClickHouse-160"><span class="linenos">160</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ClickHouse-161"><a href="#ClickHouse-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse-162"><a href="#ClickHouse-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse-163"><a href="#ClickHouse-163"><span class="linenos">163</span></a>
+</span><span id="ClickHouse-164"><a href="#ClickHouse-164"><span class="linenos">164</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="ClickHouse-165"><a href="#ClickHouse-165"><span class="linenos">165</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
+</span><span id="ClickHouse-166"><a href="#ClickHouse-166"><span class="linenos">166</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="ClickHouse-167"><a href="#ClickHouse-167"><span class="linenos">167</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
+</span><span id="ClickHouse-168"><a href="#ClickHouse-168"><span class="linenos">168</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-169"><a href="#ClickHouse-169"><span class="linenos">169</span></a>
+</span><span id="ClickHouse-170"><a href="#ClickHouse-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="ClickHouse-171"><a href="#ClickHouse-171"><span class="linenos">171</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-172"><a href="#ClickHouse-172"><span class="linenos">172</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse-173"><a href="#ClickHouse-173"><span class="linenos">173</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting }&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-174"><a href="#ClickHouse-174"><span class="linenos">174</span></a>
+</span><span id="ClickHouse-175"><a href="#ClickHouse-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="ClickHouse-176"><a href="#ClickHouse-176"><span class="linenos">176</span></a>
+</span><span id="ClickHouse-177"><a href="#ClickHouse-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="ClickHouse-178"><a href="#ClickHouse-178"><span class="linenos">178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-179"><a href="#ClickHouse-179"><span class="linenos">179</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
+</span><span id="ClickHouse-180"><a href="#ClickHouse-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse-181"><a href="#ClickHouse-181"><span class="linenos">181</span></a>
+</span><span id="ClickHouse-182"><a href="#ClickHouse-182"><span class="linenos">182</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse-183"><a href="#ClickHouse-183"><span class="linenos">183</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-184"><a href="#ClickHouse-184"><span class="linenos">184</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-185"><a href="#ClickHouse-185"><span class="linenos">185</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-186"><a href="#ClickHouse-186"><span class="linenos">186</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse-187"><a href="#ClickHouse-187"><span class="linenos">187</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-188"><a href="#ClickHouse-188"><span class="linenos">188</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-189"><a href="#ClickHouse-189"><span class="linenos">189</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse-190"><a href="#ClickHouse-190"><span class="linenos">190</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span>
+</span><span id="ClickHouse-191"><a href="#ClickHouse-191"><span class="linenos">191</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-192"><a href="#ClickHouse-192"><span class="linenos">192</span></a>
+</span><span id="ClickHouse-193"><a href="#ClickHouse-193"><span class="linenos">193</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
+</span><span id="ClickHouse-194"><a href="#ClickHouse-194"><span class="linenos">194</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-195"><a href="#ClickHouse-195"><span class="linenos">195</span></a>
+</span><span id="ClickHouse-196"><a href="#ClickHouse-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse-197"><a href="#ClickHouse-197"><span class="linenos">197</span></a>
+</span><span id="ClickHouse-198"><a href="#ClickHouse-198"><span class="linenos">198</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="ClickHouse-199"><a href="#ClickHouse-199"><span class="linenos">199</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-200"><a href="#ClickHouse-200"><span class="linenos">200</span></a>
+</span><span id="ClickHouse-201"><a href="#ClickHouse-201"><span class="linenos">201</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
+</span><span id="ClickHouse-202"><a href="#ClickHouse-202"><span class="linenos">202</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="ClickHouse-203"><a href="#ClickHouse-203"><span class="linenos">203</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse-204"><a href="#ClickHouse-204"><span class="linenos">204</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="ClickHouse-205"><a href="#ClickHouse-205"><span class="linenos">205</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
+</span><span id="ClickHouse-206"><a href="#ClickHouse-206"><span class="linenos">206</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
+</span><span id="ClickHouse-207"><a href="#ClickHouse-207"><span class="linenos">207</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="ClickHouse-208"><a href="#ClickHouse-208"><span class="linenos">208</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
+</span><span id="ClickHouse-209"><a href="#ClickHouse-209"><span class="linenos">209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse-210"><a href="#ClickHouse-210"><span class="linenos">210</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="ClickHouse-211"><a href="#ClickHouse-211"><span class="linenos">211</span></a>
+</span><span id="ClickHouse-212"><a href="#ClickHouse-212"><span class="linenos">212</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="ClickHouse-213"><a href="#ClickHouse-213"><span class="linenos">213</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-214"><a href="#ClickHouse-214"><span class="linenos">214</span></a>
+</span><span id="ClickHouse-215"><a href="#ClickHouse-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-216"><a href="#ClickHouse-216"><span class="linenos">216</span></a>
+</span><span id="ClickHouse-217"><a href="#ClickHouse-217"><span class="linenos">217</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="ClickHouse-218"><a href="#ClickHouse-218"><span class="linenos">218</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-219"><a href="#ClickHouse-219"><span class="linenos">219</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
+</span><span id="ClickHouse-220"><a href="#ClickHouse-220"><span class="linenos">220</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-221"><a href="#ClickHouse-221"><span class="linenos">221</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="ClickHouse-222"><a href="#ClickHouse-222"><span class="linenos">222</span></a>
-</span><span id="ClickHouse-223"><a href="#ClickHouse-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse-224"><a href="#ClickHouse-224"><span class="linenos">224</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-225"><a href="#ClickHouse-225"><span class="linenos">225</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse-226"><a href="#ClickHouse-226"><span class="linenos">226</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-227"><a href="#ClickHouse-227"><span class="linenos">227</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="ClickHouse-228"><a href="#ClickHouse-228"><span class="linenos">228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-229"><a href="#ClickHouse-229"><span class="linenos">229</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse-230"><a href="#ClickHouse-230"><span class="linenos">230</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="ClickHouse-231"><a href="#ClickHouse-231"><span class="linenos">231</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-232"><a href="#ClickHouse-232"><span class="linenos">232</span></a>
-</span><span id="ClickHouse-233"><a href="#ClickHouse-233"><span class="linenos">233</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
-</span><span id="ClickHouse-234"><a href="#ClickHouse-234"><span class="linenos">234</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
-</span><span id="ClickHouse-235"><a href="#ClickHouse-235"><span class="linenos">235</span></a>
-</span><span id="ClickHouse-236"><a href="#ClickHouse-236"><span class="linenos">236</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse-237"><a href="#ClickHouse-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="ClickHouse-238"><a href="#ClickHouse-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
-</span><span id="ClickHouse-239"><a href="#ClickHouse-239"><span class="linenos">239</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-240"><a href="#ClickHouse-240"><span class="linenos">240</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse-241"><a href="#ClickHouse-241"><span class="linenos">241</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="ClickHouse-242"><a href="#ClickHouse-242"><span class="linenos">242</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-243"><a href="#ClickHouse-243"><span class="linenos">243</span></a>
-</span><span id="ClickHouse-244"><a href="#ClickHouse-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="ClickHouse-245"><a href="#ClickHouse-245"><span class="linenos">245</span></a>
-</span><span id="ClickHouse-246"><a href="#ClickHouse-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
-</span><span id="ClickHouse-247"><a href="#ClickHouse-247"><span class="linenos">247</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="ClickHouse-248"><a href="#ClickHouse-248"><span class="linenos">248</span></a> <span class="p">)</span> <span class="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="ClickHouse-249"><a href="#ClickHouse-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse-250"><a href="#ClickHouse-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
-</span><span id="ClickHouse-251"><a href="#ClickHouse-251"><span class="linenos">251</span></a>
-</span><span id="ClickHouse-252"><a href="#ClickHouse-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse-253"><a href="#ClickHouse-253"><span class="linenos">253</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
-</span><span id="ClickHouse-254"><a href="#ClickHouse-254"><span class="linenos">254</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-255"><a href="#ClickHouse-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">params</span>
-</span><span id="ClickHouse-256"><a href="#ClickHouse-256"><span class="linenos">256</span></a>
-</span><span id="ClickHouse-257"><a href="#ClickHouse-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse-258"><a href="#ClickHouse-258"><span class="linenos">258</span></a>
-</span><span id="ClickHouse-259"><a href="#ClickHouse-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span>
-</span><span id="ClickHouse-260"><a href="#ClickHouse-260"><span class="linenos">260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="ClickHouse-261"><a href="#ClickHouse-261"><span class="linenos">261</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
-</span><span id="ClickHouse-262"><a href="#ClickHouse-262"><span class="linenos">262</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse-263"><a href="#ClickHouse-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-264"><a href="#ClickHouse-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
+</span><span id="ClickHouse-223"><a href="#ClickHouse-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
+</span><span id="ClickHouse-224"><a href="#ClickHouse-224"><span class="linenos">224</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-225"><a href="#ClickHouse-225"><span class="linenos">225</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-226"><a href="#ClickHouse-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
+</span><span id="ClickHouse-227"><a href="#ClickHouse-227"><span class="linenos">227</span></a>
+</span><span id="ClickHouse-228"><a href="#ClickHouse-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="ClickHouse-229"><a href="#ClickHouse-229"><span class="linenos">229</span></a> <span class="n">is_global</span><span class="p">,</span>
+</span><span id="ClickHouse-230"><a href="#ClickHouse-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse-231"><a href="#ClickHouse-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse-232"><a href="#ClickHouse-232"><span class="linenos">232</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-233"><a href="#ClickHouse-233"><span class="linenos">233</span></a>
+</span><span id="ClickHouse-234"><a href="#ClickHouse-234"><span class="linenos">234</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="ClickHouse-235"><a href="#ClickHouse-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-236"><a href="#ClickHouse-236"><span class="linenos">236</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="ClickHouse-237"><a href="#ClickHouse-237"><span class="linenos">237</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-238"><a href="#ClickHouse-238"><span class="linenos">238</span></a>
+</span><span id="ClickHouse-239"><a href="#ClickHouse-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="ClickHouse-240"><a href="#ClickHouse-240"><span class="linenos">240</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
+</span><span id="ClickHouse-241"><a href="#ClickHouse-241"><span class="linenos">241</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="ClickHouse-242"><a href="#ClickHouse-242"><span class="linenos">242</span></a>
+</span><span id="ClickHouse-243"><a href="#ClickHouse-243"><span class="linenos">243</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse-244"><a href="#ClickHouse-244"><span class="linenos">244</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-245"><a href="#ClickHouse-245"><span class="linenos">245</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse-246"><a href="#ClickHouse-246"><span class="linenos">246</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-247"><a href="#ClickHouse-247"><span class="linenos">247</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="ClickHouse-248"><a href="#ClickHouse-248"><span class="linenos">248</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-249"><a href="#ClickHouse-249"><span class="linenos">249</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse-250"><a href="#ClickHouse-250"><span class="linenos">250</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="ClickHouse-251"><a href="#ClickHouse-251"><span class="linenos">251</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-252"><a href="#ClickHouse-252"><span class="linenos">252</span></a>
+</span><span id="ClickHouse-253"><a href="#ClickHouse-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
+</span><span id="ClickHouse-254"><a href="#ClickHouse-254"><span class="linenos">254</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+</span><span id="ClickHouse-255"><a href="#ClickHouse-255"><span class="linenos">255</span></a>
+</span><span id="ClickHouse-256"><a href="#ClickHouse-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse-257"><a href="#ClickHouse-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="ClickHouse-258"><a href="#ClickHouse-258"><span class="linenos">258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
+</span><span id="ClickHouse-259"><a href="#ClickHouse-259"><span class="linenos">259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-260"><a href="#ClickHouse-260"><span class="linenos">260</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse-261"><a href="#ClickHouse-261"><span class="linenos">261</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="ClickHouse-262"><a href="#ClickHouse-262"><span class="linenos">262</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-263"><a href="#ClickHouse-263"><span class="linenos">263</span></a>
+</span><span id="ClickHouse-264"><a href="#ClickHouse-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="ClickHouse-265"><a href="#ClickHouse-265"><span class="linenos">265</span></a>
-</span><span id="ClickHouse-266"><a href="#ClickHouse-266"><span class="linenos">266</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span>
-</span><span id="ClickHouse-267"><a href="#ClickHouse-267"><span class="linenos">267</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-268"><a href="#ClickHouse-268"><span class="linenos">268</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="ClickHouse-269"><a href="#ClickHouse-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-270"><a href="#ClickHouse-270"><span class="linenos">270</span></a>
-</span><span id="ClickHouse-271"><a href="#ClickHouse-271"><span class="linenos">271</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse-272"><a href="#ClickHouse-272"><span class="linenos">272</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-273"><a href="#ClickHouse-273"><span class="linenos">273</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="ClickHouse-274"><a href="#ClickHouse-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse-275"><a href="#ClickHouse-275"><span class="linenos">275</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
-</span><span id="ClickHouse-276"><a href="#ClickHouse-276"><span class="linenos">276</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-277"><a href="#ClickHouse-277"><span class="linenos">277</span></a>
-</span><span id="ClickHouse-278"><a href="#ClickHouse-278"><span class="linenos">278</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-279"><a href="#ClickHouse-279"><span class="linenos">279</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse-280"><a href="#ClickHouse-280"><span class="linenos">280</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse-281"><a href="#ClickHouse-281"><span class="linenos">281</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="ClickHouse-282"><a href="#ClickHouse-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="ClickHouse-283"><a href="#ClickHouse-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-284"><a href="#ClickHouse-284"><span class="linenos">284</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="ClickHouse-285"><a href="#ClickHouse-285"><span class="linenos">285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse-286"><a href="#ClickHouse-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse-287"><a href="#ClickHouse-287"><span class="linenos">287</span></a>
-</span><span id="ClickHouse-288"><a href="#ClickHouse-288"><span class="linenos">288</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="ClickHouse-289"><a href="#ClickHouse-289"><span class="linenos">289</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-290"><a href="#ClickHouse-290"><span class="linenos">290</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-291"><a href="#ClickHouse-291"><span class="linenos">291</span></a>
-</span><span id="ClickHouse-292"><a href="#ClickHouse-292"><span class="linenos">292</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-293"><a href="#ClickHouse-293"><span class="linenos">293</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="ClickHouse-294"><a href="#ClickHouse-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-295"><a href="#ClickHouse-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-296"><a href="#ClickHouse-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-297"><a href="#ClickHouse-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-298"><a href="#ClickHouse-298"><span class="linenos">298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-299"><a href="#ClickHouse-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-300"><a href="#ClickHouse-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-301"><a href="#ClickHouse-301"><span class="linenos">301</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-302"><a href="#ClickHouse-302"><span class="linenos">302</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-303"><a href="#ClickHouse-303"><span class="linenos">303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-304"><a href="#ClickHouse-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-305"><a href="#ClickHouse-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-306"><a href="#ClickHouse-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-307"><a href="#ClickHouse-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">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-308"><a href="#ClickHouse-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">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-309"><a href="#ClickHouse-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">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-310"><a href="#ClickHouse-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">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-311"><a href="#ClickHouse-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">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-312"><a href="#ClickHouse-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">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-313"><a href="#ClickHouse-313"><span class="linenos">313</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-314"><a href="#ClickHouse-314"><span class="linenos">314</span></a>
-</span><span id="ClickHouse-315"><a href="#ClickHouse-315"><span class="linenos">315</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-316"><a href="#ClickHouse-316"><span class="linenos">316</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="ClickHouse-317"><a href="#ClickHouse-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-318"><a href="#ClickHouse-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-319"><a href="#ClickHouse-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="ClickHouse-320"><a href="#ClickHouse-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-321"><a href="#ClickHouse-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-322"><a href="#ClickHouse-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse-323"><a href="#ClickHouse-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-324"><a href="#ClickHouse-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="ClickHouse-325"><a href="#ClickHouse-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">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;quantile&quot;</span><span class="p">))</span>
-</span><span id="ClickHouse-326"><a href="#ClickHouse-326"><span class="linenos">326</span></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-327"><a href="#ClickHouse-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-328"><a href="#ClickHouse-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-329"><a href="#ClickHouse-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse-330"><a href="#ClickHouse-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;xor&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
-</span><span id="ClickHouse-331"><a href="#ClickHouse-331"><span class="linenos">331</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-332"><a href="#ClickHouse-332"><span class="linenos">332</span></a>
-</span><span id="ClickHouse-333"><a href="#ClickHouse-333"><span class="linenos">333</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-334"><a href="#ClickHouse-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="ClickHouse-335"><a href="#ClickHouse-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="ClickHouse-336"><a href="#ClickHouse-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="ClickHouse-337"><a href="#ClickHouse-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="ClickHouse-338"><a href="#ClickHouse-338"><span class="linenos">338</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-339"><a href="#ClickHouse-339"><span class="linenos">339</span></a>
-</span><span id="ClickHouse-340"><a href="#ClickHouse-340"><span class="linenos">340</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-341"><a href="#ClickHouse-341"><span class="linenos">341</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-342"><a href="#ClickHouse-342"><span class="linenos">342</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse-343"><a href="#ClickHouse-343"><span class="linenos">343</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse-344"><a href="#ClickHouse-344"><span class="linenos">344</span></a>
-</span><span id="ClickHouse-345"><a href="#ClickHouse-345"><span class="linenos">345</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
-</span><span id="ClickHouse-346"><a href="#ClickHouse-346"><span class="linenos">346</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
-</span><span id="ClickHouse-347"><a href="#ClickHouse-347"><span class="linenos">347</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-348"><a href="#ClickHouse-348"><span class="linenos">348</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-349"><a href="#ClickHouse-349"><span class="linenos">349</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-350"><a href="#ClickHouse-350"><span class="linenos">350</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-351"><a href="#ClickHouse-351"><span class="linenos">351</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-352"><a href="#ClickHouse-352"><span class="linenos">352</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-353"><a href="#ClickHouse-353"><span class="linenos">353</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-354"><a href="#ClickHouse-354"><span class="linenos">354</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-355"><a href="#ClickHouse-355"><span class="linenos">355</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-356"><a href="#ClickHouse-356"><span class="linenos">356</span></a>
-</span><span id="ClickHouse-357"><a href="#ClickHouse-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-358"><a href="#ClickHouse-358"><span class="linenos">358</span></a> <span class="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
-</span><span id="ClickHouse-359"><a href="#ClickHouse-359"><span class="linenos">359</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="ClickHouse-360"><a href="#ClickHouse-360"><span class="linenos">360</span></a> <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="ClickHouse-361"><a href="#ClickHouse-361"><span class="linenos">361</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-362"><a href="#ClickHouse-362"><span class="linenos">362</span></a> <span class="o">*</span><span class="p">[</span>
-</span><span id="ClickHouse-363"><a href="#ClickHouse-363"><span class="linenos">363</span></a> <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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
-</span><span id="ClickHouse-364"><a href="#ClickHouse-364"><span class="linenos">364</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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="ClickHouse-365"><a href="#ClickHouse-365"><span class="linenos">365</span></a> <span class="p">],</span>
-</span><span id="ClickHouse-366"><a href="#ClickHouse-366"><span class="linenos">366</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-367"><a href="#ClickHouse-367"><span class="linenos">367</span></a>
-</span><span id="ClickHouse-368"><a href="#ClickHouse-368"><span class="linenos">368</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-369"><a href="#ClickHouse-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="ClickHouse-370"><a href="#ClickHouse-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-371"><a href="#ClickHouse-371"><span class="linenos">371</span></a>
-</span><span id="ClickHouse-372"><a href="#ClickHouse-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-373"><a href="#ClickHouse-373"><span class="linenos">373</span></a>
-</span><span id="ClickHouse-374"><a href="#ClickHouse-374"><span class="linenos">374</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="ClickHouse-375"><a href="#ClickHouse-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="ClickHouse-376"><a href="#ClickHouse-376"><span class="linenos">376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-377"><a href="#ClickHouse-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-378"><a href="#ClickHouse-378"><span class="linenos">378</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-379"><a href="#ClickHouse-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-380"><a href="#ClickHouse-380"><span class="linenos">380</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-381"><a href="#ClickHouse-381"><span class="linenos">381</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-382"><a href="#ClickHouse-382"><span class="linenos">382</span></a> <span class="p">]</span>
-</span><span id="ClickHouse-383"><a href="#ClickHouse-383"><span class="linenos">383</span></a>
-</span><span id="ClickHouse-384"><a href="#ClickHouse-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-385"><a href="#ClickHouse-385"><span class="linenos">385</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-386"><a href="#ClickHouse-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse-266"><a href="#ClickHouse-266"><span class="linenos">266</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
+</span><span id="ClickHouse-267"><a href="#ClickHouse-267"><span class="linenos">267</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="ClickHouse-268"><a href="#ClickHouse-268"><span class="linenos">268</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="ClickHouse-269"><a href="#ClickHouse-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse-270"><a href="#ClickHouse-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse-271"><a href="#ClickHouse-271"><span class="linenos">271</span></a>
+</span><span id="ClickHouse-272"><a href="#ClickHouse-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse-273"><a href="#ClickHouse-273"><span class="linenos">273</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse-274"><a href="#ClickHouse-274"><span class="linenos">274</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-275"><a href="#ClickHouse-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="n">params</span>
+</span><span id="ClickHouse-276"><a href="#ClickHouse-276"><span class="linenos">276</span></a>
+</span><span id="ClickHouse-277"><a href="#ClickHouse-277"><span class="linenos">277</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse-278"><a href="#ClickHouse-278"><span class="linenos">278</span></a>
+</span><span id="ClickHouse-279"><a href="#ClickHouse-279"><span class="linenos">279</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span>
+</span><span id="ClickHouse-280"><a href="#ClickHouse-280"><span class="linenos">280</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="ClickHouse-281"><a href="#ClickHouse-281"><span class="linenos">281</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
+</span><span id="ClickHouse-282"><a href="#ClickHouse-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse-283"><a href="#ClickHouse-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-284"><a href="#ClickHouse-284"><span class="linenos">284</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
+</span><span id="ClickHouse-285"><a href="#ClickHouse-285"><span class="linenos">285</span></a>
+</span><span id="ClickHouse-286"><a href="#ClickHouse-286"><span class="linenos">286</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-287"><a href="#ClickHouse-287"><span class="linenos">287</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-288"><a href="#ClickHouse-288"><span class="linenos">288</span></a>
+</span><span id="ClickHouse-289"><a href="#ClickHouse-289"><span class="linenos">289</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse-290"><a href="#ClickHouse-290"><span class="linenos">290</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-291"><a href="#ClickHouse-291"><span class="linenos">291</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="ClickHouse-292"><a href="#ClickHouse-292"><span class="linenos">292</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse-293"><a href="#ClickHouse-293"><span class="linenos">293</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
+</span><span id="ClickHouse-294"><a href="#ClickHouse-294"><span class="linenos">294</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-295"><a href="#ClickHouse-295"><span class="linenos">295</span></a>
+</span><span id="ClickHouse-296"><a href="#ClickHouse-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-297"><a href="#ClickHouse-297"><span class="linenos">297</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse-298"><a href="#ClickHouse-298"><span class="linenos">298</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse-299"><a href="#ClickHouse-299"><span class="linenos">299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="ClickHouse-300"><a href="#ClickHouse-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="ClickHouse-301"><a href="#ClickHouse-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-302"><a href="#ClickHouse-302"><span class="linenos">302</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="ClickHouse-303"><a href="#ClickHouse-303"><span class="linenos">303</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse-304"><a href="#ClickHouse-304"><span class="linenos">304</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse-305"><a href="#ClickHouse-305"><span class="linenos">305</span></a>
+</span><span id="ClickHouse-306"><a href="#ClickHouse-306"><span class="linenos">306</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="ClickHouse-307"><a href="#ClickHouse-307"><span class="linenos">307</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-308"><a href="#ClickHouse-308"><span class="linenos">308</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-309"><a href="#ClickHouse-309"><span class="linenos">309</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-310"><a href="#ClickHouse-310"><span class="linenos">310</span></a>
+</span><span id="ClickHouse-311"><a href="#ClickHouse-311"><span class="linenos">311</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-312"><a href="#ClickHouse-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">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-313"><a href="#ClickHouse-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">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-314"><a href="#ClickHouse-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">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-315"><a href="#ClickHouse-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-316"><a href="#ClickHouse-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-317"><a href="#ClickHouse-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-318"><a href="#ClickHouse-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-319"><a href="#ClickHouse-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-320"><a href="#ClickHouse-320"><span class="linenos">320</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-321"><a href="#ClickHouse-321"><span class="linenos">321</span></a>
+</span><span id="ClickHouse-322"><a href="#ClickHouse-322"><span class="linenos">322</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-323"><a href="#ClickHouse-323"><span class="linenos">323</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="ClickHouse-324"><a href="#ClickHouse-324"><span class="linenos">324</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="ClickHouse-325"><a href="#ClickHouse-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-326"><a href="#ClickHouse-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-327"><a href="#ClickHouse-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-328"><a href="#ClickHouse-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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-329"><a href="#ClickHouse-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">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-330"><a href="#ClickHouse-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">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-331"><a href="#ClickHouse-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-332"><a href="#ClickHouse-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-333"><a href="#ClickHouse-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-334"><a href="#ClickHouse-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-335"><a href="#ClickHouse-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-336"><a href="#ClickHouse-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-337"><a href="#ClickHouse-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-338"><a href="#ClickHouse-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-339"><a href="#ClickHouse-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-340"><a href="#ClickHouse-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-341"><a href="#ClickHouse-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-342"><a href="#ClickHouse-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-343"><a href="#ClickHouse-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-344"><a href="#ClickHouse-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-345"><a href="#ClickHouse-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-346"><a href="#ClickHouse-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-347"><a href="#ClickHouse-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-348"><a href="#ClickHouse-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-349"><a href="#ClickHouse-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-350"><a href="#ClickHouse-350"><span class="linenos">350</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-351"><a href="#ClickHouse-351"><span class="linenos">351</span></a>
+</span><span id="ClickHouse-352"><a href="#ClickHouse-352"><span class="linenos">352</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-353"><a href="#ClickHouse-353"><span class="linenos">353</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="ClickHouse-354"><a href="#ClickHouse-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-355"><a href="#ClickHouse-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-356"><a href="#ClickHouse-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="ClickHouse-357"><a href="#ClickHouse-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-358"><a href="#ClickHouse-358"><span class="linenos">358</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="ClickHouse-359"><a href="#ClickHouse-359"><span class="linenos">359</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="ClickHouse-360"><a href="#ClickHouse-360"><span class="linenos">360</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-361"><a href="#ClickHouse-361"><span class="linenos">361</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="ClickHouse-362"><a href="#ClickHouse-362"><span class="linenos">362</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="ClickHouse-363"><a href="#ClickHouse-363"><span class="linenos">363</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-364"><a href="#ClickHouse-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-365"><a href="#ClickHouse-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse-366"><a href="#ClickHouse-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-367"><a href="#ClickHouse-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="ClickHouse-368"><a href="#ClickHouse-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">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;quantile&quot;</span><span class="p">))</span>
+</span><span id="ClickHouse-369"><a href="#ClickHouse-369"><span class="linenos">369</span></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-370"><a href="#ClickHouse-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-371"><a href="#ClickHouse-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-372"><a href="#ClickHouse-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse-373"><a href="#ClickHouse-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;xor&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
+</span><span id="ClickHouse-374"><a href="#ClickHouse-374"><span class="linenos">374</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-375"><a href="#ClickHouse-375"><span class="linenos">375</span></a>
+</span><span id="ClickHouse-376"><a href="#ClickHouse-376"><span class="linenos">376</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-377"><a href="#ClickHouse-377"><span class="linenos">377</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="ClickHouse-378"><a href="#ClickHouse-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="ClickHouse-379"><a href="#ClickHouse-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="ClickHouse-380"><a href="#ClickHouse-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="ClickHouse-381"><a href="#ClickHouse-381"><span class="linenos">381</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-382"><a href="#ClickHouse-382"><span class="linenos">382</span></a>
+</span><span id="ClickHouse-383"><a href="#ClickHouse-383"><span class="linenos">383</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-384"><a href="#ClickHouse-384"><span class="linenos">384</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-385"><a href="#ClickHouse-385"><span class="linenos">385</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse-386"><a href="#ClickHouse-386"><span class="linenos">386</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="ClickHouse-387"><a href="#ClickHouse-387"><span class="linenos">387</span></a>
-</span><span id="ClickHouse-388"><a href="#ClickHouse-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">placeholder_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-389"><a href="#ClickHouse-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse-390"><a href="#ClickHouse-390"><span class="linenos">390</span></a>
-</span><span id="ClickHouse-391"><a href="#ClickHouse-391"><span class="linenos">391</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-392"><a href="#ClickHouse-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse-393"><a href="#ClickHouse-393"><span class="linenos">393</span></a>
-</span><span id="ClickHouse-394"><a href="#ClickHouse-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-395"><a href="#ClickHouse-395"><span class="linenos">395</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="ClickHouse-396"><a href="#ClickHouse-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="ClickHouse-397"><a href="#ClickHouse-397"><span class="linenos">397</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-398"><a href="#ClickHouse-398"><span class="linenos">398</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="ClickHouse-399"><a href="#ClickHouse-399"><span class="linenos">399</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="ClickHouse-400"><a href="#ClickHouse-400"><span class="linenos">400</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-401"><a href="#ClickHouse-401"><span class="linenos">401</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-402"><a href="#ClickHouse-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse-403"><a href="#ClickHouse-403"><span class="linenos">403</span></a>
-</span><span id="ClickHouse-404"><a href="#ClickHouse-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+</span><span id="ClickHouse-388"><a href="#ClickHouse-388"><span class="linenos">388</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
+</span><span id="ClickHouse-389"><a href="#ClickHouse-389"><span class="linenos">389</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
+</span><span id="ClickHouse-390"><a href="#ClickHouse-390"><span class="linenos">390</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-391"><a href="#ClickHouse-391"><span class="linenos">391</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-392"><a href="#ClickHouse-392"><span class="linenos">392</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-393"><a href="#ClickHouse-393"><span class="linenos">393</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-394"><a href="#ClickHouse-394"><span class="linenos">394</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-395"><a href="#ClickHouse-395"><span class="linenos">395</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-396"><a href="#ClickHouse-396"><span class="linenos">396</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-397"><a href="#ClickHouse-397"><span class="linenos">397</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-398"><a href="#ClickHouse-398"><span class="linenos">398</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-399"><a href="#ClickHouse-399"><span class="linenos">399</span></a>
+</span><span id="ClickHouse-400"><a href="#ClickHouse-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-401"><a href="#ClickHouse-401"><span class="linenos">401</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="ClickHouse-402"><a href="#ClickHouse-402"><span class="linenos">402</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="ClickHouse-403"><a href="#ClickHouse-403"><span class="linenos">403</span></a> <span class="c1">#</span>
+</span><span id="ClickHouse-404"><a href="#ClickHouse-404"><span class="linenos">404</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="ClickHouse-405"><a href="#ClickHouse-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="ClickHouse-406"><a href="#ClickHouse-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="ClickHouse-407"><a href="#ClickHouse-407"><span class="linenos">407</span></a>
+</span><span id="ClickHouse-408"><a href="#ClickHouse-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-409"><a href="#ClickHouse-409"><span class="linenos">409</span></a>
+</span><span id="ClickHouse-410"><a href="#ClickHouse-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-411"><a href="#ClickHouse-411"><span class="linenos">411</span></a> <span class="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
+</span><span id="ClickHouse-412"><a href="#ClickHouse-412"><span class="linenos">412</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="ClickHouse-413"><a href="#ClickHouse-413"><span class="linenos">413</span></a> <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="ClickHouse-414"><a href="#ClickHouse-414"><span class="linenos">414</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-415"><a href="#ClickHouse-415"><span class="linenos">415</span></a> <span class="o">*</span><span class="p">[</span>
+</span><span id="ClickHouse-416"><a href="#ClickHouse-416"><span class="linenos">416</span></a> <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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+</span><span id="ClickHouse-417"><a href="#ClickHouse-417"><span class="linenos">417</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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="ClickHouse-418"><a href="#ClickHouse-418"><span class="linenos">418</span></a> <span class="p">],</span>
+</span><span id="ClickHouse-419"><a href="#ClickHouse-419"><span class="linenos">419</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-420"><a href="#ClickHouse-420"><span class="linenos">420</span></a>
+</span><span id="ClickHouse-421"><a href="#ClickHouse-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-422"><a href="#ClickHouse-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="ClickHouse-423"><a href="#ClickHouse-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-424"><a href="#ClickHouse-424"><span class="linenos">424</span></a>
+</span><span id="ClickHouse-425"><a href="#ClickHouse-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-426"><a href="#ClickHouse-426"><span class="linenos">426</span></a>
+</span><span id="ClickHouse-427"><a href="#ClickHouse-427"><span class="linenos">427</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="ClickHouse-428"><a href="#ClickHouse-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="ClickHouse-429"><a href="#ClickHouse-429"><span class="linenos">429</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-430"><a href="#ClickHouse-430"><span class="linenos">430</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-431"><a href="#ClickHouse-431"><span class="linenos">431</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-432"><a href="#ClickHouse-432"><span class="linenos">432</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-433"><a href="#ClickHouse-433"><span class="linenos">433</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-434"><a href="#ClickHouse-434"><span class="linenos">434</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-435"><a href="#ClickHouse-435"><span class="linenos">435</span></a> <span class="p">]</span>
+</span><span id="ClickHouse-436"><a href="#ClickHouse-436"><span class="linenos">436</span></a>
+</span><span id="ClickHouse-437"><a href="#ClickHouse-437"><span class="linenos">437</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-438"><a href="#ClickHouse-438"><span class="linenos">438</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-439"><a href="#ClickHouse-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse-440"><a href="#ClickHouse-440"><span class="linenos">440</span></a>
+</span><span id="ClickHouse-441"><a href="#ClickHouse-441"><span class="linenos">441</span></a> <span class="k">def</span> <span class="nf">placeholder_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-442"><a href="#ClickHouse-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse-443"><a href="#ClickHouse-443"><span class="linenos">443</span></a>
+</span><span id="ClickHouse-444"><a href="#ClickHouse-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-445"><a href="#ClickHouse-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse-446"><a href="#ClickHouse-446"><span class="linenos">446</span></a>
+</span><span id="ClickHouse-447"><a href="#ClickHouse-447"><span class="linenos">447</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-448"><a href="#ClickHouse-448"><span class="linenos">448</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="ClickHouse-449"><a href="#ClickHouse-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="ClickHouse-450"><a href="#ClickHouse-450"><span class="linenos">450</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-451"><a href="#ClickHouse-451"><span class="linenos">451</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="ClickHouse-452"><a href="#ClickHouse-452"><span class="linenos">452</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="ClickHouse-453"><a href="#ClickHouse-453"><span class="linenos">453</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-454"><a href="#ClickHouse-454"><span class="linenos">454</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-455"><a href="#ClickHouse-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse-456"><a href="#ClickHouse-456"><span class="linenos">456</span></a>
+</span><span id="ClickHouse-457"><a href="#ClickHouse-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -1367,6 +1484,7 @@
<dd id="ClickHouse.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="ClickHouse.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
<dd id="ClickHouse.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="ClickHouse.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="ClickHouse.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
<dd id="ClickHouse.DATEINT_FORMAT" class="variable"><a href="dialect.html#Dialect.DATEINT_FORMAT">DATEINT_FORMAT</a></dd>
<dd id="ClickHouse.TIME_FORMAT" class="variable"><a href="dialect.html#Dialect.TIME_FORMAT">TIME_FORMAT</a></dd>
@@ -1403,37 +1521,42 @@
</div>
<a class="headerlink" href="#ClickHouse.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Tokenizer-29"><a href="#ClickHouse.Tokenizer-29"><span class="linenos">29</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="ClickHouse.Tokenizer-30"><a href="#ClickHouse.Tokenizer-30"><span class="linenos">30</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse.Tokenizer-31"><a href="#ClickHouse.Tokenizer-31"><span class="linenos">31</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse.Tokenizer-32"><a href="#ClickHouse.Tokenizer-32"><span class="linenos">32</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse.Tokenizer-33"><a href="#ClickHouse.Tokenizer-33"><span class="linenos">33</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse.Tokenizer-34"><a href="#ClickHouse.Tokenizer-34"><span class="linenos">34</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse.Tokenizer-35"><a href="#ClickHouse.Tokenizer-35"><span class="linenos">35</span></a>
-</span><span id="ClickHouse.Tokenizer-36"><a href="#ClickHouse.Tokenizer-36"><span class="linenos">36</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Tokenizer-37"><a href="#ClickHouse.Tokenizer-37"><span class="linenos">37</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-38"><a href="#ClickHouse.Tokenizer-38"><span class="linenos">38</span></a> <span class="s2">&quot;ATTACH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-39"><a href="#ClickHouse.Tokenizer-39"><span class="linenos">39</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-40"><a href="#ClickHouse.Tokenizer-40"><span class="linenos">40</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-41"><a href="#ClickHouse.Tokenizer-41"><span class="linenos">41</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-42"><a href="#ClickHouse.Tokenizer-42"><span class="linenos">42</span></a> <span class="s2">&quot;FLOAT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-43"><a href="#ClickHouse.Tokenizer-43"><span class="linenos">43</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-44"><a href="#ClickHouse.Tokenizer-44"><span class="linenos">44</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-45"><a href="#ClickHouse.Tokenizer-45"><span class="linenos">45</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-46"><a href="#ClickHouse.Tokenizer-46"><span class="linenos">46</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-47"><a href="#ClickHouse.Tokenizer-47"><span class="linenos">47</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-48"><a href="#ClickHouse.Tokenizer-48"><span class="linenos">48</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-49"><a href="#ClickHouse.Tokenizer-49"><span class="linenos">49</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="ClickHouse.Tokenizer-50"><a href="#ClickHouse.Tokenizer-50"><span class="linenos">50</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-51"><a href="#ClickHouse.Tokenizer-51"><span class="linenos">51</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-52"><a href="#ClickHouse.Tokenizer-52"><span class="linenos">52</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-53"><a href="#ClickHouse.Tokenizer-53"><span class="linenos">53</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-54"><a href="#ClickHouse.Tokenizer-54"><span class="linenos">54</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-55"><a href="#ClickHouse.Tokenizer-55"><span class="linenos">55</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-56"><a href="#ClickHouse.Tokenizer-56"><span class="linenos">56</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-57"><a href="#ClickHouse.Tokenizer-57"><span class="linenos">57</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-58"><a href="#ClickHouse.Tokenizer-58"><span class="linenos">58</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-59"><a href="#ClickHouse.Tokenizer-59"><span class="linenos">59</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Tokenizer-30"><a href="#ClickHouse.Tokenizer-30"><span class="linenos">30</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="ClickHouse.Tokenizer-31"><a href="#ClickHouse.Tokenizer-31"><span class="linenos">31</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse.Tokenizer-32"><a href="#ClickHouse.Tokenizer-32"><span class="linenos">32</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse.Tokenizer-33"><a href="#ClickHouse.Tokenizer-33"><span class="linenos">33</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse.Tokenizer-34"><a href="#ClickHouse.Tokenizer-34"><span class="linenos">34</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse.Tokenizer-35"><a href="#ClickHouse.Tokenizer-35"><span class="linenos">35</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse.Tokenizer-36"><a href="#ClickHouse.Tokenizer-36"><span class="linenos">36</span></a>
+</span><span id="ClickHouse.Tokenizer-37"><a href="#ClickHouse.Tokenizer-37"><span class="linenos">37</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Tokenizer-38"><a href="#ClickHouse.Tokenizer-38"><span class="linenos">38</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-39"><a href="#ClickHouse.Tokenizer-39"><span class="linenos">39</span></a> <span class="s2">&quot;ATTACH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-40"><a href="#ClickHouse.Tokenizer-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-41"><a href="#ClickHouse.Tokenizer-41"><span class="linenos">41</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-42"><a href="#ClickHouse.Tokenizer-42"><span class="linenos">42</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-43"><a href="#ClickHouse.Tokenizer-43"><span class="linenos">43</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-44"><a href="#ClickHouse.Tokenizer-44"><span class="linenos">44</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-45"><a href="#ClickHouse.Tokenizer-45"><span class="linenos">45</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-46"><a href="#ClickHouse.Tokenizer-46"><span class="linenos">46</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-47"><a href="#ClickHouse.Tokenizer-47"><span class="linenos">47</span></a> <span class="s2">&quot;FLOAT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-48"><a href="#ClickHouse.Tokenizer-48"><span class="linenos">48</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-49"><a href="#ClickHouse.Tokenizer-49"><span class="linenos">49</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-50"><a href="#ClickHouse.Tokenizer-50"><span class="linenos">50</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-51"><a href="#ClickHouse.Tokenizer-51"><span class="linenos">51</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-52"><a href="#ClickHouse.Tokenizer-52"><span class="linenos">52</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-53"><a href="#ClickHouse.Tokenizer-53"><span class="linenos">53</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="ClickHouse.Tokenizer-54"><a href="#ClickHouse.Tokenizer-54"><span class="linenos">54</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-55"><a href="#ClickHouse.Tokenizer-55"><span class="linenos">55</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-56"><a href="#ClickHouse.Tokenizer-56"><span class="linenos">56</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-57"><a href="#ClickHouse.Tokenizer-57"><span class="linenos">57</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-58"><a href="#ClickHouse.Tokenizer-58"><span class="linenos">58</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-59"><a href="#ClickHouse.Tokenizer-59"><span class="linenos">59</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-60"><a href="#ClickHouse.Tokenizer-60"><span class="linenos">60</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-61"><a href="#ClickHouse.Tokenizer-61"><span class="linenos">61</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-62"><a href="#ClickHouse.Tokenizer-62"><span class="linenos">62</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-63"><a href="#ClickHouse.Tokenizer-63"><span class="linenos">63</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-64"><a href="#ClickHouse.Tokenizer-64"><span class="linenos">64</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-65"><a href="#ClickHouse.Tokenizer-65"><span class="linenos">65</span></a> <span class="p">}</span>
</span></pre></div>
@@ -1503,7 +1626,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="ClickHouse.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;ATTACH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;DATETIME64&#39;: &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &#39;DICTIONARY&#39;: &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &#39;FINAL&#39;: &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &#39;FLOAT32&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT64&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;GLOBAL&#39;: &lt;TokenType.GLOBAL: &#39;GLOBAL&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT16&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT256&#39;: &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &#39;INT32&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT64&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;TUPLE&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;UINT128&#39;: &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &#39;UINT16&#39;: &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &#39;UINT256&#39;: &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &#39;UINT32&#39;: &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &#39;UINT64&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;UINT8&#39;: &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;ATTACH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;DATETIME64&#39;: &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &#39;DICTIONARY&#39;: &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &#39;ENUM&#39;: &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &#39;ENUM8&#39;: &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &#39;ENUM16&#39;: &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &#39;FINAL&#39;: &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &#39;FIXEDSTRING&#39;: &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &#39;FLOAT32&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT64&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;GLOBAL&#39;: &lt;TokenType.GLOBAL: &#39;GLOBAL&#39;&gt;, &#39;INT16&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT256&#39;: &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &#39;INT32&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT64&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;LOWCARDINALITY&#39;: &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &#39;NESTED&#39;: &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &#39;TUPLE&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;UINT128&#39;: &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &#39;UINT16&#39;: &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &#39;UINT256&#39;: &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &#39;UINT32&#39;: &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &#39;UINT64&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;UINT8&#39;: &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;}</span>
</div>
@@ -1550,232 +1673,244 @@
</div>
<a class="headerlink" href="#ClickHouse.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Parser-61"><a href="#ClickHouse.Parser-61"><span class="linenos"> 61</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-62"><a href="#ClickHouse.Parser-62"><span class="linenos"> 62</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-63"><a href="#ClickHouse.Parser-63"><span class="linenos"> 63</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-64"><a href="#ClickHouse.Parser-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-65"><a href="#ClickHouse.Parser-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-66"><a href="#ClickHouse.Parser-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-67"><a href="#ClickHouse.Parser-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-68"><a href="#ClickHouse.Parser-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
-</span><span id="ClickHouse.Parser-69"><a href="#ClickHouse.Parser-69"><span class="linenos"> 69</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-70"><a href="#ClickHouse.Parser-70"><span class="linenos"> 70</span></a>
-</span><span id="ClickHouse.Parser-71"><a href="#ClickHouse.Parser-71"><span class="linenos"> 71</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
-</span><span id="ClickHouse.Parser-72"><a href="#ClickHouse.Parser-72"><span class="linenos"> 72</span></a>
-</span><span id="ClickHouse.Parser-73"><a href="#ClickHouse.Parser-73"><span class="linenos"> 73</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-74"><a href="#ClickHouse.Parser-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="ClickHouse.Parser-75"><a href="#ClickHouse.Parser-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_quantile</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-76"><a href="#ClickHouse.Parser-76"><span class="linenos"> 76</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-77"><a href="#ClickHouse.Parser-77"><span class="linenos"> 77</span></a>
-</span><span id="ClickHouse.Parser-78"><a href="#ClickHouse.Parser-78"><span class="linenos"> 78</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-79"><a href="#ClickHouse.Parser-79"><span class="linenos"> 79</span></a>
-</span><span id="ClickHouse.Parser-80"><a href="#ClickHouse.Parser-80"><span class="linenos"> 80</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-81"><a href="#ClickHouse.Parser-81"><span class="linenos"> 81</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-82"><a href="#ClickHouse.Parser-82"><span class="linenos"> 82</span></a>
-</span><span id="ClickHouse.Parser-83"><a href="#ClickHouse.Parser-83"><span class="linenos"> 83</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-84"><a href="#ClickHouse.Parser-84"><span class="linenos"> 84</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-85"><a href="#ClickHouse.Parser-85"><span class="linenos"> 85</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-86"><a href="#ClickHouse.Parser-86"><span class="linenos"> 86</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="ClickHouse.Parser-87"><a href="#ClickHouse.Parser-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-88"><a href="#ClickHouse.Parser-88"><span class="linenos"> 88</span></a>
-</span><span id="ClickHouse.Parser-89"><a href="#ClickHouse.Parser-89"><span class="linenos"> 89</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
-</span><span id="ClickHouse.Parser-90"><a href="#ClickHouse.Parser-90"><span class="linenos"> 90</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
-</span><span id="ClickHouse.Parser-91"><a href="#ClickHouse.Parser-91"><span class="linenos"> 91</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-92"><a href="#ClickHouse.Parser-92"><span class="linenos"> 92</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-93"><a href="#ClickHouse.Parser-93"><span class="linenos"> 93</span></a>
-</span><span id="ClickHouse.Parser-94"><a href="#ClickHouse.Parser-94"><span class="linenos"> 94</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-95"><a href="#ClickHouse.Parser-95"><span class="linenos"> 95</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-96"><a href="#ClickHouse.Parser-96"><span class="linenos"> 96</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-97"><a href="#ClickHouse.Parser-97"><span class="linenos"> 97</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-98"><a href="#ClickHouse.Parser-98"><span class="linenos"> 98</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-99"><a href="#ClickHouse.Parser-99"><span class="linenos"> 99</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-100"><a href="#ClickHouse.Parser-100"><span class="linenos">100</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-101"><a href="#ClickHouse.Parser-101"><span class="linenos">101</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Parser-67"><a href="#ClickHouse.Parser-67"><span class="linenos"> 67</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-68"><a href="#ClickHouse.Parser-68"><span class="linenos"> 68</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Parser-69"><a href="#ClickHouse.Parser-69"><span class="linenos"> 69</span></a>
+</span><span id="ClickHouse.Parser-70"><a href="#ClickHouse.Parser-70"><span class="linenos"> 70</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-71"><a href="#ClickHouse.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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-72"><a href="#ClickHouse.Parser-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-73"><a href="#ClickHouse.Parser-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-74"><a href="#ClickHouse.Parser-74"><span class="linenos"> 74</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-75"><a href="#ClickHouse.Parser-75"><span class="linenos"> 75</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-76"><a href="#ClickHouse.Parser-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-77"><a href="#ClickHouse.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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-78"><a href="#ClickHouse.Parser-78"><span class="linenos"> 78</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-79"><a href="#ClickHouse.Parser-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-80"><a href="#ClickHouse.Parser-80"><span class="linenos"> 80</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-81"><a href="#ClickHouse.Parser-81"><span class="linenos"> 81</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-82"><a href="#ClickHouse.Parser-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-83"><a href="#ClickHouse.Parser-83"><span class="linenos"> 83</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-84"><a href="#ClickHouse.Parser-84"><span class="linenos"> 84</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-85"><a href="#ClickHouse.Parser-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-86"><a href="#ClickHouse.Parser-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-87"><a href="#ClickHouse.Parser-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-88"><a href="#ClickHouse.Parser-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
+</span><span id="ClickHouse.Parser-89"><a href="#ClickHouse.Parser-89"><span class="linenos"> 89</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-90"><a href="#ClickHouse.Parser-90"><span class="linenos"> 90</span></a>
+</span><span id="ClickHouse.Parser-91"><a href="#ClickHouse.Parser-91"><span class="linenos"> 91</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
+</span><span id="ClickHouse.Parser-92"><a href="#ClickHouse.Parser-92"><span class="linenos"> 92</span></a>
+</span><span id="ClickHouse.Parser-93"><a href="#ClickHouse.Parser-93"><span class="linenos"> 93</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-94"><a href="#ClickHouse.Parser-94"><span class="linenos"> 94</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-95"><a href="#ClickHouse.Parser-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_quantile</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-96"><a href="#ClickHouse.Parser-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-97"><a href="#ClickHouse.Parser-97"><span class="linenos"> 97</span></a>
+</span><span id="ClickHouse.Parser-98"><a href="#ClickHouse.Parser-98"><span class="linenos"> 98</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-99"><a href="#ClickHouse.Parser-99"><span class="linenos"> 99</span></a>
+</span><span id="ClickHouse.Parser-100"><a href="#ClickHouse.Parser-100"><span class="linenos">100</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-101"><a href="#ClickHouse.Parser-101"><span class="linenos">101</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-102"><a href="#ClickHouse.Parser-102"><span class="linenos">102</span></a>
-</span><span id="ClickHouse.Parser-103"><a href="#ClickHouse.Parser-103"><span class="linenos">103</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-104"><a href="#ClickHouse.Parser-104"><span class="linenos">104</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-105"><a href="#ClickHouse.Parser-105"><span class="linenos">105</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-106"><a href="#ClickHouse.Parser-106"><span class="linenos">106</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-107"><a href="#ClickHouse.Parser-107"><span class="linenos">107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-108"><a href="#ClickHouse.Parser-108"><span class="linenos">108</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-109"><a href="#ClickHouse.Parser-109"><span class="linenos">109</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-110"><a href="#ClickHouse.Parser-110"><span class="linenos">110</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-111"><a href="#ClickHouse.Parser-111"><span class="linenos">111</span></a>
-</span><span id="ClickHouse.Parser-112"><a href="#ClickHouse.Parser-112"><span class="linenos">112</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse.Parser-103"><a href="#ClickHouse.Parser-103"><span class="linenos">103</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-104"><a href="#ClickHouse.Parser-104"><span class="linenos">104</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-105"><a href="#ClickHouse.Parser-105"><span class="linenos">105</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-106"><a href="#ClickHouse.Parser-106"><span class="linenos">106</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="ClickHouse.Parser-107"><a href="#ClickHouse.Parser-107"><span class="linenos">107</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-108"><a href="#ClickHouse.Parser-108"><span class="linenos">108</span></a>
+</span><span id="ClickHouse.Parser-109"><a href="#ClickHouse.Parser-109"><span class="linenos">109</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
+</span><span id="ClickHouse.Parser-110"><a href="#ClickHouse.Parser-110"><span class="linenos">110</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
+</span><span id="ClickHouse.Parser-111"><a href="#ClickHouse.Parser-111"><span class="linenos">111</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-112"><a href="#ClickHouse.Parser-112"><span class="linenos">112</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-113"><a href="#ClickHouse.Parser-113"><span class="linenos">113</span></a>
-</span><span id="ClickHouse.Parser-114"><a href="#ClickHouse.Parser-114"><span class="linenos">114</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-115"><a href="#ClickHouse.Parser-115"><span class="linenos">115</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-116"><a href="#ClickHouse.Parser-116"><span class="linenos">116</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-117"><a href="#ClickHouse.Parser-117"><span class="linenos">117</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-118"><a href="#ClickHouse.Parser-118"><span class="linenos">118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">),</span>
-</span><span id="ClickHouse.Parser-119"><a href="#ClickHouse.Parser-119"><span class="linenos">119</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Parser-120"><a href="#ClickHouse.Parser-120"><span class="linenos">120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="ClickHouse.Parser-114"><a href="#ClickHouse.Parser-114"><span class="linenos">114</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-115"><a href="#ClickHouse.Parser-115"><span class="linenos">115</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-116"><a href="#ClickHouse.Parser-116"><span class="linenos">116</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-117"><a href="#ClickHouse.Parser-117"><span class="linenos">117</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-118"><a href="#ClickHouse.Parser-118"><span class="linenos">118</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-119"><a href="#ClickHouse.Parser-119"><span class="linenos">119</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-120"><a href="#ClickHouse.Parser-120"><span class="linenos">120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-121"><a href="#ClickHouse.Parser-121"><span class="linenos">121</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Parser-122"><a href="#ClickHouse.Parser-122"><span class="linenos">122</span></a>
-</span><span id="ClickHouse.Parser-123"><a href="#ClickHouse.Parser-123"><span class="linenos">123</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-124"><a href="#ClickHouse.Parser-124"><span class="linenos">124</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-125"><a href="#ClickHouse.Parser-125"><span class="linenos">125</span></a>
-</span><span id="ClickHouse.Parser-126"><a href="#ClickHouse.Parser-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-127"><a href="#ClickHouse.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">expression</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-128"><a href="#ClickHouse.Parser-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-129"><a href="#ClickHouse.Parser-129"><span class="linenos">129</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-130"><a href="#ClickHouse.Parser-130"><span class="linenos">130</span></a> <span class="n">true</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-131"><a href="#ClickHouse.Parser-131"><span class="linenos">131</span></a> <span class="n">false</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-132"><a href="#ClickHouse.Parser-132"><span class="linenos">132</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-123"><a href="#ClickHouse.Parser-123"><span class="linenos">123</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-124"><a href="#ClickHouse.Parser-124"><span class="linenos">124</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-125"><a href="#ClickHouse.Parser-125"><span class="linenos">125</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-126"><a href="#ClickHouse.Parser-126"><span class="linenos">126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-127"><a href="#ClickHouse.Parser-127"><span class="linenos">127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-128"><a href="#ClickHouse.Parser-128"><span class="linenos">128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-129"><a href="#ClickHouse.Parser-129"><span class="linenos">129</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-130"><a href="#ClickHouse.Parser-130"><span class="linenos">130</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-131"><a href="#ClickHouse.Parser-131"><span class="linenos">131</span></a>
+</span><span id="ClickHouse.Parser-132"><a href="#ClickHouse.Parser-132"><span class="linenos">132</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse.Parser-133"><a href="#ClickHouse.Parser-133"><span class="linenos">133</span></a>
-</span><span id="ClickHouse.Parser-134"><a href="#ClickHouse.Parser-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse.Parser-135"><a href="#ClickHouse.Parser-135"><span class="linenos">135</span></a>
-</span><span id="ClickHouse.Parser-136"><a href="#ClickHouse.Parser-136"><span class="linenos">136</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-137"><a href="#ClickHouse.Parser-137"><span class="linenos">137</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="ClickHouse.Parser-138"><a href="#ClickHouse.Parser-138"><span class="linenos">138</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
-</span><span id="ClickHouse.Parser-139"><a href="#ClickHouse.Parser-139"><span class="linenos">139</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
-</span><span id="ClickHouse.Parser-140"><a href="#ClickHouse.Parser-140"><span class="linenos">140</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ClickHouse.Parser-141"><a href="#ClickHouse.Parser-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-142"><a href="#ClickHouse.Parser-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse.Parser-143"><a href="#ClickHouse.Parser-143"><span class="linenos">143</span></a>
-</span><span id="ClickHouse.Parser-144"><a href="#ClickHouse.Parser-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-145"><a href="#ClickHouse.Parser-145"><span class="linenos">145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-146"><a href="#ClickHouse.Parser-146"><span class="linenos">146</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-147"><a href="#ClickHouse.Parser-147"><span class="linenos">147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
-</span><span id="ClickHouse.Parser-148"><a href="#ClickHouse.Parser-148"><span class="linenos">148</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-149"><a href="#ClickHouse.Parser-149"><span class="linenos">149</span></a>
-</span><span id="ClickHouse.Parser-150"><a href="#ClickHouse.Parser-150"><span class="linenos">150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-151"><a href="#ClickHouse.Parser-151"><span class="linenos">151</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-152"><a href="#ClickHouse.Parser-152"><span class="linenos">152</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-153"><a href="#ClickHouse.Parser-153"><span class="linenos">153</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting }&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-154"><a href="#ClickHouse.Parser-154"><span class="linenos">154</span></a>
-</span><span id="ClickHouse.Parser-155"><a href="#ClickHouse.Parser-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-156"><a href="#ClickHouse.Parser-156"><span class="linenos">156</span></a>
-</span><span id="ClickHouse.Parser-157"><a href="#ClickHouse.Parser-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-158"><a href="#ClickHouse.Parser-158"><span class="linenos">158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-159"><a href="#ClickHouse.Parser-159"><span class="linenos">159</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-160"><a href="#ClickHouse.Parser-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse.Parser-161"><a href="#ClickHouse.Parser-161"><span class="linenos">161</span></a>
-</span><span id="ClickHouse.Parser-162"><a href="#ClickHouse.Parser-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-163"><a href="#ClickHouse.Parser-163"><span class="linenos">163</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-164"><a href="#ClickHouse.Parser-164"><span class="linenos">164</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-165"><a href="#ClickHouse.Parser-165"><span class="linenos">165</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-166"><a href="#ClickHouse.Parser-166"><span class="linenos">166</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-167"><a href="#ClickHouse.Parser-167"><span class="linenos">167</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-168"><a href="#ClickHouse.Parser-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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-169"><a href="#ClickHouse.Parser-169"><span class="linenos">169</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-170"><a href="#ClickHouse.Parser-170"><span class="linenos">170</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span>
-</span><span id="ClickHouse.Parser-171"><a href="#ClickHouse.Parser-171"><span class="linenos">171</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-172"><a href="#ClickHouse.Parser-172"><span class="linenos">172</span></a>
-</span><span id="ClickHouse.Parser-173"><a href="#ClickHouse.Parser-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-174"><a href="#ClickHouse.Parser-174"><span class="linenos">174</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-175"><a href="#ClickHouse.Parser-175"><span class="linenos">175</span></a>
-</span><span id="ClickHouse.Parser-176"><a href="#ClickHouse.Parser-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse.Parser-177"><a href="#ClickHouse.Parser-177"><span class="linenos">177</span></a>
-</span><span id="ClickHouse.Parser-178"><a href="#ClickHouse.Parser-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-179"><a href="#ClickHouse.Parser-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-180"><a href="#ClickHouse.Parser-180"><span class="linenos">180</span></a>
-</span><span id="ClickHouse.Parser-181"><a href="#ClickHouse.Parser-181"><span class="linenos">181</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
-</span><span id="ClickHouse.Parser-182"><a href="#ClickHouse.Parser-182"><span class="linenos">182</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-183"><a href="#ClickHouse.Parser-183"><span class="linenos">183</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse.Parser-184"><a href="#ClickHouse.Parser-184"><span class="linenos">184</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-185"><a href="#ClickHouse.Parser-185"><span class="linenos">185</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
-</span><span id="ClickHouse.Parser-186"><a href="#ClickHouse.Parser-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-187"><a href="#ClickHouse.Parser-187"><span class="linenos">187</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-188"><a href="#ClickHouse.Parser-188"><span class="linenos">188</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
-</span><span id="ClickHouse.Parser-189"><a href="#ClickHouse.Parser-189"><span class="linenos">189</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-190"><a href="#ClickHouse.Parser-190"><span class="linenos">190</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-191"><a href="#ClickHouse.Parser-191"><span class="linenos">191</span></a>
-</span><span id="ClickHouse.Parser-192"><a href="#ClickHouse.Parser-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-193"><a href="#ClickHouse.Parser-193"><span class="linenos">193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-194"><a href="#ClickHouse.Parser-194"><span class="linenos">194</span></a>
-</span><span id="ClickHouse.Parser-195"><a href="#ClickHouse.Parser-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-196"><a href="#ClickHouse.Parser-196"><span class="linenos">196</span></a>
-</span><span id="ClickHouse.Parser-197"><a href="#ClickHouse.Parser-197"><span class="linenos">197</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-198"><a href="#ClickHouse.Parser-198"><span class="linenos">198</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-199"><a href="#ClickHouse.Parser-199"><span class="linenos">199</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
-</span><span id="ClickHouse.Parser-200"><a href="#ClickHouse.Parser-200"><span class="linenos">200</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-201"><a href="#ClickHouse.Parser-201"><span class="linenos">201</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-202"><a href="#ClickHouse.Parser-202"><span class="linenos">202</span></a>
-</span><span id="ClickHouse.Parser-203"><a href="#ClickHouse.Parser-203"><span class="linenos">203</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-204"><a href="#ClickHouse.Parser-204"><span class="linenos">204</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-205"><a href="#ClickHouse.Parser-205"><span class="linenos">205</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-206"><a href="#ClickHouse.Parser-206"><span class="linenos">206</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
-</span><span id="ClickHouse.Parser-207"><a href="#ClickHouse.Parser-207"><span class="linenos">207</span></a>
-</span><span id="ClickHouse.Parser-208"><a href="#ClickHouse.Parser-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-209"><a href="#ClickHouse.Parser-209"><span class="linenos">209</span></a> <span class="n">is_global</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-210"><a href="#ClickHouse.Parser-210"><span class="linenos">210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-211"><a href="#ClickHouse.Parser-211"><span class="linenos">211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-212"><a href="#ClickHouse.Parser-212"><span class="linenos">212</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-213"><a href="#ClickHouse.Parser-213"><span class="linenos">213</span></a>
-</span><span id="ClickHouse.Parser-214"><a href="#ClickHouse.Parser-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-215"><a href="#ClickHouse.Parser-215"><span class="linenos">215</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Parser-216"><a href="#ClickHouse.Parser-216"><span class="linenos">216</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-217"><a href="#ClickHouse.Parser-217"><span class="linenos">217</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-218"><a href="#ClickHouse.Parser-218"><span class="linenos">218</span></a>
-</span><span id="ClickHouse.Parser-219"><a href="#ClickHouse.Parser-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-220"><a href="#ClickHouse.Parser-220"><span class="linenos">220</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
-</span><span id="ClickHouse.Parser-221"><a href="#ClickHouse.Parser-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="ClickHouse.Parser-134"><a href="#ClickHouse.Parser-134"><span class="linenos">134</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-135"><a href="#ClickHouse.Parser-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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-136"><a href="#ClickHouse.Parser-136"><span class="linenos">136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-137"><a href="#ClickHouse.Parser-137"><span class="linenos">137</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-138"><a href="#ClickHouse.Parser-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">),</span>
+</span><span id="ClickHouse.Parser-139"><a href="#ClickHouse.Parser-139"><span class="linenos">139</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-140"><a href="#ClickHouse.Parser-140"><span class="linenos">140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="ClickHouse.Parser-141"><a href="#ClickHouse.Parser-141"><span class="linenos">141</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-142"><a href="#ClickHouse.Parser-142"><span class="linenos">142</span></a>
+</span><span id="ClickHouse.Parser-143"><a href="#ClickHouse.Parser-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-144"><a href="#ClickHouse.Parser-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-145"><a href="#ClickHouse.Parser-145"><span class="linenos">145</span></a>
+</span><span id="ClickHouse.Parser-146"><a href="#ClickHouse.Parser-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-147"><a href="#ClickHouse.Parser-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-148"><a href="#ClickHouse.Parser-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-149"><a href="#ClickHouse.Parser-149"><span class="linenos">149</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-150"><a href="#ClickHouse.Parser-150"><span class="linenos">150</span></a> <span class="n">true</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-151"><a href="#ClickHouse.Parser-151"><span class="linenos">151</span></a> <span class="n">false</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-152"><a href="#ClickHouse.Parser-152"><span class="linenos">152</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-153"><a href="#ClickHouse.Parser-153"><span class="linenos">153</span></a>
+</span><span id="ClickHouse.Parser-154"><a href="#ClickHouse.Parser-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse.Parser-155"><a href="#ClickHouse.Parser-155"><span class="linenos">155</span></a>
+</span><span id="ClickHouse.Parser-156"><a href="#ClickHouse.Parser-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-157"><a href="#ClickHouse.Parser-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="ClickHouse.Parser-158"><a href="#ClickHouse.Parser-158"><span class="linenos">158</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
+</span><span id="ClickHouse.Parser-159"><a href="#ClickHouse.Parser-159"><span class="linenos">159</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
+</span><span id="ClickHouse.Parser-160"><a href="#ClickHouse.Parser-160"><span class="linenos">160</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ClickHouse.Parser-161"><a href="#ClickHouse.Parser-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-162"><a href="#ClickHouse.Parser-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-163"><a href="#ClickHouse.Parser-163"><span class="linenos">163</span></a>
+</span><span id="ClickHouse.Parser-164"><a href="#ClickHouse.Parser-164"><span class="linenos">164</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-165"><a href="#ClickHouse.Parser-165"><span class="linenos">165</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-166"><a href="#ClickHouse.Parser-166"><span class="linenos">166</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-167"><a href="#ClickHouse.Parser-167"><span class="linenos">167</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
+</span><span id="ClickHouse.Parser-168"><a href="#ClickHouse.Parser-168"><span class="linenos">168</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-169"><a href="#ClickHouse.Parser-169"><span class="linenos">169</span></a>
+</span><span id="ClickHouse.Parser-170"><a href="#ClickHouse.Parser-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-171"><a href="#ClickHouse.Parser-171"><span class="linenos">171</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-172"><a href="#ClickHouse.Parser-172"><span class="linenos">172</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-173"><a href="#ClickHouse.Parser-173"><span class="linenos">173</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting }&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-174"><a href="#ClickHouse.Parser-174"><span class="linenos">174</span></a>
+</span><span id="ClickHouse.Parser-175"><a href="#ClickHouse.Parser-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-176"><a href="#ClickHouse.Parser-176"><span class="linenos">176</span></a>
+</span><span id="ClickHouse.Parser-177"><a href="#ClickHouse.Parser-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-178"><a href="#ClickHouse.Parser-178"><span class="linenos">178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-179"><a href="#ClickHouse.Parser-179"><span class="linenos">179</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-180"><a href="#ClickHouse.Parser-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse.Parser-181"><a href="#ClickHouse.Parser-181"><span class="linenos">181</span></a>
+</span><span id="ClickHouse.Parser-182"><a href="#ClickHouse.Parser-182"><span class="linenos">182</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-183"><a href="#ClickHouse.Parser-183"><span class="linenos">183</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-184"><a href="#ClickHouse.Parser-184"><span class="linenos">184</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-185"><a href="#ClickHouse.Parser-185"><span class="linenos">185</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-186"><a href="#ClickHouse.Parser-186"><span class="linenos">186</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-187"><a href="#ClickHouse.Parser-187"><span class="linenos">187</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-188"><a href="#ClickHouse.Parser-188"><span class="linenos">188</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-189"><a href="#ClickHouse.Parser-189"><span class="linenos">189</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-190"><a href="#ClickHouse.Parser-190"><span class="linenos">190</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span>
+</span><span id="ClickHouse.Parser-191"><a href="#ClickHouse.Parser-191"><span class="linenos">191</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-192"><a href="#ClickHouse.Parser-192"><span class="linenos">192</span></a>
+</span><span id="ClickHouse.Parser-193"><a href="#ClickHouse.Parser-193"><span class="linenos">193</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-194"><a href="#ClickHouse.Parser-194"><span class="linenos">194</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-195"><a href="#ClickHouse.Parser-195"><span class="linenos">195</span></a>
+</span><span id="ClickHouse.Parser-196"><a href="#ClickHouse.Parser-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse.Parser-197"><a href="#ClickHouse.Parser-197"><span class="linenos">197</span></a>
+</span><span id="ClickHouse.Parser-198"><a href="#ClickHouse.Parser-198"><span class="linenos">198</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-199"><a href="#ClickHouse.Parser-199"><span class="linenos">199</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-200"><a href="#ClickHouse.Parser-200"><span class="linenos">200</span></a>
+</span><span id="ClickHouse.Parser-201"><a href="#ClickHouse.Parser-201"><span class="linenos">201</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
+</span><span id="ClickHouse.Parser-202"><a href="#ClickHouse.Parser-202"><span class="linenos">202</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-203"><a href="#ClickHouse.Parser-203"><span class="linenos">203</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse.Parser-204"><a href="#ClickHouse.Parser-204"><span class="linenos">204</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-205"><a href="#ClickHouse.Parser-205"><span class="linenos">205</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
+</span><span id="ClickHouse.Parser-206"><a href="#ClickHouse.Parser-206"><span class="linenos">206</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-207"><a href="#ClickHouse.Parser-207"><span class="linenos">207</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-208"><a href="#ClickHouse.Parser-208"><span class="linenos">208</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
+</span><span id="ClickHouse.Parser-209"><a href="#ClickHouse.Parser-209"><span class="linenos">209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-210"><a href="#ClickHouse.Parser-210"><span class="linenos">210</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-211"><a href="#ClickHouse.Parser-211"><span class="linenos">211</span></a>
+</span><span id="ClickHouse.Parser-212"><a href="#ClickHouse.Parser-212"><span class="linenos">212</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-213"><a href="#ClickHouse.Parser-213"><span class="linenos">213</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-214"><a href="#ClickHouse.Parser-214"><span class="linenos">214</span></a>
+</span><span id="ClickHouse.Parser-215"><a href="#ClickHouse.Parser-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-216"><a href="#ClickHouse.Parser-216"><span class="linenos">216</span></a>
+</span><span id="ClickHouse.Parser-217"><a href="#ClickHouse.Parser-217"><span class="linenos">217</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-218"><a href="#ClickHouse.Parser-218"><span class="linenos">218</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-219"><a href="#ClickHouse.Parser-219"><span class="linenos">219</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
+</span><span id="ClickHouse.Parser-220"><a href="#ClickHouse.Parser-220"><span class="linenos">220</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-221"><a href="#ClickHouse.Parser-221"><span class="linenos">221</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="ClickHouse.Parser-222"><a href="#ClickHouse.Parser-222"><span class="linenos">222</span></a>
-</span><span id="ClickHouse.Parser-223"><a href="#ClickHouse.Parser-223"><span class="linenos">223</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-224"><a href="#ClickHouse.Parser-224"><span class="linenos">224</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-225"><a href="#ClickHouse.Parser-225"><span class="linenos">225</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-226"><a href="#ClickHouse.Parser-226"><span class="linenos">226</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-227"><a href="#ClickHouse.Parser-227"><span class="linenos">227</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-228"><a href="#ClickHouse.Parser-228"><span class="linenos">228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-229"><a href="#ClickHouse.Parser-229"><span class="linenos">229</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-230"><a href="#ClickHouse.Parser-230"><span class="linenos">230</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="ClickHouse.Parser-231"><a href="#ClickHouse.Parser-231"><span class="linenos">231</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-232"><a href="#ClickHouse.Parser-232"><span class="linenos">232</span></a>
-</span><span id="ClickHouse.Parser-233"><a href="#ClickHouse.Parser-233"><span class="linenos">233</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-234"><a href="#ClickHouse.Parser-234"><span class="linenos">234</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-235"><a href="#ClickHouse.Parser-235"><span class="linenos">235</span></a>
-</span><span id="ClickHouse.Parser-236"><a href="#ClickHouse.Parser-236"><span class="linenos">236</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-237"><a href="#ClickHouse.Parser-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-238"><a href="#ClickHouse.Parser-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-239"><a href="#ClickHouse.Parser-239"><span class="linenos">239</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-240"><a href="#ClickHouse.Parser-240"><span class="linenos">240</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-241"><a href="#ClickHouse.Parser-241"><span class="linenos">241</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-242"><a href="#ClickHouse.Parser-242"><span class="linenos">242</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-243"><a href="#ClickHouse.Parser-243"><span class="linenos">243</span></a>
-</span><span id="ClickHouse.Parser-244"><a href="#ClickHouse.Parser-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="ClickHouse.Parser-245"><a href="#ClickHouse.Parser-245"><span class="linenos">245</span></a>
-</span><span id="ClickHouse.Parser-246"><a href="#ClickHouse.Parser-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-247"><a href="#ClickHouse.Parser-247"><span class="linenos">247</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="ClickHouse.Parser-248"><a href="#ClickHouse.Parser-248"><span class="linenos">248</span></a> <span class="p">)</span> <span class="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="ClickHouse.Parser-249"><a href="#ClickHouse.Parser-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-250"><a href="#ClickHouse.Parser-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-251"><a href="#ClickHouse.Parser-251"><span class="linenos">251</span></a>
-</span><span id="ClickHouse.Parser-252"><a href="#ClickHouse.Parser-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-253"><a href="#ClickHouse.Parser-253"><span class="linenos">253</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-254"><a href="#ClickHouse.Parser-254"><span class="linenos">254</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-255"><a href="#ClickHouse.Parser-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">params</span>
-</span><span id="ClickHouse.Parser-256"><a href="#ClickHouse.Parser-256"><span class="linenos">256</span></a>
-</span><span id="ClickHouse.Parser-257"><a href="#ClickHouse.Parser-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse.Parser-258"><a href="#ClickHouse.Parser-258"><span class="linenos">258</span></a>
-</span><span id="ClickHouse.Parser-259"><a href="#ClickHouse.Parser-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-260"><a href="#ClickHouse.Parser-260"><span class="linenos">260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-261"><a href="#ClickHouse.Parser-261"><span class="linenos">261</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-262"><a href="#ClickHouse.Parser-262"><span class="linenos">262</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-263"><a href="#ClickHouse.Parser-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-264"><a href="#ClickHouse.Parser-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
+</span><span id="ClickHouse.Parser-223"><a href="#ClickHouse.Parser-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-224"><a href="#ClickHouse.Parser-224"><span class="linenos">224</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-225"><a href="#ClickHouse.Parser-225"><span class="linenos">225</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-226"><a href="#ClickHouse.Parser-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
+</span><span id="ClickHouse.Parser-227"><a href="#ClickHouse.Parser-227"><span class="linenos">227</span></a>
+</span><span id="ClickHouse.Parser-228"><a href="#ClickHouse.Parser-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-229"><a href="#ClickHouse.Parser-229"><span class="linenos">229</span></a> <span class="n">is_global</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-230"><a href="#ClickHouse.Parser-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-231"><a href="#ClickHouse.Parser-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-232"><a href="#ClickHouse.Parser-232"><span class="linenos">232</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-233"><a href="#ClickHouse.Parser-233"><span class="linenos">233</span></a>
+</span><span id="ClickHouse.Parser-234"><a href="#ClickHouse.Parser-234"><span class="linenos">234</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-235"><a href="#ClickHouse.Parser-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Parser-236"><a href="#ClickHouse.Parser-236"><span class="linenos">236</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-237"><a href="#ClickHouse.Parser-237"><span class="linenos">237</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-238"><a href="#ClickHouse.Parser-238"><span class="linenos">238</span></a>
+</span><span id="ClickHouse.Parser-239"><a href="#ClickHouse.Parser-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-240"><a href="#ClickHouse.Parser-240"><span class="linenos">240</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
+</span><span id="ClickHouse.Parser-241"><a href="#ClickHouse.Parser-241"><span class="linenos">241</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="ClickHouse.Parser-242"><a href="#ClickHouse.Parser-242"><span class="linenos">242</span></a>
+</span><span id="ClickHouse.Parser-243"><a href="#ClickHouse.Parser-243"><span class="linenos">243</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-244"><a href="#ClickHouse.Parser-244"><span class="linenos">244</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-245"><a href="#ClickHouse.Parser-245"><span class="linenos">245</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-246"><a href="#ClickHouse.Parser-246"><span class="linenos">246</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-247"><a href="#ClickHouse.Parser-247"><span class="linenos">247</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-248"><a href="#ClickHouse.Parser-248"><span class="linenos">248</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-249"><a href="#ClickHouse.Parser-249"><span class="linenos">249</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-250"><a href="#ClickHouse.Parser-250"><span class="linenos">250</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="ClickHouse.Parser-251"><a href="#ClickHouse.Parser-251"><span class="linenos">251</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-252"><a href="#ClickHouse.Parser-252"><span class="linenos">252</span></a>
+</span><span id="ClickHouse.Parser-253"><a href="#ClickHouse.Parser-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-254"><a href="#ClickHouse.Parser-254"><span class="linenos">254</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-255"><a href="#ClickHouse.Parser-255"><span class="linenos">255</span></a>
+</span><span id="ClickHouse.Parser-256"><a href="#ClickHouse.Parser-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-257"><a href="#ClickHouse.Parser-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-258"><a href="#ClickHouse.Parser-258"><span class="linenos">258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-259"><a href="#ClickHouse.Parser-259"><span class="linenos">259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-260"><a href="#ClickHouse.Parser-260"><span class="linenos">260</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-261"><a href="#ClickHouse.Parser-261"><span class="linenos">261</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-262"><a href="#ClickHouse.Parser-262"><span class="linenos">262</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-263"><a href="#ClickHouse.Parser-263"><span class="linenos">263</span></a>
+</span><span id="ClickHouse.Parser-264"><a href="#ClickHouse.Parser-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="ClickHouse.Parser-265"><a href="#ClickHouse.Parser-265"><span class="linenos">265</span></a>
-</span><span id="ClickHouse.Parser-266"><a href="#ClickHouse.Parser-266"><span class="linenos">266</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-267"><a href="#ClickHouse.Parser-267"><span class="linenos">267</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Parser-268"><a href="#ClickHouse.Parser-268"><span class="linenos">268</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="ClickHouse.Parser-269"><a href="#ClickHouse.Parser-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-270"><a href="#ClickHouse.Parser-270"><span class="linenos">270</span></a>
-</span><span id="ClickHouse.Parser-271"><a href="#ClickHouse.Parser-271"><span class="linenos">271</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-272"><a href="#ClickHouse.Parser-272"><span class="linenos">272</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Parser-273"><a href="#ClickHouse.Parser-273"><span class="linenos">273</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-274"><a href="#ClickHouse.Parser-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-275"><a href="#ClickHouse.Parser-275"><span class="linenos">275</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
-</span><span id="ClickHouse.Parser-276"><a href="#ClickHouse.Parser-276"><span class="linenos">276</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-277"><a href="#ClickHouse.Parser-277"><span class="linenos">277</span></a>
-</span><span id="ClickHouse.Parser-278"><a href="#ClickHouse.Parser-278"><span class="linenos">278</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-279"><a href="#ClickHouse.Parser-279"><span class="linenos">279</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse.Parser-280"><a href="#ClickHouse.Parser-280"><span class="linenos">280</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-281"><a href="#ClickHouse.Parser-281"><span class="linenos">281</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-282"><a href="#ClickHouse.Parser-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-283"><a href="#ClickHouse.Parser-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-284"><a href="#ClickHouse.Parser-284"><span class="linenos">284</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-285"><a href="#ClickHouse.Parser-285"><span class="linenos">285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-286"><a href="#ClickHouse.Parser-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-266"><a href="#ClickHouse.Parser-266"><span class="linenos">266</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-267"><a href="#ClickHouse.Parser-267"><span class="linenos">267</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-268"><a href="#ClickHouse.Parser-268"><span class="linenos">268</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="ClickHouse.Parser-269"><a href="#ClickHouse.Parser-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-270"><a href="#ClickHouse.Parser-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-271"><a href="#ClickHouse.Parser-271"><span class="linenos">271</span></a>
+</span><span id="ClickHouse.Parser-272"><a href="#ClickHouse.Parser-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-273"><a href="#ClickHouse.Parser-273"><span class="linenos">273</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-274"><a href="#ClickHouse.Parser-274"><span class="linenos">274</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-275"><a href="#ClickHouse.Parser-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="n">params</span>
+</span><span id="ClickHouse.Parser-276"><a href="#ClickHouse.Parser-276"><span class="linenos">276</span></a>
+</span><span id="ClickHouse.Parser-277"><a href="#ClickHouse.Parser-277"><span class="linenos">277</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-278"><a href="#ClickHouse.Parser-278"><span class="linenos">278</span></a>
+</span><span id="ClickHouse.Parser-279"><a href="#ClickHouse.Parser-279"><span class="linenos">279</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-280"><a href="#ClickHouse.Parser-280"><span class="linenos">280</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-281"><a href="#ClickHouse.Parser-281"><span class="linenos">281</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-282"><a href="#ClickHouse.Parser-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-283"><a href="#ClickHouse.Parser-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-284"><a href="#ClickHouse.Parser-284"><span class="linenos">284</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mf">0.5</span><span class="p">))</span>
+</span><span id="ClickHouse.Parser-285"><a href="#ClickHouse.Parser-285"><span class="linenos">285</span></a>
+</span><span id="ClickHouse.Parser-286"><a href="#ClickHouse.Parser-286"><span class="linenos">286</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-287"><a href="#ClickHouse.Parser-287"><span class="linenos">287</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-288"><a href="#ClickHouse.Parser-288"><span class="linenos">288</span></a>
+</span><span id="ClickHouse.Parser-289"><a href="#ClickHouse.Parser-289"><span class="linenos">289</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-290"><a href="#ClickHouse.Parser-290"><span class="linenos">290</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Parser-291"><a href="#ClickHouse.Parser-291"><span class="linenos">291</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-292"><a href="#ClickHouse.Parser-292"><span class="linenos">292</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-293"><a href="#ClickHouse.Parser-293"><span class="linenos">293</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
+</span><span id="ClickHouse.Parser-294"><a href="#ClickHouse.Parser-294"><span class="linenos">294</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-295"><a href="#ClickHouse.Parser-295"><span class="linenos">295</span></a>
+</span><span id="ClickHouse.Parser-296"><a href="#ClickHouse.Parser-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-297"><a href="#ClickHouse.Parser-297"><span class="linenos">297</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse.Parser-298"><a href="#ClickHouse.Parser-298"><span class="linenos">298</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-299"><a href="#ClickHouse.Parser-299"><span class="linenos">299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-300"><a href="#ClickHouse.Parser-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-301"><a href="#ClickHouse.Parser-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-302"><a href="#ClickHouse.Parser-302"><span class="linenos">302</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-303"><a href="#ClickHouse.Parser-303"><span class="linenos">303</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-304"><a href="#ClickHouse.Parser-304"><span class="linenos">304</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1796,11 +1931,23 @@ Default: 3</li>
</div>
+ <div id="ClickHouse.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#ClickHouse.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="ClickHouse.Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="ClickHouse.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;MATCH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;UNIQ&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;DATEADD&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;MATCH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;UNIQ&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;}</span>
</div>
@@ -1812,7 +1959,7 @@ Default: 3</li>
<div id="ClickHouse.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS_WITH_ALIASED_ARGS</span> =
-<span class="default_value">{&#39;STRUCT&#39;, &#39;TUPLE&#39;}</span>
+<span class="default_value">{&#39;TUPLE&#39;, &#39;STRUCT&#39;}</span>
</div>
@@ -1851,7 +1998,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RANGE_PARSERS</span> =
<input id="ClickHouse.Parser.RANGE_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.GLOBAL: &#39;GLOBAL&#39;&gt;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOBAL: &#39;GLOBAL&#39;&gt;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1877,7 +2024,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">JOIN_KINDS</span> =
<input id="ClickHouse.Parser.JOIN_KINDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;}</span>
</div>
@@ -1890,7 +2037,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="ClickHouse.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -1915,7 +2062,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">QUERY_MODIFIER_PARSERS</span> =
<input id="ClickHouse.Parser.QUERY_MODIFIER_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.QUERY_MODIFIER_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USING: &#39;USING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.QUERY_MODIFIER_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USING: &#39;USING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1924,6 +2071,18 @@ Default: 3</li>
</div>
+ <div id="ClickHouse.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#ClickHouse.Tokenizer">sqlglot.dialects.clickhouse.ClickHouse.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#ClickHouse.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="ClickHouse.Parser.STRICT_STRING_CONCAT" class="classattr">
<div class="attr variable">
<span class="name">STRICT_STRING_CONCAT</span> =
@@ -2014,6 +2173,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="ClickHouse.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="ClickHouse.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="ClickHouse.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="ClickHouse.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="ClickHouse.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="ClickHouse.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -2033,6 +2193,7 @@ Default: 3</li>
<dd id="ClickHouse.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="ClickHouse.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="ClickHouse.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="ClickHouse.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="ClickHouse.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="ClickHouse.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="ClickHouse.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -2048,6 +2209,7 @@ Default: 3</li>
<dd id="ClickHouse.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
<dd id="ClickHouse.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="ClickHouse.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="ClickHouse.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="ClickHouse.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
<dd id="ClickHouse.Parser.SHOW_PARSERS" class="variable"><a href="../parser.html#Parser.SHOW_PARSERS">SHOW_PARSERS</a></dd>
<dd id="ClickHouse.Parser.TYPE_LITERAL_PARSERS" class="variable"><a href="../parser.html#Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a></dd>
@@ -2063,11 +2225,13 @@ Default: 3</li>
<dd id="ClickHouse.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="ClickHouse.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="ClickHouse.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="ClickHouse.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="ClickHouse.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="ClickHouse.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="ClickHouse.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="ClickHouse.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="ClickHouse.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="ClickHouse.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="ClickHouse.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="ClickHouse.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="ClickHouse.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -2101,123 +2265,158 @@ Default: 3</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator-288"><a href="#ClickHouse.Generator-288"><span class="linenos">288</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-289"><a href="#ClickHouse.Generator-289"><span class="linenos">289</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-290"><a href="#ClickHouse.Generator-290"><span class="linenos">290</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-291"><a href="#ClickHouse.Generator-291"><span class="linenos">291</span></a>
-</span><span id="ClickHouse.Generator-292"><a href="#ClickHouse.Generator-292"><span class="linenos">292</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-293"><a href="#ClickHouse.Generator-293"><span class="linenos">293</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-294"><a href="#ClickHouse.Generator-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-295"><a href="#ClickHouse.Generator-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-296"><a href="#ClickHouse.Generator-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-297"><a href="#ClickHouse.Generator-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-298"><a href="#ClickHouse.Generator-298"><span class="linenos">298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-299"><a href="#ClickHouse.Generator-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-300"><a href="#ClickHouse.Generator-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-301"><a href="#ClickHouse.Generator-301"><span class="linenos">301</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-302"><a href="#ClickHouse.Generator-302"><span class="linenos">302</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-303"><a href="#ClickHouse.Generator-303"><span class="linenos">303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-304"><a href="#ClickHouse.Generator-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-305"><a href="#ClickHouse.Generator-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-306"><a href="#ClickHouse.Generator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-307"><a href="#ClickHouse.Generator-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-308"><a href="#ClickHouse.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">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-309"><a href="#ClickHouse.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">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-310"><a href="#ClickHouse.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">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-311"><a href="#ClickHouse.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">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-312"><a href="#ClickHouse.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">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-313"><a href="#ClickHouse.Generator-313"><span class="linenos">313</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-314"><a href="#ClickHouse.Generator-314"><span class="linenos">314</span></a>
-</span><span id="ClickHouse.Generator-315"><a href="#ClickHouse.Generator-315"><span class="linenos">315</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-316"><a href="#ClickHouse.Generator-316"><span class="linenos">316</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-317"><a href="#ClickHouse.Generator-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-318"><a href="#ClickHouse.Generator-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-319"><a href="#ClickHouse.Generator-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-320"><a href="#ClickHouse.Generator-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-321"><a href="#ClickHouse.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-322"><a href="#ClickHouse.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse.Generator-323"><a href="#ClickHouse.Generator-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-324"><a href="#ClickHouse.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-325"><a href="#ClickHouse.Generator-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">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;quantile&quot;</span><span class="p">))</span>
-</span><span id="ClickHouse.Generator-326"><a href="#ClickHouse.Generator-326"><span class="linenos">326</span></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-327"><a href="#ClickHouse.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-328"><a href="#ClickHouse.Generator-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-329"><a href="#ClickHouse.Generator-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse.Generator-330"><a href="#ClickHouse.Generator-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;xor&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-331"><a href="#ClickHouse.Generator-331"><span class="linenos">331</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-332"><a href="#ClickHouse.Generator-332"><span class="linenos">332</span></a>
-</span><span id="ClickHouse.Generator-333"><a href="#ClickHouse.Generator-333"><span class="linenos">333</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-334"><a href="#ClickHouse.Generator-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-335"><a href="#ClickHouse.Generator-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-336"><a href="#ClickHouse.Generator-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-337"><a href="#ClickHouse.Generator-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-338"><a href="#ClickHouse.Generator-338"><span class="linenos">338</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-339"><a href="#ClickHouse.Generator-339"><span class="linenos">339</span></a>
-</span><span id="ClickHouse.Generator-340"><a href="#ClickHouse.Generator-340"><span class="linenos">340</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-341"><a href="#ClickHouse.Generator-341"><span class="linenos">341</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-342"><a href="#ClickHouse.Generator-342"><span class="linenos">342</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse.Generator-343"><a href="#ClickHouse.Generator-343"><span class="linenos">343</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse.Generator-344"><a href="#ClickHouse.Generator-344"><span class="linenos">344</span></a>
-</span><span id="ClickHouse.Generator-345"><a href="#ClickHouse.Generator-345"><span class="linenos">345</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
-</span><span id="ClickHouse.Generator-346"><a href="#ClickHouse.Generator-346"><span class="linenos">346</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
-</span><span id="ClickHouse.Generator-347"><a href="#ClickHouse.Generator-347"><span class="linenos">347</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-348"><a href="#ClickHouse.Generator-348"><span class="linenos">348</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-349"><a href="#ClickHouse.Generator-349"><span class="linenos">349</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-350"><a href="#ClickHouse.Generator-350"><span class="linenos">350</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-351"><a href="#ClickHouse.Generator-351"><span class="linenos">351</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-352"><a href="#ClickHouse.Generator-352"><span class="linenos">352</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-353"><a href="#ClickHouse.Generator-353"><span class="linenos">353</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-354"><a href="#ClickHouse.Generator-354"><span class="linenos">354</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-355"><a href="#ClickHouse.Generator-355"><span class="linenos">355</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-356"><a href="#ClickHouse.Generator-356"><span class="linenos">356</span></a>
-</span><span id="ClickHouse.Generator-357"><a href="#ClickHouse.Generator-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-358"><a href="#ClickHouse.Generator-358"><span class="linenos">358</span></a> <span class="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
-</span><span id="ClickHouse.Generator-359"><a href="#ClickHouse.Generator-359"><span class="linenos">359</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="ClickHouse.Generator-360"><a href="#ClickHouse.Generator-360"><span class="linenos">360</span></a> <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="ClickHouse.Generator-361"><a href="#ClickHouse.Generator-361"><span class="linenos">361</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-362"><a href="#ClickHouse.Generator-362"><span class="linenos">362</span></a> <span class="o">*</span><span class="p">[</span>
-</span><span id="ClickHouse.Generator-363"><a href="#ClickHouse.Generator-363"><span class="linenos">363</span></a> <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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
-</span><span id="ClickHouse.Generator-364"><a href="#ClickHouse.Generator-364"><span class="linenos">364</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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="ClickHouse.Generator-365"><a href="#ClickHouse.Generator-365"><span class="linenos">365</span></a> <span class="p">],</span>
-</span><span id="ClickHouse.Generator-366"><a href="#ClickHouse.Generator-366"><span class="linenos">366</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Generator-367"><a href="#ClickHouse.Generator-367"><span class="linenos">367</span></a>
-</span><span id="ClickHouse.Generator-368"><a href="#ClickHouse.Generator-368"><span class="linenos">368</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-369"><a href="#ClickHouse.Generator-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-370"><a href="#ClickHouse.Generator-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-371"><a href="#ClickHouse.Generator-371"><span class="linenos">371</span></a>
-</span><span id="ClickHouse.Generator-372"><a href="#ClickHouse.Generator-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-373"><a href="#ClickHouse.Generator-373"><span class="linenos">373</span></a>
-</span><span id="ClickHouse.Generator-374"><a href="#ClickHouse.Generator-374"><span class="linenos">374</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="ClickHouse.Generator-375"><a href="#ClickHouse.Generator-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="ClickHouse.Generator-376"><a href="#ClickHouse.Generator-376"><span class="linenos">376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-377"><a href="#ClickHouse.Generator-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-378"><a href="#ClickHouse.Generator-378"><span class="linenos">378</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-379"><a href="#ClickHouse.Generator-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-380"><a href="#ClickHouse.Generator-380"><span class="linenos">380</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-381"><a href="#ClickHouse.Generator-381"><span class="linenos">381</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-382"><a href="#ClickHouse.Generator-382"><span class="linenos">382</span></a> <span class="p">]</span>
-</span><span id="ClickHouse.Generator-383"><a href="#ClickHouse.Generator-383"><span class="linenos">383</span></a>
-</span><span id="ClickHouse.Generator-384"><a href="#ClickHouse.Generator-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-385"><a href="#ClickHouse.Generator-385"><span class="linenos">385</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-386"><a href="#ClickHouse.Generator-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator-306"><a href="#ClickHouse.Generator-306"><span class="linenos">306</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-307"><a href="#ClickHouse.Generator-307"><span class="linenos">307</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-308"><a href="#ClickHouse.Generator-308"><span class="linenos">308</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-309"><a href="#ClickHouse.Generator-309"><span class="linenos">309</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-310"><a href="#ClickHouse.Generator-310"><span class="linenos">310</span></a>
+</span><span id="ClickHouse.Generator-311"><a href="#ClickHouse.Generator-311"><span class="linenos">311</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-312"><a href="#ClickHouse.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">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-313"><a href="#ClickHouse.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">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-314"><a href="#ClickHouse.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">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-315"><a href="#ClickHouse.Generator-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-316"><a href="#ClickHouse.Generator-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-317"><a href="#ClickHouse.Generator-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-318"><a href="#ClickHouse.Generator-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-319"><a href="#ClickHouse.Generator-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-320"><a href="#ClickHouse.Generator-320"><span class="linenos">320</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-321"><a href="#ClickHouse.Generator-321"><span class="linenos">321</span></a>
+</span><span id="ClickHouse.Generator-322"><a href="#ClickHouse.Generator-322"><span class="linenos">322</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-323"><a href="#ClickHouse.Generator-323"><span class="linenos">323</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-324"><a href="#ClickHouse.Generator-324"><span class="linenos">324</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-325"><a href="#ClickHouse.Generator-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-326"><a href="#ClickHouse.Generator-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-327"><a href="#ClickHouse.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-328"><a href="#ClickHouse.Generator-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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-329"><a href="#ClickHouse.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">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-330"><a href="#ClickHouse.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">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-331"><a href="#ClickHouse.Generator-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-332"><a href="#ClickHouse.Generator-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-333"><a href="#ClickHouse.Generator-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-334"><a href="#ClickHouse.Generator-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-335"><a href="#ClickHouse.Generator-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-336"><a href="#ClickHouse.Generator-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-337"><a href="#ClickHouse.Generator-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-338"><a href="#ClickHouse.Generator-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-339"><a href="#ClickHouse.Generator-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-340"><a href="#ClickHouse.Generator-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-341"><a href="#ClickHouse.Generator-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-342"><a href="#ClickHouse.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-343"><a href="#ClickHouse.Generator-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-344"><a href="#ClickHouse.Generator-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-345"><a href="#ClickHouse.Generator-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-346"><a href="#ClickHouse.Generator-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-347"><a href="#ClickHouse.Generator-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-348"><a href="#ClickHouse.Generator-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-349"><a href="#ClickHouse.Generator-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-350"><a href="#ClickHouse.Generator-350"><span class="linenos">350</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-351"><a href="#ClickHouse.Generator-351"><span class="linenos">351</span></a>
+</span><span id="ClickHouse.Generator-352"><a href="#ClickHouse.Generator-352"><span class="linenos">352</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-353"><a href="#ClickHouse.Generator-353"><span class="linenos">353</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-354"><a href="#ClickHouse.Generator-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-355"><a href="#ClickHouse.Generator-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-356"><a href="#ClickHouse.Generator-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-357"><a href="#ClickHouse.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-358"><a href="#ClickHouse.Generator-358"><span class="linenos">358</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="ClickHouse.Generator-359"><a href="#ClickHouse.Generator-359"><span class="linenos">359</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="ClickHouse.Generator-360"><a href="#ClickHouse.Generator-360"><span class="linenos">360</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Generator-361"><a href="#ClickHouse.Generator-361"><span class="linenos">361</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="ClickHouse.Generator-362"><a href="#ClickHouse.Generator-362"><span class="linenos">362</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="ClickHouse.Generator-363"><a href="#ClickHouse.Generator-363"><span class="linenos">363</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Generator-364"><a href="#ClickHouse.Generator-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-365"><a href="#ClickHouse.Generator-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse.Generator-366"><a href="#ClickHouse.Generator-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-367"><a href="#ClickHouse.Generator-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-368"><a href="#ClickHouse.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">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;quantile&quot;</span><span class="p">))</span>
+</span><span id="ClickHouse.Generator-369"><a href="#ClickHouse.Generator-369"><span class="linenos">369</span></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-370"><a href="#ClickHouse.Generator-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-371"><a href="#ClickHouse.Generator-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-372"><a href="#ClickHouse.Generator-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse.Generator-373"><a href="#ClickHouse.Generator-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;xor&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-374"><a href="#ClickHouse.Generator-374"><span class="linenos">374</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-375"><a href="#ClickHouse.Generator-375"><span class="linenos">375</span></a>
+</span><span id="ClickHouse.Generator-376"><a href="#ClickHouse.Generator-376"><span class="linenos">376</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-377"><a href="#ClickHouse.Generator-377"><span class="linenos">377</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-378"><a href="#ClickHouse.Generator-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-379"><a href="#ClickHouse.Generator-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-380"><a href="#ClickHouse.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-381"><a href="#ClickHouse.Generator-381"><span class="linenos">381</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-382"><a href="#ClickHouse.Generator-382"><span class="linenos">382</span></a>
+</span><span id="ClickHouse.Generator-383"><a href="#ClickHouse.Generator-383"><span class="linenos">383</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-384"><a href="#ClickHouse.Generator-384"><span class="linenos">384</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-385"><a href="#ClickHouse.Generator-385"><span class="linenos">385</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse.Generator-386"><a href="#ClickHouse.Generator-386"><span class="linenos">386</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="ClickHouse.Generator-387"><a href="#ClickHouse.Generator-387"><span class="linenos">387</span></a>
-</span><span id="ClickHouse.Generator-388"><a href="#ClickHouse.Generator-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">placeholder_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-389"><a href="#ClickHouse.Generator-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator-390"><a href="#ClickHouse.Generator-390"><span class="linenos">390</span></a>
-</span><span id="ClickHouse.Generator-391"><a href="#ClickHouse.Generator-391"><span class="linenos">391</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-392"><a href="#ClickHouse.Generator-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator-393"><a href="#ClickHouse.Generator-393"><span class="linenos">393</span></a>
-</span><span id="ClickHouse.Generator-394"><a href="#ClickHouse.Generator-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-395"><a href="#ClickHouse.Generator-395"><span class="linenos">395</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="ClickHouse.Generator-396"><a href="#ClickHouse.Generator-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-397"><a href="#ClickHouse.Generator-397"><span class="linenos">397</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-398"><a href="#ClickHouse.Generator-398"><span class="linenos">398</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="ClickHouse.Generator-399"><a href="#ClickHouse.Generator-399"><span class="linenos">399</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="ClickHouse.Generator-400"><a href="#ClickHouse.Generator-400"><span class="linenos">400</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Generator-401"><a href="#ClickHouse.Generator-401"><span class="linenos">401</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-402"><a href="#ClickHouse.Generator-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator-403"><a href="#ClickHouse.Generator-403"><span class="linenos">403</span></a>
-</span><span id="ClickHouse.Generator-404"><a href="#ClickHouse.Generator-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-388"><a href="#ClickHouse.Generator-388"><span class="linenos">388</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
+</span><span id="ClickHouse.Generator-389"><a href="#ClickHouse.Generator-389"><span class="linenos">389</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
+</span><span id="ClickHouse.Generator-390"><a href="#ClickHouse.Generator-390"><span class="linenos">390</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-391"><a href="#ClickHouse.Generator-391"><span class="linenos">391</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-392"><a href="#ClickHouse.Generator-392"><span class="linenos">392</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-393"><a href="#ClickHouse.Generator-393"><span class="linenos">393</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-394"><a href="#ClickHouse.Generator-394"><span class="linenos">394</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-395"><a href="#ClickHouse.Generator-395"><span class="linenos">395</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-396"><a href="#ClickHouse.Generator-396"><span class="linenos">396</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-397"><a href="#ClickHouse.Generator-397"><span class="linenos">397</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-398"><a href="#ClickHouse.Generator-398"><span class="linenos">398</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-399"><a href="#ClickHouse.Generator-399"><span class="linenos">399</span></a>
+</span><span id="ClickHouse.Generator-400"><a href="#ClickHouse.Generator-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-401"><a href="#ClickHouse.Generator-401"><span class="linenos">401</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="ClickHouse.Generator-402"><a href="#ClickHouse.Generator-402"><span class="linenos">402</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="ClickHouse.Generator-403"><a href="#ClickHouse.Generator-403"><span class="linenos">403</span></a> <span class="c1">#</span>
+</span><span id="ClickHouse.Generator-404"><a href="#ClickHouse.Generator-404"><span class="linenos">404</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="ClickHouse.Generator-405"><a href="#ClickHouse.Generator-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-406"><a href="#ClickHouse.Generator-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="ClickHouse.Generator-407"><a href="#ClickHouse.Generator-407"><span class="linenos">407</span></a>
+</span><span id="ClickHouse.Generator-408"><a href="#ClickHouse.Generator-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-409"><a href="#ClickHouse.Generator-409"><span class="linenos">409</span></a>
+</span><span id="ClickHouse.Generator-410"><a href="#ClickHouse.Generator-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-411"><a href="#ClickHouse.Generator-411"><span class="linenos">411</span></a> <span class="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
+</span><span id="ClickHouse.Generator-412"><a href="#ClickHouse.Generator-412"><span class="linenos">412</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="ClickHouse.Generator-413"><a href="#ClickHouse.Generator-413"><span class="linenos">413</span></a> <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="ClickHouse.Generator-414"><a href="#ClickHouse.Generator-414"><span class="linenos">414</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-415"><a href="#ClickHouse.Generator-415"><span class="linenos">415</span></a> <span class="o">*</span><span class="p">[</span>
+</span><span id="ClickHouse.Generator-416"><a href="#ClickHouse.Generator-416"><span class="linenos">416</span></a> <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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+</span><span id="ClickHouse.Generator-417"><a href="#ClickHouse.Generator-417"><span class="linenos">417</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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="ClickHouse.Generator-418"><a href="#ClickHouse.Generator-418"><span class="linenos">418</span></a> <span class="p">],</span>
+</span><span id="ClickHouse.Generator-419"><a href="#ClickHouse.Generator-419"><span class="linenos">419</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Generator-420"><a href="#ClickHouse.Generator-420"><span class="linenos">420</span></a>
+</span><span id="ClickHouse.Generator-421"><a href="#ClickHouse.Generator-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-422"><a href="#ClickHouse.Generator-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-423"><a href="#ClickHouse.Generator-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-424"><a href="#ClickHouse.Generator-424"><span class="linenos">424</span></a>
+</span><span id="ClickHouse.Generator-425"><a href="#ClickHouse.Generator-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-426"><a href="#ClickHouse.Generator-426"><span class="linenos">426</span></a>
+</span><span id="ClickHouse.Generator-427"><a href="#ClickHouse.Generator-427"><span class="linenos">427</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="ClickHouse.Generator-428"><a href="#ClickHouse.Generator-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="ClickHouse.Generator-429"><a href="#ClickHouse.Generator-429"><span class="linenos">429</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-430"><a href="#ClickHouse.Generator-430"><span class="linenos">430</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-431"><a href="#ClickHouse.Generator-431"><span class="linenos">431</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-432"><a href="#ClickHouse.Generator-432"><span class="linenos">432</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-433"><a href="#ClickHouse.Generator-433"><span class="linenos">433</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-434"><a href="#ClickHouse.Generator-434"><span class="linenos">434</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-435"><a href="#ClickHouse.Generator-435"><span class="linenos">435</span></a> <span class="p">]</span>
+</span><span id="ClickHouse.Generator-436"><a href="#ClickHouse.Generator-436"><span class="linenos">436</span></a>
+</span><span id="ClickHouse.Generator-437"><a href="#ClickHouse.Generator-437"><span class="linenos">437</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-438"><a href="#ClickHouse.Generator-438"><span class="linenos">438</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-439"><a href="#ClickHouse.Generator-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse.Generator-440"><a href="#ClickHouse.Generator-440"><span class="linenos">440</span></a>
+</span><span id="ClickHouse.Generator-441"><a href="#ClickHouse.Generator-441"><span class="linenos">441</span></a> <span class="k">def</span> <span class="nf">placeholder_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-442"><a href="#ClickHouse.Generator-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator-443"><a href="#ClickHouse.Generator-443"><span class="linenos">443</span></a>
+</span><span id="ClickHouse.Generator-444"><a href="#ClickHouse.Generator-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-445"><a href="#ClickHouse.Generator-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator-446"><a href="#ClickHouse.Generator-446"><span class="linenos">446</span></a>
+</span><span id="ClickHouse.Generator-447"><a href="#ClickHouse.Generator-447"><span class="linenos">447</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-448"><a href="#ClickHouse.Generator-448"><span class="linenos">448</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="ClickHouse.Generator-449"><a href="#ClickHouse.Generator-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-450"><a href="#ClickHouse.Generator-450"><span class="linenos">450</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-451"><a href="#ClickHouse.Generator-451"><span class="linenos">451</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="ClickHouse.Generator-452"><a href="#ClickHouse.Generator-452"><span class="linenos">452</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="ClickHouse.Generator-453"><a href="#ClickHouse.Generator-453"><span class="linenos">453</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Generator-454"><a href="#ClickHouse.Generator-454"><span class="linenos">454</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-455"><a href="#ClickHouse.Generator-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator-456"><a href="#ClickHouse.Generator-456"><span class="linenos">456</span></a>
+</span><span id="ClickHouse.Generator-457"><a href="#ClickHouse.Generator-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -2284,11 +2483,36 @@ Default: True</li>
</div>
+ <div id="ClickHouse.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#ClickHouse.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
+ <div id="ClickHouse.Generator.STRING_TYPE_MAPPING" class="classattr">
+ <div class="attr variable">
+ <span class="name">STRING_TYPE_MAPPING</span> =
+<input id="ClickHouse.Generator.STRING_TYPE_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="ClickHouse.Generator.STRING_TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.CHAR: &#39;CHAR&#39;&gt;: &#39;String&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;String&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;String&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;String&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;String&#39;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;: &#39;String&#39;, &lt;Type.VARBINARY: &#39;VARBINARY&#39;&gt;: &#39;String&#39;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: &#39;String&#39;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#ClickHouse.Generator.STRING_TYPE_MAPPING"></a>
+
+
+
+ </div>
<div id="ClickHouse.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
<input id="ClickHouse.Generator.TYPE_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.ARRAY: &#39;ARRAY&#39;&gt;: &#39;Array&#39;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: &#39;Int64&#39;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;: &#39;DateTime64&#39;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: &#39;Float64&#39;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: &#39;Float32&#39;, &lt;Type.INT: &#39;INT&#39;&gt;: &#39;Int32&#39;, &lt;Type.INT128: &#39;INT128&#39;&gt;: &#39;Int128&#39;, &lt;Type.INT256: &#39;INT256&#39;&gt;: &#39;Int256&#39;, &lt;Type.MAP: &#39;MAP&#39;&gt;: &#39;Map&#39;, &lt;Type.NULLABLE: &#39;NULLABLE&#39;&gt;: &#39;Nullable&#39;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;: &#39;Int16&#39;, &lt;Type.STRUCT: &#39;STRUCT&#39;&gt;: &#39;Tuple&#39;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: &#39;Int8&#39;, &lt;Type.UBIGINT: &#39;UBIGINT&#39;&gt;: &#39;UInt64&#39;, &lt;Type.UINT: &#39;UINT&#39;&gt;: &#39;UInt32&#39;, &lt;Type.UINT128: &#39;UINT128&#39;&gt;: &#39;UInt128&#39;, &lt;Type.UINT256: &#39;UINT256&#39;&gt;: &#39;UInt256&#39;, &lt;Type.USMALLINT: &#39;USMALLINT&#39;&gt;: &#39;UInt16&#39;, &lt;Type.UTINYINT: &#39;UTINYINT&#39;&gt;: &#39;UInt8&#39;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;String&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;String&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;String&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;String&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;: &#39;String&#39;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;: &#39;String&#39;, &lt;Type.VARBINARY: &#39;VARBINARY&#39;&gt;: &#39;String&#39;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: &#39;String&#39;, &lt;Type.ARRAY: &#39;ARRAY&#39;&gt;: &#39;Array&#39;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: &#39;Int64&#39;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;: &#39;DateTime64&#39;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: &#39;Float64&#39;, &lt;Type.ENUM: &#39;ENUM&#39;&gt;: &#39;Enum&#39;, &lt;Type.ENUM8: &#39;ENUM8&#39;&gt;: &#39;Enum8&#39;, &lt;Type.ENUM16: &#39;ENUM16&#39;&gt;: &#39;Enum16&#39;, &lt;Type.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;: &#39;FixedString&#39;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: &#39;Float32&#39;, &lt;Type.INT: &#39;INT&#39;&gt;: &#39;Int32&#39;, &lt;Type.INT128: &#39;INT128&#39;&gt;: &#39;Int128&#39;, &lt;Type.INT256: &#39;INT256&#39;&gt;: &#39;Int256&#39;, &lt;Type.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;: &#39;LowCardinality&#39;, &lt;Type.MAP: &#39;MAP&#39;&gt;: &#39;Map&#39;, &lt;Type.NESTED: &#39;NESTED&#39;&gt;: &#39;Nested&#39;, &lt;Type.NULLABLE: &#39;NULLABLE&#39;&gt;: &#39;Nullable&#39;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;: &#39;Int16&#39;, &lt;Type.STRUCT: &#39;STRUCT&#39;&gt;: &#39;Tuple&#39;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: &#39;Int8&#39;, &lt;Type.UBIGINT: &#39;UBIGINT&#39;&gt;: &#39;UInt64&#39;, &lt;Type.UINT: &#39;UINT&#39;&gt;: &#39;UInt32&#39;, &lt;Type.UINT128: &#39;UINT128&#39;&gt;: &#39;UInt128&#39;, &lt;Type.UINT256: &#39;UINT256&#39;&gt;: &#39;UInt256&#39;, &lt;Type.USMALLINT: &#39;USMALLINT&#39;&gt;: &#39;UInt16&#39;, &lt;Type.UTINYINT: &#39;UTINYINT&#39;&gt;: &#39;UInt8&#39;}</span>
</div>
@@ -2301,7 +2525,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="ClickHouse.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Final">sqlglot.expressions.Final</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Final">sqlglot.expressions.Final</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2314,7 +2538,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="ClickHouse.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCluster">sqlglot.expressions.OnCluster</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCluster">sqlglot.expressions.OnCluster</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -2374,7 +2598,7 @@ Default: True</li>
<div id="ClickHouse.Generator.ON_CLUSTER_TARGETS" class="classattr">
<div class="attr variable">
<span class="name">ON_CLUSTER_TARGETS</span> =
-<span class="default_value">{&#39;DICTIONARY&#39;, &#39;TABLE&#39;, &#39;NAMED COLLECTION&#39;, &#39;FUNCTION&#39;, &#39;VIEW&#39;, &#39;DATABASE&#39;, &#39;INDEX&#39;}</span>
+<span class="default_value">{&#39;DATABASE&#39;, &#39;INDEX&#39;, &#39;DICTIONARY&#39;, &#39;TABLE&#39;, &#39;FUNCTION&#39;, &#39;NAMED COLLECTION&#39;, &#39;VIEW&#39;}</span>
</div>
@@ -2383,6 +2607,32 @@ Default: True</li>
</div>
+ <div id="ClickHouse.Generator.datatype_sql" class="classattr">
+ <input id="ClickHouse.Generator.datatype_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">datatype_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#DataType">sqlglot.expressions.DataType</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="ClickHouse.Generator.datatype_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#ClickHouse.Generator.datatype_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.datatype_sql-400"><a href="#ClickHouse.Generator.datatype_sql-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.datatype_sql-401"><a href="#ClickHouse.Generator.datatype_sql-401"><span class="linenos">401</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="ClickHouse.Generator.datatype_sql-402"><a href="#ClickHouse.Generator.datatype_sql-402"><span class="linenos">402</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="ClickHouse.Generator.datatype_sql-403"><a href="#ClickHouse.Generator.datatype_sql-403"><span class="linenos">403</span></a> <span class="c1">#</span>
+</span><span id="ClickHouse.Generator.datatype_sql-404"><a href="#ClickHouse.Generator.datatype_sql-404"><span class="linenos">404</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="ClickHouse.Generator.datatype_sql-405"><a href="#ClickHouse.Generator.datatype_sql-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.datatype_sql-406"><a href="#ClickHouse.Generator.datatype_sql-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="ClickHouse.Generator.datatype_sql-407"><a href="#ClickHouse.Generator.datatype_sql-407"><span class="linenos">407</span></a>
+</span><span id="ClickHouse.Generator.datatype_sql-408"><a href="#ClickHouse.Generator.datatype_sql-408"><span class="linenos">408</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>
+
+
+
+
+ </div>
<div id="ClickHouse.Generator.safeconcat_sql" class="classattr">
<input id="ClickHouse.Generator.safeconcat_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -2394,16 +2644,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.safeconcat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.safeconcat_sql-357"><a href="#ClickHouse.Generator.safeconcat_sql-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.safeconcat_sql-358"><a href="#ClickHouse.Generator.safeconcat_sql-358"><span class="linenos">358</span></a> <span class="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
-</span><span id="ClickHouse.Generator.safeconcat_sql-359"><a href="#ClickHouse.Generator.safeconcat_sql-359"><span class="linenos">359</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="ClickHouse.Generator.safeconcat_sql-360"><a href="#ClickHouse.Generator.safeconcat_sql-360"><span class="linenos">360</span></a> <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="ClickHouse.Generator.safeconcat_sql-361"><a href="#ClickHouse.Generator.safeconcat_sql-361"><span class="linenos">361</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator.safeconcat_sql-362"><a href="#ClickHouse.Generator.safeconcat_sql-362"><span class="linenos">362</span></a> <span class="o">*</span><span class="p">[</span>
-</span><span id="ClickHouse.Generator.safeconcat_sql-363"><a href="#ClickHouse.Generator.safeconcat_sql-363"><span class="linenos">363</span></a> <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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
-</span><span id="ClickHouse.Generator.safeconcat_sql-364"><a href="#ClickHouse.Generator.safeconcat_sql-364"><span class="linenos">364</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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="ClickHouse.Generator.safeconcat_sql-365"><a href="#ClickHouse.Generator.safeconcat_sql-365"><span class="linenos">365</span></a> <span class="p">],</span>
-</span><span id="ClickHouse.Generator.safeconcat_sql-366"><a href="#ClickHouse.Generator.safeconcat_sql-366"><span class="linenos">366</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.safeconcat_sql-410"><a href="#ClickHouse.Generator.safeconcat_sql-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.safeconcat_sql-411"><a href="#ClickHouse.Generator.safeconcat_sql-411"><span class="linenos">411</span></a> <span class="c1"># Clickhouse errors out if we try to cast a NULL value to TEXT</span>
+</span><span id="ClickHouse.Generator.safeconcat_sql-412"><a href="#ClickHouse.Generator.safeconcat_sql-412"><span class="linenos">412</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="ClickHouse.Generator.safeconcat_sql-413"><a href="#ClickHouse.Generator.safeconcat_sql-413"><span class="linenos">413</span></a> <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="ClickHouse.Generator.safeconcat_sql-414"><a href="#ClickHouse.Generator.safeconcat_sql-414"><span class="linenos">414</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator.safeconcat_sql-415"><a href="#ClickHouse.Generator.safeconcat_sql-415"><span class="linenos">415</span></a> <span class="o">*</span><span class="p">[</span>
+</span><span id="ClickHouse.Generator.safeconcat_sql-416"><a href="#ClickHouse.Generator.safeconcat_sql-416"><span class="linenos">416</span></a> <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">e</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+</span><span id="ClickHouse.Generator.safeconcat_sql-417"><a href="#ClickHouse.Generator.safeconcat_sql-417"><span class="linenos">417</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</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">Condition</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="ClickHouse.Generator.safeconcat_sql-418"><a href="#ClickHouse.Generator.safeconcat_sql-418"><span class="linenos">418</span></a> <span class="p">],</span>
+</span><span id="ClickHouse.Generator.safeconcat_sql-419"><a href="#ClickHouse.Generator.safeconcat_sql-419"><span class="linenos">419</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2421,11 +2671,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.cte_sql-368"><a href="#ClickHouse.Generator.cte_sql-368"><span class="linenos">368</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.cte_sql-369"><a href="#ClickHouse.Generator.cte_sql-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator.cte_sql-370"><a href="#ClickHouse.Generator.cte_sql-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.cte_sql-371"><a href="#ClickHouse.Generator.cte_sql-371"><span class="linenos">371</span></a>
-</span><span id="ClickHouse.Generator.cte_sql-372"><a href="#ClickHouse.Generator.cte_sql-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.cte_sql-421"><a href="#ClickHouse.Generator.cte_sql-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.cte_sql-422"><a href="#ClickHouse.Generator.cte_sql-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator.cte_sql-423"><a href="#ClickHouse.Generator.cte_sql-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.cte_sql-424"><a href="#ClickHouse.Generator.cte_sql-424"><span class="linenos">424</span></a>
+</span><span id="ClickHouse.Generator.cte_sql-425"><a href="#ClickHouse.Generator.cte_sql-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2443,15 +2693,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.after_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.after_limit_modifiers-374"><a href="#ClickHouse.Generator.after_limit_modifiers-374"><span class="linenos">374</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-375"><a href="#ClickHouse.Generator.after_limit_modifiers-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-376"><a href="#ClickHouse.Generator.after_limit_modifiers-376"><span class="linenos">376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-377"><a href="#ClickHouse.Generator.after_limit_modifiers-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-378"><a href="#ClickHouse.Generator.after_limit_modifiers-378"><span class="linenos">378</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-379"><a href="#ClickHouse.Generator.after_limit_modifiers-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-380"><a href="#ClickHouse.Generator.after_limit_modifiers-380"><span class="linenos">380</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-381"><a href="#ClickHouse.Generator.after_limit_modifiers-381"><span class="linenos">381</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-382"><a href="#ClickHouse.Generator.after_limit_modifiers-382"><span class="linenos">382</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.after_limit_modifiers-427"><a href="#ClickHouse.Generator.after_limit_modifiers-427"><span class="linenos">427</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-428"><a href="#ClickHouse.Generator.after_limit_modifiers-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-429"><a href="#ClickHouse.Generator.after_limit_modifiers-429"><span class="linenos">429</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-430"><a href="#ClickHouse.Generator.after_limit_modifiers-430"><span class="linenos">430</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-431"><a href="#ClickHouse.Generator.after_limit_modifiers-431"><span class="linenos">431</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-432"><a href="#ClickHouse.Generator.after_limit_modifiers-432"><span class="linenos">432</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-433"><a href="#ClickHouse.Generator.after_limit_modifiers-433"><span class="linenos">433</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-434"><a href="#ClickHouse.Generator.after_limit_modifiers-434"><span class="linenos">434</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-435"><a href="#ClickHouse.Generator.after_limit_modifiers-435"><span class="linenos">435</span></a> <span class="p">]</span>
</span></pre></div>
@@ -2469,9 +2719,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.parameterizedagg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.parameterizedagg_sql-384"><a href="#ClickHouse.Generator.parameterizedagg_sql-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.parameterizedagg_sql-385"><a href="#ClickHouse.Generator.parameterizedagg_sql-385"><span class="linenos">385</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.parameterizedagg_sql-386"><a href="#ClickHouse.Generator.parameterizedagg_sql-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.parameterizedagg_sql-437"><a href="#ClickHouse.Generator.parameterizedagg_sql-437"><span class="linenos">437</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.parameterizedagg_sql-438"><a href="#ClickHouse.Generator.parameterizedagg_sql-438"><span class="linenos">438</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.parameterizedagg_sql-439"><a href="#ClickHouse.Generator.parameterizedagg_sql-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -2489,8 +2739,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.placeholder_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.placeholder_sql-388"><a href="#ClickHouse.Generator.placeholder_sql-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">placeholder_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.placeholder_sql-389"><a href="#ClickHouse.Generator.placeholder_sql-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.placeholder_sql-441"><a href="#ClickHouse.Generator.placeholder_sql-441"><span class="linenos">441</span></a> <span class="k">def</span> <span class="nf">placeholder_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.placeholder_sql-442"><a href="#ClickHouse.Generator.placeholder_sql-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -2508,8 +2758,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.oncluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.oncluster_sql-391"><a href="#ClickHouse.Generator.oncluster_sql-391"><span class="linenos">391</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.oncluster_sql-392"><a href="#ClickHouse.Generator.oncluster_sql-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.oncluster_sql-444"><a href="#ClickHouse.Generator.oncluster_sql-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.oncluster_sql-445"><a href="#ClickHouse.Generator.oncluster_sql-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -2527,17 +2777,17 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.createable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.createable_sql-394"><a href="#ClickHouse.Generator.createable_sql-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.createable_sql-395"><a href="#ClickHouse.Generator.createable_sql-395"><span class="linenos">395</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="ClickHouse.Generator.createable_sql-396"><a href="#ClickHouse.Generator.createable_sql-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator.createable_sql-397"><a href="#ClickHouse.Generator.createable_sql-397"><span class="linenos">397</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.createable_sql-398"><a href="#ClickHouse.Generator.createable_sql-398"><span class="linenos">398</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="ClickHouse.Generator.createable_sql-399"><a href="#ClickHouse.Generator.createable_sql-399"><span class="linenos">399</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="ClickHouse.Generator.createable_sql-400"><a href="#ClickHouse.Generator.createable_sql-400"><span class="linenos">400</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Generator.createable_sql-401"><a href="#ClickHouse.Generator.createable_sql-401"><span class="linenos">401</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.createable_sql-402"><a href="#ClickHouse.Generator.createable_sql-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator.createable_sql-403"><a href="#ClickHouse.Generator.createable_sql-403"><span class="linenos">403</span></a>
-</span><span id="ClickHouse.Generator.createable_sql-404"><a href="#ClickHouse.Generator.createable_sql-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.createable_sql-447"><a href="#ClickHouse.Generator.createable_sql-447"><span class="linenos">447</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.createable_sql-448"><a href="#ClickHouse.Generator.createable_sql-448"><span class="linenos">448</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="ClickHouse.Generator.createable_sql-449"><a href="#ClickHouse.Generator.createable_sql-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator.createable_sql-450"><a href="#ClickHouse.Generator.createable_sql-450"><span class="linenos">450</span></a> <span class="n">this_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.createable_sql-451"><a href="#ClickHouse.Generator.createable_sql-451"><span class="linenos">451</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="ClickHouse.Generator.createable_sql-452"><a href="#ClickHouse.Generator.createable_sql-452"><span class="linenos">452</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="ClickHouse.Generator.createable_sql-453"><a href="#ClickHouse.Generator.createable_sql-453"><span class="linenos">453</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Generator.createable_sql-454"><a href="#ClickHouse.Generator.createable_sql-454"><span class="linenos">454</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.createable_sql-455"><a href="#ClickHouse.Generator.createable_sql-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator.createable_sql-456"><a href="#ClickHouse.Generator.createable_sql-456"><span class="linenos">456</span></a>
+</span><span id="ClickHouse.Generator.createable_sql-457"><a href="#ClickHouse.Generator.createable_sql-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -2628,26 +2878,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.can_identify-253"><a href="#ClickHouse.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="ClickHouse.Generator.can_identify-254"><a href="#ClickHouse.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.can_identify-255"><a href="#ClickHouse.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="ClickHouse.Generator.can_identify-256"><a href="#ClickHouse.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="ClickHouse.Generator.can_identify-257"><a href="#ClickHouse.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="ClickHouse.Generator.can_identify-258"><a href="#ClickHouse.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="ClickHouse.Generator.can_identify-259"><a href="#ClickHouse.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="ClickHouse.Generator.can_identify-260"><a href="#ClickHouse.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="ClickHouse.Generator.can_identify-261"><a href="#ClickHouse.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="ClickHouse.Generator.can_identify-262"><a href="#ClickHouse.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="ClickHouse.Generator.can_identify-263"><a href="#ClickHouse.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="ClickHouse.Generator.can_identify-264"><a href="#ClickHouse.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="ClickHouse.Generator.can_identify-265"><a href="#ClickHouse.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ClickHouse.Generator.can_identify-266"><a href="#ClickHouse.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.can_identify-267"><a href="#ClickHouse.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="ClickHouse.Generator.can_identify-268"><a href="#ClickHouse.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="ClickHouse.Generator.can_identify-269"><a href="#ClickHouse.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.can_identify-270"><a href="#ClickHouse.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.can_identify-256"><a href="#ClickHouse.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="ClickHouse.Generator.can_identify-257"><a href="#ClickHouse.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.can_identify-258"><a href="#ClickHouse.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="ClickHouse.Generator.can_identify-259"><a href="#ClickHouse.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="ClickHouse.Generator.can_identify-260"><a href="#ClickHouse.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="ClickHouse.Generator.can_identify-261"><a href="#ClickHouse.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="ClickHouse.Generator.can_identify-262"><a href="#ClickHouse.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="ClickHouse.Generator.can_identify-263"><a href="#ClickHouse.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="ClickHouse.Generator.can_identify-264"><a href="#ClickHouse.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="ClickHouse.Generator.can_identify-265"><a href="#ClickHouse.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="ClickHouse.Generator.can_identify-266"><a href="#ClickHouse.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="ClickHouse.Generator.can_identify-267"><a href="#ClickHouse.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="ClickHouse.Generator.can_identify-268"><a href="#ClickHouse.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ClickHouse.Generator.can_identify-269"><a href="#ClickHouse.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.can_identify-270"><a href="#ClickHouse.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="ClickHouse.Generator.can_identify-271"><a href="#ClickHouse.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="ClickHouse.Generator.can_identify-272"><a href="#ClickHouse.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator.can_identify-272"><a href="#ClickHouse.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.can_identify-273"><a href="#ClickHouse.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.can_identify-274"><a href="#ClickHouse.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="ClickHouse.Generator.can_identify-275"><a href="#ClickHouse.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2718,26 +2968,14 @@ Default: True</li>
</div>
- <div id="ClickHouse.Generator.STRING_ESCAPE" class="classattr">
+ <div id="ClickHouse.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#ClickHouse.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="ClickHouse.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#ClickHouse.Tokenizer">sqlglot.dialects.clickhouse.ClickHouse.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#ClickHouse.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#ClickHouse.Generator.TOKENIZER_CLASS"></a>
@@ -2838,7 +3076,9 @@ Default: True</li>
<dd id="ClickHouse.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="ClickHouse.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="ClickHouse.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="ClickHouse.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="ClickHouse.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="ClickHouse.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="ClickHouse.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="ClickHouse.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="ClickHouse.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -2881,6 +3121,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="ClickHouse.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="ClickHouse.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="ClickHouse.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="ClickHouse.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="ClickHouse.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="ClickHouse.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2897,8 +3138,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="ClickHouse.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="ClickHouse.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="ClickHouse.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
- <dd id="ClickHouse.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
+ <dd id="ClickHouse.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="ClickHouse.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="ClickHouse.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="ClickHouse.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@@ -2942,6 +3182,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="ClickHouse.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="ClickHouse.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="ClickHouse.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="ClickHouse.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="ClickHouse.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="ClickHouse.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -2950,6 +3191,8 @@ Default: True</li>
<dd id="ClickHouse.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="ClickHouse.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="ClickHouse.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="ClickHouse.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="ClickHouse.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="ClickHouse.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="ClickHouse.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="ClickHouse.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -3105,6 +3348,8 @@ Default: True</li>
<dd id="ClickHouse.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="ClickHouse.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="ClickHouse.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="ClickHouse.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="ClickHouse.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/databricks.html b/docs/sqlglot/dialects/databricks.html
index 981b2b3..81d3bfe 100644
--- a/docs/sqlglot/dialects/databricks.html
+++ b/docs/sqlglot/dialects/databricks.html
@@ -46,6 +46,9 @@
<a class="variable" href="#Databricks.Parser.FACTOR">FACTOR</a>
</li>
<li>
+ <a class="variable" href="#Databricks.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Databricks.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -94,10 +97,7 @@
<a class="variable" href="#Databricks.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Databricks.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Databricks.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Databricks.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Databricks.Generator.BIT_START">BIT_START</a>
@@ -212,7 +212,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">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-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 class="p">,</span> <span class="n">timestamptrunc_sql</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>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
@@ -239,25 +239,38 @@
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><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">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">HEX_STRINGS</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><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="n">SINGLE_TOKENS</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="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-48"><a href="#L-48"><span class="linenos">48</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-49"><a href="#L-49"><span class="linenos">49</span></a> <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">DatetimeAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="s2">&quot;TIMESTAMPADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><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">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="s2">&quot;TIMESTAMPADD&quot;</span><span class="p">,</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <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-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</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="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)),</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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 class="n">exp</span><span class="o">.</span><span class="n">DatetimeDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <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">DatetimeTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</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">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-45"><a href="#L-45"><span class="linenos">45</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-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 class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">48</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-49"><a href="#L-49"><span class="linenos">49</span></a> <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">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-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><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a>
+</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> <span 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-57"><a href="#L-57"><span class="linenos">57</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a>
+</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a> <span class="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-61"><a href="#L-61"><span class="linenos">61</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-62"><a href="#L-62"><span class="linenos">62</span></a> <span class="p">}</span>
</span></pre></div>
@@ -294,25 +307,38 @@
</span><span id="Databricks-29"><a href="#Databricks-29"><span class="linenos">29</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><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">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">HEX_STRINGS</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><span id="Databricks-47"><a href="#Databricks-47"><span class="linenos">47</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Databricks-48"><a href="#Databricks-48"><span class="linenos">48</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-49"><a href="#Databricks-49"><span class="linenos">49</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-50"><a href="#Databricks-50"><span class="linenos">50</span></a> <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">DatetimeAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Databricks-33"><a href="#Databricks-33"><span class="linenos">33</span></a> <span class="s2">&quot;TIMESTAMPADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><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">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Databricks-36"><a href="#Databricks-36"><span class="linenos">36</span></a> <span class="s2">&quot;TIMESTAMPADD&quot;</span><span class="p">,</span>
+</span><span id="Databricks-37"><a href="#Databricks-37"><span class="linenos">37</span></a> <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="Databricks-38"><a href="#Databricks-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</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="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)),</span>
+</span><span id="Databricks-39"><a href="#Databricks-39"><span class="linenos">39</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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 class="n">exp</span><span class="o">.</span><span class="n">DatetimeDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Databricks-42"><a href="#Databricks-42"><span class="linenos">42</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Databricks-43"><a href="#Databricks-43"><span class="linenos">43</span></a> <span class="p">),</span>
+</span><span id="Databricks-44"><a href="#Databricks-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="Databricks-45"><a href="#Databricks-45"><span class="linenos">45</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-46"><a href="#Databricks-46"><span class="linenos">46</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-47"><a href="#Databricks-47"><span class="linenos">47</span></a> <span class="p">[</span>
+</span><span id="Databricks-48"><a href="#Databricks-48"><span class="linenos">48</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-49"><a href="#Databricks-49"><span class="linenos">49</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-50"><a href="#Databricks-50"><span class="linenos">50</span></a> <span class="p">]</span>
+</span><span id="Databricks-51"><a href="#Databricks-51"><span class="linenos">51</span></a> <span class="p">),</span>
+</span><span id="Databricks-52"><a href="#Databricks-52"><span class="linenos">52</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-53"><a href="#Databricks-53"><span class="linenos">53</span></a> <span class="p">}</span>
+</span><span id="Databricks-54"><a href="#Databricks-54"><span class="linenos">54</span></a>
+</span><span id="Databricks-55"><a href="#Databricks-55"><span class="linenos">55</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Databricks-56"><a href="#Databricks-56"><span class="linenos">56</span></a>
+</span><span id="Databricks-57"><a href="#Databricks-57"><span class="linenos">57</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-58"><a href="#Databricks-58"><span class="linenos">58</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Databricks-59"><a href="#Databricks-59"><span class="linenos">59</span></a>
+</span><span id="Databricks-60"><a href="#Databricks-60"><span class="linenos">60</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Databricks-61"><a href="#Databricks-61"><span class="linenos">61</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-62"><a href="#Databricks-62"><span class="linenos">62</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-63"><a href="#Databricks-63"><span class="linenos">63</span></a> <span class="p">}</span>
</span></pre></div>
@@ -542,6 +568,7 @@
<div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
<dd id="Databricks.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Databricks.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Databricks.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Databricks.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Databricks.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Databricks.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -627,7 +654,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Databricks.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Databricks.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATEDIFF&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;AGGREGATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;BOOLEAN&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DOUBLE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;FLOAT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;MAP_FROM_ARRAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHIFTLEFT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;SHIFTRIGHT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;STRING&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;TO_UNIX_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DATEADD&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Databricks.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;function Spark.Parser.&lt;lambda&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATEDIFF&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;AGGREGATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;BOOLEAN&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DOUBLE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;FLOAT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;MAP_FROM_ARRAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHIFTLEFT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;SHIFTRIGHT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;STRING&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;TO_UNIX_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DATEADD&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;}</span>
</div>
@@ -649,6 +676,18 @@ Default: 3</li>
</div>
+ <div id="Databricks.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Databricks.Tokenizer">sqlglot.dialects.databricks.Databricks.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Databricks.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Databricks.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -705,6 +744,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Databricks.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Databricks.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Databricks.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Databricks.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Databricks.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Databricks.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -724,6 +764,7 @@ Default: 3</li>
<dd id="Databricks.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
<dd id="Databricks.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Databricks.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
+ <dd id="Databricks.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Databricks.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Databricks.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Databricks.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -741,6 +782,7 @@ Default: 3</li>
<dd id="Databricks.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
<dd id="Databricks.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Databricks.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="Databricks.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Databricks.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Databricks.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Databricks.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -758,10 +800,12 @@ Default: 3</li>
<dd id="Databricks.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Databricks.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Databricks.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Databricks.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Databricks.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Databricks.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Databricks.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Databricks.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Databricks.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Databricks.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Databricks.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Databricks.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -782,12 +826,13 @@ Default: 3</li>
<dd id="Databricks.Parser.sql" class="variable"><a href="../parser.html#Parser.sql">sql</a></dd>
</div>
- <div><dt><a href="spark2.html#Spark2.Parser">sqlglot.dialects.spark2.Spark2.Parser</a></dt>
- <dd id="Databricks.Parser.FUNCTION_PARSERS" class="variable"><a href="spark2.html#Spark2.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
+ <div><dt><a href="spark.html#Spark.Parser">sqlglot.dialects.spark.Spark.Parser</a></dt>
+ <dd id="Databricks.Parser.FUNCTION_PARSERS" class="variable"><a href="spark.html#Spark.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
</div>
<div><dt><a href="hive.html#Hive.Parser">sqlglot.dialects.hive.Hive.Parser</a></dt>
<dd id="Databricks.Parser.STRICT_CAST" class="variable"><a href="hive.html#Hive.Parser.STRICT_CAST">STRICT_CAST</a></dd>
+ <dd id="Databricks.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="hive.html#Hive.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
<dd id="Databricks.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="hive.html#Hive.Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
<dd id="Databricks.Parser.PROPERTY_PARSERS" class="variable"><a href="hive.html#Hive.Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
<dd id="Databricks.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="hive.html#Hive.Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -813,17 +858,30 @@ Default: 3</li>
</span><span id="Databricks.Generator-29"><a href="#Databricks.Generator-29"><span class="linenos">29</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><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">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><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">DatetimeAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Databricks.Generator-33"><a href="#Databricks.Generator-33"><span class="linenos">33</span></a> <span class="s2">&quot;TIMESTAMPADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><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">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Databricks.Generator-36"><a href="#Databricks.Generator-36"><span class="linenos">36</span></a> <span class="s2">&quot;TIMESTAMPADD&quot;</span><span class="p">,</span>
+</span><span id="Databricks.Generator-37"><a href="#Databricks.Generator-37"><span class="linenos">37</span></a> <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="Databricks.Generator-38"><a href="#Databricks.Generator-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</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="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)),</span>
+</span><span id="Databricks.Generator-39"><a href="#Databricks.Generator-39"><span class="linenos">39</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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 class="n">exp</span><span class="o">.</span><span class="n">DatetimeDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Databricks.Generator-42"><a href="#Databricks.Generator-42"><span class="linenos">42</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Databricks.Generator-43"><a href="#Databricks.Generator-43"><span class="linenos">43</span></a> <span class="p">),</span>
+</span><span id="Databricks.Generator-44"><a href="#Databricks.Generator-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="Databricks.Generator-45"><a href="#Databricks.Generator-45"><span class="linenos">45</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-46"><a href="#Databricks.Generator-46"><span class="linenos">46</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-47"><a href="#Databricks.Generator-47"><span class="linenos">47</span></a> <span class="p">[</span>
+</span><span id="Databricks.Generator-48"><a href="#Databricks.Generator-48"><span class="linenos">48</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-49"><a href="#Databricks.Generator-49"><span class="linenos">49</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-50"><a href="#Databricks.Generator-50"><span class="linenos">50</span></a> <span class="p">]</span>
+</span><span id="Databricks.Generator-51"><a href="#Databricks.Generator-51"><span class="linenos">51</span></a> <span class="p">),</span>
+</span><span id="Databricks.Generator-52"><a href="#Databricks.Generator-52"><span class="linenos">52</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-53"><a href="#Databricks.Generator-53"><span class="linenos">53</span></a> <span class="p">}</span>
+</span><span id="Databricks.Generator-54"><a href="#Databricks.Generator-54"><span class="linenos">54</span></a>
+</span><span id="Databricks.Generator-55"><a href="#Databricks.Generator-55"><span class="linenos">55</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span></pre></div>
@@ -870,7 +928,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Databricks.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Databricks.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Databricks.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NotNullColumnConstraint">sqlglot.expressions.NotNullColumnConstraint</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;: &lt;function _insert_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function Spark.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Databricks.Generator">Databricks.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -941,26 +999,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Databricks.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Generator.can_identify-253"><a href="#Databricks.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Databricks.Generator.can_identify-254"><a href="#Databricks.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Databricks.Generator.can_identify-255"><a href="#Databricks.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Databricks.Generator.can_identify-256"><a href="#Databricks.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Databricks.Generator.can_identify-257"><a href="#Databricks.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Databricks.Generator.can_identify-258"><a href="#Databricks.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Databricks.Generator.can_identify-259"><a href="#Databricks.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Databricks.Generator.can_identify-260"><a href="#Databricks.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Databricks.Generator.can_identify-261"><a href="#Databricks.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Databricks.Generator.can_identify-262"><a href="#Databricks.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Databricks.Generator.can_identify-263"><a href="#Databricks.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Databricks.Generator.can_identify-264"><a href="#Databricks.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Databricks.Generator.can_identify-265"><a href="#Databricks.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Databricks.Generator.can_identify-266"><a href="#Databricks.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Databricks.Generator.can_identify-267"><a href="#Databricks.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Databricks.Generator.can_identify-268"><a href="#Databricks.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Databricks.Generator.can_identify-269"><a href="#Databricks.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Databricks.Generator.can_identify-270"><a href="#Databricks.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Generator.can_identify-256"><a href="#Databricks.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Databricks.Generator.can_identify-257"><a href="#Databricks.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Databricks.Generator.can_identify-258"><a href="#Databricks.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Databricks.Generator.can_identify-259"><a href="#Databricks.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Databricks.Generator.can_identify-260"><a href="#Databricks.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Databricks.Generator.can_identify-261"><a href="#Databricks.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Databricks.Generator.can_identify-262"><a href="#Databricks.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Databricks.Generator.can_identify-263"><a href="#Databricks.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Databricks.Generator.can_identify-264"><a href="#Databricks.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Databricks.Generator.can_identify-265"><a href="#Databricks.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Databricks.Generator.can_identify-266"><a href="#Databricks.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Databricks.Generator.can_identify-267"><a href="#Databricks.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Databricks.Generator.can_identify-268"><a href="#Databricks.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Databricks.Generator.can_identify-269"><a href="#Databricks.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Databricks.Generator.can_identify-270"><a href="#Databricks.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Databricks.Generator.can_identify-271"><a href="#Databricks.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Databricks.Generator.can_identify-272"><a href="#Databricks.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Databricks.Generator.can_identify-272"><a href="#Databricks.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Databricks.Generator.can_identify-273"><a href="#Databricks.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Databricks.Generator.can_identify-274"><a href="#Databricks.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Databricks.Generator.can_identify-275"><a href="#Databricks.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1031,26 +1089,14 @@ Default: True</li>
</div>
- <div id="Databricks.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Databricks.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Databricks.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Databricks.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Databricks.Tokenizer">sqlglot.dialects.databricks.Databricks.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Databricks.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Databricks.Generator.TOKENIZER_CLASS"></a>
@@ -1146,7 +1192,9 @@ Default: True</li>
<dd id="Databricks.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
<dd id="Databricks.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Databricks.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
+ <dd id="Databricks.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="Databricks.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Databricks.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Databricks.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Databricks.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Databricks.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1189,6 +1237,7 @@ Default: True</li>
<dd id="Databricks.Generator.column_sql" class="function"><a href="../generator.html#Generator.column_sql">column_sql</a></dd>
<dd id="Databricks.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Databricks.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Databricks.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Databricks.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Databricks.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Databricks.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1207,7 +1256,7 @@ Default: True</li>
<dd id="Databricks.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Databricks.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Databricks.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Databricks.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Databricks.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Databricks.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Databricks.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="Databricks.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@@ -1258,6 +1307,8 @@ Default: True</li>
<dd id="Databricks.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Databricks.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Databricks.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Databricks.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Databricks.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Databricks.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Databricks.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Databricks.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1412,19 +1463,22 @@ Default: True</li>
<dd id="Databricks.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
<dd id="Databricks.Generator.oncluster_sql" class="function"><a href="../generator.html#Generator.oncluster_sql">oncluster_sql</a></dd>
<dd id="Databricks.Generator.clusteredbyproperty_sql" class="function"><a href="../generator.html#Generator.clusteredbyproperty_sql">clusteredbyproperty_sql</a></dd>
- <dd id="Databricks.Generator.anyvalue_sql" class="function"><a href="../generator.html#Generator.anyvalue_sql">anyvalue_sql</a></dd>
<dd id="Databricks.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Databricks.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Databricks.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Databricks.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Databricks.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
<div><dt><a href="spark.html#Spark.Generator">sqlglot.dialects.spark.Spark.Generator</a></dt>
<dd id="Databricks.Generator.TYPE_MAPPING" class="variable"><a href="spark.html#Spark.Generator.TYPE_MAPPING">TYPE_MAPPING</a></dd>
+ <dd id="Databricks.Generator.anyvalue_sql" class="function"><a href="spark.html#Spark.Generator.anyvalue_sql">anyvalue_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.QUERY_HINTS" class="variable"><a href="spark2.html#Spark2.Generator.QUERY_HINTS">QUERY_HINTS</a></dd>
+ <dd id="Databricks.Generator.NVL2_SUPPORTED" class="variable"><a href="spark2.html#Spark2.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Databricks.Generator.PROPERTIES_LOCATION" class="variable"><a href="spark2.html#Spark2.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
<dd id="Databricks.Generator.WRAP_DERIVED_VALUES" class="variable"><a href="spark2.html#Spark2.Generator.WRAP_DERIVED_VALUES">WRAP_DERIVED_VALUES</a></dd>
<dd id="Databricks.Generator.CREATE_FUNCTION_RETURN_AS" class="variable"><a href="spark2.html#Spark2.Generator.CREATE_FUNCTION_RETURN_AS">CREATE_FUNCTION_RETURN_AS</a></dd>
@@ -1444,6 +1498,7 @@ Default: True</li>
<dd id="Databricks.Generator.arrayagg_sql" class="function"><a href="hive.html#Hive.Generator.arrayagg_sql">arrayagg_sql</a></dd>
<dd id="Databricks.Generator.with_properties" class="function"><a href="hive.html#Hive.Generator.with_properties">with_properties</a></dd>
<dd id="Databricks.Generator.datatype_sql" class="function"><a href="hive.html#Hive.Generator.datatype_sql">datatype_sql</a></dd>
+ <dd id="Databricks.Generator.version_sql" class="function"><a href="hive.html#Hive.Generator.version_sql">version_sql</a></dd>
<dd id="Databricks.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="hive.html#Hive.Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Databricks.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="hive.html#Hive.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
@@ -1462,13 +1517,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Databricks.Tokenizer"></a>
- <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">HEX_STRINGS</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><span id="Databricks.Tokenizer-47"><a href="#Databricks.Tokenizer-47"><span class="linenos">47</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Databricks.Tokenizer-48"><a href="#Databricks.Tokenizer-48"><span class="linenos">48</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-49"><a href="#Databricks.Tokenizer-49"><span class="linenos">49</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-50"><a href="#Databricks.Tokenizer-50"><span class="linenos">50</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Tokenizer-57"><a href="#Databricks.Tokenizer-57"><span class="linenos">57</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-58"><a href="#Databricks.Tokenizer-58"><span class="linenos">58</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Databricks.Tokenizer-59"><a href="#Databricks.Tokenizer-59"><span class="linenos">59</span></a>
+</span><span id="Databricks.Tokenizer-60"><a href="#Databricks.Tokenizer-60"><span class="linenos">60</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Databricks.Tokenizer-61"><a href="#Databricks.Tokenizer-61"><span class="linenos">61</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-62"><a href="#Databricks.Tokenizer-62"><span class="linenos">62</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-63"><a href="#Databricks.Tokenizer-63"><span class="linenos">63</span></a> <span class="p">}</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/dialect.html b/docs/sqlglot/dialects/dialect.html
index be447f4..4cc8c2a 100644
--- a/docs/sqlglot/dialects/dialect.html
+++ b/docs/sqlglot/dialects/dialect.html
@@ -96,6 +96,9 @@
<li>
<a class="variable" href="#Dialects.TSQL">TSQL</a>
</li>
+ <li>
+ <a class="variable" href="#Dialects.Doris">Doris</a>
+ </li>
</ul>
</li>
@@ -118,6 +121,9 @@
<a class="variable" href="#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a>
</li>
<li>
+ <a class="variable" href="#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a>
+ </li>
+ <li>
<a class="variable" href="#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a>
</li>
<li>
@@ -304,6 +310,9 @@
<a class="function" href="#format_time_lambda">format_time_lambda</a>
</li>
<li>
+ <a class="function" href="#time_format">time_format</a>
+ </li>
+ <li>
<a class="function" href="#create_with_partitions_sql">create_with_partitions_sql</a>
</li>
<li>
@@ -375,6 +384,15 @@
<li>
<a class="function" href="#binary_from_function">binary_from_function</a>
</li>
+ <li>
+ <a class="function" href="#parse_timestamp_trunc">parse_timestamp_trunc</a>
+ </li>
+ <li>
+ <a class="function" href="#any_value_to_max_sql">any_value_to_max_sql</a>
+ </li>
+ <li>
+ <a class="function" href="#json_keyvalue_comma_sql">json_keyvalue_comma_sql</a>
+ </li>
</ul>
@@ -439,77 +457,77 @@
</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 class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">Doris</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="k">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</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-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="fm">__eq__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">other</span><span class="p">:</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
-</span><span id="L-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="kc">False</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="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
-</span><span id="L-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="nd">@classmethod</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</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-62"><a href="#L-62"><span class="linenos"> 62</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-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="nd">@classmethod</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="p">)</span> <span class="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-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</span></a>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">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-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</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-74"><a href="#L-74"><span class="linenos"> 74</span></a>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">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-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span><span class="p">)</span> <span class="k">if</span> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="k">else</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span>
-</span><span id="L-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="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-80"><a href="#L-80"><span class="linenos"> 80</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-81"><a href="#L-81"><span class="linenos"> 81</span></a>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">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-83"><a href="#L-83"><span class="linenos"> 83</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-84"><a href="#L-84"><span class="linenos"> 84</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-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">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-87"><a href="#L-87"><span class="linenos"> 87</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-88"><a href="#L-88"><span class="linenos"> 88</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-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">get_start_end</span><span class="p">(</span><span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="nb">next</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 class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="n">t</span> <span class="o">==</span> <span class="n">token_type</span>
-</span><span id="L-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="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</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><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">)</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">)</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">)</span>
-</span><span id="L-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">dialect_properties</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="p">{</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">k</span><span class="p">:</span> <span class="n">v</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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="nb">vars</span><span class="p">(</span><span class="n">klass</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">v</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">v</span><span class="p">,</span> <span class="nb">classmethod</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;__&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 class="s2">&quot;STRING_ESCAPE&quot;</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">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;IDENTIFIER_ESCAPE&quot;</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">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="k">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</span></a>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">other</span><span class="p">:</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="kc">False</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="L-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="nd">@classmethod</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</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-63"><a href="#L-63"><span class="linenos"> 63</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-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="nd">@classmethod</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="p">)</span> <span class="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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</span></a>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">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-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</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-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</span></a>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span><span class="p">)</span> <span class="k">if</span> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="k">else</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span>
+</span><span id="L-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="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-81"><a href="#L-81"><span class="linenos"> 81</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-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">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-84"><a href="#L-84"><span class="linenos"> 84</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-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="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-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="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-88"><a href="#L-88"><span class="linenos"> 88</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-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">_IDENTIFIERS</span><span class="o">.</span><span class="n">items</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 class="mi">0</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">def</span> <span class="nf">get_start_end</span><span class="p">(</span><span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="nb">next</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="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">t</span> <span class="o">==</span> <span class="n">token_type</span>
+</span><span id="L-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 class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
+</span><span id="L-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><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">)</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">)</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">)</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">dialect_properties</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">k</span><span class="p">:</span> <span class="n">v</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</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="nb">vars</span><span class="p">(</span><span class="n">klass</span><span class="p">)</span><span class="o">.</span><span class="n">items</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="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">v</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">v</span><span class="p">,</span> <span class="nb">classmethod</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">k</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;__&quot;</span><span class="p">)</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="p">},</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;TOKENIZER_CLASS&quot;</span><span class="p">:</span> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</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">if</span> <span class="n">enum</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">):</span>
@@ -521,7 +539,7 @@
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">subclass</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="nb">setattr</span><span class="p">(</span><span class="n">subclass</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">klass</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</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="ow">not</span> <span class="n">klass</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</span> <span class="n">klass</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span><span class="p">:</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">can_identify</span> <span class="o">=</span> <span class="n">klass</span><span class="o">.</span><span class="n">can_identify</span>
@@ -546,559 +564,590 @@
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="c1"># Determines whether or not an unquoted identifier can start with a digit</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</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="c1"># Determines whether or not CONCAT&#39;s arguments must be strings</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="c1"># Determines whether or not the DPIPE token (&#39;||&#39;) is a string concatenation operator</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</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="c1"># Determines how function names are going to be normalized</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="c1"># Determines whether or not CONCAT&#39;s arguments must be strings</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="c1"># Indicates the default null ordering method to use if not explicitly set</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="c1"># Options are: &quot;nulls_are_small&quot;, &quot;nulls_are_large&quot;, &quot;nulls_are_last&quot;</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</span></a>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-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="c1"># Custom time mappings in which the key represents dialect time format</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="c1"># and the value represents a python time format</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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-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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="c1"># special syntax cast(x as date format &#39;yyyy&#39;) defaults to time_mapping</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-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="c1"># Columns that are auto-generated by the engine corresponding to this dialect</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="c1"># Such columns may be excluded from SELECT * queries, for example</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-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="c1"># Autofilled</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</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"># A trie of the time_mapping keys</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-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">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="c1"># Determines how function names are going to be normalized</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="L-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"># Indicates the default null ordering method to use if not explicitly set</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="c1"># Options are: &quot;nulls_are_small&quot;, &quot;nulls_are_large&quot;, &quot;nulls_are_last&quot;</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</span></a>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-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="c1"># Custom time mappings in which the key represents dialect time format</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="c1"># and the value represents a python time format</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</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-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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="c1"># special syntax cast(x as date format &#39;yyyy&#39;) defaults to time_mapping</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-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="c1"># Columns that are auto-generated by the engine corresponding to this dialect</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="c1"># Such columns may be excluded from SELECT * queries, for example</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-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="c1"># Autofilled</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</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="c1"># A trie of the time_mapping keys</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-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">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
</span><span id="L-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="nd">@classmethod</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">return</span> <span class="bp">cls</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">dialect</span><span class="p">,</span> <span class="n">_Dialect</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">dialect</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">dialect</span><span class="p">,</span> <span class="n">Dialect</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">dialect</span><span class="o">.</span><span class="vm">__class__</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">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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-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">return</span> <span class="n">result</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-213"><a href="#L-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="p">,</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">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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="c1"># the time formats are quoted</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <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="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-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="L-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="nd">@classmethod</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="bp">cls</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</span></a>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-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">return</span> <span class="n">result</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="nd">@classmethod</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</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">expression</span><span class="p">,</span> <span class="nb">str</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="c1"># the time formats are quoted</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="p">)</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
-</span><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 class="nd">@classmethod</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-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"> Normalizes an unquoted identifier to either lower or upper case, thus essentially</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a><span class="sd"> making it case-insensitive. If a dialect treats all identifiers as case-insensitive,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="sd"> they will be normalized regardless of being quoted or not.</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</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">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
-</span><span id="L-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><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">return</span> <span class="n">expression</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="nd">@classmethod</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</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="kc">False</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">unsafe</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+</span><span id="L-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">return</span> <span class="n">expression</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="nd">@classmethod</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a><span class="sd"> Normalizes an unquoted identifier to either lower or upper case, thus essentially</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a><span class="sd"> making it case-insensitive. If a dialect treats all identifiers as case-insensitive,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a><span class="sd"> they will be normalized regardless of being quoted or not.</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</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">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="p">)</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">expression</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="nd">@classmethod</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</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="kc">False</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="nd">@classmethod</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="L-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="sd"> Args:</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="sd"> identify:</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</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="sd"> Returns:</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a><span class="sd"> &quot;&quot;&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">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="k">return</span> <span class="kc">True</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="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-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="nd">@classmethod</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="L-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="sd"> Args:</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a><span class="sd"> identify:</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</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="sd"> Returns:</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="kc">True</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">return</span> <span class="kc">False</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="nd">@classmethod</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">def</span> <span class="nf">quote_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-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="k">return</span> <span class="n">expression</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="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-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">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-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-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="k">return</span> <span class="kc">False</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="nd">@classmethod</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="k">def</span> <span class="nf">quote_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-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">Identifier</span><span class="p">):</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-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">return</span> <span class="n">expression</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">parse_into</span><span class="p">(</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-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">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-293"><a href="#L-293"><span class="linenos">293</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-287"><a href="#L-287"><span class="linenos">287</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-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">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-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">def</span> <span class="nf">parse_into</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="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-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-293"><span class="linenos">293</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-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">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-296"><a href="#L-296"><span class="linenos">296</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-295"><a href="#L-295"><span class="linenos">295</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-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">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-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">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-299"><a href="#L-299"><span class="linenos">299</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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-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="nd">@property</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</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><span id="L-305"><a href="#L-305"><span class="linenos">305</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-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">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-308"><a href="#L-308"><span class="linenos">308</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</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-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">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-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="nd">@property</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</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-307"><a href="#L-307"><span class="linenos">307</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><span id="L-308"><a href="#L-308"><span class="linenos">308</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-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">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-311"><a href="#L-311"><span class="linenos">311</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</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="o">**</span><span class="n">opts</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><span id="L-314"><a href="#L-314"><span class="linenos">314</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-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</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="o">**</span><span class="n">opts</span><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><span id="L-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</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-317"><a href="#L-317"><span class="linenos">317</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-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><span id="L-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</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-324"><a href="#L-324"><span class="linenos">324</span></a> <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-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><span id="L-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-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><span id="L-329"><a href="#L-329"><span class="linenos">329</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-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><span id="L-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</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-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><span id="L-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</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-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;APPROX_COUNT_DISTINCT does not support accuracy&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="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-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">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-331"><a href="#L-331"><span class="linenos">331</span></a> <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-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="p">)</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>
-</span><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="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</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-339"><a href="#L-339"><span class="linenos">339</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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 class="bp">self</span><span class="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-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><span id="L-343"><a href="#L-343"><span class="linenos">343</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-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="bp">self</span><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-336"><a href="#L-336"><span class="linenos">336</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-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="bp">self</span><span class="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-342"><a href="#L-342"><span class="linenos">342</span></a><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">return</span> <span class="bp">self</span><span class="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-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><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">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-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">(</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</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="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">expression</span><span class="o">.</span><span class="n">copy</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><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="p">)</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="k">def</span> <span class="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-356"><a href="#L-356"><span class="linenos">356</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-357"><a href="#L-357"><span class="linenos">357</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-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><span id="L-360"><a href="#L-360"><span class="linenos">360</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-361"><a href="#L-361"><span class="linenos">361</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-362"><a href="#L-362"><span class="linenos">362</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-363"><a href="#L-363"><span class="linenos">363</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-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</span></a>
-</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">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-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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-370"><a href="#L-370"><span class="linenos">370</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-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><span id="L-373"><a href="#L-373"><span class="linenos">373</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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</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-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><span id="L-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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><span id="L-383"><a href="#L-383"><span class="linenos">383</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-384"><a href="#L-384"><span class="linenos">384</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-346"><a href="#L-346"><span class="linenos">346</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-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="k">return</span> <span class="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-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><span id="L-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</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-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">(</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">this</span><span class="o">=</span><span class="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="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">expression</span><span class="o">.</span><span class="n">copy</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 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><span id="L-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</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-360"><a href="#L-360"><span class="linenos">360</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-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><span id="L-363"><a href="#L-363"><span class="linenos">363</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-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-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">with_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><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">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-371"><a href="#L-371"><span class="linenos">371</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-372"><a href="#L-372"><span class="linenos">372</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-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;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-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><span id="L-376"><a href="#L-376"><span class="linenos">376</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-377"><a href="#L-377"><span class="linenos">377</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-378"><a href="#L-378"><span class="linenos">378</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-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">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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a><span class="k">def</span> <span class="nf">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-388"><a href="#L-388"><span class="linenos">388</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-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="bp">self</span><span class="p">:</span> <span 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-394"><a href="#L-394"><span class="linenos">394</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="s2">&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><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="k">def</span> <span class="nf">no_map_from_entries_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">MapFromEntries</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="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;MAP_FROM_ENTRIES unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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 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-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</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-407"><a href="#L-407"><span class="linenos">407</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-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="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-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</span></a>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</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-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</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="o">.</span><span class="n">copy</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-416"><a href="#L-416"><span class="linenos">416</span></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-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><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</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-421"><a href="#L-421"><span class="linenos">421</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</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-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</span></a> <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-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">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</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-431"><a href="#L-431"><span class="linenos">431</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-432"><a href="#L-432"><span class="linenos">432</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-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">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-435"><a href="#L-435"><span class="linenos">435</span></a>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</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-387"><a href="#L-387"><span class="linenos">387</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-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">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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">no_comment_column_constraint_sql</span><span class="p">(</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</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-397"><a href="#L-397"><span class="linenos">397</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</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-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a><span class="k">def</span> <span class="nf">no_map_from_entries_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">MapFromEntries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">unsupported</span><span class="p">(</span><span class="s2">&quot;MAP_FROM_ENTRIES unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="s2">&quot;&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><span id="L-407"><a href="#L-407"><span class="linenos">407</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-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="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-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="n">position</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="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-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;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-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><span id="L-416"><a href="#L-416"><span class="linenos">416</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-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">.</span><span 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">to_identifier</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">name</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="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><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</span></a>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="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-429"><a href="#L-429"><span class="linenos">429</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-430"><a href="#L-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 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-431"><a href="#L-431"><span class="linenos">431</span></a>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</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-434"><a href="#L-434"><span class="linenos">434</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-435"><a href="#L-435"><span class="linenos">435</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-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="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</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-439"><a href="#L-439"><span class="linenos">439</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</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="sd"> Args:</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a><span class="sd"> dialect: target sql dialect.</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a><span class="sd"> default: the default format, True being time.</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="sd"> Returns:</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a><span class="sd"> &quot;&quot;&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">_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">List</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="n">exp_class</span><span class="p">(</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</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-454"><a href="#L-454"><span class="linenos">454</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-455"><a href="#L-455"><span class="linenos">455</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-456"><a href="#L-456"><span class="linenos">456</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-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="p">),</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="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">return</span> <span class="n">_format_time</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <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-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><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</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-442"><a href="#L-442"><span class="linenos">442</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</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="sd"> Args:</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a><span class="sd"> dialect: target sql dialect.</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="sd"> default: the default format, True being time.</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a><span class="sd"> Returns:</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="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">List</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">exp_class</span><span class="p">(</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</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-457"><a href="#L-457"><span class="linenos">457</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-458"><a href="#L-458"><span class="linenos">458</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-459"><a href="#L-459"><span class="linenos">459</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-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="p">),</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="p">)</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</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-464"><a href="#L-464"><span class="linenos">464</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</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-466"><a href="#L-466"><span class="linenos">466</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-467"><a href="#L-467"><span class="linenos">467</span></a><span class="sd"> columns are removed from the create statement.</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</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-470"><a href="#L-470"><span class="linenos">470</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-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">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-473"><a href="#L-473"><span class="linenos">473</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-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</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-476"><a href="#L-476"><span class="linenos">476</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-477"><a href="#L-477"><span class="linenos">477</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-478"><a href="#L-478"><span class="linenos">478</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-479"><a href="#L-479"><span class="linenos">479</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-480"><a href="#L-480"><span class="linenos">480</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-481"><a href="#L-481"><span class="linenos">481</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-482"><a href="#L-482"><span class="linenos">482</span></a>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">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-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><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</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-488"><a href="#L-488"><span class="linenos">488</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</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-491"><a href="#L-491"><span class="linenos">491</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-492"><a href="#L-492"><span class="linenos">492</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-493"><a href="#L-493"><span class="linenos">493</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">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="o">.</span><span class="n">name</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-494"><a href="#L-494"><span class="linenos">494</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-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">return</span> <span class="n">inner_func</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</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-501"><a href="#L-501"><span class="linenos">501</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">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-502"><a href="#L-502"><span class="linenos">502</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">List</span><span class="p">)</span> <span class="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-503"><a href="#L-503"><span class="linenos">503</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-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="kc">None</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">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-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">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</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-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;INTERVAL expression expected but got &#39;</span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="n">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-513"><a href="#L-513"><span class="linenos">513</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-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">_format_time</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><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a><span class="k">def</span> <span class="nf">time_format</span><span class="p">(</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</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-468"><a href="#L-468"><span class="linenos">468</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">def</span> <span class="nf">_time_format</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">UnixToStr</span> <span class="o">|</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="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-470"><a href="#L-470"><span class="linenos">470</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a><span class="sd"> Returns the time format for a given expression, unless it&#39;s equivalent</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a><span class="sd"> to the default time format of the dialect of interest.</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">time_format</span> <span class="k">if</span> <span class="n">time_format</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">TIME_FORMAT</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">return</span> <span class="n">_time_format</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">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-481"><a href="#L-481"><span class="linenos">481</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</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-483"><a href="#L-483"><span class="linenos">483</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-484"><a href="#L-484"><span class="linenos">484</span></a><span class="sd"> columns are removed from the create statement.</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</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-487"><a href="#L-487"><span class="linenos">487</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-488"><a href="#L-488"><span class="linenos">488</span></a>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</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-491"><a href="#L-491"><span class="linenos">491</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-492"><a href="#L-492"><span class="linenos">492</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-493"><a href="#L-493"><span class="linenos">493</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-494"><a href="#L-494"><span class="linenos">494</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-495"><a href="#L-495"><span class="linenos">495</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-496"><a href="#L-496"><span class="linenos">496</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-497"><a href="#L-497"><span class="linenos">497</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-498"><a href="#L-498"><span class="linenos">498</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-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">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-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><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</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-505"><a href="#L-505"><span class="linenos">505</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</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-508"><a href="#L-508"><span class="linenos">508</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-509"><a href="#L-509"><span class="linenos">509</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-510"><a href="#L-510"><span class="linenos">510</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">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="o">.</span><span class="n">name</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-511"><a href="#L-511"><span class="linenos">511</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-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="k">return</span> <span class="n">inner_func</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="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</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 class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><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-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="p">)</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a><span class="k">def</span> <span class="nf">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">List</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-523"><a href="#L-523"><span class="linenos">523</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-524"><a href="#L-524"><span class="linenos">524</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-525"><a href="#L-525"><span class="linenos">525</span></a>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="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="s2">&quot;date&quot;</span><span class="p">):</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="k">return</span> <span class="n">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-528"><a href="#L-528"><span class="linenos">528</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-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><span id="L-531"><a href="#L-531"><span class="linenos">531</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-532"><a href="#L-532"><span class="linenos">532</span></a> <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-533"><a href="#L-533"><span class="linenos">533</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-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="p">)</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</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-518"><a href="#L-518"><span class="linenos">518</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">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-519"><a href="#L-519"><span class="linenos">519</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">List</span><span class="p">)</span> <span class="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-520"><a href="#L-520"><span class="linenos">520</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-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="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-524"><a href="#L-524"><span class="linenos">524</span></a>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</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-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;INTERVAL expression expected but got &#39;</span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</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="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-529"><a href="#L-529"><span class="linenos">529</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-530"><a href="#L-530"><span class="linenos">530</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-531"><a href="#L-531"><span class="linenos">531</span></a>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</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 class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><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-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="p">)</span>
</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</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-539"><a href="#L-539"><span class="linenos">539</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">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 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-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-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="n">func</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</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">List</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-540"><a href="#L-540"><span class="linenos">540</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-541"><a href="#L-541"><span class="linenos">541</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-542"><a href="#L-542"><span class="linenos">542</span></a>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a><span class="k">def</span> <span class="nf">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-544"><a href="#L-544"><span class="linenos">544</span></a> <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-545"><a href="#L-545"><span class="linenos">545</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-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="p">)</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</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="s2">&quot;date&quot;</span><span class="p">):</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="k">return</span> <span class="n">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-545"><a href="#L-545"><span class="linenos">545</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-546"><a href="#L-546"><span class="linenos">546</span></a>
</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a><span class="k">def</span> <span class="nf">left_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</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-551"><a href="#L-551"><span class="linenos">551</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-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</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="p">,</span> <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 class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</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 class="p">)</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a>
-</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a><span class="k">def</span> <span class="nf">right_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">start</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="p">)</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="p">)</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a><span class="k">def</span> <span class="nf">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-569"><a href="#L-569"><span class="linenos">569</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;timestamp&quot;</span><span class="p">))</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a>
-</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a><span class="k">def</span> <span class="nf">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-573"><a href="#L-573"><span class="linenos">573</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;date&quot;</span><span class="p">))</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</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-549"><a href="#L-549"><span class="linenos">549</span></a> <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-550"><a href="#L-550"><span class="linenos">550</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-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="p">)</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos">555</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-556"><a href="#L-556"><span class="linenos">556</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">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 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-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="p">)</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</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-561"><a href="#L-561"><span class="linenos">561</span></a> <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-562"><a href="#L-562"><span class="linenos">562</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-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><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a><span class="k">def</span> <span class="nf">left_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</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-568"><a href="#L-568"><span class="linenos">568</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-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</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="p">,</span> <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 class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="p">)</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="p">)</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a>
</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a><span class="c1"># Used for Presto and Duckdb which use functions that don&#39;t support charset, and assume utf-8</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos">578</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">Expression</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="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;charset&quot;</span><span class="p">)</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</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-582"><a href="#L-582"><span class="linenos">582</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;Expected utf-8 character set, got </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-575"><a href="#L-575"><span class="linenos">575</span></a><span class="k">def</span> <span class="nf">right_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos">576</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-577"><a href="#L-577"><span class="linenos">577</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-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos">579</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="p">,</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">start</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="p">)</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="p">)</span>
</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a>
-</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a>
-</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a>
-</span><span id="L-587"><a href="#L-587"><span class="linenos">587</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-588"><a href="#L-588"><span class="linenos">588</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-589"><a href="#L-589"><span class="linenos">589</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-590"><a href="#L-590"><span class="linenos">590</span></a>
+</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a>
+</span><span id="L-585"><a href="#L-585"><span class="linenos">585</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-586"><a href="#L-586"><span class="linenos">586</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;timestamp&quot;</span><span class="p">))</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a>
+</span><span id="L-589"><a href="#L-589"><span class="linenos">589</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-590"><a href="#L-590"><span class="linenos">590</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;date&quot;</span><span class="p">))</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a>
-</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a><span class="k">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-593"><a href="#L-593"><span class="linenos">593</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-594"><a href="#L-594"><span class="linenos">594</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-595"><a href="#L-595"><span class="linenos">595</span></a>
-</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a>
-</span><span id="L-597"><a href="#L-597"><span class="linenos">597</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-598"><a href="#L-598"><span class="linenos">598</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-599"><a href="#L-599"><span class="linenos">599</span></a>
-</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="k">if</span> <span class="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-601"><a href="#L-601"><span class="linenos">601</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-602"><a href="#L-602"><span class="linenos">602</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-592"><a href="#L-592"><span class="linenos">592</span></a>
+</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a><span class="c1"># Used for Presto and Duckdb which use functions that don&#39;t support charset, and assume utf-8</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="bp">self</span><span class="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">Expression</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="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;charset&quot;</span><span class="p">)</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</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-599"><a href="#L-599"><span class="linenos">599</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;Expected utf-8 character set, got </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-600"><a href="#L-600"><span class="linenos">600</span></a>
+</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a>
</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a>
-</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <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="o">.</span><span class="n">copy</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-605"><a href="#L-605"><span class="linenos">605</span></a>
-</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a>
-</span><span id="L-607"><a href="#L-607"><span class="linenos">607</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-608"><a href="#L-608"><span class="linenos">608</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-609"><a href="#L-609"><span class="linenos">609</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-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</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-604"><a href="#L-604"><span class="linenos">604</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-605"><a href="#L-605"><span class="linenos">605</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-606"><a href="#L-606"><span class="linenos">606</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-607"><a href="#L-607"><span class="linenos">607</span></a>
+</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a>
+</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a><span class="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-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</span></a>
-</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos">614</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-615"><a href="#L-615"><span class="linenos">615</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-613"><a href="#L-613"><span class="linenos">613</span></a>
+</span><span id="L-614"><a href="#L-614"><span class="linenos">614</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-615"><a href="#L-615"><span class="linenos">615</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-616"><a href="#L-616"><span class="linenos">616</span></a>
-</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="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-618"><a href="#L-618"><span class="linenos">618</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-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</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-621"><a href="#L-621"><span class="linenos">621</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-617"><a href="#L-617"><span class="linenos">617</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-618"><a href="#L-618"><span class="linenos">618</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-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</span></a>
+</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="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="o">.</span><span class="n">copy</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-622"><a href="#L-622"><span class="linenos">622</span></a>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a>
-</span><span id="L-624"><a href="#L-624"><span class="linenos">624</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="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-625"><a href="#L-625"><span class="linenos">625</span></a> <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-626"><a href="#L-626"><span class="linenos">626</span></a>
-</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a>
-</span><span id="L-628"><a href="#L-628"><span class="linenos">628</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-629"><a href="#L-629"><span class="linenos">629</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-630"><a href="#L-630"><span class="linenos">630</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-631"><a href="#L-631"><span class="linenos">631</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-632"><a href="#L-632"><span class="linenos">632</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-633"><a href="#L-633"><span class="linenos">633</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">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="s2">&quot;date&quot;</span><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="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="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="s2">&quot;date&quot;</span><span class="p">))</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a>
-</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a>
+</span><span id="L-624"><a href="#L-624"><span class="linenos">624</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-625"><a href="#L-625"><span class="linenos">625</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-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</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-628"><a href="#L-628"><span class="linenos">628</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-629"><a href="#L-629"><span class="linenos">629</span></a>
+</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos">631</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-632"><a href="#L-632"><span class="linenos">632</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-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">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-635"><a href="#L-635"><span class="linenos">635</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-636"><a href="#L-636"><span class="linenos">636</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-637"><a href="#L-637"><span class="linenos">637</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-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-639"><a href="#L-639"><span class="linenos">639</span></a>
-</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos">641</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-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">rest_args</span><span class="p">:</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span 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">arg</span><span class="p">)</span>
-</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a>
-</span><span id="L-646"><a href="#L-646"><span class="linenos">646</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-647"><a href="#L-647"><span class="linenos">647</span></a>
-</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a>
-</span><span id="L-649"><a href="#L-649"><span class="linenos">649</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="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-650"><a href="#L-650"><span class="linenos">650</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
-</span><span id="L-652"><a href="#L-652"><span class="linenos">652</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 the following 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-640"><a href="#L-640"><span class="linenos">640</span></a>
+</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a><span class="k">def</span> <span class="nf">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="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-642"><a href="#L-642"><span class="linenos">642</span></a> <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-643"><a href="#L-643"><span class="linenos">643</span></a>
+</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a>
+</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a><span class="k">def</span> <span class="nf">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-646"><a href="#L-646"><span class="linenos">646</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-647"><a href="#L-647"><span class="linenos">647</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-648"><a href="#L-648"><span class="linenos">648</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-649"><a href="#L-649"><span class="linenos">649</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-650"><a href="#L-650"><span class="linenos">650</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">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="s2">&quot;date&quot;</span><span class="p">))</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a>
+</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="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="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="s2">&quot;date&quot;</span><span class="p">))</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a>
-</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <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-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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 class="n">expression</span><span class="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-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="p">)</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a>
-</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a>
-</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a><span class="k">def</span> <span class="nf">regexp_replace_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">RegexpReplace</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos">662</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_REPLACE does not support the following 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-663"><a href="#L-663"><span class="linenos">663</span></a>
-</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="s2">&quot;REGEXP_REPLACE&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 class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">]</span>
-</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="p">)</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a>
-</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a>
-</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos">672</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-673"><a href="#L-673"><span class="linenos">673</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-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos">677</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-678"><a href="#L-678"><span class="linenos">678</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-679"><a href="#L-679"><span class="linenos">679</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos">681</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-682"><a href="#L-682"><span class="linenos">682</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-683"><a href="#L-683"><span class="linenos">683</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-684"><a href="#L-684"><span class="linenos">684</span></a> <span class="k">else</span> <span class="n">node</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="p">)</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos">686</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="n">dialect</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-687"><a href="#L-687"><span class="linenos">687</span></a>
-</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="k">return</span> <span class="n">names</span>
-</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a>
-</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">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos">692</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">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-693"><a href="#L-693"><span class="linenos">693</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-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="n">simplify</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-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="k">return</span> <span class="n">expression</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><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</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-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a>
+</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a>
+</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="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-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">rest_args</span><span class="p">:</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span 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">arg</span><span class="p">)</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a>
+</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="k">return</span> <span class="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-664"><a href="#L-664"><span class="linenos">664</span></a>
+</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a>
+</span><span id="L-666"><a href="#L-666"><span class="linenos">666</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="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-667"><a href="#L-667"><span class="linenos">667</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="bp">self</span><span class="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 the following 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-670"><a href="#L-670"><span class="linenos">670</span></a>
+</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <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-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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 class="n">expression</span><span class="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-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><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a>
+</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a><span class="k">def</span> <span class="nf">regexp_replace_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">RegexpReplace</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-677"><a href="#L-677"><span class="linenos">677</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos">679</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_REPLACE does not support the following 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-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="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-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="s2">&quot;REGEXP_REPLACE&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 class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</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><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="n">names</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="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos">689</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-690"><a href="#L-690"><span class="linenos">690</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-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="k">else</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"> This case corresponds to aggregations without aliases being used as suffixes</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos">694</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-695"><a href="#L-695"><span class="linenos">695</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-696"><a href="#L-696"><span class="linenos">696</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos">698</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-699"><a href="#L-699"><span class="linenos">699</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-700"><a href="#L-700"><span class="linenos">700</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-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="k">else</span> <span class="n">node</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a> <span class="p">)</span>
+</span><span id="L-703"><a href="#L-703"><span class="linenos">703</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="n">dialect</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-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">return</span> <span class="n">names</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a>
+</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a>
+</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a><span class="k">def</span> <span class="nf">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos">709</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">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-710"><a href="#L-710"><span class="linenos">710</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-711"><a href="#L-711"><span class="linenos">711</span></a>
+</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a> <span class="n">simplify</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-713"><a href="#L-713"><span class="linenos">713</span></a>
+</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a>
+</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a>
+</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
+</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</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-719"><a href="#L-719"><span class="linenos">719</span></a>
+</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a>
+</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a><span class="c1"># Used to represent DATE_TRUNC in Doris, Postgres and Starrocks dialects</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</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">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">seq_get</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-724"><a href="#L-724"><span class="linenos">724</span></a>
+</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a>
+</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a><span class="k">def</span> <span class="nf">any_value_to_max_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAX&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-728"><a href="#L-728"><span class="linenos">728</span></a>
+</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a>
+</span><span id="L-730"><a href="#L-730"><span class="linenos">730</span></a><span class="c1"># Used to generate JSON_OBJECT with a comma in BigQuery and MySQL instead of colon</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span 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-732"><a href="#L-732"><span class="linenos">732</span></a> <span class="k">return</span> <span class="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>
@@ -1137,6 +1186,7 @@
</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><span id="Dialects-41"><a href="#Dialects-41"><span class="linenos">41</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
</span><span id="Dialects-42"><a href="#Dialects-42"><span class="linenos">42</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
+</span><span id="Dialects-43"><a href="#Dialects-43"><span class="linenos">43</span></a> <span class="n">Doris</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
</span></pre></div>
@@ -1396,6 +1446,18 @@
</div>
+ <div id="Dialects.Doris" class="classattr">
+ <div class="attr variable">
+ <span class="name">Doris</span> =
+<span class="default_value">&lt;<a href="#Dialects.Doris">Dialects.Doris</a>: &#39;doris&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Dialects.Doris"></a>
+
+
+
+ </div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
@@ -1485,169 +1547,172 @@
</span><span id="Dialect-147"><a href="#Dialect-147"><span class="linenos">147</span></a> <span class="c1"># Determines whether or not an unquoted identifier can start with a digit</span>
</span><span id="Dialect-148"><a href="#Dialect-148"><span class="linenos">148</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-149"><a href="#Dialect-149"><span class="linenos">149</span></a>
-</span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a> <span class="c1"># Determines whether or not CONCAT&#39;s arguments must be strings</span>
-</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a> <span class="c1"># Determines whether or not the DPIPE token (&#39;||&#39;) is a string concatenation operator</span>
+</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Dialect-152"><a href="#Dialect-152"><span class="linenos">152</span></a>
-</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</span></a> <span class="c1"># Determines how function names are going to be normalized</span>
-</span><span id="Dialect-154"><a href="#Dialect-154"><span class="linenos">154</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</span></a> <span class="c1"># Determines whether or not CONCAT&#39;s arguments must be strings</span>
+</span><span id="Dialect-154"><a href="#Dialect-154"><span class="linenos">154</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Dialect-155"><a href="#Dialect-155"><span class="linenos">155</span></a>
-</span><span id="Dialect-156"><a href="#Dialect-156"><span class="linenos">156</span></a> <span class="c1"># Indicates the default null ordering method to use if not explicitly set</span>
-</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a> <span class="c1"># Options are: &quot;nulls_are_small&quot;, &quot;nulls_are_large&quot;, &quot;nulls_are_last&quot;</span>
-</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</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-159"><a href="#Dialect-159"><span class="linenos">159</span></a>
-</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a> <span class="n">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-161"><a href="#Dialect-161"><span class="linenos">161</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-162"><a href="#Dialect-162"><span class="linenos">162</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-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="c1"># Custom time mappings in which the key represents dialect time format</span>
-</span><span id="Dialect-165"><a href="#Dialect-165"><span class="linenos">165</span></a> <span class="c1"># and the value represents a python time format</span>
-</span><span id="Dialect-166"><a href="#Dialect-166"><span class="linenos">166</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-167"><a href="#Dialect-167"><span class="linenos">167</span></a>
-</span><span id="Dialect-168"><a href="#Dialect-168"><span class="linenos">168</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
-</span><span id="Dialect-169"><a href="#Dialect-169"><span class="linenos">169</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
-</span><span id="Dialect-170"><a href="#Dialect-170"><span class="linenos">170</span></a> <span class="c1"># special syntax cast(x as date format &#39;yyyy&#39;) defaults to time_mapping</span>
-</span><span id="Dialect-171"><a href="#Dialect-171"><span class="linenos">171</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-172"><a href="#Dialect-172"><span class="linenos">172</span></a>
-</span><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</span></a> <span class="c1"># Columns that are auto-generated by the engine corresponding to this dialect</span>
-</span><span id="Dialect-174"><a href="#Dialect-174"><span class="linenos">174</span></a> <span class="c1"># Such columns may be excluded from SELECT * queries, for example</span>
-</span><span id="Dialect-175"><a href="#Dialect-175"><span class="linenos">175</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Dialect-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="c1"># Autofilled</span>
-</span><span id="Dialect-178"><a href="#Dialect-178"><span class="linenos">178</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
-</span><span id="Dialect-179"><a href="#Dialect-179"><span class="linenos">179</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
-</span><span id="Dialect-180"><a href="#Dialect-180"><span class="linenos">180</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
-</span><span id="Dialect-181"><a href="#Dialect-181"><span class="linenos">181</span></a>
-</span><span id="Dialect-182"><a href="#Dialect-182"><span class="linenos">182</span></a> <span class="c1"># A trie of the time_mapping keys</span>
-</span><span id="Dialect-183"><a href="#Dialect-183"><span class="linenos">183</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-184"><a href="#Dialect-184"><span class="linenos">184</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-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="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-187"><a href="#Dialect-187"><span class="linenos">187</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-156"><a href="#Dialect-156"><span class="linenos">156</span></a> <span class="c1"># Determines how function names are going to be normalized</span>
+</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</span></a>
+</span><span id="Dialect-159"><a href="#Dialect-159"><span class="linenos">159</span></a> <span class="c1"># Indicates the default null ordering method to use if not explicitly set</span>
+</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a> <span class="c1"># Options are: &quot;nulls_are_small&quot;, &quot;nulls_are_large&quot;, &quot;nulls_are_last&quot;</span>
+</span><span id="Dialect-161"><a href="#Dialect-161"><span class="linenos">161</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-162"><a href="#Dialect-162"><span class="linenos">162</span></a>
+</span><span id="Dialect-163"><a href="#Dialect-163"><span class="linenos">163</span></a> <span class="n">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-164"><a href="#Dialect-164"><span class="linenos">164</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-165"><a href="#Dialect-165"><span class="linenos">165</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-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="c1"># Custom time mappings in which the key represents dialect time format</span>
+</span><span id="Dialect-168"><a href="#Dialect-168"><span class="linenos">168</span></a> <span class="c1"># and the value represents a python time format</span>
+</span><span id="Dialect-169"><a href="#Dialect-169"><span class="linenos">169</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-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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
+</span><span id="Dialect-172"><a href="#Dialect-172"><span class="linenos">172</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
+</span><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</span></a> <span class="c1"># special syntax cast(x as date format &#39;yyyy&#39;) defaults to time_mapping</span>
+</span><span id="Dialect-174"><a href="#Dialect-174"><span class="linenos">174</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-175"><a href="#Dialect-175"><span class="linenos">175</span></a>
+</span><span id="Dialect-176"><a href="#Dialect-176"><span class="linenos">176</span></a> <span class="c1"># Columns that are auto-generated by the engine corresponding to this dialect</span>
+</span><span id="Dialect-177"><a href="#Dialect-177"><span class="linenos">177</span></a> <span class="c1"># Such columns may be excluded from SELECT * queries, for example</span>
+</span><span id="Dialect-178"><a href="#Dialect-178"><span class="linenos">178</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Dialect-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="c1"># Autofilled</span>
+</span><span id="Dialect-181"><a href="#Dialect-181"><span class="linenos">181</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="Dialect-182"><a href="#Dialect-182"><span class="linenos">182</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
+</span><span id="Dialect-183"><a href="#Dialect-183"><span class="linenos">183</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
+</span><span id="Dialect-184"><a href="#Dialect-184"><span class="linenos">184</span></a>
+</span><span id="Dialect-185"><a href="#Dialect-185"><span class="linenos">185</span></a> <span class="c1"># A trie of the time_mapping keys</span>
+</span><span id="Dialect-186"><a href="#Dialect-186"><span class="linenos">186</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-187"><a href="#Dialect-187"><span class="linenos">187</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-188"><a href="#Dialect-188"><span class="linenos">188</span></a>
-</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-191"><a href="#Dialect-191"><span class="linenos">191</span></a>
-</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
</span><span id="Dialect-194"><a href="#Dialect-194"><span class="linenos">194</span></a>
-</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</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-197"><a href="#Dialect-197"><span class="linenos">197</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-198"><a href="#Dialect-198"><span class="linenos">198</span></a> <span class="k">return</span> <span class="bp">cls</span>
-</span><span id="Dialect-199"><a href="#Dialect-199"><span class="linenos">199</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-200"><a href="#Dialect-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="Dialect-201"><a href="#Dialect-201"><span class="linenos">201</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-202"><a href="#Dialect-202"><span class="linenos">202</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-203"><a href="#Dialect-203"><span class="linenos">203</span></a>
-</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</span></a> <span class="n">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-205"><a href="#Dialect-205"><span class="linenos">205</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-206"><a href="#Dialect-206"><span class="linenos">206</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-207"><a href="#Dialect-207"><span class="linenos">207</span></a>
-</span><span id="Dialect-208"><a href="#Dialect-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">result</span>
-</span><span id="Dialect-209"><a href="#Dialect-209"><span class="linenos">209</span></a>
-</span><span id="Dialect-210"><a href="#Dialect-210"><span class="linenos">210</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</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-213"><a href="#Dialect-213"><span class="linenos">213</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-214"><a href="#Dialect-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="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</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-216"><a href="#Dialect-216"><span class="linenos">216</span></a> <span class="c1"># the time formats are quoted</span>
-</span><span id="Dialect-217"><a href="#Dialect-217"><span class="linenos">217</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
-</span><span id="Dialect-218"><a href="#Dialect-218"><span class="linenos">218</span></a> <span class="p">)</span>
-</span><span id="Dialect-219"><a href="#Dialect-219"><span class="linenos">219</span></a>
-</span><span id="Dialect-220"><a href="#Dialect-220"><span class="linenos">220</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-221"><a href="#Dialect-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="Dialect-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="nd">@classmethod</span>
+</span><span id="Dialect-199"><a href="#Dialect-199"><span class="linenos">199</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-200"><a href="#Dialect-200"><span class="linenos">200</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-201"><a href="#Dialect-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="bp">cls</span>
+</span><span id="Dialect-202"><a href="#Dialect-202"><span class="linenos">202</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-203"><a href="#Dialect-203"><span class="linenos">203</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</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-205"><a href="#Dialect-205"><span class="linenos">205</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-206"><a href="#Dialect-206"><span class="linenos">206</span></a>
+</span><span id="Dialect-207"><a href="#Dialect-207"><span class="linenos">207</span></a> <span class="n">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-208"><a href="#Dialect-208"><span class="linenos">208</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-209"><a href="#Dialect-209"><span class="linenos">209</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-210"><a href="#Dialect-210"><span class="linenos">210</span></a>
+</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</span></a>
+</span><span id="Dialect-213"><a href="#Dialect-213"><span class="linenos">213</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-214"><a href="#Dialect-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</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-216"><a href="#Dialect-216"><span class="linenos">216</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-217"><a href="#Dialect-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="nb">str</span><span class="p">):</span>
+</span><span id="Dialect-218"><a href="#Dialect-218"><span class="linenos">218</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-219"><a href="#Dialect-219"><span class="linenos">219</span></a> <span class="c1"># the time formats are quoted</span>
+</span><span id="Dialect-220"><a href="#Dialect-220"><span class="linenos">220</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
+</span><span id="Dialect-221"><a href="#Dialect-221"><span class="linenos">221</span></a> <span class="p">)</span>
</span><span id="Dialect-222"><a href="#Dialect-222"><span class="linenos">222</span></a>
-</span><span id="Dialect-223"><a href="#Dialect-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Dialect-224"><a href="#Dialect-224"><span class="linenos">224</span></a>
-</span><span id="Dialect-225"><a href="#Dialect-225"><span class="linenos">225</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-226"><a href="#Dialect-226"><span class="linenos">226</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect-227"><a href="#Dialect-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-228"><a href="#Dialect-228"><span class="linenos">228</span></a><span class="sd"> Normalizes an unquoted identifier to either lower or upper case, thus essentially</span>
-</span><span id="Dialect-229"><a href="#Dialect-229"><span class="linenos">229</span></a><span class="sd"> making it case-insensitive. If a dialect treats all identifiers as case-insensitive,</span>
-</span><span id="Dialect-230"><a href="#Dialect-230"><span class="linenos">230</span></a><span class="sd"> they will be normalized regardless of being quoted or not.</span>
-</span><span id="Dialect-231"><a href="#Dialect-231"><span class="linenos">231</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-232"><a href="#Dialect-232"><span class="linenos">232</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Dialect-233"><a href="#Dialect-233"><span class="linenos">233</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span>
-</span><span id="Dialect-234"><a href="#Dialect-234"><span class="linenos">234</span></a> <span class="p">):</span>
-</span><span id="Dialect-235"><a href="#Dialect-235"><span class="linenos">235</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect-236"><a href="#Dialect-236"><span class="linenos">236</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="Dialect-237"><a href="#Dialect-237"><span class="linenos">237</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Dialect-238"><a href="#Dialect-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span>
-</span><span id="Dialect-239"><a href="#Dialect-239"><span class="linenos">239</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
-</span><span id="Dialect-240"><a href="#Dialect-240"><span class="linenos">240</span></a> <span class="p">)</span>
-</span><span id="Dialect-241"><a href="#Dialect-241"><span class="linenos">241</span></a>
-</span><span id="Dialect-242"><a href="#Dialect-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Dialect-243"><a href="#Dialect-243"><span class="linenos">243</span></a>
-</span><span id="Dialect-244"><a href="#Dialect-244"><span class="linenos">244</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-245"><a href="#Dialect-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect-246"><a href="#Dialect-246"><span class="linenos">246</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
-</span><span id="Dialect-247"><a href="#Dialect-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Dialect-248"><a href="#Dialect-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Dialect-249"><a href="#Dialect-249"><span class="linenos">249</span></a>
-</span><span id="Dialect-250"><a href="#Dialect-250"><span class="linenos">250</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
-</span><span id="Dialect-251"><a href="#Dialect-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect-223"><a href="#Dialect-223"><span class="linenos">223</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-224"><a href="#Dialect-224"><span class="linenos">224</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+</span><span id="Dialect-225"><a href="#Dialect-225"><span class="linenos">225</span></a>
+</span><span id="Dialect-226"><a href="#Dialect-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-227"><a href="#Dialect-227"><span class="linenos">227</span></a>
+</span><span id="Dialect-228"><a href="#Dialect-228"><span class="linenos">228</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-229"><a href="#Dialect-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect-230"><a href="#Dialect-230"><span class="linenos">230</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-231"><a href="#Dialect-231"><span class="linenos">231</span></a><span class="sd"> Normalizes an unquoted identifier to either lower or upper case, thus essentially</span>
+</span><span id="Dialect-232"><a href="#Dialect-232"><span class="linenos">232</span></a><span class="sd"> making it case-insensitive. If a dialect treats all identifiers as case-insensitive,</span>
+</span><span id="Dialect-233"><a href="#Dialect-233"><span class="linenos">233</span></a><span class="sd"> they will be normalized regardless of being quoted or not.</span>
+</span><span id="Dialect-234"><a href="#Dialect-234"><span class="linenos">234</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-235"><a href="#Dialect-235"><span class="linenos">235</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Dialect-236"><a href="#Dialect-236"><span class="linenos">236</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span>
+</span><span id="Dialect-237"><a href="#Dialect-237"><span class="linenos">237</span></a> <span class="p">):</span>
+</span><span id="Dialect-238"><a href="#Dialect-238"><span class="linenos">238</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect-239"><a href="#Dialect-239"><span class="linenos">239</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="Dialect-240"><a href="#Dialect-240"><span class="linenos">240</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Dialect-241"><a href="#Dialect-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span>
+</span><span id="Dialect-242"><a href="#Dialect-242"><span class="linenos">242</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
+</span><span id="Dialect-243"><a href="#Dialect-243"><span class="linenos">243</span></a> <span class="p">)</span>
+</span><span id="Dialect-244"><a href="#Dialect-244"><span class="linenos">244</span></a>
+</span><span id="Dialect-245"><a href="#Dialect-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-246"><a href="#Dialect-246"><span class="linenos">246</span></a>
+</span><span id="Dialect-247"><a href="#Dialect-247"><span class="linenos">247</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-248"><a href="#Dialect-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect-249"><a href="#Dialect-249"><span class="linenos">249</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
+</span><span id="Dialect-250"><a href="#Dialect-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Dialect-251"><a href="#Dialect-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Dialect-252"><a href="#Dialect-252"><span class="linenos">252</span></a>
-</span><span id="Dialect-253"><a href="#Dialect-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-254"><a href="#Dialect-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect-255"><a href="#Dialect-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Dialect-256"><a href="#Dialect-256"><span class="linenos">256</span></a>
-</span><span id="Dialect-257"><a href="#Dialect-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect-258"><a href="#Dialect-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Dialect-259"><a href="#Dialect-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Dialect-260"><a href="#Dialect-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Dialect-261"><a href="#Dialect-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Dialect-262"><a href="#Dialect-262"><span class="linenos">262</span></a>
-</span><span id="Dialect-263"><a href="#Dialect-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Dialect-264"><a href="#Dialect-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Dialect-265"><a href="#Dialect-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-266"><a href="#Dialect-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Dialect-267"><a href="#Dialect-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Dialect-268"><a href="#Dialect-268"><span class="linenos">268</span></a>
-</span><span id="Dialect-269"><a href="#Dialect-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Dialect-270"><a href="#Dialect-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect-253"><a href="#Dialect-253"><span class="linenos">253</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
+</span><span id="Dialect-254"><a href="#Dialect-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect-255"><a href="#Dialect-255"><span class="linenos">255</span></a>
+</span><span id="Dialect-256"><a href="#Dialect-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-257"><a href="#Dialect-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect-258"><a href="#Dialect-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Dialect-259"><a href="#Dialect-259"><span class="linenos">259</span></a>
+</span><span id="Dialect-260"><a href="#Dialect-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect-261"><a href="#Dialect-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Dialect-262"><a href="#Dialect-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Dialect-263"><a href="#Dialect-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Dialect-264"><a href="#Dialect-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Dialect-265"><a href="#Dialect-265"><span class="linenos">265</span></a>
+</span><span id="Dialect-266"><a href="#Dialect-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Dialect-267"><a href="#Dialect-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Dialect-268"><a href="#Dialect-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-269"><a href="#Dialect-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Dialect-270"><a href="#Dialect-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Dialect-271"><a href="#Dialect-271"><span class="linenos">271</span></a>
-</span><span id="Dialect-272"><a href="#Dialect-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Dialect-273"><a href="#Dialect-273"><span class="linenos">273</span></a>
-</span><span id="Dialect-274"><a href="#Dialect-274"><span class="linenos">274</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-275"><a href="#Dialect-275"><span class="linenos">275</span></a> <span class="k">def</span> <span class="nf">quote_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect-276"><a href="#Dialect-276"><span class="linenos">276</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Dialect-277"><a href="#Dialect-277"><span class="linenos">277</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Dialect-278"><a href="#Dialect-278"><span class="linenos">278</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect-279"><a href="#Dialect-279"><span class="linenos">279</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
-</span><span id="Dialect-280"><a href="#Dialect-280"><span class="linenos">280</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Dialect-281"><a href="#Dialect-281"><span class="linenos">281</span></a> <span class="p">)</span>
-</span><span id="Dialect-282"><a href="#Dialect-282"><span class="linenos">282</span></a>
-</span><span id="Dialect-283"><a href="#Dialect-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Dialect-284"><a href="#Dialect-284"><span class="linenos">284</span></a>
-</span><span id="Dialect-285"><a href="#Dialect-285"><span class="linenos">285</span></a> <span class="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-286"><a href="#Dialect-286"><span class="linenos">286</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-272"><a href="#Dialect-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Dialect-273"><a href="#Dialect-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect-274"><a href="#Dialect-274"><span class="linenos">274</span></a>
+</span><span id="Dialect-275"><a href="#Dialect-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect-276"><a href="#Dialect-276"><span class="linenos">276</span></a>
+</span><span id="Dialect-277"><a href="#Dialect-277"><span class="linenos">277</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-278"><a href="#Dialect-278"><span class="linenos">278</span></a> <span class="k">def</span> <span class="nf">quote_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect-279"><a href="#Dialect-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">Identifier</span><span class="p">):</span>
+</span><span id="Dialect-280"><a href="#Dialect-280"><span class="linenos">280</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Dialect-281"><a href="#Dialect-281"><span class="linenos">281</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect-282"><a href="#Dialect-282"><span class="linenos">282</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
+</span><span id="Dialect-283"><a href="#Dialect-283"><span class="linenos">283</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Dialect-284"><a href="#Dialect-284"><span class="linenos">284</span></a> <span class="p">)</span>
+</span><span id="Dialect-285"><a href="#Dialect-285"><span class="linenos">285</span></a>
+</span><span id="Dialect-286"><a href="#Dialect-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Dialect-287"><a href="#Dialect-287"><span class="linenos">287</span></a>
-</span><span id="Dialect-288"><a href="#Dialect-288"><span class="linenos">288</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Dialect-289"><a href="#Dialect-289"><span class="linenos">289</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-290"><a href="#Dialect-290"><span class="linenos">290</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-291"><a href="#Dialect-291"><span class="linenos">291</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-292"><a href="#Dialect-292"><span class="linenos">292</span></a>
-</span><span id="Dialect-293"><a href="#Dialect-293"><span class="linenos">293</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-294"><a href="#Dialect-294"><span class="linenos">294</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-288"><a href="#Dialect-288"><span class="linenos">288</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-289"><a href="#Dialect-289"><span class="linenos">289</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-290"><a href="#Dialect-290"><span class="linenos">290</span></a>
+</span><span id="Dialect-291"><a href="#Dialect-291"><span class="linenos">291</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Dialect-292"><a href="#Dialect-292"><span class="linenos">292</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-293"><a href="#Dialect-293"><span class="linenos">293</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-294"><a href="#Dialect-294"><span class="linenos">294</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-295"><a href="#Dialect-295"><span class="linenos">295</span></a>
-</span><span id="Dialect-296"><a href="#Dialect-296"><span class="linenos">296</span></a> <span class="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-297"><a href="#Dialect-297"><span class="linenos">297</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-296"><a href="#Dialect-296"><span class="linenos">296</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-297"><a href="#Dialect-297"><span class="linenos">297</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-298"><a href="#Dialect-298"><span class="linenos">298</span></a>
-</span><span id="Dialect-299"><a href="#Dialect-299"><span class="linenos">299</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-300"><a href="#Dialect-300"><span class="linenos">300</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-299"><a href="#Dialect-299"><span class="linenos">299</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-300"><a href="#Dialect-300"><span class="linenos">300</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-301"><a href="#Dialect-301"><span class="linenos">301</span></a>
-</span><span id="Dialect-302"><a href="#Dialect-302"><span class="linenos">302</span></a> <span class="nd">@property</span>
-</span><span id="Dialect-303"><a href="#Dialect-303"><span class="linenos">303</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-304"><a href="#Dialect-304"><span class="linenos">304</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-305"><a href="#Dialect-305"><span class="linenos">305</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><span id="Dialect-306"><a href="#Dialect-306"><span class="linenos">306</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-307"><a href="#Dialect-307"><span class="linenos">307</span></a>
-</span><span id="Dialect-308"><a href="#Dialect-308"><span class="linenos">308</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-309"><a href="#Dialect-309"><span class="linenos">309</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Dialect-302"><a href="#Dialect-302"><span class="linenos">302</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-303"><a href="#Dialect-303"><span class="linenos">303</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-304"><a href="#Dialect-304"><span class="linenos">304</span></a>
+</span><span id="Dialect-305"><a href="#Dialect-305"><span class="linenos">305</span></a> <span class="nd">@property</span>
+</span><span id="Dialect-306"><a href="#Dialect-306"><span class="linenos">306</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-307"><a href="#Dialect-307"><span class="linenos">307</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-308"><a href="#Dialect-308"><span class="linenos">308</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><span id="Dialect-309"><a href="#Dialect-309"><span class="linenos">309</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-310"><a href="#Dialect-310"><span class="linenos">310</span></a>
-</span><span id="Dialect-311"><a href="#Dialect-311"><span class="linenos">311</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-312"><a href="#Dialect-312"><span class="linenos">312</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Dialect-311"><a href="#Dialect-311"><span class="linenos">311</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-312"><a href="#Dialect-312"><span class="linenos">312</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Dialect-313"><a href="#Dialect-313"><span class="linenos">313</span></a>
+</span><span id="Dialect-314"><a href="#Dialect-314"><span class="linenos">314</span></a> <span class="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-315"><a href="#Dialect-315"><span class="linenos">315</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -1713,6 +1778,18 @@
</div>
+ <div id="Dialect.DPIPE_IS_STRING_CONCAT" class="classattr">
+ <div class="attr variable">
+ <span class="name">DPIPE_IS_STRING_CONCAT</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Dialect.DPIPE_IS_STRING_CONCAT"></a>
+
+
+
+ </div>
<div id="Dialect.STRICT_STRING_CONCAT" class="classattr">
<div class="attr variable">
<span class="name">STRICT_STRING_CONCAT</span> =
@@ -1917,20 +1994,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-195"><a href="#Dialect.get_or_raise-195"><span class="linenos">195</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.get_or_raise-196"><a href="#Dialect.get_or_raise-196"><span class="linenos">196</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-197"><a href="#Dialect.get_or_raise-197"><span class="linenos">197</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-198"><a href="#Dialect.get_or_raise-198"><span class="linenos">198</span></a> <span class="k">return</span> <span class="bp">cls</span>
-</span><span id="Dialect.get_or_raise-199"><a href="#Dialect.get_or_raise-199"><span class="linenos">199</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-200"><a href="#Dialect.get_or_raise-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="Dialect.get_or_raise-201"><a href="#Dialect.get_or_raise-201"><span class="linenos">201</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-202"><a href="#Dialect.get_or_raise-202"><span class="linenos">202</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-203"><a href="#Dialect.get_or_raise-203"><span class="linenos">203</span></a>
-</span><span id="Dialect.get_or_raise-204"><a href="#Dialect.get_or_raise-204"><span class="linenos">204</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-205"><a href="#Dialect.get_or_raise-205"><span class="linenos">205</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-206"><a href="#Dialect.get_or_raise-206"><span class="linenos">206</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-207"><a href="#Dialect.get_or_raise-207"><span class="linenos">207</span></a>
-</span><span id="Dialect.get_or_raise-208"><a href="#Dialect.get_or_raise-208"><span class="linenos">208</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-198"><a href="#Dialect.get_or_raise-198"><span class="linenos">198</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.get_or_raise-199"><a href="#Dialect.get_or_raise-199"><span class="linenos">199</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-200"><a href="#Dialect.get_or_raise-200"><span class="linenos">200</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-201"><a href="#Dialect.get_or_raise-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="bp">cls</span>
+</span><span id="Dialect.get_or_raise-202"><a href="#Dialect.get_or_raise-202"><span class="linenos">202</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-203"><a href="#Dialect.get_or_raise-203"><span class="linenos">203</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="Dialect.get_or_raise-204"><a href="#Dialect.get_or_raise-204"><span class="linenos">204</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-205"><a href="#Dialect.get_or_raise-205"><span class="linenos">205</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-206"><a href="#Dialect.get_or_raise-206"><span class="linenos">206</span></a>
+</span><span id="Dialect.get_or_raise-207"><a href="#Dialect.get_or_raise-207"><span class="linenos">207</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-208"><a href="#Dialect.get_or_raise-208"><span class="linenos">208</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-209"><a href="#Dialect.get_or_raise-209"><span class="linenos">209</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-210"><a href="#Dialect.get_or_raise-210"><span class="linenos">210</span></a>
+</span><span id="Dialect.get_or_raise-211"><a href="#Dialect.get_or_raise-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -1949,20 +2026,20 @@
</div>
<a class="headerlink" href="#Dialect.format_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.format_time-210"><a href="#Dialect.format_time-210"><span class="linenos">210</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.format_time-211"><a href="#Dialect.format_time-211"><span class="linenos">211</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="Dialect.format_time-212"><a href="#Dialect.format_time-212"><span class="linenos">212</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-213"><a href="#Dialect.format_time-213"><span class="linenos">213</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-214"><a href="#Dialect.format_time-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="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Dialect.format_time-215"><a href="#Dialect.format_time-215"><span class="linenos">215</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-216"><a href="#Dialect.format_time-216"><span class="linenos">216</span></a> <span class="c1"># the time formats are quoted</span>
-</span><span id="Dialect.format_time-217"><a href="#Dialect.format_time-217"><span class="linenos">217</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
-</span><span id="Dialect.format_time-218"><a href="#Dialect.format_time-218"><span class="linenos">218</span></a> <span class="p">)</span>
-</span><span id="Dialect.format_time-219"><a href="#Dialect.format_time-219"><span class="linenos">219</span></a>
-</span><span id="Dialect.format_time-220"><a href="#Dialect.format_time-220"><span class="linenos">220</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-221"><a href="#Dialect.format_time-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.format_time-213"><a href="#Dialect.format_time-213"><span class="linenos">213</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.format_time-214"><a href="#Dialect.format_time-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="Dialect.format_time-215"><a href="#Dialect.format_time-215"><span class="linenos">215</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-216"><a href="#Dialect.format_time-216"><span class="linenos">216</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-217"><a href="#Dialect.format_time-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="nb">str</span><span class="p">):</span>
+</span><span id="Dialect.format_time-218"><a href="#Dialect.format_time-218"><span class="linenos">218</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-219"><a href="#Dialect.format_time-219"><span class="linenos">219</span></a> <span class="c1"># the time formats are quoted</span>
+</span><span id="Dialect.format_time-220"><a href="#Dialect.format_time-220"><span class="linenos">220</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
+</span><span id="Dialect.format_time-221"><a href="#Dialect.format_time-221"><span class="linenos">221</span></a> <span class="p">)</span>
</span><span id="Dialect.format_time-222"><a href="#Dialect.format_time-222"><span class="linenos">222</span></a>
-</span><span id="Dialect.format_time-223"><a href="#Dialect.format_time-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect.format_time-223"><a href="#Dialect.format_time-223"><span class="linenos">223</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-224"><a href="#Dialect.format_time-224"><span class="linenos">224</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+</span><span id="Dialect.format_time-225"><a href="#Dialect.format_time-225"><span class="linenos">225</span></a>
+</span><span id="Dialect.format_time-226"><a href="#Dialect.format_time-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1981,24 +2058,24 @@
</div>
<a class="headerlink" href="#Dialect.normalize_identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.normalize_identifier-225"><a href="#Dialect.normalize_identifier-225"><span class="linenos">225</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.normalize_identifier-226"><a href="#Dialect.normalize_identifier-226"><span class="linenos">226</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect.normalize_identifier-227"><a href="#Dialect.normalize_identifier-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect.normalize_identifier-228"><a href="#Dialect.normalize_identifier-228"><span class="linenos">228</span></a><span class="sd"> Normalizes an unquoted identifier to either lower or upper case, thus essentially</span>
-</span><span id="Dialect.normalize_identifier-229"><a href="#Dialect.normalize_identifier-229"><span class="linenos">229</span></a><span class="sd"> making it case-insensitive. If a dialect treats all identifiers as case-insensitive,</span>
-</span><span id="Dialect.normalize_identifier-230"><a href="#Dialect.normalize_identifier-230"><span class="linenos">230</span></a><span class="sd"> they will be normalized regardless of being quoted or not.</span>
-</span><span id="Dialect.normalize_identifier-231"><a href="#Dialect.normalize_identifier-231"><span class="linenos">231</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect.normalize_identifier-232"><a href="#Dialect.normalize_identifier-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">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Dialect.normalize_identifier-233"><a href="#Dialect.normalize_identifier-233"><span class="linenos">233</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span>
-</span><span id="Dialect.normalize_identifier-234"><a href="#Dialect.normalize_identifier-234"><span class="linenos">234</span></a> <span class="p">):</span>
-</span><span id="Dialect.normalize_identifier-235"><a href="#Dialect.normalize_identifier-235"><span class="linenos">235</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect.normalize_identifier-236"><a href="#Dialect.normalize_identifier-236"><span class="linenos">236</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="Dialect.normalize_identifier-237"><a href="#Dialect.normalize_identifier-237"><span class="linenos">237</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Dialect.normalize_identifier-238"><a href="#Dialect.normalize_identifier-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span>
-</span><span id="Dialect.normalize_identifier-239"><a href="#Dialect.normalize_identifier-239"><span class="linenos">239</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
-</span><span id="Dialect.normalize_identifier-240"><a href="#Dialect.normalize_identifier-240"><span class="linenos">240</span></a> <span class="p">)</span>
-</span><span id="Dialect.normalize_identifier-241"><a href="#Dialect.normalize_identifier-241"><span class="linenos">241</span></a>
-</span><span id="Dialect.normalize_identifier-242"><a href="#Dialect.normalize_identifier-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.normalize_identifier-228"><a href="#Dialect.normalize_identifier-228"><span class="linenos">228</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.normalize_identifier-229"><a href="#Dialect.normalize_identifier-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect.normalize_identifier-230"><a href="#Dialect.normalize_identifier-230"><span class="linenos">230</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect.normalize_identifier-231"><a href="#Dialect.normalize_identifier-231"><span class="linenos">231</span></a><span class="sd"> Normalizes an unquoted identifier to either lower or upper case, thus essentially</span>
+</span><span id="Dialect.normalize_identifier-232"><a href="#Dialect.normalize_identifier-232"><span class="linenos">232</span></a><span class="sd"> making it case-insensitive. If a dialect treats all identifiers as case-insensitive,</span>
+</span><span id="Dialect.normalize_identifier-233"><a href="#Dialect.normalize_identifier-233"><span class="linenos">233</span></a><span class="sd"> they will be normalized regardless of being quoted or not.</span>
+</span><span id="Dialect.normalize_identifier-234"><a href="#Dialect.normalize_identifier-234"><span class="linenos">234</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect.normalize_identifier-235"><a href="#Dialect.normalize_identifier-235"><span class="linenos">235</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Dialect.normalize_identifier-236"><a href="#Dialect.normalize_identifier-236"><span class="linenos">236</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span>
+</span><span id="Dialect.normalize_identifier-237"><a href="#Dialect.normalize_identifier-237"><span class="linenos">237</span></a> <span class="p">):</span>
+</span><span id="Dialect.normalize_identifier-238"><a href="#Dialect.normalize_identifier-238"><span class="linenos">238</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect.normalize_identifier-239"><a href="#Dialect.normalize_identifier-239"><span class="linenos">239</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="Dialect.normalize_identifier-240"><a href="#Dialect.normalize_identifier-240"><span class="linenos">240</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Dialect.normalize_identifier-241"><a href="#Dialect.normalize_identifier-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span>
+</span><span id="Dialect.normalize_identifier-242"><a href="#Dialect.normalize_identifier-242"><span class="linenos">242</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
+</span><span id="Dialect.normalize_identifier-243"><a href="#Dialect.normalize_identifier-243"><span class="linenos">243</span></a> <span class="p">)</span>
+</span><span id="Dialect.normalize_identifier-244"><a href="#Dialect.normalize_identifier-244"><span class="linenos">244</span></a>
+</span><span id="Dialect.normalize_identifier-245"><a href="#Dialect.normalize_identifier-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -2021,14 +2098,14 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.case_sensitive"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.case_sensitive-244"><a href="#Dialect.case_sensitive-244"><span class="linenos">244</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.case_sensitive-245"><a href="#Dialect.case_sensitive-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect.case_sensitive-246"><a href="#Dialect.case_sensitive-246"><span class="linenos">246</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
-</span><span id="Dialect.case_sensitive-247"><a href="#Dialect.case_sensitive-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Dialect.case_sensitive-248"><a href="#Dialect.case_sensitive-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Dialect.case_sensitive-249"><a href="#Dialect.case_sensitive-249"><span class="linenos">249</span></a>
-</span><span id="Dialect.case_sensitive-250"><a href="#Dialect.case_sensitive-250"><span class="linenos">250</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
-</span><span id="Dialect.case_sensitive-251"><a href="#Dialect.case_sensitive-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.case_sensitive-247"><a href="#Dialect.case_sensitive-247"><span class="linenos">247</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.case_sensitive-248"><a href="#Dialect.case_sensitive-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect.case_sensitive-249"><a href="#Dialect.case_sensitive-249"><span class="linenos">249</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
+</span><span id="Dialect.case_sensitive-250"><a href="#Dialect.case_sensitive-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Dialect.case_sensitive-251"><a href="#Dialect.case_sensitive-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect.case_sensitive-252"><a href="#Dialect.case_sensitive-252"><span class="linenos">252</span></a>
+</span><span id="Dialect.case_sensitive-253"><a href="#Dialect.case_sensitive-253"><span class="linenos">253</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
+</span><span id="Dialect.case_sensitive-254"><a href="#Dialect.case_sensitive-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
</span></pre></div>
@@ -2049,26 +2126,26 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.can_identify-253"><a href="#Dialect.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.can_identify-254"><a href="#Dialect.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect.can_identify-255"><a href="#Dialect.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Dialect.can_identify-256"><a href="#Dialect.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Dialect.can_identify-257"><a href="#Dialect.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect.can_identify-258"><a href="#Dialect.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Dialect.can_identify-259"><a href="#Dialect.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Dialect.can_identify-260"><a href="#Dialect.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Dialect.can_identify-261"><a href="#Dialect.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Dialect.can_identify-262"><a href="#Dialect.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Dialect.can_identify-263"><a href="#Dialect.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Dialect.can_identify-264"><a href="#Dialect.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Dialect.can_identify-265"><a href="#Dialect.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect.can_identify-266"><a href="#Dialect.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Dialect.can_identify-267"><a href="#Dialect.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Dialect.can_identify-268"><a href="#Dialect.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Dialect.can_identify-269"><a href="#Dialect.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Dialect.can_identify-270"><a href="#Dialect.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.can_identify-256"><a href="#Dialect.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.can_identify-257"><a href="#Dialect.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect.can_identify-258"><a href="#Dialect.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Dialect.can_identify-259"><a href="#Dialect.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Dialect.can_identify-260"><a href="#Dialect.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect.can_identify-261"><a href="#Dialect.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Dialect.can_identify-262"><a href="#Dialect.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Dialect.can_identify-263"><a href="#Dialect.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Dialect.can_identify-264"><a href="#Dialect.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Dialect.can_identify-265"><a href="#Dialect.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Dialect.can_identify-266"><a href="#Dialect.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Dialect.can_identify-267"><a href="#Dialect.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Dialect.can_identify-268"><a href="#Dialect.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect.can_identify-269"><a href="#Dialect.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Dialect.can_identify-270"><a href="#Dialect.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Dialect.can_identify-271"><a href="#Dialect.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Dialect.can_identify-272"><a href="#Dialect.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect.can_identify-272"><a href="#Dialect.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Dialect.can_identify-273"><a href="#Dialect.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect.can_identify-274"><a href="#Dialect.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Dialect.can_identify-275"><a href="#Dialect.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2103,16 +2180,16 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.quote_identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.quote_identifier-274"><a href="#Dialect.quote_identifier-274"><span class="linenos">274</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.quote_identifier-275"><a href="#Dialect.quote_identifier-275"><span class="linenos">275</span></a> <span class="k">def</span> <span class="nf">quote_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect.quote_identifier-276"><a href="#Dialect.quote_identifier-276"><span class="linenos">276</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Dialect.quote_identifier-277"><a href="#Dialect.quote_identifier-277"><span class="linenos">277</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Dialect.quote_identifier-278"><a href="#Dialect.quote_identifier-278"><span class="linenos">278</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect.quote_identifier-279"><a href="#Dialect.quote_identifier-279"><span class="linenos">279</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
-</span><span id="Dialect.quote_identifier-280"><a href="#Dialect.quote_identifier-280"><span class="linenos">280</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Dialect.quote_identifier-281"><a href="#Dialect.quote_identifier-281"><span class="linenos">281</span></a> <span class="p">)</span>
-</span><span id="Dialect.quote_identifier-282"><a href="#Dialect.quote_identifier-282"><span class="linenos">282</span></a>
-</span><span id="Dialect.quote_identifier-283"><a href="#Dialect.quote_identifier-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.quote_identifier-277"><a href="#Dialect.quote_identifier-277"><span class="linenos">277</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.quote_identifier-278"><a href="#Dialect.quote_identifier-278"><span class="linenos">278</span></a> <span class="k">def</span> <span class="nf">quote_identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect.quote_identifier-279"><a href="#Dialect.quote_identifier-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">Identifier</span><span class="p">):</span>
+</span><span id="Dialect.quote_identifier-280"><a href="#Dialect.quote_identifier-280"><span class="linenos">280</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Dialect.quote_identifier-281"><a href="#Dialect.quote_identifier-281"><span class="linenos">281</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect.quote_identifier-282"><a href="#Dialect.quote_identifier-282"><span class="linenos">282</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
+</span><span id="Dialect.quote_identifier-283"><a href="#Dialect.quote_identifier-283"><span class="linenos">283</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Dialect.quote_identifier-284"><a href="#Dialect.quote_identifier-284"><span class="linenos">284</span></a> <span class="p">)</span>
+</span><span id="Dialect.quote_identifier-285"><a href="#Dialect.quote_identifier-285"><span class="linenos">285</span></a>
+</span><span id="Dialect.quote_identifier-286"><a href="#Dialect.quote_identifier-286"><span class="linenos">286</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -2130,8 +2207,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.parse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse-285"><a href="#Dialect.parse-285"><span class="linenos">285</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-286"><a href="#Dialect.parse-286"><span class="linenos">286</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-288"><a href="#Dialect.parse-288"><span class="linenos">288</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-289"><a href="#Dialect.parse-289"><span class="linenos">289</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>
@@ -2149,10 +2226,10 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.parse_into"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse_into-288"><a href="#Dialect.parse_into-288"><span class="linenos">288</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Dialect.parse_into-289"><a href="#Dialect.parse_into-289"><span class="linenos">289</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-290"><a href="#Dialect.parse_into-290"><span class="linenos">290</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-291"><a href="#Dialect.parse_into-291"><span class="linenos">291</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-291"><a href="#Dialect.parse_into-291"><span class="linenos">291</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Dialect.parse_into-292"><a href="#Dialect.parse_into-292"><span class="linenos">292</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-293"><a href="#Dialect.parse_into-293"><span class="linenos">293</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-294"><a href="#Dialect.parse_into-294"><span class="linenos">294</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>
@@ -2170,8 +2247,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.generate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generate-293"><a href="#Dialect.generate-293"><span class="linenos">293</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-294"><a href="#Dialect.generate-294"><span class="linenos">294</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-296"><a href="#Dialect.generate-296"><span class="linenos">296</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-297"><a href="#Dialect.generate-297"><span class="linenos">297</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>
@@ -2189,8 +2266,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.transpile"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.transpile-296"><a href="#Dialect.transpile-296"><span class="linenos">296</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-297"><a href="#Dialect.transpile-297"><span class="linenos">297</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-299"><a href="#Dialect.transpile-299"><span class="linenos">299</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-300"><a href="#Dialect.transpile-300"><span class="linenos">300</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>
@@ -2208,8 +2285,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.tokenize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenize-299"><a href="#Dialect.tokenize-299"><span class="linenos">299</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-300"><a href="#Dialect.tokenize-300"><span class="linenos">300</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-302"><a href="#Dialect.tokenize-302"><span class="linenos">302</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-303"><a href="#Dialect.tokenize-303"><span class="linenos">303</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>
@@ -2238,8 +2315,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-308"><a href="#Dialect.parser-308"><span class="linenos">308</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-309"><a href="#Dialect.parser-309"><span class="linenos">309</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-311"><a href="#Dialect.parser-311"><span class="linenos">311</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-312"><a href="#Dialect.parser-312"><span class="linenos">312</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -2257,8 +2334,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#Dialect.generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-311"><a href="#Dialect.generator-311"><span class="linenos">311</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-312"><a href="#Dialect.generator-312"><span class="linenos">312</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-314"><a href="#Dialect.generator-314"><span class="linenos">314</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-315"><a href="#Dialect.generator-315"><span class="linenos">315</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -2410,8 +2487,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#rename_func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="rename_func-318"><a href="#rename_func-318"><span class="linenos">318</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-319"><a href="#rename_func-319"><span class="linenos">319</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-321"><a href="#rename_func-321"><span class="linenos">321</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-322"><a href="#rename_func-322"><span class="linenos">322</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>
@@ -2429,10 +2506,10 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#approx_count_distinct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="approx_count_distinct_sql-322"><a href="#approx_count_distinct_sql-322"><span class="linenos">322</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-323"><a href="#approx_count_distinct_sql-323"><span class="linenos">323</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-324"><a href="#approx_count_distinct_sql-324"><span class="linenos">324</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-325"><a href="#approx_count_distinct_sql-325"><span class="linenos">325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="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-325"><a href="#approx_count_distinct_sql-325"><span class="linenos">325</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-326"><a href="#approx_count_distinct_sql-326"><span class="linenos">326</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-327"><a href="#approx_count_distinct_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;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
+</span><span id="approx_count_distinct_sql-328"><a href="#approx_count_distinct_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="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>
@@ -2450,10 +2527,10 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#if_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-328"><a href="#if_sql-328"><span class="linenos">328</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-329"><a href="#if_sql-329"><span class="linenos">329</span></a> <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-330"><a href="#if_sql-330"><span class="linenos">330</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-331"><a href="#if_sql-331"><span class="linenos">331</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-331"><a href="#if_sql-331"><span class="linenos">331</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-332"><a href="#if_sql-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><span id="if_sql-333"><a href="#if_sql-333"><span class="linenos">333</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-334"><a href="#if_sql-334"><span class="linenos">334</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2471,8 +2548,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#arrow_json_extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_sql-334"><a href="#arrow_json_extract_sql-334"><span class="linenos">334</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-335"><a href="#arrow_json_extract_sql-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-337"><a href="#arrow_json_extract_sql-337"><span class="linenos">337</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-338"><a href="#arrow_json_extract_sql-338"><span class="linenos">338</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -2490,10 +2567,10 @@ they will be normalized regardless of being quoted or not.</p>
</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-338"><a href="#arrow_json_extract_scalar_sql-338"><span class="linenos">338</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-339"><a href="#arrow_json_extract_scalar_sql-339"><span class="linenos">339</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-340"><a href="#arrow_json_extract_scalar_sql-340"><span class="linenos">340</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-341"><a href="#arrow_json_extract_scalar_sql-341"><span class="linenos">341</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-341"><a href="#arrow_json_extract_scalar_sql-341"><span class="linenos">341</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-342"><a href="#arrow_json_extract_scalar_sql-342"><span class="linenos">342</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-343"><a href="#arrow_json_extract_scalar_sql-343"><span class="linenos">343</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-344"><a href="#arrow_json_extract_scalar_sql-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -2511,8 +2588,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#inline_array_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="inline_array_sql-344"><a href="#inline_array_sql-344"><span class="linenos">344</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-345"><a href="#inline_array_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="bp">self</span><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-347"><a href="#inline_array_sql-347"><span class="linenos">347</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-348"><a href="#inline_array_sql-348"><span class="linenos">348</span></a> <span class="k">return</span> <span class="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>
@@ -2530,12 +2607,12 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_ilike_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_ilike_sql-348"><a href="#no_ilike_sql-348"><span class="linenos">348</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-349"><a href="#no_ilike_sql-349"><span class="linenos">349</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-350"><a href="#no_ilike_sql-350"><span class="linenos">350</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-351"><a href="#no_ilike_sql-351"><span class="linenos">351</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="no_ilike_sql-352"><a href="#no_ilike_sql-352"><span class="linenos">352</span></a> <span class="p">)</span>
-</span><span id="no_ilike_sql-353"><a href="#no_ilike_sql-353"><span class="linenos">353</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_ilike_sql-351"><a href="#no_ilike_sql-351"><span class="linenos">351</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-352"><a href="#no_ilike_sql-352"><span class="linenos">352</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-353"><a href="#no_ilike_sql-353"><span class="linenos">353</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-354"><a href="#no_ilike_sql-354"><span class="linenos">354</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="no_ilike_sql-355"><a href="#no_ilike_sql-355"><span class="linenos">355</span></a> <span class="p">)</span>
+</span><span id="no_ilike_sql-356"><a href="#no_ilike_sql-356"><span class="linenos">356</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2553,9 +2630,9 @@ they will be normalized regardless of being quoted or not.</p>
</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-356"><a href="#no_paren_current_date_sql-356"><span class="linenos">356</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-357"><a href="#no_paren_current_date_sql-357"><span class="linenos">357</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-358"><a href="#no_paren_current_date_sql-358"><span class="linenos">358</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-359"><a href="#no_paren_current_date_sql-359"><span class="linenos">359</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-360"><a href="#no_paren_current_date_sql-360"><span class="linenos">360</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-361"><a href="#no_paren_current_date_sql-361"><span class="linenos">361</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>
@@ -2573,11 +2650,11 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_recursive_cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_recursive_cte_sql-361"><a href="#no_recursive_cte_sql-361"><span class="linenos">361</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-362"><a href="#no_recursive_cte_sql-362"><span class="linenos">362</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-363"><a href="#no_recursive_cte_sql-363"><span class="linenos">363</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-364"><a href="#no_recursive_cte_sql-364"><span class="linenos">364</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-365"><a href="#no_recursive_cte_sql-365"><span class="linenos">365</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-364"><a href="#no_recursive_cte_sql-364"><span class="linenos">364</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-365"><a href="#no_recursive_cte_sql-365"><span class="linenos">365</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-366"><a href="#no_recursive_cte_sql-366"><span class="linenos">366</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-367"><a href="#no_recursive_cte_sql-367"><span class="linenos">367</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-368"><a href="#no_recursive_cte_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">with_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2595,10 +2672,10 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_safe_divide_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_safe_divide_sql-368"><a href="#no_safe_divide_sql-368"><span class="linenos">368</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-369"><a href="#no_safe_divide_sql-369"><span class="linenos">369</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-370"><a href="#no_safe_divide_sql-370"><span class="linenos">370</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-371"><a href="#no_safe_divide_sql-371"><span class="linenos">371</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-371"><a href="#no_safe_divide_sql-371"><span class="linenos">371</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-372"><a href="#no_safe_divide_sql-372"><span class="linenos">372</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-373"><a href="#no_safe_divide_sql-373"><span class="linenos">373</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-374"><a href="#no_safe_divide_sql-374"><span class="linenos">374</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>
@@ -2616,9 +2693,9 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_tablesample_sql-374"><a href="#no_tablesample_sql-374"><span class="linenos">374</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-375"><a href="#no_tablesample_sql-375"><span class="linenos">375</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-376"><a href="#no_tablesample_sql-376"><span class="linenos">376</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-377"><a href="#no_tablesample_sql-377"><span class="linenos">377</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-378"><a href="#no_tablesample_sql-378"><span class="linenos">378</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-379"><a href="#no_tablesample_sql-379"><span class="linenos">379</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>
@@ -2636,9 +2713,9 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_pivot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_pivot_sql-379"><a href="#no_pivot_sql-379"><span class="linenos">379</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-380"><a href="#no_pivot_sql-380"><span class="linenos">380</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-381"><a href="#no_pivot_sql-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_pivot_sql-382"><a href="#no_pivot_sql-382"><span class="linenos">382</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-383"><a href="#no_pivot_sql-383"><span class="linenos">383</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-384"><a href="#no_pivot_sql-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -2656,8 +2733,8 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_trycast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_trycast_sql-384"><a href="#no_trycast_sql-384"><span class="linenos">384</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-385"><a href="#no_trycast_sql-385"><span class="linenos">385</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-387"><a href="#no_trycast_sql-387"><span class="linenos">387</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-388"><a href="#no_trycast_sql-388"><span class="linenos">388</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>
@@ -2675,9 +2752,9 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_properties_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_properties_sql-388"><a href="#no_properties_sql-388"><span class="linenos">388</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-389"><a href="#no_properties_sql-389"><span class="linenos">389</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-390"><a href="#no_properties_sql-390"><span class="linenos">390</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-391"><a href="#no_properties_sql-391"><span class="linenos">391</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-392"><a href="#no_properties_sql-392"><span class="linenos">392</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-393"><a href="#no_properties_sql-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -2695,11 +2772,11 @@ they will be normalized regardless of being quoted or not.</p>
</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-393"><a href="#no_comment_column_constraint_sql-393"><span class="linenos">393</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-394"><a href="#no_comment_column_constraint_sql-394"><span class="linenos">394</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-395"><a href="#no_comment_column_constraint_sql-395"><span class="linenos">395</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-396"><a href="#no_comment_column_constraint_sql-396"><span class="linenos">396</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-397"><a href="#no_comment_column_constraint_sql-397"><span class="linenos">397</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-396"><a href="#no_comment_column_constraint_sql-396"><span class="linenos">396</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-397"><a href="#no_comment_column_constraint_sql-397"><span class="linenos">397</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-398"><a href="#no_comment_column_constraint_sql-398"><span class="linenos">398</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-399"><a href="#no_comment_column_constraint_sql-399"><span class="linenos">399</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-400"><a href="#no_comment_column_constraint_sql-400"><span class="linenos">400</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -2717,9 +2794,9 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#no_map_from_entries_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_map_from_entries_sql-400"><a href="#no_map_from_entries_sql-400"><span class="linenos">400</span></a><span class="k">def</span> <span class="nf">no_map_from_entries_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">MapFromEntries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_map_from_entries_sql-401"><a href="#no_map_from_entries_sql-401"><span class="linenos">401</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;MAP_FROM_ENTRIES unsupported&quot;</span><span class="p">)</span>
-</span><span id="no_map_from_entries_sql-402"><a href="#no_map_from_entries_sql-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_map_from_entries_sql-403"><a href="#no_map_from_entries_sql-403"><span class="linenos">403</span></a><span class="k">def</span> <span class="nf">no_map_from_entries_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">MapFromEntries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_map_from_entries_sql-404"><a href="#no_map_from_entries_sql-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;MAP_FROM_ENTRIES unsupported&quot;</span><span class="p">)</span>
+</span><span id="no_map_from_entries_sql-405"><a href="#no_map_from_entries_sql-405"><span class="linenos">405</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -2737,13 +2814,13 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#str_position_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="str_position_sql-405"><a href="#str_position_sql-405"><span class="linenos">405</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-406"><a href="#str_position_sql-406"><span class="linenos">406</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-407"><a href="#str_position_sql-407"><span class="linenos">407</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-408"><a href="#str_position_sql-408"><span class="linenos">408</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-409"><a href="#str_position_sql-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
-</span><span id="str_position_sql-410"><a href="#str_position_sql-410"><span class="linenos">410</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-411"><a href="#str_position_sql-411"><span class="linenos">411</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-408"><a href="#str_position_sql-408"><span class="linenos">408</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-409"><a href="#str_position_sql-409"><span class="linenos">409</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-410"><a href="#str_position_sql-410"><span class="linenos">410</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-411"><a href="#str_position_sql-411"><span class="linenos">411</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-412"><a href="#str_position_sql-412"><span class="linenos">412</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
+</span><span id="str_position_sql-413"><a href="#str_position_sql-413"><span class="linenos">413</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-414"><a href="#str_position_sql-414"><span class="linenos">414</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>
@@ -2761,10 +2838,10 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#struct_extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="struct_extract_sql-414"><a href="#struct_extract_sql-414"><span class="linenos">414</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-415"><a href="#struct_extract_sql-415"><span class="linenos">415</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-416"><a href="#struct_extract_sql-416"><span class="linenos">416</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="o">.</span><span class="n">copy</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-417"><a href="#struct_extract_sql-417"><span class="linenos">417</span></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-417"><a href="#struct_extract_sql-417"><span class="linenos">417</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-418"><a href="#struct_extract_sql-418"><span class="linenos">418</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="struct_extract_sql-419"><a href="#struct_extract_sql-419"><span class="linenos">419</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">.</span><span 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">to_identifier</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">name</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="struct_extract_sql-420"><a href="#struct_extract_sql-420"><span class="linenos">420</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2782,22 +2859,22 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#var_map_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="var_map_sql-420"><a href="#var_map_sql-420"><span class="linenos">420</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
-</span><span id="var_map_sql-421"><a href="#var_map_sql-421"><span class="linenos">421</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-422"><a href="#var_map_sql-422"><span class="linenos">422</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-423"><a href="#var_map_sql-423"><span class="linenos">423</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-424"><a href="#var_map_sql-424"><span class="linenos">424</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-425"><a href="#var_map_sql-425"><span class="linenos">425</span></a>
-</span><span id="var_map_sql-426"><a href="#var_map_sql-426"><span class="linenos">426</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-427"><a href="#var_map_sql-427"><span class="linenos">427</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-428"><a href="#var_map_sql-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 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-429"><a href="#var_map_sql-429"><span class="linenos">429</span></a>
-</span><span id="var_map_sql-430"><a href="#var_map_sql-430"><span class="linenos">430</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="var_map_sql-431"><a href="#var_map_sql-431"><span class="linenos">431</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-432"><a href="#var_map_sql-432"><span class="linenos">432</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-433"><a href="#var_map_sql-433"><span class="linenos">433</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-434"><a href="#var_map_sql-434"><span class="linenos">434</span></a>
-</span><span id="var_map_sql-435"><a href="#var_map_sql-435"><span class="linenos">435</span></a> <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-423"><a href="#var_map_sql-423"><span class="linenos">423</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
+</span><span id="var_map_sql-424"><a href="#var_map_sql-424"><span class="linenos">424</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-425"><a href="#var_map_sql-425"><span class="linenos">425</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-426"><a href="#var_map_sql-426"><span class="linenos">426</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-427"><a href="#var_map_sql-427"><span class="linenos">427</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-428"><a href="#var_map_sql-428"><span class="linenos">428</span></a>
+</span><span id="var_map_sql-429"><a href="#var_map_sql-429"><span class="linenos">429</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-430"><a href="#var_map_sql-430"><span class="linenos">430</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-431"><a href="#var_map_sql-431"><span class="linenos">431</span></a> <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-432"><a href="#var_map_sql-432"><span class="linenos">432</span></a>
+</span><span id="var_map_sql-433"><a href="#var_map_sql-433"><span class="linenos">433</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="var_map_sql-434"><a href="#var_map_sql-434"><span class="linenos">434</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-435"><a href="#var_map_sql-435"><span class="linenos">435</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-436"><a href="#var_map_sql-436"><span class="linenos">436</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-437"><a href="#var_map_sql-437"><span class="linenos">437</span></a>
+</span><span id="var_map_sql-438"><a href="#var_map_sql-438"><span class="linenos">438</span></a> <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>
@@ -2815,30 +2892,30 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#format_time_lambda"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="format_time_lambda-438"><a href="#format_time_lambda-438"><span class="linenos">438</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
-</span><span id="format_time_lambda-439"><a href="#format_time_lambda-439"><span class="linenos">439</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-440"><a href="#format_time_lambda-440"><span class="linenos">440</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="format_time_lambda-441"><a href="#format_time_lambda-441"><span class="linenos">441</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
-</span><span id="format_time_lambda-442"><a href="#format_time_lambda-442"><span class="linenos">442</span></a>
-</span><span id="format_time_lambda-443"><a href="#format_time_lambda-443"><span class="linenos">443</span></a><span class="sd"> Args:</span>
-</span><span id="format_time_lambda-444"><a href="#format_time_lambda-444"><span class="linenos">444</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="format_time_lambda-445"><a href="#format_time_lambda-445"><span class="linenos">445</span></a><span class="sd"> dialect: target sql dialect.</span>
-</span><span id="format_time_lambda-446"><a href="#format_time_lambda-446"><span class="linenos">446</span></a><span class="sd"> default: the default format, True being time.</span>
-</span><span id="format_time_lambda-447"><a href="#format_time_lambda-447"><span class="linenos">447</span></a>
-</span><span id="format_time_lambda-448"><a href="#format_time_lambda-448"><span class="linenos">448</span></a><span class="sd"> Returns:</span>
-</span><span id="format_time_lambda-449"><a href="#format_time_lambda-449"><span class="linenos">449</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-450"><a href="#format_time_lambda-450"><span class="linenos">450</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="format_time_lambda-451"><a href="#format_time_lambda-451"><span class="linenos">451</span></a>
-</span><span id="format_time_lambda-452"><a href="#format_time_lambda-452"><span class="linenos">452</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">List</span><span class="p">):</span>
-</span><span id="format_time_lambda-453"><a href="#format_time_lambda-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
-</span><span id="format_time_lambda-454"><a href="#format_time_lambda-454"><span class="linenos">454</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-455"><a href="#format_time_lambda-455"><span class="linenos">455</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-456"><a href="#format_time_lambda-456"><span class="linenos">456</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-457"><a href="#format_time_lambda-457"><span class="linenos">457</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-458"><a href="#format_time_lambda-458"><span class="linenos">458</span></a> <span class="p">),</span>
-</span><span id="format_time_lambda-459"><a href="#format_time_lambda-459"><span class="linenos">459</span></a> <span class="p">)</span>
-</span><span id="format_time_lambda-460"><a href="#format_time_lambda-460"><span class="linenos">460</span></a>
-</span><span id="format_time_lambda-461"><a href="#format_time_lambda-461"><span class="linenos">461</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-441"><a href="#format_time_lambda-441"><span class="linenos">441</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
+</span><span id="format_time_lambda-442"><a href="#format_time_lambda-442"><span class="linenos">442</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-443"><a href="#format_time_lambda-443"><span class="linenos">443</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="format_time_lambda-444"><a href="#format_time_lambda-444"><span class="linenos">444</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
+</span><span id="format_time_lambda-445"><a href="#format_time_lambda-445"><span class="linenos">445</span></a>
+</span><span id="format_time_lambda-446"><a href="#format_time_lambda-446"><span class="linenos">446</span></a><span class="sd"> Args:</span>
+</span><span id="format_time_lambda-447"><a href="#format_time_lambda-447"><span class="linenos">447</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="format_time_lambda-448"><a href="#format_time_lambda-448"><span class="linenos">448</span></a><span class="sd"> dialect: target sql dialect.</span>
+</span><span id="format_time_lambda-449"><a href="#format_time_lambda-449"><span class="linenos">449</span></a><span class="sd"> default: the default format, True being time.</span>
+</span><span id="format_time_lambda-450"><a href="#format_time_lambda-450"><span class="linenos">450</span></a>
+</span><span id="format_time_lambda-451"><a href="#format_time_lambda-451"><span class="linenos">451</span></a><span class="sd"> Returns:</span>
+</span><span id="format_time_lambda-452"><a href="#format_time_lambda-452"><span class="linenos">452</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-453"><a href="#format_time_lambda-453"><span class="linenos">453</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="format_time_lambda-454"><a href="#format_time_lambda-454"><span class="linenos">454</span></a>
+</span><span id="format_time_lambda-455"><a href="#format_time_lambda-455"><span class="linenos">455</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">List</span><span class="p">):</span>
+</span><span id="format_time_lambda-456"><a href="#format_time_lambda-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
+</span><span id="format_time_lambda-457"><a href="#format_time_lambda-457"><span class="linenos">457</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-458"><a href="#format_time_lambda-458"><span class="linenos">458</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-459"><a href="#format_time_lambda-459"><span class="linenos">459</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-460"><a href="#format_time_lambda-460"><span class="linenos">460</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-461"><a href="#format_time_lambda-461"><span class="linenos">461</span></a> <span class="p">),</span>
+</span><span id="format_time_lambda-462"><a href="#format_time_lambda-462"><span class="linenos">462</span></a> <span class="p">)</span>
+</span><span id="format_time_lambda-463"><a href="#format_time_lambda-463"><span class="linenos">463</span></a>
+</span><span id="format_time_lambda-464"><a href="#format_time_lambda-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span></pre></div>
@@ -2861,6 +2938,35 @@ they will be normalized regardless of being quoted or not.</p>
</section>
+ <section id="time_format">
+ <input id="time_format-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">time_format</span><span class="signature pdoc-code multiline">(<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="#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="#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">Callable</span><span class="p">[[</span><span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span><span class="p">,</span> <span class="n"><a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a></span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span>:</span></span>
+
+ <label class="view-source-button" for="time_format-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#time_format"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="time_format-467"><a href="#time_format-467"><span class="linenos">467</span></a><span class="k">def</span> <span class="nf">time_format</span><span class="p">(</span>
+</span><span id="time_format-468"><a href="#time_format-468"><span class="linenos">468</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="time_format-469"><a href="#time_format-469"><span class="linenos">469</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="time_format-470"><a href="#time_format-470"><span class="linenos">470</span></a> <span class="k">def</span> <span class="nf">_time_format</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">UnixToStr</span> <span class="o">|</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="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="time_format-471"><a href="#time_format-471"><span class="linenos">471</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="time_format-472"><a href="#time_format-472"><span class="linenos">472</span></a><span class="sd"> Returns the time format for a given expression, unless it&#39;s equivalent</span>
+</span><span id="time_format-473"><a href="#time_format-473"><span class="linenos">473</span></a><span class="sd"> to the default time format of the dialect of interest.</span>
+</span><span id="time_format-474"><a href="#time_format-474"><span class="linenos">474</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="time_format-475"><a href="#time_format-475"><span class="linenos">475</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="time_format-476"><a href="#time_format-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="n">time_format</span> <span class="k">if</span> <span class="n">time_format</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">TIME_FORMAT</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="time_format-477"><a href="#time_format-477"><span class="linenos">477</span></a>
+</span><span id="time_format-478"><a href="#time_format-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="n">_time_format</span>
+</span></pre></div>
+
+
+
+
+ </section>
<section id="create_with_partitions_sql">
<input id="create_with_partitions_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -2872,27 +2978,27 @@ they will be normalized regardless of being quoted or not.</p>
</div>
<a class="headerlink" href="#create_with_partitions_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="create_with_partitions_sql-464"><a href="#create_with_partitions_sql-464"><span class="linenos">464</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-465"><a href="#create_with_partitions_sql-465"><span class="linenos">465</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="create_with_partitions_sql-466"><a href="#create_with_partitions_sql-466"><span class="linenos">466</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-467"><a href="#create_with_partitions_sql-467"><span class="linenos">467</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-468"><a href="#create_with_partitions_sql-468"><span class="linenos">468</span></a><span class="sd"> columns are removed from the create statement.</span>
-</span><span id="create_with_partitions_sql-469"><a href="#create_with_partitions_sql-469"><span class="linenos">469</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="create_with_partitions_sql-470"><a href="#create_with_partitions_sql-470"><span class="linenos">470</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-471"><a href="#create_with_partitions_sql-471"><span class="linenos">471</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-472"><a href="#create_with_partitions_sql-472"><span class="linenos">472</span></a>
-</span><span id="create_with_partitions_sql-473"><a href="#create_with_partitions_sql-473"><span class="linenos">473</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-474"><a href="#create_with_partitions_sql-474"><span class="linenos">474</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-475"><a href="#create_with_partitions_sql-475"><span class="linenos">475</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-476"><a href="#create_with_partitions_sql-476"><span class="linenos">476</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-477"><a href="#create_with_partitions_sql-477"><span class="linenos">477</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-478"><a href="#create_with_partitions_sql-478"><span class="linenos">478</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-479"><a href="#create_with_partitions_sql-479"><span class="linenos">479</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-480"><a href="#create_with_partitions_sql-480"><span class="linenos">480</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-481"><a href="#create_with_partitions_sql-481"><span class="linenos">481</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-482"><a href="#create_with_partitions_sql-482"><span class="linenos">482</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-483"><a href="#create_with_partitions_sql-483"><span class="linenos">483</span></a>
-</span><span id="create_with_partitions_sql-484"><a href="#create_with_partitions_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">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-481"><a href="#create_with_partitions_sql-481"><span class="linenos">481</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-482"><a href="#create_with_partitions_sql-482"><span class="linenos">482</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="create_with_partitions_sql-483"><a href="#create_with_partitions_sql-483"><span class="linenos">483</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-484"><a href="#create_with_partitions_sql-484"><span class="linenos">484</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-485"><a href="#create_with_partitions_sql-485"><span class="linenos">485</span></a><span class="sd"> columns are removed from the create statement.</span>
+</span><span id="create_with_partitions_sql-486"><a href="#create_with_partitions_sql-486"><span class="linenos">486</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="create_with_partitions_sql-487"><a href="#create_with_partitions_sql-487"><span class="linenos">487</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-488"><a href="#create_with_partitions_sql-488"><span class="linenos">488</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-489"><a href="#create_with_partitions_sql-489"><span class="linenos">489</span></a>
+</span><span id="create_with_partitions_sql-490"><a href="#create_with_partitions_sql-490"><span class="linenos">490</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-491"><a href="#create_with_partitions_sql-491"><span class="linenos">491</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-492"><a href="#create_with_partitions_sql-492"><span class="linenos">492</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-493"><a href="#create_with_partitions_sql-493"><span class="linenos">493</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-494"><a href="#create_with_partitions_sql-494"><span class="linenos">494</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-495"><a href="#create_with_partitions_sql-495"><span class="linenos">495</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-496"><a href="#create_with_partitions_sql-496"><span class="linenos">496</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-497"><a href="#create_with_partitions_sql-497"><span class="linenos">497</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-498"><a href="#create_with_partitions_sql-498"><span class="linenos">498</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-499"><a href="#create_with_partitions_sql-499"><span class="linenos">499</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-500"><a href="#create_with_partitions_sql-500"><span class="linenos">500</span></a>
+</span><span id="create_with_partitions_sql-501"><a href="#create_with_partitions_sql-501"><span class="linenos">501</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>
@@ -2914,17 +3020,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-487"><a href="#parse_date_delta-487"><span class="linenos">487</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
-</span><span id="parse_date_delta-488"><a href="#parse_date_delta-488"><span class="linenos">488</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-489"><a href="#parse_date_delta-489"><span class="linenos">489</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="parse_date_delta-490"><a href="#parse_date_delta-490"><span class="linenos">490</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">List</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-491"><a href="#parse_date_delta-491"><span class="linenos">491</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-492"><a href="#parse_date_delta-492"><span class="linenos">492</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-493"><a href="#parse_date_delta-493"><span class="linenos">493</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-494"><a href="#parse_date_delta-494"><span class="linenos">494</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">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="o">.</span><span class="n">name</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-495"><a href="#parse_date_delta-495"><span class="linenos">495</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-496"><a href="#parse_date_delta-496"><span class="linenos">496</span></a>
-</span><span id="parse_date_delta-497"><a href="#parse_date_delta-497"><span class="linenos">497</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-504"><a href="#parse_date_delta-504"><span class="linenos">504</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
+</span><span id="parse_date_delta-505"><a href="#parse_date_delta-505"><span class="linenos">505</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-506"><a href="#parse_date_delta-506"><span class="linenos">506</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="parse_date_delta-507"><a href="#parse_date_delta-507"><span class="linenos">507</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">List</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-508"><a href="#parse_date_delta-508"><span class="linenos">508</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-509"><a href="#parse_date_delta-509"><span class="linenos">509</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-510"><a href="#parse_date_delta-510"><span class="linenos">510</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-511"><a href="#parse_date_delta-511"><span class="linenos">511</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">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="o">.</span><span class="n">name</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-512"><a href="#parse_date_delta-512"><span class="linenos">512</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-513"><a href="#parse_date_delta-513"><span class="linenos">513</span></a>
+</span><span id="parse_date_delta-514"><a href="#parse_date_delta-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span></pre></div>
@@ -2942,27 +3048,27 @@ 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-500"><a href="#parse_date_delta_with_interval-500"><span class="linenos">500</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-501"><a href="#parse_date_delta_with_interval-501"><span class="linenos">501</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-502"><a href="#parse_date_delta_with_interval-502"><span class="linenos">502</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">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-503"><a href="#parse_date_delta_with_interval-503"><span class="linenos">503</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">List</span><span class="p">)</span> <span class="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-504"><a href="#parse_date_delta_with_interval-504"><span class="linenos">504</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-505"><a href="#parse_date_delta_with_interval-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="parse_date_delta_with_interval-506"><a href="#parse_date_delta_with_interval-506"><span class="linenos">506</span></a>
-</span><span id="parse_date_delta_with_interval-507"><a href="#parse_date_delta_with_interval-507"><span class="linenos">507</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-508"><a href="#parse_date_delta_with_interval-508"><span class="linenos">508</span></a>
-</span><span id="parse_date_delta_with_interval-509"><a href="#parse_date_delta_with_interval-509"><span class="linenos">509</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</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="parse_date_delta_with_interval-510"><a href="#parse_date_delta_with_interval-510"><span class="linenos">510</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;INTERVAL expression expected but got &#39;</span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="parse_date_delta_with_interval-511"><a href="#parse_date_delta_with_interval-511"><span class="linenos">511</span></a>
-</span><span id="parse_date_delta_with_interval-512"><a href="#parse_date_delta_with_interval-512"><span class="linenos">512</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-513"><a href="#parse_date_delta_with_interval-513"><span class="linenos">513</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-514"><a href="#parse_date_delta_with_interval-514"><span class="linenos">514</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-515"><a href="#parse_date_delta_with_interval-515"><span class="linenos">515</span></a>
-</span><span id="parse_date_delta_with_interval-516"><a href="#parse_date_delta_with_interval-516"><span class="linenos">516</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-517"><a href="#parse_date_delta_with_interval-517"><span class="linenos">517</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 class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><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-518"><a href="#parse_date_delta_with_interval-518"><span class="linenos">518</span></a> <span class="p">)</span>
-</span><span id="parse_date_delta_with_interval-519"><a href="#parse_date_delta_with_interval-519"><span class="linenos">519</span></a>
-</span><span id="parse_date_delta_with_interval-520"><a href="#parse_date_delta_with_interval-520"><span class="linenos">520</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-517"><a href="#parse_date_delta_with_interval-517"><span class="linenos">517</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-518"><a href="#parse_date_delta_with_interval-518"><span class="linenos">518</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-519"><a href="#parse_date_delta_with_interval-519"><span class="linenos">519</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">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-520"><a href="#parse_date_delta_with_interval-520"><span class="linenos">520</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">List</span><span class="p">)</span> <span class="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-521"><a href="#parse_date_delta_with_interval-521"><span class="linenos">521</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-522"><a href="#parse_date_delta_with_interval-522"><span class="linenos">522</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="parse_date_delta_with_interval-523"><a href="#parse_date_delta_with_interval-523"><span class="linenos">523</span></a>
+</span><span id="parse_date_delta_with_interval-524"><a href="#parse_date_delta_with_interval-524"><span class="linenos">524</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-525"><a href="#parse_date_delta_with_interval-525"><span class="linenos">525</span></a>
+</span><span id="parse_date_delta_with_interval-526"><a href="#parse_date_delta_with_interval-526"><span class="linenos">526</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</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="parse_date_delta_with_interval-527"><a href="#parse_date_delta_with_interval-527"><span class="linenos">527</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;INTERVAL expression expected but got &#39;</span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="parse_date_delta_with_interval-528"><a href="#parse_date_delta_with_interval-528"><span class="linenos">528</span></a>
+</span><span id="parse_date_delta_with_interval-529"><a href="#parse_date_delta_with_interval-529"><span class="linenos">529</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-530"><a href="#parse_date_delta_with_interval-530"><span class="linenos">530</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-531"><a href="#parse_date_delta_with_interval-531"><span class="linenos">531</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-532"><a href="#parse_date_delta_with_interval-532"><span class="linenos">532</span></a>
+</span><span id="parse_date_delta_with_interval-533"><a href="#parse_date_delta_with_interval-533"><span class="linenos">533</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-534"><a href="#parse_date_delta_with_interval-534"><span class="linenos">534</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 class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><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-535"><a href="#parse_date_delta_with_interval-535"><span class="linenos">535</span></a> <span class="p">)</span>
+</span><span id="parse_date_delta_with_interval-536"><a href="#parse_date_delta_with_interval-536"><span class="linenos">536</span></a>
+</span><span id="parse_date_delta_with_interval-537"><a href="#parse_date_delta_with_interval-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="n">func</span>
</span></pre></div>
@@ -2980,13 +3086,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-523"><a href="#date_trunc_to_time-523"><span class="linenos">523</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">List</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-524"><a href="#date_trunc_to_time-524"><span class="linenos">524</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-525"><a href="#date_trunc_to_time-525"><span class="linenos">525</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-526"><a href="#date_trunc_to_time-526"><span class="linenos">526</span></a>
-</span><span id="date_trunc_to_time-527"><a href="#date_trunc_to_time-527"><span class="linenos">527</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="s2">&quot;date&quot;</span><span class="p">):</span>
-</span><span id="date_trunc_to_time-528"><a href="#date_trunc_to_time-528"><span class="linenos">528</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-529"><a href="#date_trunc_to_time-529"><span class="linenos">529</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-540"><a href="#date_trunc_to_time-540"><span class="linenos">540</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">List</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-541"><a href="#date_trunc_to_time-541"><span class="linenos">541</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-542"><a href="#date_trunc_to_time-542"><span class="linenos">542</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-543"><a href="#date_trunc_to_time-543"><span class="linenos">543</span></a>
+</span><span id="date_trunc_to_time-544"><a href="#date_trunc_to_time-544"><span class="linenos">544</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="s2">&quot;date&quot;</span><span class="p">):</span>
+</span><span id="date_trunc_to_time-545"><a href="#date_trunc_to_time-545"><span class="linenos">545</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-546"><a href="#date_trunc_to_time-546"><span class="linenos">546</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>
@@ -3004,10 +3110,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-532"><a href="#timestamptrunc_sql-532"><span class="linenos">532</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-533"><a href="#timestamptrunc_sql-533"><span class="linenos">533</span></a> <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-534"><a href="#timestamptrunc_sql-534"><span class="linenos">534</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-535"><a href="#timestamptrunc_sql-535"><span class="linenos">535</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="timestamptrunc_sql-549"><a href="#timestamptrunc_sql-549"><span class="linenos">549</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-550"><a href="#timestamptrunc_sql-550"><span class="linenos">550</span></a> <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-551"><a href="#timestamptrunc_sql-551"><span class="linenos">551</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-552"><a href="#timestamptrunc_sql-552"><span class="linenos">552</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3025,10 +3131,10 @@ 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-538"><a href="#locate_to_strposition-538"><span class="linenos">538</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="locate_to_strposition-539"><a href="#locate_to_strposition-539"><span class="linenos">539</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-540"><a href="#locate_to_strposition-540"><span class="linenos">540</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">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 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-541"><a href="#locate_to_strposition-541"><span class="linenos">541</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-555"><a href="#locate_to_strposition-555"><span class="linenos">555</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="locate_to_strposition-556"><a href="#locate_to_strposition-556"><span class="linenos">556</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-557"><a href="#locate_to_strposition-557"><span class="linenos">557</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">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 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-558"><a href="#locate_to_strposition-558"><span class="linenos">558</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3046,10 +3152,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-544"><a href="#strposition_to_locate_sql-544"><span class="linenos">544</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-545"><a href="#strposition_to_locate_sql-545"><span class="linenos">545</span></a> <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-546"><a href="#strposition_to_locate_sql-546"><span class="linenos">546</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-547"><a href="#strposition_to_locate_sql-547"><span class="linenos">547</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-561"><a href="#strposition_to_locate_sql-561"><span class="linenos">561</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-562"><a href="#strposition_to_locate_sql-562"><span class="linenos">562</span></a> <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-563"><a href="#strposition_to_locate_sql-563"><span class="linenos">563</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-564"><a href="#strposition_to_locate_sql-564"><span class="linenos">564</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3067,13 +3173,13 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#left_to_substring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="left_to_substring_sql-550"><a href="#left_to_substring_sql-550"><span class="linenos">550</span></a><span class="k">def</span> <span class="nf">left_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="left_to_substring_sql-551"><a href="#left_to_substring_sql-551"><span class="linenos">551</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="left_to_substring_sql-552"><a href="#left_to_substring_sql-552"><span class="linenos">552</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="left_to_substring_sql-553"><a href="#left_to_substring_sql-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
-</span><span id="left_to_substring_sql-554"><a href="#left_to_substring_sql-554"><span class="linenos">554</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="p">,</span> <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 class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="left_to_substring_sql-555"><a href="#left_to_substring_sql-555"><span class="linenos">555</span></a> <span class="p">)</span>
-</span><span id="left_to_substring_sql-556"><a href="#left_to_substring_sql-556"><span class="linenos">556</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="left_to_substring_sql-567"><a href="#left_to_substring_sql-567"><span class="linenos">567</span></a><span class="k">def</span> <span class="nf">left_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="left_to_substring_sql-568"><a href="#left_to_substring_sql-568"><span class="linenos">568</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="left_to_substring_sql-569"><a href="#left_to_substring_sql-569"><span class="linenos">569</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="left_to_substring_sql-570"><a href="#left_to_substring_sql-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
+</span><span id="left_to_substring_sql-571"><a href="#left_to_substring_sql-571"><span class="linenos">571</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="p">,</span> <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 class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="left_to_substring_sql-572"><a href="#left_to_substring_sql-572"><span class="linenos">572</span></a> <span class="p">)</span>
+</span><span id="left_to_substring_sql-573"><a href="#left_to_substring_sql-573"><span class="linenos">573</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3091,14 +3197,14 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#right_to_substring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="right_to_substring_sql-559"><a href="#right_to_substring_sql-559"><span class="linenos">559</span></a><span class="k">def</span> <span class="nf">right_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="right_to_substring_sql-560"><a href="#right_to_substring_sql-560"><span class="linenos">560</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="right_to_substring_sql-561"><a href="#right_to_substring_sql-561"><span class="linenos">561</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="right_to_substring_sql-562"><a href="#right_to_substring_sql-562"><span class="linenos">562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
-</span><span id="right_to_substring_sql-563"><a href="#right_to_substring_sql-563"><span class="linenos">563</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="right_to_substring_sql-564"><a href="#right_to_substring_sql-564"><span class="linenos">564</span></a> <span class="n">start</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="right_to_substring_sql-565"><a href="#right_to_substring_sql-565"><span class="linenos">565</span></a> <span class="p">)</span>
-</span><span id="right_to_substring_sql-566"><a href="#right_to_substring_sql-566"><span class="linenos">566</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="right_to_substring_sql-576"><a href="#right_to_substring_sql-576"><span class="linenos">576</span></a><span class="k">def</span> <span class="nf">right_to_substring_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">Left</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="right_to_substring_sql-577"><a href="#right_to_substring_sql-577"><span class="linenos">577</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="right_to_substring_sql-578"><a href="#right_to_substring_sql-578"><span class="linenos">578</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="right_to_substring_sql-579"><a href="#right_to_substring_sql-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
+</span><span id="right_to_substring_sql-580"><a href="#right_to_substring_sql-580"><span class="linenos">580</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="p">,</span>
+</span><span id="right_to_substring_sql-581"><a href="#right_to_substring_sql-581"><span class="linenos">581</span></a> <span class="n">start</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="right_to_substring_sql-582"><a href="#right_to_substring_sql-582"><span class="linenos">582</span></a> <span class="p">)</span>
+</span><span id="right_to_substring_sql-583"><a href="#right_to_substring_sql-583"><span class="linenos">583</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3116,8 +3222,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-569"><a href="#timestrtotime_sql-569"><span class="linenos">569</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-570"><a href="#timestrtotime_sql-570"><span class="linenos">570</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;timestamp&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-586"><a href="#timestrtotime_sql-586"><span class="linenos">586</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-587"><a href="#timestrtotime_sql-587"><span class="linenos">587</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;timestamp&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -3135,8 +3241,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-573"><a href="#datestrtodate_sql-573"><span class="linenos">573</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-574"><a href="#datestrtodate_sql-574"><span class="linenos">574</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;date&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-590"><a href="#datestrtodate_sql-590"><span class="linenos">590</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-591"><a href="#datestrtodate_sql-591"><span class="linenos">591</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;date&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -3154,14 +3260,14 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#encode_decode_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="encode_decode_sql-578"><a href="#encode_decode_sql-578"><span class="linenos">578</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
-</span><span id="encode_decode_sql-579"><a href="#encode_decode_sql-579"><span class="linenos">579</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">Expression</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="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="encode_decode_sql-580"><a href="#encode_decode_sql-580"><span class="linenos">580</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="encode_decode_sql-581"><a href="#encode_decode_sql-581"><span class="linenos">581</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;charset&quot;</span><span class="p">)</span>
-</span><span id="encode_decode_sql-582"><a href="#encode_decode_sql-582"><span class="linenos">582</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</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="encode_decode_sql-583"><a href="#encode_decode_sql-583"><span class="linenos">583</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;Expected utf-8 character set, got </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="encode_decode_sql-584"><a href="#encode_decode_sql-584"><span class="linenos">584</span></a>
-</span><span id="encode_decode_sql-585"><a href="#encode_decode_sql-585"><span class="linenos">585</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="encode_decode_sql-595"><a href="#encode_decode_sql-595"><span class="linenos">595</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
+</span><span id="encode_decode_sql-596"><a href="#encode_decode_sql-596"><span class="linenos">596</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">Expression</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="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="encode_decode_sql-597"><a href="#encode_decode_sql-597"><span class="linenos">597</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="encode_decode_sql-598"><a href="#encode_decode_sql-598"><span class="linenos">598</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;charset&quot;</span><span class="p">)</span>
+</span><span id="encode_decode_sql-599"><a href="#encode_decode_sql-599"><span class="linenos">599</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</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="encode_decode_sql-600"><a href="#encode_decode_sql-600"><span class="linenos">600</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;Expected utf-8 character set, got </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="encode_decode_sql-601"><a href="#encode_decode_sql-601"><span class="linenos">601</span></a>
+</span><span id="encode_decode_sql-602"><a href="#encode_decode_sql-602"><span class="linenos">602</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span></pre></div>
@@ -3179,9 +3285,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-588"><a href="#min_or_least-588"><span class="linenos">588</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-589"><a href="#min_or_least-589"><span class="linenos">589</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-590"><a href="#min_or_least-590"><span class="linenos">590</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-605"><a href="#min_or_least-605"><span class="linenos">605</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-606"><a href="#min_or_least-606"><span class="linenos">606</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-607"><a href="#min_or_least-607"><span class="linenos">607</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>
@@ -3199,9 +3305,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-593"><a href="#max_or_greatest-593"><span class="linenos">593</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-594"><a href="#max_or_greatest-594"><span class="linenos">594</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-595"><a href="#max_or_greatest-595"><span class="linenos">595</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-610"><a href="#max_or_greatest-610"><span class="linenos">610</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-611"><a href="#max_or_greatest-611"><span class="linenos">611</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-612"><a href="#max_or_greatest-612"><span class="linenos">612</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>
@@ -3219,14 +3325,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-598"><a href="#count_if_to_sum-598"><span class="linenos">598</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-599"><a href="#count_if_to_sum-599"><span class="linenos">599</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-600"><a href="#count_if_to_sum-600"><span class="linenos">600</span></a>
-</span><span id="count_if_to_sum-601"><a href="#count_if_to_sum-601"><span class="linenos">601</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-602"><a href="#count_if_to_sum-602"><span class="linenos">602</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-603"><a href="#count_if_to_sum-603"><span class="linenos">603</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-604"><a href="#count_if_to_sum-604"><span class="linenos">604</span></a>
-</span><span id="count_if_to_sum-605"><a href="#count_if_to_sum-605"><span class="linenos">605</span></a> <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="o">.</span><span class="n">copy</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-615"><a href="#count_if_to_sum-615"><span class="linenos">615</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-616"><a href="#count_if_to_sum-616"><span class="linenos">616</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-617"><a href="#count_if_to_sum-617"><span class="linenos">617</span></a>
+</span><span id="count_if_to_sum-618"><a href="#count_if_to_sum-618"><span class="linenos">618</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-619"><a href="#count_if_to_sum-619"><span class="linenos">619</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-620"><a href="#count_if_to_sum-620"><span class="linenos">620</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-621"><a href="#count_if_to_sum-621"><span class="linenos">621</span></a>
+</span><span id="count_if_to_sum-622"><a href="#count_if_to_sum-622"><span class="linenos">622</span></a> <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="o">.</span><span class="n">copy</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>
@@ -3244,21 +3350,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-608"><a href="#trim_sql-608"><span class="linenos">608</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-609"><a href="#trim_sql-609"><span class="linenos">609</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-610"><a href="#trim_sql-610"><span class="linenos">610</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-611"><a href="#trim_sql-611"><span class="linenos">611</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-612"><a href="#trim_sql-612"><span class="linenos">612</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-613"><a href="#trim_sql-613"><span class="linenos">613</span></a>
-</span><span id="trim_sql-614"><a href="#trim_sql-614"><span class="linenos">614</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
-</span><span id="trim_sql-615"><a href="#trim_sql-615"><span class="linenos">615</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-616"><a href="#trim_sql-616"><span class="linenos">616</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-617"><a href="#trim_sql-617"><span class="linenos">617</span></a>
-</span><span id="trim_sql-618"><a href="#trim_sql-618"><span class="linenos">618</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-619"><a href="#trim_sql-619"><span class="linenos">619</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-620"><a href="#trim_sql-620"><span class="linenos">620</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-621"><a href="#trim_sql-621"><span class="linenos">621</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-622"><a href="#trim_sql-622"><span class="linenos">622</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-625"><a href="#trim_sql-625"><span class="linenos">625</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-626"><a href="#trim_sql-626"><span class="linenos">626</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-627"><a href="#trim_sql-627"><span class="linenos">627</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-628"><a href="#trim_sql-628"><span class="linenos">628</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-629"><a href="#trim_sql-629"><span class="linenos">629</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-630"><a href="#trim_sql-630"><span class="linenos">630</span></a>
+</span><span id="trim_sql-631"><a href="#trim_sql-631"><span class="linenos">631</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
+</span><span id="trim_sql-632"><a href="#trim_sql-632"><span class="linenos">632</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-633"><a href="#trim_sql-633"><span class="linenos">633</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-634"><a href="#trim_sql-634"><span class="linenos">634</span></a>
+</span><span id="trim_sql-635"><a href="#trim_sql-635"><span class="linenos">635</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-636"><a href="#trim_sql-636"><span class="linenos">636</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-637"><a href="#trim_sql-637"><span class="linenos">637</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-638"><a href="#trim_sql-638"><span class="linenos">638</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-639"><a href="#trim_sql-639"><span class="linenos">639</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>
@@ -3276,8 +3382,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-625"><a href="#str_to_time_sql-625"><span class="linenos">625</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="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-626"><a href="#str_to_time_sql-626"><span class="linenos">626</span></a> <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-642"><a href="#str_to_time_sql-642"><span class="linenos">642</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="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-643"><a href="#str_to_time_sql-643"><span class="linenos">643</span></a> <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>
@@ -3295,16 +3401,16 @@ 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-629"><a href="#ts_or_ds_to_date_sql-629"><span class="linenos">629</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-630"><a href="#ts_or_ds_to_date_sql-630"><span class="linenos">630</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-631"><a href="#ts_or_ds_to_date_sql-631"><span class="linenos">631</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-632"><a href="#ts_or_ds_to_date_sql-632"><span class="linenos">632</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-633"><a href="#ts_or_ds_to_date_sql-633"><span class="linenos">633</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-634"><a href="#ts_or_ds_to_date_sql-634"><span class="linenos">634</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">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="s2">&quot;date&quot;</span><span class="p">))</span>
-</span><span id="ts_or_ds_to_date_sql-635"><a href="#ts_or_ds_to_date_sql-635"><span class="linenos">635</span></a>
-</span><span id="ts_or_ds_to_date_sql-636"><a href="#ts_or_ds_to_date_sql-636"><span class="linenos">636</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="s2">&quot;date&quot;</span><span class="p">))</span>
-</span><span id="ts_or_ds_to_date_sql-637"><a href="#ts_or_ds_to_date_sql-637"><span class="linenos">637</span></a>
-</span><span id="ts_or_ds_to_date_sql-638"><a href="#ts_or_ds_to_date_sql-638"><span class="linenos">638</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-646"><a href="#ts_or_ds_to_date_sql-646"><span class="linenos">646</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-647"><a href="#ts_or_ds_to_date_sql-647"><span class="linenos">647</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-648"><a href="#ts_or_ds_to_date_sql-648"><span class="linenos">648</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-649"><a href="#ts_or_ds_to_date_sql-649"><span class="linenos">649</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-650"><a href="#ts_or_ds_to_date_sql-650"><span class="linenos">650</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-651"><a href="#ts_or_ds_to_date_sql-651"><span class="linenos">651</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">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="s2">&quot;date&quot;</span><span class="p">))</span>
+</span><span id="ts_or_ds_to_date_sql-652"><a href="#ts_or_ds_to_date_sql-652"><span class="linenos">652</span></a>
+</span><span id="ts_or_ds_to_date_sql-653"><a href="#ts_or_ds_to_date_sql-653"><span class="linenos">653</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="s2">&quot;date&quot;</span><span class="p">))</span>
+</span><span id="ts_or_ds_to_date_sql-654"><a href="#ts_or_ds_to_date_sql-654"><span class="linenos">654</span></a>
+</span><span id="ts_or_ds_to_date_sql-655"><a href="#ts_or_ds_to_date_sql-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span></pre></div>
@@ -3322,13 +3428,13 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#concat_to_dpipe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="concat_to_dpipe_sql-641"><a href="#concat_to_dpipe_sql-641"><span class="linenos">641</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="concat_to_dpipe_sql-642"><a href="#concat_to_dpipe_sql-642"><span class="linenos">642</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="concat_to_dpipe_sql-643"><a href="#concat_to_dpipe_sql-643"><span class="linenos">643</span></a> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="concat_to_dpipe_sql-644"><a href="#concat_to_dpipe_sql-644"><span class="linenos">644</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">rest_args</span><span class="p">:</span>
-</span><span id="concat_to_dpipe_sql-645"><a href="#concat_to_dpipe_sql-645"><span class="linenos">645</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span 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">arg</span><span class="p">)</span>
-</span><span id="concat_to_dpipe_sql-646"><a href="#concat_to_dpipe_sql-646"><span class="linenos">646</span></a>
-</span><span id="concat_to_dpipe_sql-647"><a href="#concat_to_dpipe_sql-647"><span class="linenos">647</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="concat_to_dpipe_sql-658"><a href="#concat_to_dpipe_sql-658"><span class="linenos">658</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="concat_to_dpipe_sql-659"><a href="#concat_to_dpipe_sql-659"><span class="linenos">659</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="concat_to_dpipe_sql-660"><a href="#concat_to_dpipe_sql-660"><span class="linenos">660</span></a> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="concat_to_dpipe_sql-661"><a href="#concat_to_dpipe_sql-661"><span class="linenos">661</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">rest_args</span><span class="p">:</span>
+</span><span id="concat_to_dpipe_sql-662"><a href="#concat_to_dpipe_sql-662"><span class="linenos">662</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span 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">arg</span><span class="p">)</span>
+</span><span id="concat_to_dpipe_sql-663"><a href="#concat_to_dpipe_sql-663"><span class="linenos">663</span></a>
+</span><span id="concat_to_dpipe_sql-664"><a href="#concat_to_dpipe_sql-664"><span class="linenos">664</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></pre></div>
@@ -3346,14 +3452,14 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#regexp_extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="regexp_extract_sql-650"><a href="#regexp_extract_sql-650"><span class="linenos">650</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="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="regexp_extract_sql-651"><a href="#regexp_extract_sql-651"><span class="linenos">651</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
-</span><span id="regexp_extract_sql-652"><a href="#regexp_extract_sql-652"><span class="linenos">652</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
-</span><span id="regexp_extract_sql-653"><a href="#regexp_extract_sql-653"><span class="linenos">653</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 the following 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="regexp_extract_sql-654"><a href="#regexp_extract_sql-654"><span class="linenos">654</span></a>
-</span><span id="regexp_extract_sql-655"><a href="#regexp_extract_sql-655"><span class="linenos">655</span></a> <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="regexp_extract_sql-656"><a href="#regexp_extract_sql-656"><span class="linenos">656</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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 class="n">expression</span><span class="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="regexp_extract_sql-657"><a href="#regexp_extract_sql-657"><span class="linenos">657</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="regexp_extract_sql-667"><a href="#regexp_extract_sql-667"><span class="linenos">667</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="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="regexp_extract_sql-668"><a href="#regexp_extract_sql-668"><span class="linenos">668</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
+</span><span id="regexp_extract_sql-669"><a href="#regexp_extract_sql-669"><span class="linenos">669</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
+</span><span id="regexp_extract_sql-670"><a href="#regexp_extract_sql-670"><span class="linenos">670</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 the following 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="regexp_extract_sql-671"><a href="#regexp_extract_sql-671"><span class="linenos">671</span></a>
+</span><span id="regexp_extract_sql-672"><a href="#regexp_extract_sql-672"><span class="linenos">672</span></a> <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="regexp_extract_sql-673"><a href="#regexp_extract_sql-673"><span class="linenos">673</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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 class="n">expression</span><span class="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="regexp_extract_sql-674"><a href="#regexp_extract_sql-674"><span class="linenos">674</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3371,14 +3477,14 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#regexp_replace_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="regexp_replace_sql-660"><a href="#regexp_replace_sql-660"><span class="linenos">660</span></a><span class="k">def</span> <span class="nf">regexp_replace_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">RegexpReplace</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="regexp_replace_sql-661"><a href="#regexp_replace_sql-661"><span class="linenos">661</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
-</span><span id="regexp_replace_sql-662"><a href="#regexp_replace_sql-662"><span class="linenos">662</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
-</span><span id="regexp_replace_sql-663"><a href="#regexp_replace_sql-663"><span class="linenos">663</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_REPLACE does not support the following 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="regexp_replace_sql-664"><a href="#regexp_replace_sql-664"><span class="linenos">664</span></a>
-</span><span id="regexp_replace_sql-665"><a href="#regexp_replace_sql-665"><span class="linenos">665</span></a> <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="regexp_replace_sql-666"><a href="#regexp_replace_sql-666"><span class="linenos">666</span></a> <span class="s2">&quot;REGEXP_REPLACE&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 class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">]</span>
-</span><span id="regexp_replace_sql-667"><a href="#regexp_replace_sql-667"><span class="linenos">667</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="regexp_replace_sql-677"><a href="#regexp_replace_sql-677"><span class="linenos">677</span></a><span class="k">def</span> <span class="nf">regexp_replace_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">RegexpReplace</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="regexp_replace_sql-678"><a href="#regexp_replace_sql-678"><span class="linenos">678</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 class="s2">&quot;parameters&quot;</span><span class="p">)))</span>
+</span><span id="regexp_replace_sql-679"><a href="#regexp_replace_sql-679"><span class="linenos">679</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
+</span><span id="regexp_replace_sql-680"><a href="#regexp_replace_sql-680"><span class="linenos">680</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_REPLACE does not support the following 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="regexp_replace_sql-681"><a href="#regexp_replace_sql-681"><span class="linenos">681</span></a>
+</span><span id="regexp_replace_sql-682"><a href="#regexp_replace_sql-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="regexp_replace_sql-683"><a href="#regexp_replace_sql-683"><span class="linenos">683</span></a> <span class="s2">&quot;REGEXP_REPLACE&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 class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">]</span>
+</span><span id="regexp_replace_sql-684"><a href="#regexp_replace_sql-684"><span class="linenos">684</span></a> <span class="p">)</span>
</span></pre></div>
@@ -3396,26 +3502,26 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#pivot_column_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="pivot_column_names-670"><a href="#pivot_column_names-670"><span class="linenos">670</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="pivot_column_names-671"><a href="#pivot_column_names-671"><span class="linenos">671</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="pivot_column_names-672"><a href="#pivot_column_names-672"><span class="linenos">672</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
-</span><span id="pivot_column_names-673"><a href="#pivot_column_names-673"><span class="linenos">673</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="pivot_column_names-674"><a href="#pivot_column_names-674"><span class="linenos">674</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="pivot_column_names-675"><a href="#pivot_column_names-675"><span class="linenos">675</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="pivot_column_names-676"><a href="#pivot_column_names-676"><span class="linenos">676</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="pivot_column_names-677"><a href="#pivot_column_names-677"><span class="linenos">677</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
-</span><span id="pivot_column_names-678"><a href="#pivot_column_names-678"><span class="linenos">678</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="pivot_column_names-679"><a href="#pivot_column_names-679"><span class="linenos">679</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
-</span><span id="pivot_column_names-680"><a href="#pivot_column_names-680"><span class="linenos">680</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
-</span><span id="pivot_column_names-681"><a href="#pivot_column_names-681"><span class="linenos">681</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="pivot_column_names-682"><a href="#pivot_column_names-682"><span class="linenos">682</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="pivot_column_names-683"><a href="#pivot_column_names-683"><span class="linenos">683</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="pivot_column_names-684"><a href="#pivot_column_names-684"><span class="linenos">684</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="pivot_column_names-685"><a href="#pivot_column_names-685"><span class="linenos">685</span></a> <span class="k">else</span> <span class="n">node</span>
-</span><span id="pivot_column_names-686"><a href="#pivot_column_names-686"><span class="linenos">686</span></a> <span class="p">)</span>
-</span><span id="pivot_column_names-687"><a href="#pivot_column_names-687"><span class="linenos">687</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="n">dialect</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="pivot_column_names-688"><a href="#pivot_column_names-688"><span class="linenos">688</span></a>
-</span><span id="pivot_column_names-689"><a href="#pivot_column_names-689"><span class="linenos">689</span></a> <span class="k">return</span> <span class="n">names</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="pivot_column_names-687"><a href="#pivot_column_names-687"><span class="linenos">687</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="pivot_column_names-688"><a href="#pivot_column_names-688"><span class="linenos">688</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="pivot_column_names-689"><a href="#pivot_column_names-689"><span class="linenos">689</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
+</span><span id="pivot_column_names-690"><a href="#pivot_column_names-690"><span class="linenos">690</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="pivot_column_names-691"><a href="#pivot_column_names-691"><span class="linenos">691</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="pivot_column_names-692"><a href="#pivot_column_names-692"><span class="linenos">692</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="pivot_column_names-693"><a href="#pivot_column_names-693"><span class="linenos">693</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="pivot_column_names-694"><a href="#pivot_column_names-694"><span class="linenos">694</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
+</span><span id="pivot_column_names-695"><a href="#pivot_column_names-695"><span class="linenos">695</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="pivot_column_names-696"><a href="#pivot_column_names-696"><span class="linenos">696</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
+</span><span id="pivot_column_names-697"><a href="#pivot_column_names-697"><span class="linenos">697</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
+</span><span id="pivot_column_names-698"><a href="#pivot_column_names-698"><span class="linenos">698</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="pivot_column_names-699"><a href="#pivot_column_names-699"><span class="linenos">699</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="pivot_column_names-700"><a href="#pivot_column_names-700"><span class="linenos">700</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="pivot_column_names-701"><a href="#pivot_column_names-701"><span class="linenos">701</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="pivot_column_names-702"><a href="#pivot_column_names-702"><span class="linenos">702</span></a> <span class="k">else</span> <span class="n">node</span>
+</span><span id="pivot_column_names-703"><a href="#pivot_column_names-703"><span class="linenos">703</span></a> <span class="p">)</span>
+</span><span id="pivot_column_names-704"><a href="#pivot_column_names-704"><span class="linenos">704</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="n">dialect</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="pivot_column_names-705"><a href="#pivot_column_names-705"><span class="linenos">705</span></a>
+</span><span id="pivot_column_names-706"><a href="#pivot_column_names-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="n">names</span>
</span></pre></div>
@@ -3433,13 +3539,13 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#simplify_literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literal-692"><a href="#simplify_literal-692"><span class="linenos">692</span></a><span class="k">def</span> <span class="nf">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="simplify_literal-693"><a href="#simplify_literal-693"><span class="linenos">693</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">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="simplify_literal-694"><a href="#simplify_literal-694"><span class="linenos">694</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="simplify_literal-695"><a href="#simplify_literal-695"><span class="linenos">695</span></a>
-</span><span id="simplify_literal-696"><a href="#simplify_literal-696"><span class="linenos">696</span></a> <span class="n">simplify</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="simplify_literal-697"><a href="#simplify_literal-697"><span class="linenos">697</span></a>
-</span><span id="simplify_literal-698"><a href="#simplify_literal-698"><span class="linenos">698</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literal-709"><a href="#simplify_literal-709"><span class="linenos">709</span></a><span class="k">def</span> <span class="nf">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="simplify_literal-710"><a href="#simplify_literal-710"><span class="linenos">710</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">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="simplify_literal-711"><a href="#simplify_literal-711"><span class="linenos">711</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="simplify_literal-712"><a href="#simplify_literal-712"><span class="linenos">712</span></a>
+</span><span id="simplify_literal-713"><a href="#simplify_literal-713"><span class="linenos">713</span></a> <span class="n">simplify</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="simplify_literal-714"><a href="#simplify_literal-714"><span class="linenos">714</span></a>
+</span><span id="simplify_literal-715"><a href="#simplify_literal-715"><span class="linenos">715</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -3457,8 +3563,65 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#binary_from_function"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="binary_from_function-701"><a href="#binary_from_function-701"><span class="linenos">701</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
-</span><span id="binary_from_function-702"><a href="#binary_from_function-702"><span class="linenos">702</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="binary_from_function-718"><a href="#binary_from_function-718"><span class="linenos">718</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
+</span><span id="binary_from_function-719"><a href="#binary_from_function-719"><span class="linenos">719</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span></pre></div>
+
+
+
+
+ </section>
+ <section id="parse_timestamp_trunc">
+ <input id="parse_timestamp_trunc-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+
+ <span class="def">def</span>
+ <span class="name">parse_timestamp_trunc</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">List</span></span><span class="return-annotation">) -> <span class="n"><a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a></span>:</span></span>
+
+ <label class="view-source-button" for="parse_timestamp_trunc-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#parse_timestamp_trunc"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="parse_timestamp_trunc-723"><a href="#parse_timestamp_trunc-723"><span class="linenos">723</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
+</span><span id="parse_timestamp_trunc-724"><a href="#parse_timestamp_trunc-724"><span class="linenos">724</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">seq_get</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></pre></div>
+
+
+
+
+ </section>
+ <section id="any_value_to_max_sql">
+ <input id="any_value_to_max_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">any_value_to_max_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="any_value_to_max_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#any_value_to_max_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="any_value_to_max_sql-727"><a href="#any_value_to_max_sql-727"><span class="linenos">727</span></a><span class="k">def</span> <span class="nf">any_value_to_max_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="any_value_to_max_sql-728"><a href="#any_value_to_max_sql-728"><span class="linenos">728</span></a> <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;MAX&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>
+
+
+
+
+ </section>
+ <section id="json_keyvalue_comma_sql">
+ <input id="json_keyvalue_comma_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">json_keyvalue_comma_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#JSONKeyValue">sqlglot.expressions.JSONKeyValue</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="json_keyvalue_comma_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#json_keyvalue_comma_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="json_keyvalue_comma_sql-732"><a href="#json_keyvalue_comma_sql-732"><span class="linenos">732</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span 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="json_keyvalue_comma_sql-733"><a href="#json_keyvalue_comma_sql-733"><span class="linenos">733</span></a> <span class="k">return</span> <span class="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>
diff --git a/docs/sqlglot/dialects/doris.html b/docs/sqlglot/dialects/doris.html
new file mode 100644
index 0000000..476804e
--- /dev/null
+++ b/docs/sqlglot/dialects/doris.html
@@ -0,0 +1,1705 @@
+<!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 14.0.0"/>
+ <title>sqlglot.dialects.doris 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="#Doris">Doris</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Doris.DATE_FORMAT">DATE_FORMAT</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.DATEINT_FORMAT">DATEINT_FORMAT</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.TIME_FORMAT">TIME_FORMAT</a>
+ </li>
+ <li>
+ <a class="class" href="#Doris.Parser">Doris.Parser</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Doris.Parser.FUNCTIONS">FUNCTIONS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Parser.SHOW_TRIE">SHOW_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Parser.SET_TRIE">SET_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Parser.FORMAT_TRIE">FORMAT_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Parser.TIME_TRIE">TIME_TRIE</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#Doris.Generator">Doris.Generator</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Doris.Generator.CAST_MAPPING">CAST_MAPPING</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.TRANSFORMS">TRANSFORMS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.SELECT_KINDS">SELECT_KINDS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.INVERSE_TIME_MAPPING">INVERSE_TIME_MAPPING</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.INVERSE_TIME_TRIE">INVERSE_TIME_TRIE</a>
+ </li>
+ <li>
+ <a class="function" href="#Doris.Generator.can_identify">can_identify</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.QUOTE_START">QUOTE_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.QUOTE_END">QUOTE_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.IDENTIFIER_START">IDENTIFIER_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.BIT_START">BIT_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.BIT_END">BIT_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.HEX_START">HEX_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.HEX_END">HEX_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.BYTE_START">BYTE_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.Generator.BYTE_END">BYTE_END</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="variable" href="#Doris.tokenizer_class">tokenizer_class</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.parser_class">parser_class</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.generator_class">generator_class</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.TIME_TRIE">TIME_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.FORMAT_TRIE">FORMAT_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.INVERSE_TIME_MAPPING">INVERSE_TIME_MAPPING</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.INVERSE_TIME_TRIE">INVERSE_TIME_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.QUOTE_START">QUOTE_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.QUOTE_END">QUOTE_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.IDENTIFIER_START">IDENTIFIER_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.IDENTIFIER_END">IDENTIFIER_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.BIT_START">BIT_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.BIT_END">BIT_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.HEX_START">HEX_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.HEX_END">HEX_END</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.BYTE_START">BYTE_START</a>
+ </li>
+ <li>
+ <a class="variable" href="#Doris.BYTE_END">BYTE_END</a>
+ </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/doris.py">Edit on GitHub</a>
+ <h1 class="modulename">
+<a href="./../../sqlglot.html">sqlglot</a><wbr>.<a href="./../dialects.html">dialects</a><wbr>.doris </h1>
+
+
+ <input id="mod-doris-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+
+ <label class="view-source-button" for="mod-doris-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">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">time_format</span><span class="p">,</span>
+</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="p">)</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.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a>
+</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a>
+</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="k">class</span> <span class="nc">Doris</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos">15</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-16"><a href="#L-16"><span class="linenos">16</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-17"><a href="#L-17"><span class="linenos">17</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-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="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="s2">&quot;REGEXP&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-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="p">}</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a>
+</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">CAST_MAPPING</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><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><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">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-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">exp</span><span 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-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="p">}</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</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">ArrayAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">),</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</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;NOW()&quot;</span><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">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><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <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="s2">&quot;&#39;&quot;</span> <span class="o">+</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="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="p">),</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span 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-45"><a href="#L-45"><span class="linenos">45</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-46"><a href="#L-46"><span class="linenos">46</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-47"><a href="#L-47"><span class="linenos">47</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_BY_STRING&quot;</span><span class="p">),</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-49"><a href="#L-49"><span class="linenos">49</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-50"><a href="#L-50"><span class="linenos">50</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;SPLIT_BY_STRING&quot;</span><span class="p">),</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-52"><a href="#L-52"><span class="linenos">52</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="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-53"><a href="#L-53"><span class="linenos">53</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 class="c1"># Only for day level</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;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><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-56"><a href="#L-56"><span class="linenos">56</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-57"><a href="#L-57"><span class="linenos">57</span></a> <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="s2">&quot;&#39;&quot;</span> <span class="o">+</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="o">+</span> <span class="s2">&quot;&#39;&quot;</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="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-60"><a href="#L-60"><span class="linenos">60</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="s2">&quot;doris&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-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 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-63"><a href="#L-63"><span class="linenos">63</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_MAP&quot;</span><span class="p">),</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a> <span class="p">}</span>
+</span></pre></div>
+
+
+ </section>
+ <section id="Doris">
+ <input id="Doris-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">Doris</span><wbr>(<span class="base"><a href="mysql.html#MySQL">sqlglot.dialects.mysql.MySQL</a></span>):
+
+ <label class="view-source-button" for="Doris-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Doris"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Doris-15"><a href="#Doris-15"><span class="linenos">15</span></a><span class="k">class</span> <span class="nc">Doris</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
+</span><span id="Doris-16"><a href="#Doris-16"><span class="linenos">16</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="Doris-17"><a href="#Doris-17"><span class="linenos">17</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyyMMdd&#39;&quot;</span>
+</span><span id="Doris-18"><a href="#Doris-18"><span class="linenos">18</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="Doris-19"><a href="#Doris-19"><span class="linenos">19</span></a>
+</span><span id="Doris-20"><a href="#Doris-20"><span class="linenos">20</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Doris-21"><a href="#Doris-21"><span class="linenos">21</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Doris-22"><a href="#Doris-22"><span class="linenos">22</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Doris-23"><a href="#Doris-23"><span class="linenos">23</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="Doris-24"><a href="#Doris-24"><span class="linenos">24</span></a> <span class="s2">&quot;REGEXP&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="Doris-25"><a href="#Doris-25"><span class="linenos">25</span></a> <span class="p">}</span>
+</span><span id="Doris-26"><a href="#Doris-26"><span class="linenos">26</span></a>
+</span><span id="Doris-27"><a href="#Doris-27"><span class="linenos">27</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Doris-28"><a href="#Doris-28"><span class="linenos">28</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Doris-29"><a href="#Doris-29"><span class="linenos">29</span></a>
+</span><span id="Doris-30"><a href="#Doris-30"><span class="linenos">30</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Doris-31"><a href="#Doris-31"><span class="linenos">31</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Doris-32"><a href="#Doris-32"><span class="linenos">32</span></a> <span class="n">exp</span><span 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="Doris-33"><a href="#Doris-33"><span class="linenos">33</span></a> <span class="n">exp</span><span 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="Doris-34"><a href="#Doris-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="Doris-35"><a href="#Doris-35"><span class="linenos">35</span></a> <span class="p">}</span>
+</span><span id="Doris-36"><a href="#Doris-36"><span class="linenos">36</span></a>
+</span><span id="Doris-37"><a href="#Doris-37"><span class="linenos">37</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Doris-38"><a href="#Doris-38"><span class="linenos">38</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Doris-39"><a href="#Doris-39"><span class="linenos">39</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="Doris-40"><a href="#Doris-40"><span class="linenos">40</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">),</span>
+</span><span id="Doris-41"><a href="#Doris-41"><span class="linenos">41</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;NOW()&quot;</span><span class="p">,</span>
+</span><span id="Doris-42"><a href="#Doris-42"><span class="linenos">42</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><span id="Doris-43"><a href="#Doris-43"><span class="linenos">43</span></a> <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="s2">&quot;&#39;&quot;</span> <span class="o">+</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="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Doris-44"><a href="#Doris-44"><span class="linenos">44</span></a> <span class="p">),</span>
+</span><span id="Doris-45"><a href="#Doris-45"><span class="linenos">45</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="Doris-46"><a href="#Doris-46"><span class="linenos">46</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="Doris-47"><a href="#Doris-47"><span class="linenos">47</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="Doris-48"><a href="#Doris-48"><span class="linenos">48</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_BY_STRING&quot;</span><span class="p">),</span>
+</span><span id="Doris-49"><a href="#Doris-49"><span class="linenos">49</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="Doris-50"><a href="#Doris-50"><span class="linenos">50</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="Doris-51"><a href="#Doris-51"><span class="linenos">51</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;SPLIT_BY_STRING&quot;</span><span class="p">),</span>
+</span><span id="Doris-52"><a href="#Doris-52"><span class="linenos">52</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="Doris-53"><a href="#Doris-53"><span class="linenos">53</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="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="Doris-54"><a href="#Doris-54"><span class="linenos">54</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 class="c1"># Only for day level</span>
+</span><span id="Doris-55"><a href="#Doris-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;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><span id="Doris-56"><a href="#Doris-56"><span class="linenos">56</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="Doris-57"><a href="#Doris-57"><span class="linenos">57</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="Doris-58"><a href="#Doris-58"><span class="linenos">58</span></a> <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="s2">&quot;&#39;&quot;</span> <span class="o">+</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="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Doris-59"><a href="#Doris-59"><span class="linenos">59</span></a> <span class="p">),</span>
+</span><span id="Doris-60"><a href="#Doris-60"><span class="linenos">60</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="Doris-61"><a href="#Doris-61"><span class="linenos">61</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="s2">&quot;doris&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="Doris-62"><a href="#Doris-62"><span class="linenos">62</span></a> <span class="p">),</span>
+</span><span id="Doris-63"><a href="#Doris-63"><span class="linenos">63</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="Doris-64"><a href="#Doris-64"><span class="linenos">64</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_MAP&quot;</span><span class="p">),</span>
+</span><span id="Doris-65"><a href="#Doris-65"><span class="linenos">65</span></a> <span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div id="Doris.DATE_FORMAT" class="classattr">
+ <div class="attr variable">
+ <span class="name">DATE_FORMAT</span> =
+<span class="default_value">&#34;&#39;yyyy-MM-dd&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.DATE_FORMAT"></a>
+
+
+
+ </div>
+ <div id="Doris.DATEINT_FORMAT" class="classattr">
+ <div class="attr variable">
+ <span class="name">DATEINT_FORMAT</span> =
+<span class="default_value">&#34;&#39;yyyyMMdd&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.DATEINT_FORMAT"></a>
+
+
+
+ </div>
+ <div id="Doris.TIME_FORMAT" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIME_FORMAT</span> =
+<span class="default_value">&#34;&#39;yyyy-MM-dd HH:mm:ss&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.TIME_FORMAT"></a>
+
+
+
+ </div>
+ <div id="Doris.tokenizer_class" class="classattr">
+ <div class="attr variable">
+ <span class="name">tokenizer_class</span> =
+<span class="default_value">&lt;class &#39;<a href="mysql.html#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.tokenizer_class"></a>
+
+
+
+ </div>
+ <div id="Doris.parser_class" class="classattr">
+ <div class="attr variable">
+ <span class="name">parser_class</span> =
+<span class="default_value">&lt;class &#39;<a href="#Doris.Parser">sqlglot.dialects.doris.Doris.Parser</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.parser_class"></a>
+
+
+
+ </div>
+ <div id="Doris.generator_class" class="classattr">
+ <div class="attr variable">
+ <span class="name">generator_class</span> =
+<span class="default_value">&lt;class &#39;<a href="#Doris.Generator">sqlglot.dialects.doris.Doris.Generator</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.generator_class"></a>
+
+
+
+ </div>
+ <div id="Doris.TIME_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.TIME_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.FORMAT_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.FORMAT_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.INVERSE_TIME_MAPPING" class="classattr">
+ <div class="attr variable">
+ <span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
+<input id="Doris.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.INVERSE_TIME_MAPPING"></a>
+
+
+
+ </div>
+ <div id="Doris.INVERSE_TIME_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">INVERSE_TIME_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.INVERSE_TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.INVERSE_TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;B&#39;: {0: True}, &#39;-&#39;: {&#39;m&#39;: {0: True}, &#39;d&#39;: {0: True}, &#39;H&#39;: {0: True}, &#39;I&#39;: {0: True}}, &#39;I&#39;: {0: True}, &#39;M&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;W&#39;: {0: True}, &#39;H&#39;: {&#39;:&#39;: {&#39;%&#39;: {&#39;M&#39;: {&#39;:&#39;: {&#39;%&#39;: {&#39;S&#39;: {0: True}}}}}}}, &#39;a&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.INVERSE_TIME_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.QUOTE_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">QUOTE_START</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.QUOTE_START"></a>
+
+
+
+ </div>
+ <div id="Doris.QUOTE_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">QUOTE_END</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.QUOTE_END"></a>
+
+
+
+ </div>
+ <div id="Doris.IDENTIFIER_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIER_START</span> =
+<span class="default_value">&#39;`&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.IDENTIFIER_START"></a>
+
+
+
+ </div>
+ <div id="Doris.IDENTIFIER_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIER_END</span> =
+<span class="default_value">&#39;`&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.IDENTIFIER_END"></a>
+
+
+
+ </div>
+ <div id="Doris.BIT_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">BIT_START</span> =
+<span class="default_value">&#34;b&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.BIT_START"></a>
+
+
+
+ </div>
+ <div id="Doris.BIT_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">BIT_END</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.BIT_END"></a>
+
+
+
+ </div>
+ <div id="Doris.HEX_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEX_START</span> =
+<span class="default_value">&#34;x&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.HEX_START"></a>
+
+
+
+ </div>
+ <div id="Doris.HEX_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEX_END</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.HEX_END"></a>
+
+
+
+ </div>
+ <div id="Doris.BYTE_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">BYTE_START</span> =
+<span class="default_value">None</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.BYTE_START"></a>
+
+
+
+ </div>
+ <div id="Doris.BYTE_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">BYTE_END</span> =
+<span class="default_value">None</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.BYTE_END"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="mysql.html#MySQL">sqlglot.dialects.mysql.MySQL</a></dt>
+ <dd id="Doris.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="mysql.html#MySQL.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Doris.DPIPE_IS_STRING_CONCAT" class="variable"><a href="mysql.html#MySQL.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
+ <dd id="Doris.TIME_MAPPING" class="variable"><a href="mysql.html#MySQL.TIME_MAPPING">TIME_MAPPING</a></dd>
+ <dd id="Doris.Tokenizer" class="class"><a href="mysql.html#MySQL.Tokenizer">Tokenizer</a></dd>
+
+ </div>
+ <div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
+ <dd id="Doris.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
+ <dd id="Doris.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Doris.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
+ <dd id="Doris.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
+ <dd id="Doris.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
+ <dd id="Doris.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
+ <dd id="Doris.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
+ <dd id="Doris.FORMAT_MAPPING" class="variable"><a href="dialect.html#Dialect.FORMAT_MAPPING">FORMAT_MAPPING</a></dd>
+ <dd id="Doris.PSEUDOCOLUMNS" class="variable"><a href="dialect.html#Dialect.PSEUDOCOLUMNS">PSEUDOCOLUMNS</a></dd>
+ <dd id="Doris.get_or_raise" class="function"><a href="dialect.html#Dialect.get_or_raise">get_or_raise</a></dd>
+ <dd id="Doris.format_time" class="function"><a href="dialect.html#Dialect.format_time">format_time</a></dd>
+ <dd id="Doris.normalize_identifier" class="function"><a href="dialect.html#Dialect.normalize_identifier">normalize_identifier</a></dd>
+ <dd id="Doris.case_sensitive" class="function"><a href="dialect.html#Dialect.case_sensitive">case_sensitive</a></dd>
+ <dd id="Doris.can_identify" class="function"><a href="dialect.html#Dialect.can_identify">can_identify</a></dd>
+ <dd id="Doris.quote_identifier" class="function"><a href="dialect.html#Dialect.quote_identifier">quote_identifier</a></dd>
+ <dd id="Doris.parse" class="function"><a href="dialect.html#Dialect.parse">parse</a></dd>
+ <dd id="Doris.parse_into" class="function"><a href="dialect.html#Dialect.parse_into">parse_into</a></dd>
+ <dd id="Doris.generate" class="function"><a href="dialect.html#Dialect.generate">generate</a></dd>
+ <dd id="Doris.transpile" class="function"><a href="dialect.html#Dialect.transpile">transpile</a></dd>
+ <dd id="Doris.tokenize" class="function"><a href="dialect.html#Dialect.tokenize">tokenize</a></dd>
+ <dd id="Doris.tokenizer" class="variable"><a href="dialect.html#Dialect.tokenizer">tokenizer</a></dd>
+ <dd id="Doris.parser" class="function"><a href="dialect.html#Dialect.parser">parser</a></dd>
+ <dd id="Doris.generator" class="function"><a href="dialect.html#Dialect.generator">generator</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Doris.Parser">
+ <input id="Doris.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">Doris.Parser</span><wbr>(<span class="base"><a href="mysql.html#MySQL.Parser">sqlglot.dialects.mysql.MySQL.Parser</a></span>):
+
+ <label class="view-source-button" for="Doris.Parser-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Doris.Parser-20"><a href="#Doris.Parser-20"><span class="linenos">20</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Doris.Parser-21"><a href="#Doris.Parser-21"><span class="linenos">21</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Doris.Parser-22"><a href="#Doris.Parser-22"><span class="linenos">22</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Doris.Parser-23"><a href="#Doris.Parser-23"><span class="linenos">23</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="Doris.Parser-24"><a href="#Doris.Parser-24"><span class="linenos">24</span></a> <span class="s2">&quot;REGEXP&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="Doris.Parser-25"><a href="#Doris.Parser-25"><span class="linenos">25</span></a> <span class="p">}</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>error_level:</strong> The desired error level.
+Default: ErrorLevel.IMMEDIATE</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: 100</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>
+</ul>
+</div>
+
+
+ <div id="Doris.Parser.FUNCTIONS" class="classattr">
+ <div class="attr variable">
+ <span class="name">FUNCTIONS</span> =
+<input id="Doris.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function parse_timestamp_trunc&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;function _str_to_date&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;INSTR&#39;: &lt;function MySQL.Parser.&lt;lambda&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;REGEXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser.FUNCTIONS"></a>
+
+
+
+ </div>
+ <div id="Doris.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="mysql.html#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
+ <div id="Doris.Parser.SHOW_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.Parser.SHOW_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Parser.SHOW_TRIE-view-value"></label><span class="default_value">{&#39;BINARY&#39;: {&#39;LOGS&#39;: {0: True}}, &#39;MASTER&#39;: {&#39;LOGS&#39;: {0: True}, &#39;STATUS&#39;: {0: True}}, &#39;BINLOG&#39;: {&#39;EVENTS&#39;: {0: True}}, &#39;CHARACTER&#39;: {&#39;SET&#39;: {0: True}}, &#39;CHARSET&#39;: {0: True}, &#39;COLLATION&#39;: {0: True}, &#39;FULL&#39;: {&#39;COLUMNS&#39;: {0: True}, &#39;PROCESSLIST&#39;: {0: True}, &#39;TABLES&#39;: {0: True}}, &#39;COLUMNS&#39;: {0: True}, &#39;CREATE&#39;: {&#39;DATABASE&#39;: {0: True}, &#39;EVENT&#39;: {0: True}, &#39;FUNCTION&#39;: {0: True}, &#39;PROCEDURE&#39;: {0: True}, &#39;TABLE&#39;: {0: True}, &#39;TRIGGER&#39;: {0: True}, &#39;VIEW&#39;: {0: True}}, &#39;DATABASES&#39;: {0: True}, &#39;ENGINE&#39;: {0: True}, &#39;STORAGE&#39;: {&#39;ENGINES&#39;: {0: True}}, &#39;ENGINES&#39;: {0: True}, &#39;ERRORS&#39;: {0: True}, &#39;EVENTS&#39;: {0: True}, &#39;FUNCTION&#39;: {&#39;CODE&#39;: {0: True}, &#39;STATUS&#39;: {0: True}}, &#39;GRANTS&#39;: {0: True}, &#39;INDEX&#39;: {0: True}, &#39;OPEN&#39;: {&#39;TABLES&#39;: {0: True}}, &#39;PLUGINS&#39;: {0: True}, &#39;PROCEDURE&#39;: {&#39;CODE&#39;: {0: True}, &#39;STATUS&#39;: {0: True}}, &#39;PRIVILEGES&#39;: {0: True}, &#39;PROCESSLIST&#39;: {0: True}, &#39;PROFILE&#39;: {0: True}, &#39;PROFILES&#39;: {0: True}, &#39;RELAYLOG&#39;: {&#39;EVENTS&#39;: {0: True}}, &#39;REPLICAS&#39;: {0: True}, &#39;SLAVE&#39;: {&#39;HOSTS&#39;: {0: True}, &#39;STATUS&#39;: {0: True}}, &#39;REPLICA&#39;: {&#39;STATUS&#39;: {0: True}}, &#39;GLOBAL&#39;: {&#39;STATUS&#39;: {0: True}, &#39;VARIABLES&#39;: {0: True}}, &#39;SESSION&#39;: {&#39;STATUS&#39;: {0: True}, &#39;VARIABLES&#39;: {0: True}}, &#39;STATUS&#39;: {0: True}, &#39;TABLE&#39;: {&#39;STATUS&#39;: {0: True}}, &#39;TABLES&#39;: {0: True}, &#39;TRIGGERS&#39;: {0: True}, &#39;VARIABLES&#39;: {0: True}, &#39;WARNINGS&#39;: {0: True}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser.SHOW_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.Parser.SET_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">SET_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.Parser.SET_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Parser.SET_TRIE-view-value"></label><span class="default_value">{&#39;GLOBAL&#39;: {0: True}, &#39;LOCAL&#39;: {0: True}, &#39;SESSION&#39;: {0: True}, &#39;TRANSACTION&#39;: {0: True}, &#39;PERSIST&#39;: {0: True}, &#39;PERSIST_ONLY&#39;: {0: True}, &#39;CHARACTER&#39;: {&#39;SET&#39;: {0: True}}, &#39;CHARSET&#39;: {0: True}, &#39;NAMES&#39;: {0: True}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser.SET_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.Parser.FORMAT_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.Parser.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser.FORMAT_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.Parser.TIME_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.Parser.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Parser.TIME_TRIE"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
+ <dd id="Doris.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
+ <dd id="Doris.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Doris.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
+ <dd id="Doris.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
+ <dd id="Doris.Parser.SUBQUERY_PREDICATES" class="variable"><a href="../parser.html#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a></dd>
+ <dd id="Doris.Parser.RESERVED_KEYWORDS" class="variable"><a href="../parser.html#Parser.RESERVED_KEYWORDS">RESERVED_KEYWORDS</a></dd>
+ <dd id="Doris.Parser.DB_CREATABLES" class="variable"><a href="../parser.html#Parser.DB_CREATABLES">DB_CREATABLES</a></dd>
+ <dd id="Doris.Parser.CREATABLES" class="variable"><a href="../parser.html#Parser.CREATABLES">CREATABLES</a></dd>
+ <dd id="Doris.Parser.ID_VAR_TOKENS" class="variable"><a href="../parser.html#Parser.ID_VAR_TOKENS">ID_VAR_TOKENS</a></dd>
+ <dd id="Doris.Parser.INTERVAL_VARS" class="variable"><a href="../parser.html#Parser.INTERVAL_VARS">INTERVAL_VARS</a></dd>
+ <dd id="Doris.Parser.COMMENT_TABLE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.COMMENT_TABLE_ALIAS_TOKENS">COMMENT_TABLE_ALIAS_TOKENS</a></dd>
+ <dd id="Doris.Parser.UPDATE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.UPDATE_ALIAS_TOKENS">UPDATE_ALIAS_TOKENS</a></dd>
+ <dd id="Doris.Parser.TRIM_TYPES" class="variable"><a href="../parser.html#Parser.TRIM_TYPES">TRIM_TYPES</a></dd>
+ <dd id="Doris.Parser.EQUALITY" class="variable"><a href="../parser.html#Parser.EQUALITY">EQUALITY</a></dd>
+ <dd id="Doris.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
+ <dd id="Doris.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
+ <dd id="Doris.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Doris.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
+ <dd id="Doris.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
+ <dd id="Doris.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
+ <dd id="Doris.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
+ <dd id="Doris.Parser.JOIN_SIDES" class="variable"><a href="../parser.html#Parser.JOIN_SIDES">JOIN_SIDES</a></dd>
+ <dd id="Doris.Parser.JOIN_KINDS" class="variable"><a href="../parser.html#Parser.JOIN_KINDS">JOIN_KINDS</a></dd>
+ <dd id="Doris.Parser.JOIN_HINTS" class="variable"><a href="../parser.html#Parser.JOIN_HINTS">JOIN_HINTS</a></dd>
+ <dd id="Doris.Parser.LAMBDAS" class="variable"><a href="../parser.html#Parser.LAMBDAS">LAMBDAS</a></dd>
+ <dd id="Doris.Parser.COLUMN_OPERATORS" class="variable"><a href="../parser.html#Parser.COLUMN_OPERATORS">COLUMN_OPERATORS</a></dd>
+ <dd id="Doris.Parser.EXPRESSION_PARSERS" class="variable"><a href="../parser.html#Parser.EXPRESSION_PARSERS">EXPRESSION_PARSERS</a></dd>
+ <dd id="Doris.Parser.UNARY_PARSERS" class="variable"><a href="../parser.html#Parser.UNARY_PARSERS">UNARY_PARSERS</a></dd>
+ <dd id="Doris.Parser.PRIMARY_PARSERS" class="variable"><a href="../parser.html#Parser.PRIMARY_PARSERS">PRIMARY_PARSERS</a></dd>
+ <dd id="Doris.Parser.PLACEHOLDER_PARSERS" class="variable"><a href="../parser.html#Parser.PLACEHOLDER_PARSERS">PLACEHOLDER_PARSERS</a></dd>
+ <dd id="Doris.Parser.PROPERTY_PARSERS" class="variable"><a href="../parser.html#Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
+ <dd id="Doris.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
+ <dd id="Doris.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Doris.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
+ <dd id="Doris.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
+ <dd id="Doris.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
+ <dd id="Doris.Parser.TYPE_LITERAL_PARSERS" class="variable"><a href="../parser.html#Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a></dd>
+ <dd id="Doris.Parser.MODIFIABLES" class="variable"><a href="../parser.html#Parser.MODIFIABLES">MODIFIABLES</a></dd>
+ <dd id="Doris.Parser.DDL_SELECT_TOKENS" class="variable"><a href="../parser.html#Parser.DDL_SELECT_TOKENS">DDL_SELECT_TOKENS</a></dd>
+ <dd id="Doris.Parser.PRE_VOLATILE_TOKENS" class="variable"><a href="../parser.html#Parser.PRE_VOLATILE_TOKENS">PRE_VOLATILE_TOKENS</a></dd>
+ <dd id="Doris.Parser.TRANSACTION_KIND" class="variable"><a href="../parser.html#Parser.TRANSACTION_KIND">TRANSACTION_KIND</a></dd>
+ <dd id="Doris.Parser.TRANSACTION_CHARACTERISTICS" class="variable"><a href="../parser.html#Parser.TRANSACTION_CHARACTERISTICS">TRANSACTION_CHARACTERISTICS</a></dd>
+ <dd id="Doris.Parser.INSERT_ALTERNATIVES" class="variable"><a href="../parser.html#Parser.INSERT_ALTERNATIVES">INSERT_ALTERNATIVES</a></dd>
+ <dd id="Doris.Parser.CLONE_KINDS" class="variable"><a href="../parser.html#Parser.CLONE_KINDS">CLONE_KINDS</a></dd>
+ <dd id="Doris.Parser.TABLE_INDEX_HINT_TOKENS" class="variable"><a href="../parser.html#Parser.TABLE_INDEX_HINT_TOKENS">TABLE_INDEX_HINT_TOKENS</a></dd>
+ <dd id="Doris.Parser.WINDOW_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_ALIAS_TOKENS">WINDOW_ALIAS_TOKENS</a></dd>
+ <dd id="Doris.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
+ <dd id="Doris.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
+ <dd id="Doris.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Doris.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
+ <dd id="Doris.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
+ <dd id="Doris.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
+ <dd id="Doris.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
+ <dd id="Doris.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
+ <dd id="Doris.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Doris.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
+ <dd id="Doris.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
+ <dd id="Doris.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Doris.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
+ <dd id="Doris.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
+ <dd id="Doris.Parser.NORMALIZE_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
+ <dd id="Doris.Parser.NULL_ORDERING" class="variable"><a href="../parser.html#Parser.NULL_ORDERING">NULL_ORDERING</a></dd>
+ <dd id="Doris.Parser.FORMAT_MAPPING" class="variable"><a href="../parser.html#Parser.FORMAT_MAPPING">FORMAT_MAPPING</a></dd>
+ <dd id="Doris.Parser.error_level" class="variable"><a href="../parser.html#Parser.error_level">error_level</a></dd>
+ <dd id="Doris.Parser.error_message_context" class="variable"><a href="../parser.html#Parser.error_message_context">error_message_context</a></dd>
+ <dd id="Doris.Parser.max_errors" class="variable"><a href="../parser.html#Parser.max_errors">max_errors</a></dd>
+ <dd id="Doris.Parser.reset" class="function"><a href="../parser.html#Parser.reset">reset</a></dd>
+ <dd id="Doris.Parser.parse" class="function"><a href="../parser.html#Parser.parse">parse</a></dd>
+ <dd id="Doris.Parser.parse_into" class="function"><a href="../parser.html#Parser.parse_into">parse_into</a></dd>
+ <dd id="Doris.Parser.check_errors" class="function"><a href="../parser.html#Parser.check_errors">check_errors</a></dd>
+ <dd id="Doris.Parser.raise_error" class="function"><a href="../parser.html#Parser.raise_error">raise_error</a></dd>
+ <dd id="Doris.Parser.expression" class="function"><a href="../parser.html#Parser.expression">expression</a></dd>
+ <dd id="Doris.Parser.validate_expression" class="function"><a href="../parser.html#Parser.validate_expression">validate_expression</a></dd>
+ <dd id="Doris.Parser.errors" class="variable"><a href="../parser.html#Parser.errors">errors</a></dd>
+ <dd id="Doris.Parser.sql" class="variable"><a href="../parser.html#Parser.sql">sql</a></dd>
+
+ </div>
+ <div><dt><a href="mysql.html#MySQL.Parser">sqlglot.dialects.mysql.MySQL.Parser</a></dt>
+ <dd id="Doris.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="mysql.html#MySQL.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="Doris.Parser.FUNC_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.FUNC_TOKENS">FUNC_TOKENS</a></dd>
+ <dd id="Doris.Parser.CONJUNCTION" class="variable"><a href="mysql.html#MySQL.Parser.CONJUNCTION">CONJUNCTION</a></dd>
+ <dd id="Doris.Parser.BITWISE" class="variable"><a href="mysql.html#MySQL.Parser.BITWISE">BITWISE</a></dd>
+ <dd id="Doris.Parser.TABLE_ALIAS_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.TABLE_ALIAS_TOKENS">TABLE_ALIAS_TOKENS</a></dd>
+ <dd id="Doris.Parser.RANGE_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.RANGE_PARSERS">RANGE_PARSERS</a></dd>
+ <dd id="Doris.Parser.FUNCTION_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
+ <dd id="Doris.Parser.STATEMENT_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.STATEMENT_PARSERS">STATEMENT_PARSERS</a></dd>
+ <dd id="Doris.Parser.SHOW_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.SHOW_PARSERS">SHOW_PARSERS</a></dd>
+ <dd id="Doris.Parser.SET_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.SET_PARSERS">SET_PARSERS</a></dd>
+ <dd id="Doris.Parser.CONSTRAINT_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
+ <dd id="Doris.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="mysql.html#MySQL.Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="Doris.Parser.PROFILE_TYPES" class="variable"><a href="mysql.html#MySQL.Parser.PROFILE_TYPES">PROFILE_TYPES</a></dd>
+ <dd id="Doris.Parser.TYPE_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
+ <dd id="Doris.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
+ <dd id="Doris.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="mysql.html#MySQL.Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Doris.Parser.TIME_MAPPING" class="variable"><a href="mysql.html#MySQL.Parser.TIME_MAPPING">TIME_MAPPING</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Doris.Generator">
+ <input id="Doris.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">Doris.Generator</span><wbr>(<span class="base"><a href="mysql.html#MySQL.Generator">sqlglot.dialects.mysql.MySQL.Generator</a></span>):
+
+ <label class="view-source-button" for="Doris.Generator-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Doris.Generator-27"><a href="#Doris.Generator-27"><span class="linenos">27</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Doris.Generator-28"><a href="#Doris.Generator-28"><span class="linenos">28</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Doris.Generator-29"><a href="#Doris.Generator-29"><span class="linenos">29</span></a>
+</span><span id="Doris.Generator-30"><a href="#Doris.Generator-30"><span class="linenos">30</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Doris.Generator-31"><a href="#Doris.Generator-31"><span class="linenos">31</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Doris.Generator-32"><a href="#Doris.Generator-32"><span class="linenos">32</span></a> <span class="n">exp</span><span 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="Doris.Generator-33"><a href="#Doris.Generator-33"><span class="linenos">33</span></a> <span class="n">exp</span><span 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="Doris.Generator-34"><a href="#Doris.Generator-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="Doris.Generator-35"><a href="#Doris.Generator-35"><span class="linenos">35</span></a> <span class="p">}</span>
+</span><span id="Doris.Generator-36"><a href="#Doris.Generator-36"><span class="linenos">36</span></a>
+</span><span id="Doris.Generator-37"><a href="#Doris.Generator-37"><span class="linenos">37</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Doris.Generator-38"><a href="#Doris.Generator-38"><span class="linenos">38</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Doris.Generator-39"><a href="#Doris.Generator-39"><span class="linenos">39</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="Doris.Generator-40"><a href="#Doris.Generator-40"><span class="linenos">40</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">),</span>
+</span><span id="Doris.Generator-41"><a href="#Doris.Generator-41"><span class="linenos">41</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;NOW()&quot;</span><span class="p">,</span>
+</span><span id="Doris.Generator-42"><a href="#Doris.Generator-42"><span class="linenos">42</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><span id="Doris.Generator-43"><a href="#Doris.Generator-43"><span class="linenos">43</span></a> <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="s2">&quot;&#39;&quot;</span> <span class="o">+</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="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Doris.Generator-44"><a href="#Doris.Generator-44"><span class="linenos">44</span></a> <span class="p">),</span>
+</span><span id="Doris.Generator-45"><a href="#Doris.Generator-45"><span class="linenos">45</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="Doris.Generator-46"><a href="#Doris.Generator-46"><span class="linenos">46</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="Doris.Generator-47"><a href="#Doris.Generator-47"><span class="linenos">47</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="Doris.Generator-48"><a href="#Doris.Generator-48"><span class="linenos">48</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_BY_STRING&quot;</span><span class="p">),</span>
+</span><span id="Doris.Generator-49"><a href="#Doris.Generator-49"><span class="linenos">49</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="Doris.Generator-50"><a href="#Doris.Generator-50"><span class="linenos">50</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="Doris.Generator-51"><a href="#Doris.Generator-51"><span class="linenos">51</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;SPLIT_BY_STRING&quot;</span><span class="p">),</span>
+</span><span id="Doris.Generator-52"><a href="#Doris.Generator-52"><span class="linenos">52</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="Doris.Generator-53"><a href="#Doris.Generator-53"><span class="linenos">53</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="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="Doris.Generator-54"><a href="#Doris.Generator-54"><span class="linenos">54</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 class="c1"># Only for day level</span>
+</span><span id="Doris.Generator-55"><a href="#Doris.Generator-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;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><span id="Doris.Generator-56"><a href="#Doris.Generator-56"><span class="linenos">56</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="Doris.Generator-57"><a href="#Doris.Generator-57"><span class="linenos">57</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="Doris.Generator-58"><a href="#Doris.Generator-58"><span class="linenos">58</span></a> <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="s2">&quot;&#39;&quot;</span> <span class="o">+</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="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Doris.Generator-59"><a href="#Doris.Generator-59"><span class="linenos">59</span></a> <span class="p">),</span>
+</span><span id="Doris.Generator-60"><a href="#Doris.Generator-60"><span class="linenos">60</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="Doris.Generator-61"><a href="#Doris.Generator-61"><span class="linenos">61</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="s2">&quot;doris&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="Doris.Generator-62"><a href="#Doris.Generator-62"><span class="linenos">62</span></a> <span class="p">),</span>
+</span><span id="Doris.Generator-63"><a href="#Doris.Generator-63"><span class="linenos">63</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="Doris.Generator-64"><a href="#Doris.Generator-64"><span class="linenos">64</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_MAP&quot;</span><span class="p">),</span>
+</span><span id="Doris.Generator-65"><a href="#Doris.Generator-65"><span class="linenos">65</span></a> <span class="p">}</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Generator converts a given syntax tree to the corresponding SQL string.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>pretty:</strong> Whether or not to format the produced SQL string.
+Default: False.</li>
+<li><strong>identify:</strong> Determines when an identifier should be quoted. Possible values are:
+False (default): Never quote, except in cases where it's mandatory by the dialect.
+True or 'always': Always quote.
+'safe': Only quote identifiers that are case insensitive.</li>
+<li><strong>normalize:</strong> Whether or not to normalize identifiers to lowercase.
+Default: False.</li>
+<li><strong>pad:</strong> Determines the pad size in a formatted string.
+Default: 2.</li>
+<li><strong>indent:</strong> Determines the indentation size in a formatted string.
+Default: 2.</li>
+<li><strong>normalize_functions:</strong> Whether or not to normalize all function names. Possible values are:
+"upper" or True (default): Convert names to uppercase.
+"lower": Convert names to lowercase.
+False: Disables function name normalization.</li>
+<li><strong>unsupported_level:</strong> Determines the generator's behavior when it encounters unsupported expressions.
+Default ErrorLevel.WARN.</li>
+<li><strong>max_unsupported:</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:</strong> Determines whether or not the comma is leading or trailing in select expressions.
+This is only relevant when generating in pretty mode.
+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="Doris.Generator.CAST_MAPPING" class="classattr">
+ <div class="attr variable">
+ <span class="name">CAST_MAPPING</span> =
+<span class="default_value">{}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.CAST_MAPPING"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.TYPE_MAPPING" class="classattr">
+ <div class="attr variable">
+ <span class="name">TYPE_MAPPING</span> =
+<input id="Doris.Generator.TYPE_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;: &#39;STRING&#39;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: &#39;DATETIME&#39;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: &#39;DATETIME&#39;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.TYPE_MAPPING"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.TRANSFORMS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TRANSFORMS</span> =
+<input id="Doris.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONKeyValue">sqlglot.expressions.JSONKeyValue</a>&#39;&gt;: &lt;function json_keyvalue_comma_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#Doris.Generator">Doris.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.TRANSFORMS"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.SELECT_KINDS" class="classattr">
+ <div class="attr variable">
+ <span class="name">SELECT_KINDS</span><span class="annotation">: Tuple[str, ...]</span> =
+<span class="default_value">()</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.SELECT_KINDS"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.INVERSE_TIME_MAPPING" class="classattr">
+ <div class="attr variable">
+ <span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
+<input id="Doris.Generator.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.INVERSE_TIME_MAPPING"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.INVERSE_TIME_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">INVERSE_TIME_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Doris.Generator.INVERSE_TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Doris.Generator.INVERSE_TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;B&#39;: {0: True}, &#39;-&#39;: {&#39;m&#39;: {0: True}, &#39;d&#39;: {0: True}, &#39;H&#39;: {0: True}, &#39;I&#39;: {0: True}}, &#39;I&#39;: {0: True}, &#39;M&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;W&#39;: {0: True}, &#39;H&#39;: {&#39;:&#39;: {&#39;%&#39;: {&#39;M&#39;: {&#39;:&#39;: {&#39;%&#39;: {&#39;S&#39;: {0: True}}}}}}}, &#39;a&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.INVERSE_TIME_TRIE"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.can_identify" class="classattr">
+ <input id="Doris.Generator.can_identify-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+ <div class="decorator">@classmethod</div>
+
+ <span class="def">def</span>
+ <span class="name">can_identify</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">text</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s1">&#39;safe&#39;</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
+
+ <label class="view-source-button" for="Doris.Generator.can_identify-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.can_identify"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Doris.Generator.can_identify-256"><a href="#Doris.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Doris.Generator.can_identify-257"><a href="#Doris.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Doris.Generator.can_identify-258"><a href="#Doris.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Doris.Generator.can_identify-259"><a href="#Doris.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Doris.Generator.can_identify-260"><a href="#Doris.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Doris.Generator.can_identify-261"><a href="#Doris.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Doris.Generator.can_identify-262"><a href="#Doris.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Doris.Generator.can_identify-263"><a href="#Doris.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Doris.Generator.can_identify-264"><a href="#Doris.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Doris.Generator.can_identify-265"><a href="#Doris.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Doris.Generator.can_identify-266"><a href="#Doris.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Doris.Generator.can_identify-267"><a href="#Doris.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Doris.Generator.can_identify-268"><a href="#Doris.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Doris.Generator.can_identify-269"><a href="#Doris.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Doris.Generator.can_identify-270"><a href="#Doris.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Doris.Generator.can_identify-271"><a href="#Doris.Generator.can_identify-271"><span class="linenos">271</span></a>
+</span><span id="Doris.Generator.can_identify-272"><a href="#Doris.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Doris.Generator.can_identify-273"><a href="#Doris.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Doris.Generator.can_identify-274"><a href="#Doris.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Doris.Generator.can_identify-275"><a href="#Doris.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Checks if text can be identified given an identify option.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>text:</strong> The text to check.</li>
+<li><strong>identify:</strong> "always" or <code>True</code>: Always returns true.
+"safe": True if the identifier is case-insensitive.</li>
+</ul>
+
+<h6 id="returns">Returns:</h6>
+
+<blockquote>
+ <p>Whether or not the given text can be identified.</p>
+</blockquote>
+</div>
+
+
+ </div>
+ <div id="Doris.Generator.QUOTE_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">QUOTE_START</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.QUOTE_START"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.QUOTE_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">QUOTE_END</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.QUOTE_END"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.IDENTIFIER_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIER_START</span> =
+<span class="default_value">&#39;`&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.IDENTIFIER_START"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.IDENTIFIER_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIER_END</span> =
+<span class="default_value">&#39;`&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.IDENTIFIER_END"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="mysql.html#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.BIT_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">BIT_START</span><span class="annotation">: Optional[str]</span> =
+<span class="default_value">&#34;b&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.BIT_START"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.BIT_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">BIT_END</span><span class="annotation">: Optional[str]</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.BIT_END"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.HEX_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEX_START</span><span class="annotation">: Optional[str]</span> =
+<span class="default_value">&#34;x&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.HEX_START"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.HEX_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEX_END</span><span class="annotation">: Optional[str]</span> =
+<span class="default_value">&#34;&#39;&#34;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.HEX_END"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.BYTE_START" class="classattr">
+ <div class="attr variable">
+ <span class="name">BYTE_START</span><span class="annotation">: Optional[str]</span> =
+<span class="default_value">None</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.BYTE_START"></a>
+
+
+
+ </div>
+ <div id="Doris.Generator.BYTE_END" class="classattr">
+ <div class="attr variable">
+ <span class="name">BYTE_END</span><span class="annotation">: Optional[str]</span> =
+<span class="default_value">None</span>
+
+
+ </div>
+ <a class="headerlink" href="#Doris.Generator.BYTE_END"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="../generator.html#Generator">sqlglot.generator.Generator</a></dt>
+ <dd id="Doris.Generator.__init__" class="function"><a href="../generator.html#Generator.__init__">Generator</a></dd>
+ <dd id="Doris.Generator.EXPLICIT_UNION" class="variable"><a href="../generator.html#Generator.EXPLICIT_UNION">EXPLICIT_UNION</a></dd>
+ <dd id="Doris.Generator.WRAP_DERIVED_VALUES" class="variable"><a href="../generator.html#Generator.WRAP_DERIVED_VALUES">WRAP_DERIVED_VALUES</a></dd>
+ <dd id="Doris.Generator.CREATE_FUNCTION_RETURN_AS" class="variable"><a href="../generator.html#Generator.CREATE_FUNCTION_RETURN_AS">CREATE_FUNCTION_RETURN_AS</a></dd>
+ <dd id="Doris.Generator.MATCHED_BY_SOURCE" class="variable"><a href="../generator.html#Generator.MATCHED_BY_SOURCE">MATCHED_BY_SOURCE</a></dd>
+ <dd id="Doris.Generator.SINGLE_STRING_INTERVAL" class="variable"><a href="../generator.html#Generator.SINGLE_STRING_INTERVAL">SINGLE_STRING_INTERVAL</a></dd>
+ <dd id="Doris.Generator.INTERVAL_ALLOWS_PLURAL_FORM" class="variable"><a href="../generator.html#Generator.INTERVAL_ALLOWS_PLURAL_FORM">INTERVAL_ALLOWS_PLURAL_FORM</a></dd>
+ <dd id="Doris.Generator.TABLESAMPLE_WITH_METHOD" class="variable"><a href="../generator.html#Generator.TABLESAMPLE_WITH_METHOD">TABLESAMPLE_WITH_METHOD</a></dd>
+ <dd id="Doris.Generator.TABLESAMPLE_SIZE_IS_PERCENT" class="variable"><a href="../generator.html#Generator.TABLESAMPLE_SIZE_IS_PERCENT">TABLESAMPLE_SIZE_IS_PERCENT</a></dd>
+ <dd id="Doris.Generator.RENAME_TABLE_WITH_DB" class="variable"><a href="../generator.html#Generator.RENAME_TABLE_WITH_DB">RENAME_TABLE_WITH_DB</a></dd>
+ <dd id="Doris.Generator.GROUPINGS_SEP" class="variable"><a href="../generator.html#Generator.GROUPINGS_SEP">GROUPINGS_SEP</a></dd>
+ <dd id="Doris.Generator.INDEX_ON" class="variable"><a href="../generator.html#Generator.INDEX_ON">INDEX_ON</a></dd>
+ <dd id="Doris.Generator.QUERY_HINTS" class="variable"><a href="../generator.html#Generator.QUERY_HINTS">QUERY_HINTS</a></dd>
+ <dd id="Doris.Generator.IS_BOOL_ALLOWED" class="variable"><a href="../generator.html#Generator.IS_BOOL_ALLOWED">IS_BOOL_ALLOWED</a></dd>
+ <dd id="Doris.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
+ <dd id="Doris.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
+ <dd id="Doris.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
+ <dd id="Doris.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Doris.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Doris.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
+ <dd id="Doris.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
+ <dd id="Doris.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
+ <dd id="Doris.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
+ <dd id="Doris.Generator.STRUCT_DELIMITER" class="variable"><a href="../generator.html#Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a></dd>
+ <dd id="Doris.Generator.PARAMETER_TOKEN" class="variable"><a href="../generator.html#Generator.PARAMETER_TOKEN">PARAMETER_TOKEN</a></dd>
+ <dd id="Doris.Generator.RESERVED_KEYWORDS" class="variable"><a href="../generator.html#Generator.RESERVED_KEYWORDS">RESERVED_KEYWORDS</a></dd>
+ <dd id="Doris.Generator.WITH_SEPARATED_COMMENTS" class="variable"><a href="../generator.html#Generator.WITH_SEPARATED_COMMENTS">WITH_SEPARATED_COMMENTS</a></dd>
+ <dd id="Doris.Generator.UNWRAPPED_INTERVAL_VALUES" class="variable"><a href="../generator.html#Generator.UNWRAPPED_INTERVAL_VALUES">UNWRAPPED_INTERVAL_VALUES</a></dd>
+ <dd id="Doris.Generator.SENTINEL_LINE_BREAK" class="variable"><a href="../generator.html#Generator.SENTINEL_LINE_BREAK">SENTINEL_LINE_BREAK</a></dd>
+ <dd id="Doris.Generator.INDEX_OFFSET" class="variable"><a href="../generator.html#Generator.INDEX_OFFSET">INDEX_OFFSET</a></dd>
+ <dd id="Doris.Generator.UNNEST_COLUMN_ONLY" class="variable"><a href="../generator.html#Generator.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Doris.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../generator.html#Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
+ <dd id="Doris.Generator.STRICT_STRING_CONCAT" class="variable"><a href="../generator.html#Generator.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
+ <dd id="Doris.Generator.NORMALIZE_FUNCTIONS" class="variable"><a href="../generator.html#Generator.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
+ <dd id="Doris.Generator.NULL_ORDERING" class="variable"><a href="../generator.html#Generator.NULL_ORDERING">NULL_ORDERING</a></dd>
+ <dd id="Doris.Generator.ESCAPE_LINE_BREAK" class="variable"><a href="../generator.html#Generator.ESCAPE_LINE_BREAK">ESCAPE_LINE_BREAK</a></dd>
+ <dd id="Doris.Generator.pretty" class="variable"><a href="../generator.html#Generator.pretty">pretty</a></dd>
+ <dd id="Doris.Generator.identify" class="variable"><a href="../generator.html#Generator.identify">identify</a></dd>
+ <dd id="Doris.Generator.normalize" class="variable"><a href="../generator.html#Generator.normalize">normalize</a></dd>
+ <dd id="Doris.Generator.pad" class="variable"><a href="../generator.html#Generator.pad">pad</a></dd>
+ <dd id="Doris.Generator.unsupported_level" class="variable"><a href="../generator.html#Generator.unsupported_level">unsupported_level</a></dd>
+ <dd id="Doris.Generator.max_unsupported" class="variable"><a href="../generator.html#Generator.max_unsupported">max_unsupported</a></dd>
+ <dd id="Doris.Generator.leading_comma" class="variable"><a href="../generator.html#Generator.leading_comma">leading_comma</a></dd>
+ <dd id="Doris.Generator.max_text_width" class="variable"><a href="../generator.html#Generator.max_text_width">max_text_width</a></dd>
+ <dd id="Doris.Generator.comments" class="variable"><a href="../generator.html#Generator.comments">comments</a></dd>
+ <dd id="Doris.Generator.normalize_functions" class="variable"><a href="../generator.html#Generator.normalize_functions">normalize_functions</a></dd>
+ <dd id="Doris.Generator.unsupported_messages" class="variable"><a href="../generator.html#Generator.unsupported_messages">unsupported_messages</a></dd>
+ <dd id="Doris.Generator.generate" class="function"><a href="../generator.html#Generator.generate">generate</a></dd>
+ <dd id="Doris.Generator.unsupported" class="function"><a href="../generator.html#Generator.unsupported">unsupported</a></dd>
+ <dd id="Doris.Generator.sep" class="function"><a href="../generator.html#Generator.sep">sep</a></dd>
+ <dd id="Doris.Generator.seg" class="function"><a href="../generator.html#Generator.seg">seg</a></dd>
+ <dd id="Doris.Generator.pad_comment" class="function"><a href="../generator.html#Generator.pad_comment">pad_comment</a></dd>
+ <dd id="Doris.Generator.maybe_comment" class="function"><a href="../generator.html#Generator.maybe_comment">maybe_comment</a></dd>
+ <dd id="Doris.Generator.wrap" class="function"><a href="../generator.html#Generator.wrap">wrap</a></dd>
+ <dd id="Doris.Generator.no_identify" class="function"><a href="../generator.html#Generator.no_identify">no_identify</a></dd>
+ <dd id="Doris.Generator.normalize_func" class="function"><a href="../generator.html#Generator.normalize_func">normalize_func</a></dd>
+ <dd id="Doris.Generator.indent" class="function"><a href="../generator.html#Generator.indent">indent</a></dd>
+ <dd id="Doris.Generator.sql" class="function"><a href="../generator.html#Generator.sql">sql</a></dd>
+ <dd id="Doris.Generator.uncache_sql" class="function"><a href="../generator.html#Generator.uncache_sql">uncache_sql</a></dd>
+ <dd id="Doris.Generator.cache_sql" class="function"><a href="../generator.html#Generator.cache_sql">cache_sql</a></dd>
+ <dd id="Doris.Generator.characterset_sql" class="function"><a href="../generator.html#Generator.characterset_sql">characterset_sql</a></dd>
+ <dd id="Doris.Generator.column_sql" class="function"><a href="../generator.html#Generator.column_sql">column_sql</a></dd>
+ <dd id="Doris.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
+ <dd id="Doris.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
+ <dd id="Doris.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.notnullcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.notnullcolumnconstraint_sql">notnullcolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.primarykeycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.primarykeycolumnconstraint_sql">primarykeycolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.uniquecolumnconstraint_sql" class="function"><a href="../generator.html#Generator.uniquecolumnconstraint_sql">uniquecolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.createable_sql" class="function"><a href="../generator.html#Generator.createable_sql">createable_sql</a></dd>
+ <dd id="Doris.Generator.create_sql" class="function"><a href="../generator.html#Generator.create_sql">create_sql</a></dd>
+ <dd id="Doris.Generator.clone_sql" class="function"><a href="../generator.html#Generator.clone_sql">clone_sql</a></dd>
+ <dd id="Doris.Generator.describe_sql" class="function"><a href="../generator.html#Generator.describe_sql">describe_sql</a></dd>
+ <dd id="Doris.Generator.prepend_ctes" class="function"><a href="../generator.html#Generator.prepend_ctes">prepend_ctes</a></dd>
+ <dd id="Doris.Generator.with_sql" class="function"><a href="../generator.html#Generator.with_sql">with_sql</a></dd>
+ <dd id="Doris.Generator.cte_sql" class="function"><a href="../generator.html#Generator.cte_sql">cte_sql</a></dd>
+ <dd id="Doris.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
+ <dd id="Doris.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
+ <dd id="Doris.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
+ <dd id="Doris.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
+ <dd id="Doris.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
+ <dd id="Doris.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
+ <dd id="Doris.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
+ <dd id="Doris.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
+ <dd id="Doris.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
+ <dd id="Doris.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
+ <dd id="Doris.Generator.except_sql" class="function"><a href="../generator.html#Generator.except_sql">except_sql</a></dd>
+ <dd id="Doris.Generator.except_op" class="function"><a href="../generator.html#Generator.except_op">except_op</a></dd>
+ <dd id="Doris.Generator.fetch_sql" class="function"><a href="../generator.html#Generator.fetch_sql">fetch_sql</a></dd>
+ <dd id="Doris.Generator.filter_sql" class="function"><a href="../generator.html#Generator.filter_sql">filter_sql</a></dd>
+ <dd id="Doris.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
+ <dd id="Doris.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
+ <dd id="Doris.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
+ <dd id="Doris.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
+ <dd id="Doris.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
+ <dd id="Doris.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
+ <dd id="Doris.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
+ <dd id="Doris.Generator.root_properties" class="function"><a href="../generator.html#Generator.root_properties">root_properties</a></dd>
+ <dd id="Doris.Generator.properties" class="function"><a href="../generator.html#Generator.properties">properties</a></dd>
+ <dd id="Doris.Generator.with_properties" class="function"><a href="../generator.html#Generator.with_properties">with_properties</a></dd>
+ <dd id="Doris.Generator.locate_properties" class="function"><a href="../generator.html#Generator.locate_properties">locate_properties</a></dd>
+ <dd id="Doris.Generator.property_sql" class="function"><a href="../generator.html#Generator.property_sql">property_sql</a></dd>
+ <dd id="Doris.Generator.likeproperty_sql" class="function"><a href="../generator.html#Generator.likeproperty_sql">likeproperty_sql</a></dd>
+ <dd id="Doris.Generator.fallbackproperty_sql" class="function"><a href="../generator.html#Generator.fallbackproperty_sql">fallbackproperty_sql</a></dd>
+ <dd id="Doris.Generator.journalproperty_sql" class="function"><a href="../generator.html#Generator.journalproperty_sql">journalproperty_sql</a></dd>
+ <dd id="Doris.Generator.freespaceproperty_sql" class="function"><a href="../generator.html#Generator.freespaceproperty_sql">freespaceproperty_sql</a></dd>
+ <dd id="Doris.Generator.checksumproperty_sql" class="function"><a href="../generator.html#Generator.checksumproperty_sql">checksumproperty_sql</a></dd>
+ <dd id="Doris.Generator.mergeblockratioproperty_sql" class="function"><a href="../generator.html#Generator.mergeblockratioproperty_sql">mergeblockratioproperty_sql</a></dd>
+ <dd id="Doris.Generator.datablocksizeproperty_sql" class="function"><a href="../generator.html#Generator.datablocksizeproperty_sql">datablocksizeproperty_sql</a></dd>
+ <dd id="Doris.Generator.blockcompressionproperty_sql" class="function"><a href="../generator.html#Generator.blockcompressionproperty_sql">blockcompressionproperty_sql</a></dd>
+ <dd id="Doris.Generator.isolatedloadingproperty_sql" class="function"><a href="../generator.html#Generator.isolatedloadingproperty_sql">isolatedloadingproperty_sql</a></dd>
+ <dd id="Doris.Generator.lockingproperty_sql" class="function"><a href="../generator.html#Generator.lockingproperty_sql">lockingproperty_sql</a></dd>
+ <dd id="Doris.Generator.withdataproperty_sql" class="function"><a href="../generator.html#Generator.withdataproperty_sql">withdataproperty_sql</a></dd>
+ <dd id="Doris.Generator.insert_sql" class="function"><a href="../generator.html#Generator.insert_sql">insert_sql</a></dd>
+ <dd id="Doris.Generator.intersect_sql" class="function"><a href="../generator.html#Generator.intersect_sql">intersect_sql</a></dd>
+ <dd id="Doris.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
+ <dd id="Doris.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
+ <dd id="Doris.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
+ <dd id="Doris.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
+ <dd id="Doris.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
+ <dd id="Doris.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
+ <dd id="Doris.Generator.withtablehint_sql" class="function"><a href="../generator.html#Generator.withtablehint_sql">withtablehint_sql</a></dd>
+ <dd id="Doris.Generator.indextablehint_sql" class="function"><a href="../generator.html#Generator.indextablehint_sql">indextablehint_sql</a></dd>
+ <dd id="Doris.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
+ <dd id="Doris.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
+ <dd id="Doris.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Doris.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
+ <dd id="Doris.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
+ <dd id="Doris.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
+ <dd id="Doris.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
+ <dd id="Doris.Generator.var_sql" class="function"><a href="../generator.html#Generator.var_sql">var_sql</a></dd>
+ <dd id="Doris.Generator.into_sql" class="function"><a href="../generator.html#Generator.into_sql">into_sql</a></dd>
+ <dd id="Doris.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
+ <dd id="Doris.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
+ <dd id="Doris.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Doris.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Doris.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
+ <dd id="Doris.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
+ <dd id="Doris.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
+ <dd id="Doris.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
+ <dd id="Doris.Generator.setitem_sql" class="function"><a href="../generator.html#Generator.setitem_sql">setitem_sql</a></dd>
+ <dd id="Doris.Generator.set_sql" class="function"><a href="../generator.html#Generator.set_sql">set_sql</a></dd>
+ <dd id="Doris.Generator.pragma_sql" class="function"><a href="../generator.html#Generator.pragma_sql">pragma_sql</a></dd>
+ <dd id="Doris.Generator.lock_sql" class="function"><a href="../generator.html#Generator.lock_sql">lock_sql</a></dd>
+ <dd id="Doris.Generator.literal_sql" class="function"><a href="../generator.html#Generator.literal_sql">literal_sql</a></dd>
+ <dd id="Doris.Generator.escape_str" class="function"><a href="../generator.html#Generator.escape_str">escape_str</a></dd>
+ <dd id="Doris.Generator.loaddata_sql" class="function"><a href="../generator.html#Generator.loaddata_sql">loaddata_sql</a></dd>
+ <dd id="Doris.Generator.null_sql" class="function"><a href="../generator.html#Generator.null_sql">null_sql</a></dd>
+ <dd id="Doris.Generator.boolean_sql" class="function"><a href="../generator.html#Generator.boolean_sql">boolean_sql</a></dd>
+ <dd id="Doris.Generator.order_sql" class="function"><a href="../generator.html#Generator.order_sql">order_sql</a></dd>
+ <dd id="Doris.Generator.cluster_sql" class="function"><a href="../generator.html#Generator.cluster_sql">cluster_sql</a></dd>
+ <dd id="Doris.Generator.distribute_sql" class="function"><a href="../generator.html#Generator.distribute_sql">distribute_sql</a></dd>
+ <dd id="Doris.Generator.sort_sql" class="function"><a href="../generator.html#Generator.sort_sql">sort_sql</a></dd>
+ <dd id="Doris.Generator.ordered_sql" class="function"><a href="../generator.html#Generator.ordered_sql">ordered_sql</a></dd>
+ <dd id="Doris.Generator.matchrecognize_sql" class="function"><a href="../generator.html#Generator.matchrecognize_sql">matchrecognize_sql</a></dd>
+ <dd id="Doris.Generator.query_modifiers" class="function"><a href="../generator.html#Generator.query_modifiers">query_modifiers</a></dd>
+ <dd id="Doris.Generator.offset_limit_modifiers" class="function"><a href="../generator.html#Generator.offset_limit_modifiers">offset_limit_modifiers</a></dd>
+ <dd id="Doris.Generator.after_having_modifiers" class="function"><a href="../generator.html#Generator.after_having_modifiers">after_having_modifiers</a></dd>
+ <dd id="Doris.Generator.after_limit_modifiers" class="function"><a href="../generator.html#Generator.after_limit_modifiers">after_limit_modifiers</a></dd>
+ <dd id="Doris.Generator.select_sql" class="function"><a href="../generator.html#Generator.select_sql">select_sql</a></dd>
+ <dd id="Doris.Generator.schema_sql" class="function"><a href="../generator.html#Generator.schema_sql">schema_sql</a></dd>
+ <dd id="Doris.Generator.schema_columns_sql" class="function"><a href="../generator.html#Generator.schema_columns_sql">schema_columns_sql</a></dd>
+ <dd id="Doris.Generator.star_sql" class="function"><a href="../generator.html#Generator.star_sql">star_sql</a></dd>
+ <dd id="Doris.Generator.parameter_sql" class="function"><a href="../generator.html#Generator.parameter_sql">parameter_sql</a></dd>
+ <dd id="Doris.Generator.sessionparameter_sql" class="function"><a href="../generator.html#Generator.sessionparameter_sql">sessionparameter_sql</a></dd>
+ <dd id="Doris.Generator.placeholder_sql" class="function"><a href="../generator.html#Generator.placeholder_sql">placeholder_sql</a></dd>
+ <dd id="Doris.Generator.subquery_sql" class="function"><a href="../generator.html#Generator.subquery_sql">subquery_sql</a></dd>
+ <dd id="Doris.Generator.qualify_sql" class="function"><a href="../generator.html#Generator.qualify_sql">qualify_sql</a></dd>
+ <dd id="Doris.Generator.union_sql" class="function"><a href="../generator.html#Generator.union_sql">union_sql</a></dd>
+ <dd id="Doris.Generator.union_op" class="function"><a href="../generator.html#Generator.union_op">union_op</a></dd>
+ <dd id="Doris.Generator.unnest_sql" class="function"><a href="../generator.html#Generator.unnest_sql">unnest_sql</a></dd>
+ <dd id="Doris.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
+ <dd id="Doris.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
+ <dd id="Doris.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
+ <dd id="Doris.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
+ <dd id="Doris.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
+ <dd id="Doris.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
+ <dd id="Doris.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
+ <dd id="Doris.Generator.safebracket_sql" class="function"><a href="../generator.html#Generator.safebracket_sql">safebracket_sql</a></dd>
+ <dd id="Doris.Generator.all_sql" class="function"><a href="../generator.html#Generator.all_sql">all_sql</a></dd>
+ <dd id="Doris.Generator.any_sql" class="function"><a href="../generator.html#Generator.any_sql">any_sql</a></dd>
+ <dd id="Doris.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
+ <dd id="Doris.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
+ <dd id="Doris.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Doris.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
+ <dd id="Doris.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
+ <dd id="Doris.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
+ <dd id="Doris.Generator.safeconcat_sql" class="function"><a href="../generator.html#Generator.safeconcat_sql">safeconcat_sql</a></dd>
+ <dd id="Doris.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
+ <dd id="Doris.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
+ <dd id="Doris.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
+ <dd id="Doris.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
+ <dd id="Doris.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
+ <dd id="Doris.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
+ <dd id="Doris.Generator.jsonobject_sql" class="function"><a href="../generator.html#Generator.jsonobject_sql">jsonobject_sql</a></dd>
+ <dd id="Doris.Generator.openjsoncolumndef_sql" class="function"><a href="../generator.html#Generator.openjsoncolumndef_sql">openjsoncolumndef_sql</a></dd>
+ <dd id="Doris.Generator.openjson_sql" class="function"><a href="../generator.html#Generator.openjson_sql">openjson_sql</a></dd>
+ <dd id="Doris.Generator.in_sql" class="function"><a href="../generator.html#Generator.in_sql">in_sql</a></dd>
+ <dd id="Doris.Generator.in_unnest_op" class="function"><a href="../generator.html#Generator.in_unnest_op">in_unnest_op</a></dd>
+ <dd id="Doris.Generator.interval_sql" class="function"><a href="../generator.html#Generator.interval_sql">interval_sql</a></dd>
+ <dd id="Doris.Generator.return_sql" class="function"><a href="../generator.html#Generator.return_sql">return_sql</a></dd>
+ <dd id="Doris.Generator.reference_sql" class="function"><a href="../generator.html#Generator.reference_sql">reference_sql</a></dd>
+ <dd id="Doris.Generator.anonymous_sql" class="function"><a href="../generator.html#Generator.anonymous_sql">anonymous_sql</a></dd>
+ <dd id="Doris.Generator.paren_sql" class="function"><a href="../generator.html#Generator.paren_sql">paren_sql</a></dd>
+ <dd id="Doris.Generator.neg_sql" class="function"><a href="../generator.html#Generator.neg_sql">neg_sql</a></dd>
+ <dd id="Doris.Generator.not_sql" class="function"><a href="../generator.html#Generator.not_sql">not_sql</a></dd>
+ <dd id="Doris.Generator.alias_sql" class="function"><a href="../generator.html#Generator.alias_sql">alias_sql</a></dd>
+ <dd id="Doris.Generator.aliases_sql" class="function"><a href="../generator.html#Generator.aliases_sql">aliases_sql</a></dd>
+ <dd id="Doris.Generator.attimezone_sql" class="function"><a href="../generator.html#Generator.attimezone_sql">attimezone_sql</a></dd>
+ <dd id="Doris.Generator.add_sql" class="function"><a href="../generator.html#Generator.add_sql">add_sql</a></dd>
+ <dd id="Doris.Generator.and_sql" class="function"><a href="../generator.html#Generator.and_sql">and_sql</a></dd>
+ <dd id="Doris.Generator.connector_sql" class="function"><a href="../generator.html#Generator.connector_sql">connector_sql</a></dd>
+ <dd id="Doris.Generator.bitwiseand_sql" class="function"><a href="../generator.html#Generator.bitwiseand_sql">bitwiseand_sql</a></dd>
+ <dd id="Doris.Generator.bitwiseleftshift_sql" class="function"><a href="../generator.html#Generator.bitwiseleftshift_sql">bitwiseleftshift_sql</a></dd>
+ <dd id="Doris.Generator.bitwisenot_sql" class="function"><a href="../generator.html#Generator.bitwisenot_sql">bitwisenot_sql</a></dd>
+ <dd id="Doris.Generator.bitwiseor_sql" class="function"><a href="../generator.html#Generator.bitwiseor_sql">bitwiseor_sql</a></dd>
+ <dd id="Doris.Generator.bitwiserightshift_sql" class="function"><a href="../generator.html#Generator.bitwiserightshift_sql">bitwiserightshift_sql</a></dd>
+ <dd id="Doris.Generator.bitwisexor_sql" class="function"><a href="../generator.html#Generator.bitwisexor_sql">bitwisexor_sql</a></dd>
+ <dd id="Doris.Generator.currentdate_sql" class="function"><a href="../generator.html#Generator.currentdate_sql">currentdate_sql</a></dd>
+ <dd id="Doris.Generator.collate_sql" class="function"><a href="../generator.html#Generator.collate_sql">collate_sql</a></dd>
+ <dd id="Doris.Generator.command_sql" class="function"><a href="../generator.html#Generator.command_sql">command_sql</a></dd>
+ <dd id="Doris.Generator.comment_sql" class="function"><a href="../generator.html#Generator.comment_sql">comment_sql</a></dd>
+ <dd id="Doris.Generator.mergetreettlaction_sql" class="function"><a href="../generator.html#Generator.mergetreettlaction_sql">mergetreettlaction_sql</a></dd>
+ <dd id="Doris.Generator.mergetreettl_sql" class="function"><a href="../generator.html#Generator.mergetreettl_sql">mergetreettl_sql</a></dd>
+ <dd id="Doris.Generator.transaction_sql" class="function"><a href="../generator.html#Generator.transaction_sql">transaction_sql</a></dd>
+ <dd id="Doris.Generator.commit_sql" class="function"><a href="../generator.html#Generator.commit_sql">commit_sql</a></dd>
+ <dd id="Doris.Generator.rollback_sql" class="function"><a href="../generator.html#Generator.rollback_sql">rollback_sql</a></dd>
+ <dd id="Doris.Generator.altercolumn_sql" class="function"><a href="../generator.html#Generator.altercolumn_sql">altercolumn_sql</a></dd>
+ <dd id="Doris.Generator.renametable_sql" class="function"><a href="../generator.html#Generator.renametable_sql">renametable_sql</a></dd>
+ <dd id="Doris.Generator.altertable_sql" class="function"><a href="../generator.html#Generator.altertable_sql">altertable_sql</a></dd>
+ <dd id="Doris.Generator.droppartition_sql" class="function"><a href="../generator.html#Generator.droppartition_sql">droppartition_sql</a></dd>
+ <dd id="Doris.Generator.addconstraint_sql" class="function"><a href="../generator.html#Generator.addconstraint_sql">addconstraint_sql</a></dd>
+ <dd id="Doris.Generator.distinct_sql" class="function"><a href="../generator.html#Generator.distinct_sql">distinct_sql</a></dd>
+ <dd id="Doris.Generator.ignorenulls_sql" class="function"><a href="../generator.html#Generator.ignorenulls_sql">ignorenulls_sql</a></dd>
+ <dd id="Doris.Generator.respectnulls_sql" class="function"><a href="../generator.html#Generator.respectnulls_sql">respectnulls_sql</a></dd>
+ <dd id="Doris.Generator.intdiv_sql" class="function"><a href="../generator.html#Generator.intdiv_sql">intdiv_sql</a></dd>
+ <dd id="Doris.Generator.dpipe_sql" class="function"><a href="../generator.html#Generator.dpipe_sql">dpipe_sql</a></dd>
+ <dd id="Doris.Generator.safedpipe_sql" class="function"><a href="../generator.html#Generator.safedpipe_sql">safedpipe_sql</a></dd>
+ <dd id="Doris.Generator.div_sql" class="function"><a href="../generator.html#Generator.div_sql">div_sql</a></dd>
+ <dd id="Doris.Generator.overlaps_sql" class="function"><a href="../generator.html#Generator.overlaps_sql">overlaps_sql</a></dd>
+ <dd id="Doris.Generator.distance_sql" class="function"><a href="../generator.html#Generator.distance_sql">distance_sql</a></dd>
+ <dd id="Doris.Generator.dot_sql" class="function"><a href="../generator.html#Generator.dot_sql">dot_sql</a></dd>
+ <dd id="Doris.Generator.eq_sql" class="function"><a href="../generator.html#Generator.eq_sql">eq_sql</a></dd>
+ <dd id="Doris.Generator.escape_sql" class="function"><a href="../generator.html#Generator.escape_sql">escape_sql</a></dd>
+ <dd id="Doris.Generator.glob_sql" class="function"><a href="../generator.html#Generator.glob_sql">glob_sql</a></dd>
+ <dd id="Doris.Generator.gt_sql" class="function"><a href="../generator.html#Generator.gt_sql">gt_sql</a></dd>
+ <dd id="Doris.Generator.gte_sql" class="function"><a href="../generator.html#Generator.gte_sql">gte_sql</a></dd>
+ <dd id="Doris.Generator.ilike_sql" class="function"><a href="../generator.html#Generator.ilike_sql">ilike_sql</a></dd>
+ <dd id="Doris.Generator.ilikeany_sql" class="function"><a href="../generator.html#Generator.ilikeany_sql">ilikeany_sql</a></dd>
+ <dd id="Doris.Generator.is_sql" class="function"><a href="../generator.html#Generator.is_sql">is_sql</a></dd>
+ <dd id="Doris.Generator.like_sql" class="function"><a href="../generator.html#Generator.like_sql">like_sql</a></dd>
+ <dd id="Doris.Generator.likeany_sql" class="function"><a href="../generator.html#Generator.likeany_sql">likeany_sql</a></dd>
+ <dd id="Doris.Generator.similarto_sql" class="function"><a href="../generator.html#Generator.similarto_sql">similarto_sql</a></dd>
+ <dd id="Doris.Generator.lt_sql" class="function"><a href="../generator.html#Generator.lt_sql">lt_sql</a></dd>
+ <dd id="Doris.Generator.lte_sql" class="function"><a href="../generator.html#Generator.lte_sql">lte_sql</a></dd>
+ <dd id="Doris.Generator.mod_sql" class="function"><a href="../generator.html#Generator.mod_sql">mod_sql</a></dd>
+ <dd id="Doris.Generator.mul_sql" class="function"><a href="../generator.html#Generator.mul_sql">mul_sql</a></dd>
+ <dd id="Doris.Generator.neq_sql" class="function"><a href="../generator.html#Generator.neq_sql">neq_sql</a></dd>
+ <dd id="Doris.Generator.nullsafeeq_sql" class="function"><a href="../generator.html#Generator.nullsafeeq_sql">nullsafeeq_sql</a></dd>
+ <dd id="Doris.Generator.nullsafeneq_sql" class="function"><a href="../generator.html#Generator.nullsafeneq_sql">nullsafeneq_sql</a></dd>
+ <dd id="Doris.Generator.or_sql" class="function"><a href="../generator.html#Generator.or_sql">or_sql</a></dd>
+ <dd id="Doris.Generator.slice_sql" class="function"><a href="../generator.html#Generator.slice_sql">slice_sql</a></dd>
+ <dd id="Doris.Generator.sub_sql" class="function"><a href="../generator.html#Generator.sub_sql">sub_sql</a></dd>
+ <dd id="Doris.Generator.trycast_sql" class="function"><a href="../generator.html#Generator.trycast_sql">trycast_sql</a></dd>
+ <dd id="Doris.Generator.use_sql" class="function"><a href="../generator.html#Generator.use_sql">use_sql</a></dd>
+ <dd id="Doris.Generator.binary" class="function"><a href="../generator.html#Generator.binary">binary</a></dd>
+ <dd id="Doris.Generator.function_fallback_sql" class="function"><a href="../generator.html#Generator.function_fallback_sql">function_fallback_sql</a></dd>
+ <dd id="Doris.Generator.func" class="function"><a href="../generator.html#Generator.func">func</a></dd>
+ <dd id="Doris.Generator.format_args" class="function"><a href="../generator.html#Generator.format_args">format_args</a></dd>
+ <dd id="Doris.Generator.text_width" class="function"><a href="../generator.html#Generator.text_width">text_width</a></dd>
+ <dd id="Doris.Generator.format_time" class="function"><a href="../generator.html#Generator.format_time">format_time</a></dd>
+ <dd id="Doris.Generator.expressions" class="function"><a href="../generator.html#Generator.expressions">expressions</a></dd>
+ <dd id="Doris.Generator.op_expressions" class="function"><a href="../generator.html#Generator.op_expressions">op_expressions</a></dd>
+ <dd id="Doris.Generator.naked_property" class="function"><a href="../generator.html#Generator.naked_property">naked_property</a></dd>
+ <dd id="Doris.Generator.set_operation" class="function"><a href="../generator.html#Generator.set_operation">set_operation</a></dd>
+ <dd id="Doris.Generator.tag_sql" class="function"><a href="../generator.html#Generator.tag_sql">tag_sql</a></dd>
+ <dd id="Doris.Generator.token_sql" class="function"><a href="../generator.html#Generator.token_sql">token_sql</a></dd>
+ <dd id="Doris.Generator.userdefinedfunction_sql" class="function"><a href="../generator.html#Generator.userdefinedfunction_sql">userdefinedfunction_sql</a></dd>
+ <dd id="Doris.Generator.joinhint_sql" class="function"><a href="../generator.html#Generator.joinhint_sql">joinhint_sql</a></dd>
+ <dd id="Doris.Generator.kwarg_sql" class="function"><a href="../generator.html#Generator.kwarg_sql">kwarg_sql</a></dd>
+ <dd id="Doris.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
+ <dd id="Doris.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
+ <dd id="Doris.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
+ <dd id="Doris.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
+ <dd id="Doris.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
+ <dd id="Doris.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
+ <dd id="Doris.Generator.oncluster_sql" class="function"><a href="../generator.html#Generator.oncluster_sql">oncluster_sql</a></dd>
+ <dd id="Doris.Generator.clusteredbyproperty_sql" class="function"><a href="../generator.html#Generator.clusteredbyproperty_sql">clusteredbyproperty_sql</a></dd>
+ <dd id="Doris.Generator.anyvalue_sql" class="function"><a href="../generator.html#Generator.anyvalue_sql">anyvalue_sql</a></dd>
+ <dd id="Doris.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
+ <dd id="Doris.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
+ <dd id="Doris.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Doris.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Doris.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
+
+ </div>
+ <div><dt><a href="mysql.html#MySQL.Generator">sqlglot.dialects.mysql.MySQL.Generator</a></dt>
+ <dd id="Doris.Generator.LOCKING_READS_SUPPORTED" class="variable"><a href="mysql.html#MySQL.Generator.LOCKING_READS_SUPPORTED">LOCKING_READS_SUPPORTED</a></dd>
+ <dd id="Doris.Generator.NULL_ORDERING_SUPPORTED" class="variable"><a href="mysql.html#MySQL.Generator.NULL_ORDERING_SUPPORTED">NULL_ORDERING_SUPPORTED</a></dd>
+ <dd id="Doris.Generator.JOIN_HINTS" class="variable"><a href="mysql.html#MySQL.Generator.JOIN_HINTS">JOIN_HINTS</a></dd>
+ <dd id="Doris.Generator.TABLE_HINTS" class="variable"><a href="mysql.html#MySQL.Generator.TABLE_HINTS">TABLE_HINTS</a></dd>
+ <dd id="Doris.Generator.DUPLICATE_KEY_UPDATE_WITH_SET" class="variable"><a href="mysql.html#MySQL.Generator.DUPLICATE_KEY_UPDATE_WITH_SET">DUPLICATE_KEY_UPDATE_WITH_SET</a></dd>
+ <dd id="Doris.Generator.QUERY_HINT_SEP" class="variable"><a href="mysql.html#MySQL.Generator.QUERY_HINT_SEP">QUERY_HINT_SEP</a></dd>
+ <dd id="Doris.Generator.VALUES_AS_TABLE" class="variable"><a href="mysql.html#MySQL.Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Doris.Generator.NVL2_SUPPORTED" class="variable"><a href="mysql.html#MySQL.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
+ <dd id="Doris.Generator.PROPERTIES_LOCATION" class="variable"><a href="mysql.html#MySQL.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
+ <dd id="Doris.Generator.LIMIT_FETCH" class="variable"><a href="mysql.html#MySQL.Generator.LIMIT_FETCH">LIMIT_FETCH</a></dd>
+ <dd id="Doris.Generator.limit_sql" class="function"><a href="mysql.html#MySQL.Generator.limit_sql">limit_sql</a></dd>
+ <dd id="Doris.Generator.offset_sql" class="function"><a href="mysql.html#MySQL.Generator.offset_sql">offset_sql</a></dd>
+ <dd id="Doris.Generator.xor_sql" class="function"><a href="mysql.html#MySQL.Generator.xor_sql">xor_sql</a></dd>
+ <dd id="Doris.Generator.jsonarraycontains_sql" class="function"><a href="mysql.html#MySQL.Generator.jsonarraycontains_sql">jsonarraycontains_sql</a></dd>
+ <dd id="Doris.Generator.cast_sql" class="function"><a href="mysql.html#MySQL.Generator.cast_sql">cast_sql</a></dd>
+ <dd id="Doris.Generator.show_sql" class="function"><a href="mysql.html#MySQL.Generator.show_sql">show_sql</a></dd>
+ <dd id="Doris.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="mysql.html#MySQL.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</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/drill.html b/docs/sqlglot/dialects/drill.html
index 75fa412..f7fd311 100644
--- a/docs/sqlglot/dialects/drill.html
+++ b/docs/sqlglot/dialects/drill.html
@@ -55,9 +55,6 @@
<a class="class" href="#Drill.Tokenizer">Drill.Tokenizer</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Drill.Tokenizer.QUOTES">QUOTES</a>
- </li>
- <li>
<a class="variable" href="#Drill.Tokenizer.IDENTIFIERS">IDENTIFIERS</a>
</li>
<li>
@@ -79,12 +76,18 @@
<a class="variable" href="#Drill.Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a>
</li>
<li>
+ <a class="variable" href="#Drill.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#Drill.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
<a class="variable" href="#Drill.Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a>
</li>
<li>
+ <a class="variable" href="#Drill.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Drill.Parser.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a>
</li>
<li>
@@ -121,6 +124,9 @@
<a class="variable" href="#Drill.Generator.QUERY_HINTS">QUERY_HINTS</a>
</li>
<li>
+ <a class="variable" href="#Drill.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#Drill.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -163,10 +169,7 @@
<a class="variable" href="#Drill.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Drill.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Drill.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Drill.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Drill.Generator.BIT_START">BIT_START</a>
@@ -341,14 +344,14 @@
</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><span id="L-75"><a href="#L-75"><span class="linenos"> 75</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-76"><a href="#L-76"><span class="linenos"> 76</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><span id="L-77"><a href="#L-77"><span class="linenos"> 77</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-78"><a href="#L-78"><span class="linenos"> 78</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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span 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-77"><a href="#L-77"><span class="linenos"> 77</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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</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">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-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">FUNCTIONS</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 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>
@@ -363,61 +366,62 @@
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</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">TYPE_MAPPING</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 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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">exp</span><span 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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">exp</span><span 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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">exp</span><span 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-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&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">DATETIME</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">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</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">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-115"><a href="#L-115"><span class="linenos">115</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-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><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span 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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</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-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">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-148"><a href="#L-148"><span class="linenos">148</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-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><span id="L-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</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="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span 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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">exp</span><span 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-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">exp</span><span 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-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&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">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&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">TIMESTAMPTZ</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="n">exp</span><span 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-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="p">}</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="p">}</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><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">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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-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="n">datestrtodate_sql</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">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="p">}</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="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-153"><a href="#L-153"><span class="linenos">153</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>
@@ -473,14 +477,14 @@
</span><span id="Drill-74"><a href="#Drill-74"><span class="linenos"> 74</span></a> <span class="p">}</span>
</span><span id="Drill-75"><a href="#Drill-75"><span class="linenos"> 75</span></a>
</span><span id="Drill-76"><a href="#Drill-76"><span class="linenos"> 76</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="Drill-77"><a href="#Drill-77"><span class="linenos"> 77</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><span id="Drill-78"><a href="#Drill-78"><span class="linenos"> 78</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="Drill-79"><a href="#Drill-79"><span class="linenos"> 79</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="Drill-80"><a href="#Drill-80"><span class="linenos"> 80</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="Drill-81"><a href="#Drill-81"><span class="linenos"> 81</span></a>
-</span><span id="Drill-82"><a href="#Drill-82"><span class="linenos"> 82</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="Drill-83"><a href="#Drill-83"><span class="linenos"> 83</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Drill-84"><a href="#Drill-84"><span class="linenos"> 84</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Drill-77"><a href="#Drill-77"><span class="linenos"> 77</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="Drill-78"><a href="#Drill-78"><span class="linenos"> 78</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="Drill-79"><a href="#Drill-79"><span class="linenos"> 79</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="Drill-80"><a href="#Drill-80"><span class="linenos"> 80</span></a>
+</span><span id="Drill-81"><a href="#Drill-81"><span class="linenos"> 81</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="Drill-82"><a href="#Drill-82"><span class="linenos"> 82</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Drill-83"><a href="#Drill-83"><span class="linenos"> 83</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Drill-84"><a href="#Drill-84"><span class="linenos"> 84</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill-85"><a href="#Drill-85"><span class="linenos"> 85</span></a>
</span><span id="Drill-86"><a href="#Drill-86"><span class="linenos"> 86</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-87"><a href="#Drill-87"><span class="linenos"> 87</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>
@@ -495,61 +499,62 @@
</span><span id="Drill-96"><a href="#Drill-96"><span class="linenos"> 96</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill-97"><a href="#Drill-97"><span class="linenos"> 97</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill-98"><a href="#Drill-98"><span class="linenos"> 98</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Drill-99"><a href="#Drill-99"><span class="linenos"> 99</span></a>
-</span><span id="Drill-100"><a href="#Drill-100"><span class="linenos">100</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drill-101"><a href="#Drill-101"><span class="linenos">101</span></a> <span 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="Drill-102"><a href="#Drill-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Drill-103"><a href="#Drill-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Drill-104"><a href="#Drill-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Drill-105"><a href="#Drill-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
-</span><span id="Drill-106"><a href="#Drill-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Drill-107"><a href="#Drill-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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Drill-108"><a href="#Drill-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">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill-109"><a href="#Drill-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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill-110"><a href="#Drill-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill-111"><a href="#Drill-111"><span class="linenos">111</span></a> <span class="p">}</span>
-</span><span id="Drill-112"><a href="#Drill-112"><span class="linenos">112</span></a>
-</span><span id="Drill-113"><a href="#Drill-113"><span class="linenos">113</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drill-114"><a href="#Drill-114"><span class="linenos">114</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Drill-115"><a href="#Drill-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Drill-116"><a href="#Drill-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Drill-117"><a href="#Drill-117"><span class="linenos">117</span></a> <span class="p">}</span>
-</span><span id="Drill-118"><a href="#Drill-118"><span class="linenos">118</span></a>
-</span><span id="Drill-119"><a href="#Drill-119"><span class="linenos">119</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drill-120"><a href="#Drill-120"><span class="linenos">120</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Drill-121"><a href="#Drill-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill-122"><a href="#Drill-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="Drill-123"><a href="#Drill-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
-</span><span id="Drill-124"><a href="#Drill-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
-</span><span id="Drill-125"><a href="#Drill-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="Drill-126"><a href="#Drill-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="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="Drill-127"><a href="#Drill-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="Drill-128"><a href="#Drill-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Drill-129"><a href="#Drill-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill-130"><a href="#Drill-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill-131"><a href="#Drill-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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Drill-132"><a href="#Drill-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
-</span><span id="Drill-133"><a href="#Drill-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Drill-134"><a href="#Drill-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
-</span><span id="Drill-135"><a href="#Drill-135"><span class="linenos">135</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-136"><a href="#Drill-136"><span class="linenos">136</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-137"><a href="#Drill-137"><span class="linenos">137</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-138"><a href="#Drill-138"><span class="linenos">138</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-139"><a href="#Drill-139"><span class="linenos">139</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-140"><a href="#Drill-140"><span class="linenos">140</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-141"><a href="#Drill-141"><span class="linenos">141</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-142"><a href="#Drill-142"><span class="linenos">142</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-143"><a href="#Drill-143"><span class="linenos">143</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-144"><a href="#Drill-144"><span class="linenos">144</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-145"><a href="#Drill-145"><span class="linenos">145</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-146"><a href="#Drill-146"><span class="linenos">146</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-147"><a href="#Drill-147"><span class="linenos">147</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="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">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-149"><a href="#Drill-149"><span class="linenos">149</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-150"><a href="#Drill-150"><span class="linenos">150</span></a> <span class="p">}</span>
-</span><span id="Drill-151"><a href="#Drill-151"><span class="linenos">151</span></a>
-</span><span id="Drill-152"><a href="#Drill-152"><span class="linenos">152</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-153"><a href="#Drill-153"><span class="linenos">153</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-99"><a href="#Drill-99"><span class="linenos"> 99</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Drill-100"><a href="#Drill-100"><span class="linenos">100</span></a>
+</span><span id="Drill-101"><a href="#Drill-101"><span class="linenos">101</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drill-102"><a href="#Drill-102"><span class="linenos">102</span></a> <span 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="Drill-103"><a href="#Drill-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Drill-104"><a href="#Drill-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Drill-105"><a href="#Drill-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Drill-106"><a href="#Drill-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
+</span><span id="Drill-107"><a href="#Drill-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">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Drill-108"><a href="#Drill-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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Drill-109"><a href="#Drill-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">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill-110"><a href="#Drill-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill-111"><a href="#Drill-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill-112"><a href="#Drill-112"><span class="linenos">112</span></a> <span class="p">}</span>
+</span><span id="Drill-113"><a href="#Drill-113"><span class="linenos">113</span></a>
+</span><span id="Drill-114"><a href="#Drill-114"><span class="linenos">114</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drill-115"><a href="#Drill-115"><span class="linenos">115</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Drill-116"><a href="#Drill-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Drill-117"><a href="#Drill-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Drill-118"><a href="#Drill-118"><span class="linenos">118</span></a> <span class="p">}</span>
+</span><span id="Drill-119"><a href="#Drill-119"><span class="linenos">119</span></a>
+</span><span id="Drill-120"><a href="#Drill-120"><span class="linenos">120</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drill-121"><a href="#Drill-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><span id="Drill-122"><a href="#Drill-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill-123"><a href="#Drill-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="Drill-124"><a href="#Drill-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
+</span><span id="Drill-125"><a href="#Drill-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
+</span><span id="Drill-126"><a href="#Drill-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="Drill-127"><a href="#Drill-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="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="Drill-128"><a href="#Drill-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="Drill-129"><a href="#Drill-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Drill-130"><a href="#Drill-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill-131"><a href="#Drill-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill-132"><a href="#Drill-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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Drill-133"><a href="#Drill-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
+</span><span id="Drill-134"><a href="#Drill-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Drill-135"><a href="#Drill-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
+</span><span id="Drill-136"><a href="#Drill-136"><span class="linenos">136</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-137"><a href="#Drill-137"><span class="linenos">137</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-138"><a href="#Drill-138"><span class="linenos">138</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-139"><a href="#Drill-139"><span class="linenos">139</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-140"><a href="#Drill-140"><span class="linenos">140</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-141"><a href="#Drill-141"><span class="linenos">141</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-142"><a href="#Drill-142"><span class="linenos">142</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-143"><a href="#Drill-143"><span class="linenos">143</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-144"><a href="#Drill-144"><span class="linenos">144</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-145"><a href="#Drill-145"><span class="linenos">145</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-146"><a href="#Drill-146"><span class="linenos">146</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-147"><a href="#Drill-147"><span class="linenos">147</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-148"><a href="#Drill-148"><span class="linenos">148</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="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">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-150"><a href="#Drill-150"><span class="linenos">150</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-151"><a href="#Drill-151"><span class="linenos">151</span></a> <span class="p">}</span>
+</span><span id="Drill-152"><a href="#Drill-152"><span class="linenos">152</span></a>
+</span><span id="Drill-153"><a href="#Drill-153"><span class="linenos">153</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-154"><a href="#Drill-154"><span class="linenos">154</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>
@@ -845,6 +850,7 @@
<dd id="Drill.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Drill.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
<dd id="Drill.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Drill.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Drill.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Drill.FORMAT_MAPPING" class="variable"><a href="dialect.html#Dialect.FORMAT_MAPPING">FORMAT_MAPPING</a></dd>
<dd id="Drill.PSEUDOCOLUMNS" class="variable"><a href="dialect.html#Dialect.PSEUDOCOLUMNS">PSEUDOCOLUMNS</a></dd>
@@ -879,27 +885,14 @@
</div>
<a class="headerlink" href="#Drill.Tokenizer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Tokenizer-76"><a href="#Drill.Tokenizer-76"><span class="linenos">76</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="Drill.Tokenizer-77"><a href="#Drill.Tokenizer-77"><span class="linenos">77</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><span id="Drill.Tokenizer-78"><a href="#Drill.Tokenizer-78"><span class="linenos">78</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="Drill.Tokenizer-79"><a href="#Drill.Tokenizer-79"><span class="linenos">79</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="Drill.Tokenizer-80"><a href="#Drill.Tokenizer-80"><span class="linenos">80</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="Drill.Tokenizer-77"><a href="#Drill.Tokenizer-77"><span class="linenos">77</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="Drill.Tokenizer-78"><a href="#Drill.Tokenizer-78"><span class="linenos">78</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="Drill.Tokenizer-79"><a href="#Drill.Tokenizer-79"><span class="linenos">79</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
</span></pre></div>
- <div id="Drill.Tokenizer.QUOTES" class="classattr">
- <div class="attr variable">
- <span class="name">QUOTES</span> =
-<span class="default_value">[&#34;&#39;&#34;]</span>
-
-
- </div>
- <a class="headerlink" href="#Drill.Tokenizer.QUOTES"></a>
-
-
-
- </div>
<div id="Drill.Tokenizer.IDENTIFIERS" class="classattr">
<div class="attr variable">
<span class="name">IDENTIFIERS</span> =
@@ -946,6 +939,7 @@
<dd id="Drill.Tokenizer.HEX_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.HEX_STRINGS">HEX_STRINGS</a></dd>
<dd id="Drill.Tokenizer.RAW_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.RAW_STRINGS">RAW_STRINGS</a></dd>
<dd id="Drill.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
+ <dd id="Drill.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Drill.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
<dd id="Drill.Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="Drill.Tokenizer.KEYWORDS" class="variable"><a href="../tokens.html#Tokenizer.KEYWORDS">KEYWORDS</a></dd>
@@ -976,9 +970,10 @@
</div>
<a class="headerlink" href="#Drill.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Parser-82"><a href="#Drill.Parser-82"><span class="linenos">82</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="Drill.Parser-83"><a href="#Drill.Parser-83"><span class="linenos">83</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Drill.Parser-84"><a href="#Drill.Parser-84"><span class="linenos">84</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Parser-81"><a href="#Drill.Parser-81"><span class="linenos">81</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="Drill.Parser-82"><a href="#Drill.Parser-82"><span class="linenos">82</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Drill.Parser-83"><a href="#Drill.Parser-83"><span class="linenos">83</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Drill.Parser-84"><a href="#Drill.Parser-84"><span class="linenos">84</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill.Parser-85"><a href="#Drill.Parser-85"><span class="linenos">85</span></a>
</span><span id="Drill.Parser-86"><a href="#Drill.Parser-86"><span class="linenos">86</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Parser-87"><a href="#Drill.Parser-87"><span class="linenos">87</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>
@@ -1032,11 +1027,23 @@ Default: 3</li>
</div>
+ <div id="Drill.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Drill.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="Drill.Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Drill.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Drill.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Drill.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;}</span>
</div>
@@ -1057,6 +1064,18 @@ Default: 3</li>
</div>
+ <div id="Drill.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Drill.Tokenizer">sqlglot.dialects.drill.Drill.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Drill.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Drill.Parser.NORMALIZE_FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">NORMALIZE_FUNCTIONS</span> =
@@ -1150,6 +1169,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Drill.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Drill.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Drill.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Drill.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Drill.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Drill.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1170,6 +1190,7 @@ Default: 3</li>
<dd id="Drill.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Drill.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Drill.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Drill.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Drill.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Drill.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Drill.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1189,6 +1210,7 @@ Default: 3</li>
<dd id="Drill.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Drill.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Drill.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Drill.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Drill.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Drill.Parser.FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
<dd id="Drill.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
@@ -1207,9 +1229,11 @@ Default: 3</li>
<dd id="Drill.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Drill.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Drill.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Drill.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Drill.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Drill.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Drill.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Drill.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Drill.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Drill.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Drill.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -1247,61 +1271,62 @@ Default: 3</li>
</span><span id="Drill.Generator-96"><a href="#Drill.Generator-96"><span class="linenos"> 96</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill.Generator-97"><a href="#Drill.Generator-97"><span class="linenos"> 97</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill.Generator-98"><a href="#Drill.Generator-98"><span class="linenos"> 98</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Drill.Generator-99"><a href="#Drill.Generator-99"><span class="linenos"> 99</span></a>
-</span><span id="Drill.Generator-100"><a href="#Drill.Generator-100"><span class="linenos">100</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drill.Generator-101"><a href="#Drill.Generator-101"><span class="linenos">101</span></a> <span 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="Drill.Generator-102"><a href="#Drill.Generator-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-103"><a href="#Drill.Generator-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-104"><a href="#Drill.Generator-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-105"><a href="#Drill.Generator-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-106"><a href="#Drill.Generator-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-107"><a href="#Drill.Generator-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-108"><a href="#Drill.Generator-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-109"><a href="#Drill.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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-110"><a href="#Drill.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-111"><a href="#Drill.Generator-111"><span class="linenos">111</span></a> <span class="p">}</span>
-</span><span id="Drill.Generator-112"><a href="#Drill.Generator-112"><span class="linenos">112</span></a>
-</span><span id="Drill.Generator-113"><a href="#Drill.Generator-113"><span class="linenos">113</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drill.Generator-114"><a href="#Drill.Generator-114"><span class="linenos">114</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Drill.Generator-115"><a href="#Drill.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Drill.Generator-116"><a href="#Drill.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Drill.Generator-117"><a href="#Drill.Generator-117"><span class="linenos">117</span></a> <span class="p">}</span>
-</span><span id="Drill.Generator-118"><a href="#Drill.Generator-118"><span class="linenos">118</span></a>
-</span><span id="Drill.Generator-119"><a href="#Drill.Generator-119"><span class="linenos">119</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drill.Generator-120"><a href="#Drill.Generator-120"><span class="linenos">120</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Drill.Generator-121"><a href="#Drill.Generator-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-122"><a href="#Drill.Generator-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-123"><a href="#Drill.Generator-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-124"><a href="#Drill.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
-</span><span id="Drill.Generator-125"><a href="#Drill.Generator-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-126"><a href="#Drill.Generator-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="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="Drill.Generator-127"><a href="#Drill.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-128"><a href="#Drill.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-129"><a href="#Drill.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-130"><a href="#Drill.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-131"><a href="#Drill.Generator-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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-132"><a href="#Drill.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-133"><a href="#Drill.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-134"><a href="#Drill.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-135"><a href="#Drill.Generator-135"><span class="linenos">135</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-136"><a href="#Drill.Generator-136"><span class="linenos">136</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-137"><a href="#Drill.Generator-137"><span class="linenos">137</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-138"><a href="#Drill.Generator-138"><span class="linenos">138</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-139"><a href="#Drill.Generator-139"><span class="linenos">139</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-140"><a href="#Drill.Generator-140"><span class="linenos">140</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-141"><a href="#Drill.Generator-141"><span class="linenos">141</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-142"><a href="#Drill.Generator-142"><span class="linenos">142</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-143"><a href="#Drill.Generator-143"><span class="linenos">143</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-144"><a href="#Drill.Generator-144"><span class="linenos">144</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-145"><a href="#Drill.Generator-145"><span class="linenos">145</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-146"><a href="#Drill.Generator-146"><span class="linenos">146</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-147"><a href="#Drill.Generator-147"><span class="linenos">147</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="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">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-149"><a href="#Drill.Generator-149"><span class="linenos">149</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-150"><a href="#Drill.Generator-150"><span class="linenos">150</span></a> <span class="p">}</span>
-</span><span id="Drill.Generator-151"><a href="#Drill.Generator-151"><span class="linenos">151</span></a>
-</span><span id="Drill.Generator-152"><a href="#Drill.Generator-152"><span class="linenos">152</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-153"><a href="#Drill.Generator-153"><span class="linenos">153</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-99"><a href="#Drill.Generator-99"><span class="linenos"> 99</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Drill.Generator-100"><a href="#Drill.Generator-100"><span class="linenos">100</span></a>
+</span><span id="Drill.Generator-101"><a href="#Drill.Generator-101"><span class="linenos">101</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drill.Generator-102"><a href="#Drill.Generator-102"><span class="linenos">102</span></a> <span 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="Drill.Generator-103"><a href="#Drill.Generator-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-104"><a href="#Drill.Generator-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-105"><a href="#Drill.Generator-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-106"><a href="#Drill.Generator-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-107"><a href="#Drill.Generator-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-108"><a href="#Drill.Generator-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-109"><a href="#Drill.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">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-110"><a href="#Drill.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-111"><a href="#Drill.Generator-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-112"><a href="#Drill.Generator-112"><span class="linenos">112</span></a> <span class="p">}</span>
+</span><span id="Drill.Generator-113"><a href="#Drill.Generator-113"><span class="linenos">113</span></a>
+</span><span id="Drill.Generator-114"><a href="#Drill.Generator-114"><span class="linenos">114</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drill.Generator-115"><a href="#Drill.Generator-115"><span class="linenos">115</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Drill.Generator-116"><a href="#Drill.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Drill.Generator-117"><a href="#Drill.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Drill.Generator-118"><a href="#Drill.Generator-118"><span class="linenos">118</span></a> <span class="p">}</span>
+</span><span id="Drill.Generator-119"><a href="#Drill.Generator-119"><span class="linenos">119</span></a>
+</span><span id="Drill.Generator-120"><a href="#Drill.Generator-120"><span class="linenos">120</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drill.Generator-121"><a href="#Drill.Generator-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Drill.Generator-122"><a href="#Drill.Generator-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-123"><a href="#Drill.Generator-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-124"><a href="#Drill.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-125"><a href="#Drill.Generator-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
+</span><span id="Drill.Generator-126"><a href="#Drill.Generator-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-127"><a href="#Drill.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="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="Drill.Generator-128"><a href="#Drill.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-129"><a href="#Drill.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-130"><a href="#Drill.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-131"><a href="#Drill.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-132"><a href="#Drill.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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-133"><a href="#Drill.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-134"><a href="#Drill.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-135"><a href="#Drill.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-136"><a href="#Drill.Generator-136"><span class="linenos">136</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-137"><a href="#Drill.Generator-137"><span class="linenos">137</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-138"><a href="#Drill.Generator-138"><span class="linenos">138</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-139"><a href="#Drill.Generator-139"><span class="linenos">139</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-140"><a href="#Drill.Generator-140"><span class="linenos">140</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-141"><a href="#Drill.Generator-141"><span class="linenos">141</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-142"><a href="#Drill.Generator-142"><span class="linenos">142</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-143"><a href="#Drill.Generator-143"><span class="linenos">143</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-144"><a href="#Drill.Generator-144"><span class="linenos">144</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-145"><a href="#Drill.Generator-145"><span class="linenos">145</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-146"><a href="#Drill.Generator-146"><span class="linenos">146</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-147"><a href="#Drill.Generator-147"><span class="linenos">147</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-148"><a href="#Drill.Generator-148"><span class="linenos">148</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="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span 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">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-150"><a href="#Drill.Generator-150"><span class="linenos">150</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-151"><a href="#Drill.Generator-151"><span class="linenos">151</span></a> <span class="p">}</span>
+</span><span id="Drill.Generator-152"><a href="#Drill.Generator-152"><span class="linenos">152</span></a>
+</span><span id="Drill.Generator-153"><a href="#Drill.Generator-153"><span class="linenos">153</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-154"><a href="#Drill.Generator-154"><span class="linenos">154</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>
@@ -1380,6 +1405,18 @@ Default: True</li>
</div>
+ <div id="Drill.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Drill.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="Drill.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
@@ -1397,7 +1434,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Drill.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Drill.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Drill.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1410,7 +1447,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Drill.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Drill.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function create_with_partitions_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Drill.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function create_with_partitions_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#Drill.Generator">Drill.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1430,8 +1467,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-152"><a href="#Drill.Generator.normalize_func-152"><span class="linenos">152</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-153"><a href="#Drill.Generator.normalize_func-153"><span class="linenos">153</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-153"><a href="#Drill.Generator.normalize_func-153"><span class="linenos">153</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-154"><a href="#Drill.Generator.normalize_func-154"><span class="linenos">154</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>
@@ -1512,26 +1549,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Drill.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator.can_identify-253"><a href="#Drill.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Drill.Generator.can_identify-254"><a href="#Drill.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Drill.Generator.can_identify-255"><a href="#Drill.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Drill.Generator.can_identify-256"><a href="#Drill.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Drill.Generator.can_identify-257"><a href="#Drill.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Drill.Generator.can_identify-258"><a href="#Drill.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Drill.Generator.can_identify-259"><a href="#Drill.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Drill.Generator.can_identify-260"><a href="#Drill.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Drill.Generator.can_identify-261"><a href="#Drill.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Drill.Generator.can_identify-262"><a href="#Drill.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Drill.Generator.can_identify-263"><a href="#Drill.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Drill.Generator.can_identify-264"><a href="#Drill.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Drill.Generator.can_identify-265"><a href="#Drill.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Drill.Generator.can_identify-266"><a href="#Drill.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Drill.Generator.can_identify-267"><a href="#Drill.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Drill.Generator.can_identify-268"><a href="#Drill.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Drill.Generator.can_identify-269"><a href="#Drill.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Drill.Generator.can_identify-270"><a href="#Drill.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator.can_identify-256"><a href="#Drill.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Drill.Generator.can_identify-257"><a href="#Drill.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Drill.Generator.can_identify-258"><a href="#Drill.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Drill.Generator.can_identify-259"><a href="#Drill.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Drill.Generator.can_identify-260"><a href="#Drill.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Drill.Generator.can_identify-261"><a href="#Drill.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Drill.Generator.can_identify-262"><a href="#Drill.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Drill.Generator.can_identify-263"><a href="#Drill.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Drill.Generator.can_identify-264"><a href="#Drill.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Drill.Generator.can_identify-265"><a href="#Drill.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Drill.Generator.can_identify-266"><a href="#Drill.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Drill.Generator.can_identify-267"><a href="#Drill.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Drill.Generator.can_identify-268"><a href="#Drill.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Drill.Generator.can_identify-269"><a href="#Drill.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Drill.Generator.can_identify-270"><a href="#Drill.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Drill.Generator.can_identify-271"><a href="#Drill.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Drill.Generator.can_identify-272"><a href="#Drill.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Drill.Generator.can_identify-272"><a href="#Drill.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Drill.Generator.can_identify-273"><a href="#Drill.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Drill.Generator.can_identify-274"><a href="#Drill.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Drill.Generator.can_identify-275"><a href="#Drill.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1602,26 +1639,14 @@ Default: True</li>
</div>
- <div id="Drill.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Drill.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Drill.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Drill.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Drill.Tokenizer">sqlglot.dialects.drill.Drill.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Drill.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Drill.Generator.TOKENIZER_CLASS"></a>
@@ -1724,7 +1749,9 @@ Default: True</li>
<dd id="Drill.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Drill.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Drill.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Drill.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="Drill.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Drill.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Drill.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Drill.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Drill.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1768,6 +1795,7 @@ Default: True</li>
<dd id="Drill.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Drill.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Drill.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Drill.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Drill.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Drill.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Drill.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1786,7 +1814,7 @@ Default: True</li>
<dd id="Drill.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Drill.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Drill.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Drill.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Drill.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Drill.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Drill.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Drill.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -1831,6 +1859,7 @@ Default: True</li>
<dd id="Drill.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Drill.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Drill.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Drill.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Drill.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Drill.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Drill.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -1839,6 +1868,8 @@ Default: True</li>
<dd id="Drill.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Drill.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Drill.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Drill.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Drill.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Drill.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Drill.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Drill.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1998,6 +2029,8 @@ Default: True</li>
<dd id="Drill.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Drill.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Drill.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Drill.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Drill.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/duckdb.html b/docs/sqlglot/dialects/duckdb.html
index d0f7d53..834f10b 100644
--- a/docs/sqlglot/dialects/duckdb.html
+++ b/docs/sqlglot/dialects/duckdb.html
@@ -55,6 +55,9 @@
<a class="variable" href="#DuckDB.Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a>
</li>
<li>
+ <a class="variable" href="#DuckDB.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#DuckDB.Parser.BITWISE">BITWISE</a>
</li>
<li>
@@ -64,7 +67,7 @@
<a class="variable" href="#DuckDB.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
</li>
<li>
- <a class="variable" href="#DuckDB.Parser.TYPE_TOKENS">TYPE_TOKENS</a>
+ <a class="variable" href="#DuckDB.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#DuckDB.Parser.NULL_ORDERING">NULL_ORDERING</a>
@@ -106,6 +109,9 @@
<a class="variable" href="#DuckDB.Generator.RENAME_TABLE_WITH_DB">RENAME_TABLE_WITH_DB</a>
</li>
<li>
+ <a class="variable" href="#DuckDB.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#DuckDB.Generator.TRANSFORMS">TRANSFORMS</a>
</li>
<li>
@@ -154,10 +160,7 @@
<a class="variable" href="#DuckDB.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#DuckDB.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#DuckDB.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#DuckDB.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#DuckDB.Generator.BIT_START">BIT_START</a>
@@ -272,304 +275,326 @@
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">encode_decode_sql</span><span class="p">,</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">format_time_lambda</span><span class="p">,</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_properties_sql</span><span class="p">,</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">pivot_column_names</span><span class="p">,</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">str_to_time_sql</span><span class="p">,</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="p">)</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</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-30"><a href="#L-30"><span class="linenos"> 30</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-31"><a href="#L-31"><span class="linenos"> 31</span></a>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_properties_sql</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">pivot_column_names</span><span class="p">,</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">str_to_time_sql</span><span class="p">,</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="p">)</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span 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-31"><a href="#L-31"><span class="linenos"> 31</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-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">_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-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">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-36"><a href="#L-36"><span class="linenos"> 36</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="o">.</span><span class="n">copy</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-37"><a href="#L-37"><span class="linenos"> 37</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">_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-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;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="o">.</span><span class="n">copy</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 class="k">def</span> <span class="nf">_date_delta_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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</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-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;+&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;-&quot;</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;</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">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">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="o">.</span><span class="n">copy</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-44"><a href="#L-44"><span class="linenos"> 44</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">_date_delta_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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</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-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;+&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;-&quot;</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></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">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">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="o">.</span><span class="n">copy</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-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="c1"># BigQuery -&gt; DuckDB conversion for the DATE function</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="k">def</span> <span class="nf">_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">Date</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">result</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</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-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">if</span> <span class="n">zone</span><span class="p">:</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">date_str</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;STRFTIME&quot;</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="s2">&quot;&#39;</span><span class="si">%d</span><span class="s2">/%m/%Y&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">date_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">date_str</span><span class="si">}</span><span class="s2"> || &#39; &#39; || </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</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="c1"># This will create a TIMESTAMP with time zone information</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">result</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;STRPTIME&quot;</span><span class="p">,</span> <span class="n">date_str</span><span class="p">,</span> <span class="s2">&quot;&#39;</span><span class="si">%d</span><span class="s2">/%m/%Y %Z&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="n">result</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="c1"># BigQuery -&gt; DuckDB conversion for the DATE function</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="k">def</span> <span class="nf">_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">Date</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">result</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</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-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">zone</span><span class="p">:</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">date_str</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;STRFTIME&quot;</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="s2">&quot;&#39;</span><span class="si">%d</span><span class="s2">/%m/%Y&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">date_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">date_str</span><span class="si">}</span><span class="s2"> || &#39; &#39; || </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="c1"># This will create a TIMESTAMP with time zone information</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">result</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;STRPTIME&quot;</span><span class="p">,</span> <span class="n">date_str</span><span class="p">,</span> <span class="s2">&quot;&#39;</span><span class="si">%d</span><span class="s2">/%m/%Y %Z&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">return</span> <span class="n">result</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="k">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-62"><a href="#L-62"><span class="linenos"> 62</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-63"><a href="#L-63"><span class="linenos"> 63</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-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;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-65"><a href="#L-65"><span class="linenos"> 65</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">_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-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">expression</span><span class="p">:</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</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-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;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-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">_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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</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">_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-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&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">expression</span><span class="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-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-73"><a href="#L-73"><span class="linenos"> 73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="k">def</span> <span class="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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-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">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-76"><a href="#L-76"><span class="linenos"> 76</span></a>
+</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">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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-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">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-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">_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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-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">DateDiff</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</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">_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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-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">DateDiff</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-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">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-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <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="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-87"><a href="#L-87"><span class="linenos"> 87</span></a>
+</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">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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</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-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 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-88"><a href="#L-88"><span class="linenos"> 88</span></a>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="k">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-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
-</span><span id="L-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;</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-92"><a href="#L-92"><span class="linenos"> 92</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-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">_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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="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-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">_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-96"><a href="#L-96"><span class="linenos"> 96</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;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 class="n">expression</span><span class="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-97"><a href="#L-97"><span class="linenos"> 97</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 TEXT)&quot;</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="c1"># Type TIMESTAMP / TIME WITH TIME ZONE does not support any modifiers</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamptz&quot;</span><span class="p">,</span> <span class="s2">&quot;timetz&quot;</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">value</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="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-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">DuckDB</span><span class="p">(</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">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="c1"># https://duckdb.org/docs/sql/introduction.html#creating-a-new-table</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="k">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-102"><a href="#L-102"><span class="linenos">102</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;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 class="n">expression</span><span class="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-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">sql</span><span class="si">}</span><span class="s2"> AS TEXT)&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><span id="L-106"><a href="#L-106"><span class="linenos">106</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-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="o">**</span><span class="n">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-109"><a href="#L-109"><span class="linenos">109</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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="s2">&quot;//&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-111"><a href="#L-111"><span class="linenos">111</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-112"><a href="#L-112"><span class="linenos">112</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-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="s2">&quot;PIVOT_WIDER&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-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="p">}</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</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">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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-136"><a href="#L-136"><span class="linenos">136</span></a> <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="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;DATETRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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">seq_get</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">1000</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="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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</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">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">group</span><span class="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 class="p">),</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-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><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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">expression</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">Decode</span><span 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 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-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;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><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">Encode</span><span 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 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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="p">),</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="p">}</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">TYPE_TOKENS</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="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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</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><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;duckdb&quot;</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 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-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">TRANSFORMS</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">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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</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">func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><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">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_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">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-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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-218"><a href="#L-218"><span class="linenos">218</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-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;day&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-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="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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <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">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</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">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</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">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_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">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-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</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-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</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-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="p">}</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="o">**</span><span class="n">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-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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;REAL&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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="p">}</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="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-288"><a href="#L-288"><span class="linenos">288</span></a>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
-</span><span id="L-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">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="p">}</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="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-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</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="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">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-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">def</span> <span class="nf">tablesample_sql</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="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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <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="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><span id="L-106"><a href="#L-106"><span class="linenos">106</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-107"><a href="#L-107"><span class="linenos">107</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-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="c1"># https://duckdb.org/docs/sql/introduction.html#creating-a-new-table</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">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-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">KEYWORDS</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="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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="s2">&quot;//&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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="s2">&quot;PIVOT_WIDER&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-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="p">}</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</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">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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-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">FUNCTIONS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">&quot;DATETRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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">seq_get</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">1000</span><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="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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-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 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">group</span><span class="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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="p">),</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-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">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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">expression</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">Decode</span><span 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 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-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="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><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">Encode</span><span 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 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-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="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">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-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><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="c1"># DuckDB treats NUMERIC and DECIMAL without precision as DECIMAL(18, 3)</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="c1"># See: https://duckdb.org/docs/sql/data_types/numeric</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;numeric&quot;</span><span class="p">,</span> <span class="s2">&quot;decimal&quot;</span><span class="p">)</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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="p">):</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;DECIMAL(18, 3)&quot;</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="k">return</span> <span class="n">this</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">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;duckdb&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="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-215"><a href="#L-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="L-216"><a href="#L-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="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">else</span> <span class="n">inline_array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">),</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</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">func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
+</span><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">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_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">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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;day&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-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="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-249"><a href="#L-249"><span class="linenos">249</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-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;&#39;month&#39;&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">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-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 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-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</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">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-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</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-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</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-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</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">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</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">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-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</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-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="p">}</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</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">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-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">exp</span><span 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-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">exp</span><span 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-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">exp</span><span 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-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">exp</span><span 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-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="p">}</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">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-310"><a href="#L-310"><span class="linenos">310</span></a>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="p">}</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="k">def</span> <span class="nf">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-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</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">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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">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-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">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="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>
@@ -585,220 +610,236 @@
</div>
<a class="headerlink" href="#DuckDB"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB-101"><a href="#DuckDB-101"><span class="linenos">101</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-102"><a href="#DuckDB-102"><span class="linenos">102</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="DuckDB-103"><a href="#DuckDB-103"><span class="linenos">103</span></a>
-</span><span id="DuckDB-104"><a href="#DuckDB-104"><span class="linenos">104</span></a> <span class="c1"># https://duckdb.org/docs/sql/introduction.html#creating-a-new-table</span>
-</span><span id="DuckDB-105"><a href="#DuckDB-105"><span class="linenos">105</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB-106"><a href="#DuckDB-106"><span class="linenos">106</span></a>
-</span><span id="DuckDB-107"><a href="#DuckDB-107"><span class="linenos">107</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-108"><a href="#DuckDB-108"><span class="linenos">108</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-109"><a href="#DuckDB-109"><span class="linenos">109</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-110"><a href="#DuckDB-110"><span class="linenos">110</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-111"><a href="#DuckDB-111"><span class="linenos">111</span></a> <span class="s2">&quot;//&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="DuckDB-112"><a href="#DuckDB-112"><span class="linenos">112</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-113"><a href="#DuckDB-113"><span class="linenos">113</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-114"><a href="#DuckDB-114"><span class="linenos">114</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-115"><a href="#DuckDB-115"><span class="linenos">115</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-116"><a href="#DuckDB-116"><span class="linenos">116</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-117"><a href="#DuckDB-117"><span class="linenos">117</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-118"><a href="#DuckDB-118"><span class="linenos">118</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-119"><a href="#DuckDB-119"><span class="linenos">119</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-120"><a href="#DuckDB-120"><span class="linenos">120</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-121"><a href="#DuckDB-121"><span class="linenos">121</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-122"><a href="#DuckDB-122"><span class="linenos">122</span></a> <span class="s2">&quot;PIVOT_WIDER&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="DuckDB-123"><a href="#DuckDB-123"><span class="linenos">123</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-124"><a href="#DuckDB-124"><span class="linenos">124</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-125"><a href="#DuckDB-125"><span class="linenos">125</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-126"><a href="#DuckDB-126"><span class="linenos">126</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-127"><a href="#DuckDB-127"><span class="linenos">127</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-128"><a href="#DuckDB-128"><span class="linenos">128</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-129"><a href="#DuckDB-129"><span class="linenos">129</span></a> <span class="p">}</span>
-</span><span id="DuckDB-130"><a href="#DuckDB-130"><span class="linenos">130</span></a>
-</span><span id="DuckDB-131"><a href="#DuckDB-131"><span class="linenos">131</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-132"><a href="#DuckDB-132"><span class="linenos">132</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="DuckDB-133"><a href="#DuckDB-133"><span class="linenos">133</span></a>
-</span><span id="DuckDB-134"><a href="#DuckDB-134"><span class="linenos">134</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-135"><a href="#DuckDB-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">BITWISE</span><span class="p">,</span>
-</span><span id="DuckDB-136"><a href="#DuckDB-136"><span class="linenos">136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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="DuckDB-137"><a href="#DuckDB-137"><span class="linenos">137</span></a> <span class="p">}</span>
-</span><span id="DuckDB-138"><a href="#DuckDB-138"><span class="linenos">138</span></a>
-</span><span id="DuckDB-139"><a href="#DuckDB-139"><span class="linenos">139</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-140"><a href="#DuckDB-140"><span class="linenos">140</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="DuckDB-141"><a href="#DuckDB-141"><span class="linenos">141</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-142"><a href="#DuckDB-142"><span class="linenos">142</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-143"><a href="#DuckDB-143"><span class="linenos">143</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-144"><a href="#DuckDB-144"><span class="linenos">144</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-145"><a href="#DuckDB-145"><span class="linenos">145</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-146"><a href="#DuckDB-146"><span class="linenos">146</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="DuckDB-147"><a href="#DuckDB-147"><span class="linenos">147</span></a> <span class="s2">&quot;DATETRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
-</span><span id="DuckDB-148"><a href="#DuckDB-148"><span class="linenos">148</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-149"><a href="#DuckDB-149"><span class="linenos">149</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-150"><a href="#DuckDB-150"><span class="linenos">150</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">seq_get</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">1000</span><span class="p">))</span>
-</span><span id="DuckDB-151"><a href="#DuckDB-151"><span class="linenos">151</span></a> <span class="p">),</span>
-</span><span id="DuckDB-152"><a href="#DuckDB-152"><span class="linenos">152</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-153"><a href="#DuckDB-153"><span class="linenos">153</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-154"><a href="#DuckDB-154"><span class="linenos">154</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-155"><a href="#DuckDB-155"><span class="linenos">155</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="DuckDB-156"><a href="#DuckDB-156"><span class="linenos">156</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">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">group</span><span class="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="DuckDB-157"><a href="#DuckDB-157"><span class="linenos">157</span></a> <span class="p">),</span>
-</span><span id="DuckDB-158"><a href="#DuckDB-158"><span class="linenos">158</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-159"><a href="#DuckDB-159"><span class="linenos">159</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-160"><a href="#DuckDB-160"><span class="linenos">160</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-161"><a href="#DuckDB-161"><span class="linenos">161</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-162"><a href="#DuckDB-162"><span class="linenos">162</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-163"><a href="#DuckDB-163"><span class="linenos">163</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-164"><a href="#DuckDB-164"><span class="linenos">164</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-165"><a href="#DuckDB-165"><span class="linenos">165</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-166"><a href="#DuckDB-166"><span class="linenos">166</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-167"><a href="#DuckDB-167"><span class="linenos">167</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-168"><a href="#DuckDB-168"><span class="linenos">168</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-169"><a href="#DuckDB-169"><span class="linenos">169</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="DuckDB-170"><a href="#DuckDB-170"><span class="linenos">170</span></a> <span class="p">}</span>
-</span><span id="DuckDB-171"><a href="#DuckDB-171"><span class="linenos">171</span></a>
-</span><span id="DuckDB-172"><a href="#DuckDB-172"><span class="linenos">172</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-173"><a href="#DuckDB-173"><span class="linenos">173</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="DuckDB-174"><a href="#DuckDB-174"><span class="linenos">174</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">expression</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">Decode</span><span 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 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="DuckDB-176"><a href="#DuckDB-176"><span class="linenos">176</span></a> <span class="p">),</span>
-</span><span id="DuckDB-177"><a href="#DuckDB-177"><span class="linenos">177</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><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">Encode</span><span 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 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="DuckDB-179"><a href="#DuckDB-179"><span class="linenos">179</span></a> <span class="p">),</span>
-</span><span id="DuckDB-180"><a href="#DuckDB-180"><span class="linenos">180</span></a> <span class="p">}</span>
-</span><span id="DuckDB-181"><a href="#DuckDB-181"><span class="linenos">181</span></a>
-</span><span id="DuckDB-182"><a href="#DuckDB-182"><span class="linenos">182</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-183"><a href="#DuckDB-183"><span class="linenos">183</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-184"><a href="#DuckDB-184"><span class="linenos">184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="DuckDB-185"><a href="#DuckDB-185"><span class="linenos">185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="DuckDB-186"><a href="#DuckDB-186"><span class="linenos">186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="DuckDB-187"><a href="#DuckDB-187"><span class="linenos">187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="DuckDB-188"><a href="#DuckDB-188"><span class="linenos">188</span></a> <span class="p">}</span>
-</span><span id="DuckDB-189"><a href="#DuckDB-189"><span class="linenos">189</span></a>
-</span><span id="DuckDB-190"><a href="#DuckDB-190"><span class="linenos">190</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="DuckDB-191"><a href="#DuckDB-191"><span class="linenos">191</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="DuckDB-192"><a href="#DuckDB-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span>
-</span><span id="DuckDB-193"><a href="#DuckDB-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;duckdb&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-194"><a href="#DuckDB-194"><span class="linenos">194</span></a>
-</span><span id="DuckDB-195"><a href="#DuckDB-195"><span class="linenos">195</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-196"><a href="#DuckDB-196"><span class="linenos">196</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-197"><a href="#DuckDB-197"><span class="linenos">197</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-198"><a href="#DuckDB-198"><span class="linenos">198</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-199"><a href="#DuckDB-199"><span class="linenos">199</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="DuckDB-200"><a href="#DuckDB-200"><span class="linenos">200</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-201"><a href="#DuckDB-201"><span class="linenos">201</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-202"><a href="#DuckDB-202"><span class="linenos">202</span></a>
-</span><span id="DuckDB-203"><a href="#DuckDB-203"><span class="linenos">203</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-204"><a href="#DuckDB-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">TRANSFORMS</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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_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">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-207"><a href="#DuckDB-207"><span class="linenos">207</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="DuckDB-208"><a href="#DuckDB-208"><span class="linenos">208</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-209"><a href="#DuckDB-209"><span class="linenos">209</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-210"><a href="#DuckDB-210"><span class="linenos">210</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-211"><a href="#DuckDB-211"><span class="linenos">211</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-212"><a href="#DuckDB-212"><span class="linenos">212</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">func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><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">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_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">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-215"><a href="#DuckDB-215"><span class="linenos">215</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-216"><a href="#DuckDB-216"><span class="linenos">216</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-217"><a href="#DuckDB-217"><span class="linenos">217</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-218"><a href="#DuckDB-218"><span class="linenos">218</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-219"><a href="#DuckDB-219"><span class="linenos">219</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-220"><a href="#DuckDB-220"><span class="linenos">220</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-221"><a href="#DuckDB-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
-</span><span id="DuckDB-222"><a href="#DuckDB-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB-223"><a href="#DuckDB-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-224"><a href="#DuckDB-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB-225"><a href="#DuckDB-225"><span class="linenos">225</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-226"><a href="#DuckDB-226"><span class="linenos">226</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;day&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB-227"><a href="#DuckDB-227"><span class="linenos">227</span></a> <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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</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">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-230"><a href="#DuckDB-230"><span class="linenos">230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB-231"><a href="#DuckDB-231"><span class="linenos">231</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-232"><a href="#DuckDB-232"><span class="linenos">232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB-233"><a href="#DuckDB-233"><span class="linenos">233</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-234"><a href="#DuckDB-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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-235"><a href="#DuckDB-235"><span class="linenos">235</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-236"><a href="#DuckDB-236"><span class="linenos">236</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-237"><a href="#DuckDB-237"><span class="linenos">237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
-</span><span id="DuckDB-238"><a href="#DuckDB-238"><span class="linenos">238</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-239"><a href="#DuckDB-239"><span class="linenos">239</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-240"><a href="#DuckDB-240"><span class="linenos">240</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-241"><a href="#DuckDB-241"><span class="linenos">241</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-242"><a href="#DuckDB-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="DuckDB-243"><a href="#DuckDB-243"><span class="linenos">243</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-244"><a href="#DuckDB-244"><span class="linenos">244</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-245"><a href="#DuckDB-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB-246"><a href="#DuckDB-246"><span class="linenos">246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB-247"><a href="#DuckDB-247"><span class="linenos">247</span></a> <span class="p">),</span>
-</span><span id="DuckDB-248"><a href="#DuckDB-248"><span class="linenos">248</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-249"><a href="#DuckDB-249"><span class="linenos">249</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-250"><a href="#DuckDB-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="DuckDB-251"><a href="#DuckDB-251"><span class="linenos">251</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-252"><a href="#DuckDB-252"><span class="linenos">252</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-253"><a href="#DuckDB-253"><span class="linenos">253</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-254"><a href="#DuckDB-254"><span class="linenos">254</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-255"><a href="#DuckDB-255"><span class="linenos">255</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-256"><a href="#DuckDB-256"><span class="linenos">256</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-257"><a href="#DuckDB-257"><span class="linenos">257</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-258"><a href="#DuckDB-258"><span class="linenos">258</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-259"><a href="#DuckDB-259"><span class="linenos">259</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-260"><a href="#DuckDB-260"><span class="linenos">260</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-261"><a href="#DuckDB-261"><span class="linenos">261</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-262"><a href="#DuckDB-262"><span class="linenos">262</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-263"><a href="#DuckDB-263"><span class="linenos">263</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-264"><a href="#DuckDB-264"><span class="linenos">264</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-265"><a href="#DuckDB-265"><span class="linenos">265</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-266"><a href="#DuckDB-266"><span class="linenos">266</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-267"><a href="#DuckDB-267"><span class="linenos">267</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-268"><a href="#DuckDB-268"><span class="linenos">268</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-269"><a href="#DuckDB-269"><span class="linenos">269</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-270"><a href="#DuckDB-270"><span class="linenos">270</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-271"><a href="#DuckDB-271"><span class="linenos">271</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-272"><a href="#DuckDB-272"><span class="linenos">272</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-273"><a href="#DuckDB-273"><span class="linenos">273</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-274"><a href="#DuckDB-274"><span class="linenos">274</span></a> <span class="p">}</span>
-</span><span id="DuckDB-275"><a href="#DuckDB-275"><span class="linenos">275</span></a>
-</span><span id="DuckDB-276"><a href="#DuckDB-276"><span class="linenos">276</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-277"><a href="#DuckDB-277"><span class="linenos">277</span></a> <span 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-278"><a href="#DuckDB-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-279"><a href="#DuckDB-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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-280"><a href="#DuckDB-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;REAL&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-281"><a href="#DuckDB-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;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-282"><a href="#DuckDB-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;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-283"><a href="#DuckDB-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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-284"><a href="#DuckDB-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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-285"><a href="#DuckDB-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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-286"><a href="#DuckDB-286"><span class="linenos">286</span></a> <span class="p">}</span>
-</span><span id="DuckDB-287"><a href="#DuckDB-287"><span class="linenos">287</span></a>
-</span><span id="DuckDB-288"><a href="#DuckDB-288"><span class="linenos">288</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-289"><a href="#DuckDB-289"><span class="linenos">289</span></a>
-</span><span id="DuckDB-290"><a href="#DuckDB-290"><span class="linenos">290</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
-</span><span id="DuckDB-291"><a href="#DuckDB-291"><span class="linenos">291</span></a>
-</span><span id="DuckDB-292"><a href="#DuckDB-292"><span class="linenos">292</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-293"><a href="#DuckDB-293"><span class="linenos">293</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="DuckDB-294"><a href="#DuckDB-294"><span class="linenos">294</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-295"><a href="#DuckDB-295"><span class="linenos">295</span></a> <span class="p">}</span>
-</span><span id="DuckDB-296"><a href="#DuckDB-296"><span class="linenos">296</span></a>
-</span><span id="DuckDB-297"><a href="#DuckDB-297"><span class="linenos">297</span></a> <span class="k">def</span> <span class="nf">interval_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-298"><a href="#DuckDB-298"><span class="linenos">298</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB-299"><a href="#DuckDB-299"><span class="linenos">299</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="DuckDB-300"><a href="#DuckDB-300"><span class="linenos">300</span></a>
-</span><span id="DuckDB-301"><a href="#DuckDB-301"><span class="linenos">301</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-302"><a href="#DuckDB-302"><span class="linenos">302</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB-303"><a href="#DuckDB-303"><span class="linenos">303</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-304"><a href="#DuckDB-304"><span class="linenos">304</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="DuckDB-305"><a href="#DuckDB-305"><span class="linenos">305</span></a>
-</span><span id="DuckDB-306"><a href="#DuckDB-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB-307"><a href="#DuckDB-307"><span class="linenos">307</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB-308"><a href="#DuckDB-308"><span class="linenos">308</span></a>
-</span><span id="DuckDB-309"><a href="#DuckDB-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-310"><a href="#DuckDB-310"><span class="linenos">310</span></a>
-</span><span id="DuckDB-311"><a href="#DuckDB-311"><span class="linenos">311</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB-312"><a href="#DuckDB-312"><span class="linenos">312</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
-</span><span id="DuckDB-313"><a href="#DuckDB-313"><span class="linenos">313</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-314"><a href="#DuckDB-314"><span class="linenos">314</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB-107"><a href="#DuckDB-107"><span class="linenos">107</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-108"><a href="#DuckDB-108"><span class="linenos">108</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="DuckDB-109"><a href="#DuckDB-109"><span class="linenos">109</span></a>
+</span><span id="DuckDB-110"><a href="#DuckDB-110"><span class="linenos">110</span></a> <span class="c1"># https://duckdb.org/docs/sql/introduction.html#creating-a-new-table</span>
+</span><span id="DuckDB-111"><a href="#DuckDB-111"><span class="linenos">111</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB-112"><a href="#DuckDB-112"><span class="linenos">112</span></a>
+</span><span id="DuckDB-113"><a href="#DuckDB-113"><span class="linenos">113</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-114"><a href="#DuckDB-114"><span class="linenos">114</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-115"><a href="#DuckDB-115"><span class="linenos">115</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-116"><a href="#DuckDB-116"><span class="linenos">116</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-117"><a href="#DuckDB-117"><span class="linenos">117</span></a> <span class="s2">&quot;//&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="DuckDB-118"><a href="#DuckDB-118"><span class="linenos">118</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-119"><a href="#DuckDB-119"><span class="linenos">119</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-120"><a href="#DuckDB-120"><span class="linenos">120</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-121"><a href="#DuckDB-121"><span class="linenos">121</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-122"><a href="#DuckDB-122"><span class="linenos">122</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-123"><a href="#DuckDB-123"><span class="linenos">123</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-124"><a href="#DuckDB-124"><span class="linenos">124</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-125"><a href="#DuckDB-125"><span class="linenos">125</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="DuckDB-126"><a href="#DuckDB-126"><span class="linenos">126</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-127"><a href="#DuckDB-127"><span class="linenos">127</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-128"><a href="#DuckDB-128"><span class="linenos">128</span></a> <span class="s2">&quot;PIVOT_WIDER&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="DuckDB-129"><a href="#DuckDB-129"><span class="linenos">129</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-130"><a href="#DuckDB-130"><span class="linenos">130</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-131"><a href="#DuckDB-131"><span class="linenos">131</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-132"><a href="#DuckDB-132"><span class="linenos">132</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-133"><a href="#DuckDB-133"><span class="linenos">133</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-134"><a href="#DuckDB-134"><span class="linenos">134</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-135"><a href="#DuckDB-135"><span class="linenos">135</span></a> <span class="p">}</span>
+</span><span id="DuckDB-136"><a href="#DuckDB-136"><span class="linenos">136</span></a>
+</span><span id="DuckDB-137"><a href="#DuckDB-137"><span class="linenos">137</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-138"><a href="#DuckDB-138"><span class="linenos">138</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DuckDB-139"><a href="#DuckDB-139"><span class="linenos">139</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-140"><a href="#DuckDB-140"><span class="linenos">140</span></a>
+</span><span id="DuckDB-141"><a href="#DuckDB-141"><span class="linenos">141</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-142"><a href="#DuckDB-142"><span class="linenos">142</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
+</span><span id="DuckDB-143"><a href="#DuckDB-143"><span class="linenos">143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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="DuckDB-144"><a href="#DuckDB-144"><span class="linenos">144</span></a> <span class="p">}</span>
+</span><span id="DuckDB-145"><a href="#DuckDB-145"><span class="linenos">145</span></a>
+</span><span id="DuckDB-146"><a href="#DuckDB-146"><span class="linenos">146</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-147"><a href="#DuckDB-147"><span class="linenos">147</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="DuckDB-148"><a href="#DuckDB-148"><span class="linenos">148</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-149"><a href="#DuckDB-149"><span class="linenos">149</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-150"><a href="#DuckDB-150"><span class="linenos">150</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-151"><a href="#DuckDB-151"><span class="linenos">151</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-152"><a href="#DuckDB-152"><span class="linenos">152</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-153"><a href="#DuckDB-153"><span class="linenos">153</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="DuckDB-154"><a href="#DuckDB-154"><span class="linenos">154</span></a> <span class="s2">&quot;DATETRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
+</span><span id="DuckDB-155"><a href="#DuckDB-155"><span class="linenos">155</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-156"><a href="#DuckDB-156"><span class="linenos">156</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-157"><a href="#DuckDB-157"><span class="linenos">157</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">seq_get</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">1000</span><span class="p">))</span>
+</span><span id="DuckDB-158"><a href="#DuckDB-158"><span class="linenos">158</span></a> <span class="p">),</span>
+</span><span id="DuckDB-159"><a href="#DuckDB-159"><span class="linenos">159</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-160"><a href="#DuckDB-160"><span class="linenos">160</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-161"><a href="#DuckDB-161"><span class="linenos">161</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-162"><a href="#DuckDB-162"><span class="linenos">162</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="DuckDB-163"><a href="#DuckDB-163"><span class="linenos">163</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">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">group</span><span class="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="DuckDB-164"><a href="#DuckDB-164"><span class="linenos">164</span></a> <span class="p">),</span>
+</span><span id="DuckDB-165"><a href="#DuckDB-165"><span class="linenos">165</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-166"><a href="#DuckDB-166"><span class="linenos">166</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-167"><a href="#DuckDB-167"><span class="linenos">167</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-168"><a href="#DuckDB-168"><span class="linenos">168</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-169"><a href="#DuckDB-169"><span class="linenos">169</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-170"><a href="#DuckDB-170"><span class="linenos">170</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-171"><a href="#DuckDB-171"><span class="linenos">171</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-172"><a href="#DuckDB-172"><span class="linenos">172</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-173"><a href="#DuckDB-173"><span class="linenos">173</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-174"><a href="#DuckDB-174"><span class="linenos">174</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-175"><a href="#DuckDB-175"><span class="linenos">175</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-176"><a href="#DuckDB-176"><span class="linenos">176</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="DuckDB-177"><a href="#DuckDB-177"><span class="linenos">177</span></a> <span class="p">}</span>
+</span><span id="DuckDB-178"><a href="#DuckDB-178"><span class="linenos">178</span></a>
+</span><span id="DuckDB-179"><a href="#DuckDB-179"><span class="linenos">179</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-180"><a href="#DuckDB-180"><span class="linenos">180</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="DuckDB-181"><a href="#DuckDB-181"><span class="linenos">181</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">expression</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">Decode</span><span 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 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="DuckDB-183"><a href="#DuckDB-183"><span class="linenos">183</span></a> <span class="p">),</span>
+</span><span id="DuckDB-184"><a href="#DuckDB-184"><span class="linenos">184</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><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">Encode</span><span 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 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="DuckDB-186"><a href="#DuckDB-186"><span class="linenos">186</span></a> <span class="p">),</span>
+</span><span id="DuckDB-187"><a href="#DuckDB-187"><span class="linenos">187</span></a> <span class="p">}</span>
+</span><span id="DuckDB-188"><a href="#DuckDB-188"><span class="linenos">188</span></a>
+</span><span id="DuckDB-189"><a href="#DuckDB-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="DuckDB-190"><a href="#DuckDB-190"><span class="linenos">190</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DuckDB-191"><a href="#DuckDB-191"><span class="linenos">191</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="DuckDB-192"><a href="#DuckDB-192"><span class="linenos">192</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="DuckDB-193"><a href="#DuckDB-193"><span class="linenos">193</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="DuckDB-194"><a href="#DuckDB-194"><span class="linenos">194</span></a> <span class="p">)</span>
+</span><span id="DuckDB-195"><a href="#DuckDB-195"><span class="linenos">195</span></a>
+</span><span id="DuckDB-196"><a href="#DuckDB-196"><span class="linenos">196</span></a> <span class="c1"># DuckDB treats NUMERIC and DECIMAL without precision as DECIMAL(18, 3)</span>
+</span><span id="DuckDB-197"><a href="#DuckDB-197"><span class="linenos">197</span></a> <span class="c1"># See: https://duckdb.org/docs/sql/data_types/numeric</span>
+</span><span id="DuckDB-198"><a href="#DuckDB-198"><span class="linenos">198</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DuckDB-199"><a href="#DuckDB-199"><span class="linenos">199</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="DuckDB-200"><a href="#DuckDB-200"><span class="linenos">200</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;numeric&quot;</span><span class="p">,</span> <span class="s2">&quot;decimal&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-201"><a href="#DuckDB-201"><span class="linenos">201</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</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 class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;DECIMAL(18, 3)&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-204"><a href="#DuckDB-204"><span class="linenos">204</span></a>
+</span><span id="DuckDB-205"><a href="#DuckDB-205"><span class="linenos">205</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="DuckDB-206"><a href="#DuckDB-206"><span class="linenos">206</span></a>
+</span><span id="DuckDB-207"><a href="#DuckDB-207"><span class="linenos">207</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="DuckDB-208"><a href="#DuckDB-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
+</span><span id="DuckDB-209"><a href="#DuckDB-209"><span class="linenos">209</span></a>
+</span><span id="DuckDB-210"><a href="#DuckDB-210"><span class="linenos">210</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="DuckDB-211"><a href="#DuckDB-211"><span class="linenos">211</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="DuckDB-212"><a href="#DuckDB-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span>
+</span><span id="DuckDB-213"><a href="#DuckDB-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;duckdb&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-214"><a href="#DuckDB-214"><span class="linenos">214</span></a>
+</span><span id="DuckDB-215"><a href="#DuckDB-215"><span class="linenos">215</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-216"><a href="#DuckDB-216"><span class="linenos">216</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-217"><a href="#DuckDB-217"><span class="linenos">217</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-218"><a href="#DuckDB-218"><span class="linenos">218</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-219"><a href="#DuckDB-219"><span class="linenos">219</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="DuckDB-220"><a href="#DuckDB-220"><span class="linenos">220</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-221"><a href="#DuckDB-221"><span class="linenos">221</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-222"><a href="#DuckDB-222"><span class="linenos">222</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-223"><a href="#DuckDB-223"><span class="linenos">223</span></a>
+</span><span id="DuckDB-224"><a href="#DuckDB-224"><span class="linenos">224</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-225"><a href="#DuckDB-225"><span class="linenos">225</span></a> <span 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-226"><a href="#DuckDB-226"><span class="linenos">226</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-227"><a href="#DuckDB-227"><span class="linenos">227</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-228"><a href="#DuckDB-228"><span class="linenos">228</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="DuckDB-229"><a href="#DuckDB-229"><span class="linenos">229</span></a> <span class="k">else</span> <span class="n">inline_array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">),</span>
+</span><span id="DuckDB-230"><a href="#DuckDB-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="DuckDB-231"><a href="#DuckDB-231"><span class="linenos">231</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-232"><a href="#DuckDB-232"><span class="linenos">232</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-233"><a href="#DuckDB-233"><span class="linenos">233</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">func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="DuckDB-234"><a href="#DuckDB-234"><span class="linenos">234</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-235"><a href="#DuckDB-235"><span class="linenos">235</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-236"><a href="#DuckDB-236"><span class="linenos">236</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-237"><a href="#DuckDB-237"><span class="linenos">237</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-238"><a href="#DuckDB-238"><span class="linenos">238</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-239"><a href="#DuckDB-239"><span class="linenos">239</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-240"><a href="#DuckDB-240"><span class="linenos">240</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-241"><a href="#DuckDB-241"><span class="linenos">241</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-242"><a href="#DuckDB-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
+</span><span id="DuckDB-243"><a href="#DuckDB-243"><span class="linenos">243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB-244"><a href="#DuckDB-244"><span class="linenos">244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-245"><a href="#DuckDB-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB-246"><a href="#DuckDB-246"><span class="linenos">246</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-247"><a href="#DuckDB-247"><span class="linenos">247</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;day&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DuckDB-248"><a href="#DuckDB-248"><span class="linenos">248</span></a> <span class="p">),</span>
+</span><span id="DuckDB-249"><a href="#DuckDB-249"><span class="linenos">249</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-250"><a href="#DuckDB-250"><span class="linenos">250</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-251"><a href="#DuckDB-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB-252"><a href="#DuckDB-252"><span class="linenos">252</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-253"><a href="#DuckDB-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB-254"><a href="#DuckDB-254"><span class="linenos">254</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-255"><a href="#DuckDB-255"><span class="linenos">255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-256"><a href="#DuckDB-256"><span class="linenos">256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-257"><a href="#DuckDB-257"><span class="linenos">257</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-258"><a href="#DuckDB-258"><span class="linenos">258</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-259"><a href="#DuckDB-259"><span class="linenos">259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
+</span><span id="DuckDB-260"><a href="#DuckDB-260"><span class="linenos">260</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-261"><a href="#DuckDB-261"><span class="linenos">261</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-262"><a href="#DuckDB-262"><span class="linenos">262</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-263"><a href="#DuckDB-263"><span class="linenos">263</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-264"><a href="#DuckDB-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="DuckDB-265"><a href="#DuckDB-265"><span class="linenos">265</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-266"><a href="#DuckDB-266"><span class="linenos">266</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-267"><a href="#DuckDB-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB-268"><a href="#DuckDB-268"><span class="linenos">268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB-269"><a href="#DuckDB-269"><span class="linenos">269</span></a> <span class="p">),</span>
+</span><span id="DuckDB-270"><a href="#DuckDB-270"><span class="linenos">270</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-271"><a href="#DuckDB-271"><span class="linenos">271</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-272"><a href="#DuckDB-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="DuckDB-273"><a href="#DuckDB-273"><span class="linenos">273</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-274"><a href="#DuckDB-274"><span class="linenos">274</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-275"><a href="#DuckDB-275"><span class="linenos">275</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-276"><a href="#DuckDB-276"><span class="linenos">276</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-277"><a href="#DuckDB-277"><span class="linenos">277</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-278"><a href="#DuckDB-278"><span class="linenos">278</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-279"><a href="#DuckDB-279"><span class="linenos">279</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-280"><a href="#DuckDB-280"><span class="linenos">280</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-281"><a href="#DuckDB-281"><span class="linenos">281</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-282"><a href="#DuckDB-282"><span class="linenos">282</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
+</span><span id="DuckDB-283"><a href="#DuckDB-283"><span class="linenos">283</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-284"><a href="#DuckDB-284"><span class="linenos">284</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-285"><a href="#DuckDB-285"><span class="linenos">285</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-286"><a href="#DuckDB-286"><span class="linenos">286</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-287"><a href="#DuckDB-287"><span class="linenos">287</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-288"><a href="#DuckDB-288"><span class="linenos">288</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-289"><a href="#DuckDB-289"><span class="linenos">289</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-290"><a href="#DuckDB-290"><span class="linenos">290</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-291"><a href="#DuckDB-291"><span class="linenos">291</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-292"><a href="#DuckDB-292"><span class="linenos">292</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-293"><a href="#DuckDB-293"><span class="linenos">293</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-294"><a href="#DuckDB-294"><span class="linenos">294</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-295"><a href="#DuckDB-295"><span class="linenos">295</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-296"><a href="#DuckDB-296"><span class="linenos">296</span></a> <span class="p">}</span>
+</span><span id="DuckDB-297"><a href="#DuckDB-297"><span class="linenos">297</span></a>
+</span><span id="DuckDB-298"><a href="#DuckDB-298"><span class="linenos">298</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-299"><a href="#DuckDB-299"><span class="linenos">299</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="DuckDB-300"><a href="#DuckDB-300"><span class="linenos">300</span></a> <span class="n">exp</span><span 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-301"><a href="#DuckDB-301"><span class="linenos">301</span></a> <span class="n">exp</span><span 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-302"><a href="#DuckDB-302"><span class="linenos">302</span></a> <span class="n">exp</span><span 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-303"><a href="#DuckDB-303"><span class="linenos">303</span></a> <span class="n">exp</span><span 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-304"><a href="#DuckDB-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-305"><a href="#DuckDB-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-306"><a href="#DuckDB-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-307"><a href="#DuckDB-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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-308"><a href="#DuckDB-308"><span class="linenos">308</span></a> <span class="p">}</span>
+</span><span id="DuckDB-309"><a href="#DuckDB-309"><span class="linenos">309</span></a>
+</span><span id="DuckDB-310"><a href="#DuckDB-310"><span class="linenos">310</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-311"><a href="#DuckDB-311"><span class="linenos">311</span></a>
+</span><span id="DuckDB-312"><a href="#DuckDB-312"><span class="linenos">312</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
+</span><span id="DuckDB-313"><a href="#DuckDB-313"><span class="linenos">313</span></a>
+</span><span id="DuckDB-314"><a href="#DuckDB-314"><span class="linenos">314</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-315"><a href="#DuckDB-315"><span class="linenos">315</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="DuckDB-316"><a href="#DuckDB-316"><span class="linenos">316</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-317"><a href="#DuckDB-317"><span class="linenos">317</span></a> <span class="p">}</span>
+</span><span id="DuckDB-318"><a href="#DuckDB-318"><span class="linenos">318</span></a>
+</span><span id="DuckDB-319"><a href="#DuckDB-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">interval_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-320"><a href="#DuckDB-320"><span class="linenos">320</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB-321"><a href="#DuckDB-321"><span class="linenos">321</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="DuckDB-322"><a href="#DuckDB-322"><span class="linenos">322</span></a>
+</span><span id="DuckDB-323"><a href="#DuckDB-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-324"><a href="#DuckDB-324"><span class="linenos">324</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB-325"><a href="#DuckDB-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-326"><a href="#DuckDB-326"><span class="linenos">326</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB-327"><a href="#DuckDB-327"><span class="linenos">327</span></a>
+</span><span id="DuckDB-328"><a href="#DuckDB-328"><span class="linenos">328</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB-329"><a href="#DuckDB-329"><span class="linenos">329</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB-330"><a href="#DuckDB-330"><span class="linenos">330</span></a>
+</span><span id="DuckDB-331"><a href="#DuckDB-331"><span class="linenos">331</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-332"><a href="#DuckDB-332"><span class="linenos">332</span></a>
+</span><span id="DuckDB-333"><a href="#DuckDB-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB-334"><a href="#DuckDB-334"><span class="linenos">334</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
+</span><span id="DuckDB-335"><a href="#DuckDB-335"><span class="linenos">335</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-336"><a href="#DuckDB-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">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>
@@ -1040,6 +1081,7 @@
<dd id="DuckDB.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="DuckDB.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="DuckDB.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="DuckDB.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="DuckDB.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="DuckDB.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="DuckDB.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
@@ -1078,29 +1120,29 @@
</div>
<a class="headerlink" href="#DuckDB.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Tokenizer-107"><a href="#DuckDB.Tokenizer-107"><span class="linenos">107</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-108"><a href="#DuckDB.Tokenizer-108"><span class="linenos">108</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Tokenizer-109"><a href="#DuckDB.Tokenizer-109"><span class="linenos">109</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-110"><a href="#DuckDB.Tokenizer-110"><span class="linenos">110</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-111"><a href="#DuckDB.Tokenizer-111"><span class="linenos">111</span></a> <span class="s2">&quot;//&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="DuckDB.Tokenizer-112"><a href="#DuckDB.Tokenizer-112"><span class="linenos">112</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-113"><a href="#DuckDB.Tokenizer-113"><span class="linenos">113</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-114"><a href="#DuckDB.Tokenizer-114"><span class="linenos">114</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-115"><a href="#DuckDB.Tokenizer-115"><span class="linenos">115</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-116"><a href="#DuckDB.Tokenizer-116"><span class="linenos">116</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-117"><a href="#DuckDB.Tokenizer-117"><span class="linenos">117</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-118"><a href="#DuckDB.Tokenizer-118"><span class="linenos">118</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-119"><a href="#DuckDB.Tokenizer-119"><span class="linenos">119</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-120"><a href="#DuckDB.Tokenizer-120"><span class="linenos">120</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-121"><a href="#DuckDB.Tokenizer-121"><span class="linenos">121</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-122"><a href="#DuckDB.Tokenizer-122"><span class="linenos">122</span></a> <span class="s2">&quot;PIVOT_WIDER&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="DuckDB.Tokenizer-123"><a href="#DuckDB.Tokenizer-123"><span class="linenos">123</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-124"><a href="#DuckDB.Tokenizer-124"><span class="linenos">124</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-125"><a href="#DuckDB.Tokenizer-125"><span class="linenos">125</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-126"><a href="#DuckDB.Tokenizer-126"><span class="linenos">126</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-127"><a href="#DuckDB.Tokenizer-127"><span class="linenos">127</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-128"><a href="#DuckDB.Tokenizer-128"><span class="linenos">128</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-129"><a href="#DuckDB.Tokenizer-129"><span class="linenos">129</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Tokenizer-113"><a href="#DuckDB.Tokenizer-113"><span class="linenos">113</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-114"><a href="#DuckDB.Tokenizer-114"><span class="linenos">114</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Tokenizer-115"><a href="#DuckDB.Tokenizer-115"><span class="linenos">115</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-116"><a href="#DuckDB.Tokenizer-116"><span class="linenos">116</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-117"><a href="#DuckDB.Tokenizer-117"><span class="linenos">117</span></a> <span class="s2">&quot;//&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="DuckDB.Tokenizer-118"><a href="#DuckDB.Tokenizer-118"><span class="linenos">118</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-119"><a href="#DuckDB.Tokenizer-119"><span class="linenos">119</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-120"><a href="#DuckDB.Tokenizer-120"><span class="linenos">120</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-121"><a href="#DuckDB.Tokenizer-121"><span class="linenos">121</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-122"><a href="#DuckDB.Tokenizer-122"><span class="linenos">122</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-123"><a href="#DuckDB.Tokenizer-123"><span class="linenos">123</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-124"><a href="#DuckDB.Tokenizer-124"><span class="linenos">124</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-125"><a href="#DuckDB.Tokenizer-125"><span class="linenos">125</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-126"><a href="#DuckDB.Tokenizer-126"><span class="linenos">126</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-127"><a href="#DuckDB.Tokenizer-127"><span class="linenos">127</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-128"><a href="#DuckDB.Tokenizer-128"><span class="linenos">128</span></a> <span class="s2">&quot;PIVOT_WIDER&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="DuckDB.Tokenizer-129"><a href="#DuckDB.Tokenizer-129"><span class="linenos">129</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-130"><a href="#DuckDB.Tokenizer-130"><span class="linenos">130</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-131"><a href="#DuckDB.Tokenizer-131"><span class="linenos">131</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-132"><a href="#DuckDB.Tokenizer-132"><span class="linenos">132</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-133"><a href="#DuckDB.Tokenizer-133"><span class="linenos">133</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-134"><a href="#DuckDB.Tokenizer-134"><span class="linenos">134</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-135"><a href="#DuckDB.Tokenizer-135"><span class="linenos">135</span></a> <span class="p">}</span>
</span></pre></div>
@@ -1110,7 +1152,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="DuckDB.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;:=&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;//&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;ATTACH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BPCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BITSTRING&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;EXCLUDE&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;INT1&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;LOGICAL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;PIVOT_WIDER&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;SIGNED&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;UBIGINT&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;UINTEGER&#39;: &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &#39;USMALLINT&#39;: &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &#39;UTINYINT&#39;: &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;:=&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;//&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;ATTACH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BITSTRING&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BPCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;EXCLUDE&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;HUGEINT&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT1&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;LOGICAL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;PIVOT_WIDER&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;SIGNED&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;UBIGINT&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;UINTEGER&#39;: &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &#39;USMALLINT&#39;: &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &#39;UTINYINT&#39;: &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;}</span>
</div>
@@ -1162,69 +1204,83 @@
</div>
<a class="headerlink" href="#DuckDB.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Parser-131"><a href="#DuckDB.Parser-131"><span class="linenos">131</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-132"><a href="#DuckDB.Parser-132"><span class="linenos">132</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="DuckDB.Parser-133"><a href="#DuckDB.Parser-133"><span class="linenos">133</span></a>
-</span><span id="DuckDB.Parser-134"><a href="#DuckDB.Parser-134"><span class="linenos">134</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Parser-135"><a href="#DuckDB.Parser-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">BITWISE</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-136"><a href="#DuckDB.Parser-136"><span class="linenos">136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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="DuckDB.Parser-137"><a href="#DuckDB.Parser-137"><span class="linenos">137</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Parser-138"><a href="#DuckDB.Parser-138"><span class="linenos">138</span></a>
-</span><span id="DuckDB.Parser-139"><a href="#DuckDB.Parser-139"><span class="linenos">139</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Parser-140"><a href="#DuckDB.Parser-140"><span class="linenos">140</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-141"><a href="#DuckDB.Parser-141"><span class="linenos">141</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-142"><a href="#DuckDB.Parser-142"><span class="linenos">142</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-143"><a href="#DuckDB.Parser-143"><span class="linenos">143</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-144"><a href="#DuckDB.Parser-144"><span class="linenos">144</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-145"><a href="#DuckDB.Parser-145"><span class="linenos">145</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-146"><a href="#DuckDB.Parser-146"><span class="linenos">146</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="DuckDB.Parser-147"><a href="#DuckDB.Parser-147"><span class="linenos">147</span></a> <span class="s2">&quot;DATETRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-148"><a href="#DuckDB.Parser-148"><span class="linenos">148</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-149"><a href="#DuckDB.Parser-149"><span class="linenos">149</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-150"><a href="#DuckDB.Parser-150"><span class="linenos">150</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">seq_get</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">1000</span><span class="p">))</span>
-</span><span id="DuckDB.Parser-151"><a href="#DuckDB.Parser-151"><span class="linenos">151</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Parser-152"><a href="#DuckDB.Parser-152"><span class="linenos">152</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-153"><a href="#DuckDB.Parser-153"><span class="linenos">153</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-154"><a href="#DuckDB.Parser-154"><span class="linenos">154</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-155"><a href="#DuckDB.Parser-155"><span class="linenos">155</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="DuckDB.Parser-156"><a href="#DuckDB.Parser-156"><span class="linenos">156</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">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">group</span><span class="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="DuckDB.Parser-157"><a href="#DuckDB.Parser-157"><span class="linenos">157</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Parser-158"><a href="#DuckDB.Parser-158"><span class="linenos">158</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-159"><a href="#DuckDB.Parser-159"><span class="linenos">159</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-160"><a href="#DuckDB.Parser-160"><span class="linenos">160</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-161"><a href="#DuckDB.Parser-161"><span class="linenos">161</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-162"><a href="#DuckDB.Parser-162"><span class="linenos">162</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-163"><a href="#DuckDB.Parser-163"><span class="linenos">163</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-164"><a href="#DuckDB.Parser-164"><span class="linenos">164</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-165"><a href="#DuckDB.Parser-165"><span class="linenos">165</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-166"><a href="#DuckDB.Parser-166"><span class="linenos">166</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-167"><a href="#DuckDB.Parser-167"><span class="linenos">167</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-168"><a href="#DuckDB.Parser-168"><span class="linenos">168</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-169"><a href="#DuckDB.Parser-169"><span class="linenos">169</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="DuckDB.Parser-170"><a href="#DuckDB.Parser-170"><span class="linenos">170</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Parser-171"><a href="#DuckDB.Parser-171"><span class="linenos">171</span></a>
-</span><span id="DuckDB.Parser-172"><a href="#DuckDB.Parser-172"><span class="linenos">172</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Parser-173"><a href="#DuckDB.Parser-173"><span class="linenos">173</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="DuckDB.Parser-174"><a href="#DuckDB.Parser-174"><span class="linenos">174</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">expression</span><span class="p">(</span>
-</span><span id="DuckDB.Parser-175"><a href="#DuckDB.Parser-175"><span class="linenos">175</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</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="DuckDB.Parser-176"><a href="#DuckDB.Parser-176"><span class="linenos">176</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Parser-177"><a href="#DuckDB.Parser-177"><span class="linenos">177</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><span id="DuckDB.Parser-178"><a href="#DuckDB.Parser-178"><span class="linenos">178</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span 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 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="DuckDB.Parser-179"><a href="#DuckDB.Parser-179"><span class="linenos">179</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Parser-180"><a href="#DuckDB.Parser-180"><span class="linenos">180</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Parser-181"><a href="#DuckDB.Parser-181"><span class="linenos">181</span></a>
-</span><span id="DuckDB.Parser-182"><a href="#DuckDB.Parser-182"><span class="linenos">182</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Parser-183"><a href="#DuckDB.Parser-183"><span class="linenos">183</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-184"><a href="#DuckDB.Parser-184"><span class="linenos">184</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-185"><a href="#DuckDB.Parser-185"><span class="linenos">185</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-186"><a href="#DuckDB.Parser-186"><span class="linenos">186</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-187"><a href="#DuckDB.Parser-187"><span class="linenos">187</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-188"><a href="#DuckDB.Parser-188"><span class="linenos">188</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Parser-189"><a href="#DuckDB.Parser-189"><span class="linenos">189</span></a>
-</span><span id="DuckDB.Parser-190"><a href="#DuckDB.Parser-190"><span class="linenos">190</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="DuckDB.Parser-191"><a href="#DuckDB.Parser-191"><span class="linenos">191</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="DuckDB.Parser-192"><a href="#DuckDB.Parser-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span>
-</span><span id="DuckDB.Parser-193"><a href="#DuckDB.Parser-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;duckdb&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Parser-137"><a href="#DuckDB.Parser-137"><span class="linenos">137</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-138"><a href="#DuckDB.Parser-138"><span class="linenos">138</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DuckDB.Parser-139"><a href="#DuckDB.Parser-139"><span class="linenos">139</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Parser-140"><a href="#DuckDB.Parser-140"><span class="linenos">140</span></a>
+</span><span id="DuckDB.Parser-141"><a href="#DuckDB.Parser-141"><span class="linenos">141</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Parser-142"><a href="#DuckDB.Parser-142"><span class="linenos">142</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-143"><a href="#DuckDB.Parser-143"><span class="linenos">143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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="DuckDB.Parser-144"><a href="#DuckDB.Parser-144"><span class="linenos">144</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Parser-145"><a href="#DuckDB.Parser-145"><span class="linenos">145</span></a>
+</span><span id="DuckDB.Parser-146"><a href="#DuckDB.Parser-146"><span class="linenos">146</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Parser-147"><a href="#DuckDB.Parser-147"><span class="linenos">147</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-148"><a href="#DuckDB.Parser-148"><span class="linenos">148</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-149"><a href="#DuckDB.Parser-149"><span class="linenos">149</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-150"><a href="#DuckDB.Parser-150"><span class="linenos">150</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-151"><a href="#DuckDB.Parser-151"><span class="linenos">151</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-152"><a href="#DuckDB.Parser-152"><span class="linenos">152</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-153"><a href="#DuckDB.Parser-153"><span class="linenos">153</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="DuckDB.Parser-154"><a href="#DuckDB.Parser-154"><span class="linenos">154</span></a> <span class="s2">&quot;DATETRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-155"><a href="#DuckDB.Parser-155"><span class="linenos">155</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-156"><a href="#DuckDB.Parser-156"><span class="linenos">156</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-157"><a href="#DuckDB.Parser-157"><span class="linenos">157</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">seq_get</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">1000</span><span class="p">))</span>
+</span><span id="DuckDB.Parser-158"><a href="#DuckDB.Parser-158"><span class="linenos">158</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Parser-159"><a href="#DuckDB.Parser-159"><span class="linenos">159</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-160"><a href="#DuckDB.Parser-160"><span class="linenos">160</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-161"><a href="#DuckDB.Parser-161"><span class="linenos">161</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-162"><a href="#DuckDB.Parser-162"><span class="linenos">162</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="DuckDB.Parser-163"><a href="#DuckDB.Parser-163"><span class="linenos">163</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">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">group</span><span class="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="DuckDB.Parser-164"><a href="#DuckDB.Parser-164"><span class="linenos">164</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Parser-165"><a href="#DuckDB.Parser-165"><span class="linenos">165</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-166"><a href="#DuckDB.Parser-166"><span class="linenos">166</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-167"><a href="#DuckDB.Parser-167"><span class="linenos">167</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-168"><a href="#DuckDB.Parser-168"><span class="linenos">168</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-169"><a href="#DuckDB.Parser-169"><span class="linenos">169</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-170"><a href="#DuckDB.Parser-170"><span class="linenos">170</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-171"><a href="#DuckDB.Parser-171"><span class="linenos">171</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-172"><a href="#DuckDB.Parser-172"><span class="linenos">172</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-173"><a href="#DuckDB.Parser-173"><span class="linenos">173</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-174"><a href="#DuckDB.Parser-174"><span class="linenos">174</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-175"><a href="#DuckDB.Parser-175"><span class="linenos">175</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-176"><a href="#DuckDB.Parser-176"><span class="linenos">176</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="DuckDB.Parser-177"><a href="#DuckDB.Parser-177"><span class="linenos">177</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Parser-178"><a href="#DuckDB.Parser-178"><span class="linenos">178</span></a>
+</span><span id="DuckDB.Parser-179"><a href="#DuckDB.Parser-179"><span class="linenos">179</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Parser-180"><a href="#DuckDB.Parser-180"><span class="linenos">180</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="DuckDB.Parser-181"><a href="#DuckDB.Parser-181"><span class="linenos">181</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">expression</span><span class="p">(</span>
+</span><span id="DuckDB.Parser-182"><a href="#DuckDB.Parser-182"><span class="linenos">182</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</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="DuckDB.Parser-183"><a href="#DuckDB.Parser-183"><span class="linenos">183</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Parser-184"><a href="#DuckDB.Parser-184"><span class="linenos">184</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><span id="DuckDB.Parser-185"><a href="#DuckDB.Parser-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span 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 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="DuckDB.Parser-186"><a href="#DuckDB.Parser-186"><span class="linenos">186</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Parser-187"><a href="#DuckDB.Parser-187"><span class="linenos">187</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Parser-188"><a href="#DuckDB.Parser-188"><span class="linenos">188</span></a>
+</span><span id="DuckDB.Parser-189"><a href="#DuckDB.Parser-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="DuckDB.Parser-190"><a href="#DuckDB.Parser-190"><span class="linenos">190</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="DuckDB.Parser-191"><a href="#DuckDB.Parser-191"><span class="linenos">191</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="DuckDB.Parser-192"><a href="#DuckDB.Parser-192"><span class="linenos">192</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="DuckDB.Parser-193"><a href="#DuckDB.Parser-193"><span class="linenos">193</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="DuckDB.Parser-194"><a href="#DuckDB.Parser-194"><span class="linenos">194</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Parser-195"><a href="#DuckDB.Parser-195"><span class="linenos">195</span></a>
+</span><span id="DuckDB.Parser-196"><a href="#DuckDB.Parser-196"><span class="linenos">196</span></a> <span class="c1"># DuckDB treats NUMERIC and DECIMAL without precision as DECIMAL(18, 3)</span>
+</span><span id="DuckDB.Parser-197"><a href="#DuckDB.Parser-197"><span class="linenos">197</span></a> <span class="c1"># See: https://duckdb.org/docs/sql/data_types/numeric</span>
+</span><span id="DuckDB.Parser-198"><a href="#DuckDB.Parser-198"><span class="linenos">198</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DuckDB.Parser-199"><a href="#DuckDB.Parser-199"><span class="linenos">199</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="DuckDB.Parser-200"><a href="#DuckDB.Parser-200"><span class="linenos">200</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;numeric&quot;</span><span class="p">,</span> <span class="s2">&quot;decimal&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Parser-201"><a href="#DuckDB.Parser-201"><span class="linenos">201</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DuckDB.Parser-202"><a href="#DuckDB.Parser-202"><span class="linenos">202</span></a> <span class="p">):</span>
+</span><span id="DuckDB.Parser-203"><a href="#DuckDB.Parser-203"><span class="linenos">203</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;DECIMAL(18, 3)&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Parser-204"><a href="#DuckDB.Parser-204"><span class="linenos">204</span></a>
+</span><span id="DuckDB.Parser-205"><a href="#DuckDB.Parser-205"><span class="linenos">205</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="DuckDB.Parser-206"><a href="#DuckDB.Parser-206"><span class="linenos">206</span></a>
+</span><span id="DuckDB.Parser-207"><a href="#DuckDB.Parser-207"><span class="linenos">207</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="DuckDB.Parser-208"><a href="#DuckDB.Parser-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
+</span><span id="DuckDB.Parser-209"><a href="#DuckDB.Parser-209"><span class="linenos">209</span></a>
+</span><span id="DuckDB.Parser-210"><a href="#DuckDB.Parser-210"><span class="linenos">210</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="DuckDB.Parser-211"><a href="#DuckDB.Parser-211"><span class="linenos">211</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="DuckDB.Parser-212"><a href="#DuckDB.Parser-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span>
+</span><span id="DuckDB.Parser-213"><a href="#DuckDB.Parser-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;duckdb&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1257,6 +1313,18 @@ Default: 3</li>
</div>
+ <div id="DuckDB.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#DuckDB.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="DuckDB.Parser.BITWISE" class="classattr">
<div class="attr variable">
<span class="name">BITWISE</span> =
@@ -1274,7 +1342,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="DuckDB.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_date_diff&gt;, &#39;DATE_DIFF&#39;: &lt;function _parse_date_diff&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ARRAY_LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_REVERSE_SORT&#39;: &lt;function _sort_array_reverse&gt;, &#39;DATETRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;EPOCH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;EPOCH_MS&#39;: &lt;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;LIST_REVERSE_SORT&#39;: &lt;function _sort_array_reverse&gt;, &#39;LIST_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;LIST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;REGEXP_MATCHES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;STRFTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;STRING_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;STRING_SPLIT_REGEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;STRING_TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;STRPTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;STRUCT_PACK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STR_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;STR_SPLIT_REGEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNNEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_date_diff&gt;, &#39;DATE_DIFF&#39;: &lt;function _parse_date_diff&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ARRAY_LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_REVERSE_SORT&#39;: &lt;function _sort_array_reverse&gt;, &#39;DATETRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;EPOCH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;EPOCH_MS&#39;: &lt;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;LIST_REVERSE_SORT&#39;: &lt;function _sort_array_reverse&gt;, &#39;LIST_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;LIST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;REGEXP_MATCHES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;STRFTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;STRING_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;STRING_SPLIT_REGEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;STRING_TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;STRPTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;STRUCT_PACK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STR_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;STR_SPLIT_REGEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNNEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;}</span>
</div>
@@ -1296,15 +1364,14 @@ Default: 3</li>
</div>
- <div id="DuckDB.Parser.TYPE_TOKENS" class="classattr">
+ <div id="DuckDB.Parser.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">TYPE_TOKENS</span> =
-<input id="DuckDB.Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#DuckDB.Tokenizer">sqlglot.dialects.duckdb.DuckDB.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DuckDB.Parser.TYPE_TOKENS"></a>
+ <a class="headerlink" href="#DuckDB.Parser.TOKENIZER_CLASS"></a>
@@ -1375,8 +1442,10 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="DuckDB.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="DuckDB.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="DuckDB.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="DuckDB.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="DuckDB.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
+ <dd id="DuckDB.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
<dd id="DuckDB.Parser.SUBQUERY_PREDICATES" class="variable"><a href="../parser.html#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a></dd>
<dd id="DuckDB.Parser.RESERVED_KEYWORDS" class="variable"><a href="../parser.html#Parser.RESERVED_KEYWORDS">RESERVED_KEYWORDS</a></dd>
<dd id="DuckDB.Parser.DB_CREATABLES" class="variable"><a href="../parser.html#Parser.DB_CREATABLES">DB_CREATABLES</a></dd>
@@ -1393,6 +1462,7 @@ Default: 3</li>
<dd id="DuckDB.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
<dd id="DuckDB.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="DuckDB.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="DuckDB.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="DuckDB.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="DuckDB.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="DuckDB.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1412,6 +1482,7 @@ Default: 3</li>
<dd id="DuckDB.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="DuckDB.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="DuckDB.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="DuckDB.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="DuckDB.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="DuckDB.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="DuckDB.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1429,11 +1500,13 @@ Default: 3</li>
<dd id="DuckDB.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="DuckDB.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="DuckDB.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="DuckDB.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="DuckDB.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="DuckDB.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="DuckDB.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="DuckDB.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="DuckDB.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="DuckDB.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="DuckDB.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="DuckDB.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="DuckDB.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -1469,126 +1542,128 @@ Default: 3</li>
</div>
<a class="headerlink" href="#DuckDB.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator-195"><a href="#DuckDB.Generator-195"><span class="linenos">195</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-196"><a href="#DuckDB.Generator-196"><span class="linenos">196</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-197"><a href="#DuckDB.Generator-197"><span class="linenos">197</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-198"><a href="#DuckDB.Generator-198"><span class="linenos">198</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-199"><a href="#DuckDB.Generator-199"><span class="linenos">199</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="DuckDB.Generator-200"><a href="#DuckDB.Generator-200"><span class="linenos">200</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-201"><a href="#DuckDB.Generator-201"><span class="linenos">201</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-202"><a href="#DuckDB.Generator-202"><span class="linenos">202</span></a>
-</span><span id="DuckDB.Generator-203"><a href="#DuckDB.Generator-203"><span class="linenos">203</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-204"><a href="#DuckDB.Generator-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">TRANSFORMS</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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_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">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-207"><a href="#DuckDB.Generator-207"><span class="linenos">207</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-208"><a href="#DuckDB.Generator-208"><span class="linenos">208</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-209"><a href="#DuckDB.Generator-209"><span class="linenos">209</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-210"><a href="#DuckDB.Generator-210"><span class="linenos">210</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-211"><a href="#DuckDB.Generator-211"><span class="linenos">211</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-212"><a href="#DuckDB.Generator-212"><span class="linenos">212</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">func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><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">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_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">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-215"><a href="#DuckDB.Generator-215"><span class="linenos">215</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-216"><a href="#DuckDB.Generator-216"><span class="linenos">216</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-217"><a href="#DuckDB.Generator-217"><span class="linenos">217</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-218"><a href="#DuckDB.Generator-218"><span class="linenos">218</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-219"><a href="#DuckDB.Generator-219"><span class="linenos">219</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-220"><a href="#DuckDB.Generator-220"><span class="linenos">220</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-221"><a href="#DuckDB.Generator-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-222"><a href="#DuckDB.Generator-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-223"><a href="#DuckDB.Generator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-224"><a href="#DuckDB.Generator-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-225"><a href="#DuckDB.Generator-225"><span class="linenos">225</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-226"><a href="#DuckDB.Generator-226"><span class="linenos">226</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;day&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB.Generator-227"><a href="#DuckDB.Generator-227"><span class="linenos">227</span></a> <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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</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">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-230"><a href="#DuckDB.Generator-230"><span class="linenos">230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-231"><a href="#DuckDB.Generator-231"><span class="linenos">231</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-232"><a href="#DuckDB.Generator-232"><span class="linenos">232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-233"><a href="#DuckDB.Generator-233"><span class="linenos">233</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-234"><a href="#DuckDB.Generator-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="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-235"><a href="#DuckDB.Generator-235"><span class="linenos">235</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-236"><a href="#DuckDB.Generator-236"><span class="linenos">236</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-237"><a href="#DuckDB.Generator-237"><span class="linenos">237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-238"><a href="#DuckDB.Generator-238"><span class="linenos">238</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-239"><a href="#DuckDB.Generator-239"><span class="linenos">239</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-240"><a href="#DuckDB.Generator-240"><span class="linenos">240</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-241"><a href="#DuckDB.Generator-241"><span class="linenos">241</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-242"><a href="#DuckDB.Generator-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-243"><a href="#DuckDB.Generator-243"><span class="linenos">243</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-244"><a href="#DuckDB.Generator-244"><span class="linenos">244</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-245"><a href="#DuckDB.Generator-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-246"><a href="#DuckDB.Generator-246"><span class="linenos">246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-247"><a href="#DuckDB.Generator-247"><span class="linenos">247</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-248"><a href="#DuckDB.Generator-248"><span class="linenos">248</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-249"><a href="#DuckDB.Generator-249"><span class="linenos">249</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-250"><a href="#DuckDB.Generator-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-251"><a href="#DuckDB.Generator-251"><span class="linenos">251</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-252"><a href="#DuckDB.Generator-252"><span class="linenos">252</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-253"><a href="#DuckDB.Generator-253"><span class="linenos">253</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-254"><a href="#DuckDB.Generator-254"><span class="linenos">254</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-255"><a href="#DuckDB.Generator-255"><span class="linenos">255</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-256"><a href="#DuckDB.Generator-256"><span class="linenos">256</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-257"><a href="#DuckDB.Generator-257"><span class="linenos">257</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-258"><a href="#DuckDB.Generator-258"><span class="linenos">258</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-259"><a href="#DuckDB.Generator-259"><span class="linenos">259</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-260"><a href="#DuckDB.Generator-260"><span class="linenos">260</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-261"><a href="#DuckDB.Generator-261"><span class="linenos">261</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-262"><a href="#DuckDB.Generator-262"><span class="linenos">262</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-263"><a href="#DuckDB.Generator-263"><span class="linenos">263</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-264"><a href="#DuckDB.Generator-264"><span class="linenos">264</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-265"><a href="#DuckDB.Generator-265"><span class="linenos">265</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-266"><a href="#DuckDB.Generator-266"><span class="linenos">266</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-267"><a href="#DuckDB.Generator-267"><span class="linenos">267</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-268"><a href="#DuckDB.Generator-268"><span class="linenos">268</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-269"><a href="#DuckDB.Generator-269"><span class="linenos">269</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-270"><a href="#DuckDB.Generator-270"><span class="linenos">270</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-271"><a href="#DuckDB.Generator-271"><span class="linenos">271</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-272"><a href="#DuckDB.Generator-272"><span class="linenos">272</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-273"><a href="#DuckDB.Generator-273"><span class="linenos">273</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-274"><a href="#DuckDB.Generator-274"><span class="linenos">274</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-275"><a href="#DuckDB.Generator-275"><span class="linenos">275</span></a>
-</span><span id="DuckDB.Generator-276"><a href="#DuckDB.Generator-276"><span class="linenos">276</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-277"><a href="#DuckDB.Generator-277"><span class="linenos">277</span></a> <span 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-278"><a href="#DuckDB.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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-279"><a href="#DuckDB.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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-280"><a href="#DuckDB.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;REAL&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-281"><a href="#DuckDB.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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-282"><a href="#DuckDB.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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-283"><a href="#DuckDB.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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-284"><a href="#DuckDB.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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-285"><a href="#DuckDB.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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-286"><a href="#DuckDB.Generator-286"><span class="linenos">286</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-287"><a href="#DuckDB.Generator-287"><span class="linenos">287</span></a>
-</span><span id="DuckDB.Generator-288"><a href="#DuckDB.Generator-288"><span class="linenos">288</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-289"><a href="#DuckDB.Generator-289"><span class="linenos">289</span></a>
-</span><span id="DuckDB.Generator-290"><a href="#DuckDB.Generator-290"><span class="linenos">290</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-291"><a href="#DuckDB.Generator-291"><span class="linenos">291</span></a>
-</span><span id="DuckDB.Generator-292"><a href="#DuckDB.Generator-292"><span class="linenos">292</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-293"><a href="#DuckDB.Generator-293"><span class="linenos">293</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-294"><a href="#DuckDB.Generator-294"><span class="linenos">294</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-295"><a href="#DuckDB.Generator-295"><span class="linenos">295</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-296"><a href="#DuckDB.Generator-296"><span class="linenos">296</span></a>
-</span><span id="DuckDB.Generator-297"><a href="#DuckDB.Generator-297"><span class="linenos">297</span></a> <span class="k">def</span> <span class="nf">interval_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-298"><a href="#DuckDB.Generator-298"><span class="linenos">298</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB.Generator-299"><a href="#DuckDB.Generator-299"><span class="linenos">299</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="DuckDB.Generator-300"><a href="#DuckDB.Generator-300"><span class="linenos">300</span></a>
-</span><span id="DuckDB.Generator-301"><a href="#DuckDB.Generator-301"><span class="linenos">301</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-302"><a href="#DuckDB.Generator-302"><span class="linenos">302</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB.Generator-303"><a href="#DuckDB.Generator-303"><span class="linenos">303</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-304"><a href="#DuckDB.Generator-304"><span class="linenos">304</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="DuckDB.Generator-305"><a href="#DuckDB.Generator-305"><span class="linenos">305</span></a>
-</span><span id="DuckDB.Generator-306"><a href="#DuckDB.Generator-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-307"><a href="#DuckDB.Generator-307"><span class="linenos">307</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB.Generator-308"><a href="#DuckDB.Generator-308"><span class="linenos">308</span></a>
-</span><span id="DuckDB.Generator-309"><a href="#DuckDB.Generator-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-310"><a href="#DuckDB.Generator-310"><span class="linenos">310</span></a>
-</span><span id="DuckDB.Generator-311"><a href="#DuckDB.Generator-311"><span class="linenos">311</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-312"><a href="#DuckDB.Generator-312"><span class="linenos">312</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
-</span><span id="DuckDB.Generator-313"><a href="#DuckDB.Generator-313"><span class="linenos">313</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-314"><a href="#DuckDB.Generator-314"><span class="linenos">314</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator-215"><a href="#DuckDB.Generator-215"><span class="linenos">215</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-216"><a href="#DuckDB.Generator-216"><span class="linenos">216</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-217"><a href="#DuckDB.Generator-217"><span class="linenos">217</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-218"><a href="#DuckDB.Generator-218"><span class="linenos">218</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-219"><a href="#DuckDB.Generator-219"><span class="linenos">219</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="DuckDB.Generator-220"><a href="#DuckDB.Generator-220"><span class="linenos">220</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-221"><a href="#DuckDB.Generator-221"><span class="linenos">221</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-222"><a href="#DuckDB.Generator-222"><span class="linenos">222</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-223"><a href="#DuckDB.Generator-223"><span class="linenos">223</span></a>
+</span><span id="DuckDB.Generator-224"><a href="#DuckDB.Generator-224"><span class="linenos">224</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-225"><a href="#DuckDB.Generator-225"><span class="linenos">225</span></a> <span 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-226"><a href="#DuckDB.Generator-226"><span class="linenos">226</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-227"><a href="#DuckDB.Generator-227"><span class="linenos">227</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-228"><a href="#DuckDB.Generator-228"><span class="linenos">228</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-229"><a href="#DuckDB.Generator-229"><span class="linenos">229</span></a> <span class="k">else</span> <span class="n">inline_array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-230"><a href="#DuckDB.Generator-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="DuckDB.Generator-231"><a href="#DuckDB.Generator-231"><span class="linenos">231</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-232"><a href="#DuckDB.Generator-232"><span class="linenos">232</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-233"><a href="#DuckDB.Generator-233"><span class="linenos">233</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">func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-234"><a href="#DuckDB.Generator-234"><span class="linenos">234</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-235"><a href="#DuckDB.Generator-235"><span class="linenos">235</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-236"><a href="#DuckDB.Generator-236"><span class="linenos">236</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-237"><a href="#DuckDB.Generator-237"><span class="linenos">237</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-238"><a href="#DuckDB.Generator-238"><span class="linenos">238</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-239"><a href="#DuckDB.Generator-239"><span class="linenos">239</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-240"><a href="#DuckDB.Generator-240"><span class="linenos">240</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-241"><a href="#DuckDB.Generator-241"><span class="linenos">241</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-242"><a href="#DuckDB.Generator-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-243"><a href="#DuckDB.Generator-243"><span class="linenos">243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-244"><a href="#DuckDB.Generator-244"><span class="linenos">244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-245"><a href="#DuckDB.Generator-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-246"><a href="#DuckDB.Generator-246"><span class="linenos">246</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-247"><a href="#DuckDB.Generator-247"><span class="linenos">247</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;day&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DuckDB.Generator-248"><a href="#DuckDB.Generator-248"><span class="linenos">248</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-249"><a href="#DuckDB.Generator-249"><span class="linenos">249</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-250"><a href="#DuckDB.Generator-250"><span class="linenos">250</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-251"><a href="#DuckDB.Generator-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-252"><a href="#DuckDB.Generator-252"><span class="linenos">252</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-253"><a href="#DuckDB.Generator-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-254"><a href="#DuckDB.Generator-254"><span class="linenos">254</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-255"><a href="#DuckDB.Generator-255"><span class="linenos">255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-256"><a href="#DuckDB.Generator-256"><span class="linenos">256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-257"><a href="#DuckDB.Generator-257"><span class="linenos">257</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-258"><a href="#DuckDB.Generator-258"><span class="linenos">258</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-259"><a href="#DuckDB.Generator-259"><span class="linenos">259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-260"><a href="#DuckDB.Generator-260"><span class="linenos">260</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-261"><a href="#DuckDB.Generator-261"><span class="linenos">261</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-262"><a href="#DuckDB.Generator-262"><span class="linenos">262</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-263"><a href="#DuckDB.Generator-263"><span class="linenos">263</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-264"><a href="#DuckDB.Generator-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-265"><a href="#DuckDB.Generator-265"><span class="linenos">265</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-266"><a href="#DuckDB.Generator-266"><span class="linenos">266</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-267"><a href="#DuckDB.Generator-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-268"><a href="#DuckDB.Generator-268"><span class="linenos">268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-269"><a href="#DuckDB.Generator-269"><span class="linenos">269</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-270"><a href="#DuckDB.Generator-270"><span class="linenos">270</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-271"><a href="#DuckDB.Generator-271"><span class="linenos">271</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-272"><a href="#DuckDB.Generator-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-273"><a href="#DuckDB.Generator-273"><span class="linenos">273</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-274"><a href="#DuckDB.Generator-274"><span class="linenos">274</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-275"><a href="#DuckDB.Generator-275"><span class="linenos">275</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-276"><a href="#DuckDB.Generator-276"><span class="linenos">276</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-277"><a href="#DuckDB.Generator-277"><span class="linenos">277</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-278"><a href="#DuckDB.Generator-278"><span class="linenos">278</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-279"><a href="#DuckDB.Generator-279"><span class="linenos">279</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-280"><a href="#DuckDB.Generator-280"><span class="linenos">280</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-281"><a href="#DuckDB.Generator-281"><span class="linenos">281</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-282"><a href="#DuckDB.Generator-282"><span class="linenos">282</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-283"><a href="#DuckDB.Generator-283"><span class="linenos">283</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-284"><a href="#DuckDB.Generator-284"><span class="linenos">284</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-285"><a href="#DuckDB.Generator-285"><span class="linenos">285</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-286"><a href="#DuckDB.Generator-286"><span class="linenos">286</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-287"><a href="#DuckDB.Generator-287"><span class="linenos">287</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-288"><a href="#DuckDB.Generator-288"><span class="linenos">288</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-289"><a href="#DuckDB.Generator-289"><span class="linenos">289</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-290"><a href="#DuckDB.Generator-290"><span class="linenos">290</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-291"><a href="#DuckDB.Generator-291"><span class="linenos">291</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-292"><a href="#DuckDB.Generator-292"><span class="linenos">292</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-293"><a href="#DuckDB.Generator-293"><span class="linenos">293</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-294"><a href="#DuckDB.Generator-294"><span class="linenos">294</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-295"><a href="#DuckDB.Generator-295"><span class="linenos">295</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-296"><a href="#DuckDB.Generator-296"><span class="linenos">296</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-297"><a href="#DuckDB.Generator-297"><span class="linenos">297</span></a>
+</span><span id="DuckDB.Generator-298"><a href="#DuckDB.Generator-298"><span class="linenos">298</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-299"><a href="#DuckDB.Generator-299"><span class="linenos">299</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-300"><a href="#DuckDB.Generator-300"><span class="linenos">300</span></a> <span class="n">exp</span><span 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-301"><a href="#DuckDB.Generator-301"><span class="linenos">301</span></a> <span class="n">exp</span><span 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-302"><a href="#DuckDB.Generator-302"><span class="linenos">302</span></a> <span class="n">exp</span><span 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-303"><a href="#DuckDB.Generator-303"><span class="linenos">303</span></a> <span class="n">exp</span><span 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-304"><a href="#DuckDB.Generator-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-305"><a href="#DuckDB.Generator-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-306"><a href="#DuckDB.Generator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-307"><a href="#DuckDB.Generator-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-308"><a href="#DuckDB.Generator-308"><span class="linenos">308</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-309"><a href="#DuckDB.Generator-309"><span class="linenos">309</span></a>
+</span><span id="DuckDB.Generator-310"><a href="#DuckDB.Generator-310"><span class="linenos">310</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-311"><a href="#DuckDB.Generator-311"><span class="linenos">311</span></a>
+</span><span id="DuckDB.Generator-312"><a href="#DuckDB.Generator-312"><span class="linenos">312</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-313"><a href="#DuckDB.Generator-313"><span class="linenos">313</span></a>
+</span><span id="DuckDB.Generator-314"><a href="#DuckDB.Generator-314"><span class="linenos">314</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-315"><a href="#DuckDB.Generator-315"><span class="linenos">315</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-316"><a href="#DuckDB.Generator-316"><span class="linenos">316</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-317"><a href="#DuckDB.Generator-317"><span class="linenos">317</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-318"><a href="#DuckDB.Generator-318"><span class="linenos">318</span></a>
+</span><span id="DuckDB.Generator-319"><a href="#DuckDB.Generator-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">interval_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-320"><a href="#DuckDB.Generator-320"><span class="linenos">320</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB.Generator-321"><a href="#DuckDB.Generator-321"><span class="linenos">321</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="DuckDB.Generator-322"><a href="#DuckDB.Generator-322"><span class="linenos">322</span></a>
+</span><span id="DuckDB.Generator-323"><a href="#DuckDB.Generator-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-324"><a href="#DuckDB.Generator-324"><span class="linenos">324</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB.Generator-325"><a href="#DuckDB.Generator-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-326"><a href="#DuckDB.Generator-326"><span class="linenos">326</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator-327"><a href="#DuckDB.Generator-327"><span class="linenos">327</span></a>
+</span><span id="DuckDB.Generator-328"><a href="#DuckDB.Generator-328"><span class="linenos">328</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-329"><a href="#DuckDB.Generator-329"><span class="linenos">329</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB.Generator-330"><a href="#DuckDB.Generator-330"><span class="linenos">330</span></a>
+</span><span id="DuckDB.Generator-331"><a href="#DuckDB.Generator-331"><span class="linenos">331</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-332"><a href="#DuckDB.Generator-332"><span class="linenos">332</span></a>
+</span><span id="DuckDB.Generator-333"><a href="#DuckDB.Generator-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-334"><a href="#DuckDB.Generator-334"><span class="linenos">334</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
+</span><span id="DuckDB.Generator-335"><a href="#DuckDB.Generator-335"><span class="linenos">335</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-336"><a href="#DuckDB.Generator-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">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>
@@ -1703,11 +1778,23 @@ Default: True</li>
</div>
+ <div id="DuckDB.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#DuckDB.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="DuckDB.Generator.TRANSFORMS" class="classattr">
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="DuckDB.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _ts_or_ds_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function no_comment_column_constraint_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;: &lt;function _array_sort_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Properties">sqlglot.expressions.Properties</a>&#39;&gt;: &lt;function no_properties_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function regexp_replace_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _sort_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function _struct_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _ts_or_ds_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function no_comment_column_constraint_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;: &lt;function _array_sort_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Properties">sqlglot.expressions.Properties</a>&#39;&gt;: &lt;function no_properties_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function regexp_replace_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _sort_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function _struct_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function <a href="#DuckDB.Generator">DuckDB.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1758,7 +1845,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="DuckDB.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1778,19 +1865,19 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.interval_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.interval_sql-297"><a href="#DuckDB.Generator.interval_sql-297"><span class="linenos">297</span></a> <span class="k">def</span> <span class="nf">interval_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.interval_sql-298"><a href="#DuckDB.Generator.interval_sql-298"><span class="linenos">298</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB.Generator.interval_sql-299"><a href="#DuckDB.Generator.interval_sql-299"><span class="linenos">299</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="DuckDB.Generator.interval_sql-300"><a href="#DuckDB.Generator.interval_sql-300"><span class="linenos">300</span></a>
-</span><span id="DuckDB.Generator.interval_sql-301"><a href="#DuckDB.Generator.interval_sql-301"><span class="linenos">301</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.interval_sql-302"><a href="#DuckDB.Generator.interval_sql-302"><span class="linenos">302</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB.Generator.interval_sql-303"><a href="#DuckDB.Generator.interval_sql-303"><span class="linenos">303</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.interval_sql-304"><a href="#DuckDB.Generator.interval_sql-304"><span class="linenos">304</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="DuckDB.Generator.interval_sql-305"><a href="#DuckDB.Generator.interval_sql-305"><span class="linenos">305</span></a>
-</span><span id="DuckDB.Generator.interval_sql-306"><a href="#DuckDB.Generator.interval_sql-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.interval_sql-307"><a href="#DuckDB.Generator.interval_sql-307"><span class="linenos">307</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB.Generator.interval_sql-308"><a href="#DuckDB.Generator.interval_sql-308"><span class="linenos">308</span></a>
-</span><span id="DuckDB.Generator.interval_sql-309"><a href="#DuckDB.Generator.interval_sql-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.interval_sql-319"><a href="#DuckDB.Generator.interval_sql-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">interval_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.interval_sql-320"><a href="#DuckDB.Generator.interval_sql-320"><span class="linenos">320</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB.Generator.interval_sql-321"><a href="#DuckDB.Generator.interval_sql-321"><span class="linenos">321</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="DuckDB.Generator.interval_sql-322"><a href="#DuckDB.Generator.interval_sql-322"><span class="linenos">322</span></a>
+</span><span id="DuckDB.Generator.interval_sql-323"><a href="#DuckDB.Generator.interval_sql-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.interval_sql-324"><a href="#DuckDB.Generator.interval_sql-324"><span class="linenos">324</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB.Generator.interval_sql-325"><a href="#DuckDB.Generator.interval_sql-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.interval_sql-326"><a href="#DuckDB.Generator.interval_sql-326"><span class="linenos">326</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator.interval_sql-327"><a href="#DuckDB.Generator.interval_sql-327"><span class="linenos">327</span></a>
+</span><span id="DuckDB.Generator.interval_sql-328"><a href="#DuckDB.Generator.interval_sql-328"><span class="linenos">328</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.interval_sql-329"><a href="#DuckDB.Generator.interval_sql-329"><span class="linenos">329</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;day&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB.Generator.interval_sql-330"><a href="#DuckDB.Generator.interval_sql-330"><span class="linenos">330</span></a>
+</span><span id="DuckDB.Generator.interval_sql-331"><a href="#DuckDB.Generator.interval_sql-331"><span class="linenos">331</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>
@@ -1808,10 +1895,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-311"><a href="#DuckDB.Generator.tablesample_sql-311"><span class="linenos">311</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.tablesample_sql-312"><a href="#DuckDB.Generator.tablesample_sql-312"><span class="linenos">312</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
-</span><span id="DuckDB.Generator.tablesample_sql-313"><a href="#DuckDB.Generator.tablesample_sql-313"><span class="linenos">313</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.tablesample_sql-314"><a href="#DuckDB.Generator.tablesample_sql-314"><span class="linenos">314</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-333"><a href="#DuckDB.Generator.tablesample_sql-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.tablesample_sql-334"><a href="#DuckDB.Generator.tablesample_sql-334"><span class="linenos">334</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="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span>
+</span><span id="DuckDB.Generator.tablesample_sql-335"><a href="#DuckDB.Generator.tablesample_sql-335"><span class="linenos">335</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-336"><a href="#DuckDB.Generator.tablesample_sql-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">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>
@@ -1878,26 +1965,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.can_identify-253"><a href="#DuckDB.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="DuckDB.Generator.can_identify-254"><a href="#DuckDB.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.can_identify-255"><a href="#DuckDB.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="DuckDB.Generator.can_identify-256"><a href="#DuckDB.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="DuckDB.Generator.can_identify-257"><a href="#DuckDB.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="DuckDB.Generator.can_identify-258"><a href="#DuckDB.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="DuckDB.Generator.can_identify-259"><a href="#DuckDB.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="DuckDB.Generator.can_identify-260"><a href="#DuckDB.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="DuckDB.Generator.can_identify-261"><a href="#DuckDB.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="DuckDB.Generator.can_identify-262"><a href="#DuckDB.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="DuckDB.Generator.can_identify-263"><a href="#DuckDB.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="DuckDB.Generator.can_identify-264"><a href="#DuckDB.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="DuckDB.Generator.can_identify-265"><a href="#DuckDB.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="DuckDB.Generator.can_identify-266"><a href="#DuckDB.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.can_identify-267"><a href="#DuckDB.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="DuckDB.Generator.can_identify-268"><a href="#DuckDB.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="DuckDB.Generator.can_identify-269"><a href="#DuckDB.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.can_identify-270"><a href="#DuckDB.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.can_identify-256"><a href="#DuckDB.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="DuckDB.Generator.can_identify-257"><a href="#DuckDB.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.can_identify-258"><a href="#DuckDB.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="DuckDB.Generator.can_identify-259"><a href="#DuckDB.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="DuckDB.Generator.can_identify-260"><a href="#DuckDB.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="DuckDB.Generator.can_identify-261"><a href="#DuckDB.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="DuckDB.Generator.can_identify-262"><a href="#DuckDB.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="DuckDB.Generator.can_identify-263"><a href="#DuckDB.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="DuckDB.Generator.can_identify-264"><a href="#DuckDB.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="DuckDB.Generator.can_identify-265"><a href="#DuckDB.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="DuckDB.Generator.can_identify-266"><a href="#DuckDB.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="DuckDB.Generator.can_identify-267"><a href="#DuckDB.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="DuckDB.Generator.can_identify-268"><a href="#DuckDB.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DuckDB.Generator.can_identify-269"><a href="#DuckDB.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.can_identify-270"><a href="#DuckDB.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="DuckDB.Generator.can_identify-271"><a href="#DuckDB.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="DuckDB.Generator.can_identify-272"><a href="#DuckDB.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator.can_identify-272"><a href="#DuckDB.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.can_identify-273"><a href="#DuckDB.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.can_identify-274"><a href="#DuckDB.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="DuckDB.Generator.can_identify-275"><a href="#DuckDB.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1968,26 +2055,14 @@ Default: True</li>
</div>
- <div id="DuckDB.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#DuckDB.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="DuckDB.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="DuckDB.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#DuckDB.Tokenizer">sqlglot.dialects.duckdb.DuckDB.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DuckDB.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#DuckDB.Generator.TOKENIZER_CLASS"></a>
@@ -2088,7 +2163,9 @@ Default: True</li>
<dd id="DuckDB.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="DuckDB.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="DuckDB.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="DuckDB.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="DuckDB.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="DuckDB.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="DuckDB.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="DuckDB.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
<dd id="DuckDB.Generator.PARAMETER_TOKEN" class="variable"><a href="../generator.html#Generator.PARAMETER_TOKEN">PARAMETER_TOKEN</a></dd>
@@ -2131,6 +2208,7 @@ Default: True</li>
<dd id="DuckDB.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="DuckDB.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="DuckDB.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="DuckDB.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="DuckDB.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="DuckDB.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="DuckDB.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2149,7 +2227,7 @@ Default: True</li>
<dd id="DuckDB.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="DuckDB.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="DuckDB.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="DuckDB.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="DuckDB.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="DuckDB.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="DuckDB.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="DuckDB.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -2193,6 +2271,7 @@ Default: True</li>
<dd id="DuckDB.Generator.indextablehint_sql" class="function"><a href="../generator.html#Generator.indextablehint_sql">indextablehint_sql</a></dd>
<dd id="DuckDB.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="DuckDB.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="DuckDB.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="DuckDB.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="DuckDB.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="DuckDB.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -2201,6 +2280,8 @@ Default: True</li>
<dd id="DuckDB.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="DuckDB.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="DuckDB.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="DuckDB.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="DuckDB.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="DuckDB.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="DuckDB.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="DuckDB.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2359,6 +2440,8 @@ Default: True</li>
<dd id="DuckDB.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="DuckDB.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="DuckDB.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="DuckDB.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="DuckDB.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/hive.html b/docs/sqlglot/dialects/hive.html
index 235e093..cf1ef03 100644
--- a/docs/sqlglot/dialects/hive.html
+++ b/docs/sqlglot/dialects/hive.html
@@ -100,6 +100,9 @@
<a class="variable" href="#Hive.Parser.STRICT_CAST">STRICT_CAST</a>
</li>
<li>
+ <a class="variable" href="#Hive.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#Hive.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
@@ -109,6 +112,9 @@
<a class="variable" href="#Hive.Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Hive.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Hive.Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a>
</li>
<li>
@@ -157,6 +163,9 @@
<a class="variable" href="#Hive.Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a>
</li>
<li>
+ <a class="variable" href="#Hive.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#Hive.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -178,6 +187,9 @@
<a class="function" href="#Hive.Generator.datatype_sql">datatype_sql</a>
</li>
<li>
+ <a class="function" href="#Hive.Generator.version_sql">version_sql</a>
+ </li>
+ <li>
<a class="variable" href="#Hive.Generator.SELECT_KINDS">SELECT_KINDS</a>
</li>
<li>
@@ -208,10 +220,7 @@
<a class="variable" href="#Hive.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Hive.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Hive.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Hive.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Hive.Generator.BIT_START">BIT_START</a>
@@ -336,248 +345,248 @@
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">right_to_substring_sql</span><span class="p">,</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">var_map_sql</span><span class="p">,</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="p">)</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</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-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">parse_var_map</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</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-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="c1"># (FuncType, Multiplier)</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="n">DATE_DELTA_INTERVAL</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="s2">&quot;YEAR&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">,</span> <span class="mi">12</span><span class="p">),</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="s2">&quot;QUARTER&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;WEEK&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">),</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="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="n">TIME_DIFF_FACTOR</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 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-44"><a href="#L-44"><span class="linenos"> 44</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-45"><a href="#L-45"><span class="linenos"> 45</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-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="p">}</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="n">DIFF_MONTH_SWITCH</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MONTH&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-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">time_format</span><span class="p">,</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="p">)</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span 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-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">parse_var_map</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</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-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="c1"># (FuncType, Multiplier)</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="n">DATE_DELTA_INTERVAL</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="s2">&quot;YEAR&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">,</span> <span class="mi">12</span><span class="p">),</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;QUARTER&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;WEEK&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">),</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span> <span class="mi">1</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="n">TIME_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000&quot;</span><span class="p">,</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</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-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</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-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 class="n">DIFF_MONTH_SWITCH</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MONTH&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">def</span> <span class="nf">_add_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">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">func</span><span class="p">,</span> <span class="n">multiplier</span> <span class="o">=</span> <span class="n">DATE_DELTA_INTERVAL</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
-</span><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">expression</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-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">multiplier</span> <span class="o">*=</span> <span class="o">-</span><span class="mi">1</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">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">modified_increment</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="nb">int</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;expression&quot;</span><span class="p">))</span> <span class="o">*</span> <span class="n">multiplier</span><span class="p">)</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">modified_increment</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">multiplier</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">modified_increment</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span> <span class="c1"># type: ignore</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">this</span><span class="o">=</span><span class="n">modified_increment</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="n">multiplier</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><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">modified_increment</span><span class="p">)</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</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">_add_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">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">func</span><span class="p">,</span> <span class="n">multiplier</span> <span class="o">=</span> <span class="n">DATE_DELTA_INTERVAL</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span> <span class="mi">1</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="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">DateSub</span><span class="p">):</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">multiplier</span> <span class="o">*=</span> <span class="o">-</span><span class="mi">1</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">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">modified_increment</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="nb">int</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;expression&quot;</span><span class="p">))</span> <span class="o">*</span> <span class="n">multiplier</span><span class="p">)</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">modified_increment</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">if</span> <span class="n">multiplier</span> <span class="o">!=</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">modified_increment</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span> <span class="c1"># type: ignore</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">this</span><span class="o">=</span><span class="n">modified_increment</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="n">multiplier</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">modified_increment</span><span class="p">)</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="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">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">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="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-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">factor</span> <span class="o">=</span> <span class="n">TIME_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-75"><a href="#L-75"><span class="linenos"> 75</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-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">sec_diff</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="n">left</span><span class="si">}</span><span class="s2">) - UNIX_TIMESTAMP(</span><span class="si">{</span><span class="n">right</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sec_diff</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">&quot;</span> <span class="k">if</span> <span class="n">factor</span> <span class="k">else</span> <span class="n">sec_diff</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">sql_func</span> <span class="o">=</span> <span class="s2">&quot;MONTHS_BETWEEN&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="ow">in</span> <span class="n">DIFF_MONTH_SWITCH</span> <span class="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">_</span><span class="p">,</span> <span class="n">multiplier</span> <span class="o">=</span> <span class="n">DATE_DELTA_INTERVAL</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">multiplier_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; / </span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">multiplier</span> <span class="o">&gt;</span> <span class="mi">1</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">diff_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql_func</span><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="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
-</span><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;</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-87"><a href="#L-87"><span class="linenos"> 87</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">_date_diff_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">DateDiff</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="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-74"><a href="#L-74"><span class="linenos"> 74</span></a>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">factor</span> <span class="o">=</span> <span class="n">TIME_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-76"><a href="#L-76"><span class="linenos"> 76</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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">sec_diff</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="n">left</span><span class="si">}</span><span class="s2">) - UNIX_TIMESTAMP(</span><span class="si">{</span><span class="n">right</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">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sec_diff</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">&quot;</span> <span class="k">if</span> <span class="n">factor</span> <span class="k">else</span> <span class="n">sec_diff</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">sql_func</span> <span class="o">=</span> <span class="s2">&quot;MONTHS_BETWEEN&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="ow">in</span> <span class="n">DIFF_MONTH_SWITCH</span> <span class="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">_</span><span class="p">,</span> <span class="n">multiplier</span> <span class="o">=</span> <span class="n">DATE_DELTA_INTERVAL</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">multiplier_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; / </span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">multiplier</span> <span class="o">&gt;</span> <span class="mi">1</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">diff_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql_func</span><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="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&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;</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-88"><a href="#L-88"><span class="linenos"> 88</span></a>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="k">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-90"><a href="#L-90"><span class="linenos"> 90</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-91"><a href="#L-91"><span class="linenos"> 91</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="s2">&quot;json&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="c1"># Since FROM_JSON requires a nested type, we always wrap the json string with</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="c1"># an array to ensure that &quot;naked&quot; strings like &quot;&#39;a&#39;&quot; will be handled correctly</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">wrapped_json</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="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="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">)</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">from_json</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;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">wrapped_json</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;SCHEMA_OF_JSON&quot;</span><span class="p">,</span> <span class="n">wrapped_json</span><span class="p">))</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">to_json</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;TO_JSON&quot;</span><span class="p">,</span> <span class="n">from_json</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="c1"># This strips the [, ] delimiters of the dummy array printed by TO_JSON</span>
-</span><span id="L-100"><a href="#L-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;REGEXP_EXTRACT&quot;</span><span class="p">,</span> <span class="n">to_json</span><span class="p">,</span> <span class="s2">&quot;&#39;^.(.*).$&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;1&quot;</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="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-103"><a href="#L-103"><span class="linenos">103</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">_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-91"><a href="#L-91"><span class="linenos"> 91</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-92"><a href="#L-92"><span class="linenos"> 92</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="s2">&quot;json&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="c1"># Since FROM_JSON requires a nested type, we always wrap the json string with</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="c1"># an array to ensure that &quot;naked&quot; strings like &quot;&#39;a&#39;&quot; will be handled correctly</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">wrapped_json</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="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="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">]&quot;</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="n">from_json</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;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">wrapped_json</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;SCHEMA_OF_JSON&quot;</span><span class="p">,</span> <span class="n">wrapped_json</span><span class="p">))</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">to_json</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;TO_JSON&quot;</span><span class="p">,</span> <span class="n">from_json</span><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="c1"># This strips the [, ] delimiters of the dummy array printed by TO_JSON</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span> <span class="n">to_json</span><span class="p">,</span> <span class="s2">&quot;&#39;^.(.*).$&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;1&quot;</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">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-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">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-106"><a href="#L-106"><span class="linenos">106</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-107"><a href="#L-107"><span class="linenos">107</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-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</span></a>
+</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">_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-107"><a href="#L-107"><span class="linenos">107</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-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</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-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">_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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#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-113"><a href="#L-113"><span class="linenos">113</span></a>
+</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">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-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</span></a>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="k">def</span> <span class="nf">_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-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-117"><a href="#L-117"><span class="linenos">117</span></a>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="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-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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="s2">&quot;hive&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-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_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-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 DATE)&quot;</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="k">def</span> <span class="nf">_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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</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-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">_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-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</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">_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-129"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</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="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-132"><a href="#L-132"><span class="linenos">132</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-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;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-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">def</span> <span class="nf">_time_format</span><span class="p">(</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</span></a><span class="p">)</span> <span 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-135"><a href="#L-135"><span class="linenos">135</span></a>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a><span class="k">def</span> <span class="nf">_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">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-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">time_format</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">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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</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-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;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-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">_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-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">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-153"><a href="#L-153"><span class="linenos">153</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-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;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-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;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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</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 class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</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="c1"># https://spark.apache.org/docs/latest/sql-ref-identifier.html#description</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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><span id="L-158"><a href="#L-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="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="c1"># https://spark.apache.org/docs/latest/sql-ref-identifier.html#description</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">TIME_MAPPING</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="s2">&quot;y&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;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&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;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&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;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&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;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&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;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&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;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-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</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-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="n">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd&#39;&quot;</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd HH:mm:ss&#39;&quot;</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="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">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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</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-213"><a href="#L-213"><span class="linenos">213</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-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</span></a> <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">NUMERIC_LITERALS</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="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&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;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&quot;</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&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;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</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><span id="L-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;BASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-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">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">exp</span><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-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_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-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="p">[</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span 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-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="p">]</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">TIME_MAPPING</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="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;yyyy&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;YY&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;yy&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;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&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;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&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;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&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;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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</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-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</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-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><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</span></a>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">class</span> <span class="nc">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-193"><a href="#L-193"><span class="linenos">193</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-194"><a href="#L-194"><span class="linenos">194</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-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</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">KEYWORDS</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">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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;TIMESTAMP AS OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;VERSION AS OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-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><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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-218"><a href="#L-218"><span class="linenos">218</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-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="p">}</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">STRICT_CAST</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">SUPPORTS_USER_DEFINED_TYPES</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><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;BASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</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;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-232"><a href="#L-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="L-233"><a href="#L-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 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">exp</span><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;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-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><span id="L-243"><a href="#L-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 class="n">this</span><span class="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="o">-</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">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-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="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-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</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 class="n">this</span><span class="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="o">-</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">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-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="p">),</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="p">),</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="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-256"><a href="#L-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="L-257"><a href="#L-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="L-258"><a href="#L-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="L-259"><a href="#L-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="L-260"><a href="#L-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="L-261"><a href="#L-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="L-262"><a href="#L-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="L-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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">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">group</span><span class="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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="p">),</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="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-267"><a href="#L-267"><span class="linenos">267</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-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</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-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="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-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</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-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">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 class="n">group</span><span class="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-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;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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;STR_TO_MAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">(</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">pair_delim</span><span class="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="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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">key_value_delim</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="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-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="p">),</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</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-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;UNBASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
@@ -634,7 +643,7 @@
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="p">)</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>
</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a><span class="sd"> Spark (and most likely Hive) treats casts to CHAR(length) and VARCHAR(length) as casts to</span>
@@ -654,153 +663,174 @@
</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="sd"> Reference: https://spark.apache.org/docs/latest/sql-ref-datatypes.html</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</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="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</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">this</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">node</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="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-349"><a href="#L-349"><span class="linenos">349</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 class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;char&quot;</span><span class="p">,</span> <span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="p">)</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-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="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">node</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="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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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 class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;char&quot;</span><span class="p">,</span> <span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="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">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-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON TABLE&quot;</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-367"><a href="#L-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">TYPE_MAPPING</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">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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">exp</span><span 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-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">exp</span><span 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-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">exp</span><span 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="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">exp</span><span 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-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><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span 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-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="p">[</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</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-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="p">]</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="p">),</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">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-387"><a href="#L-387"><span class="linenos">387</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-388"><a href="#L-388"><span class="linenos">388</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-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</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-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</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-397"><a href="#L-397"><span class="linenos">397</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-398"><a href="#L-398"><span class="linenos">398</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-399"><a href="#L-399"><span class="linenos">399</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-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNBASE64&quot;</span><span class="p">),</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">,</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</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-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</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-409"><a href="#L-409"><span class="linenos">409</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-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;UNHEX&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;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-411"><a href="#L-411"><span class="linenos">411</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-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MONTHS_BETWEEN&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-413"><a href="#L-413"><span class="linenos">413</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-414"><a href="#L-414"><span class="linenos">414</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-415"><a href="#L-415"><span class="linenos">415</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-416"><a href="#L-416"><span class="linenos">416</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-417"><a href="#L-417"><span class="linenos">417</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-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-420"><a href="#L-420"><span class="linenos">420</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-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</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-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</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-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</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-428"><a href="#L-428"><span class="linenos">428</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-429"><a href="#L-429"><span class="linenos">429</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-430"><a href="#L-430"><span class="linenos">430</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-431"><a href="#L-431"><span class="linenos">431</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-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</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-434"><a href="#L-434"><span class="linenos">434</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-435"><a href="#L-435"><span class="linenos">435</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-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BASE64&quot;</span><span class="p">),</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-438"><a href="#L-438"><span class="linenos">438</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-439"><a href="#L-439"><span class="linenos">439</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-440"><a href="#L-440"><span class="linenos">440</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-441"><a href="#L-441"><span class="linenos">441</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-442"><a href="#L-442"><span class="linenos">442</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-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="p">),</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="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-445"><a href="#L-445"><span class="linenos">445</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-446"><a href="#L-446"><span class="linenos">446</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-447"><a href="#L-447"><span class="linenos">447</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-448"><a href="#L-448"><span class="linenos">448</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-449"><a href="#L-449"><span class="linenos">449</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-450"><a href="#L-450"><span class="linenos">450</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">national_sql</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;&quot;</span><span class="p">),</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <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">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</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-456"><a href="#L-456"><span class="linenos">456</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-457"><a href="#L-457"><span class="linenos">457</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-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="p">}</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="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">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</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-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</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-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="p">)</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</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-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">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;TBLPROPERTIES&quot;</span><span class="p">))</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</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-477"><a href="#L-477"><span class="linenos">477</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-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="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-480"><a href="#L-480"><span class="linenos">480</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-481"><a href="#L-481"><span class="linenos">481</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-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">size_expression</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">DataTypeSize</span><span class="p">)</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="p">)</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">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-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="n">this</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">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</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_conjunction</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="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">PARTITION_BY</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-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="k">else</span> <span class="p">[],</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">skip_order_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">SORT_BY</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">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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON TABLE&quot;</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">TYPE_MAPPING</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="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-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">exp</span><span 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-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">exp</span><span 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-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">exp</span><span 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-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">exp</span><span 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="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span 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-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="p">}</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="p">[</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</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-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="p">),</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">_property_sql</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">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FIRST&quot;</span><span class="p">),</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</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-407"><a href="#L-407"><span class="linenos">407</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-408"><a href="#L-408"><span class="linenos">408</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-409"><a href="#L-409"><span class="linenos">409</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-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</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-412"><a href="#L-412"><span class="linenos">412</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-413"><a href="#L-413"><span class="linenos">413</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-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNBASE64&quot;</span><span class="p">),</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</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-419"><a href="#L-419"><span class="linenos">419</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-420"><a href="#L-420"><span class="linenos">420</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-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</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-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;UNHEX&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;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-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MONTHS_BETWEEN&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-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">:</span> <span 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;&quot;</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;allow_null&quot;</span><span class="p">)</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">else</span> <span class="s2">&quot;NOT NULL&quot;</span><span class="p">,</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-433"><a href="#L-433"><span class="linenos">433</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-434"><a href="#L-434"><span class="linenos">434</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-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-437"><a href="#L-437"><span class="linenos">437</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-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</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-440"><a href="#L-440"><span class="linenos">440</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-441"><a href="#L-441"><span class="linenos">441</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-442"><a href="#L-442"><span class="linenos">442</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-443"><a href="#L-443"><span class="linenos">443</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-444"><a href="#L-444"><span class="linenos">444</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-445"><a href="#L-445"><span class="linenos">445</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-446"><a href="#L-446"><span class="linenos">446</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-447"><a href="#L-447"><span class="linenos">447</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-448"><a href="#L-448"><span class="linenos">448</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-449"><a href="#L-449"><span class="linenos">449</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-450"><a href="#L-450"><span class="linenos">450</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-451"><a href="#L-451"><span class="linenos">451</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-452"><a href="#L-452"><span class="linenos">452</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-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BASE64&quot;</span><span class="p">),</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-455"><a href="#L-455"><span class="linenos">455</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-456"><a href="#L-456"><span class="linenos">456</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-457"><a href="#L-457"><span class="linenos">457</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-458"><a href="#L-458"><span class="linenos">458</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-459"><a href="#L-459"><span class="linenos">459</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="s2">&quot;hive&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-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="p">),</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="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-462"><a href="#L-462"><span class="linenos">462</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-463"><a href="#L-463"><span class="linenos">463</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-464"><a href="#L-464"><span class="linenos">464</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-465"><a href="#L-465"><span class="linenos">465</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-466"><a href="#L-466"><span class="linenos">466</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-467"><a href="#L-467"><span class="linenos">467</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">national_sql</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;&quot;</span><span class="p">),</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="p">}</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</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-473"><a href="#L-473"><span class="linenos">473</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-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="p">}</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="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">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</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">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-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">func</span><span class="p">(</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="p">)</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">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-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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;TBLPROPERTIES&quot;</span><span class="p">))</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">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-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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-494"><a href="#L-494"><span class="linenos">494</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-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="p">):</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</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-497"><a href="#L-497"><span class="linenos">497</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-498"><a href="#L-498"><span class="linenos">498</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-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">size_expression</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">DataTypeParam</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">size_expression</span><span class="p">:</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="k">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-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">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</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">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;FOR &quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span></pre></div>
@@ -853,116 +883,124 @@
</div>
<a class="headerlink" href="#Hive"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive-159"><a href="#Hive-159"><span class="linenos">159</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-160"><a href="#Hive-160"><span class="linenos">160</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-161"><a href="#Hive-161"><span class="linenos">161</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-162"><a href="#Hive-162"><span class="linenos">162</span></a>
-</span><span id="Hive-163"><a href="#Hive-163"><span class="linenos">163</span></a> <span class="c1"># https://spark.apache.org/docs/latest/sql-ref-identifier.html#description</span>
-</span><span id="Hive-164"><a href="#Hive-164"><span class="linenos">164</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Hive-165"><a href="#Hive-165"><span class="linenos">165</span></a>
-</span><span id="Hive-166"><a href="#Hive-166"><span class="linenos">166</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-167"><a href="#Hive-167"><span class="linenos">167</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-168"><a href="#Hive-168"><span class="linenos">168</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-169"><a href="#Hive-169"><span class="linenos">169</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-170"><a href="#Hive-170"><span class="linenos">170</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-171"><a href="#Hive-171"><span class="linenos">171</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-172"><a href="#Hive-172"><span class="linenos">172</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-173"><a href="#Hive-173"><span class="linenos">173</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-174"><a href="#Hive-174"><span class="linenos">174</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-175"><a href="#Hive-175"><span class="linenos">175</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-176"><a href="#Hive-176"><span class="linenos">176</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-177"><a href="#Hive-177"><span class="linenos">177</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-178"><a href="#Hive-178"><span class="linenos">178</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-179"><a href="#Hive-179"><span class="linenos">179</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-180"><a href="#Hive-180"><span class="linenos">180</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-181"><a href="#Hive-181"><span class="linenos">181</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-182"><a href="#Hive-182"><span class="linenos">182</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-183"><a href="#Hive-183"><span class="linenos">183</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-184"><a href="#Hive-184"><span class="linenos">184</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-185"><a href="#Hive-185"><span class="linenos">185</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-186"><a href="#Hive-186"><span class="linenos">186</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-187"><a href="#Hive-187"><span class="linenos">187</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-188"><a href="#Hive-188"><span class="linenos">188</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-189"><a href="#Hive-189"><span class="linenos">189</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-190"><a href="#Hive-190"><span class="linenos">190</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-191"><a href="#Hive-191"><span class="linenos">191</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-192"><a href="#Hive-192"><span class="linenos">192</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-193"><a href="#Hive-193"><span class="linenos">193</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-194"><a href="#Hive-194"><span class="linenos">194</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-195"><a href="#Hive-195"><span class="linenos">195</span></a> <span class="p">}</span>
-</span><span id="Hive-196"><a href="#Hive-196"><span class="linenos">196</span></a>
-</span><span id="Hive-197"><a href="#Hive-197"><span class="linenos">197</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-198"><a href="#Hive-198"><span class="linenos">198</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-199"><a href="#Hive-199"><span class="linenos">199</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-200"><a href="#Hive-200"><span class="linenos">200</span></a>
-</span><span id="Hive-201"><a href="#Hive-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="Hive-202"><a href="#Hive-202"><span class="linenos">202</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-203"><a href="#Hive-203"><span class="linenos">203</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-204"><a href="#Hive-204"><span class="linenos">204</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-205"><a href="#Hive-205"><span class="linenos">205</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="Hive-206"><a href="#Hive-206"><span class="linenos">206</span></a>
-</span><span id="Hive-207"><a href="#Hive-207"><span class="linenos">207</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-208"><a href="#Hive-208"><span class="linenos">208</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-209"><a href="#Hive-209"><span class="linenos">209</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-210"><a href="#Hive-210"><span class="linenos">210</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-211"><a href="#Hive-211"><span class="linenos">211</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-212"><a href="#Hive-212"><span class="linenos">212</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-213"><a href="#Hive-213"><span class="linenos">213</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-214"><a href="#Hive-214"><span class="linenos">214</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-215"><a href="#Hive-215"><span class="linenos">215</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-216"><a href="#Hive-216"><span class="linenos">216</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="Hive-217"><a href="#Hive-217"><span class="linenos">217</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-218"><a href="#Hive-218"><span class="linenos">218</span></a> <span class="p">}</span>
-</span><span id="Hive-219"><a href="#Hive-219"><span class="linenos">219</span></a>
-</span><span id="Hive-220"><a href="#Hive-220"><span class="linenos">220</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-221"><a href="#Hive-221"><span class="linenos">221</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-222"><a href="#Hive-222"><span class="linenos">222</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-223"><a href="#Hive-223"><span class="linenos">223</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-224"><a href="#Hive-224"><span class="linenos">224</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-225"><a href="#Hive-225"><span class="linenos">225</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-226"><a href="#Hive-226"><span class="linenos">226</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-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><span id="Hive-229"><a href="#Hive-229"><span class="linenos">229</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-230"><a href="#Hive-230"><span class="linenos">230</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-231"><a href="#Hive-231"><span class="linenos">231</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-232"><a href="#Hive-232"><span class="linenos">232</span></a>
-</span><span id="Hive-233"><a href="#Hive-233"><span class="linenos">233</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-234"><a href="#Hive-234"><span class="linenos">234</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Hive-235"><a href="#Hive-235"><span class="linenos">235</span></a> <span class="s2">&quot;BASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-236"><a href="#Hive-236"><span class="linenos">236</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-237"><a href="#Hive-237"><span class="linenos">237</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-238"><a href="#Hive-238"><span class="linenos">238</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-239"><a href="#Hive-239"><span class="linenos">239</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">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">exp</span><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-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_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-242"><a href="#Hive-242"><span class="linenos">242</span></a> <span class="p">[</span>
-</span><span id="Hive-243"><a href="#Hive-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">this</span><span class="o">=</span><span class="n">seq_get</span><span 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-244"><a href="#Hive-244"><span class="linenos">244</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-245"><a href="#Hive-245"><span class="linenos">245</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive-151"><a href="#Hive-151"><span class="linenos">151</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-152"><a href="#Hive-152"><span class="linenos">152</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-153"><a href="#Hive-153"><span class="linenos">153</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-154"><a href="#Hive-154"><span class="linenos">154</span></a>
+</span><span id="Hive-155"><a href="#Hive-155"><span class="linenos">155</span></a> <span class="c1"># https://spark.apache.org/docs/latest/sql-ref-identifier.html#description</span>
+</span><span id="Hive-156"><a href="#Hive-156"><span class="linenos">156</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Hive-157"><a href="#Hive-157"><span class="linenos">157</span></a>
+</span><span id="Hive-158"><a href="#Hive-158"><span class="linenos">158</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-159"><a href="#Hive-159"><span class="linenos">159</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-160"><a href="#Hive-160"><span class="linenos">160</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-161"><a href="#Hive-161"><span class="linenos">161</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-162"><a href="#Hive-162"><span class="linenos">162</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-163"><a href="#Hive-163"><span class="linenos">163</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-164"><a href="#Hive-164"><span class="linenos">164</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-165"><a href="#Hive-165"><span class="linenos">165</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-166"><a href="#Hive-166"><span class="linenos">166</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-167"><a href="#Hive-167"><span class="linenos">167</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-168"><a href="#Hive-168"><span class="linenos">168</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-169"><a href="#Hive-169"><span class="linenos">169</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-170"><a href="#Hive-170"><span class="linenos">170</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-171"><a href="#Hive-171"><span class="linenos">171</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-172"><a href="#Hive-172"><span class="linenos">172</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-173"><a href="#Hive-173"><span class="linenos">173</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-174"><a href="#Hive-174"><span class="linenos">174</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-175"><a href="#Hive-175"><span class="linenos">175</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-176"><a href="#Hive-176"><span class="linenos">176</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-177"><a href="#Hive-177"><span class="linenos">177</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-178"><a href="#Hive-178"><span class="linenos">178</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-179"><a href="#Hive-179"><span class="linenos">179</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-180"><a href="#Hive-180"><span class="linenos">180</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-181"><a href="#Hive-181"><span class="linenos">181</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-182"><a href="#Hive-182"><span class="linenos">182</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-183"><a href="#Hive-183"><span class="linenos">183</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-184"><a href="#Hive-184"><span class="linenos">184</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-185"><a href="#Hive-185"><span class="linenos">185</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-186"><a href="#Hive-186"><span class="linenos">186</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-187"><a href="#Hive-187"><span class="linenos">187</span></a> <span class="p">}</span>
+</span><span id="Hive-188"><a href="#Hive-188"><span class="linenos">188</span></a>
+</span><span id="Hive-189"><a href="#Hive-189"><span class="linenos">189</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-190"><a href="#Hive-190"><span class="linenos">190</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-191"><a href="#Hive-191"><span class="linenos">191</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-192"><a href="#Hive-192"><span class="linenos">192</span></a>
+</span><span id="Hive-193"><a href="#Hive-193"><span class="linenos">193</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-194"><a href="#Hive-194"><span class="linenos">194</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-195"><a href="#Hive-195"><span class="linenos">195</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-196"><a href="#Hive-196"><span class="linenos">196</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-197"><a href="#Hive-197"><span class="linenos">197</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="Hive-198"><a href="#Hive-198"><span class="linenos">198</span></a>
+</span><span id="Hive-199"><a href="#Hive-199"><span class="linenos">199</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-200"><a href="#Hive-200"><span class="linenos">200</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-201"><a href="#Hive-201"><span class="linenos">201</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-202"><a href="#Hive-202"><span class="linenos">202</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-203"><a href="#Hive-203"><span class="linenos">203</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-204"><a href="#Hive-204"><span class="linenos">204</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-205"><a href="#Hive-205"><span class="linenos">205</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-206"><a href="#Hive-206"><span class="linenos">206</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-207"><a href="#Hive-207"><span class="linenos">207</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-208"><a href="#Hive-208"><span class="linenos">208</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="Hive-209"><a href="#Hive-209"><span class="linenos">209</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-210"><a href="#Hive-210"><span class="linenos">210</span></a> <span class="s2">&quot;TIMESTAMP AS OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Hive-211"><a href="#Hive-211"><span class="linenos">211</span></a> <span class="s2">&quot;VERSION AS OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Hive-212"><a href="#Hive-212"><span class="linenos">212</span></a> <span class="p">}</span>
+</span><span id="Hive-213"><a href="#Hive-213"><span class="linenos">213</span></a>
+</span><span id="Hive-214"><a href="#Hive-214"><span class="linenos">214</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-215"><a href="#Hive-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="Hive-216"><a href="#Hive-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="Hive-217"><a href="#Hive-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="Hive-218"><a href="#Hive-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="Hive-219"><a href="#Hive-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="Hive-220"><a href="#Hive-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="Hive-221"><a href="#Hive-221"><span class="linenos">221</span></a> <span class="p">}</span>
+</span><span id="Hive-222"><a href="#Hive-222"><span class="linenos">222</span></a>
+</span><span id="Hive-223"><a href="#Hive-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="Hive-224"><a href="#Hive-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="Hive-225"><a href="#Hive-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="Hive-226"><a href="#Hive-226"><span class="linenos">226</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</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><span id="Hive-230"><a href="#Hive-230"><span class="linenos">230</span></a> <span class="s2">&quot;BASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</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;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-233"><a href="#Hive-233"><span class="linenos">233</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-234"><a href="#Hive-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">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">exp</span><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;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-243"><a href="#Hive-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><span id="Hive-244"><a href="#Hive-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">Mul</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="o">-</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">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-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="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-248"><a href="#Hive-248"><span class="linenos">248</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-249"><a href="#Hive-249"><span class="linenos">249</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 class="n">this</span><span class="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="o">-</span><span class="mi">1</span><span class="p">)),</span>
-</span><span id="Hive-250"><a href="#Hive-250"><span class="linenos">250</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-251"><a href="#Hive-251"><span class="linenos">251</span></a> <span class="p">),</span>
-</span><span id="Hive-252"><a href="#Hive-252"><span class="linenos">252</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-253"><a href="#Hive-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">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-254"><a href="#Hive-254"><span class="linenos">254</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-255"><a href="#Hive-255"><span class="linenos">255</span></a> <span class="p">),</span>
-</span><span id="Hive-256"><a href="#Hive-256"><span class="linenos">256</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-257"><a href="#Hive-257"><span class="linenos">257</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-258"><a href="#Hive-258"><span class="linenos">258</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-259"><a href="#Hive-259"><span class="linenos">259</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-260"><a href="#Hive-260"><span class="linenos">260</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-261"><a href="#Hive-261"><span class="linenos">261</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-262"><a href="#Hive-262"><span class="linenos">262</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-263"><a href="#Hive-263"><span class="linenos">263</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-264"><a href="#Hive-264"><span class="linenos">264</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="Hive-265"><a href="#Hive-265"><span class="linenos">265</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">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">group</span><span class="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="Hive-266"><a href="#Hive-266"><span class="linenos">266</span></a> <span class="p">),</span>
-</span><span id="Hive-267"><a href="#Hive-267"><span class="linenos">267</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-268"><a href="#Hive-268"><span class="linenos">268</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-247"><a href="#Hive-247"><span class="linenos">247</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-248"><a href="#Hive-248"><span class="linenos">248</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-249"><a href="#Hive-249"><span class="linenos">249</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-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="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-252"><a href="#Hive-252"><span class="linenos">252</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-253"><a href="#Hive-253"><span class="linenos">253</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-254"><a href="#Hive-254"><span class="linenos">254</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-255"><a href="#Hive-255"><span class="linenos">255</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-256"><a href="#Hive-256"><span class="linenos">256</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-257"><a href="#Hive-257"><span class="linenos">257</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-258"><a href="#Hive-258"><span class="linenos">258</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-259"><a href="#Hive-259"><span class="linenos">259</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="Hive-260"><a href="#Hive-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">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 class="n">group</span><span class="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="Hive-261"><a href="#Hive-261"><span class="linenos">261</span></a> <span class="p">),</span>
+</span><span id="Hive-262"><a href="#Hive-262"><span class="linenos">262</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-263"><a href="#Hive-263"><span class="linenos">263</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-264"><a href="#Hive-264"><span class="linenos">264</span></a> <span class="s2">&quot;STR_TO_MAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">(</span>
+</span><span id="Hive-265"><a href="#Hive-265"><span class="linenos">265</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-266"><a href="#Hive-266"><span class="linenos">266</span></a> <span class="n">pair_delim</span><span class="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="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="Hive-267"><a href="#Hive-267"><span class="linenos">267</span></a> <span class="n">key_value_delim</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="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="Hive-268"><a href="#Hive-268"><span class="linenos">268</span></a> <span class="p">),</span>
</span><span id="Hive-269"><a href="#Hive-269"><span class="linenos">269</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-270"><a href="#Hive-270"><span class="linenos">270</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-271"><a href="#Hive-271"><span class="linenos">271</span></a> <span class="s2">&quot;UNBASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
@@ -1019,7 +1057,7 @@
</span><span id="Hive-322"><a href="#Hive-322"><span class="linenos">322</span></a> <span class="p">)</span>
</span><span id="Hive-323"><a href="#Hive-323"><span class="linenos">323</span></a>
</span><span id="Hive-324"><a href="#Hive-324"><span class="linenos">324</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Hive-325"><a href="#Hive-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-325"><a href="#Hive-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Hive-326"><a href="#Hive-326"><span class="linenos">326</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Hive-327"><a href="#Hive-327"><span class="linenos">327</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Hive-328"><a href="#Hive-328"><span class="linenos">328</span></a><span class="sd"> Spark (and most likely Hive) treats casts to CHAR(length) and VARCHAR(length) as casts to</span>
@@ -1039,153 +1077,174 @@
</span><span id="Hive-342"><a href="#Hive-342"><span class="linenos">342</span></a>
</span><span id="Hive-343"><a href="#Hive-343"><span class="linenos">343</span></a><span class="sd"> Reference: https://spark.apache.org/docs/latest/sql-ref-datatypes.html</span>
</span><span id="Hive-344"><a href="#Hive-344"><span class="linenos">344</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Hive-345"><a href="#Hive-345"><span class="linenos">345</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Hive-346"><a href="#Hive-346"><span class="linenos">346</span></a>
-</span><span id="Hive-347"><a href="#Hive-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="Hive-348"><a href="#Hive-348"><span class="linenos">348</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Hive-349"><a href="#Hive-349"><span class="linenos">349</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">node</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="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-350"><a href="#Hive-350"><span class="linenos">350</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 class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;char&quot;</span><span class="p">,</span> <span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="Hive-351"><a href="#Hive-351"><span class="linenos">351</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Hive-352"><a href="#Hive-352"><span class="linenos">352</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Hive-353"><a href="#Hive-353"><span class="linenos">353</span></a> <span class="p">)</span>
-</span><span id="Hive-354"><a href="#Hive-354"><span class="linenos">354</span></a>
-</span><span id="Hive-355"><a href="#Hive-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Hive-345"><a href="#Hive-345"><span class="linenos">345</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Hive-346"><a href="#Hive-346"><span class="linenos">346</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="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="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="Hive-350"><a href="#Hive-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Hive-351"><a href="#Hive-351"><span class="linenos">351</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">node</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="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-352"><a href="#Hive-352"><span class="linenos">352</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 class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;char&quot;</span><span class="p">,</span> <span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="Hive-353"><a href="#Hive-353"><span class="linenos">353</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Hive-354"><a href="#Hive-354"><span class="linenos">354</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</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">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-358"><a href="#Hive-358"><span class="linenos">358</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="Hive-359"><a href="#Hive-359"><span class="linenos">359</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-360"><a href="#Hive-360"><span class="linenos">360</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-361"><a href="#Hive-361"><span class="linenos">361</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-362"><a href="#Hive-362"><span class="linenos">362</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-363"><a href="#Hive-363"><span class="linenos">363</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-364"><a href="#Hive-364"><span class="linenos">364</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON TABLE&quot;</span>
-</span><span id="Hive-365"><a href="#Hive-365"><span class="linenos">365</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-366"><a href="#Hive-366"><span class="linenos">366</span></a>
-</span><span id="Hive-367"><a href="#Hive-367"><span class="linenos">367</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-368"><a href="#Hive-368"><span class="linenos">368</span></a> <span 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="Hive-369"><a href="#Hive-369"><span class="linenos">369</span></a> <span class="n">exp</span><span 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-370"><a href="#Hive-370"><span class="linenos">370</span></a> <span class="n">exp</span><span 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-371"><a href="#Hive-371"><span class="linenos">371</span></a> <span class="n">exp</span><span 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-372"><a href="#Hive-372"><span class="linenos">372</span></a> <span class="n">exp</span><span 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="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Hive-373"><a href="#Hive-373"><span class="linenos">373</span></a> <span class="n">exp</span><span 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-374"><a href="#Hive-374"><span class="linenos">374</span></a> <span class="n">exp</span><span 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-375"><a href="#Hive-375"><span class="linenos">375</span></a> <span class="p">}</span>
-</span><span id="Hive-376"><a href="#Hive-376"><span class="linenos">376</span></a>
-</span><span id="Hive-377"><a href="#Hive-377"><span class="linenos">377</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-378"><a href="#Hive-378"><span class="linenos">378</span></a> <span 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="Hive-379"><a href="#Hive-379"><span class="linenos">379</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-380"><a href="#Hive-380"><span class="linenos">380</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-381"><a href="#Hive-381"><span class="linenos">381</span></a> <span class="p">[</span>
-</span><span id="Hive-382"><a href="#Hive-382"><span class="linenos">382</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-383"><a href="#Hive-383"><span class="linenos">383</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-384"><a href="#Hive-384"><span class="linenos">384</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-385"><a href="#Hive-385"><span class="linenos">385</span></a> <span class="p">]</span>
-</span><span id="Hive-386"><a href="#Hive-386"><span class="linenos">386</span></a> <span class="p">),</span>
-</span><span id="Hive-387"><a href="#Hive-387"><span class="linenos">387</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-388"><a href="#Hive-388"><span class="linenos">388</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-389"><a href="#Hive-389"><span class="linenos">389</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-390"><a href="#Hive-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Hive-391"><a href="#Hive-391"><span class="linenos">391</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-392"><a href="#Hive-392"><span class="linenos">392</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-393"><a href="#Hive-393"><span class="linenos">393</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-394"><a href="#Hive-394"><span class="linenos">394</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-395"><a href="#Hive-395"><span class="linenos">395</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-396"><a href="#Hive-396"><span class="linenos">396</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-397"><a href="#Hive-397"><span class="linenos">397</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-398"><a href="#Hive-398"><span class="linenos">398</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-399"><a href="#Hive-399"><span class="linenos">399</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-400"><a href="#Hive-400"><span class="linenos">400</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-401"><a href="#Hive-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNBASE64&quot;</span><span class="p">),</span>
-</span><span id="Hive-402"><a href="#Hive-402"><span class="linenos">402</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-403"><a href="#Hive-403"><span class="linenos">403</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-404"><a href="#Hive-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
-</span><span id="Hive-405"><a href="#Hive-405"><span class="linenos">405</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-406"><a href="#Hive-406"><span class="linenos">406</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-407"><a href="#Hive-407"><span class="linenos">407</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-408"><a href="#Hive-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="Hive-409"><a href="#Hive-409"><span class="linenos">409</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-410"><a href="#Hive-410"><span class="linenos">410</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-411"><a href="#Hive-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;UNHEX&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;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="Hive-412"><a href="#Hive-412"><span class="linenos">412</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-413"><a href="#Hive-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MONTHS_BETWEEN&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="Hive-414"><a href="#Hive-414"><span class="linenos">414</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-415"><a href="#Hive-415"><span class="linenos">415</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-416"><a href="#Hive-416"><span class="linenos">416</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-417"><a href="#Hive-417"><span class="linenos">417</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-418"><a href="#Hive-418"><span class="linenos">418</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="Hive-419"><a href="#Hive-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="Hive-420"><a href="#Hive-420"><span class="linenos">420</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-421"><a href="#Hive-421"><span class="linenos">421</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-422"><a href="#Hive-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="Hive-423"><a href="#Hive-423"><span class="linenos">423</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-424"><a href="#Hive-424"><span class="linenos">424</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-425"><a href="#Hive-425"><span class="linenos">425</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-426"><a href="#Hive-426"><span class="linenos">426</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-427"><a href="#Hive-427"><span class="linenos">427</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-428"><a href="#Hive-428"><span class="linenos">428</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-429"><a href="#Hive-429"><span class="linenos">429</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-430"><a href="#Hive-430"><span class="linenos">430</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-431"><a href="#Hive-431"><span class="linenos">431</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-432"><a href="#Hive-432"><span class="linenos">432</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-433"><a href="#Hive-433"><span class="linenos">433</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-434"><a href="#Hive-434"><span class="linenos">434</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-435"><a href="#Hive-435"><span class="linenos">435</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-436"><a href="#Hive-436"><span class="linenos">436</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-437"><a href="#Hive-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BASE64&quot;</span><span class="p">),</span>
-</span><span id="Hive-438"><a href="#Hive-438"><span class="linenos">438</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-439"><a href="#Hive-439"><span class="linenos">439</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-440"><a href="#Hive-440"><span class="linenos">440</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-441"><a href="#Hive-441"><span class="linenos">441</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-442"><a href="#Hive-442"><span class="linenos">442</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-443"><a href="#Hive-443"><span class="linenos">443</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-444"><a href="#Hive-444"><span class="linenos">444</span></a> <span class="p">),</span>
-</span><span id="Hive-445"><a href="#Hive-445"><span class="linenos">445</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-446"><a href="#Hive-446"><span class="linenos">446</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-447"><a href="#Hive-447"><span class="linenos">447</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-448"><a href="#Hive-448"><span class="linenos">448</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-449"><a href="#Hive-449"><span class="linenos">449</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-450"><a href="#Hive-450"><span class="linenos">450</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-451"><a href="#Hive-451"><span class="linenos">451</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">national_sql</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;&quot;</span><span class="p">),</span>
-</span><span id="Hive-452"><a href="#Hive-452"><span class="linenos">452</span></a> <span class="p">}</span>
-</span><span id="Hive-453"><a href="#Hive-453"><span class="linenos">453</span></a>
-</span><span id="Hive-454"><a href="#Hive-454"><span class="linenos">454</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-455"><a href="#Hive-455"><span class="linenos">455</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Hive-456"><a href="#Hive-456"><span class="linenos">456</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-457"><a href="#Hive-457"><span class="linenos">457</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-458"><a href="#Hive-458"><span class="linenos">458</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-459"><a href="#Hive-459"><span class="linenos">459</span></a> <span class="p">}</span>
-</span><span id="Hive-460"><a href="#Hive-460"><span class="linenos">460</span></a>
-</span><span id="Hive-461"><a href="#Hive-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Hive-462"><a href="#Hive-462"><span class="linenos">462</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
-</span><span id="Hive-463"><a href="#Hive-463"><span class="linenos">463</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Hive-464"><a href="#Hive-464"><span class="linenos">464</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Hive-465"><a href="#Hive-465"><span class="linenos">465</span></a>
-</span><span id="Hive-466"><a href="#Hive-466"><span class="linenos">466</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-467"><a href="#Hive-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Hive-468"><a href="#Hive-468"><span class="linenos">468</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="Hive-469"><a href="#Hive-469"><span class="linenos">469</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-470"><a href="#Hive-470"><span class="linenos">470</span></a> <span class="p">)</span>
-</span><span id="Hive-471"><a href="#Hive-471"><span class="linenos">471</span></a>
-</span><span id="Hive-472"><a href="#Hive-472"><span class="linenos">472</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-473"><a href="#Hive-473"><span class="linenos">473</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;TBLPROPERTIES&quot;</span><span class="p">))</span>
-</span><span id="Hive-474"><a href="#Hive-474"><span class="linenos">474</span></a>
-</span><span id="Hive-475"><a href="#Hive-475"><span class="linenos">475</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-476"><a href="#Hive-476"><span class="linenos">476</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Hive-477"><a href="#Hive-477"><span class="linenos">477</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-478"><a href="#Hive-478"><span class="linenos">478</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-479"><a href="#Hive-479"><span class="linenos">479</span></a> <span class="p">):</span>
-</span><span id="Hive-480"><a href="#Hive-480"><span class="linenos">480</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-481"><a href="#Hive-481"><span class="linenos">481</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-482"><a href="#Hive-482"><span class="linenos">482</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-483"><a href="#Hive-483"><span class="linenos">483</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
-</span><span id="Hive-484"><a href="#Hive-484"><span class="linenos">484</span></a> <span class="n">size_expression</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">DataTypeSize</span><span class="p">)</span>
-</span><span id="Hive-485"><a href="#Hive-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
-</span><span id="Hive-486"><a href="#Hive-486"><span class="linenos">486</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Hive-487"><a href="#Hive-487"><span class="linenos">487</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Hive-488"><a href="#Hive-488"><span class="linenos">488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
-</span><span id="Hive-489"><a href="#Hive-489"><span class="linenos">489</span></a> <span class="p">)</span>
-</span><span id="Hive-490"><a href="#Hive-490"><span class="linenos">490</span></a>
-</span><span id="Hive-491"><a href="#Hive-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Hive-357"><a href="#Hive-357"><span class="linenos">357</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Hive-358"><a href="#Hive-358"><span class="linenos">358</span></a>
+</span><span id="Hive-359"><a href="#Hive-359"><span class="linenos">359</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="Hive-360"><a href="#Hive-360"><span class="linenos">360</span></a> <span class="bp">self</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 class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Hive-362"><a href="#Hive-362"><span class="linenos">362</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Hive-363"><a href="#Hive-363"><span class="linenos">363</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_conjunction</span><span class="p">)</span>
+</span><span id="Hive-364"><a href="#Hive-364"><span class="linenos">364</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">PARTITION_BY</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="Hive-365"><a href="#Hive-365"><span class="linenos">365</span></a> <span class="k">else</span> <span class="p">[],</span>
+</span><span id="Hive-366"><a href="#Hive-366"><span class="linenos">366</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">skip_order_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">SORT_BY</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">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-370"><a href="#Hive-370"><span class="linenos">370</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="Hive-371"><a href="#Hive-371"><span class="linenos">371</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-372"><a href="#Hive-372"><span class="linenos">372</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-373"><a href="#Hive-373"><span class="linenos">373</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-374"><a href="#Hive-374"><span class="linenos">374</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-375"><a href="#Hive-375"><span class="linenos">375</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-376"><a href="#Hive-376"><span class="linenos">376</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON TABLE&quot;</span>
+</span><span id="Hive-377"><a href="#Hive-377"><span class="linenos">377</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-378"><a href="#Hive-378"><span class="linenos">378</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-379"><a href="#Hive-379"><span class="linenos">379</span></a>
+</span><span id="Hive-380"><a href="#Hive-380"><span class="linenos">380</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-381"><a href="#Hive-381"><span class="linenos">381</span></a> <span 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="Hive-382"><a href="#Hive-382"><span class="linenos">382</span></a> <span class="n">exp</span><span 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-383"><a href="#Hive-383"><span class="linenos">383</span></a> <span class="n">exp</span><span 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-384"><a href="#Hive-384"><span class="linenos">384</span></a> <span class="n">exp</span><span 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-385"><a href="#Hive-385"><span class="linenos">385</span></a> <span class="n">exp</span><span 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="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Hive-386"><a href="#Hive-386"><span class="linenos">386</span></a> <span class="n">exp</span><span 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-387"><a href="#Hive-387"><span class="linenos">387</span></a> <span class="n">exp</span><span 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-388"><a href="#Hive-388"><span class="linenos">388</span></a> <span class="p">}</span>
+</span><span id="Hive-389"><a href="#Hive-389"><span class="linenos">389</span></a>
+</span><span id="Hive-390"><a href="#Hive-390"><span class="linenos">390</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-391"><a href="#Hive-391"><span class="linenos">391</span></a> <span 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="Hive-392"><a href="#Hive-392"><span class="linenos">392</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-393"><a href="#Hive-393"><span class="linenos">393</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-394"><a href="#Hive-394"><span class="linenos">394</span></a> <span class="p">[</span>
+</span><span id="Hive-395"><a href="#Hive-395"><span class="linenos">395</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-396"><a href="#Hive-396"><span class="linenos">396</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-397"><a href="#Hive-397"><span class="linenos">397</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-398"><a href="#Hive-398"><span class="linenos">398</span></a> <span class="p">]</span>
+</span><span id="Hive-399"><a href="#Hive-399"><span class="linenos">399</span></a> <span class="p">),</span>
+</span><span id="Hive-400"><a href="#Hive-400"><span class="linenos">400</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-401"><a href="#Hive-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FIRST&quot;</span><span class="p">),</span>
+</span><span id="Hive-402"><a href="#Hive-402"><span class="linenos">402</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-403"><a href="#Hive-403"><span class="linenos">403</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-404"><a href="#Hive-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Hive-405"><a href="#Hive-405"><span class="linenos">405</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-406"><a href="#Hive-406"><span class="linenos">406</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-407"><a href="#Hive-407"><span class="linenos">407</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-408"><a href="#Hive-408"><span class="linenos">408</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-409"><a href="#Hive-409"><span class="linenos">409</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-410"><a href="#Hive-410"><span class="linenos">410</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-411"><a href="#Hive-411"><span class="linenos">411</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-412"><a href="#Hive-412"><span class="linenos">412</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-413"><a href="#Hive-413"><span class="linenos">413</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-414"><a href="#Hive-414"><span class="linenos">414</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-415"><a href="#Hive-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNBASE64&quot;</span><span class="p">),</span>
+</span><span id="Hive-416"><a href="#Hive-416"><span class="linenos">416</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-417"><a href="#Hive-417"><span class="linenos">417</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-418"><a href="#Hive-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="Hive-419"><a href="#Hive-419"><span class="linenos">419</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-420"><a href="#Hive-420"><span class="linenos">420</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-421"><a href="#Hive-421"><span class="linenos">421</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-422"><a href="#Hive-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="Hive-423"><a href="#Hive-423"><span class="linenos">423</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-424"><a href="#Hive-424"><span class="linenos">424</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-425"><a href="#Hive-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;UNHEX&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;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="Hive-426"><a href="#Hive-426"><span class="linenos">426</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-427"><a href="#Hive-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MONTHS_BETWEEN&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="Hive-428"><a href="#Hive-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">:</span> <span 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;&quot;</span>
+</span><span id="Hive-429"><a href="#Hive-429"><span class="linenos">429</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;allow_null&quot;</span><span class="p">)</span>
+</span><span id="Hive-430"><a href="#Hive-430"><span class="linenos">430</span></a> <span class="k">else</span> <span class="s2">&quot;NOT NULL&quot;</span><span class="p">,</span>
+</span><span id="Hive-431"><a href="#Hive-431"><span class="linenos">431</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-432"><a href="#Hive-432"><span class="linenos">432</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-433"><a href="#Hive-433"><span class="linenos">433</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-434"><a href="#Hive-434"><span class="linenos">434</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-435"><a href="#Hive-435"><span class="linenos">435</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="Hive-436"><a href="#Hive-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="Hive-437"><a href="#Hive-437"><span class="linenos">437</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-438"><a href="#Hive-438"><span class="linenos">438</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-439"><a href="#Hive-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="Hive-440"><a href="#Hive-440"><span class="linenos">440</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-441"><a href="#Hive-441"><span class="linenos">441</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-442"><a href="#Hive-442"><span class="linenos">442</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-443"><a href="#Hive-443"><span class="linenos">443</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-444"><a href="#Hive-444"><span class="linenos">444</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-445"><a href="#Hive-445"><span class="linenos">445</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-446"><a href="#Hive-446"><span class="linenos">446</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-447"><a href="#Hive-447"><span class="linenos">447</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-448"><a href="#Hive-448"><span class="linenos">448</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-449"><a href="#Hive-449"><span class="linenos">449</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-450"><a href="#Hive-450"><span class="linenos">450</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-451"><a href="#Hive-451"><span class="linenos">451</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-452"><a href="#Hive-452"><span class="linenos">452</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-453"><a href="#Hive-453"><span class="linenos">453</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-454"><a href="#Hive-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BASE64&quot;</span><span class="p">),</span>
+</span><span id="Hive-455"><a href="#Hive-455"><span class="linenos">455</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-456"><a href="#Hive-456"><span class="linenos">456</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-457"><a href="#Hive-457"><span class="linenos">457</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-458"><a href="#Hive-458"><span class="linenos">458</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-459"><a href="#Hive-459"><span class="linenos">459</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-460"><a href="#Hive-460"><span class="linenos">460</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="s2">&quot;hive&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="Hive-461"><a href="#Hive-461"><span class="linenos">461</span></a> <span class="p">),</span>
+</span><span id="Hive-462"><a href="#Hive-462"><span class="linenos">462</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-463"><a href="#Hive-463"><span class="linenos">463</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-464"><a href="#Hive-464"><span class="linenos">464</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-465"><a href="#Hive-465"><span class="linenos">465</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-466"><a href="#Hive-466"><span class="linenos">466</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-467"><a href="#Hive-467"><span class="linenos">467</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-468"><a href="#Hive-468"><span class="linenos">468</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">national_sql</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;&quot;</span><span class="p">),</span>
+</span><span id="Hive-469"><a href="#Hive-469"><span class="linenos">469</span></a> <span class="p">}</span>
+</span><span id="Hive-470"><a href="#Hive-470"><span class="linenos">470</span></a>
+</span><span id="Hive-471"><a href="#Hive-471"><span class="linenos">471</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-472"><a href="#Hive-472"><span class="linenos">472</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Hive-473"><a href="#Hive-473"><span class="linenos">473</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-474"><a href="#Hive-474"><span class="linenos">474</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-475"><a href="#Hive-475"><span class="linenos">475</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-476"><a href="#Hive-476"><span class="linenos">476</span></a> <span class="p">}</span>
+</span><span id="Hive-477"><a href="#Hive-477"><span class="linenos">477</span></a>
+</span><span id="Hive-478"><a href="#Hive-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive-479"><a href="#Hive-479"><span class="linenos">479</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
+</span><span id="Hive-480"><a href="#Hive-480"><span class="linenos">480</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Hive-481"><a href="#Hive-481"><span class="linenos">481</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Hive-482"><a href="#Hive-482"><span class="linenos">482</span></a>
+</span><span id="Hive-483"><a href="#Hive-483"><span class="linenos">483</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-484"><a href="#Hive-484"><span class="linenos">484</span></a> <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-485"><a href="#Hive-485"><span class="linenos">485</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="Hive-486"><a href="#Hive-486"><span class="linenos">486</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-487"><a href="#Hive-487"><span class="linenos">487</span></a> <span class="p">)</span>
+</span><span id="Hive-488"><a href="#Hive-488"><span class="linenos">488</span></a>
+</span><span id="Hive-489"><a href="#Hive-489"><span class="linenos">489</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-490"><a href="#Hive-490"><span class="linenos">490</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;TBLPROPERTIES&quot;</span><span class="p">))</span>
+</span><span id="Hive-491"><a href="#Hive-491"><span class="linenos">491</span></a>
+</span><span id="Hive-492"><a href="#Hive-492"><span class="linenos">492</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-493"><a href="#Hive-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Hive-494"><a href="#Hive-494"><span class="linenos">494</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-495"><a href="#Hive-495"><span class="linenos">495</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-496"><a href="#Hive-496"><span class="linenos">496</span></a> <span class="p">):</span>
+</span><span id="Hive-497"><a href="#Hive-497"><span class="linenos">497</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-498"><a href="#Hive-498"><span class="linenos">498</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-499"><a href="#Hive-499"><span class="linenos">499</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-500"><a href="#Hive-500"><span class="linenos">500</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
+</span><span id="Hive-501"><a href="#Hive-501"><span class="linenos">501</span></a> <span class="n">size_expression</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">DataTypeParam</span><span class="p">)</span>
+</span><span id="Hive-502"><a href="#Hive-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
+</span><span id="Hive-503"><a href="#Hive-503"><span class="linenos">503</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Hive-504"><a href="#Hive-504"><span class="linenos">504</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Hive-505"><a href="#Hive-505"><span class="linenos">505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
+</span><span id="Hive-506"><a href="#Hive-506"><span class="linenos">506</span></a> <span class="p">)</span>
+</span><span id="Hive-507"><a href="#Hive-507"><span class="linenos">507</span></a>
+</span><span id="Hive-508"><a href="#Hive-508"><span class="linenos">508</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-509"><a href="#Hive-509"><span class="linenos">509</span></a>
+</span><span id="Hive-510"><a href="#Hive-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive-511"><a href="#Hive-511"><span class="linenos">511</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Hive-512"><a href="#Hive-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;FOR &quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span></pre></div>
@@ -1490,6 +1549,7 @@
<div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
<dd id="Hive.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Hive.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Hive.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Hive.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Hive.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Hive.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -1525,33 +1585,35 @@
</div>
<a class="headerlink" href="#Hive.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Tokenizer-201"><a href="#Hive.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="Hive.Tokenizer-202"><a href="#Hive.Tokenizer-202"><span class="linenos">202</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-203"><a href="#Hive.Tokenizer-203"><span class="linenos">203</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-204"><a href="#Hive.Tokenizer-204"><span class="linenos">204</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-205"><a href="#Hive.Tokenizer-205"><span class="linenos">205</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="Hive.Tokenizer-206"><a href="#Hive.Tokenizer-206"><span class="linenos">206</span></a>
-</span><span id="Hive.Tokenizer-207"><a href="#Hive.Tokenizer-207"><span class="linenos">207</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Tokenizer-208"><a href="#Hive.Tokenizer-208"><span class="linenos">208</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-209"><a href="#Hive.Tokenizer-209"><span class="linenos">209</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-210"><a href="#Hive.Tokenizer-210"><span class="linenos">210</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-211"><a href="#Hive.Tokenizer-211"><span class="linenos">211</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-212"><a href="#Hive.Tokenizer-212"><span class="linenos">212</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-213"><a href="#Hive.Tokenizer-213"><span class="linenos">213</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-214"><a href="#Hive.Tokenizer-214"><span class="linenos">214</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-215"><a href="#Hive.Tokenizer-215"><span class="linenos">215</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-216"><a href="#Hive.Tokenizer-216"><span class="linenos">216</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="Hive.Tokenizer-217"><a href="#Hive.Tokenizer-217"><span class="linenos">217</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-218"><a href="#Hive.Tokenizer-218"><span class="linenos">218</span></a> <span class="p">}</span>
-</span><span id="Hive.Tokenizer-219"><a href="#Hive.Tokenizer-219"><span class="linenos">219</span></a>
-</span><span id="Hive.Tokenizer-220"><a href="#Hive.Tokenizer-220"><span class="linenos">220</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</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;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&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="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-223"><a href="#Hive.Tokenizer-223"><span class="linenos">223</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-224"><a href="#Hive.Tokenizer-224"><span class="linenos">224</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-225"><a href="#Hive.Tokenizer-225"><span class="linenos">225</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-226"><a href="#Hive.Tokenizer-226"><span class="linenos">226</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-227"><a href="#Hive.Tokenizer-227"><span class="linenos">227</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Tokenizer-193"><a href="#Hive.Tokenizer-193"><span class="linenos">193</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-194"><a href="#Hive.Tokenizer-194"><span class="linenos">194</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-195"><a href="#Hive.Tokenizer-195"><span class="linenos">195</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-196"><a href="#Hive.Tokenizer-196"><span class="linenos">196</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-197"><a href="#Hive.Tokenizer-197"><span class="linenos">197</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="Hive.Tokenizer-198"><a href="#Hive.Tokenizer-198"><span class="linenos">198</span></a>
+</span><span id="Hive.Tokenizer-199"><a href="#Hive.Tokenizer-199"><span class="linenos">199</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Tokenizer-200"><a href="#Hive.Tokenizer-200"><span class="linenos">200</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-201"><a href="#Hive.Tokenizer-201"><span class="linenos">201</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-202"><a href="#Hive.Tokenizer-202"><span class="linenos">202</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-203"><a href="#Hive.Tokenizer-203"><span class="linenos">203</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-204"><a href="#Hive.Tokenizer-204"><span class="linenos">204</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-205"><a href="#Hive.Tokenizer-205"><span class="linenos">205</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-206"><a href="#Hive.Tokenizer-206"><span class="linenos">206</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-207"><a href="#Hive.Tokenizer-207"><span class="linenos">207</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-208"><a href="#Hive.Tokenizer-208"><span class="linenos">208</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="Hive.Tokenizer-209"><a href="#Hive.Tokenizer-209"><span class="linenos">209</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-210"><a href="#Hive.Tokenizer-210"><span class="linenos">210</span></a> <span class="s2">&quot;TIMESTAMP AS OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-211"><a href="#Hive.Tokenizer-211"><span class="linenos">211</span></a> <span class="s2">&quot;VERSION AS OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-212"><a href="#Hive.Tokenizer-212"><span class="linenos">212</span></a> <span class="p">}</span>
+</span><span id="Hive.Tokenizer-213"><a href="#Hive.Tokenizer-213"><span class="linenos">213</span></a>
+</span><span id="Hive.Tokenizer-214"><a href="#Hive.Tokenizer-214"><span class="linenos">214</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Tokenizer-215"><a href="#Hive.Tokenizer-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="Hive.Tokenizer-216"><a href="#Hive.Tokenizer-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="Hive.Tokenizer-217"><a href="#Hive.Tokenizer-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="Hive.Tokenizer-218"><a href="#Hive.Tokenizer-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="Hive.Tokenizer-219"><a href="#Hive.Tokenizer-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="Hive.Tokenizer-220"><a href="#Hive.Tokenizer-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="Hive.Tokenizer-221"><a href="#Hive.Tokenizer-221"><span class="linenos">221</span></a> <span class="p">}</span>
</span></pre></div>
@@ -1609,7 +1671,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Hive.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Hive.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;ADD ARCHIVE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD ARCHIVES&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD FILE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD FILES&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD JAR&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD JARS&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;MSCK REPAIR&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REFRESH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;WITH SERDEPROPERTIES&#39;: &lt;TokenType.SERDE_PROPERTIES: &#39;SERDE_PROPERTIES&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Hive.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;ADD ARCHIVE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD ARCHIVES&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD FILE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD FILES&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD JAR&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;ADD JARS&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;MSCK REPAIR&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REFRESH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;WITH SERDEPROPERTIES&#39;: &lt;TokenType.SERDE_PROPERTIES: &#39;SERDE_PROPERTIES&#39;&gt;, &#39;TIMESTAMP AS OF&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;VERSION AS OF&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;}</span>
</div>
@@ -1679,46 +1741,52 @@
</div>
<a class="headerlink" href="#Hive.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Parser-229"><a href="#Hive.Parser-229"><span class="linenos">229</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-230"><a href="#Hive.Parser-230"><span class="linenos">230</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive.Parser-231"><a href="#Hive.Parser-231"><span class="linenos">231</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Parser-232"><a href="#Hive.Parser-232"><span class="linenos">232</span></a>
-</span><span id="Hive.Parser-233"><a href="#Hive.Parser-233"><span class="linenos">233</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Parser-234"><a href="#Hive.Parser-234"><span class="linenos">234</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Hive.Parser-235"><a href="#Hive.Parser-235"><span class="linenos">235</span></a> <span class="s2">&quot;BASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="o">.</span><span class="n">from_arg_list</span><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;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-237"><a href="#Hive.Parser-237"><span class="linenos">237</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-238"><a href="#Hive.Parser-238"><span class="linenos">238</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-239"><a href="#Hive.Parser-239"><span class="linenos">239</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">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">exp</span><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-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_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-242"><a href="#Hive.Parser-242"><span class="linenos">242</span></a> <span class="p">[</span>
-</span><span id="Hive.Parser-243"><a href="#Hive.Parser-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">this</span><span class="o">=</span><span class="n">seq_get</span><span 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-244"><a href="#Hive.Parser-244"><span class="linenos">244</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-245"><a href="#Hive.Parser-245"><span class="linenos">245</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Parser-223"><a href="#Hive.Parser-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="Hive.Parser-224"><a href="#Hive.Parser-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="Hive.Parser-225"><a href="#Hive.Parser-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="Hive.Parser-226"><a href="#Hive.Parser-226"><span class="linenos">226</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</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><span id="Hive.Parser-230"><a href="#Hive.Parser-230"><span class="linenos">230</span></a> <span class="s2">&quot;BASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</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;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-233"><a href="#Hive.Parser-233"><span class="linenos">233</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-234"><a href="#Hive.Parser-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">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">exp</span><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;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-243"><a href="#Hive.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><span id="Hive.Parser-244"><a href="#Hive.Parser-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">Mul</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="o">-</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">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-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="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-248"><a href="#Hive.Parser-248"><span class="linenos">248</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-249"><a href="#Hive.Parser-249"><span class="linenos">249</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 class="n">this</span><span class="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="o">-</span><span class="mi">1</span><span class="p">)),</span>
-</span><span id="Hive.Parser-250"><a href="#Hive.Parser-250"><span class="linenos">250</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-251"><a href="#Hive.Parser-251"><span class="linenos">251</span></a> <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;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-253"><a href="#Hive.Parser-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">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-254"><a href="#Hive.Parser-254"><span class="linenos">254</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-255"><a href="#Hive.Parser-255"><span class="linenos">255</span></a> <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;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-257"><a href="#Hive.Parser-257"><span class="linenos">257</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-258"><a href="#Hive.Parser-258"><span class="linenos">258</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-259"><a href="#Hive.Parser-259"><span class="linenos">259</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-260"><a href="#Hive.Parser-260"><span class="linenos">260</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-261"><a href="#Hive.Parser-261"><span class="linenos">261</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-262"><a href="#Hive.Parser-262"><span class="linenos">262</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-263"><a href="#Hive.Parser-263"><span class="linenos">263</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-264"><a href="#Hive.Parser-264"><span class="linenos">264</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="Hive.Parser-265"><a href="#Hive.Parser-265"><span class="linenos">265</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">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">group</span><span class="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="Hive.Parser-266"><a href="#Hive.Parser-266"><span class="linenos">266</span></a> <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;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-268"><a href="#Hive.Parser-268"><span class="linenos">268</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-247"><a href="#Hive.Parser-247"><span class="linenos">247</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-248"><a href="#Hive.Parser-248"><span class="linenos">248</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-249"><a href="#Hive.Parser-249"><span class="linenos">249</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-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="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-252"><a href="#Hive.Parser-252"><span class="linenos">252</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-253"><a href="#Hive.Parser-253"><span class="linenos">253</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-254"><a href="#Hive.Parser-254"><span class="linenos">254</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-255"><a href="#Hive.Parser-255"><span class="linenos">255</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-256"><a href="#Hive.Parser-256"><span class="linenos">256</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-257"><a href="#Hive.Parser-257"><span class="linenos">257</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-258"><a href="#Hive.Parser-258"><span class="linenos">258</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-259"><a href="#Hive.Parser-259"><span class="linenos">259</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="Hive.Parser-260"><a href="#Hive.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">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 class="n">group</span><span class="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="Hive.Parser-261"><a href="#Hive.Parser-261"><span class="linenos">261</span></a> <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;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-263"><a href="#Hive.Parser-263"><span class="linenos">263</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-264"><a href="#Hive.Parser-264"><span class="linenos">264</span></a> <span class="s2">&quot;STR_TO_MAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">(</span>
+</span><span id="Hive.Parser-265"><a href="#Hive.Parser-265"><span class="linenos">265</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-266"><a href="#Hive.Parser-266"><span class="linenos">266</span></a> <span class="n">pair_delim</span><span class="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="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="Hive.Parser-267"><a href="#Hive.Parser-267"><span class="linenos">267</span></a> <span class="n">key_value_delim</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="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="Hive.Parser-268"><a href="#Hive.Parser-268"><span class="linenos">268</span></a> <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;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-270"><a href="#Hive.Parser-270"><span class="linenos">270</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-271"><a href="#Hive.Parser-271"><span class="linenos">271</span></a> <span class="s2">&quot;UNBASE64&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
@@ -1775,7 +1843,7 @@
</span><span id="Hive.Parser-322"><a href="#Hive.Parser-322"><span class="linenos">322</span></a> <span class="p">)</span>
</span><span id="Hive.Parser-323"><a href="#Hive.Parser-323"><span class="linenos">323</span></a>
</span><span id="Hive.Parser-324"><a href="#Hive.Parser-324"><span class="linenos">324</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Hive.Parser-325"><a href="#Hive.Parser-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Parser-325"><a href="#Hive.Parser-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Hive.Parser-326"><a href="#Hive.Parser-326"><span class="linenos">326</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Hive.Parser-327"><a href="#Hive.Parser-327"><span class="linenos">327</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Hive.Parser-328"><a href="#Hive.Parser-328"><span class="linenos">328</span></a><span class="sd"> Spark (and most likely Hive) treats casts to CHAR(length) and VARCHAR(length) as casts to</span>
@@ -1795,17 +1863,29 @@
</span><span id="Hive.Parser-342"><a href="#Hive.Parser-342"><span class="linenos">342</span></a>
</span><span id="Hive.Parser-343"><a href="#Hive.Parser-343"><span class="linenos">343</span></a><span class="sd"> Reference: https://spark.apache.org/docs/latest/sql-ref-datatypes.html</span>
</span><span id="Hive.Parser-344"><a href="#Hive.Parser-344"><span class="linenos">344</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Hive.Parser-345"><a href="#Hive.Parser-345"><span class="linenos">345</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Hive.Parser-346"><a href="#Hive.Parser-346"><span class="linenos">346</span></a>
-</span><span id="Hive.Parser-347"><a href="#Hive.Parser-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="Hive.Parser-348"><a href="#Hive.Parser-348"><span class="linenos">348</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Hive.Parser-349"><a href="#Hive.Parser-349"><span class="linenos">349</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">node</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="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.Parser-350"><a href="#Hive.Parser-350"><span class="linenos">350</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 class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;char&quot;</span><span class="p">,</span> <span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="Hive.Parser-351"><a href="#Hive.Parser-351"><span class="linenos">351</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Hive.Parser-352"><a href="#Hive.Parser-352"><span class="linenos">352</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Hive.Parser-353"><a href="#Hive.Parser-353"><span class="linenos">353</span></a> <span class="p">)</span>
-</span><span id="Hive.Parser-354"><a href="#Hive.Parser-354"><span class="linenos">354</span></a>
-</span><span id="Hive.Parser-355"><a href="#Hive.Parser-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Hive.Parser-345"><a href="#Hive.Parser-345"><span class="linenos">345</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Hive.Parser-346"><a href="#Hive.Parser-346"><span class="linenos">346</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Hive.Parser-347"><a href="#Hive.Parser-347"><span class="linenos">347</span></a> <span class="p">)</span>
+</span><span id="Hive.Parser-348"><a href="#Hive.Parser-348"><span class="linenos">348</span></a>
+</span><span id="Hive.Parser-349"><a href="#Hive.Parser-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="Hive.Parser-350"><a href="#Hive.Parser-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Hive.Parser-351"><a href="#Hive.Parser-351"><span class="linenos">351</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">node</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="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.Parser-352"><a href="#Hive.Parser-352"><span class="linenos">352</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 class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;char&quot;</span><span class="p">,</span> <span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="Hive.Parser-353"><a href="#Hive.Parser-353"><span class="linenos">353</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Hive.Parser-354"><a href="#Hive.Parser-354"><span class="linenos">354</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Hive.Parser-355"><a href="#Hive.Parser-355"><span class="linenos">355</span></a> <span class="p">)</span>
+</span><span id="Hive.Parser-356"><a href="#Hive.Parser-356"><span class="linenos">356</span></a>
+</span><span id="Hive.Parser-357"><a href="#Hive.Parser-357"><span class="linenos">357</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Hive.Parser-358"><a href="#Hive.Parser-358"><span class="linenos">358</span></a>
+</span><span id="Hive.Parser-359"><a href="#Hive.Parser-359"><span class="linenos">359</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="Hive.Parser-360"><a href="#Hive.Parser-360"><span class="linenos">360</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Hive.Parser-361"><a href="#Hive.Parser-361"><span class="linenos">361</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Hive.Parser-362"><a href="#Hive.Parser-362"><span class="linenos">362</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Hive.Parser-363"><a href="#Hive.Parser-363"><span class="linenos">363</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_conjunction</span><span class="p">)</span>
+</span><span id="Hive.Parser-364"><a href="#Hive.Parser-364"><span class="linenos">364</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">PARTITION_BY</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="Hive.Parser-365"><a href="#Hive.Parser-365"><span class="linenos">365</span></a> <span class="k">else</span> <span class="p">[],</span>
+</span><span id="Hive.Parser-366"><a href="#Hive.Parser-366"><span class="linenos">366</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">skip_order_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">SORT_BY</span><span class="p">)),</span>
+</span><span id="Hive.Parser-367"><a href="#Hive.Parser-367"><span class="linenos">367</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1850,11 +1930,23 @@ Default: 3</li>
</div>
+ <div id="Hive.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Hive.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="Hive.Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Hive.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Hive.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Hive.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function <a href="#Hive.Parser">Hive.Parser</a>.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;}</span>
</div>
@@ -1889,6 +1981,18 @@ Default: 3</li>
</div>
+ <div id="Hive.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Hive.Tokenizer">sqlglot.dialects.hive.Hive.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Hive.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Hive.Parser.ALIAS_POST_TABLESAMPLE" class="classattr">
<div class="attr variable">
<span class="name">ALIAS_POST_TABLESAMPLE</span><span class="annotation">: bool</span> =
@@ -1970,6 +2074,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Hive.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Hive.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Hive.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Hive.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Hive.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Hive.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1990,6 +2095,7 @@ Default: 3</li>
<dd id="Hive.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Hive.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Hive.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Hive.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Hive.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Hive.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Hive.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -2007,6 +2113,7 @@ Default: 3</li>
<dd id="Hive.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
<dd id="Hive.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Hive.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="Hive.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Hive.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Hive.Parser.FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
<dd id="Hive.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
@@ -2025,10 +2132,12 @@ Default: 3</li>
<dd id="Hive.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Hive.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Hive.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Hive.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Hive.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Hive.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Hive.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Hive.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Hive.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Hive.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Hive.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Hive.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -2063,141 +2172,150 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Hive.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator-357"><a href="#Hive.Generator-357"><span class="linenos">357</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-358"><a href="#Hive.Generator-358"><span class="linenos">358</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="Hive.Generator-359"><a href="#Hive.Generator-359"><span class="linenos">359</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-360"><a href="#Hive.Generator-360"><span class="linenos">360</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive.Generator-361"><a href="#Hive.Generator-361"><span class="linenos">361</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-362"><a href="#Hive.Generator-362"><span class="linenos">362</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-363"><a href="#Hive.Generator-363"><span class="linenos">363</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-364"><a href="#Hive.Generator-364"><span class="linenos">364</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON TABLE&quot;</span>
-</span><span id="Hive.Generator-365"><a href="#Hive.Generator-365"><span class="linenos">365</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-366"><a href="#Hive.Generator-366"><span class="linenos">366</span></a>
-</span><span id="Hive.Generator-367"><a href="#Hive.Generator-367"><span class="linenos">367</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Generator-368"><a href="#Hive.Generator-368"><span class="linenos">368</span></a> <span 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="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">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-370"><a href="#Hive.Generator-370"><span class="linenos">370</span></a> <span class="n">exp</span><span 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-371"><a href="#Hive.Generator-371"><span class="linenos">371</span></a> <span class="n">exp</span><span 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-372"><a href="#Hive.Generator-372"><span class="linenos">372</span></a> <span class="n">exp</span><span 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="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-373"><a href="#Hive.Generator-373"><span class="linenos">373</span></a> <span class="n">exp</span><span 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-374"><a href="#Hive.Generator-374"><span class="linenos">374</span></a> <span class="n">exp</span><span 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-375"><a href="#Hive.Generator-375"><span class="linenos">375</span></a> <span class="p">}</span>
-</span><span id="Hive.Generator-376"><a href="#Hive.Generator-376"><span class="linenos">376</span></a>
-</span><span id="Hive.Generator-377"><a href="#Hive.Generator-377"><span class="linenos">377</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Generator-378"><a href="#Hive.Generator-378"><span class="linenos">378</span></a> <span 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="Hive.Generator-379"><a href="#Hive.Generator-379"><span class="linenos">379</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-380"><a href="#Hive.Generator-380"><span class="linenos">380</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-381"><a href="#Hive.Generator-381"><span class="linenos">381</span></a> <span class="p">[</span>
-</span><span id="Hive.Generator-382"><a href="#Hive.Generator-382"><span class="linenos">382</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-383"><a href="#Hive.Generator-383"><span class="linenos">383</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-384"><a href="#Hive.Generator-384"><span class="linenos">384</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-385"><a href="#Hive.Generator-385"><span class="linenos">385</span></a> <span class="p">]</span>
-</span><span id="Hive.Generator-386"><a href="#Hive.Generator-386"><span class="linenos">386</span></a> <span class="p">),</span>
-</span><span id="Hive.Generator-387"><a href="#Hive.Generator-387"><span class="linenos">387</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-388"><a href="#Hive.Generator-388"><span class="linenos">388</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-389"><a href="#Hive.Generator-389"><span class="linenos">389</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-390"><a href="#Hive.Generator-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Hive.Generator-391"><a href="#Hive.Generator-391"><span class="linenos">391</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-392"><a href="#Hive.Generator-392"><span class="linenos">392</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-393"><a href="#Hive.Generator-393"><span class="linenos">393</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-394"><a href="#Hive.Generator-394"><span class="linenos">394</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-395"><a href="#Hive.Generator-395"><span class="linenos">395</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-396"><a href="#Hive.Generator-396"><span class="linenos">396</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-397"><a href="#Hive.Generator-397"><span class="linenos">397</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-398"><a href="#Hive.Generator-398"><span class="linenos">398</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-399"><a href="#Hive.Generator-399"><span class="linenos">399</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-400"><a href="#Hive.Generator-400"><span class="linenos">400</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-401"><a href="#Hive.Generator-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNBASE64&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-402"><a href="#Hive.Generator-402"><span class="linenos">402</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-403"><a href="#Hive.Generator-403"><span class="linenos">403</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-404"><a href="#Hive.Generator-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-405"><a href="#Hive.Generator-405"><span class="linenos">405</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-406"><a href="#Hive.Generator-406"><span class="linenos">406</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-407"><a href="#Hive.Generator-407"><span class="linenos">407</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-408"><a href="#Hive.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-409"><a href="#Hive.Generator-409"><span class="linenos">409</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-410"><a href="#Hive.Generator-410"><span class="linenos">410</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-411"><a href="#Hive.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;UNHEX&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;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="Hive.Generator-412"><a href="#Hive.Generator-412"><span class="linenos">412</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-413"><a href="#Hive.Generator-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MONTHS_BETWEEN&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="Hive.Generator-414"><a href="#Hive.Generator-414"><span class="linenos">414</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-415"><a href="#Hive.Generator-415"><span class="linenos">415</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-416"><a href="#Hive.Generator-416"><span class="linenos">416</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-417"><a href="#Hive.Generator-417"><span class="linenos">417</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-418"><a href="#Hive.Generator-418"><span class="linenos">418</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="Hive.Generator-419"><a href="#Hive.Generator-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-420"><a href="#Hive.Generator-420"><span class="linenos">420</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-421"><a href="#Hive.Generator-421"><span class="linenos">421</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-422"><a href="#Hive.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-423"><a href="#Hive.Generator-423"><span class="linenos">423</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-424"><a href="#Hive.Generator-424"><span class="linenos">424</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-425"><a href="#Hive.Generator-425"><span class="linenos">425</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-426"><a href="#Hive.Generator-426"><span class="linenos">426</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-427"><a href="#Hive.Generator-427"><span class="linenos">427</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-428"><a href="#Hive.Generator-428"><span class="linenos">428</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-429"><a href="#Hive.Generator-429"><span class="linenos">429</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-430"><a href="#Hive.Generator-430"><span class="linenos">430</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-431"><a href="#Hive.Generator-431"><span class="linenos">431</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-432"><a href="#Hive.Generator-432"><span class="linenos">432</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-433"><a href="#Hive.Generator-433"><span class="linenos">433</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-434"><a href="#Hive.Generator-434"><span class="linenos">434</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-435"><a href="#Hive.Generator-435"><span class="linenos">435</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-436"><a href="#Hive.Generator-436"><span class="linenos">436</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-437"><a href="#Hive.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BASE64&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-438"><a href="#Hive.Generator-438"><span class="linenos">438</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-439"><a href="#Hive.Generator-439"><span class="linenos">439</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-440"><a href="#Hive.Generator-440"><span class="linenos">440</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-441"><a href="#Hive.Generator-441"><span class="linenos">441</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-442"><a href="#Hive.Generator-442"><span class="linenos">442</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-443"><a href="#Hive.Generator-443"><span class="linenos">443</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-444"><a href="#Hive.Generator-444"><span class="linenos">444</span></a> <span class="p">),</span>
-</span><span id="Hive.Generator-445"><a href="#Hive.Generator-445"><span class="linenos">445</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-446"><a href="#Hive.Generator-446"><span class="linenos">446</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-447"><a href="#Hive.Generator-447"><span class="linenos">447</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-448"><a href="#Hive.Generator-448"><span class="linenos">448</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-449"><a href="#Hive.Generator-449"><span class="linenos">449</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-450"><a href="#Hive.Generator-450"><span class="linenos">450</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-451"><a href="#Hive.Generator-451"><span class="linenos">451</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">national_sql</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;&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-452"><a href="#Hive.Generator-452"><span class="linenos">452</span></a> <span class="p">}</span>
-</span><span id="Hive.Generator-453"><a href="#Hive.Generator-453"><span class="linenos">453</span></a>
-</span><span id="Hive.Generator-454"><a href="#Hive.Generator-454"><span class="linenos">454</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Generator-455"><a href="#Hive.Generator-455"><span class="linenos">455</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Hive.Generator-456"><a href="#Hive.Generator-456"><span class="linenos">456</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-457"><a href="#Hive.Generator-457"><span class="linenos">457</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-458"><a href="#Hive.Generator-458"><span class="linenos">458</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-459"><a href="#Hive.Generator-459"><span class="linenos">459</span></a> <span class="p">}</span>
-</span><span id="Hive.Generator-460"><a href="#Hive.Generator-460"><span class="linenos">460</span></a>
-</span><span id="Hive.Generator-461"><a href="#Hive.Generator-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Hive.Generator-462"><a href="#Hive.Generator-462"><span class="linenos">462</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
-</span><span id="Hive.Generator-463"><a href="#Hive.Generator-463"><span class="linenos">463</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Hive.Generator-464"><a href="#Hive.Generator-464"><span class="linenos">464</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Hive.Generator-465"><a href="#Hive.Generator-465"><span class="linenos">465</span></a>
-</span><span id="Hive.Generator-466"><a href="#Hive.Generator-466"><span class="linenos">466</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-467"><a href="#Hive.Generator-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Hive.Generator-468"><a href="#Hive.Generator-468"><span class="linenos">468</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-469"><a href="#Hive.Generator-469"><span class="linenos">469</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-470"><a href="#Hive.Generator-470"><span class="linenos">470</span></a> <span class="p">)</span>
-</span><span id="Hive.Generator-471"><a href="#Hive.Generator-471"><span class="linenos">471</span></a>
-</span><span id="Hive.Generator-472"><a href="#Hive.Generator-472"><span class="linenos">472</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-473"><a href="#Hive.Generator-473"><span class="linenos">473</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;TBLPROPERTIES&quot;</span><span class="p">))</span>
-</span><span id="Hive.Generator-474"><a href="#Hive.Generator-474"><span class="linenos">474</span></a>
-</span><span id="Hive.Generator-475"><a href="#Hive.Generator-475"><span class="linenos">475</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-476"><a href="#Hive.Generator-476"><span class="linenos">476</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Hive.Generator-477"><a href="#Hive.Generator-477"><span class="linenos">477</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-478"><a href="#Hive.Generator-478"><span class="linenos">478</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-479"><a href="#Hive.Generator-479"><span class="linenos">479</span></a> <span class="p">):</span>
-</span><span id="Hive.Generator-480"><a href="#Hive.Generator-480"><span class="linenos">480</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-481"><a href="#Hive.Generator-481"><span class="linenos">481</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-482"><a href="#Hive.Generator-482"><span class="linenos">482</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-483"><a href="#Hive.Generator-483"><span class="linenos">483</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
-</span><span id="Hive.Generator-484"><a href="#Hive.Generator-484"><span class="linenos">484</span></a> <span class="n">size_expression</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">DataTypeSize</span><span class="p">)</span>
-</span><span id="Hive.Generator-485"><a href="#Hive.Generator-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
-</span><span id="Hive.Generator-486"><a href="#Hive.Generator-486"><span class="linenos">486</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Hive.Generator-487"><a href="#Hive.Generator-487"><span class="linenos">487</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Hive.Generator-488"><a href="#Hive.Generator-488"><span class="linenos">488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
-</span><span id="Hive.Generator-489"><a href="#Hive.Generator-489"><span class="linenos">489</span></a> <span class="p">)</span>
-</span><span id="Hive.Generator-490"><a href="#Hive.Generator-490"><span class="linenos">490</span></a>
-</span><span id="Hive.Generator-491"><a href="#Hive.Generator-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">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-369"><a href="#Hive.Generator-369"><span class="linenos">369</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-370"><a href="#Hive.Generator-370"><span class="linenos">370</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="Hive.Generator-371"><a href="#Hive.Generator-371"><span class="linenos">371</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-372"><a href="#Hive.Generator-372"><span class="linenos">372</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive.Generator-373"><a href="#Hive.Generator-373"><span class="linenos">373</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-374"><a href="#Hive.Generator-374"><span class="linenos">374</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-375"><a href="#Hive.Generator-375"><span class="linenos">375</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-376"><a href="#Hive.Generator-376"><span class="linenos">376</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON TABLE&quot;</span>
+</span><span id="Hive.Generator-377"><a href="#Hive.Generator-377"><span class="linenos">377</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-378"><a href="#Hive.Generator-378"><span class="linenos">378</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-379"><a href="#Hive.Generator-379"><span class="linenos">379</span></a>
+</span><span id="Hive.Generator-380"><a href="#Hive.Generator-380"><span class="linenos">380</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Generator-381"><a href="#Hive.Generator-381"><span class="linenos">381</span></a> <span 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="Hive.Generator-382"><a href="#Hive.Generator-382"><span class="linenos">382</span></a> <span class="n">exp</span><span 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-383"><a href="#Hive.Generator-383"><span class="linenos">383</span></a> <span class="n">exp</span><span 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-384"><a href="#Hive.Generator-384"><span class="linenos">384</span></a> <span class="n">exp</span><span 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-385"><a href="#Hive.Generator-385"><span class="linenos">385</span></a> <span class="n">exp</span><span 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="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-386"><a href="#Hive.Generator-386"><span class="linenos">386</span></a> <span class="n">exp</span><span 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-387"><a href="#Hive.Generator-387"><span class="linenos">387</span></a> <span class="n">exp</span><span 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-388"><a href="#Hive.Generator-388"><span class="linenos">388</span></a> <span class="p">}</span>
+</span><span id="Hive.Generator-389"><a href="#Hive.Generator-389"><span class="linenos">389</span></a>
+</span><span id="Hive.Generator-390"><a href="#Hive.Generator-390"><span class="linenos">390</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Generator-391"><a href="#Hive.Generator-391"><span class="linenos">391</span></a> <span 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="Hive.Generator-392"><a href="#Hive.Generator-392"><span class="linenos">392</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-393"><a href="#Hive.Generator-393"><span class="linenos">393</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-394"><a href="#Hive.Generator-394"><span class="linenos">394</span></a> <span class="p">[</span>
+</span><span id="Hive.Generator-395"><a href="#Hive.Generator-395"><span class="linenos">395</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-396"><a href="#Hive.Generator-396"><span class="linenos">396</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-397"><a href="#Hive.Generator-397"><span class="linenos">397</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-398"><a href="#Hive.Generator-398"><span class="linenos">398</span></a> <span class="p">]</span>
+</span><span id="Hive.Generator-399"><a href="#Hive.Generator-399"><span class="linenos">399</span></a> <span class="p">),</span>
+</span><span id="Hive.Generator-400"><a href="#Hive.Generator-400"><span class="linenos">400</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-401"><a href="#Hive.Generator-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FIRST&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-402"><a href="#Hive.Generator-402"><span class="linenos">402</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-403"><a href="#Hive.Generator-403"><span class="linenos">403</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-404"><a href="#Hive.Generator-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Hive.Generator-405"><a href="#Hive.Generator-405"><span class="linenos">405</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-406"><a href="#Hive.Generator-406"><span class="linenos">406</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-407"><a href="#Hive.Generator-407"><span class="linenos">407</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-408"><a href="#Hive.Generator-408"><span class="linenos">408</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-409"><a href="#Hive.Generator-409"><span class="linenos">409</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-410"><a href="#Hive.Generator-410"><span class="linenos">410</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-411"><a href="#Hive.Generator-411"><span class="linenos">411</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-412"><a href="#Hive.Generator-412"><span class="linenos">412</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-413"><a href="#Hive.Generator-413"><span class="linenos">413</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-414"><a href="#Hive.Generator-414"><span class="linenos">414</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-415"><a href="#Hive.Generator-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNBASE64&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-416"><a href="#Hive.Generator-416"><span class="linenos">416</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-417"><a href="#Hive.Generator-417"><span class="linenos">417</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-418"><a href="#Hive.Generator-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-419"><a href="#Hive.Generator-419"><span class="linenos">419</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-420"><a href="#Hive.Generator-420"><span class="linenos">420</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-421"><a href="#Hive.Generator-421"><span class="linenos">421</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-422"><a href="#Hive.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-423"><a href="#Hive.Generator-423"><span class="linenos">423</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-424"><a href="#Hive.Generator-424"><span class="linenos">424</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-425"><a href="#Hive.Generator-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5Digest</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;UNHEX&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;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="Hive.Generator-426"><a href="#Hive.Generator-426"><span class="linenos">426</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-427"><a href="#Hive.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MONTHS_BETWEEN&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="Hive.Generator-428"><a href="#Hive.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">:</span> <span 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;&quot;</span>
+</span><span id="Hive.Generator-429"><a href="#Hive.Generator-429"><span class="linenos">429</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;allow_null&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator-430"><a href="#Hive.Generator-430"><span class="linenos">430</span></a> <span class="k">else</span> <span class="s2">&quot;NOT NULL&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-431"><a href="#Hive.Generator-431"><span class="linenos">431</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-432"><a href="#Hive.Generator-432"><span class="linenos">432</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-433"><a href="#Hive.Generator-433"><span class="linenos">433</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-434"><a href="#Hive.Generator-434"><span class="linenos">434</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-435"><a href="#Hive.Generator-435"><span class="linenos">435</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="Hive.Generator-436"><a href="#Hive.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="n">regexp_replace_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-437"><a href="#Hive.Generator-437"><span class="linenos">437</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-438"><a href="#Hive.Generator-438"><span class="linenos">438</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-439"><a href="#Hive.Generator-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-440"><a href="#Hive.Generator-440"><span class="linenos">440</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-441"><a href="#Hive.Generator-441"><span class="linenos">441</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-442"><a href="#Hive.Generator-442"><span class="linenos">442</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-443"><a href="#Hive.Generator-443"><span class="linenos">443</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-444"><a href="#Hive.Generator-444"><span class="linenos">444</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-445"><a href="#Hive.Generator-445"><span class="linenos">445</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-446"><a href="#Hive.Generator-446"><span class="linenos">446</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-447"><a href="#Hive.Generator-447"><span class="linenos">447</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-448"><a href="#Hive.Generator-448"><span class="linenos">448</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-449"><a href="#Hive.Generator-449"><span class="linenos">449</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-450"><a href="#Hive.Generator-450"><span class="linenos">450</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-451"><a href="#Hive.Generator-451"><span class="linenos">451</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-452"><a href="#Hive.Generator-452"><span class="linenos">452</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-453"><a href="#Hive.Generator-453"><span class="linenos">453</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-454"><a href="#Hive.Generator-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToBase64</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BASE64&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-455"><a href="#Hive.Generator-455"><span class="linenos">455</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-456"><a href="#Hive.Generator-456"><span class="linenos">456</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-457"><a href="#Hive.Generator-457"><span class="linenos">457</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-458"><a href="#Hive.Generator-458"><span class="linenos">458</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-459"><a href="#Hive.Generator-459"><span class="linenos">459</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-460"><a href="#Hive.Generator-460"><span class="linenos">460</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="s2">&quot;hive&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="Hive.Generator-461"><a href="#Hive.Generator-461"><span class="linenos">461</span></a> <span class="p">),</span>
+</span><span id="Hive.Generator-462"><a href="#Hive.Generator-462"><span class="linenos">462</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-463"><a href="#Hive.Generator-463"><span class="linenos">463</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-464"><a href="#Hive.Generator-464"><span class="linenos">464</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-465"><a href="#Hive.Generator-465"><span class="linenos">465</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-466"><a href="#Hive.Generator-466"><span class="linenos">466</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-467"><a href="#Hive.Generator-467"><span class="linenos">467</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-468"><a href="#Hive.Generator-468"><span class="linenos">468</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">national_sql</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;&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-469"><a href="#Hive.Generator-469"><span class="linenos">469</span></a> <span class="p">}</span>
+</span><span id="Hive.Generator-470"><a href="#Hive.Generator-470"><span class="linenos">470</span></a>
+</span><span id="Hive.Generator-471"><a href="#Hive.Generator-471"><span class="linenos">471</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Generator-472"><a href="#Hive.Generator-472"><span class="linenos">472</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Hive.Generator-473"><a href="#Hive.Generator-473"><span class="linenos">473</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-474"><a href="#Hive.Generator-474"><span class="linenos">474</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-475"><a href="#Hive.Generator-475"><span class="linenos">475</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-476"><a href="#Hive.Generator-476"><span class="linenos">476</span></a> <span class="p">}</span>
+</span><span id="Hive.Generator-477"><a href="#Hive.Generator-477"><span class="linenos">477</span></a>
+</span><span id="Hive.Generator-478"><a href="#Hive.Generator-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive.Generator-479"><a href="#Hive.Generator-479"><span class="linenos">479</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator-480"><a href="#Hive.Generator-480"><span class="linenos">480</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Hive.Generator-481"><a href="#Hive.Generator-481"><span class="linenos">481</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Hive.Generator-482"><a href="#Hive.Generator-482"><span class="linenos">482</span></a>
+</span><span id="Hive.Generator-483"><a href="#Hive.Generator-483"><span class="linenos">483</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-484"><a href="#Hive.Generator-484"><span class="linenos">484</span></a> <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-485"><a href="#Hive.Generator-485"><span class="linenos">485</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-486"><a href="#Hive.Generator-486"><span class="linenos">486</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-487"><a href="#Hive.Generator-487"><span class="linenos">487</span></a> <span class="p">)</span>
+</span><span id="Hive.Generator-488"><a href="#Hive.Generator-488"><span class="linenos">488</span></a>
+</span><span id="Hive.Generator-489"><a href="#Hive.Generator-489"><span class="linenos">489</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-490"><a href="#Hive.Generator-490"><span class="linenos">490</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;TBLPROPERTIES&quot;</span><span class="p">))</span>
+</span><span id="Hive.Generator-491"><a href="#Hive.Generator-491"><span class="linenos">491</span></a>
+</span><span id="Hive.Generator-492"><a href="#Hive.Generator-492"><span class="linenos">492</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-493"><a href="#Hive.Generator-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Hive.Generator-494"><a href="#Hive.Generator-494"><span class="linenos">494</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-495"><a href="#Hive.Generator-495"><span class="linenos">495</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-496"><a href="#Hive.Generator-496"><span class="linenos">496</span></a> <span class="p">):</span>
+</span><span id="Hive.Generator-497"><a href="#Hive.Generator-497"><span class="linenos">497</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-498"><a href="#Hive.Generator-498"><span class="linenos">498</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-499"><a href="#Hive.Generator-499"><span class="linenos">499</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-500"><a href="#Hive.Generator-500"><span class="linenos">500</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
+</span><span id="Hive.Generator-501"><a href="#Hive.Generator-501"><span class="linenos">501</span></a> <span class="n">size_expression</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">DataTypeParam</span><span class="p">)</span>
+</span><span id="Hive.Generator-502"><a href="#Hive.Generator-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
+</span><span id="Hive.Generator-503"><a href="#Hive.Generator-503"><span class="linenos">503</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Hive.Generator-504"><a href="#Hive.Generator-504"><span class="linenos">504</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Hive.Generator-505"><a href="#Hive.Generator-505"><span class="linenos">505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator-506"><a href="#Hive.Generator-506"><span class="linenos">506</span></a> <span class="p">)</span>
+</span><span id="Hive.Generator-507"><a href="#Hive.Generator-507"><span class="linenos">507</span></a>
+</span><span id="Hive.Generator-508"><a href="#Hive.Generator-508"><span class="linenos">508</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.Generator-509"><a href="#Hive.Generator-509"><span class="linenos">509</span></a>
+</span><span id="Hive.Generator-510"><a href="#Hive.Generator-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive.Generator-511"><a href="#Hive.Generator-511"><span class="linenos">511</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Hive.Generator-512"><a href="#Hive.Generator-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;FOR &quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span></pre></div>
@@ -2336,6 +2454,18 @@ Default: True</li>
</div>
+ <div id="Hive.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Hive.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="Hive.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
@@ -2353,7 +2483,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Hive.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Hive.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;: &lt;function _array_sort_sql&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function left_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function create_with_partitions_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function regexp_replace_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function right_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Hive.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;: &lt;function _array_sort_sql&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function left_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotNullColumnConstraint">sqlglot.expressions.NotNullColumnConstraint</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function create_with_partitions_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function regexp_replace_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function right_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function <a href="#Hive.Generator">Hive.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2366,7 +2496,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Hive.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Hive.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Hive.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -2386,10 +2516,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Hive.Generator.rowformatserdeproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.rowformatserdeproperty_sql-461"><a href="#Hive.Generator.rowformatserdeproperty_sql-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Hive.Generator.rowformatserdeproperty_sql-462"><a href="#Hive.Generator.rowformatserdeproperty_sql-462"><span class="linenos">462</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
-</span><span id="Hive.Generator.rowformatserdeproperty_sql-463"><a href="#Hive.Generator.rowformatserdeproperty_sql-463"><span class="linenos">463</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Hive.Generator.rowformatserdeproperty_sql-464"><a href="#Hive.Generator.rowformatserdeproperty_sql-464"><span class="linenos">464</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.rowformatserdeproperty_sql-478"><a href="#Hive.Generator.rowformatserdeproperty_sql-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">rowformatserdeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive.Generator.rowformatserdeproperty_sql-479"><a href="#Hive.Generator.rowformatserdeproperty_sql-479"><span class="linenos">479</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="bp">self</span><span class="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_properties&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator.rowformatserdeproperty_sql-480"><a href="#Hive.Generator.rowformatserdeproperty_sql-480"><span class="linenos">480</span></a> <span class="n">serde_props</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">serde_props</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde_props</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Hive.Generator.rowformatserdeproperty_sql-481"><a href="#Hive.Generator.rowformatserdeproperty_sql-481"><span class="linenos">481</span></a> <span class="k">return</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">expression</span><span 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">serde_props</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -2407,11 +2537,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-466"><a href="#Hive.Generator.arrayagg_sql-466"><span class="linenos">466</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-467"><a href="#Hive.Generator.arrayagg_sql-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Hive.Generator.arrayagg_sql-468"><a href="#Hive.Generator.arrayagg_sql-468"><span class="linenos">468</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator.arrayagg_sql-469"><a href="#Hive.Generator.arrayagg_sql-469"><span class="linenos">469</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-470"><a href="#Hive.Generator.arrayagg_sql-470"><span class="linenos">470</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.arrayagg_sql-483"><a href="#Hive.Generator.arrayagg_sql-483"><span class="linenos">483</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-484"><a href="#Hive.Generator.arrayagg_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">func</span><span class="p">(</span>
+</span><span id="Hive.Generator.arrayagg_sql-485"><a href="#Hive.Generator.arrayagg_sql-485"><span class="linenos">485</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator.arrayagg_sql-486"><a href="#Hive.Generator.arrayagg_sql-486"><span class="linenos">486</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-487"><a href="#Hive.Generator.arrayagg_sql-487"><span class="linenos">487</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2429,8 +2559,8 @@ 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-472"><a href="#Hive.Generator.with_properties-472"><span class="linenos">472</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-473"><a href="#Hive.Generator.with_properties-473"><span class="linenos">473</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;TBLPROPERTIES&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.with_properties-489"><a href="#Hive.Generator.with_properties-489"><span class="linenos">489</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-490"><a href="#Hive.Generator.with_properties-490"><span class="linenos">490</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;TBLPROPERTIES&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -2448,23 +2578,43 @@ 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-475"><a href="#Hive.Generator.datatype_sql-475"><span class="linenos">475</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-476"><a href="#Hive.Generator.datatype_sql-476"><span class="linenos">476</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Hive.Generator.datatype_sql-477"><a href="#Hive.Generator.datatype_sql-477"><span class="linenos">477</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-478"><a href="#Hive.Generator.datatype_sql-478"><span class="linenos">478</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-479"><a href="#Hive.Generator.datatype_sql-479"><span class="linenos">479</span></a> <span class="p">):</span>
-</span><span id="Hive.Generator.datatype_sql-480"><a href="#Hive.Generator.datatype_sql-480"><span class="linenos">480</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-481"><a href="#Hive.Generator.datatype_sql-481"><span class="linenos">481</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-482"><a href="#Hive.Generator.datatype_sql-482"><span class="linenos">482</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-483"><a href="#Hive.Generator.datatype_sql-483"><span class="linenos">483</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
-</span><span id="Hive.Generator.datatype_sql-484"><a href="#Hive.Generator.datatype_sql-484"><span class="linenos">484</span></a> <span class="n">size_expression</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">DataTypeSize</span><span class="p">)</span>
-</span><span id="Hive.Generator.datatype_sql-485"><a href="#Hive.Generator.datatype_sql-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
-</span><span id="Hive.Generator.datatype_sql-486"><a href="#Hive.Generator.datatype_sql-486"><span class="linenos">486</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Hive.Generator.datatype_sql-487"><a href="#Hive.Generator.datatype_sql-487"><span class="linenos">487</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Hive.Generator.datatype_sql-488"><a href="#Hive.Generator.datatype_sql-488"><span class="linenos">488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
-</span><span id="Hive.Generator.datatype_sql-489"><a href="#Hive.Generator.datatype_sql-489"><span class="linenos">489</span></a> <span class="p">)</span>
-</span><span id="Hive.Generator.datatype_sql-490"><a href="#Hive.Generator.datatype_sql-490"><span class="linenos">490</span></a>
-</span><span id="Hive.Generator.datatype_sql-491"><a href="#Hive.Generator.datatype_sql-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">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-492"><a href="#Hive.Generator.datatype_sql-492"><span class="linenos">492</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-493"><a href="#Hive.Generator.datatype_sql-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Hive.Generator.datatype_sql-494"><a href="#Hive.Generator.datatype_sql-494"><span class="linenos">494</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-495"><a href="#Hive.Generator.datatype_sql-495"><span class="linenos">495</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-496"><a href="#Hive.Generator.datatype_sql-496"><span class="linenos">496</span></a> <span class="p">):</span>
+</span><span id="Hive.Generator.datatype_sql-497"><a href="#Hive.Generator.datatype_sql-497"><span class="linenos">497</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-498"><a href="#Hive.Generator.datatype_sql-498"><span class="linenos">498</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-499"><a href="#Hive.Generator.datatype_sql-499"><span class="linenos">499</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-500"><a href="#Hive.Generator.datatype_sql-500"><span class="linenos">500</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">):</span>
+</span><span id="Hive.Generator.datatype_sql-501"><a href="#Hive.Generator.datatype_sql-501"><span class="linenos">501</span></a> <span class="n">size_expression</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">DataTypeParam</span><span class="p">)</span>
+</span><span id="Hive.Generator.datatype_sql-502"><a href="#Hive.Generator.datatype_sql-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">size_expression</span><span class="p">:</span>
+</span><span id="Hive.Generator.datatype_sql-503"><a href="#Hive.Generator.datatype_sql-503"><span class="linenos">503</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size_expression</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Hive.Generator.datatype_sql-504"><a href="#Hive.Generator.datatype_sql-504"><span class="linenos">504</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Hive.Generator.datatype_sql-505"><a href="#Hive.Generator.datatype_sql-505"><span class="linenos">505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">size</span> <span class="o">&lt;=</span> <span class="mi">32</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator.datatype_sql-506"><a href="#Hive.Generator.datatype_sql-506"><span class="linenos">506</span></a> <span class="p">)</span>
+</span><span id="Hive.Generator.datatype_sql-507"><a href="#Hive.Generator.datatype_sql-507"><span class="linenos">507</span></a>
+</span><span id="Hive.Generator.datatype_sql-508"><a href="#Hive.Generator.datatype_sql-508"><span class="linenos">508</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>
+
+
+
+
+ </div>
+ <div id="Hive.Generator.version_sql" class="classattr">
+ <input id="Hive.Generator.version_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">version_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#Version">sqlglot.expressions.Version</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Hive.Generator.version_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Hive.Generator.version_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.version_sql-510"><a href="#Hive.Generator.version_sql-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive.Generator.version_sql-511"><a href="#Hive.Generator.version_sql-511"><span class="linenos">511</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">version_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Hive.Generator.version_sql-512"><a href="#Hive.Generator.version_sql-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;FOR &quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span></pre></div>
@@ -2545,26 +2695,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Hive.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.can_identify-253"><a href="#Hive.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Hive.Generator.can_identify-254"><a href="#Hive.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Hive.Generator.can_identify-255"><a href="#Hive.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Hive.Generator.can_identify-256"><a href="#Hive.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Hive.Generator.can_identify-257"><a href="#Hive.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Hive.Generator.can_identify-258"><a href="#Hive.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Hive.Generator.can_identify-259"><a href="#Hive.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Hive.Generator.can_identify-260"><a href="#Hive.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Hive.Generator.can_identify-261"><a href="#Hive.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Hive.Generator.can_identify-262"><a href="#Hive.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Hive.Generator.can_identify-263"><a href="#Hive.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Hive.Generator.can_identify-264"><a href="#Hive.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Hive.Generator.can_identify-265"><a href="#Hive.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Hive.Generator.can_identify-266"><a href="#Hive.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Hive.Generator.can_identify-267"><a href="#Hive.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Hive.Generator.can_identify-268"><a href="#Hive.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Hive.Generator.can_identify-269"><a href="#Hive.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Hive.Generator.can_identify-270"><a href="#Hive.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.can_identify-256"><a href="#Hive.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Hive.Generator.can_identify-257"><a href="#Hive.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Hive.Generator.can_identify-258"><a href="#Hive.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Hive.Generator.can_identify-259"><a href="#Hive.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Hive.Generator.can_identify-260"><a href="#Hive.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Hive.Generator.can_identify-261"><a href="#Hive.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Hive.Generator.can_identify-262"><a href="#Hive.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Hive.Generator.can_identify-263"><a href="#Hive.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Hive.Generator.can_identify-264"><a href="#Hive.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Hive.Generator.can_identify-265"><a href="#Hive.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Hive.Generator.can_identify-266"><a href="#Hive.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Hive.Generator.can_identify-267"><a href="#Hive.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Hive.Generator.can_identify-268"><a href="#Hive.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Hive.Generator.can_identify-269"><a href="#Hive.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Hive.Generator.can_identify-270"><a href="#Hive.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Hive.Generator.can_identify-271"><a href="#Hive.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Hive.Generator.can_identify-272"><a href="#Hive.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Hive.Generator.can_identify-272"><a href="#Hive.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Hive.Generator.can_identify-273"><a href="#Hive.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Hive.Generator.can_identify-274"><a href="#Hive.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Hive.Generator.can_identify-275"><a href="#Hive.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2635,26 +2785,14 @@ Default: True</li>
</div>
- <div id="Hive.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Hive.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Hive.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Hive.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Hive.Tokenizer">sqlglot.dialects.hive.Hive.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Hive.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Hive.Generator.TOKENIZER_CLASS"></a>
@@ -2752,7 +2890,9 @@ Default: True</li>
<dd id="Hive.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
<dd id="Hive.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Hive.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
+ <dd id="Hive.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="Hive.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Hive.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Hive.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Hive.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Hive.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -2797,6 +2937,7 @@ Default: True</li>
<dd id="Hive.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Hive.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Hive.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Hive.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Hive.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Hive.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Hive.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2815,7 +2956,7 @@ Default: True</li>
<dd id="Hive.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Hive.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Hive.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Hive.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Hive.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Hive.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Hive.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="Hive.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@@ -2866,6 +3007,8 @@ Default: True</li>
<dd id="Hive.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Hive.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Hive.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Hive.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Hive.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Hive.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Hive.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Hive.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -3025,6 +3168,8 @@ Default: True</li>
<dd id="Hive.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Hive.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Hive.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Hive.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Hive.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/mysql.html b/docs/sqlglot/dialects/mysql.html
index 5b61b62..8f762da 100644
--- a/docs/sqlglot/dialects/mysql.html
+++ b/docs/sqlglot/dialects/mysql.html
@@ -34,9 +34,15 @@
<a class="class" href="#MySQL">MySQL</a>
<ul class="memberlist">
<li>
+ <a class="variable" href="#MySQL.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a>
+ </li>
+ <li>
<a class="variable" href="#MySQL.TIME_FORMAT">TIME_FORMAT</a>
</li>
<li>
+ <a class="variable" href="#MySQL.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a>
+ </li>
+ <li>
<a class="variable" href="#MySQL.TIME_MAPPING">TIME_MAPPING</a>
</li>
<li>
@@ -66,6 +72,9 @@
<li>
<a class="variable" href="#MySQL.Tokenizer.COMMANDS">COMMANDS</a>
</li>
+ <li>
+ <a class="variable" href="#MySQL.Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a>
+ </li>
</ul>
</li>
@@ -73,12 +82,18 @@
<a class="class" href="#MySQL.Parser">MySQL.Parser</a>
<ul class="memberlist">
<li>
+ <a class="variable" href="#MySQL.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#MySQL.Parser.FUNC_TOKENS">FUNC_TOKENS</a>
</li>
<li>
<a class="variable" href="#MySQL.Parser.CONJUNCTION">CONJUNCTION</a>
</li>
<li>
+ <a class="variable" href="#MySQL.Parser.BITWISE">BITWISE</a>
+ </li>
+ <li>
<a class="variable" href="#MySQL.Parser.TABLE_ALIAS_TOKENS">TABLE_ALIAS_TOKENS</a>
</li>
<li>
@@ -118,6 +133,9 @@
<a class="variable" href="#MySQL.Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a>
</li>
<li>
+ <a class="variable" href="#MySQL.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#MySQL.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -160,6 +178,9 @@
<a class="variable" href="#MySQL.Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a>
</li>
<li>
+ <a class="variable" href="#MySQL.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#MySQL.Generator.TRANSFORMS">TRANSFORMS</a>
</li>
<li>
@@ -202,6 +223,9 @@
<a class="variable" href="#MySQL.Generator.INVERSE_TIME_TRIE">INVERSE_TIME_TRIE</a>
</li>
<li>
+ <a class="variable" href="#MySQL.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a>
+ </li>
+ <li>
<a class="function" href="#MySQL.Generator.can_identify">can_identify</a>
</li>
<li>
@@ -217,10 +241,7 @@
<a class="variable" href="#MySQL.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#MySQL.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#MySQL.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#MySQL.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#MySQL.Generator.BIT_START">BIT_START</a>
@@ -330,627 +351,655 @@
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">arrow_json_extract_scalar_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">locate_to_strposition</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">no_ilike_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_paren_current_date_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_pivot_sql</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">parse_date_delta_with_interval</span><span class="p">,</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">simplify_literal</span><span class="p">,</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">strposition_to_locate_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-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">locate_to_strposition</span><span class="p">,</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">no_ilike_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_paren_current_date_sql</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">parse_date_delta_with_interval</span><span class="p">,</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">simplify_literal</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="p">)</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span 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-26"><a href="#L-26"><span class="linenos"> 26</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-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">_show_parser</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">Any</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">]:</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</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">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</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="bp">self</span><span class="o">.</span><span class="n">_parse_show_mysql</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-31"><a href="#L-31"><span class="linenos"> 31</span></a>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="k">return</span> <span class="n">_parse</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</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">_show_parser</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">Any</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">]:</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</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">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show_mysql</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-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">return</span> <span class="n">_parse</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="k">def</span> <span class="nf">_date_trunc_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">DateTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="L-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">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-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATE(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</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="n">unit</span> <span class="o">==</span> <span class="s2">&quot;week&quot;</span><span class="p">:</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; &#39;, WEEK(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">, 1), &#39; 1&#39;)&quot;</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%u</span><span class="s2"> %w&quot;</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</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-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; &#39;, MONTH(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; 1&#39;)&quot;</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%c</span><span class="s2"> </span><span class="si">%e</span><span class="s2">&quot;</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</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-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; &#39;, QUARTER(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">) * 3 - 2, &#39; 1&#39;)&quot;</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%c</span><span class="s2"> </span><span class="si">%e</span><span class="s2">&quot;</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; 1 1&#39;)&quot;</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%c</span><span class="s2"> </span><span class="si">%e</span><span class="s2">&quot;</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</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;Unexpected interval unit: </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATE(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STR_TO_DATE(</span><span class="si">{</span><span class="n">concat</span><span class="si">}</span><span class="s2">, &#39;</span><span class="si">{</span><span class="n">date_format</span><span class="si">}</span><span class="s2">&#39;)&quot;</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="k">def</span> <span class="nf">_date_trunc_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">DateTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="L-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">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-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;DATE(</span><span class="si">{</span><span class="n">expr</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 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-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; &#39;, WEEK(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">, 1), &#39; 1&#39;)&quot;</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%u</span><span class="s2"> %w&quot;</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; &#39;, MONTH(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; 1&#39;)&quot;</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%c</span><span class="s2"> </span><span class="si">%e</span><span class="s2">&quot;</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</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-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; &#39;, QUARTER(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">) * 3 - 2, &#39; 1&#39;)&quot;</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%c</span><span class="s2"> </span><span class="si">%e</span><span class="s2">&quot;</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</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-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">concat</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CONCAT(YEAR(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">), &#39; 1 1&#39;)&quot;</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;%Y </span><span class="si">%c</span><span class="s2"> </span><span class="si">%e</span><span class="s2">&quot;</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unexpected interval unit: </span><span class="si">{</span><span class="n">unit</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="sa">f</span><span class="s2">&quot;DATE(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&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">return</span> <span class="sa">f</span><span class="s2">&quot;STR_TO_DATE(</span><span class="si">{</span><span class="n">concat</span><span class="si">}</span><span class="s2">, &#39;</span><span class="si">{</span><span class="n">date_format</span><span class="si">}</span><span class="s2">&#39;)&quot;</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="k">def</span> <span class="nf">_str_to_date</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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="nb">format</span><span class="o">=</span><span class="n">date_format</span><span class="p">)</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</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">_str_to_date</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</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="nb">format</span><span class="o">=</span><span class="n">date_format</span><span class="p">)</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a><span class="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="o">|</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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">date_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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STR_TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">date_format</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><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">_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="o">|</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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">date_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-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;STR_TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">date_format</span><span class="si">}</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 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="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">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</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-74"><a href="#L-74"><span class="linenos"> 74</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-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="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t mysql-specific</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span><span class="p">:</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">return</span> <span class="bp">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-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="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-81"><a href="#L-81"><span class="linenos"> 81</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-82"><a href="#L-82"><span class="linenos"> 82</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-83"><a href="#L-83"><span class="linenos"> 83</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="s2">)&quot;</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</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">_trim_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">Trim</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="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-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</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-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"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t mysql-specific</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</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="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-80"><a href="#L-80"><span class="linenos"> 80</span></a>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="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-82"><a href="#L-82"><span class="linenos"> 82</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-83"><a href="#L-83"><span class="linenos"> 83</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-84"><a href="#L-84"><span class="linenos"> 84</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="s2">)&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">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</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">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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</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 class="ow">or</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATE_</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">, </span><span 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="o">.</span><span class="n">copy</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-91"><a href="#L-91"><span class="linenos"> 91</span></a>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">func</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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</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 class="ow">or</span> <span class="s2">&quot;DAY&quot;</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;DATE_</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">, </span><span 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="o">.</span><span class="n">copy</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-92"><a href="#L-92"><span class="linenos"> 92</span></a>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="n">func</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">class</span> <span class="nc">MySQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</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"> %T&#39;&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="c1"># https://prestodb.io/docs/current/functions/datetime.html#mysql-date-functions</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">TIME_MAPPING</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 class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="s2">&quot;</span><span class="si">%c</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="s2">&quot;</span><span class="si">%e</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-103"><a href="#L-103"><span class="linenos">103</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-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="s2">&quot;</span><span class="si">%i</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&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;</span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&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;%S&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&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;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&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;%k&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&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;%l&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="s2">&quot;%T&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;%W&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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="p">}</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</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 class="p">(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</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 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-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="n">KEYWORDS</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="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-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;CHARSET&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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="s2">&quot;FORCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="s2">&quot;IGNORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;MEMBER OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">,</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">&quot;SEPARATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">,</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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">BIGINT</span><span class="p">,</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">&quot;SIGNED INTEGER&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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;UNSIGNED&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-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">&quot;UNSIGNED INTEGER&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-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="s2">&quot;_ARMSCII8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="s2">&quot;_ASCII&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="s2">&quot;_BIG5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</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">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;_CP1250&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">&quot;_CP1251&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot;_CP1256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;_CP1257&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="s2">&quot;_CP850&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">&quot;_CP852&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">&quot;_CP866&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="s2">&quot;_CP932&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="s2">&quot;_DEC8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="s2">&quot;_EUCJPMS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">&quot;_EUCKR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">&quot;_GB18030&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;_GB2312&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;_GBK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;_GEOSTD8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;_GREEK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;_HEBREW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;_HP8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;_KEYBCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;_KOI8R&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;_KOI8U&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">&quot;_LATIN1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;_LATIN2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;_LATIN5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;_LATIN7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;_MACCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;_MACROMAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;_SJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;_SWE7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;_TIS620&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;_UCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;_UJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/string-literals.html</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;_UTF8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">&quot;_UTF16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">&quot;_UTF16LE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="s2">&quot;_UTF32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="s2">&quot;_UTF8MB3&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="s2">&quot;_UTF8MB4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">,</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <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">COMMANDS</span> <span class="o">=</span> <span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span> <span class="o">-</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-186"><a href="#L-186"><span class="linenos">186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">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-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">FUNC_TOKENS</span> <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="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">,</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</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">SCHEMA</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</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><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-196"><a href="#L-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">CONJUNCTION</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</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-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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">TABLE_ALIAS_TOKENS</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="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="p">)</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-206"><a href="#L-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">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</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="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_expression</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="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><span id="L-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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;mysql&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;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-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="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 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 class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span 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="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">&quot;STR_TO_DATE&quot;</span><span class="p">:</span> <span class="n">_str_to_date</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><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;GROUP_CONCAT&quot;</span><span class="p">:</span> <span class="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-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">separator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</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 class="c1"># https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="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-233"><a href="#L-233"><span class="linenos">233</span></a> <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="s2">&quot;VALUES&quot;</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_id_var</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="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="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show</span><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><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">SHOW_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">&quot;MASTER LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">),</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;COLLATION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLLATION&quot;</span><span class="p">),</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;FULL COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</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;CREATE TABLE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</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;CREATE TRIGGER&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;DATABASES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;DATABASES&quot;</span><span class="p">),</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;STORAGE ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;ERRORS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ERRORS&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;EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;EVENTS&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;FUNCTION CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION STATUS&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;GRANTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FOR&quot;</span><span class="p">),</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">),</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;PLUGINS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PLUGINS&quot;</span><span class="p">),</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">),</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;FULL PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">),</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILE&quot;</span><span class="p">),</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;PROFILES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILES&quot;</span><span class="p">),</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">),</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="s2">&quot;REPLICAS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="s2">&quot;SLAVE HOSTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="s2">&quot;SLAVE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;GLOBAL STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</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-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;SESSION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">),</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;FULL TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">),</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="s2">&quot;TRIGGERS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TRIGGERS&quot;</span><span class="p">),</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="s2">&quot;GLOBAL VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</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-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="s2">&quot;SESSION VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="s2">&quot;VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="s2">&quot;WARNINGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;WARNINGS&quot;</span><span class="p">),</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="p">}</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;PERSIST&quot;</span><span class="p">:</span> <span class="k">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;PERSIST&quot;</span><span class="p">),</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="s2">&quot;PERSIST_ONLY&quot;</span><span class="p">:</span> <span class="k">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;PERSIST_ONLY&quot;</span><span class="p">),</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</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_set_item_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">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_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="s2">&quot;NAMES&quot;</span><span class="p">:</span> <span class="k">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_names</span><span class="p">(),</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="p">}</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;FULLTEXT&quot;</span><span class="p">),</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(),</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="s2">&quot;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_index_constraint</span><span class="p">(),</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;SPATIAL&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><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">,</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">,</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="s2">&quot;KEY&quot;</span><span class="p">,</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="p">}</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">PROFILE_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;BLOCK IO&quot;</span><span class="p">,</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;CONTEXT SWITCHES&quot;</span><span class="p">,</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="s2">&quot;IPC&quot;</span><span class="p">,</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="s2">&quot;MEMORY&quot;</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="s2">&quot;PAGE FAULTS&quot;</span><span class="p">,</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="s2">&quot;SWAPS&quot;</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">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</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">SET</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">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</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">SET</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">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">def</span> <span class="nf">_parse_index_constraint</span><span class="p">(</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="bp">self</span><span class="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-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</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="n">kind</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">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
-</span><span id="L-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">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="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">schema</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-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="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">while</span> <span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY_BLOCK_SIZE&quot;</span><span class="p">):</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="bp">self</span><span class="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-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">key_block_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-360"><a href="#L-360"><span class="linenos">360</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-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">using</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 class="p">)</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</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;PARSER&quot;</span><span class="p">):</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</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;VISIBLE&quot;</span><span class="p">):</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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;INVISIBLE&quot;</span><span class="p">):</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="bp">self</span><span 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-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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-376"><a href="#L-376"><span class="linenos">376</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;SECONDARY_ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="bp">self</span><span 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-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">secondary_engine_attr</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-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">:</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">break</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">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">,</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">this</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="nb">type</span><span class="o">=</span><span class="n">type_</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="p">)</span>
+</span><span id="L-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">class</span> <span class="nc">MySQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/identifiers.html</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</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="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %T&#39;&quot;</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</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="c1"># https://prestodb.io/docs/current/functions/datetime.html#mysql-date-functions</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;</span><span class="si">%c</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&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;</span><span class="si">%e</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-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="s2">&quot;</span><span class="si">%i</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&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;%k&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&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;%l&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&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;%T&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&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;%W&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-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><span id="L-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</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 class="p">(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</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 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-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">KEYWORDS</span> <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">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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="s2">&quot;CHARSET&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-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="s2">&quot;FORCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="s2">&quot;IGNORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;MEMBER OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">,</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">&quot;SEPARATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">,</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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">BIGINT</span><span class="p">,</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="s2">&quot;SIGNED INTEGER&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;UNSIGNED&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-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;UNSIGNED INTEGER&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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot;_ARMSCII8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;_ASCII&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="s2">&quot;_BIG5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</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">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">&quot;_CP1250&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="s2">&quot;_CP1251&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="s2">&quot;_CP1256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="s2">&quot;_CP1257&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">&quot;_CP850&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">&quot;_CP852&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;_CP866&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;_CP932&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;_DEC8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;_EUCJPMS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;_EUCKR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;_GB18030&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;_GB2312&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;_GBK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;_GEOSTD8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">&quot;_GREEK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;_HEBREW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;_HP8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;_KEYBCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;_KOI8R&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;_KOI8U&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;_LATIN1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;_LATIN2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;_LATIN5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;_LATIN7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;_MACCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;_MACROMAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;_SJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">&quot;_SWE7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">&quot;_TIS620&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="s2">&quot;_UCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="s2">&quot;_UJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/string-literals.html</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;_UTF8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="s2">&quot;_UTF16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">&quot;_UTF16LE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">&quot;_UTF32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="s2">&quot;_UTF8MB3&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">&quot;_UTF8MB4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</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">COMMANDS</span> <span class="o">=</span> <span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span> <span class="o">-</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-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">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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</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">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">,</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</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">CONJUNCTION</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">CONJUNCTION</span><span class="p">,</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">DAMP</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-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">,</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</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">Or</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="c1"># MySQL uses || as a synonym to the logical OR operator</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_or</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">BITWISE</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">BITWISE</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">BITWISE</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</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">TABLE_ALIAS_TOKENS</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="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <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">RANGE_PARSERS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">,</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</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_expression</span><span class="p">),</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="p">),</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="p">}</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">FUNCTIONS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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;mysql&quot;</span><span class="p">),</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;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-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="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 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 class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span 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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;STR_TO_DATE&quot;</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="p">}</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="o">**</span><span class="n">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-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;GROUP_CONCAT&quot;</span><span class="p">:</span> <span class="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-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">separator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</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 class="c1"># https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="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-247"><a href="#L-247"><span class="linenos">247</span></a> <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="s2">&quot;VALUES&quot;</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_id_var</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 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">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show</span><span class="p">(),</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="p">}</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">SHOW_PARSERS</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="s2">&quot;BINARY LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;MASTER LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">),</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;COLLATION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLLATION&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;FULL COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">,</span> <span class="n">target</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="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;DATABASES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;DATABASES&quot;</span><span class="p">),</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;STORAGE ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;ERRORS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ERRORS&quot;</span><span class="p">),</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;EVENTS&quot;</span><span class="p">),</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FOR&quot;</span><span class="p">),</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">),</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;PLUGINS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PLUGINS&quot;</span><span class="p">),</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">),</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;FULL PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">),</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILE&quot;</span><span class="p">),</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="s2">&quot;PROFILES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILES&quot;</span><span class="p">),</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">),</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="s2">&quot;REPLICAS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="s2">&quot;SLAVE HOSTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="s2">&quot;SLAVE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="s2">&quot;GLOBAL STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</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-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;SESSION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="s2">&quot;STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">),</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;FULL TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="s2">&quot;TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">),</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="s2">&quot;TRIGGERS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TRIGGERS&quot;</span><span class="p">),</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="s2">&quot;GLOBAL VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</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-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="s2">&quot;SESSION VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="s2">&quot;VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="s2">&quot;WARNINGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;WARNINGS&quot;</span><span class="p">),</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="p">}</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="s2">&quot;PERSIST&quot;</span><span class="p">:</span> <span class="k">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;PERSIST&quot;</span><span class="p">),</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="s2">&quot;PERSIST_ONLY&quot;</span><span class="p">:</span> <span class="k">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;PERSIST_ONLY&quot;</span><span class="p">),</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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_set_item_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">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_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="s2">&quot;NAMES&quot;</span><span class="p">:</span> <span class="k">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_names</span><span class="p">(),</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="p">}</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;FULLTEXT&quot;</span><span class="p">),</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(),</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;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_index_constraint</span><span class="p">(),</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;SPATIAL&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">SCHEMA_UNNAMED_CONSTRAINTS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">,</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="s2">&quot;KEY&quot;</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">,</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="p">}</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">PROFILE_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="s2">&quot;BLOCK IO&quot;</span><span class="p">,</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="s2">&quot;CONTEXT SWITCHES&quot;</span><span class="p">,</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="s2">&quot;IPC&quot;</span><span class="p">,</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="s2">&quot;MEMORY&quot;</span><span class="p">,</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="s2">&quot;PAGE FAULTS&quot;</span><span class="p">,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="s2">&quot;SWAPS&quot;</span><span class="p">,</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="p">}</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <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="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</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">ENUM_TYPE_TOKENS</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">SET</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">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="k">def</span> <span class="nf">_parse_index_constraint</span><span class="p">(</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</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-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</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="n">kind</span><span class="p">:</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
+</span><span id="L-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">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="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</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 class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">if</span> <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_BLOCK_SIZE&quot;</span><span class="p">):</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="bp">self</span><span 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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">key_block_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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">using</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 class="p">)</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</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;PARSER&quot;</span><span class="p">):</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</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">COMMENT</span><span class="p">):</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</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;VISIBLE&quot;</span><span class="p">):</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</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;INVISIBLE&quot;</span><span class="p">):</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="bp">self</span><span 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-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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-387"><a href="#L-387"><span class="linenos">387</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="bp">self</span><span 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-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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-390"><a href="#L-390"><span class="linenos">390</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;SECONDARY_ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="bp">self</span><span 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-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">secondary_engine_attr</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-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">def</span> <span class="nf">_parse_show_mysql</span><span class="p">(</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">target</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">full</span><span 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-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">global_</span><span 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-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">if</span> <span class="n">target</span><span class="p">:</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">target_id</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-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">target_id</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">:</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">break</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">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">,</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="n">this</span><span class="p">,</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="nb">type</span><span class="o">=</span><span class="n">type_</span><span class="p">,</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</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 class="n">log</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;IN&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">,</span> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">}:</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">position</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">db</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-421"><a href="#L-421"><span class="linenos">421</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">DOT</span><span class="p">):</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">target_id</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">target_id</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-424"><a href="#L-424"><span class="linenos">424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">channel</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="k">if</span> <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;CHANNEL&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</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="n">like</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;LIKE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</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-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">this</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">types</span> <span 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_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROFILE_TYPES</span><span class="p">))</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">query</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="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;QUERY&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="n">offset</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">limit</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">types</span><span class="p">,</span> <span class="n">query</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_oldstyle_limit</span><span class="p">()</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">_parse_show_mysql</span><span class="p">(</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">target</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">full</span><span 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-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">global_</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="k">if</span> <span class="n">target</span><span class="p">:</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">target_id</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-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">target_id</span> <span class="o">=</span> <span class="kc">None</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">log</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;IN&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">,</span> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">}:</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">position</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">db</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-435"><a href="#L-435"><span class="linenos">435</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">DOT</span><span class="p">):</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">target_id</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">target_id</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-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">mutex</span> <span class="o">=</span> <span class="kc">True</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;MUTEX&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">False</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;STATUS&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">mutex</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">return</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">Show</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">target</span><span class="o">=</span><span class="n">target_id</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">full</span><span class="o">=</span><span class="n">full</span><span class="p">,</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">log</span><span class="o">=</span><span class="n">log</span><span class="p">,</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">like</span><span class="o">=</span><span class="n">like</span><span class="p">,</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">types</span><span class="o">=</span><span class="n">types</span><span class="p">,</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">mutex</span><span class="o">=</span><span class="n">mutex</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</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-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="p">)</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">_parse_oldstyle_limit</span><span class="p">(</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">):</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</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-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</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="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</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 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-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-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">_parse_set_item_names</span><span class="p">(</span><span class="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-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLATE&quot;</span><span class="p">):</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">charset</span><span class="p">,</span> <span class="n">collate</span><span class="o">=</span><span class="n">collate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;NAMES&quot;</span><span class="p">)</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">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-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="o">**</span><span class="n">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-500"><a href="#L-500"><span class="linenos">500</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-501"><a href="#L-501"><span class="linenos">501</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 class="s2">&quot;DATEDIFF&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-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</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-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="n">_date_trunc_sql</span><span class="p">,</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</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-507"><a href="#L-507"><span class="linenos">507</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-508"><a href="#L-508"><span class="linenos">508</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-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;this&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2"> SEPARATOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;separator&quot;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s2">&quot;&#39;,&#39;&quot;</span><span class="si">}</span><span class="s2">)&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</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-511"><a href="#L-511"><span class="linenos">511</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-512"><a href="#L-512"><span class="linenos">512</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-513"><a href="#L-513"><span class="linenos">513</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-514"><a href="#L-514"><span class="linenos">514</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-515"><a href="#L-515"><span class="linenos">515</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-516"><a href="#L-516"><span class="linenos">516</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-517"><a href="#L-517"><span class="linenos">517</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-518"><a href="#L-518"><span class="linenos">518</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-519"><a href="#L-519"><span class="linenos">519</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-520"><a href="#L-520"><span class="linenos">520</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-521"><a href="#L-521"><span class="linenos">521</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-522"><a href="#L-522"><span class="linenos">522</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-523"><a href="#L-523"><span class="linenos">523</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">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;datetime&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</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-525"><a href="#L-525"><span class="linenos">525</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-526"><a href="#L-526"><span class="linenos">526</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-527"><a href="#L-527"><span class="linenos">527</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-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="p">}</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</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-531"><a href="#L-531"><span class="linenos">531</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-532"><a href="#L-532"><span class="linenos">532</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-533"><a href="#L-533"><span class="linenos">533</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-534"><a href="#L-534"><span class="linenos">534</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-535"><a href="#L-535"><span class="linenos">535</span></a>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</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-539"><a href="#L-539"><span class="linenos">539</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-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">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="c1"># MySQL doesn&#39;t support many datatypes in cast.</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UNSIGNED&quot;</span><span class="p">,</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</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="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</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-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="k">return</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><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">channel</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="k">if</span> <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;CHANNEL&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</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="n">like</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;LIKE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</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-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="n">this</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">types</span> <span 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_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROFILE_TYPES</span><span class="p">))</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">query</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="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;QUERY&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">offset</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">limit</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">types</span><span class="p">,</span> <span class="n">query</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_oldstyle_limit</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">mutex</span> <span class="o">=</span> <span class="kc">True</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;MUTEX&quot;</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="n">mutex</span> <span class="o">=</span> <span class="kc">False</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;STATUS&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">mutex</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">,</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">target</span><span class="o">=</span><span class="n">target_id</span><span class="p">,</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">full</span><span class="o">=</span><span class="n">full</span><span class="p">,</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">log</span><span class="o">=</span><span class="n">log</span><span class="p">,</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">like</span><span class="o">=</span><span class="n">like</span><span class="p">,</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">types</span><span class="o">=</span><span class="n">types</span><span class="p">,</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">mutex</span><span class="o">=</span><span class="n">mutex</span><span class="p">,</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</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-473"><a href="#L-473"><span class="linenos">473</span></a> <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">_parse_oldstyle_limit</span><span class="p">(</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="p">)</span> <span 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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="kc">None</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="kc">None</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">):</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</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-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</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">return</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_names</span><span class="p">(</span><span class="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-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLATE&quot;</span><span class="p">):</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">charset</span><span class="p">,</span> <span class="n">collate</span><span class="o">=</span><span class="n">collate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;NAMES&quot;</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">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-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="c1"># mysql binary is special and can work anywhere, even in order by operations</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="c1"># it operates like a no paren func</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</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-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">_parse_column</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-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="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">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-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">LOCKING_READS_SUPPORTED</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="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="n">JOIN_HINTS</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="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span 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-526"><a href="#L-526"><span class="linenos">526</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-527"><a href="#L-527"><span class="linenos">527</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 class="s2">&quot;DATEDIFF&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-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</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-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="n">_date_trunc_sql</span><span class="p">,</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-533"><a href="#L-533"><span class="linenos">533</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-534"><a href="#L-534"><span class="linenos">534</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-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;this&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2"> SEPARATOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;separator&quot;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s2">&quot;&#39;,&#39;&quot;</span><span class="si">}</span><span class="s2">)&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">:</span> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-542"><a href="#L-542"><span class="linenos">542</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-543"><a href="#L-543"><span class="linenos">543</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-544"><a href="#L-544"><span class="linenos">544</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-545"><a href="#L-545"><span class="linenos">545</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-546"><a href="#L-546"><span class="linenos">546</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-547"><a href="#L-547"><span class="linenos">547</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-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Stuff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;INSERT&quot;</span><span class="p">),</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-551"><a href="#L-551"><span class="linenos">551</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">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;datetime&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</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-553"><a href="#L-553"><span class="linenos">553</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-554"><a href="#L-554"><span class="linenos">554</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-555"><a href="#L-555"><span class="linenos">555</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-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="p">}</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</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-559"><a href="#L-559"><span class="linenos">559</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-560"><a href="#L-560"><span class="linenos">560</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-561"><a href="#L-561"><span class="linenos">561</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-562"><a href="#L-562"><span class="linenos">562</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-563"><a href="#L-563"><span class="linenos">563</span></a>
+</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</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-567"><a href="#L-567"><span class="linenos">567</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-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="p">}</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-572"><a href="#L-572"><span class="linenos">572</span></a>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</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-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos">579</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-580"><a href="#L-580"><span class="linenos">580</span></a>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="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-582"><a href="#L-582"><span class="linenos">582</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-583"><a href="#L-583"><span class="linenos">583</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-584"><a href="#L-584"><span class="linenos">584</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-585"><a href="#L-585"><span class="linenos">585</span></a>
-</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="n">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-587"><a href="#L-587"><span class="linenos">587</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-588"><a href="#L-588"><span class="linenos">588</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-589"><a href="#L-589"><span class="linenos">589</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-590"><a href="#L-590"><span class="linenos">590</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-591"><a href="#L-591"><span class="linenos">591</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-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="c1"># MySQL doesn&#39;t support many datatypes in cast.</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;CHAR&quot;</span><span class="p">,</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UNSIGNED&quot;</span><span class="p">,</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;CHAR&quot;</span><span class="p">,</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="p">}</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a>
+</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="k">def</span> <span class="nf">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-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="k">return</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><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a>
-</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="n">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-594"><a href="#L-594"><span class="linenos">594</span></a>
-</span><span id="L-595"><a href="#L-595"><span class="linenos">595</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-596"><a href="#L-596"><span class="linenos">596</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-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a>
-</span><span id="L-598"><a href="#L-598"><span class="linenos">598</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-599"><a href="#L-599"><span class="linenos">599</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-600"><a href="#L-600"><span class="linenos">600</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-601"><a href="#L-601"><span class="linenos">601</span></a>
-</span><span id="L-602"><a href="#L-602"><span class="linenos">602</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-603"><a href="#L-603"><span class="linenos">603</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-604"><a href="#L-604"><span class="linenos">604</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-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos">607</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-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-600"><a href="#L-600"><span class="linenos">600</span></a>
+</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a>
+</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos">605</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-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="k">return</span> <span class="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-608"><a href="#L-608"><span class="linenos">608</span></a>
-</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="n">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-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</span></a>
-</span><span id="L-612"><a href="#L-612"><span class="linenos">612</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-609"><a href="#L-609"><span class="linenos">609</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-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</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-613"><a href="#L-613"><span class="linenos">613</span></a>
-</span><span id="L-614"><a href="#L-614"><span class="linenos">614</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-615"><a href="#L-615"><span class="linenos">615</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-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a>
-</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a> <span class="k">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-614"><a href="#L-614"><span class="linenos">614</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-615"><a href="#L-615"><span class="linenos">615</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-616"><a href="#L-616"><span class="linenos">616</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-617"><a href="#L-617"><span class="linenos">617</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-618"><a href="#L-618"><span class="linenos">618</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-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</span></a>
-</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="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-622"><a href="#L-622"><span class="linenos">622</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-623"><a href="#L-623"><span class="linenos">623</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 class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a>
-</span><span id="L-625"><a href="#L-625"><span class="linenos">625</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-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</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-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos">629</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-630"><a href="#L-630"><span class="linenos">630</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-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-621"><a href="#L-621"><span class="linenos">621</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-622"><a href="#L-622"><span class="linenos">622</span></a>
+</span><span id="L-623"><a href="#L-623"><span class="linenos">623</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-624"><a href="#L-624"><span class="linenos">624</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-625"><a href="#L-625"><span class="linenos">625</span></a>
+</span><span id="L-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</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-628"><a href="#L-628"><span class="linenos">628</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-629"><a href="#L-629"><span class="linenos">629</span></a>
+</span><span id="L-630"><a href="#L-630"><span class="linenos">630</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-631"><a href="#L-631"><span class="linenos">631</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-632"><a href="#L-632"><span class="linenos">632</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-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos">635</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-636"><a href="#L-636"><span class="linenos">636</span></a>
+</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="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-638"><a href="#L-638"><span class="linenos">638</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-639"><a href="#L-639"><span class="linenos">639</span></a>
+</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="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-641"><a href="#L-641"><span class="linenos">641</span></a>
+</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="k">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-643"><a href="#L-643"><span class="linenos">643</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-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a>
+</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="k">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-648"><a href="#L-648"><span class="linenos">648</span></a>
+</span><span id="L-649"><a href="#L-649"><span class="linenos">649</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-650"><a href="#L-650"><span class="linenos">650</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-651"><a href="#L-651"><span class="linenos">651</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 class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a>
+</span><span id="L-653"><a href="#L-653"><span class="linenos">653</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-654"><a href="#L-654"><span class="linenos">654</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-655"><a href="#L-655"><span class="linenos">655</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-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos">657</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-658"><a href="#L-658"><span class="linenos">658</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-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -966,548 +1015,587 @@
</div>
<a class="headerlink" href="#MySQL"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL-96"><a href="#MySQL-96"><span class="linenos"> 96</span></a><span class="k">class</span> <span class="nc">MySQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="MySQL-97"><a href="#MySQL-97"><span class="linenos"> 97</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"> %T&#39;&quot;</span>
-</span><span id="MySQL-98"><a href="#MySQL-98"><span class="linenos"> 98</span></a>
-</span><span id="MySQL-99"><a href="#MySQL-99"><span class="linenos"> 99</span></a> <span class="c1"># https://prestodb.io/docs/current/functions/datetime.html#mysql-date-functions</span>
-</span><span id="MySQL-100"><a href="#MySQL-100"><span class="linenos">100</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-101"><a href="#MySQL-101"><span class="linenos">101</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="MySQL-102"><a href="#MySQL-102"><span class="linenos">102</span></a> <span class="s2">&quot;</span><span class="si">%c</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="MySQL-103"><a href="#MySQL-103"><span class="linenos">103</span></a> <span class="s2">&quot;</span><span class="si">%e</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="MySQL-104"><a href="#MySQL-104"><span class="linenos">104</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="MySQL-105"><a href="#MySQL-105"><span class="linenos">105</span></a> <span class="s2">&quot;</span><span class="si">%i</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="MySQL-106"><a href="#MySQL-106"><span class="linenos">106</span></a> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="MySQL-107"><a href="#MySQL-107"><span class="linenos">107</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="MySQL-108"><a href="#MySQL-108"><span class="linenos">108</span></a> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="MySQL-109"><a href="#MySQL-109"><span class="linenos">109</span></a> <span class="s2">&quot;%k&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="MySQL-110"><a href="#MySQL-110"><span class="linenos">110</span></a> <span class="s2">&quot;%l&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="MySQL-111"><a href="#MySQL-111"><span class="linenos">111</span></a> <span class="s2">&quot;%T&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="MySQL-112"><a href="#MySQL-112"><span class="linenos">112</span></a> <span class="s2">&quot;%W&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="MySQL-113"><a href="#MySQL-113"><span class="linenos">113</span></a> <span class="p">}</span>
-</span><span id="MySQL-114"><a href="#MySQL-114"><span class="linenos">114</span></a>
-</span><span id="MySQL-115"><a href="#MySQL-115"><span class="linenos">115</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="MySQL-116"><a href="#MySQL-116"><span class="linenos">116</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="MySQL-117"><a href="#MySQL-117"><span class="linenos">117</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="MySQL-118"><a href="#MySQL-118"><span class="linenos">118</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="MySQL-119"><a href="#MySQL-119"><span class="linenos">119</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="MySQL-120"><a href="#MySQL-120"><span class="linenos">120</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 class="p">(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="MySQL-121"><a href="#MySQL-121"><span class="linenos">121</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 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="MySQL-122"><a href="#MySQL-122"><span class="linenos">122</span></a>
-</span><span id="MySQL-123"><a href="#MySQL-123"><span class="linenos">123</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-124"><a href="#MySQL-124"><span class="linenos">124</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="MySQL-125"><a href="#MySQL-125"><span class="linenos">125</span></a> <span class="s2">&quot;CHARSET&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="MySQL-126"><a href="#MySQL-126"><span class="linenos">126</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="MySQL-127"><a href="#MySQL-127"><span class="linenos">127</span></a> <span class="s2">&quot;FORCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span>
-</span><span id="MySQL-128"><a href="#MySQL-128"><span class="linenos">128</span></a> <span class="s2">&quot;IGNORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span>
-</span><span id="MySQL-129"><a href="#MySQL-129"><span class="linenos">129</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="MySQL-130"><a href="#MySQL-130"><span class="linenos">130</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
-</span><span id="MySQL-131"><a href="#MySQL-131"><span class="linenos">131</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="MySQL-132"><a href="#MySQL-132"><span class="linenos">132</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
-</span><span id="MySQL-133"><a href="#MySQL-133"><span class="linenos">133</span></a> <span class="s2">&quot;MEMBER OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">,</span>
-</span><span id="MySQL-134"><a href="#MySQL-134"><span class="linenos">134</span></a> <span class="s2">&quot;SEPARATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">,</span>
-</span><span id="MySQL-135"><a href="#MySQL-135"><span class="linenos">135</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="MySQL-136"><a href="#MySQL-136"><span class="linenos">136</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">BIGINT</span><span class="p">,</span>
-</span><span id="MySQL-137"><a href="#MySQL-137"><span class="linenos">137</span></a> <span class="s2">&quot;SIGNED INTEGER&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="MySQL-138"><a href="#MySQL-138"><span class="linenos">138</span></a> <span class="s2">&quot;UNSIGNED&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="MySQL-139"><a href="#MySQL-139"><span class="linenos">139</span></a> <span class="s2">&quot;UNSIGNED INTEGER&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="MySQL-140"><a href="#MySQL-140"><span class="linenos">140</span></a> <span class="s2">&quot;_ARMSCII8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-141"><a href="#MySQL-141"><span class="linenos">141</span></a> <span class="s2">&quot;_ASCII&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-142"><a href="#MySQL-142"><span class="linenos">142</span></a> <span class="s2">&quot;_BIG5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-143"><a href="#MySQL-143"><span class="linenos">143</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">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-144"><a href="#MySQL-144"><span class="linenos">144</span></a> <span class="s2">&quot;_CP1250&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-145"><a href="#MySQL-145"><span class="linenos">145</span></a> <span class="s2">&quot;_CP1251&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-146"><a href="#MySQL-146"><span class="linenos">146</span></a> <span class="s2">&quot;_CP1256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-147"><a href="#MySQL-147"><span class="linenos">147</span></a> <span class="s2">&quot;_CP1257&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-148"><a href="#MySQL-148"><span class="linenos">148</span></a> <span class="s2">&quot;_CP850&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-149"><a href="#MySQL-149"><span class="linenos">149</span></a> <span class="s2">&quot;_CP852&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-150"><a href="#MySQL-150"><span class="linenos">150</span></a> <span class="s2">&quot;_CP866&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-151"><a href="#MySQL-151"><span class="linenos">151</span></a> <span class="s2">&quot;_CP932&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-152"><a href="#MySQL-152"><span class="linenos">152</span></a> <span class="s2">&quot;_DEC8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-153"><a href="#MySQL-153"><span class="linenos">153</span></a> <span class="s2">&quot;_EUCJPMS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-154"><a href="#MySQL-154"><span class="linenos">154</span></a> <span class="s2">&quot;_EUCKR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-155"><a href="#MySQL-155"><span class="linenos">155</span></a> <span class="s2">&quot;_GB18030&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-156"><a href="#MySQL-156"><span class="linenos">156</span></a> <span class="s2">&quot;_GB2312&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-157"><a href="#MySQL-157"><span class="linenos">157</span></a> <span class="s2">&quot;_GBK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-158"><a href="#MySQL-158"><span class="linenos">158</span></a> <span class="s2">&quot;_GEOSTD8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-159"><a href="#MySQL-159"><span class="linenos">159</span></a> <span class="s2">&quot;_GREEK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-160"><a href="#MySQL-160"><span class="linenos">160</span></a> <span class="s2">&quot;_HEBREW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-161"><a href="#MySQL-161"><span class="linenos">161</span></a> <span class="s2">&quot;_HP8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-162"><a href="#MySQL-162"><span class="linenos">162</span></a> <span class="s2">&quot;_KEYBCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-163"><a href="#MySQL-163"><span class="linenos">163</span></a> <span class="s2">&quot;_KOI8R&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-164"><a href="#MySQL-164"><span class="linenos">164</span></a> <span class="s2">&quot;_KOI8U&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-165"><a href="#MySQL-165"><span class="linenos">165</span></a> <span class="s2">&quot;_LATIN1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-166"><a href="#MySQL-166"><span class="linenos">166</span></a> <span class="s2">&quot;_LATIN2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-167"><a href="#MySQL-167"><span class="linenos">167</span></a> <span class="s2">&quot;_LATIN5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-168"><a href="#MySQL-168"><span class="linenos">168</span></a> <span class="s2">&quot;_LATIN7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-169"><a href="#MySQL-169"><span class="linenos">169</span></a> <span class="s2">&quot;_MACCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-170"><a href="#MySQL-170"><span class="linenos">170</span></a> <span class="s2">&quot;_MACROMAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-171"><a href="#MySQL-171"><span class="linenos">171</span></a> <span class="s2">&quot;_SJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-172"><a href="#MySQL-172"><span class="linenos">172</span></a> <span class="s2">&quot;_SWE7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-173"><a href="#MySQL-173"><span class="linenos">173</span></a> <span class="s2">&quot;_TIS620&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-174"><a href="#MySQL-174"><span class="linenos">174</span></a> <span class="s2">&quot;_UCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-175"><a href="#MySQL-175"><span class="linenos">175</span></a> <span class="s2">&quot;_UJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-176"><a href="#MySQL-176"><span class="linenos">176</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/string-literals.html</span>
-</span><span id="MySQL-177"><a href="#MySQL-177"><span class="linenos">177</span></a> <span class="s2">&quot;_UTF8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-178"><a href="#MySQL-178"><span class="linenos">178</span></a> <span class="s2">&quot;_UTF16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-179"><a href="#MySQL-179"><span class="linenos">179</span></a> <span class="s2">&quot;_UTF16LE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-180"><a href="#MySQL-180"><span class="linenos">180</span></a> <span class="s2">&quot;_UTF32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-181"><a href="#MySQL-181"><span class="linenos">181</span></a> <span class="s2">&quot;_UTF8MB3&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-182"><a href="#MySQL-182"><span class="linenos">182</span></a> <span class="s2">&quot;_UTF8MB4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL-183"><a href="#MySQL-183"><span class="linenos">183</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">,</span>
-</span><span id="MySQL-184"><a href="#MySQL-184"><span class="linenos">184</span></a> <span class="p">}</span>
-</span><span id="MySQL-185"><a href="#MySQL-185"><span class="linenos">185</span></a>
-</span><span id="MySQL-186"><a href="#MySQL-186"><span class="linenos">186</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span> <span class="o">-</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="MySQL-187"><a href="#MySQL-187"><span class="linenos">187</span></a>
-</span><span id="MySQL-188"><a href="#MySQL-188"><span class="linenos">188</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="MySQL-189"><a href="#MySQL-189"><span class="linenos">189</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-190"><a href="#MySQL-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">FUNC_TOKENS</span><span class="p">,</span>
-</span><span id="MySQL-191"><a href="#MySQL-191"><span class="linenos">191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
-</span><span id="MySQL-192"><a href="#MySQL-192"><span class="linenos">192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
-</span><span id="MySQL-193"><a href="#MySQL-193"><span class="linenos">193</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="MySQL-194"><a href="#MySQL-194"><span class="linenos">194</span></a> <span class="p">}</span>
-</span><span id="MySQL-195"><a href="#MySQL-195"><span class="linenos">195</span></a>
-</span><span id="MySQL-196"><a href="#MySQL-196"><span class="linenos">196</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-197"><a href="#MySQL-197"><span class="linenos">197</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">CONJUNCTION</span><span class="p">,</span>
-</span><span id="MySQL-198"><a href="#MySQL-198"><span class="linenos">198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</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="MySQL-199"><a href="#MySQL-199"><span class="linenos">199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">,</span>
-</span><span id="MySQL-200"><a href="#MySQL-200"><span class="linenos">200</span></a> <span class="p">}</span>
-</span><span id="MySQL-201"><a href="#MySQL-201"><span class="linenos">201</span></a>
-</span><span id="MySQL-202"><a href="#MySQL-202"><span class="linenos">202</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="MySQL-203"><a href="#MySQL-203"><span class="linenos">203</span></a> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span>
-</span><span id="MySQL-204"><a href="#MySQL-204"><span class="linenos">204</span></a> <span class="p">)</span>
-</span><span id="MySQL-205"><a href="#MySQL-205"><span class="linenos">205</span></a>
-</span><span id="MySQL-206"><a href="#MySQL-206"><span class="linenos">206</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-207"><a href="#MySQL-207"><span class="linenos">207</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL-208"><a href="#MySQL-208"><span class="linenos">208</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="MySQL-209"><a href="#MySQL-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">,</span>
-</span><span id="MySQL-210"><a href="#MySQL-210"><span class="linenos">210</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="MySQL-211"><a href="#MySQL-211"><span class="linenos">211</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_expression</span><span class="p">),</span>
-</span><span id="MySQL-212"><a href="#MySQL-212"><span class="linenos">212</span></a> <span class="p">),</span>
-</span><span id="MySQL-213"><a href="#MySQL-213"><span class="linenos">213</span></a> <span class="p">}</span>
-</span><span id="MySQL-214"><a href="#MySQL-214"><span class="linenos">214</span></a>
-</span><span id="MySQL-215"><a href="#MySQL-215"><span class="linenos">215</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-216"><a href="#MySQL-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><span id="MySQL-217"><a href="#MySQL-217"><span class="linenos">217</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="MySQL-218"><a href="#MySQL-218"><span class="linenos">218</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;mysql&quot;</span><span class="p">),</span>
-</span><span id="MySQL-219"><a href="#MySQL-219"><span class="linenos">219</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="MySQL-220"><a href="#MySQL-220"><span class="linenos">220</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="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 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 class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
-</span><span id="MySQL-221"><a href="#MySQL-221"><span class="linenos">221</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="MySQL-222"><a href="#MySQL-222"><span class="linenos">222</span></a> <span class="s2">&quot;STR_TO_DATE&quot;</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="MySQL-223"><a href="#MySQL-223"><span class="linenos">223</span></a> <span class="p">}</span>
-</span><span id="MySQL-224"><a href="#MySQL-224"><span class="linenos">224</span></a>
-</span><span id="MySQL-225"><a href="#MySQL-225"><span class="linenos">225</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-226"><a href="#MySQL-226"><span class="linenos">226</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="MySQL-227"><a href="#MySQL-227"><span class="linenos">227</span></a> <span class="s2">&quot;GROUP_CONCAT&quot;</span><span class="p">:</span> <span class="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="MySQL-228"><a href="#MySQL-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span>
-</span><span id="MySQL-229"><a href="#MySQL-229"><span class="linenos">229</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
-</span><span id="MySQL-230"><a href="#MySQL-230"><span class="linenos">230</span></a> <span class="n">separator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
-</span><span id="MySQL-231"><a href="#MySQL-231"><span class="linenos">231</span></a> <span class="p">),</span>
-</span><span id="MySQL-232"><a href="#MySQL-232"><span class="linenos">232</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values</span>
-</span><span id="MySQL-233"><a href="#MySQL-233"><span class="linenos">233</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="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="MySQL-234"><a href="#MySQL-234"><span class="linenos">234</span></a> <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="s2">&quot;VALUES&quot;</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_id_var</span><span class="p">()]</span>
-</span><span id="MySQL-235"><a href="#MySQL-235"><span class="linenos">235</span></a> <span class="p">),</span>
-</span><span id="MySQL-236"><a href="#MySQL-236"><span class="linenos">236</span></a> <span class="p">}</span>
-</span><span id="MySQL-237"><a href="#MySQL-237"><span class="linenos">237</span></a>
-</span><span id="MySQL-238"><a href="#MySQL-238"><span class="linenos">238</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-239"><a href="#MySQL-239"><span class="linenos">239</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL-240"><a href="#MySQL-240"><span class="linenos">240</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show</span><span class="p">(),</span>
-</span><span id="MySQL-241"><a href="#MySQL-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="MySQL-242"><a href="#MySQL-242"><span class="linenos">242</span></a>
-</span><span id="MySQL-243"><a href="#MySQL-243"><span class="linenos">243</span></a> <span class="n">SHOW_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-244"><a href="#MySQL-244"><span class="linenos">244</span></a> <span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-245"><a href="#MySQL-245"><span class="linenos">245</span></a> <span class="s2">&quot;MASTER LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-246"><a href="#MySQL-246"><span class="linenos">246</span></a> <span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-247"><a href="#MySQL-247"><span class="linenos">247</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL-248"><a href="#MySQL-248"><span class="linenos">248</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL-249"><a href="#MySQL-249"><span class="linenos">249</span></a> <span class="s2">&quot;COLLATION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLLATION&quot;</span><span class="p">),</span>
-</span><span id="MySQL-250"><a href="#MySQL-250"><span class="linenos">250</span></a> <span class="s2">&quot;FULL COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-251"><a href="#MySQL-251"><span class="linenos">251</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
-</span><span id="MySQL-252"><a href="#MySQL-252"><span class="linenos">252</span></a> <span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-253"><a href="#MySQL-253"><span class="linenos">253</span></a> <span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-254"><a href="#MySQL-254"><span class="linenos">254</span></a> <span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-255"><a href="#MySQL-255"><span class="linenos">255</span></a> <span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-256"><a href="#MySQL-256"><span class="linenos">256</span></a> <span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-257"><a href="#MySQL-257"><span class="linenos">257</span></a> <span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-258"><a href="#MySQL-258"><span class="linenos">258</span></a> <span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-259"><a href="#MySQL-259"><span class="linenos">259</span></a> <span class="s2">&quot;DATABASES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;DATABASES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-260"><a href="#MySQL-260"><span class="linenos">260</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-261"><a href="#MySQL-261"><span class="linenos">261</span></a> <span class="s2">&quot;STORAGE ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-262"><a href="#MySQL-262"><span class="linenos">262</span></a> <span class="s2">&quot;ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-263"><a href="#MySQL-263"><span class="linenos">263</span></a> <span class="s2">&quot;ERRORS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ERRORS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-264"><a href="#MySQL-264"><span class="linenos">264</span></a> <span class="s2">&quot;EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;EVENTS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-265"><a href="#MySQL-265"><span class="linenos">265</span></a> <span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-266"><a href="#MySQL-266"><span class="linenos">266</span></a> <span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-267"><a href="#MySQL-267"><span class="linenos">267</span></a> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FOR&quot;</span><span class="p">),</span>
-</span><span id="MySQL-268"><a href="#MySQL-268"><span class="linenos">268</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
-</span><span id="MySQL-269"><a href="#MySQL-269"><span class="linenos">269</span></a> <span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-270"><a href="#MySQL-270"><span class="linenos">270</span></a> <span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-271"><a href="#MySQL-271"><span class="linenos">271</span></a> <span class="s2">&quot;PLUGINS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PLUGINS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-272"><a href="#MySQL-272"><span class="linenos">272</span></a> <span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-273"><a href="#MySQL-273"><span class="linenos">273</span></a> <span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-274"><a href="#MySQL-274"><span class="linenos">274</span></a> <span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-275"><a href="#MySQL-275"><span class="linenos">275</span></a> <span class="s2">&quot;FULL PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-276"><a href="#MySQL-276"><span class="linenos">276</span></a> <span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">),</span>
-</span><span id="MySQL-277"><a href="#MySQL-277"><span class="linenos">277</span></a> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILE&quot;</span><span class="p">),</span>
-</span><span id="MySQL-278"><a href="#MySQL-278"><span class="linenos">278</span></a> <span class="s2">&quot;PROFILES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-279"><a href="#MySQL-279"><span class="linenos">279</span></a> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-280"><a href="#MySQL-280"><span class="linenos">280</span></a> <span class="s2">&quot;REPLICAS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-281"><a href="#MySQL-281"><span class="linenos">281</span></a> <span class="s2">&quot;SLAVE HOSTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-282"><a href="#MySQL-282"><span class="linenos">282</span></a> <span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-283"><a href="#MySQL-283"><span class="linenos">283</span></a> <span class="s2">&quot;SLAVE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-284"><a href="#MySQL-284"><span class="linenos">284</span></a> <span class="s2">&quot;GLOBAL STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</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="MySQL-285"><a href="#MySQL-285"><span class="linenos">285</span></a> <span class="s2">&quot;SESSION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-286"><a href="#MySQL-286"><span class="linenos">286</span></a> <span class="s2">&quot;STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-287"><a href="#MySQL-287"><span class="linenos">287</span></a> <span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-288"><a href="#MySQL-288"><span class="linenos">288</span></a> <span class="s2">&quot;FULL TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL-289"><a href="#MySQL-289"><span class="linenos">289</span></a> <span class="s2">&quot;TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-290"><a href="#MySQL-290"><span class="linenos">290</span></a> <span class="s2">&quot;TRIGGERS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TRIGGERS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-291"><a href="#MySQL-291"><span class="linenos">291</span></a> <span class="s2">&quot;GLOBAL VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</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="MySQL-292"><a href="#MySQL-292"><span class="linenos">292</span></a> <span class="s2">&quot;SESSION VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-293"><a href="#MySQL-293"><span class="linenos">293</span></a> <span class="s2">&quot;VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL-294"><a href="#MySQL-294"><span class="linenos">294</span></a> <span class="s2">&quot;WARNINGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;WARNINGS&quot;</span><span class="p">),</span>
-</span><span id="MySQL-295"><a href="#MySQL-295"><span class="linenos">295</span></a> <span class="p">}</span>
-</span><span id="MySQL-296"><a href="#MySQL-296"><span class="linenos">296</span></a>
-</span><span id="MySQL-297"><a href="#MySQL-297"><span class="linenos">297</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-298"><a href="#MySQL-298"><span class="linenos">298</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">SET_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL-299"><a href="#MySQL-299"><span class="linenos">299</span></a> <span class="s2">&quot;PERSIST&quot;</span><span class="p">:</span> <span class="k">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;PERSIST&quot;</span><span class="p">),</span>
-</span><span id="MySQL-300"><a href="#MySQL-300"><span class="linenos">300</span></a> <span class="s2">&quot;PERSIST_ONLY&quot;</span><span class="p">:</span> <span class="k">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;PERSIST_ONLY&quot;</span><span class="p">),</span>
-</span><span id="MySQL-301"><a href="#MySQL-301"><span class="linenos">301</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_set_item_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL-302"><a href="#MySQL-302"><span class="linenos">302</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">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_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL-303"><a href="#MySQL-303"><span class="linenos">303</span></a> <span class="s2">&quot;NAMES&quot;</span><span class="p">:</span> <span class="k">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_names</span><span class="p">(),</span>
-</span><span id="MySQL-304"><a href="#MySQL-304"><span class="linenos">304</span></a> <span class="p">}</span>
-</span><span id="MySQL-305"><a href="#MySQL-305"><span class="linenos">305</span></a>
-</span><span id="MySQL-306"><a href="#MySQL-306"><span class="linenos">306</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-307"><a href="#MySQL-307"><span class="linenos">307</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL-308"><a href="#MySQL-308"><span class="linenos">308</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;FULLTEXT&quot;</span><span class="p">),</span>
-</span><span id="MySQL-309"><a href="#MySQL-309"><span class="linenos">309</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(),</span>
-</span><span id="MySQL-310"><a href="#MySQL-310"><span class="linenos">310</span></a> <span class="s2">&quot;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_index_constraint</span><span class="p">(),</span>
-</span><span id="MySQL-311"><a href="#MySQL-311"><span class="linenos">311</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;SPATIAL&quot;</span><span class="p">),</span>
-</span><span id="MySQL-312"><a href="#MySQL-312"><span class="linenos">312</span></a> <span class="p">}</span>
-</span><span id="MySQL-313"><a href="#MySQL-313"><span class="linenos">313</span></a>
-</span><span id="MySQL-314"><a href="#MySQL-314"><span class="linenos">314</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-315"><a href="#MySQL-315"><span class="linenos">315</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">,</span>
-</span><span id="MySQL-316"><a href="#MySQL-316"><span class="linenos">316</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">,</span>
-</span><span id="MySQL-317"><a href="#MySQL-317"><span class="linenos">317</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="MySQL-318"><a href="#MySQL-318"><span class="linenos">318</span></a> <span class="s2">&quot;KEY&quot;</span><span class="p">,</span>
-</span><span id="MySQL-319"><a href="#MySQL-319"><span class="linenos">319</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">,</span>
-</span><span id="MySQL-320"><a href="#MySQL-320"><span class="linenos">320</span></a> <span class="p">}</span>
-</span><span id="MySQL-321"><a href="#MySQL-321"><span class="linenos">321</span></a>
-</span><span id="MySQL-322"><a href="#MySQL-322"><span class="linenos">322</span></a> <span class="n">PROFILE_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-323"><a href="#MySQL-323"><span class="linenos">323</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">,</span>
-</span><span id="MySQL-324"><a href="#MySQL-324"><span class="linenos">324</span></a> <span class="s2">&quot;BLOCK IO&quot;</span><span class="p">,</span>
-</span><span id="MySQL-325"><a href="#MySQL-325"><span class="linenos">325</span></a> <span class="s2">&quot;CONTEXT SWITCHES&quot;</span><span class="p">,</span>
-</span><span id="MySQL-326"><a href="#MySQL-326"><span class="linenos">326</span></a> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span>
-</span><span id="MySQL-327"><a href="#MySQL-327"><span class="linenos">327</span></a> <span class="s2">&quot;IPC&quot;</span><span class="p">,</span>
-</span><span id="MySQL-328"><a href="#MySQL-328"><span class="linenos">328</span></a> <span class="s2">&quot;MEMORY&quot;</span><span class="p">,</span>
-</span><span id="MySQL-329"><a href="#MySQL-329"><span class="linenos">329</span></a> <span class="s2">&quot;PAGE FAULTS&quot;</span><span class="p">,</span>
-</span><span id="MySQL-330"><a href="#MySQL-330"><span class="linenos">330</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span>
-</span><span id="MySQL-331"><a href="#MySQL-331"><span class="linenos">331</span></a> <span class="s2">&quot;SWAPS&quot;</span><span class="p">,</span>
-</span><span id="MySQL-332"><a href="#MySQL-332"><span class="linenos">332</span></a> <span class="p">}</span>
-</span><span id="MySQL-333"><a href="#MySQL-333"><span class="linenos">333</span></a>
-</span><span id="MySQL-334"><a href="#MySQL-334"><span class="linenos">334</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-335"><a href="#MySQL-335"><span class="linenos">335</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="MySQL-336"><a href="#MySQL-336"><span class="linenos">336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="MySQL-337"><a href="#MySQL-337"><span class="linenos">337</span></a> <span class="p">}</span>
-</span><span id="MySQL-338"><a href="#MySQL-338"><span class="linenos">338</span></a>
-</span><span id="MySQL-339"><a href="#MySQL-339"><span class="linenos">339</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-340"><a href="#MySQL-340"><span class="linenos">340</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">ENUM_TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="MySQL-341"><a href="#MySQL-341"><span class="linenos">341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="MySQL-342"><a href="#MySQL-342"><span class="linenos">342</span></a> <span class="p">}</span>
-</span><span id="MySQL-343"><a href="#MySQL-343"><span class="linenos">343</span></a>
-</span><span id="MySQL-344"><a href="#MySQL-344"><span class="linenos">344</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="MySQL-345"><a href="#MySQL-345"><span class="linenos">345</span></a>
-</span><span id="MySQL-346"><a href="#MySQL-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="nf">_parse_index_constraint</span><span class="p">(</span>
-</span><span id="MySQL-347"><a href="#MySQL-347"><span class="linenos">347</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="MySQL-348"><a href="#MySQL-348"><span class="linenos">348</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">:</span>
-</span><span id="MySQL-349"><a href="#MySQL-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="MySQL-350"><a href="#MySQL-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
-</span><span id="MySQL-351"><a href="#MySQL-351"><span class="linenos">351</span></a>
-</span><span id="MySQL-352"><a href="#MySQL-352"><span class="linenos">352</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="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MySQL-353"><a href="#MySQL-353"><span class="linenos">353</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="MySQL-354"><a href="#MySQL-354"><span class="linenos">354</span></a> <span class="n">schema</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="MySQL-355"><a href="#MySQL-355"><span class="linenos">355</span></a>
-</span><span id="MySQL-356"><a href="#MySQL-356"><span class="linenos">356</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="MySQL-357"><a href="#MySQL-357"><span class="linenos">357</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="MySQL-358"><a href="#MySQL-358"><span class="linenos">358</span></a> <span class="k">if</span> <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_BLOCK_SIZE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-359"><a href="#MySQL-359"><span class="linenos">359</span></a> <span class="bp">self</span><span 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="MySQL-360"><a href="#MySQL-360"><span class="linenos">360</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">key_block_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="MySQL-361"><a href="#MySQL-361"><span class="linenos">361</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="MySQL-362"><a href="#MySQL-362"><span class="linenos">362</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">using</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 class="p">)</span>
-</span><span id="MySQL-363"><a href="#MySQL-363"><span class="linenos">363</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;PARSER&quot;</span><span class="p">):</span>
-</span><span id="MySQL-364"><a href="#MySQL-364"><span class="linenos">364</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="MySQL-365"><a href="#MySQL-365"><span class="linenos">365</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="MySQL-366"><a href="#MySQL-366"><span class="linenos">366</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="MySQL-367"><a href="#MySQL-367"><span class="linenos">367</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;VISIBLE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-368"><a href="#MySQL-368"><span class="linenos">368</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="MySQL-369"><a href="#MySQL-369"><span class="linenos">369</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;INVISIBLE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-370"><a href="#MySQL-370"><span class="linenos">370</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MySQL-371"><a href="#MySQL-371"><span class="linenos">371</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-372"><a href="#MySQL-372"><span class="linenos">372</span></a> <span class="bp">self</span><span 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="MySQL-373"><a href="#MySQL-373"><span class="linenos">373</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL-374"><a href="#MySQL-374"><span class="linenos">374</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-375"><a href="#MySQL-375"><span class="linenos">375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
-</span><span id="MySQL-376"><a href="#MySQL-376"><span class="linenos">376</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL-377"><a href="#MySQL-377"><span class="linenos">377</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;SECONDARY_ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-378"><a href="#MySQL-378"><span class="linenos">378</span></a> <span class="bp">self</span><span 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="MySQL-379"><a href="#MySQL-379"><span class="linenos">379</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">secondary_engine_attr</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="MySQL-380"><a href="#MySQL-380"><span class="linenos">380</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-381"><a href="#MySQL-381"><span class="linenos">381</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-382"><a href="#MySQL-382"><span class="linenos">382</span></a>
-</span><span id="MySQL-383"><a href="#MySQL-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">:</span>
-</span><span id="MySQL-384"><a href="#MySQL-384"><span class="linenos">384</span></a> <span class="k">break</span>
-</span><span id="MySQL-385"><a href="#MySQL-385"><span class="linenos">385</span></a>
-</span><span id="MySQL-386"><a href="#MySQL-386"><span class="linenos">386</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
-</span><span id="MySQL-387"><a href="#MySQL-387"><span class="linenos">387</span></a>
-</span><span id="MySQL-388"><a href="#MySQL-388"><span class="linenos">388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="MySQL-389"><a href="#MySQL-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">,</span>
-</span><span id="MySQL-390"><a href="#MySQL-390"><span class="linenos">390</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="MySQL-391"><a href="#MySQL-391"><span class="linenos">391</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="MySQL-392"><a href="#MySQL-392"><span class="linenos">392</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="MySQL-393"><a href="#MySQL-393"><span class="linenos">393</span></a> <span class="nb">type</span><span class="o">=</span><span class="n">type_</span><span class="p">,</span>
-</span><span id="MySQL-394"><a href="#MySQL-394"><span class="linenos">394</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="MySQL-395"><a href="#MySQL-395"><span class="linenos">395</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL-97"><a href="#MySQL-97"><span class="linenos"> 97</span></a><span class="k">class</span> <span class="nc">MySQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="MySQL-98"><a href="#MySQL-98"><span class="linenos"> 98</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/identifiers.html</span>
+</span><span id="MySQL-99"><a href="#MySQL-99"><span class="linenos"> 99</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL-100"><a href="#MySQL-100"><span class="linenos">100</span></a>
+</span><span id="MySQL-101"><a href="#MySQL-101"><span class="linenos">101</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"> %T&#39;&quot;</span>
+</span><span id="MySQL-102"><a href="#MySQL-102"><span class="linenos">102</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-103"><a href="#MySQL-103"><span class="linenos">103</span></a>
+</span><span id="MySQL-104"><a href="#MySQL-104"><span class="linenos">104</span></a> <span class="c1"># https://prestodb.io/docs/current/functions/datetime.html#mysql-date-functions</span>
+</span><span id="MySQL-105"><a href="#MySQL-105"><span class="linenos">105</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-106"><a href="#MySQL-106"><span class="linenos">106</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="MySQL-107"><a href="#MySQL-107"><span class="linenos">107</span></a> <span class="s2">&quot;</span><span class="si">%c</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="MySQL-108"><a href="#MySQL-108"><span class="linenos">108</span></a> <span class="s2">&quot;</span><span class="si">%e</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="MySQL-109"><a href="#MySQL-109"><span class="linenos">109</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="MySQL-110"><a href="#MySQL-110"><span class="linenos">110</span></a> <span class="s2">&quot;</span><span class="si">%i</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="MySQL-111"><a href="#MySQL-111"><span class="linenos">111</span></a> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="MySQL-112"><a href="#MySQL-112"><span class="linenos">112</span></a> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="MySQL-113"><a href="#MySQL-113"><span class="linenos">113</span></a> <span class="s2">&quot;%k&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="MySQL-114"><a href="#MySQL-114"><span class="linenos">114</span></a> <span class="s2">&quot;%l&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="MySQL-115"><a href="#MySQL-115"><span class="linenos">115</span></a> <span class="s2">&quot;%T&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="MySQL-116"><a href="#MySQL-116"><span class="linenos">116</span></a> <span class="s2">&quot;%W&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="MySQL-117"><a href="#MySQL-117"><span class="linenos">117</span></a> <span class="p">}</span>
+</span><span id="MySQL-118"><a href="#MySQL-118"><span class="linenos">118</span></a>
+</span><span id="MySQL-119"><a href="#MySQL-119"><span class="linenos">119</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="MySQL-120"><a href="#MySQL-120"><span class="linenos">120</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="MySQL-121"><a href="#MySQL-121"><span class="linenos">121</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="MySQL-122"><a href="#MySQL-122"><span class="linenos">122</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="MySQL-123"><a href="#MySQL-123"><span class="linenos">123</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="MySQL-124"><a href="#MySQL-124"><span class="linenos">124</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 class="p">(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="MySQL-125"><a href="#MySQL-125"><span class="linenos">125</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 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="MySQL-126"><a href="#MySQL-126"><span class="linenos">126</span></a>
+</span><span id="MySQL-127"><a href="#MySQL-127"><span class="linenos">127</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-128"><a href="#MySQL-128"><span class="linenos">128</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="MySQL-129"><a href="#MySQL-129"><span class="linenos">129</span></a> <span class="s2">&quot;CHARSET&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="MySQL-130"><a href="#MySQL-130"><span class="linenos">130</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="MySQL-131"><a href="#MySQL-131"><span class="linenos">131</span></a> <span class="s2">&quot;FORCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span>
+</span><span id="MySQL-132"><a href="#MySQL-132"><span class="linenos">132</span></a> <span class="s2">&quot;IGNORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span>
+</span><span id="MySQL-133"><a href="#MySQL-133"><span class="linenos">133</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
+</span><span id="MySQL-134"><a href="#MySQL-134"><span class="linenos">134</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
+</span><span id="MySQL-135"><a href="#MySQL-135"><span class="linenos">135</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
+</span><span id="MySQL-136"><a href="#MySQL-136"><span class="linenos">136</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
+</span><span id="MySQL-137"><a href="#MySQL-137"><span class="linenos">137</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
+</span><span id="MySQL-138"><a href="#MySQL-138"><span class="linenos">138</span></a> <span class="s2">&quot;MEMBER OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">,</span>
+</span><span id="MySQL-139"><a href="#MySQL-139"><span class="linenos">139</span></a> <span class="s2">&quot;SEPARATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">,</span>
+</span><span id="MySQL-140"><a href="#MySQL-140"><span class="linenos">140</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="MySQL-141"><a href="#MySQL-141"><span class="linenos">141</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">BIGINT</span><span class="p">,</span>
+</span><span id="MySQL-142"><a href="#MySQL-142"><span class="linenos">142</span></a> <span class="s2">&quot;SIGNED INTEGER&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="MySQL-143"><a href="#MySQL-143"><span class="linenos">143</span></a> <span class="s2">&quot;UNSIGNED&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="MySQL-144"><a href="#MySQL-144"><span class="linenos">144</span></a> <span class="s2">&quot;UNSIGNED INTEGER&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="MySQL-145"><a href="#MySQL-145"><span class="linenos">145</span></a> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</span>
+</span><span id="MySQL-146"><a href="#MySQL-146"><span class="linenos">146</span></a> <span class="s2">&quot;_ARMSCII8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-147"><a href="#MySQL-147"><span class="linenos">147</span></a> <span class="s2">&quot;_ASCII&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-148"><a href="#MySQL-148"><span class="linenos">148</span></a> <span class="s2">&quot;_BIG5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-149"><a href="#MySQL-149"><span class="linenos">149</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">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-150"><a href="#MySQL-150"><span class="linenos">150</span></a> <span class="s2">&quot;_CP1250&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-151"><a href="#MySQL-151"><span class="linenos">151</span></a> <span class="s2">&quot;_CP1251&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-152"><a href="#MySQL-152"><span class="linenos">152</span></a> <span class="s2">&quot;_CP1256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-153"><a href="#MySQL-153"><span class="linenos">153</span></a> <span class="s2">&quot;_CP1257&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-154"><a href="#MySQL-154"><span class="linenos">154</span></a> <span class="s2">&quot;_CP850&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-155"><a href="#MySQL-155"><span class="linenos">155</span></a> <span class="s2">&quot;_CP852&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-156"><a href="#MySQL-156"><span class="linenos">156</span></a> <span class="s2">&quot;_CP866&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-157"><a href="#MySQL-157"><span class="linenos">157</span></a> <span class="s2">&quot;_CP932&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-158"><a href="#MySQL-158"><span class="linenos">158</span></a> <span class="s2">&quot;_DEC8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-159"><a href="#MySQL-159"><span class="linenos">159</span></a> <span class="s2">&quot;_EUCJPMS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-160"><a href="#MySQL-160"><span class="linenos">160</span></a> <span class="s2">&quot;_EUCKR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-161"><a href="#MySQL-161"><span class="linenos">161</span></a> <span class="s2">&quot;_GB18030&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-162"><a href="#MySQL-162"><span class="linenos">162</span></a> <span class="s2">&quot;_GB2312&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-163"><a href="#MySQL-163"><span class="linenos">163</span></a> <span class="s2">&quot;_GBK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-164"><a href="#MySQL-164"><span class="linenos">164</span></a> <span class="s2">&quot;_GEOSTD8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-165"><a href="#MySQL-165"><span class="linenos">165</span></a> <span class="s2">&quot;_GREEK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-166"><a href="#MySQL-166"><span class="linenos">166</span></a> <span class="s2">&quot;_HEBREW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-167"><a href="#MySQL-167"><span class="linenos">167</span></a> <span class="s2">&quot;_HP8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-168"><a href="#MySQL-168"><span class="linenos">168</span></a> <span class="s2">&quot;_KEYBCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-169"><a href="#MySQL-169"><span class="linenos">169</span></a> <span class="s2">&quot;_KOI8R&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-170"><a href="#MySQL-170"><span class="linenos">170</span></a> <span class="s2">&quot;_KOI8U&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-171"><a href="#MySQL-171"><span class="linenos">171</span></a> <span class="s2">&quot;_LATIN1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-172"><a href="#MySQL-172"><span class="linenos">172</span></a> <span class="s2">&quot;_LATIN2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-173"><a href="#MySQL-173"><span class="linenos">173</span></a> <span class="s2">&quot;_LATIN5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-174"><a href="#MySQL-174"><span class="linenos">174</span></a> <span class="s2">&quot;_LATIN7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-175"><a href="#MySQL-175"><span class="linenos">175</span></a> <span class="s2">&quot;_MACCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-176"><a href="#MySQL-176"><span class="linenos">176</span></a> <span class="s2">&quot;_MACROMAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-177"><a href="#MySQL-177"><span class="linenos">177</span></a> <span class="s2">&quot;_SJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-178"><a href="#MySQL-178"><span class="linenos">178</span></a> <span class="s2">&quot;_SWE7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-179"><a href="#MySQL-179"><span class="linenos">179</span></a> <span class="s2">&quot;_TIS620&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-180"><a href="#MySQL-180"><span class="linenos">180</span></a> <span class="s2">&quot;_UCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-181"><a href="#MySQL-181"><span class="linenos">181</span></a> <span class="s2">&quot;_UJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-182"><a href="#MySQL-182"><span class="linenos">182</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/string-literals.html</span>
+</span><span id="MySQL-183"><a href="#MySQL-183"><span class="linenos">183</span></a> <span class="s2">&quot;_UTF8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-184"><a href="#MySQL-184"><span class="linenos">184</span></a> <span class="s2">&quot;_UTF16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-185"><a href="#MySQL-185"><span class="linenos">185</span></a> <span class="s2">&quot;_UTF16LE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-186"><a href="#MySQL-186"><span class="linenos">186</span></a> <span class="s2">&quot;_UTF32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-187"><a href="#MySQL-187"><span class="linenos">187</span></a> <span class="s2">&quot;_UTF8MB3&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-188"><a href="#MySQL-188"><span class="linenos">188</span></a> <span class="s2">&quot;_UTF8MB4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL-189"><a href="#MySQL-189"><span class="linenos">189</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">,</span>
+</span><span id="MySQL-190"><a href="#MySQL-190"><span class="linenos">190</span></a> <span class="p">}</span>
+</span><span id="MySQL-191"><a href="#MySQL-191"><span class="linenos">191</span></a>
+</span><span id="MySQL-192"><a href="#MySQL-192"><span class="linenos">192</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span> <span class="o">-</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="MySQL-193"><a href="#MySQL-193"><span class="linenos">193</span></a>
+</span><span id="MySQL-194"><a href="#MySQL-194"><span class="linenos">194</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="MySQL-195"><a href="#MySQL-195"><span class="linenos">195</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-196"><a href="#MySQL-196"><span class="linenos">196</span></a>
+</span><span id="MySQL-197"><a href="#MySQL-197"><span class="linenos">197</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-198"><a href="#MySQL-198"><span class="linenos">198</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">FUNC_TOKENS</span><span class="p">,</span>
+</span><span id="MySQL-199"><a href="#MySQL-199"><span class="linenos">199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="MySQL-200"><a href="#MySQL-200"><span class="linenos">200</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="MySQL-201"><a href="#MySQL-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="MySQL-202"><a href="#MySQL-202"><span class="linenos">202</span></a> <span class="p">}</span>
+</span><span id="MySQL-203"><a href="#MySQL-203"><span class="linenos">203</span></a>
+</span><span id="MySQL-204"><a href="#MySQL-204"><span class="linenos">204</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-205"><a href="#MySQL-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">CONJUNCTION</span><span class="p">,</span>
+</span><span id="MySQL-206"><a href="#MySQL-206"><span class="linenos">206</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</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="MySQL-207"><a href="#MySQL-207"><span class="linenos">207</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">,</span>
+</span><span id="MySQL-208"><a href="#MySQL-208"><span class="linenos">208</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">Or</span><span class="p">,</span>
+</span><span id="MySQL-209"><a href="#MySQL-209"><span class="linenos">209</span></a> <span class="p">}</span>
+</span><span id="MySQL-210"><a href="#MySQL-210"><span class="linenos">210</span></a>
+</span><span id="MySQL-211"><a href="#MySQL-211"><span class="linenos">211</span></a> <span class="c1"># MySQL uses || as a synonym to the logical OR operator</span>
+</span><span id="MySQL-212"><a href="#MySQL-212"><span class="linenos">212</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_or</span>
+</span><span id="MySQL-213"><a href="#MySQL-213"><span class="linenos">213</span></a> <span class="n">BITWISE</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">BITWISE</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="MySQL-214"><a href="#MySQL-214"><span class="linenos">214</span></a> <span class="n">BITWISE</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">)</span>
+</span><span id="MySQL-215"><a href="#MySQL-215"><span class="linenos">215</span></a>
+</span><span id="MySQL-216"><a href="#MySQL-216"><span class="linenos">216</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="MySQL-217"><a href="#MySQL-217"><span class="linenos">217</span></a> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span>
+</span><span id="MySQL-218"><a href="#MySQL-218"><span class="linenos">218</span></a> <span class="p">)</span>
+</span><span id="MySQL-219"><a href="#MySQL-219"><span class="linenos">219</span></a>
+</span><span id="MySQL-220"><a href="#MySQL-220"><span class="linenos">220</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-221"><a href="#MySQL-221"><span class="linenos">221</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL-222"><a href="#MySQL-222"><span class="linenos">222</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="MySQL-223"><a href="#MySQL-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">,</span>
+</span><span id="MySQL-224"><a href="#MySQL-224"><span class="linenos">224</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="MySQL-225"><a href="#MySQL-225"><span class="linenos">225</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_expression</span><span class="p">),</span>
+</span><span id="MySQL-226"><a href="#MySQL-226"><span class="linenos">226</span></a> <span class="p">),</span>
+</span><span id="MySQL-227"><a href="#MySQL-227"><span class="linenos">227</span></a> <span class="p">}</span>
+</span><span id="MySQL-228"><a href="#MySQL-228"><span class="linenos">228</span></a>
+</span><span id="MySQL-229"><a href="#MySQL-229"><span class="linenos">229</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-230"><a href="#MySQL-230"><span class="linenos">230</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="MySQL-231"><a href="#MySQL-231"><span class="linenos">231</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="MySQL-232"><a href="#MySQL-232"><span class="linenos">232</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;mysql&quot;</span><span class="p">),</span>
+</span><span id="MySQL-233"><a href="#MySQL-233"><span class="linenos">233</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="MySQL-234"><a href="#MySQL-234"><span class="linenos">234</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="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 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 class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
+</span><span id="MySQL-235"><a href="#MySQL-235"><span class="linenos">235</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="MySQL-236"><a href="#MySQL-236"><span class="linenos">236</span></a> <span class="s2">&quot;STR_TO_DATE&quot;</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
+</span><span id="MySQL-237"><a href="#MySQL-237"><span class="linenos">237</span></a> <span class="p">}</span>
+</span><span id="MySQL-238"><a href="#MySQL-238"><span class="linenos">238</span></a>
+</span><span id="MySQL-239"><a href="#MySQL-239"><span class="linenos">239</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-240"><a href="#MySQL-240"><span class="linenos">240</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="MySQL-241"><a href="#MySQL-241"><span class="linenos">241</span></a> <span class="s2">&quot;GROUP_CONCAT&quot;</span><span class="p">:</span> <span class="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="MySQL-242"><a href="#MySQL-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><span id="MySQL-243"><a href="#MySQL-243"><span class="linenos">243</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
+</span><span id="MySQL-244"><a href="#MySQL-244"><span class="linenos">244</span></a> <span class="n">separator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
+</span><span id="MySQL-245"><a href="#MySQL-245"><span class="linenos">245</span></a> <span class="p">),</span>
+</span><span id="MySQL-246"><a href="#MySQL-246"><span class="linenos">246</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values</span>
+</span><span id="MySQL-247"><a href="#MySQL-247"><span class="linenos">247</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="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="MySQL-248"><a href="#MySQL-248"><span class="linenos">248</span></a> <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="s2">&quot;VALUES&quot;</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_id_var</span><span class="p">()]</span>
+</span><span id="MySQL-249"><a href="#MySQL-249"><span class="linenos">249</span></a> <span class="p">),</span>
+</span><span id="MySQL-250"><a href="#MySQL-250"><span class="linenos">250</span></a> <span class="p">}</span>
+</span><span id="MySQL-251"><a href="#MySQL-251"><span class="linenos">251</span></a>
+</span><span id="MySQL-252"><a href="#MySQL-252"><span class="linenos">252</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-253"><a href="#MySQL-253"><span class="linenos">253</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL-254"><a href="#MySQL-254"><span class="linenos">254</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show</span><span class="p">(),</span>
+</span><span id="MySQL-255"><a href="#MySQL-255"><span class="linenos">255</span></a> <span class="p">}</span>
+</span><span id="MySQL-256"><a href="#MySQL-256"><span class="linenos">256</span></a>
+</span><span id="MySQL-257"><a href="#MySQL-257"><span class="linenos">257</span></a> <span class="n">SHOW_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-258"><a href="#MySQL-258"><span class="linenos">258</span></a> <span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-259"><a href="#MySQL-259"><span class="linenos">259</span></a> <span class="s2">&quot;MASTER LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-260"><a href="#MySQL-260"><span class="linenos">260</span></a> <span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-261"><a href="#MySQL-261"><span class="linenos">261</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL-262"><a href="#MySQL-262"><span class="linenos">262</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL-263"><a href="#MySQL-263"><span class="linenos">263</span></a> <span class="s2">&quot;COLLATION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLLATION&quot;</span><span class="p">),</span>
+</span><span id="MySQL-264"><a href="#MySQL-264"><span class="linenos">264</span></a> <span class="s2">&quot;FULL COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-265"><a href="#MySQL-265"><span class="linenos">265</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
+</span><span id="MySQL-266"><a href="#MySQL-266"><span class="linenos">266</span></a> <span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-267"><a href="#MySQL-267"><span class="linenos">267</span></a> <span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-268"><a href="#MySQL-268"><span class="linenos">268</span></a> <span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-269"><a href="#MySQL-269"><span class="linenos">269</span></a> <span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-270"><a href="#MySQL-270"><span class="linenos">270</span></a> <span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-271"><a href="#MySQL-271"><span class="linenos">271</span></a> <span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-272"><a href="#MySQL-272"><span class="linenos">272</span></a> <span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-273"><a href="#MySQL-273"><span class="linenos">273</span></a> <span class="s2">&quot;DATABASES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;DATABASES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-274"><a href="#MySQL-274"><span class="linenos">274</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-275"><a href="#MySQL-275"><span class="linenos">275</span></a> <span class="s2">&quot;STORAGE ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-276"><a href="#MySQL-276"><span class="linenos">276</span></a> <span class="s2">&quot;ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-277"><a href="#MySQL-277"><span class="linenos">277</span></a> <span class="s2">&quot;ERRORS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ERRORS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-278"><a href="#MySQL-278"><span class="linenos">278</span></a> <span class="s2">&quot;EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;EVENTS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-279"><a href="#MySQL-279"><span class="linenos">279</span></a> <span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-280"><a href="#MySQL-280"><span class="linenos">280</span></a> <span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-281"><a href="#MySQL-281"><span class="linenos">281</span></a> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FOR&quot;</span><span class="p">),</span>
+</span><span id="MySQL-282"><a href="#MySQL-282"><span class="linenos">282</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
+</span><span id="MySQL-283"><a href="#MySQL-283"><span class="linenos">283</span></a> <span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-284"><a href="#MySQL-284"><span class="linenos">284</span></a> <span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-285"><a href="#MySQL-285"><span class="linenos">285</span></a> <span class="s2">&quot;PLUGINS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PLUGINS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-286"><a href="#MySQL-286"><span class="linenos">286</span></a> <span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-287"><a href="#MySQL-287"><span class="linenos">287</span></a> <span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-288"><a href="#MySQL-288"><span class="linenos">288</span></a> <span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-289"><a href="#MySQL-289"><span class="linenos">289</span></a> <span class="s2">&quot;FULL PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-290"><a href="#MySQL-290"><span class="linenos">290</span></a> <span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">),</span>
+</span><span id="MySQL-291"><a href="#MySQL-291"><span class="linenos">291</span></a> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILE&quot;</span><span class="p">),</span>
+</span><span id="MySQL-292"><a href="#MySQL-292"><span class="linenos">292</span></a> <span class="s2">&quot;PROFILES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-293"><a href="#MySQL-293"><span class="linenos">293</span></a> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-294"><a href="#MySQL-294"><span class="linenos">294</span></a> <span class="s2">&quot;REPLICAS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-295"><a href="#MySQL-295"><span class="linenos">295</span></a> <span class="s2">&quot;SLAVE HOSTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-296"><a href="#MySQL-296"><span class="linenos">296</span></a> <span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-297"><a href="#MySQL-297"><span class="linenos">297</span></a> <span class="s2">&quot;SLAVE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-298"><a href="#MySQL-298"><span class="linenos">298</span></a> <span class="s2">&quot;GLOBAL STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</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="MySQL-299"><a href="#MySQL-299"><span class="linenos">299</span></a> <span class="s2">&quot;SESSION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-300"><a href="#MySQL-300"><span class="linenos">300</span></a> <span class="s2">&quot;STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-301"><a href="#MySQL-301"><span class="linenos">301</span></a> <span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-302"><a href="#MySQL-302"><span class="linenos">302</span></a> <span class="s2">&quot;FULL TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL-303"><a href="#MySQL-303"><span class="linenos">303</span></a> <span class="s2">&quot;TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-304"><a href="#MySQL-304"><span class="linenos">304</span></a> <span class="s2">&quot;TRIGGERS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TRIGGERS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-305"><a href="#MySQL-305"><span class="linenos">305</span></a> <span class="s2">&quot;GLOBAL VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</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="MySQL-306"><a href="#MySQL-306"><span class="linenos">306</span></a> <span class="s2">&quot;SESSION VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-307"><a href="#MySQL-307"><span class="linenos">307</span></a> <span class="s2">&quot;VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL-308"><a href="#MySQL-308"><span class="linenos">308</span></a> <span class="s2">&quot;WARNINGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;WARNINGS&quot;</span><span class="p">),</span>
+</span><span id="MySQL-309"><a href="#MySQL-309"><span class="linenos">309</span></a> <span class="p">}</span>
+</span><span id="MySQL-310"><a href="#MySQL-310"><span class="linenos">310</span></a>
+</span><span id="MySQL-311"><a href="#MySQL-311"><span class="linenos">311</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-312"><a href="#MySQL-312"><span class="linenos">312</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL-313"><a href="#MySQL-313"><span class="linenos">313</span></a> <span class="s2">&quot;PERSIST&quot;</span><span class="p">:</span> <span class="k">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;PERSIST&quot;</span><span class="p">),</span>
+</span><span id="MySQL-314"><a href="#MySQL-314"><span class="linenos">314</span></a> <span class="s2">&quot;PERSIST_ONLY&quot;</span><span class="p">:</span> <span class="k">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;PERSIST_ONLY&quot;</span><span class="p">),</span>
+</span><span id="MySQL-315"><a href="#MySQL-315"><span class="linenos">315</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_set_item_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL-316"><a href="#MySQL-316"><span class="linenos">316</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">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_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL-317"><a href="#MySQL-317"><span class="linenos">317</span></a> <span class="s2">&quot;NAMES&quot;</span><span class="p">:</span> <span class="k">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_names</span><span class="p">(),</span>
+</span><span id="MySQL-318"><a href="#MySQL-318"><span class="linenos">318</span></a> <span class="p">}</span>
+</span><span id="MySQL-319"><a href="#MySQL-319"><span class="linenos">319</span></a>
+</span><span id="MySQL-320"><a href="#MySQL-320"><span class="linenos">320</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-321"><a href="#MySQL-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL-322"><a href="#MySQL-322"><span class="linenos">322</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;FULLTEXT&quot;</span><span class="p">),</span>
+</span><span id="MySQL-323"><a href="#MySQL-323"><span class="linenos">323</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(),</span>
+</span><span id="MySQL-324"><a href="#MySQL-324"><span class="linenos">324</span></a> <span class="s2">&quot;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_index_constraint</span><span class="p">(),</span>
+</span><span id="MySQL-325"><a href="#MySQL-325"><span class="linenos">325</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;SPATIAL&quot;</span><span class="p">),</span>
+</span><span id="MySQL-326"><a href="#MySQL-326"><span class="linenos">326</span></a> <span class="p">}</span>
+</span><span id="MySQL-327"><a href="#MySQL-327"><span class="linenos">327</span></a>
+</span><span id="MySQL-328"><a href="#MySQL-328"><span class="linenos">328</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-329"><a href="#MySQL-329"><span class="linenos">329</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">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">,</span>
+</span><span id="MySQL-330"><a href="#MySQL-330"><span class="linenos">330</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">,</span>
+</span><span id="MySQL-331"><a href="#MySQL-331"><span class="linenos">331</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="MySQL-332"><a href="#MySQL-332"><span class="linenos">332</span></a> <span class="s2">&quot;KEY&quot;</span><span class="p">,</span>
+</span><span id="MySQL-333"><a href="#MySQL-333"><span class="linenos">333</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">,</span>
+</span><span id="MySQL-334"><a href="#MySQL-334"><span class="linenos">334</span></a> <span class="p">}</span>
+</span><span id="MySQL-335"><a href="#MySQL-335"><span class="linenos">335</span></a>
+</span><span id="MySQL-336"><a href="#MySQL-336"><span class="linenos">336</span></a> <span class="n">PROFILE_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-337"><a href="#MySQL-337"><span class="linenos">337</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">,</span>
+</span><span id="MySQL-338"><a href="#MySQL-338"><span class="linenos">338</span></a> <span class="s2">&quot;BLOCK IO&quot;</span><span class="p">,</span>
+</span><span id="MySQL-339"><a href="#MySQL-339"><span class="linenos">339</span></a> <span class="s2">&quot;CONTEXT SWITCHES&quot;</span><span class="p">,</span>
+</span><span id="MySQL-340"><a href="#MySQL-340"><span class="linenos">340</span></a> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span>
+</span><span id="MySQL-341"><a href="#MySQL-341"><span class="linenos">341</span></a> <span class="s2">&quot;IPC&quot;</span><span class="p">,</span>
+</span><span id="MySQL-342"><a href="#MySQL-342"><span class="linenos">342</span></a> <span class="s2">&quot;MEMORY&quot;</span><span class="p">,</span>
+</span><span id="MySQL-343"><a href="#MySQL-343"><span class="linenos">343</span></a> <span class="s2">&quot;PAGE FAULTS&quot;</span><span class="p">,</span>
+</span><span id="MySQL-344"><a href="#MySQL-344"><span class="linenos">344</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span>
+</span><span id="MySQL-345"><a href="#MySQL-345"><span class="linenos">345</span></a> <span class="s2">&quot;SWAPS&quot;</span><span class="p">,</span>
+</span><span id="MySQL-346"><a href="#MySQL-346"><span class="linenos">346</span></a> <span class="p">}</span>
+</span><span id="MySQL-347"><a href="#MySQL-347"><span class="linenos">347</span></a>
+</span><span id="MySQL-348"><a href="#MySQL-348"><span class="linenos">348</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-349"><a href="#MySQL-349"><span class="linenos">349</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="MySQL-350"><a href="#MySQL-350"><span class="linenos">350</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="MySQL-351"><a href="#MySQL-351"><span class="linenos">351</span></a> <span class="p">}</span>
+</span><span id="MySQL-352"><a href="#MySQL-352"><span class="linenos">352</span></a>
+</span><span id="MySQL-353"><a href="#MySQL-353"><span class="linenos">353</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-354"><a href="#MySQL-354"><span class="linenos">354</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">ENUM_TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="MySQL-355"><a href="#MySQL-355"><span class="linenos">355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="MySQL-356"><a href="#MySQL-356"><span class="linenos">356</span></a> <span class="p">}</span>
+</span><span id="MySQL-357"><a href="#MySQL-357"><span class="linenos">357</span></a>
+</span><span id="MySQL-358"><a href="#MySQL-358"><span class="linenos">358</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL-359"><a href="#MySQL-359"><span class="linenos">359</span></a>
+</span><span id="MySQL-360"><a href="#MySQL-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="nf">_parse_index_constraint</span><span class="p">(</span>
+</span><span id="MySQL-361"><a href="#MySQL-361"><span class="linenos">361</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="MySQL-362"><a href="#MySQL-362"><span class="linenos">362</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">:</span>
+</span><span id="MySQL-363"><a href="#MySQL-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="MySQL-364"><a href="#MySQL-364"><span class="linenos">364</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
+</span><span id="MySQL-365"><a href="#MySQL-365"><span class="linenos">365</span></a>
+</span><span id="MySQL-366"><a href="#MySQL-366"><span class="linenos">366</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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="MySQL-367"><a href="#MySQL-367"><span class="linenos">367</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="MySQL-368"><a href="#MySQL-368"><span class="linenos">368</span></a> <span class="n">schema</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="MySQL-369"><a href="#MySQL-369"><span class="linenos">369</span></a>
+</span><span id="MySQL-370"><a href="#MySQL-370"><span class="linenos">370</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="MySQL-371"><a href="#MySQL-371"><span class="linenos">371</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="MySQL-372"><a href="#MySQL-372"><span class="linenos">372</span></a> <span class="k">if</span> <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_BLOCK_SIZE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-373"><a href="#MySQL-373"><span class="linenos">373</span></a> <span class="bp">self</span><span 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="MySQL-374"><a href="#MySQL-374"><span class="linenos">374</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">key_block_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="MySQL-375"><a href="#MySQL-375"><span class="linenos">375</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="MySQL-376"><a href="#MySQL-376"><span class="linenos">376</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">using</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 class="p">)</span>
+</span><span id="MySQL-377"><a href="#MySQL-377"><span class="linenos">377</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;PARSER&quot;</span><span class="p">):</span>
+</span><span id="MySQL-378"><a href="#MySQL-378"><span class="linenos">378</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="MySQL-379"><a href="#MySQL-379"><span class="linenos">379</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">COMMENT</span><span class="p">):</span>
+</span><span id="MySQL-380"><a href="#MySQL-380"><span class="linenos">380</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="MySQL-381"><a href="#MySQL-381"><span class="linenos">381</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;VISIBLE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-382"><a href="#MySQL-382"><span class="linenos">382</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="MySQL-383"><a href="#MySQL-383"><span class="linenos">383</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;INVISIBLE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-384"><a href="#MySQL-384"><span class="linenos">384</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MySQL-385"><a href="#MySQL-385"><span class="linenos">385</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-386"><a href="#MySQL-386"><span class="linenos">386</span></a> <span class="bp">self</span><span 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="MySQL-387"><a href="#MySQL-387"><span class="linenos">387</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL-388"><a href="#MySQL-388"><span class="linenos">388</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-389"><a href="#MySQL-389"><span class="linenos">389</span></a> <span class="bp">self</span><span 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="MySQL-390"><a href="#MySQL-390"><span class="linenos">390</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL-391"><a href="#MySQL-391"><span class="linenos">391</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;SECONDARY_ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-392"><a href="#MySQL-392"><span class="linenos">392</span></a> <span class="bp">self</span><span 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="MySQL-393"><a href="#MySQL-393"><span class="linenos">393</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">secondary_engine_attr</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="MySQL-394"><a href="#MySQL-394"><span class="linenos">394</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-395"><a href="#MySQL-395"><span class="linenos">395</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="MySQL-396"><a href="#MySQL-396"><span class="linenos">396</span></a>
-</span><span id="MySQL-397"><a href="#MySQL-397"><span class="linenos">397</span></a> <span class="k">def</span> <span class="nf">_parse_show_mysql</span><span class="p">(</span>
-</span><span id="MySQL-398"><a href="#MySQL-398"><span class="linenos">398</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MySQL-399"><a href="#MySQL-399"><span class="linenos">399</span></a> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MySQL-400"><a href="#MySQL-400"><span class="linenos">400</span></a> <span class="n">target</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MySQL-401"><a href="#MySQL-401"><span class="linenos">401</span></a> <span class="n">full</span><span 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="MySQL-402"><a href="#MySQL-402"><span class="linenos">402</span></a> <span class="n">global_</span><span 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="MySQL-403"><a href="#MySQL-403"><span class="linenos">403</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
-</span><span id="MySQL-404"><a href="#MySQL-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">target</span><span class="p">:</span>
-</span><span id="MySQL-405"><a href="#MySQL-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="MySQL-406"><a href="#MySQL-406"><span class="linenos">406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
-</span><span id="MySQL-407"><a href="#MySQL-407"><span class="linenos">407</span></a> <span class="n">target_id</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="MySQL-408"><a href="#MySQL-408"><span class="linenos">408</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-409"><a href="#MySQL-409"><span class="linenos">409</span></a> <span class="n">target_id</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL-397"><a href="#MySQL-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">:</span>
+</span><span id="MySQL-398"><a href="#MySQL-398"><span class="linenos">398</span></a> <span class="k">break</span>
+</span><span id="MySQL-399"><a href="#MySQL-399"><span class="linenos">399</span></a>
+</span><span id="MySQL-400"><a href="#MySQL-400"><span class="linenos">400</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
+</span><span id="MySQL-401"><a href="#MySQL-401"><span class="linenos">401</span></a>
+</span><span id="MySQL-402"><a href="#MySQL-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="MySQL-403"><a href="#MySQL-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">,</span>
+</span><span id="MySQL-404"><a href="#MySQL-404"><span class="linenos">404</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="MySQL-405"><a href="#MySQL-405"><span class="linenos">405</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="MySQL-406"><a href="#MySQL-406"><span class="linenos">406</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="MySQL-407"><a href="#MySQL-407"><span class="linenos">407</span></a> <span class="nb">type</span><span class="o">=</span><span class="n">type_</span><span class="p">,</span>
+</span><span id="MySQL-408"><a href="#MySQL-408"><span class="linenos">408</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
+</span><span id="MySQL-409"><a href="#MySQL-409"><span class="linenos">409</span></a> <span class="p">)</span>
</span><span id="MySQL-410"><a href="#MySQL-410"><span class="linenos">410</span></a>
-</span><span id="MySQL-411"><a href="#MySQL-411"><span class="linenos">411</span></a> <span class="n">log</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;IN&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-412"><a href="#MySQL-412"><span class="linenos">412</span></a>
-</span><span id="MySQL-413"><a href="#MySQL-413"><span class="linenos">413</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">,</span> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">}:</span>
-</span><span id="MySQL-414"><a href="#MySQL-414"><span class="linenos">414</span></a> <span class="n">position</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-415"><a href="#MySQL-415"><span class="linenos">415</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-416"><a href="#MySQL-416"><span class="linenos">416</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-417"><a href="#MySQL-417"><span class="linenos">417</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-418"><a href="#MySQL-418"><span class="linenos">418</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-419"><a href="#MySQL-419"><span class="linenos">419</span></a>
-</span><span id="MySQL-420"><a href="#MySQL-420"><span class="linenos">420</span></a> <span class="k">if</span> <span class="bp">self</span><span 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="MySQL-421"><a href="#MySQL-421"><span class="linenos">421</span></a> <span class="n">db</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="MySQL-422"><a href="#MySQL-422"><span class="linenos">422</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">DOT</span><span class="p">):</span>
-</span><span id="MySQL-423"><a href="#MySQL-423"><span class="linenos">423</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">target_id</span>
-</span><span id="MySQL-424"><a href="#MySQL-424"><span class="linenos">424</span></a> <span class="n">target_id</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="MySQL-425"><a href="#MySQL-425"><span class="linenos">425</span></a>
-</span><span id="MySQL-426"><a href="#MySQL-426"><span class="linenos">426</span></a> <span class="n">channel</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="k">if</span> <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;CHANNEL&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-427"><a href="#MySQL-427"><span class="linenos">427</span></a>
-</span><span id="MySQL-428"><a href="#MySQL-428"><span class="linenos">428</span></a> <span class="n">like</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;LIKE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-429"><a href="#MySQL-429"><span class="linenos">429</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="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="k">if</span> <span class="n">this</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="MySQL-432"><a href="#MySQL-432"><span class="linenos">432</span></a> <span class="n">types</span> <span 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_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROFILE_TYPES</span><span class="p">))</span>
-</span><span id="MySQL-433"><a href="#MySQL-433"><span class="linenos">433</span></a> <span class="n">query</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="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;QUERY&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-434"><a href="#MySQL-434"><span class="linenos">434</span></a> <span class="n">offset</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-435"><a href="#MySQL-435"><span class="linenos">435</span></a> <span class="n">limit</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-436"><a href="#MySQL-436"><span class="linenos">436</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-437"><a href="#MySQL-437"><span class="linenos">437</span></a> <span class="n">types</span><span class="p">,</span> <span class="n">query</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
-</span><span id="MySQL-438"><a href="#MySQL-438"><span class="linenos">438</span></a> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_oldstyle_limit</span><span class="p">()</span>
+</span><span id="MySQL-411"><a href="#MySQL-411"><span class="linenos">411</span></a> <span class="k">def</span> <span class="nf">_parse_show_mysql</span><span class="p">(</span>
+</span><span id="MySQL-412"><a href="#MySQL-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MySQL-413"><a href="#MySQL-413"><span class="linenos">413</span></a> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MySQL-414"><a href="#MySQL-414"><span class="linenos">414</span></a> <span class="n">target</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MySQL-415"><a href="#MySQL-415"><span class="linenos">415</span></a> <span class="n">full</span><span 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="MySQL-416"><a href="#MySQL-416"><span class="linenos">416</span></a> <span class="n">global_</span><span 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="MySQL-417"><a href="#MySQL-417"><span class="linenos">417</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
+</span><span id="MySQL-418"><a href="#MySQL-418"><span class="linenos">418</span></a> <span class="k">if</span> <span class="n">target</span><span class="p">:</span>
+</span><span id="MySQL-419"><a href="#MySQL-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="MySQL-420"><a href="#MySQL-420"><span class="linenos">420</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+</span><span id="MySQL-421"><a href="#MySQL-421"><span class="linenos">421</span></a> <span class="n">target_id</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="MySQL-422"><a href="#MySQL-422"><span class="linenos">422</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-423"><a href="#MySQL-423"><span class="linenos">423</span></a> <span class="n">target_id</span> <span class="o">=</span> <span class="kc">None</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">log</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;IN&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-426"><a href="#MySQL-426"><span class="linenos">426</span></a>
+</span><span id="MySQL-427"><a href="#MySQL-427"><span class="linenos">427</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">,</span> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">}:</span>
+</span><span id="MySQL-428"><a href="#MySQL-428"><span class="linenos">428</span></a> <span class="n">position</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-429"><a href="#MySQL-429"><span class="linenos">429</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL-430"><a href="#MySQL-430"><span class="linenos">430</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-431"><a href="#MySQL-431"><span class="linenos">431</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL-432"><a href="#MySQL-432"><span class="linenos">432</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL-433"><a href="#MySQL-433"><span class="linenos">433</span></a>
+</span><span id="MySQL-434"><a href="#MySQL-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="bp">self</span><span 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="MySQL-435"><a href="#MySQL-435"><span class="linenos">435</span></a> <span class="n">db</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="MySQL-436"><a href="#MySQL-436"><span class="linenos">436</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">DOT</span><span class="p">):</span>
+</span><span id="MySQL-437"><a href="#MySQL-437"><span class="linenos">437</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">target_id</span>
+</span><span id="MySQL-438"><a href="#MySQL-438"><span class="linenos">438</span></a> <span class="n">target_id</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="MySQL-439"><a href="#MySQL-439"><span class="linenos">439</span></a>
-</span><span id="MySQL-440"><a href="#MySQL-440"><span class="linenos">440</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">True</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;MUTEX&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL-441"><a href="#MySQL-441"><span class="linenos">441</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">False</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;STATUS&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">mutex</span>
-</span><span id="MySQL-442"><a href="#MySQL-442"><span class="linenos">442</span></a>
-</span><span id="MySQL-443"><a href="#MySQL-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="MySQL-444"><a href="#MySQL-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">,</span>
-</span><span id="MySQL-445"><a href="#MySQL-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="MySQL-446"><a href="#MySQL-446"><span class="linenos">446</span></a> <span class="n">target</span><span class="o">=</span><span class="n">target_id</span><span class="p">,</span>
-</span><span id="MySQL-447"><a href="#MySQL-447"><span class="linenos">447</span></a> <span class="n">full</span><span class="o">=</span><span class="n">full</span><span class="p">,</span>
-</span><span id="MySQL-448"><a href="#MySQL-448"><span class="linenos">448</span></a> <span class="n">log</span><span class="o">=</span><span class="n">log</span><span class="p">,</span>
-</span><span id="MySQL-449"><a href="#MySQL-449"><span class="linenos">449</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
-</span><span id="MySQL-450"><a href="#MySQL-450"><span class="linenos">450</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
-</span><span id="MySQL-451"><a href="#MySQL-451"><span class="linenos">451</span></a> <span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
-</span><span id="MySQL-452"><a href="#MySQL-452"><span class="linenos">452</span></a> <span class="n">like</span><span class="o">=</span><span class="n">like</span><span class="p">,</span>
-</span><span id="MySQL-453"><a href="#MySQL-453"><span class="linenos">453</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
-</span><span id="MySQL-454"><a href="#MySQL-454"><span class="linenos">454</span></a> <span class="n">types</span><span class="o">=</span><span class="n">types</span><span class="p">,</span>
-</span><span id="MySQL-455"><a href="#MySQL-455"><span class="linenos">455</span></a> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
-</span><span id="MySQL-456"><a href="#MySQL-456"><span class="linenos">456</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
-</span><span id="MySQL-457"><a href="#MySQL-457"><span class="linenos">457</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="MySQL-458"><a href="#MySQL-458"><span class="linenos">458</span></a> <span class="n">mutex</span><span class="o">=</span><span class="n">mutex</span><span class="p">,</span>
-</span><span id="MySQL-459"><a href="#MySQL-459"><span class="linenos">459</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="MySQL-460"><a href="#MySQL-460"><span class="linenos">460</span></a> <span class="p">)</span>
-</span><span id="MySQL-461"><a href="#MySQL-461"><span class="linenos">461</span></a>
-</span><span id="MySQL-462"><a href="#MySQL-462"><span class="linenos">462</span></a> <span class="k">def</span> <span class="nf">_parse_oldstyle_limit</span><span class="p">(</span>
-</span><span id="MySQL-463"><a href="#MySQL-463"><span class="linenos">463</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MySQL-464"><a href="#MySQL-464"><span class="linenos">464</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="MySQL-465"><a href="#MySQL-465"><span class="linenos">465</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-466"><a href="#MySQL-466"><span class="linenos">466</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-467"><a href="#MySQL-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">):</span>
-</span><span id="MySQL-468"><a href="#MySQL-468"><span class="linenos">468</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</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="MySQL-469"><a href="#MySQL-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="MySQL-470"><a href="#MySQL-470"><span class="linenos">470</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="MySQL-471"><a href="#MySQL-471"><span class="linenos">471</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="MySQL-472"><a href="#MySQL-472"><span class="linenos">472</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="MySQL-473"><a href="#MySQL-473"><span class="linenos">473</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="MySQL-474"><a href="#MySQL-474"><span class="linenos">474</span></a>
-</span><span id="MySQL-475"><a href="#MySQL-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span>
-</span><span id="MySQL-476"><a href="#MySQL-476"><span class="linenos">476</span></a>
-</span><span id="MySQL-477"><a href="#MySQL-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="MySQL-478"><a href="#MySQL-478"><span class="linenos">478</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</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="MySQL-479"><a href="#MySQL-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="MySQL-480"><a href="#MySQL-480"><span class="linenos">480</span></a>
-</span><span id="MySQL-481"><a href="#MySQL-481"><span class="linenos">481</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_names</span><span class="p">(</span><span class="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="MySQL-482"><a href="#MySQL-482"><span class="linenos">482</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="MySQL-483"><a href="#MySQL-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLATE&quot;</span><span class="p">):</span>
-</span><span id="MySQL-484"><a href="#MySQL-484"><span class="linenos">484</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="MySQL-485"><a href="#MySQL-485"><span class="linenos">485</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-486"><a href="#MySQL-486"><span class="linenos">486</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL-487"><a href="#MySQL-487"><span class="linenos">487</span></a>
-</span><span id="MySQL-488"><a href="#MySQL-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">charset</span><span class="p">,</span> <span class="n">collate</span><span class="o">=</span><span class="n">collate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;NAMES&quot;</span><span class="p">)</span>
-</span><span id="MySQL-489"><a href="#MySQL-489"><span class="linenos">489</span></a>
-</span><span id="MySQL-490"><a href="#MySQL-490"><span class="linenos">490</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="MySQL-491"><a href="#MySQL-491"><span class="linenos">491</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="MySQL-492"><a href="#MySQL-492"><span class="linenos">492</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL-493"><a href="#MySQL-493"><span class="linenos">493</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL-494"><a href="#MySQL-494"><span class="linenos">494</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="MySQL-495"><a href="#MySQL-495"><span class="linenos">495</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL-496"><a href="#MySQL-496"><span class="linenos">496</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="MySQL-497"><a href="#MySQL-497"><span class="linenos">497</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL-498"><a href="#MySQL-498"><span class="linenos">498</span></a>
-</span><span id="MySQL-499"><a href="#MySQL-499"><span class="linenos">499</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-500"><a href="#MySQL-500"><span class="linenos">500</span></a> <span 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="MySQL-501"><a href="#MySQL-501"><span class="linenos">501</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="MySQL-502"><a href="#MySQL-502"><span class="linenos">502</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 class="s2">&quot;DATEDIFF&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="MySQL-503"><a href="#MySQL-503"><span class="linenos">503</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="MySQL-504"><a href="#MySQL-504"><span class="linenos">504</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="MySQL-505"><a href="#MySQL-505"><span class="linenos">505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="MySQL-506"><a href="#MySQL-506"><span class="linenos">506</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="n">_date_trunc_sql</span><span class="p">,</span>
-</span><span id="MySQL-507"><a href="#MySQL-507"><span class="linenos">507</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="MySQL-508"><a href="#MySQL-508"><span class="linenos">508</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="MySQL-509"><a href="#MySQL-509"><span class="linenos">509</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="MySQL-510"><a href="#MySQL-510"><span class="linenos">510</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;this&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2"> SEPARATOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;separator&quot;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s2">&quot;&#39;,&#39;&quot;</span><span class="si">}</span><span class="s2">)&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="MySQL-511"><a href="#MySQL-511"><span class="linenos">511</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="MySQL-512"><a href="#MySQL-512"><span class="linenos">512</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="MySQL-513"><a href="#MySQL-513"><span class="linenos">513</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="MySQL-514"><a href="#MySQL-514"><span class="linenos">514</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-515"><a href="#MySQL-515"><span class="linenos">515</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-516"><a href="#MySQL-516"><span class="linenos">516</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-517"><a href="#MySQL-517"><span class="linenos">517</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="MySQL-518"><a href="#MySQL-518"><span class="linenos">518</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-519"><a href="#MySQL-519"><span class="linenos">519</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-520"><a href="#MySQL-520"><span class="linenos">520</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-521"><a href="#MySQL-521"><span class="linenos">521</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-522"><a href="#MySQL-522"><span class="linenos">522</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-523"><a href="#MySQL-523"><span class="linenos">523</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-524"><a href="#MySQL-524"><span class="linenos">524</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">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;datetime&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
-</span><span id="MySQL-525"><a href="#MySQL-525"><span class="linenos">525</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-526"><a href="#MySQL-526"><span class="linenos">526</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-527"><a href="#MySQL-527"><span class="linenos">527</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-528"><a href="#MySQL-528"><span class="linenos">528</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-529"><a href="#MySQL-529"><span class="linenos">529</span></a> <span class="p">}</span>
-</span><span id="MySQL-530"><a href="#MySQL-530"><span class="linenos">530</span></a>
-</span><span id="MySQL-531"><a href="#MySQL-531"><span class="linenos">531</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-532"><a href="#MySQL-532"><span class="linenos">532</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-533"><a href="#MySQL-533"><span class="linenos">533</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-534"><a href="#MySQL-534"><span class="linenos">534</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-535"><a href="#MySQL-535"><span class="linenos">535</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-536"><a href="#MySQL-536"><span class="linenos">536</span></a>
-</span><span id="MySQL-537"><a href="#MySQL-537"><span class="linenos">537</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-538"><a href="#MySQL-538"><span class="linenos">538</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="MySQL-539"><a href="#MySQL-539"><span class="linenos">539</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-540"><a href="#MySQL-540"><span class="linenos">540</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-541"><a href="#MySQL-541"><span class="linenos">541</span></a> <span class="p">}</span>
-</span><span id="MySQL-542"><a href="#MySQL-542"><span class="linenos">542</span></a>
-</span><span id="MySQL-543"><a href="#MySQL-543"><span class="linenos">543</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="MySQL-544"><a href="#MySQL-544"><span class="linenos">544</span></a>
-</span><span id="MySQL-545"><a href="#MySQL-545"><span class="linenos">545</span></a> <span class="c1"># MySQL doesn&#39;t support many datatypes in cast.</span>
-</span><span id="MySQL-546"><a href="#MySQL-546"><span class="linenos">546</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast</span>
-</span><span id="MySQL-547"><a href="#MySQL-547"><span class="linenos">547</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-548"><a href="#MySQL-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL-549"><a href="#MySQL-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL-550"><a href="#MySQL-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL-551"><a href="#MySQL-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="MySQL-552"><a href="#MySQL-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UNSIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL-553"><a href="#MySQL-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="MySQL-554"><a href="#MySQL-554"><span class="linenos">554</span></a> <span class="p">}</span>
-</span><span id="MySQL-555"><a href="#MySQL-555"><span class="linenos">555</span></a>
-</span><span id="MySQL-556"><a href="#MySQL-556"><span class="linenos">556</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL-557"><a href="#MySQL-557"><span class="linenos">557</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
-</span><span id="MySQL-558"><a href="#MySQL-558"><span class="linenos">558</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL-559"><a href="#MySQL-559"><span class="linenos">559</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
-</span><span id="MySQL-560"><a href="#MySQL-560"><span class="linenos">560</span></a>
-</span><span id="MySQL-561"><a href="#MySQL-561"><span class="linenos">561</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="MySQL-562"><a href="#MySQL-562"><span class="linenos">562</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
-</span><span id="MySQL-563"><a href="#MySQL-563"><span class="linenos">563</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL-564"><a href="#MySQL-564"><span class="linenos">564</span></a> <span class="k">return</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><span id="MySQL-565"><a href="#MySQL-565"><span class="linenos">565</span></a>
-</span><span id="MySQL-566"><a href="#MySQL-566"><span class="linenos">566</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL-567"><a href="#MySQL-567"><span class="linenos">567</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="MySQL-568"><a href="#MySQL-568"><span class="linenos">568</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
-</span><span id="MySQL-569"><a href="#MySQL-569"><span class="linenos">569</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="MySQL-440"><a href="#MySQL-440"><span class="linenos">440</span></a> <span class="n">channel</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="k">if</span> <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;CHANNEL&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-441"><a href="#MySQL-441"><span class="linenos">441</span></a>
+</span><span id="MySQL-442"><a href="#MySQL-442"><span class="linenos">442</span></a> <span class="n">like</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;LIKE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-443"><a href="#MySQL-443"><span class="linenos">443</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="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="k">if</span> <span class="n">this</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="MySQL-446"><a href="#MySQL-446"><span class="linenos">446</span></a> <span class="n">types</span> <span 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_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROFILE_TYPES</span><span class="p">))</span>
+</span><span id="MySQL-447"><a href="#MySQL-447"><span class="linenos">447</span></a> <span class="n">query</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="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;QUERY&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-448"><a href="#MySQL-448"><span class="linenos">448</span></a> <span class="n">offset</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-449"><a href="#MySQL-449"><span class="linenos">449</span></a> <span class="n">limit</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-450"><a href="#MySQL-450"><span class="linenos">450</span></a> <span class="k">else</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="p">,</span> <span class="n">query</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
+</span><span id="MySQL-452"><a href="#MySQL-452"><span class="linenos">452</span></a> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_oldstyle_limit</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="n">mutex</span> <span class="o">=</span> <span class="kc">True</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;MUTEX&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL-455"><a href="#MySQL-455"><span class="linenos">455</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">False</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;STATUS&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">mutex</span>
+</span><span id="MySQL-456"><a href="#MySQL-456"><span class="linenos">456</span></a>
+</span><span id="MySQL-457"><a href="#MySQL-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="MySQL-458"><a href="#MySQL-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">,</span>
+</span><span id="MySQL-459"><a href="#MySQL-459"><span class="linenos">459</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="MySQL-460"><a href="#MySQL-460"><span class="linenos">460</span></a> <span class="n">target</span><span class="o">=</span><span class="n">target_id</span><span class="p">,</span>
+</span><span id="MySQL-461"><a href="#MySQL-461"><span class="linenos">461</span></a> <span class="n">full</span><span class="o">=</span><span class="n">full</span><span class="p">,</span>
+</span><span id="MySQL-462"><a href="#MySQL-462"><span class="linenos">462</span></a> <span class="n">log</span><span class="o">=</span><span class="n">log</span><span class="p">,</span>
+</span><span id="MySQL-463"><a href="#MySQL-463"><span class="linenos">463</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
+</span><span id="MySQL-464"><a href="#MySQL-464"><span class="linenos">464</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
+</span><span id="MySQL-465"><a href="#MySQL-465"><span class="linenos">465</span></a> <span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
+</span><span id="MySQL-466"><a href="#MySQL-466"><span class="linenos">466</span></a> <span class="n">like</span><span class="o">=</span><span class="n">like</span><span class="p">,</span>
+</span><span id="MySQL-467"><a href="#MySQL-467"><span class="linenos">467</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
+</span><span id="MySQL-468"><a href="#MySQL-468"><span class="linenos">468</span></a> <span class="n">types</span><span class="o">=</span><span class="n">types</span><span class="p">,</span>
+</span><span id="MySQL-469"><a href="#MySQL-469"><span class="linenos">469</span></a> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
+</span><span id="MySQL-470"><a href="#MySQL-470"><span class="linenos">470</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="MySQL-471"><a href="#MySQL-471"><span class="linenos">471</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
+</span><span id="MySQL-472"><a href="#MySQL-472"><span class="linenos">472</span></a> <span class="n">mutex</span><span class="o">=</span><span class="n">mutex</span><span class="p">,</span>
+</span><span id="MySQL-473"><a href="#MySQL-473"><span class="linenos">473</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="MySQL-474"><a href="#MySQL-474"><span class="linenos">474</span></a> <span class="p">)</span>
+</span><span id="MySQL-475"><a href="#MySQL-475"><span class="linenos">475</span></a>
+</span><span id="MySQL-476"><a href="#MySQL-476"><span class="linenos">476</span></a> <span class="k">def</span> <span class="nf">_parse_oldstyle_limit</span><span class="p">(</span>
+</span><span id="MySQL-477"><a href="#MySQL-477"><span class="linenos">477</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MySQL-478"><a href="#MySQL-478"><span class="linenos">478</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="MySQL-479"><a href="#MySQL-479"><span class="linenos">479</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="kc">None</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="kc">None</span>
+</span><span id="MySQL-481"><a href="#MySQL-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">):</span>
+</span><span id="MySQL-482"><a href="#MySQL-482"><span class="linenos">482</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</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="MySQL-483"><a href="#MySQL-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="MySQL-484"><a href="#MySQL-484"><span class="linenos">484</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="MySQL-485"><a href="#MySQL-485"><span class="linenos">485</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="MySQL-486"><a href="#MySQL-486"><span class="linenos">486</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="MySQL-487"><a href="#MySQL-487"><span class="linenos">487</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="MySQL-488"><a href="#MySQL-488"><span class="linenos">488</span></a>
+</span><span id="MySQL-489"><a href="#MySQL-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span>
+</span><span id="MySQL-490"><a href="#MySQL-490"><span class="linenos">490</span></a>
+</span><span id="MySQL-491"><a href="#MySQL-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="MySQL-492"><a href="#MySQL-492"><span class="linenos">492</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 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="MySQL-493"><a href="#MySQL-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="MySQL-494"><a href="#MySQL-494"><span class="linenos">494</span></a>
+</span><span id="MySQL-495"><a href="#MySQL-495"><span class="linenos">495</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_names</span><span class="p">(</span><span class="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="MySQL-496"><a href="#MySQL-496"><span class="linenos">496</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="MySQL-497"><a href="#MySQL-497"><span class="linenos">497</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLATE&quot;</span><span class="p">):</span>
+</span><span id="MySQL-498"><a href="#MySQL-498"><span class="linenos">498</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="MySQL-499"><a href="#MySQL-499"><span class="linenos">499</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-500"><a href="#MySQL-500"><span class="linenos">500</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL-501"><a href="#MySQL-501"><span class="linenos">501</span></a>
+</span><span id="MySQL-502"><a href="#MySQL-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">charset</span><span class="p">,</span> <span class="n">collate</span><span class="o">=</span><span class="n">collate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;NAMES&quot;</span><span class="p">)</span>
+</span><span id="MySQL-503"><a href="#MySQL-503"><span class="linenos">503</span></a>
+</span><span id="MySQL-504"><a href="#MySQL-504"><span class="linenos">504</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="MySQL-505"><a href="#MySQL-505"><span class="linenos">505</span></a> <span class="c1"># mysql binary is special and can work anywhere, even in order by operations</span>
+</span><span id="MySQL-506"><a href="#MySQL-506"><span class="linenos">506</span></a> <span class="c1"># it operates like a no paren func</span>
+</span><span id="MySQL-507"><a href="#MySQL-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</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="MySQL-508"><a href="#MySQL-508"><span class="linenos">508</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MySQL-509"><a href="#MySQL-509"><span class="linenos">509</span></a>
+</span><span id="MySQL-510"><a href="#MySQL-510"><span class="linenos">510</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
+</span><span id="MySQL-511"><a href="#MySQL-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_column</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="MySQL-512"><a href="#MySQL-512"><span class="linenos">512</span></a>
+</span><span id="MySQL-513"><a href="#MySQL-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="MySQL-514"><a href="#MySQL-514"><span class="linenos">514</span></a>
+</span><span id="MySQL-515"><a href="#MySQL-515"><span class="linenos">515</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="MySQL-516"><a href="#MySQL-516"><span class="linenos">516</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL-517"><a href="#MySQL-517"><span class="linenos">517</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-518"><a href="#MySQL-518"><span class="linenos">518</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-519"><a href="#MySQL-519"><span class="linenos">519</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL-520"><a href="#MySQL-520"><span class="linenos">520</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-521"><a href="#MySQL-521"><span class="linenos">521</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="MySQL-522"><a href="#MySQL-522"><span class="linenos">522</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-523"><a href="#MySQL-523"><span class="linenos">523</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL-524"><a href="#MySQL-524"><span class="linenos">524</span></a>
+</span><span id="MySQL-525"><a href="#MySQL-525"><span class="linenos">525</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-526"><a href="#MySQL-526"><span class="linenos">526</span></a> <span 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="MySQL-527"><a href="#MySQL-527"><span class="linenos">527</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="MySQL-528"><a href="#MySQL-528"><span class="linenos">528</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 class="s2">&quot;DATEDIFF&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="MySQL-529"><a href="#MySQL-529"><span class="linenos">529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="MySQL-530"><a href="#MySQL-530"><span class="linenos">530</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="MySQL-531"><a href="#MySQL-531"><span class="linenos">531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="MySQL-532"><a href="#MySQL-532"><span class="linenos">532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="n">_date_trunc_sql</span><span class="p">,</span>
+</span><span id="MySQL-533"><a href="#MySQL-533"><span class="linenos">533</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="MySQL-534"><a href="#MySQL-534"><span class="linenos">534</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="MySQL-535"><a href="#MySQL-535"><span class="linenos">535</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="MySQL-536"><a href="#MySQL-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;this&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2"> SEPARATOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;separator&quot;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s2">&quot;&#39;,&#39;&quot;</span><span class="si">}</span><span class="s2">)&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="MySQL-537"><a href="#MySQL-537"><span class="linenos">537</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="MySQL-538"><a href="#MySQL-538"><span class="linenos">538</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="MySQL-539"><a href="#MySQL-539"><span class="linenos">539</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">:</span> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="MySQL-540"><a href="#MySQL-540"><span class="linenos">540</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="MySQL-541"><a href="#MySQL-541"><span class="linenos">541</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-542"><a href="#MySQL-542"><span class="linenos">542</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-543"><a href="#MySQL-543"><span class="linenos">543</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-544"><a href="#MySQL-544"><span class="linenos">544</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="MySQL-545"><a href="#MySQL-545"><span class="linenos">545</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-546"><a href="#MySQL-546"><span class="linenos">546</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-547"><a href="#MySQL-547"><span class="linenos">547</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-548"><a href="#MySQL-548"><span class="linenos">548</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-549"><a href="#MySQL-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Stuff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;INSERT&quot;</span><span class="p">),</span>
+</span><span id="MySQL-550"><a href="#MySQL-550"><span class="linenos">550</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-551"><a href="#MySQL-551"><span class="linenos">551</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-552"><a href="#MySQL-552"><span class="linenos">552</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">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;datetime&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
+</span><span id="MySQL-553"><a href="#MySQL-553"><span class="linenos">553</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-554"><a href="#MySQL-554"><span class="linenos">554</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-555"><a href="#MySQL-555"><span class="linenos">555</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-556"><a href="#MySQL-556"><span class="linenos">556</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-557"><a href="#MySQL-557"><span class="linenos">557</span></a> <span class="p">}</span>
+</span><span id="MySQL-558"><a href="#MySQL-558"><span class="linenos">558</span></a>
+</span><span id="MySQL-559"><a href="#MySQL-559"><span class="linenos">559</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-560"><a href="#MySQL-560"><span class="linenos">560</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-561"><a href="#MySQL-561"><span class="linenos">561</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-562"><a href="#MySQL-562"><span class="linenos">562</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-563"><a href="#MySQL-563"><span class="linenos">563</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-564"><a href="#MySQL-564"><span class="linenos">564</span></a>
+</span><span id="MySQL-565"><a href="#MySQL-565"><span class="linenos">565</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-566"><a href="#MySQL-566"><span class="linenos">566</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="MySQL-567"><a href="#MySQL-567"><span class="linenos">567</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-568"><a href="#MySQL-568"><span class="linenos">568</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-569"><a href="#MySQL-569"><span class="linenos">569</span></a> <span class="p">}</span>
</span><span id="MySQL-570"><a href="#MySQL-570"><span class="linenos">570</span></a>
-</span><span id="MySQL-571"><a href="#MySQL-571"><span class="linenos">571</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL-572"><a href="#MySQL-572"><span class="linenos">572</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="MySQL-573"><a href="#MySQL-573"><span class="linenos">573</span></a>
-</span><span id="MySQL-574"><a href="#MySQL-574"><span class="linenos">574</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL-575"><a href="#MySQL-575"><span class="linenos">575</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="MySQL-576"><a href="#MySQL-576"><span class="linenos">576</span></a>
-</span><span id="MySQL-577"><a href="#MySQL-577"><span class="linenos">577</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="MySQL-578"><a href="#MySQL-578"><span class="linenos">578</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="MySQL-579"><a href="#MySQL-579"><span class="linenos">579</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
-</span><span id="MySQL-580"><a href="#MySQL-580"><span class="linenos">580</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="MySQL-581"><a href="#MySQL-581"><span class="linenos">581</span></a>
-</span><span id="MySQL-582"><a href="#MySQL-582"><span class="linenos">582</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-583"><a href="#MySQL-583"><span class="linenos">583</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-584"><a href="#MySQL-584"><span class="linenos">584</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-585"><a href="#MySQL-585"><span class="linenos">585</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-586"><a href="#MySQL-586"><span class="linenos">586</span></a>
-</span><span id="MySQL-587"><a href="#MySQL-587"><span class="linenos">587</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-588"><a href="#MySQL-588"><span class="linenos">588</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-589"><a href="#MySQL-589"><span class="linenos">589</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-590"><a href="#MySQL-590"><span class="linenos">590</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-591"><a href="#MySQL-591"><span class="linenos">591</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-592"><a href="#MySQL-592"><span class="linenos">592</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-571"><a href="#MySQL-571"><span class="linenos">571</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="MySQL-572"><a href="#MySQL-572"><span class="linenos">572</span></a>
+</span><span id="MySQL-573"><a href="#MySQL-573"><span class="linenos">573</span></a> <span class="c1"># MySQL doesn&#39;t support many datatypes in cast.</span>
+</span><span id="MySQL-574"><a href="#MySQL-574"><span class="linenos">574</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast</span>
+</span><span id="MySQL-575"><a href="#MySQL-575"><span class="linenos">575</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-576"><a href="#MySQL-576"><span class="linenos">576</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL-577"><a href="#MySQL-577"><span class="linenos">577</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL-578"><a href="#MySQL-578"><span class="linenos">578</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL-579"><a href="#MySQL-579"><span class="linenos">579</span></a> <span class="n">exp</span><span 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;CHAR&quot;</span><span class="p">,</span>
+</span><span id="MySQL-580"><a href="#MySQL-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UNSIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL-581"><a href="#MySQL-581"><span class="linenos">581</span></a> <span class="n">exp</span><span 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;CHAR&quot;</span><span class="p">,</span>
+</span><span id="MySQL-582"><a href="#MySQL-582"><span class="linenos">582</span></a> <span class="p">}</span>
+</span><span id="MySQL-583"><a href="#MySQL-583"><span class="linenos">583</span></a>
+</span><span id="MySQL-584"><a href="#MySQL-584"><span class="linenos">584</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL-585"><a href="#MySQL-585"><span class="linenos">585</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
+</span><span id="MySQL-586"><a href="#MySQL-586"><span class="linenos">586</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL-587"><a href="#MySQL-587"><span class="linenos">587</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
+</span><span id="MySQL-588"><a href="#MySQL-588"><span class="linenos">588</span></a>
+</span><span id="MySQL-589"><a href="#MySQL-589"><span class="linenos">589</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="MySQL-590"><a href="#MySQL-590"><span class="linenos">590</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
+</span><span id="MySQL-591"><a href="#MySQL-591"><span class="linenos">591</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL-592"><a href="#MySQL-592"><span class="linenos">592</span></a> <span class="k">return</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><span id="MySQL-593"><a href="#MySQL-593"><span class="linenos">593</span></a>
-</span><span id="MySQL-594"><a href="#MySQL-594"><span class="linenos">594</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-595"><a href="#MySQL-595"><span class="linenos">595</span></a>
-</span><span id="MySQL-596"><a href="#MySQL-596"><span class="linenos">596</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-597"><a href="#MySQL-597"><span class="linenos">597</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-594"><a href="#MySQL-594"><span class="linenos">594</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL-595"><a href="#MySQL-595"><span class="linenos">595</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="MySQL-596"><a href="#MySQL-596"><span class="linenos">596</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
+</span><span id="MySQL-597"><a href="#MySQL-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="MySQL-598"><a href="#MySQL-598"><span class="linenos">598</span></a>
-</span><span id="MySQL-599"><a href="#MySQL-599"><span class="linenos">599</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-600"><a href="#MySQL-600"><span class="linenos">600</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-601"><a href="#MySQL-601"><span class="linenos">601</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-602"><a href="#MySQL-602"><span class="linenos">602</span></a>
-</span><span id="MySQL-603"><a href="#MySQL-603"><span class="linenos">603</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-604"><a href="#MySQL-604"><span class="linenos">604</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-605"><a href="#MySQL-605"><span class="linenos">605</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-606"><a href="#MySQL-606"><span class="linenos">606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-607"><a href="#MySQL-607"><span class="linenos">607</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-608"><a href="#MySQL-608"><span class="linenos">608</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-599"><a href="#MySQL-599"><span class="linenos">599</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL-600"><a href="#MySQL-600"><span class="linenos">600</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="MySQL-601"><a href="#MySQL-601"><span class="linenos">601</span></a>
+</span><span id="MySQL-602"><a href="#MySQL-602"><span class="linenos">602</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL-603"><a href="#MySQL-603"><span class="linenos">603</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="MySQL-604"><a href="#MySQL-604"><span class="linenos">604</span></a>
+</span><span id="MySQL-605"><a href="#MySQL-605"><span class="linenos">605</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="MySQL-606"><a href="#MySQL-606"><span class="linenos">606</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="MySQL-607"><a href="#MySQL-607"><span class="linenos">607</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
+</span><span id="MySQL-608"><a href="#MySQL-608"><span class="linenos">608</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="MySQL-609"><a href="#MySQL-609"><span class="linenos">609</span></a>
-</span><span id="MySQL-610"><a href="#MySQL-610"><span class="linenos">610</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-611"><a href="#MySQL-611"><span class="linenos">611</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-612"><a href="#MySQL-612"><span class="linenos">612</span></a>
-</span><span id="MySQL-613"><a href="#MySQL-613"><span class="linenos">613</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-610"><a href="#MySQL-610"><span class="linenos">610</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-611"><a href="#MySQL-611"><span class="linenos">611</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-612"><a href="#MySQL-612"><span class="linenos">612</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-613"><a href="#MySQL-613"><span class="linenos">613</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-614"><a href="#MySQL-614"><span class="linenos">614</span></a>
-</span><span id="MySQL-615"><a href="#MySQL-615"><span class="linenos">615</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-616"><a href="#MySQL-616"><span class="linenos">616</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-617"><a href="#MySQL-617"><span class="linenos">617</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-618"><a href="#MySQL-618"><span class="linenos">618</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-619"><a href="#MySQL-619"><span class="linenos">619</span></a>
-</span><span id="MySQL-620"><a href="#MySQL-620"><span class="linenos">620</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-615"><a href="#MySQL-615"><span class="linenos">615</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-616"><a href="#MySQL-616"><span class="linenos">616</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-617"><a href="#MySQL-617"><span class="linenos">617</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-618"><a href="#MySQL-618"><span class="linenos">618</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-619"><a href="#MySQL-619"><span class="linenos">619</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-620"><a href="#MySQL-620"><span class="linenos">620</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-621"><a href="#MySQL-621"><span class="linenos">621</span></a>
-</span><span id="MySQL-622"><a href="#MySQL-622"><span class="linenos">622</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-623"><a href="#MySQL-623"><span class="linenos">623</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-624"><a href="#MySQL-624"><span class="linenos">624</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 class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-625"><a href="#MySQL-625"><span class="linenos">625</span></a>
-</span><span id="MySQL-626"><a href="#MySQL-626"><span class="linenos">626</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-627"><a href="#MySQL-627"><span class="linenos">627</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-628"><a href="#MySQL-628"><span class="linenos">628</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-629"><a href="#MySQL-629"><span class="linenos">629</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
-</span><span id="MySQL-630"><a href="#MySQL-630"><span class="linenos">630</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-631"><a href="#MySQL-631"><span class="linenos">631</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-632"><a href="#MySQL-632"><span class="linenos">632</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-622"><a href="#MySQL-622"><span class="linenos">622</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-623"><a href="#MySQL-623"><span class="linenos">623</span></a>
+</span><span id="MySQL-624"><a href="#MySQL-624"><span class="linenos">624</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-625"><a href="#MySQL-625"><span class="linenos">625</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-626"><a href="#MySQL-626"><span class="linenos">626</span></a>
+</span><span id="MySQL-627"><a href="#MySQL-627"><span class="linenos">627</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-628"><a href="#MySQL-628"><span class="linenos">628</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-629"><a href="#MySQL-629"><span class="linenos">629</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-630"><a href="#MySQL-630"><span class="linenos">630</span></a>
+</span><span id="MySQL-631"><a href="#MySQL-631"><span class="linenos">631</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-632"><a href="#MySQL-632"><span class="linenos">632</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-633"><a href="#MySQL-633"><span class="linenos">633</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-634"><a href="#MySQL-634"><span class="linenos">634</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-635"><a href="#MySQL-635"><span class="linenos">635</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-636"><a href="#MySQL-636"><span class="linenos">636</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-637"><a href="#MySQL-637"><span class="linenos">637</span></a>
+</span><span id="MySQL-638"><a href="#MySQL-638"><span class="linenos">638</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-639"><a href="#MySQL-639"><span class="linenos">639</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-640"><a href="#MySQL-640"><span class="linenos">640</span></a>
+</span><span id="MySQL-641"><a href="#MySQL-641"><span class="linenos">641</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-642"><a href="#MySQL-642"><span class="linenos">642</span></a>
+</span><span id="MySQL-643"><a href="#MySQL-643"><span class="linenos">643</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-644"><a href="#MySQL-644"><span class="linenos">644</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-645"><a href="#MySQL-645"><span class="linenos">645</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-646"><a href="#MySQL-646"><span class="linenos">646</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-647"><a href="#MySQL-647"><span class="linenos">647</span></a>
+</span><span id="MySQL-648"><a href="#MySQL-648"><span class="linenos">648</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-649"><a href="#MySQL-649"><span class="linenos">649</span></a>
+</span><span id="MySQL-650"><a href="#MySQL-650"><span class="linenos">650</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-651"><a href="#MySQL-651"><span class="linenos">651</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-652"><a href="#MySQL-652"><span class="linenos">652</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 class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-653"><a href="#MySQL-653"><span class="linenos">653</span></a>
+</span><span id="MySQL-654"><a href="#MySQL-654"><span class="linenos">654</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-655"><a href="#MySQL-655"><span class="linenos">655</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-656"><a href="#MySQL-656"><span class="linenos">656</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-657"><a href="#MySQL-657"><span class="linenos">657</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
+</span><span id="MySQL-658"><a href="#MySQL-658"><span class="linenos">658</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-659"><a href="#MySQL-659"><span class="linenos">659</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-660"><a href="#MySQL-660"><span class="linenos">660</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
+ <div id="MySQL.IDENTIFIERS_CAN_START_WITH_DIGIT" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIERS_CAN_START_WITH_DIGIT</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.IDENTIFIERS_CAN_START_WITH_DIGIT"></a>
+
+
+
+ </div>
<div id="MySQL.TIME_FORMAT" class="classattr">
<div class="attr variable">
<span class="name">TIME_FORMAT</span> =
@@ -1520,11 +1608,23 @@
</div>
+ <div id="MySQL.DPIPE_IS_STRING_CONCAT" class="classattr">
+ <div class="attr variable">
+ <span class="name">DPIPE_IS_STRING_CONCAT</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.DPIPE_IS_STRING_CONCAT"></a>
+
+
+
+ </div>
<div id="MySQL.TIME_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="MySQL.TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
</div>
@@ -1573,7 +1673,7 @@
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="MySQL.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -1586,7 +1686,7 @@
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="MySQL.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -1599,7 +1699,7 @@
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="MySQL.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -1749,7 +1849,6 @@
<dd id="MySQL.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="MySQL.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="MySQL.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
- <dd id="MySQL.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="MySQL.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="MySQL.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="MySQL.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -1787,78 +1886,80 @@
</div>
<a class="headerlink" href="#MySQL.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Tokenizer-115"><a href="#MySQL.Tokenizer-115"><span class="linenos">115</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="MySQL.Tokenizer-116"><a href="#MySQL.Tokenizer-116"><span class="linenos">116</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="MySQL.Tokenizer-117"><a href="#MySQL.Tokenizer-117"><span class="linenos">117</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="MySQL.Tokenizer-118"><a href="#MySQL.Tokenizer-118"><span class="linenos">118</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="MySQL.Tokenizer-119"><a href="#MySQL.Tokenizer-119"><span class="linenos">119</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="MySQL.Tokenizer-120"><a href="#MySQL.Tokenizer-120"><span class="linenos">120</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 class="p">(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="MySQL.Tokenizer-121"><a href="#MySQL.Tokenizer-121"><span class="linenos">121</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 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="MySQL.Tokenizer-122"><a href="#MySQL.Tokenizer-122"><span class="linenos">122</span></a>
-</span><span id="MySQL.Tokenizer-123"><a href="#MySQL.Tokenizer-123"><span class="linenos">123</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Tokenizer-124"><a href="#MySQL.Tokenizer-124"><span class="linenos">124</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="MySQL.Tokenizer-125"><a href="#MySQL.Tokenizer-125"><span class="linenos">125</span></a> <span class="s2">&quot;CHARSET&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="MySQL.Tokenizer-126"><a href="#MySQL.Tokenizer-126"><span class="linenos">126</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-127"><a href="#MySQL.Tokenizer-127"><span class="linenos">127</span></a> <span class="s2">&quot;FORCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-128"><a href="#MySQL.Tokenizer-128"><span class="linenos">128</span></a> <span class="s2">&quot;IGNORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-129"><a href="#MySQL.Tokenizer-129"><span class="linenos">129</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-130"><a href="#MySQL.Tokenizer-130"><span class="linenos">130</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-131"><a href="#MySQL.Tokenizer-131"><span class="linenos">131</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-132"><a href="#MySQL.Tokenizer-132"><span class="linenos">132</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-133"><a href="#MySQL.Tokenizer-133"><span class="linenos">133</span></a> <span class="s2">&quot;MEMBER OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-134"><a href="#MySQL.Tokenizer-134"><span class="linenos">134</span></a> <span class="s2">&quot;SEPARATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-135"><a href="#MySQL.Tokenizer-135"><span class="linenos">135</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="MySQL.Tokenizer-136"><a href="#MySQL.Tokenizer-136"><span class="linenos">136</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">BIGINT</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-137"><a href="#MySQL.Tokenizer-137"><span class="linenos">137</span></a> <span class="s2">&quot;SIGNED INTEGER&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="MySQL.Tokenizer-138"><a href="#MySQL.Tokenizer-138"><span class="linenos">138</span></a> <span class="s2">&quot;UNSIGNED&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="MySQL.Tokenizer-139"><a href="#MySQL.Tokenizer-139"><span class="linenos">139</span></a> <span class="s2">&quot;UNSIGNED INTEGER&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="MySQL.Tokenizer-140"><a href="#MySQL.Tokenizer-140"><span class="linenos">140</span></a> <span class="s2">&quot;_ARMSCII8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-141"><a href="#MySQL.Tokenizer-141"><span class="linenos">141</span></a> <span class="s2">&quot;_ASCII&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-142"><a href="#MySQL.Tokenizer-142"><span class="linenos">142</span></a> <span class="s2">&quot;_BIG5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-143"><a href="#MySQL.Tokenizer-143"><span class="linenos">143</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">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-144"><a href="#MySQL.Tokenizer-144"><span class="linenos">144</span></a> <span class="s2">&quot;_CP1250&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-145"><a href="#MySQL.Tokenizer-145"><span class="linenos">145</span></a> <span class="s2">&quot;_CP1251&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-146"><a href="#MySQL.Tokenizer-146"><span class="linenos">146</span></a> <span class="s2">&quot;_CP1256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-147"><a href="#MySQL.Tokenizer-147"><span class="linenos">147</span></a> <span class="s2">&quot;_CP1257&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-148"><a href="#MySQL.Tokenizer-148"><span class="linenos">148</span></a> <span class="s2">&quot;_CP850&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-149"><a href="#MySQL.Tokenizer-149"><span class="linenos">149</span></a> <span class="s2">&quot;_CP852&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-150"><a href="#MySQL.Tokenizer-150"><span class="linenos">150</span></a> <span class="s2">&quot;_CP866&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-151"><a href="#MySQL.Tokenizer-151"><span class="linenos">151</span></a> <span class="s2">&quot;_CP932&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-152"><a href="#MySQL.Tokenizer-152"><span class="linenos">152</span></a> <span class="s2">&quot;_DEC8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-153"><a href="#MySQL.Tokenizer-153"><span class="linenos">153</span></a> <span class="s2">&quot;_EUCJPMS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-154"><a href="#MySQL.Tokenizer-154"><span class="linenos">154</span></a> <span class="s2">&quot;_EUCKR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-155"><a href="#MySQL.Tokenizer-155"><span class="linenos">155</span></a> <span class="s2">&quot;_GB18030&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-156"><a href="#MySQL.Tokenizer-156"><span class="linenos">156</span></a> <span class="s2">&quot;_GB2312&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-157"><a href="#MySQL.Tokenizer-157"><span class="linenos">157</span></a> <span class="s2">&quot;_GBK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-158"><a href="#MySQL.Tokenizer-158"><span class="linenos">158</span></a> <span class="s2">&quot;_GEOSTD8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-159"><a href="#MySQL.Tokenizer-159"><span class="linenos">159</span></a> <span class="s2">&quot;_GREEK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-160"><a href="#MySQL.Tokenizer-160"><span class="linenos">160</span></a> <span class="s2">&quot;_HEBREW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-161"><a href="#MySQL.Tokenizer-161"><span class="linenos">161</span></a> <span class="s2">&quot;_HP8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-162"><a href="#MySQL.Tokenizer-162"><span class="linenos">162</span></a> <span class="s2">&quot;_KEYBCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-163"><a href="#MySQL.Tokenizer-163"><span class="linenos">163</span></a> <span class="s2">&quot;_KOI8R&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-164"><a href="#MySQL.Tokenizer-164"><span class="linenos">164</span></a> <span class="s2">&quot;_KOI8U&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-165"><a href="#MySQL.Tokenizer-165"><span class="linenos">165</span></a> <span class="s2">&quot;_LATIN1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-166"><a href="#MySQL.Tokenizer-166"><span class="linenos">166</span></a> <span class="s2">&quot;_LATIN2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-167"><a href="#MySQL.Tokenizer-167"><span class="linenos">167</span></a> <span class="s2">&quot;_LATIN5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-168"><a href="#MySQL.Tokenizer-168"><span class="linenos">168</span></a> <span class="s2">&quot;_LATIN7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-169"><a href="#MySQL.Tokenizer-169"><span class="linenos">169</span></a> <span class="s2">&quot;_MACCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-170"><a href="#MySQL.Tokenizer-170"><span class="linenos">170</span></a> <span class="s2">&quot;_MACROMAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-171"><a href="#MySQL.Tokenizer-171"><span class="linenos">171</span></a> <span class="s2">&quot;_SJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-172"><a href="#MySQL.Tokenizer-172"><span class="linenos">172</span></a> <span class="s2">&quot;_SWE7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-173"><a href="#MySQL.Tokenizer-173"><span class="linenos">173</span></a> <span class="s2">&quot;_TIS620&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-174"><a href="#MySQL.Tokenizer-174"><span class="linenos">174</span></a> <span class="s2">&quot;_UCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-175"><a href="#MySQL.Tokenizer-175"><span class="linenos">175</span></a> <span class="s2">&quot;_UJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-176"><a href="#MySQL.Tokenizer-176"><span class="linenos">176</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/string-literals.html</span>
-</span><span id="MySQL.Tokenizer-177"><a href="#MySQL.Tokenizer-177"><span class="linenos">177</span></a> <span class="s2">&quot;_UTF8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-178"><a href="#MySQL.Tokenizer-178"><span class="linenos">178</span></a> <span class="s2">&quot;_UTF16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-179"><a href="#MySQL.Tokenizer-179"><span class="linenos">179</span></a> <span class="s2">&quot;_UTF16LE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-180"><a href="#MySQL.Tokenizer-180"><span class="linenos">180</span></a> <span class="s2">&quot;_UTF32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-181"><a href="#MySQL.Tokenizer-181"><span class="linenos">181</span></a> <span class="s2">&quot;_UTF8MB3&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-182"><a href="#MySQL.Tokenizer-182"><span class="linenos">182</span></a> <span class="s2">&quot;_UTF8MB4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-183"><a href="#MySQL.Tokenizer-183"><span class="linenos">183</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">,</span>
-</span><span id="MySQL.Tokenizer-184"><a href="#MySQL.Tokenizer-184"><span class="linenos">184</span></a> <span class="p">}</span>
-</span><span id="MySQL.Tokenizer-185"><a href="#MySQL.Tokenizer-185"><span class="linenos">185</span></a>
-</span><span id="MySQL.Tokenizer-186"><a href="#MySQL.Tokenizer-186"><span class="linenos">186</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Tokenizer-119"><a href="#MySQL.Tokenizer-119"><span class="linenos">119</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="MySQL.Tokenizer-120"><a href="#MySQL.Tokenizer-120"><span class="linenos">120</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="MySQL.Tokenizer-121"><a href="#MySQL.Tokenizer-121"><span class="linenos">121</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="MySQL.Tokenizer-122"><a href="#MySQL.Tokenizer-122"><span class="linenos">122</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="MySQL.Tokenizer-123"><a href="#MySQL.Tokenizer-123"><span class="linenos">123</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="MySQL.Tokenizer-124"><a href="#MySQL.Tokenizer-124"><span class="linenos">124</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 class="p">(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="MySQL.Tokenizer-125"><a href="#MySQL.Tokenizer-125"><span class="linenos">125</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 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="MySQL.Tokenizer-126"><a href="#MySQL.Tokenizer-126"><span class="linenos">126</span></a>
+</span><span id="MySQL.Tokenizer-127"><a href="#MySQL.Tokenizer-127"><span class="linenos">127</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Tokenizer-128"><a href="#MySQL.Tokenizer-128"><span class="linenos">128</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="MySQL.Tokenizer-129"><a href="#MySQL.Tokenizer-129"><span class="linenos">129</span></a> <span class="s2">&quot;CHARSET&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="MySQL.Tokenizer-130"><a href="#MySQL.Tokenizer-130"><span class="linenos">130</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-131"><a href="#MySQL.Tokenizer-131"><span class="linenos">131</span></a> <span class="s2">&quot;FORCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-132"><a href="#MySQL.Tokenizer-132"><span class="linenos">132</span></a> <span class="s2">&quot;IGNORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-133"><a href="#MySQL.Tokenizer-133"><span class="linenos">133</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-134"><a href="#MySQL.Tokenizer-134"><span class="linenos">134</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-135"><a href="#MySQL.Tokenizer-135"><span class="linenos">135</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-136"><a href="#MySQL.Tokenizer-136"><span class="linenos">136</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-137"><a href="#MySQL.Tokenizer-137"><span class="linenos">137</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-138"><a href="#MySQL.Tokenizer-138"><span class="linenos">138</span></a> <span class="s2">&quot;MEMBER OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-139"><a href="#MySQL.Tokenizer-139"><span class="linenos">139</span></a> <span class="s2">&quot;SEPARATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-140"><a href="#MySQL.Tokenizer-140"><span class="linenos">140</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="MySQL.Tokenizer-141"><a href="#MySQL.Tokenizer-141"><span class="linenos">141</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">BIGINT</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-142"><a href="#MySQL.Tokenizer-142"><span class="linenos">142</span></a> <span class="s2">&quot;SIGNED INTEGER&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="MySQL.Tokenizer-143"><a href="#MySQL.Tokenizer-143"><span class="linenos">143</span></a> <span class="s2">&quot;UNSIGNED&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="MySQL.Tokenizer-144"><a href="#MySQL.Tokenizer-144"><span class="linenos">144</span></a> <span class="s2">&quot;UNSIGNED INTEGER&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="MySQL.Tokenizer-145"><a href="#MySQL.Tokenizer-145"><span class="linenos">145</span></a> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-146"><a href="#MySQL.Tokenizer-146"><span class="linenos">146</span></a> <span class="s2">&quot;_ARMSCII8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-147"><a href="#MySQL.Tokenizer-147"><span class="linenos">147</span></a> <span class="s2">&quot;_ASCII&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-148"><a href="#MySQL.Tokenizer-148"><span class="linenos">148</span></a> <span class="s2">&quot;_BIG5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-149"><a href="#MySQL.Tokenizer-149"><span class="linenos">149</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">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-150"><a href="#MySQL.Tokenizer-150"><span class="linenos">150</span></a> <span class="s2">&quot;_CP1250&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-151"><a href="#MySQL.Tokenizer-151"><span class="linenos">151</span></a> <span class="s2">&quot;_CP1251&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-152"><a href="#MySQL.Tokenizer-152"><span class="linenos">152</span></a> <span class="s2">&quot;_CP1256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-153"><a href="#MySQL.Tokenizer-153"><span class="linenos">153</span></a> <span class="s2">&quot;_CP1257&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-154"><a href="#MySQL.Tokenizer-154"><span class="linenos">154</span></a> <span class="s2">&quot;_CP850&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-155"><a href="#MySQL.Tokenizer-155"><span class="linenos">155</span></a> <span class="s2">&quot;_CP852&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-156"><a href="#MySQL.Tokenizer-156"><span class="linenos">156</span></a> <span class="s2">&quot;_CP866&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-157"><a href="#MySQL.Tokenizer-157"><span class="linenos">157</span></a> <span class="s2">&quot;_CP932&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-158"><a href="#MySQL.Tokenizer-158"><span class="linenos">158</span></a> <span class="s2">&quot;_DEC8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-159"><a href="#MySQL.Tokenizer-159"><span class="linenos">159</span></a> <span class="s2">&quot;_EUCJPMS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-160"><a href="#MySQL.Tokenizer-160"><span class="linenos">160</span></a> <span class="s2">&quot;_EUCKR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-161"><a href="#MySQL.Tokenizer-161"><span class="linenos">161</span></a> <span class="s2">&quot;_GB18030&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-162"><a href="#MySQL.Tokenizer-162"><span class="linenos">162</span></a> <span class="s2">&quot;_GB2312&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-163"><a href="#MySQL.Tokenizer-163"><span class="linenos">163</span></a> <span class="s2">&quot;_GBK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-164"><a href="#MySQL.Tokenizer-164"><span class="linenos">164</span></a> <span class="s2">&quot;_GEOSTD8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-165"><a href="#MySQL.Tokenizer-165"><span class="linenos">165</span></a> <span class="s2">&quot;_GREEK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-166"><a href="#MySQL.Tokenizer-166"><span class="linenos">166</span></a> <span class="s2">&quot;_HEBREW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-167"><a href="#MySQL.Tokenizer-167"><span class="linenos">167</span></a> <span class="s2">&quot;_HP8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-168"><a href="#MySQL.Tokenizer-168"><span class="linenos">168</span></a> <span class="s2">&quot;_KEYBCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-169"><a href="#MySQL.Tokenizer-169"><span class="linenos">169</span></a> <span class="s2">&quot;_KOI8R&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-170"><a href="#MySQL.Tokenizer-170"><span class="linenos">170</span></a> <span class="s2">&quot;_KOI8U&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-171"><a href="#MySQL.Tokenizer-171"><span class="linenos">171</span></a> <span class="s2">&quot;_LATIN1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-172"><a href="#MySQL.Tokenizer-172"><span class="linenos">172</span></a> <span class="s2">&quot;_LATIN2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-173"><a href="#MySQL.Tokenizer-173"><span class="linenos">173</span></a> <span class="s2">&quot;_LATIN5&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-174"><a href="#MySQL.Tokenizer-174"><span class="linenos">174</span></a> <span class="s2">&quot;_LATIN7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-175"><a href="#MySQL.Tokenizer-175"><span class="linenos">175</span></a> <span class="s2">&quot;_MACCE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-176"><a href="#MySQL.Tokenizer-176"><span class="linenos">176</span></a> <span class="s2">&quot;_MACROMAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-177"><a href="#MySQL.Tokenizer-177"><span class="linenos">177</span></a> <span class="s2">&quot;_SJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-178"><a href="#MySQL.Tokenizer-178"><span class="linenos">178</span></a> <span class="s2">&quot;_SWE7&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-179"><a href="#MySQL.Tokenizer-179"><span class="linenos">179</span></a> <span class="s2">&quot;_TIS620&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-180"><a href="#MySQL.Tokenizer-180"><span class="linenos">180</span></a> <span class="s2">&quot;_UCS2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-181"><a href="#MySQL.Tokenizer-181"><span class="linenos">181</span></a> <span class="s2">&quot;_UJIS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-182"><a href="#MySQL.Tokenizer-182"><span class="linenos">182</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/string-literals.html</span>
+</span><span id="MySQL.Tokenizer-183"><a href="#MySQL.Tokenizer-183"><span class="linenos">183</span></a> <span class="s2">&quot;_UTF8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-184"><a href="#MySQL.Tokenizer-184"><span class="linenos">184</span></a> <span class="s2">&quot;_UTF16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-185"><a href="#MySQL.Tokenizer-185"><span class="linenos">185</span></a> <span class="s2">&quot;_UTF16LE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-186"><a href="#MySQL.Tokenizer-186"><span class="linenos">186</span></a> <span class="s2">&quot;_UTF32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-187"><a href="#MySQL.Tokenizer-187"><span class="linenos">187</span></a> <span class="s2">&quot;_UTF8MB3&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-188"><a href="#MySQL.Tokenizer-188"><span class="linenos">188</span></a> <span class="s2">&quot;_UTF8MB4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-189"><a href="#MySQL.Tokenizer-189"><span class="linenos">189</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">,</span>
+</span><span id="MySQL.Tokenizer-190"><a href="#MySQL.Tokenizer-190"><span class="linenos">190</span></a> <span class="p">}</span>
+</span><span id="MySQL.Tokenizer-191"><a href="#MySQL.Tokenizer-191"><span class="linenos">191</span></a>
+</span><span id="MySQL.Tokenizer-192"><a href="#MySQL.Tokenizer-192"><span class="linenos">192</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">}</span>
</span></pre></div>
@@ -1940,7 +2041,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="MySQL.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;CHARSET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;ENUM&#39;: &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &#39;FORCE&#39;: &lt;TokenType.FORCE: &#39;FORCE&#39;&gt;, &#39;IGNORE&#39;: &lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;, &#39;LONGBLOB&#39;: &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &#39;LONGTEXT&#39;: &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &#39;MEDIUMBLOB&#39;: &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &#39;MEDIUMTEXT&#39;: &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &#39;MEMBER OF&#39;: &lt;TokenType.MEMBER_OF: &#39;MEMBER_OF&#39;&gt;, &#39;SEPARATOR&#39;: &lt;TokenType.SEPARATOR: &#39;SEPARATOR&#39;&gt;, &#39;START&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;SIGNED&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;SIGNED INTEGER&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;UNSIGNED&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;UNSIGNED INTEGER&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;_ARMSCII8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_ASCII&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_BIG5&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_BINARY&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1250&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1251&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1256&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1257&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP850&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP852&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP866&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP932&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_DEC8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_EUCJPMS&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_EUCKR&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GB18030&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GB2312&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GBK&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GEOSTD8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GREEK&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_HEBREW&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_HP8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_KEYBCS2&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_KOI8R&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_KOI8U&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN1&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN2&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN5&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN7&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_MACCE&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_MACROMAN&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_SJIS&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_SWE7&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_TIS620&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UCS2&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UJIS&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF16&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF16LE&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF32&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF8MB3&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF8MB4&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;@@&#39;: &lt;TokenType.SESSION_PARAMETER: &#39;SESSION_PARAMETER&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;CHARSET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;ENUM&#39;: &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &#39;FORCE&#39;: &lt;TokenType.FORCE: &#39;FORCE&#39;&gt;, &#39;IGNORE&#39;: &lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;, &#39;LONGBLOB&#39;: &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &#39;LONGTEXT&#39;: &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &#39;MEDIUMBLOB&#39;: &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &#39;MEDIUMTEXT&#39;: &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &#39;MEDIUMINT&#39;: &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &#39;MEMBER OF&#39;: &lt;TokenType.MEMBER_OF: &#39;MEMBER_OF&#39;&gt;, &#39;SEPARATOR&#39;: &lt;TokenType.SEPARATOR: &#39;SEPARATOR&#39;&gt;, &#39;START&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;SIGNED&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;SIGNED INTEGER&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;UNSIGNED&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;UNSIGNED INTEGER&#39;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &#39;YEAR&#39;: &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &#39;_ARMSCII8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_ASCII&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_BIG5&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_BINARY&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1250&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1251&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1256&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP1257&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP850&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP852&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP866&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_CP932&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_DEC8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_EUCJPMS&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_EUCKR&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GB18030&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GB2312&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GBK&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GEOSTD8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_GREEK&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_HEBREW&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_HP8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_KEYBCS2&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_KOI8R&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_KOI8U&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN1&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN2&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN5&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_LATIN7&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_MACCE&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_MACROMAN&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_SJIS&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_SWE7&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_TIS620&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UCS2&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UJIS&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF8&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF16&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF16LE&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF32&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF8MB3&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;_UTF8MB4&#39;: &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;, &#39;@@&#39;: &lt;TokenType.SESSION_PARAMETER: &#39;SESSION_PARAMETER&#39;&gt;}</span>
</div>
@@ -1952,7 +2053,7 @@
<div id="MySQL.Tokenizer.COMMANDS" class="classattr">
<div class="attr variable">
<span class="name">COMMANDS</span> =
-<span class="default_value">{&lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;}</span>
</div>
@@ -1961,6 +2062,18 @@
</div>
+ <div id="MySQL.Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="annotation">: bool</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT"></a>
+
+
+
+ </div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
@@ -1970,7 +2083,6 @@
<dd id="MySQL.Tokenizer.RAW_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.RAW_STRINGS">RAW_STRINGS</a></dd>
<dd id="MySQL.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="MySQL.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
- <dd id="MySQL.Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="MySQL.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="MySQL.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
<dd id="MySQL.Tokenizer.NUMERIC_LITERALS" class="variable"><a href="../tokens.html#Tokenizer.NUMERIC_LITERALS">NUMERIC_LITERALS</a></dd>
@@ -1997,307 +2109,326 @@
</div>
<a class="headerlink" href="#MySQL.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Parser-188"><a href="#MySQL.Parser-188"><span class="linenos">188</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="MySQL.Parser-189"><a href="#MySQL.Parser-189"><span class="linenos">189</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-190"><a href="#MySQL.Parser-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">FUNC_TOKENS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-191"><a href="#MySQL.Parser-191"><span class="linenos">191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
-</span><span id="MySQL.Parser-192"><a href="#MySQL.Parser-192"><span class="linenos">192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
-</span><span id="MySQL.Parser-193"><a href="#MySQL.Parser-193"><span class="linenos">193</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="MySQL.Parser-194"><a href="#MySQL.Parser-194"><span class="linenos">194</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-195"><a href="#MySQL.Parser-195"><span class="linenos">195</span></a>
-</span><span id="MySQL.Parser-196"><a href="#MySQL.Parser-196"><span class="linenos">196</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-197"><a href="#MySQL.Parser-197"><span class="linenos">197</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">CONJUNCTION</span><span class="p">,</span>
-</span><span id="MySQL.Parser-198"><a href="#MySQL.Parser-198"><span class="linenos">198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</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="MySQL.Parser-199"><a href="#MySQL.Parser-199"><span class="linenos">199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">,</span>
-</span><span id="MySQL.Parser-200"><a href="#MySQL.Parser-200"><span class="linenos">200</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-201"><a href="#MySQL.Parser-201"><span class="linenos">201</span></a>
-</span><span id="MySQL.Parser-202"><a href="#MySQL.Parser-202"><span class="linenos">202</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="MySQL.Parser-203"><a href="#MySQL.Parser-203"><span class="linenos">203</span></a> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span>
-</span><span id="MySQL.Parser-204"><a href="#MySQL.Parser-204"><span class="linenos">204</span></a> <span class="p">)</span>
-</span><span id="MySQL.Parser-205"><a href="#MySQL.Parser-205"><span class="linenos">205</span></a>
-</span><span id="MySQL.Parser-206"><a href="#MySQL.Parser-206"><span class="linenos">206</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-207"><a href="#MySQL.Parser-207"><span class="linenos">207</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-208"><a href="#MySQL.Parser-208"><span class="linenos">208</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="MySQL.Parser-209"><a href="#MySQL.Parser-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">,</span>
-</span><span id="MySQL.Parser-210"><a href="#MySQL.Parser-210"><span class="linenos">210</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="MySQL.Parser-211"><a href="#MySQL.Parser-211"><span class="linenos">211</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_expression</span><span class="p">),</span>
-</span><span id="MySQL.Parser-212"><a href="#MySQL.Parser-212"><span class="linenos">212</span></a> <span class="p">),</span>
-</span><span id="MySQL.Parser-213"><a href="#MySQL.Parser-213"><span class="linenos">213</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-214"><a href="#MySQL.Parser-214"><span class="linenos">214</span></a>
-</span><span id="MySQL.Parser-215"><a href="#MySQL.Parser-215"><span class="linenos">215</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-216"><a href="#MySQL.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><span id="MySQL.Parser-217"><a href="#MySQL.Parser-217"><span class="linenos">217</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="MySQL.Parser-218"><a href="#MySQL.Parser-218"><span class="linenos">218</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;mysql&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-219"><a href="#MySQL.Parser-219"><span class="linenos">219</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="MySQL.Parser-220"><a href="#MySQL.Parser-220"><span class="linenos">220</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="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 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 class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
-</span><span id="MySQL.Parser-221"><a href="#MySQL.Parser-221"><span class="linenos">221</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="MySQL.Parser-222"><a href="#MySQL.Parser-222"><span class="linenos">222</span></a> <span class="s2">&quot;STR_TO_DATE&quot;</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="MySQL.Parser-223"><a href="#MySQL.Parser-223"><span class="linenos">223</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-224"><a href="#MySQL.Parser-224"><span class="linenos">224</span></a>
-</span><span id="MySQL.Parser-225"><a href="#MySQL.Parser-225"><span class="linenos">225</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-226"><a href="#MySQL.Parser-226"><span class="linenos">226</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="MySQL.Parser-227"><a href="#MySQL.Parser-227"><span class="linenos">227</span></a> <span class="s2">&quot;GROUP_CONCAT&quot;</span><span class="p">:</span> <span class="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="MySQL.Parser-228"><a href="#MySQL.Parser-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span>
-</span><span id="MySQL.Parser-229"><a href="#MySQL.Parser-229"><span class="linenos">229</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
-</span><span id="MySQL.Parser-230"><a href="#MySQL.Parser-230"><span class="linenos">230</span></a> <span class="n">separator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
-</span><span id="MySQL.Parser-231"><a href="#MySQL.Parser-231"><span class="linenos">231</span></a> <span class="p">),</span>
-</span><span id="MySQL.Parser-232"><a href="#MySQL.Parser-232"><span class="linenos">232</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values</span>
-</span><span id="MySQL.Parser-233"><a href="#MySQL.Parser-233"><span class="linenos">233</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="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="MySQL.Parser-234"><a href="#MySQL.Parser-234"><span class="linenos">234</span></a> <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="s2">&quot;VALUES&quot;</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_id_var</span><span class="p">()]</span>
-</span><span id="MySQL.Parser-235"><a href="#MySQL.Parser-235"><span class="linenos">235</span></a> <span class="p">),</span>
-</span><span id="MySQL.Parser-236"><a href="#MySQL.Parser-236"><span class="linenos">236</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-237"><a href="#MySQL.Parser-237"><span class="linenos">237</span></a>
-</span><span id="MySQL.Parser-238"><a href="#MySQL.Parser-238"><span class="linenos">238</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-239"><a href="#MySQL.Parser-239"><span class="linenos">239</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-240"><a href="#MySQL.Parser-240"><span class="linenos">240</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show</span><span class="p">(),</span>
-</span><span id="MySQL.Parser-241"><a href="#MySQL.Parser-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-242"><a href="#MySQL.Parser-242"><span class="linenos">242</span></a>
-</span><span id="MySQL.Parser-243"><a href="#MySQL.Parser-243"><span class="linenos">243</span></a> <span class="n">SHOW_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-244"><a href="#MySQL.Parser-244"><span class="linenos">244</span></a> <span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-245"><a href="#MySQL.Parser-245"><span class="linenos">245</span></a> <span class="s2">&quot;MASTER LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-246"><a href="#MySQL.Parser-246"><span class="linenos">246</span></a> <span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-247"><a href="#MySQL.Parser-247"><span class="linenos">247</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-248"><a href="#MySQL.Parser-248"><span class="linenos">248</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-249"><a href="#MySQL.Parser-249"><span class="linenos">249</span></a> <span class="s2">&quot;COLLATION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLLATION&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-250"><a href="#MySQL.Parser-250"><span class="linenos">250</span></a> <span class="s2">&quot;FULL COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-251"><a href="#MySQL.Parser-251"><span class="linenos">251</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-252"><a href="#MySQL.Parser-252"><span class="linenos">252</span></a> <span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-253"><a href="#MySQL.Parser-253"><span class="linenos">253</span></a> <span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-254"><a href="#MySQL.Parser-254"><span class="linenos">254</span></a> <span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-255"><a href="#MySQL.Parser-255"><span class="linenos">255</span></a> <span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-256"><a href="#MySQL.Parser-256"><span class="linenos">256</span></a> <span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-257"><a href="#MySQL.Parser-257"><span class="linenos">257</span></a> <span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-258"><a href="#MySQL.Parser-258"><span class="linenos">258</span></a> <span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-259"><a href="#MySQL.Parser-259"><span class="linenos">259</span></a> <span class="s2">&quot;DATABASES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;DATABASES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-260"><a href="#MySQL.Parser-260"><span class="linenos">260</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-261"><a href="#MySQL.Parser-261"><span class="linenos">261</span></a> <span class="s2">&quot;STORAGE ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-262"><a href="#MySQL.Parser-262"><span class="linenos">262</span></a> <span class="s2">&quot;ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-263"><a href="#MySQL.Parser-263"><span class="linenos">263</span></a> <span class="s2">&quot;ERRORS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ERRORS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-264"><a href="#MySQL.Parser-264"><span class="linenos">264</span></a> <span class="s2">&quot;EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;EVENTS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-265"><a href="#MySQL.Parser-265"><span class="linenos">265</span></a> <span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-266"><a href="#MySQL.Parser-266"><span class="linenos">266</span></a> <span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-267"><a href="#MySQL.Parser-267"><span class="linenos">267</span></a> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FOR&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-268"><a href="#MySQL.Parser-268"><span class="linenos">268</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-269"><a href="#MySQL.Parser-269"><span class="linenos">269</span></a> <span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-270"><a href="#MySQL.Parser-270"><span class="linenos">270</span></a> <span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-271"><a href="#MySQL.Parser-271"><span class="linenos">271</span></a> <span class="s2">&quot;PLUGINS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PLUGINS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-272"><a href="#MySQL.Parser-272"><span class="linenos">272</span></a> <span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-273"><a href="#MySQL.Parser-273"><span class="linenos">273</span></a> <span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-274"><a href="#MySQL.Parser-274"><span class="linenos">274</span></a> <span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-275"><a href="#MySQL.Parser-275"><span class="linenos">275</span></a> <span class="s2">&quot;FULL PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-276"><a href="#MySQL.Parser-276"><span class="linenos">276</span></a> <span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-277"><a href="#MySQL.Parser-277"><span class="linenos">277</span></a> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILE&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-278"><a href="#MySQL.Parser-278"><span class="linenos">278</span></a> <span class="s2">&quot;PROFILES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-279"><a href="#MySQL.Parser-279"><span class="linenos">279</span></a> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-280"><a href="#MySQL.Parser-280"><span class="linenos">280</span></a> <span class="s2">&quot;REPLICAS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-281"><a href="#MySQL.Parser-281"><span class="linenos">281</span></a> <span class="s2">&quot;SLAVE HOSTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-282"><a href="#MySQL.Parser-282"><span class="linenos">282</span></a> <span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-283"><a href="#MySQL.Parser-283"><span class="linenos">283</span></a> <span class="s2">&quot;SLAVE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-284"><a href="#MySQL.Parser-284"><span class="linenos">284</span></a> <span class="s2">&quot;GLOBAL STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</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="MySQL.Parser-285"><a href="#MySQL.Parser-285"><span class="linenos">285</span></a> <span class="s2">&quot;SESSION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-286"><a href="#MySQL.Parser-286"><span class="linenos">286</span></a> <span class="s2">&quot;STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-287"><a href="#MySQL.Parser-287"><span class="linenos">287</span></a> <span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-288"><a href="#MySQL.Parser-288"><span class="linenos">288</span></a> <span class="s2">&quot;FULL TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="MySQL.Parser-289"><a href="#MySQL.Parser-289"><span class="linenos">289</span></a> <span class="s2">&quot;TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-290"><a href="#MySQL.Parser-290"><span class="linenos">290</span></a> <span class="s2">&quot;TRIGGERS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TRIGGERS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-291"><a href="#MySQL.Parser-291"><span class="linenos">291</span></a> <span class="s2">&quot;GLOBAL VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</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="MySQL.Parser-292"><a href="#MySQL.Parser-292"><span class="linenos">292</span></a> <span class="s2">&quot;SESSION VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-293"><a href="#MySQL.Parser-293"><span class="linenos">293</span></a> <span class="s2">&quot;VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-294"><a href="#MySQL.Parser-294"><span class="linenos">294</span></a> <span class="s2">&quot;WARNINGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;WARNINGS&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-295"><a href="#MySQL.Parser-295"><span class="linenos">295</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-296"><a href="#MySQL.Parser-296"><span class="linenos">296</span></a>
-</span><span id="MySQL.Parser-297"><a href="#MySQL.Parser-297"><span class="linenos">297</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-298"><a href="#MySQL.Parser-298"><span class="linenos">298</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">SET_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-299"><a href="#MySQL.Parser-299"><span class="linenos">299</span></a> <span class="s2">&quot;PERSIST&quot;</span><span class="p">:</span> <span class="k">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;PERSIST&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-300"><a href="#MySQL.Parser-300"><span class="linenos">300</span></a> <span class="s2">&quot;PERSIST_ONLY&quot;</span><span class="p">:</span> <span class="k">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;PERSIST_ONLY&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-301"><a href="#MySQL.Parser-301"><span class="linenos">301</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_set_item_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-302"><a href="#MySQL.Parser-302"><span class="linenos">302</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">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_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-303"><a href="#MySQL.Parser-303"><span class="linenos">303</span></a> <span class="s2">&quot;NAMES&quot;</span><span class="p">:</span> <span class="k">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_names</span><span class="p">(),</span>
-</span><span id="MySQL.Parser-304"><a href="#MySQL.Parser-304"><span class="linenos">304</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-305"><a href="#MySQL.Parser-305"><span class="linenos">305</span></a>
-</span><span id="MySQL.Parser-306"><a href="#MySQL.Parser-306"><span class="linenos">306</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-307"><a href="#MySQL.Parser-307"><span class="linenos">307</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-308"><a href="#MySQL.Parser-308"><span class="linenos">308</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;FULLTEXT&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-309"><a href="#MySQL.Parser-309"><span class="linenos">309</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(),</span>
-</span><span id="MySQL.Parser-310"><a href="#MySQL.Parser-310"><span class="linenos">310</span></a> <span class="s2">&quot;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_index_constraint</span><span class="p">(),</span>
-</span><span id="MySQL.Parser-311"><a href="#MySQL.Parser-311"><span class="linenos">311</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;SPATIAL&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Parser-312"><a href="#MySQL.Parser-312"><span class="linenos">312</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-313"><a href="#MySQL.Parser-313"><span class="linenos">313</span></a>
-</span><span id="MySQL.Parser-314"><a href="#MySQL.Parser-314"><span class="linenos">314</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-315"><a href="#MySQL.Parser-315"><span class="linenos">315</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-316"><a href="#MySQL.Parser-316"><span class="linenos">316</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-317"><a href="#MySQL.Parser-317"><span class="linenos">317</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-318"><a href="#MySQL.Parser-318"><span class="linenos">318</span></a> <span class="s2">&quot;KEY&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-319"><a href="#MySQL.Parser-319"><span class="linenos">319</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-320"><a href="#MySQL.Parser-320"><span class="linenos">320</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-321"><a href="#MySQL.Parser-321"><span class="linenos">321</span></a>
-</span><span id="MySQL.Parser-322"><a href="#MySQL.Parser-322"><span class="linenos">322</span></a> <span class="n">PROFILE_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-323"><a href="#MySQL.Parser-323"><span class="linenos">323</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-324"><a href="#MySQL.Parser-324"><span class="linenos">324</span></a> <span class="s2">&quot;BLOCK IO&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-325"><a href="#MySQL.Parser-325"><span class="linenos">325</span></a> <span class="s2">&quot;CONTEXT SWITCHES&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-326"><a href="#MySQL.Parser-326"><span class="linenos">326</span></a> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-327"><a href="#MySQL.Parser-327"><span class="linenos">327</span></a> <span class="s2">&quot;IPC&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-328"><a href="#MySQL.Parser-328"><span class="linenos">328</span></a> <span class="s2">&quot;MEMORY&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-329"><a href="#MySQL.Parser-329"><span class="linenos">329</span></a> <span class="s2">&quot;PAGE FAULTS&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-330"><a href="#MySQL.Parser-330"><span class="linenos">330</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-331"><a href="#MySQL.Parser-331"><span class="linenos">331</span></a> <span class="s2">&quot;SWAPS&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Parser-332"><a href="#MySQL.Parser-332"><span class="linenos">332</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-333"><a href="#MySQL.Parser-333"><span class="linenos">333</span></a>
-</span><span id="MySQL.Parser-334"><a href="#MySQL.Parser-334"><span class="linenos">334</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-335"><a href="#MySQL.Parser-335"><span class="linenos">335</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-336"><a href="#MySQL.Parser-336"><span class="linenos">336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="MySQL.Parser-337"><a href="#MySQL.Parser-337"><span class="linenos">337</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-338"><a href="#MySQL.Parser-338"><span class="linenos">338</span></a>
-</span><span id="MySQL.Parser-339"><a href="#MySQL.Parser-339"><span class="linenos">339</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Parser-340"><a href="#MySQL.Parser-340"><span class="linenos">340</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">ENUM_TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="MySQL.Parser-341"><a href="#MySQL.Parser-341"><span class="linenos">341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="MySQL.Parser-342"><a href="#MySQL.Parser-342"><span class="linenos">342</span></a> <span class="p">}</span>
-</span><span id="MySQL.Parser-343"><a href="#MySQL.Parser-343"><span class="linenos">343</span></a>
-</span><span id="MySQL.Parser-344"><a href="#MySQL.Parser-344"><span class="linenos">344</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="MySQL.Parser-345"><a href="#MySQL.Parser-345"><span class="linenos">345</span></a>
-</span><span id="MySQL.Parser-346"><a href="#MySQL.Parser-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="nf">_parse_index_constraint</span><span class="p">(</span>
-</span><span id="MySQL.Parser-347"><a href="#MySQL.Parser-347"><span class="linenos">347</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="MySQL.Parser-348"><a href="#MySQL.Parser-348"><span class="linenos">348</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">:</span>
-</span><span id="MySQL.Parser-349"><a href="#MySQL.Parser-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="MySQL.Parser-350"><a href="#MySQL.Parser-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
-</span><span id="MySQL.Parser-351"><a href="#MySQL.Parser-351"><span class="linenos">351</span></a>
-</span><span id="MySQL.Parser-352"><a href="#MySQL.Parser-352"><span class="linenos">352</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="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MySQL.Parser-353"><a href="#MySQL.Parser-353"><span class="linenos">353</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="MySQL.Parser-354"><a href="#MySQL.Parser-354"><span class="linenos">354</span></a> <span class="n">schema</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="MySQL.Parser-355"><a href="#MySQL.Parser-355"><span class="linenos">355</span></a>
-</span><span id="MySQL.Parser-356"><a href="#MySQL.Parser-356"><span class="linenos">356</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="MySQL.Parser-357"><a href="#MySQL.Parser-357"><span class="linenos">357</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="MySQL.Parser-358"><a href="#MySQL.Parser-358"><span class="linenos">358</span></a> <span class="k">if</span> <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_BLOCK_SIZE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-359"><a href="#MySQL.Parser-359"><span class="linenos">359</span></a> <span class="bp">self</span><span 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="MySQL.Parser-360"><a href="#MySQL.Parser-360"><span class="linenos">360</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">key_block_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="MySQL.Parser-361"><a href="#MySQL.Parser-361"><span class="linenos">361</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="MySQL.Parser-362"><a href="#MySQL.Parser-362"><span class="linenos">362</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">using</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 class="p">)</span>
-</span><span id="MySQL.Parser-363"><a href="#MySQL.Parser-363"><span class="linenos">363</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;PARSER&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-364"><a href="#MySQL.Parser-364"><span class="linenos">364</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="MySQL.Parser-365"><a href="#MySQL.Parser-365"><span class="linenos">365</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="MySQL.Parser-366"><a href="#MySQL.Parser-366"><span class="linenos">366</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="MySQL.Parser-367"><a href="#MySQL.Parser-367"><span class="linenos">367</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;VISIBLE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-368"><a href="#MySQL.Parser-368"><span class="linenos">368</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="MySQL.Parser-369"><a href="#MySQL.Parser-369"><span class="linenos">369</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;INVISIBLE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-370"><a href="#MySQL.Parser-370"><span class="linenos">370</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MySQL.Parser-371"><a href="#MySQL.Parser-371"><span class="linenos">371</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-372"><a href="#MySQL.Parser-372"><span class="linenos">372</span></a> <span class="bp">self</span><span 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="MySQL.Parser-373"><a href="#MySQL.Parser-373"><span class="linenos">373</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL.Parser-374"><a href="#MySQL.Parser-374"><span class="linenos">374</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-375"><a href="#MySQL.Parser-375"><span class="linenos">375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
-</span><span id="MySQL.Parser-376"><a href="#MySQL.Parser-376"><span class="linenos">376</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL.Parser-377"><a href="#MySQL.Parser-377"><span class="linenos">377</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;SECONDARY_ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-378"><a href="#MySQL.Parser-378"><span class="linenos">378</span></a> <span class="bp">self</span><span 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="MySQL.Parser-379"><a href="#MySQL.Parser-379"><span class="linenos">379</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">secondary_engine_attr</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="MySQL.Parser-380"><a href="#MySQL.Parser-380"><span class="linenos">380</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Parser-381"><a href="#MySQL.Parser-381"><span class="linenos">381</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-382"><a href="#MySQL.Parser-382"><span class="linenos">382</span></a>
-</span><span id="MySQL.Parser-383"><a href="#MySQL.Parser-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">:</span>
-</span><span id="MySQL.Parser-384"><a href="#MySQL.Parser-384"><span class="linenos">384</span></a> <span class="k">break</span>
-</span><span id="MySQL.Parser-385"><a href="#MySQL.Parser-385"><span class="linenos">385</span></a>
-</span><span id="MySQL.Parser-386"><a href="#MySQL.Parser-386"><span class="linenos">386</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
-</span><span id="MySQL.Parser-387"><a href="#MySQL.Parser-387"><span class="linenos">387</span></a>
-</span><span id="MySQL.Parser-388"><a href="#MySQL.Parser-388"><span class="linenos">388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="MySQL.Parser-389"><a href="#MySQL.Parser-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">,</span>
-</span><span id="MySQL.Parser-390"><a href="#MySQL.Parser-390"><span class="linenos">390</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="MySQL.Parser-391"><a href="#MySQL.Parser-391"><span class="linenos">391</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="MySQL.Parser-392"><a href="#MySQL.Parser-392"><span class="linenos">392</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="MySQL.Parser-393"><a href="#MySQL.Parser-393"><span class="linenos">393</span></a> <span class="nb">type</span><span class="o">=</span><span class="n">type_</span><span class="p">,</span>
-</span><span id="MySQL.Parser-394"><a href="#MySQL.Parser-394"><span class="linenos">394</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="MySQL.Parser-395"><a href="#MySQL.Parser-395"><span class="linenos">395</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Parser-194"><a href="#MySQL.Parser-194"><span class="linenos">194</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="MySQL.Parser-195"><a href="#MySQL.Parser-195"><span class="linenos">195</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL.Parser-196"><a href="#MySQL.Parser-196"><span class="linenos">196</span></a>
+</span><span id="MySQL.Parser-197"><a href="#MySQL.Parser-197"><span class="linenos">197</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-198"><a href="#MySQL.Parser-198"><span class="linenos">198</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">FUNC_TOKENS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-199"><a href="#MySQL.Parser-199"><span class="linenos">199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="MySQL.Parser-200"><a href="#MySQL.Parser-200"><span class="linenos">200</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="MySQL.Parser-201"><a href="#MySQL.Parser-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="MySQL.Parser-202"><a href="#MySQL.Parser-202"><span class="linenos">202</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-203"><a href="#MySQL.Parser-203"><span class="linenos">203</span></a>
+</span><span id="MySQL.Parser-204"><a href="#MySQL.Parser-204"><span class="linenos">204</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-205"><a href="#MySQL.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">CONJUNCTION</span><span class="p">,</span>
+</span><span id="MySQL.Parser-206"><a href="#MySQL.Parser-206"><span class="linenos">206</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</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="MySQL.Parser-207"><a href="#MySQL.Parser-207"><span class="linenos">207</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">,</span>
+</span><span id="MySQL.Parser-208"><a href="#MySQL.Parser-208"><span class="linenos">208</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">Or</span><span class="p">,</span>
+</span><span id="MySQL.Parser-209"><a href="#MySQL.Parser-209"><span class="linenos">209</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-210"><a href="#MySQL.Parser-210"><span class="linenos">210</span></a>
+</span><span id="MySQL.Parser-211"><a href="#MySQL.Parser-211"><span class="linenos">211</span></a> <span class="c1"># MySQL uses || as a synonym to the logical OR operator</span>
+</span><span id="MySQL.Parser-212"><a href="#MySQL.Parser-212"><span class="linenos">212</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_or</span>
+</span><span id="MySQL.Parser-213"><a href="#MySQL.Parser-213"><span class="linenos">213</span></a> <span class="n">BITWISE</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">BITWISE</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="MySQL.Parser-214"><a href="#MySQL.Parser-214"><span class="linenos">214</span></a> <span class="n">BITWISE</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">)</span>
+</span><span id="MySQL.Parser-215"><a href="#MySQL.Parser-215"><span class="linenos">215</span></a>
+</span><span id="MySQL.Parser-216"><a href="#MySQL.Parser-216"><span class="linenos">216</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="MySQL.Parser-217"><a href="#MySQL.Parser-217"><span class="linenos">217</span></a> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span>
+</span><span id="MySQL.Parser-218"><a href="#MySQL.Parser-218"><span class="linenos">218</span></a> <span class="p">)</span>
+</span><span id="MySQL.Parser-219"><a href="#MySQL.Parser-219"><span class="linenos">219</span></a>
+</span><span id="MySQL.Parser-220"><a href="#MySQL.Parser-220"><span class="linenos">220</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-221"><a href="#MySQL.Parser-221"><span class="linenos">221</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-222"><a href="#MySQL.Parser-222"><span class="linenos">222</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEMBER_OF</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="MySQL.Parser-223"><a href="#MySQL.Parser-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">,</span>
+</span><span id="MySQL.Parser-224"><a href="#MySQL.Parser-224"><span class="linenos">224</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="MySQL.Parser-225"><a href="#MySQL.Parser-225"><span class="linenos">225</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_expression</span><span class="p">),</span>
+</span><span id="MySQL.Parser-226"><a href="#MySQL.Parser-226"><span class="linenos">226</span></a> <span class="p">),</span>
+</span><span id="MySQL.Parser-227"><a href="#MySQL.Parser-227"><span class="linenos">227</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-228"><a href="#MySQL.Parser-228"><span class="linenos">228</span></a>
+</span><span id="MySQL.Parser-229"><a href="#MySQL.Parser-229"><span class="linenos">229</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-230"><a href="#MySQL.Parser-230"><span class="linenos">230</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-231"><a href="#MySQL.Parser-231"><span class="linenos">231</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="MySQL.Parser-232"><a href="#MySQL.Parser-232"><span class="linenos">232</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;mysql&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-233"><a href="#MySQL.Parser-233"><span class="linenos">233</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="MySQL.Parser-234"><a href="#MySQL.Parser-234"><span class="linenos">234</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="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 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 class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
+</span><span id="MySQL.Parser-235"><a href="#MySQL.Parser-235"><span class="linenos">235</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="MySQL.Parser-236"><a href="#MySQL.Parser-236"><span class="linenos">236</span></a> <span class="s2">&quot;STR_TO_DATE&quot;</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
+</span><span id="MySQL.Parser-237"><a href="#MySQL.Parser-237"><span class="linenos">237</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-238"><a href="#MySQL.Parser-238"><span class="linenos">238</span></a>
+</span><span id="MySQL.Parser-239"><a href="#MySQL.Parser-239"><span class="linenos">239</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-240"><a href="#MySQL.Parser-240"><span class="linenos">240</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="MySQL.Parser-241"><a href="#MySQL.Parser-241"><span class="linenos">241</span></a> <span class="s2">&quot;GROUP_CONCAT&quot;</span><span class="p">:</span> <span class="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="MySQL.Parser-242"><a href="#MySQL.Parser-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><span id="MySQL.Parser-243"><a href="#MySQL.Parser-243"><span class="linenos">243</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
+</span><span id="MySQL.Parser-244"><a href="#MySQL.Parser-244"><span class="linenos">244</span></a> <span class="n">separator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEPARATOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
+</span><span id="MySQL.Parser-245"><a href="#MySQL.Parser-245"><span class="linenos">245</span></a> <span class="p">),</span>
+</span><span id="MySQL.Parser-246"><a href="#MySQL.Parser-246"><span class="linenos">246</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values</span>
+</span><span id="MySQL.Parser-247"><a href="#MySQL.Parser-247"><span class="linenos">247</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="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="MySQL.Parser-248"><a href="#MySQL.Parser-248"><span class="linenos">248</span></a> <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="s2">&quot;VALUES&quot;</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_id_var</span><span class="p">()]</span>
+</span><span id="MySQL.Parser-249"><a href="#MySQL.Parser-249"><span class="linenos">249</span></a> <span class="p">),</span>
+</span><span id="MySQL.Parser-250"><a href="#MySQL.Parser-250"><span class="linenos">250</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-251"><a href="#MySQL.Parser-251"><span class="linenos">251</span></a>
+</span><span id="MySQL.Parser-252"><a href="#MySQL.Parser-252"><span class="linenos">252</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-253"><a href="#MySQL.Parser-253"><span class="linenos">253</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-254"><a href="#MySQL.Parser-254"><span class="linenos">254</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_show</span><span class="p">(),</span>
+</span><span id="MySQL.Parser-255"><a href="#MySQL.Parser-255"><span class="linenos">255</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-256"><a href="#MySQL.Parser-256"><span class="linenos">256</span></a>
+</span><span id="MySQL.Parser-257"><a href="#MySQL.Parser-257"><span class="linenos">257</span></a> <span class="n">SHOW_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-258"><a href="#MySQL.Parser-258"><span class="linenos">258</span></a> <span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-259"><a href="#MySQL.Parser-259"><span class="linenos">259</span></a> <span class="s2">&quot;MASTER LOGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINARY LOGS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-260"><a href="#MySQL.Parser-260"><span class="linenos">260</span></a> <span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-261"><a href="#MySQL.Parser-261"><span class="linenos">261</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-262"><a href="#MySQL.Parser-262"><span class="linenos">262</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-263"><a href="#MySQL.Parser-263"><span class="linenos">263</span></a> <span class="s2">&quot;COLLATION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLLATION&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-264"><a href="#MySQL.Parser-264"><span class="linenos">264</span></a> <span class="s2">&quot;FULL COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-265"><a href="#MySQL.Parser-265"><span class="linenos">265</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-266"><a href="#MySQL.Parser-266"><span class="linenos">266</span></a> <span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE DATABASE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-267"><a href="#MySQL.Parser-267"><span class="linenos">267</span></a> <span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE EVENT&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-268"><a href="#MySQL.Parser-268"><span class="linenos">268</span></a> <span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE FUNCTION&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-269"><a href="#MySQL.Parser-269"><span class="linenos">269</span></a> <span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE PROCEDURE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-270"><a href="#MySQL.Parser-270"><span class="linenos">270</span></a> <span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TABLE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-271"><a href="#MySQL.Parser-271"><span class="linenos">271</span></a> <span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE TRIGGER&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-272"><a href="#MySQL.Parser-272"><span class="linenos">272</span></a> <span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;CREATE VIEW&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-273"><a href="#MySQL.Parser-273"><span class="linenos">273</span></a> <span class="s2">&quot;DATABASES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;DATABASES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-274"><a href="#MySQL.Parser-274"><span class="linenos">274</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-275"><a href="#MySQL.Parser-275"><span class="linenos">275</span></a> <span class="s2">&quot;STORAGE ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-276"><a href="#MySQL.Parser-276"><span class="linenos">276</span></a> <span class="s2">&quot;ENGINES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ENGINES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-277"><a href="#MySQL.Parser-277"><span class="linenos">277</span></a> <span class="s2">&quot;ERRORS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;ERRORS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-278"><a href="#MySQL.Parser-278"><span class="linenos">278</span></a> <span class="s2">&quot;EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;EVENTS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-279"><a href="#MySQL.Parser-279"><span class="linenos">279</span></a> <span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-280"><a href="#MySQL.Parser-280"><span class="linenos">280</span></a> <span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;FUNCTION STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-281"><a href="#MySQL.Parser-281"><span class="linenos">281</span></a> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FOR&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-282"><a href="#MySQL.Parser-282"><span class="linenos">282</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-283"><a href="#MySQL.Parser-283"><span class="linenos">283</span></a> <span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;MASTER STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-284"><a href="#MySQL.Parser-284"><span class="linenos">284</span></a> <span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;OPEN TABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-285"><a href="#MySQL.Parser-285"><span class="linenos">285</span></a> <span class="s2">&quot;PLUGINS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PLUGINS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-286"><a href="#MySQL.Parser-286"><span class="linenos">286</span></a> <span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE CODE&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-287"><a href="#MySQL.Parser-287"><span class="linenos">287</span></a> <span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCEDURE STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-288"><a href="#MySQL.Parser-288"><span class="linenos">288</span></a> <span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PRIVILEGES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-289"><a href="#MySQL.Parser-289"><span class="linenos">289</span></a> <span class="s2">&quot;FULL PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-290"><a href="#MySQL.Parser-290"><span class="linenos">290</span></a> <span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROCESSLIST&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-291"><a href="#MySQL.Parser-291"><span class="linenos">291</span></a> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILE&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-292"><a href="#MySQL.Parser-292"><span class="linenos">292</span></a> <span class="s2">&quot;PROFILES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;PROFILES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-293"><a href="#MySQL.Parser-293"><span class="linenos">293</span></a> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-294"><a href="#MySQL.Parser-294"><span class="linenos">294</span></a> <span class="s2">&quot;REPLICAS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-295"><a href="#MySQL.Parser-295"><span class="linenos">295</span></a> <span class="s2">&quot;SLAVE HOSTS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICAS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-296"><a href="#MySQL.Parser-296"><span class="linenos">296</span></a> <span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-297"><a href="#MySQL.Parser-297"><span class="linenos">297</span></a> <span class="s2">&quot;SLAVE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;REPLICA STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-298"><a href="#MySQL.Parser-298"><span class="linenos">298</span></a> <span class="s2">&quot;GLOBAL STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</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="MySQL.Parser-299"><a href="#MySQL.Parser-299"><span class="linenos">299</span></a> <span class="s2">&quot;SESSION STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-300"><a href="#MySQL.Parser-300"><span class="linenos">300</span></a> <span class="s2">&quot;STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-301"><a href="#MySQL.Parser-301"><span class="linenos">301</span></a> <span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLE STATUS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-302"><a href="#MySQL.Parser-302"><span class="linenos">302</span></a> <span class="s2">&quot;FULL TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">,</span> <span class="n">full</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="MySQL.Parser-303"><a href="#MySQL.Parser-303"><span class="linenos">303</span></a> <span class="s2">&quot;TABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-304"><a href="#MySQL.Parser-304"><span class="linenos">304</span></a> <span class="s2">&quot;TRIGGERS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;TRIGGERS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-305"><a href="#MySQL.Parser-305"><span class="linenos">305</span></a> <span class="s2">&quot;GLOBAL VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</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="MySQL.Parser-306"><a href="#MySQL.Parser-306"><span class="linenos">306</span></a> <span class="s2">&quot;SESSION VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-307"><a href="#MySQL.Parser-307"><span class="linenos">307</span></a> <span class="s2">&quot;VARIABLES&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;VARIABLES&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-308"><a href="#MySQL.Parser-308"><span class="linenos">308</span></a> <span class="s2">&quot;WARNINGS&quot;</span><span class="p">:</span> <span class="n">_show_parser</span><span class="p">(</span><span class="s2">&quot;WARNINGS&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-309"><a href="#MySQL.Parser-309"><span class="linenos">309</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-310"><a href="#MySQL.Parser-310"><span class="linenos">310</span></a>
+</span><span id="MySQL.Parser-311"><a href="#MySQL.Parser-311"><span class="linenos">311</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-312"><a href="#MySQL.Parser-312"><span class="linenos">312</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-313"><a href="#MySQL.Parser-313"><span class="linenos">313</span></a> <span class="s2">&quot;PERSIST&quot;</span><span class="p">:</span> <span class="k">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;PERSIST&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-314"><a href="#MySQL.Parser-314"><span class="linenos">314</span></a> <span class="s2">&quot;PERSIST_ONLY&quot;</span><span class="p">:</span> <span class="k">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;PERSIST_ONLY&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-315"><a href="#MySQL.Parser-315"><span class="linenos">315</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_set_item_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-316"><a href="#MySQL.Parser-316"><span class="linenos">316</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">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_charset</span><span class="p">(</span><span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-317"><a href="#MySQL.Parser-317"><span class="linenos">317</span></a> <span class="s2">&quot;NAMES&quot;</span><span class="p">:</span> <span class="k">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_names</span><span class="p">(),</span>
+</span><span id="MySQL.Parser-318"><a href="#MySQL.Parser-318"><span class="linenos">318</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-319"><a href="#MySQL.Parser-319"><span class="linenos">319</span></a>
+</span><span id="MySQL.Parser-320"><a href="#MySQL.Parser-320"><span class="linenos">320</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-321"><a href="#MySQL.Parser-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-322"><a href="#MySQL.Parser-322"><span class="linenos">322</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;FULLTEXT&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-323"><a href="#MySQL.Parser-323"><span class="linenos">323</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(),</span>
+</span><span id="MySQL.Parser-324"><a href="#MySQL.Parser-324"><span class="linenos">324</span></a> <span class="s2">&quot;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_index_constraint</span><span class="p">(),</span>
+</span><span id="MySQL.Parser-325"><a href="#MySQL.Parser-325"><span class="linenos">325</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_constraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s2">&quot;SPATIAL&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Parser-326"><a href="#MySQL.Parser-326"><span class="linenos">326</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-327"><a href="#MySQL.Parser-327"><span class="linenos">327</span></a>
+</span><span id="MySQL.Parser-328"><a href="#MySQL.Parser-328"><span class="linenos">328</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-329"><a href="#MySQL.Parser-329"><span class="linenos">329</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">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-330"><a href="#MySQL.Parser-330"><span class="linenos">330</span></a> <span class="s2">&quot;FULLTEXT&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-331"><a href="#MySQL.Parser-331"><span class="linenos">331</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-332"><a href="#MySQL.Parser-332"><span class="linenos">332</span></a> <span class="s2">&quot;KEY&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-333"><a href="#MySQL.Parser-333"><span class="linenos">333</span></a> <span class="s2">&quot;SPATIAL&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-334"><a href="#MySQL.Parser-334"><span class="linenos">334</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-335"><a href="#MySQL.Parser-335"><span class="linenos">335</span></a>
+</span><span id="MySQL.Parser-336"><a href="#MySQL.Parser-336"><span class="linenos">336</span></a> <span class="n">PROFILE_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-337"><a href="#MySQL.Parser-337"><span class="linenos">337</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-338"><a href="#MySQL.Parser-338"><span class="linenos">338</span></a> <span class="s2">&quot;BLOCK IO&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-339"><a href="#MySQL.Parser-339"><span class="linenos">339</span></a> <span class="s2">&quot;CONTEXT SWITCHES&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-340"><a href="#MySQL.Parser-340"><span class="linenos">340</span></a> <span class="s2">&quot;CPU&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-341"><a href="#MySQL.Parser-341"><span class="linenos">341</span></a> <span class="s2">&quot;IPC&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-342"><a href="#MySQL.Parser-342"><span class="linenos">342</span></a> <span class="s2">&quot;MEMORY&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-343"><a href="#MySQL.Parser-343"><span class="linenos">343</span></a> <span class="s2">&quot;PAGE FAULTS&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-344"><a href="#MySQL.Parser-344"><span class="linenos">344</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-345"><a href="#MySQL.Parser-345"><span class="linenos">345</span></a> <span class="s2">&quot;SWAPS&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Parser-346"><a href="#MySQL.Parser-346"><span class="linenos">346</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-347"><a href="#MySQL.Parser-347"><span class="linenos">347</span></a>
+</span><span id="MySQL.Parser-348"><a href="#MySQL.Parser-348"><span class="linenos">348</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-349"><a href="#MySQL.Parser-349"><span class="linenos">349</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="MySQL.Parser-350"><a href="#MySQL.Parser-350"><span class="linenos">350</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="MySQL.Parser-351"><a href="#MySQL.Parser-351"><span class="linenos">351</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-352"><a href="#MySQL.Parser-352"><span class="linenos">352</span></a>
+</span><span id="MySQL.Parser-353"><a href="#MySQL.Parser-353"><span class="linenos">353</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Parser-354"><a href="#MySQL.Parser-354"><span class="linenos">354</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">ENUM_TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="MySQL.Parser-355"><a href="#MySQL.Parser-355"><span class="linenos">355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="MySQL.Parser-356"><a href="#MySQL.Parser-356"><span class="linenos">356</span></a> <span class="p">}</span>
+</span><span id="MySQL.Parser-357"><a href="#MySQL.Parser-357"><span class="linenos">357</span></a>
+</span><span id="MySQL.Parser-358"><a href="#MySQL.Parser-358"><span class="linenos">358</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL.Parser-359"><a href="#MySQL.Parser-359"><span class="linenos">359</span></a>
+</span><span id="MySQL.Parser-360"><a href="#MySQL.Parser-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="nf">_parse_index_constraint</span><span class="p">(</span>
+</span><span id="MySQL.Parser-361"><a href="#MySQL.Parser-361"><span class="linenos">361</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="MySQL.Parser-362"><a href="#MySQL.Parser-362"><span class="linenos">362</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">:</span>
+</span><span id="MySQL.Parser-363"><a href="#MySQL.Parser-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="MySQL.Parser-364"><a href="#MySQL.Parser-364"><span class="linenos">364</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
+</span><span id="MySQL.Parser-365"><a href="#MySQL.Parser-365"><span class="linenos">365</span></a>
+</span><span id="MySQL.Parser-366"><a href="#MySQL.Parser-366"><span class="linenos">366</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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="MySQL.Parser-367"><a href="#MySQL.Parser-367"><span class="linenos">367</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="MySQL.Parser-368"><a href="#MySQL.Parser-368"><span class="linenos">368</span></a> <span class="n">schema</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="MySQL.Parser-369"><a href="#MySQL.Parser-369"><span class="linenos">369</span></a>
+</span><span id="MySQL.Parser-370"><a href="#MySQL.Parser-370"><span class="linenos">370</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="MySQL.Parser-371"><a href="#MySQL.Parser-371"><span class="linenos">371</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="MySQL.Parser-372"><a href="#MySQL.Parser-372"><span class="linenos">372</span></a> <span class="k">if</span> <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_BLOCK_SIZE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-373"><a href="#MySQL.Parser-373"><span class="linenos">373</span></a> <span class="bp">self</span><span 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="MySQL.Parser-374"><a href="#MySQL.Parser-374"><span class="linenos">374</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">key_block_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="MySQL.Parser-375"><a href="#MySQL.Parser-375"><span class="linenos">375</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="MySQL.Parser-376"><a href="#MySQL.Parser-376"><span class="linenos">376</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">using</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 class="p">)</span>
+</span><span id="MySQL.Parser-377"><a href="#MySQL.Parser-377"><span class="linenos">377</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;PARSER&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-378"><a href="#MySQL.Parser-378"><span class="linenos">378</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="MySQL.Parser-379"><a href="#MySQL.Parser-379"><span class="linenos">379</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">COMMENT</span><span class="p">):</span>
+</span><span id="MySQL.Parser-380"><a href="#MySQL.Parser-380"><span class="linenos">380</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="MySQL.Parser-381"><a href="#MySQL.Parser-381"><span class="linenos">381</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;VISIBLE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-382"><a href="#MySQL.Parser-382"><span class="linenos">382</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="MySQL.Parser-383"><a href="#MySQL.Parser-383"><span class="linenos">383</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;INVISIBLE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-384"><a href="#MySQL.Parser-384"><span class="linenos">384</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MySQL.Parser-385"><a href="#MySQL.Parser-385"><span class="linenos">385</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-386"><a href="#MySQL.Parser-386"><span class="linenos">386</span></a> <span class="bp">self</span><span 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="MySQL.Parser-387"><a href="#MySQL.Parser-387"><span class="linenos">387</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL.Parser-388"><a href="#MySQL.Parser-388"><span class="linenos">388</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;ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-389"><a href="#MySQL.Parser-389"><span class="linenos">389</span></a> <span class="bp">self</span><span 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="MySQL.Parser-390"><a href="#MySQL.Parser-390"><span class="linenos">390</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">engine_attr</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="MySQL.Parser-391"><a href="#MySQL.Parser-391"><span class="linenos">391</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;SECONDARY_ENGINE_ATTRIBUTE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-392"><a href="#MySQL.Parser-392"><span class="linenos">392</span></a> <span class="bp">self</span><span 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="MySQL.Parser-393"><a href="#MySQL.Parser-393"><span class="linenos">393</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">(</span><span class="n">secondary_engine_attr</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="MySQL.Parser-394"><a href="#MySQL.Parser-394"><span class="linenos">394</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Parser-395"><a href="#MySQL.Parser-395"><span class="linenos">395</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="MySQL.Parser-396"><a href="#MySQL.Parser-396"><span class="linenos">396</span></a>
-</span><span id="MySQL.Parser-397"><a href="#MySQL.Parser-397"><span class="linenos">397</span></a> <span class="k">def</span> <span class="nf">_parse_show_mysql</span><span class="p">(</span>
-</span><span id="MySQL.Parser-398"><a href="#MySQL.Parser-398"><span class="linenos">398</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MySQL.Parser-399"><a href="#MySQL.Parser-399"><span class="linenos">399</span></a> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MySQL.Parser-400"><a href="#MySQL.Parser-400"><span class="linenos">400</span></a> <span class="n">target</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MySQL.Parser-401"><a href="#MySQL.Parser-401"><span class="linenos">401</span></a> <span class="n">full</span><span 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="MySQL.Parser-402"><a href="#MySQL.Parser-402"><span class="linenos">402</span></a> <span class="n">global_</span><span 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="MySQL.Parser-403"><a href="#MySQL.Parser-403"><span class="linenos">403</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
-</span><span id="MySQL.Parser-404"><a href="#MySQL.Parser-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">target</span><span class="p">:</span>
-</span><span id="MySQL.Parser-405"><a href="#MySQL.Parser-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="MySQL.Parser-406"><a href="#MySQL.Parser-406"><span class="linenos">406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
-</span><span id="MySQL.Parser-407"><a href="#MySQL.Parser-407"><span class="linenos">407</span></a> <span class="n">target_id</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="MySQL.Parser-408"><a href="#MySQL.Parser-408"><span class="linenos">408</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Parser-409"><a href="#MySQL.Parser-409"><span class="linenos">409</span></a> <span class="n">target_id</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-397"><a href="#MySQL.Parser-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">:</span>
+</span><span id="MySQL.Parser-398"><a href="#MySQL.Parser-398"><span class="linenos">398</span></a> <span class="k">break</span>
+</span><span id="MySQL.Parser-399"><a href="#MySQL.Parser-399"><span class="linenos">399</span></a>
+</span><span id="MySQL.Parser-400"><a href="#MySQL.Parser-400"><span class="linenos">400</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
+</span><span id="MySQL.Parser-401"><a href="#MySQL.Parser-401"><span class="linenos">401</span></a>
+</span><span id="MySQL.Parser-402"><a href="#MySQL.Parser-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="MySQL.Parser-403"><a href="#MySQL.Parser-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">,</span>
+</span><span id="MySQL.Parser-404"><a href="#MySQL.Parser-404"><span class="linenos">404</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="MySQL.Parser-405"><a href="#MySQL.Parser-405"><span class="linenos">405</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="MySQL.Parser-406"><a href="#MySQL.Parser-406"><span class="linenos">406</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="MySQL.Parser-407"><a href="#MySQL.Parser-407"><span class="linenos">407</span></a> <span class="nb">type</span><span class="o">=</span><span class="n">type_</span><span class="p">,</span>
+</span><span id="MySQL.Parser-408"><a href="#MySQL.Parser-408"><span class="linenos">408</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
+</span><span id="MySQL.Parser-409"><a href="#MySQL.Parser-409"><span class="linenos">409</span></a> <span class="p">)</span>
</span><span id="MySQL.Parser-410"><a href="#MySQL.Parser-410"><span class="linenos">410</span></a>
-</span><span id="MySQL.Parser-411"><a href="#MySQL.Parser-411"><span class="linenos">411</span></a> <span class="n">log</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;IN&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-412"><a href="#MySQL.Parser-412"><span class="linenos">412</span></a>
-</span><span id="MySQL.Parser-413"><a href="#MySQL.Parser-413"><span class="linenos">413</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">,</span> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">}:</span>
-</span><span id="MySQL.Parser-414"><a href="#MySQL.Parser-414"><span class="linenos">414</span></a> <span class="n">position</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-415"><a href="#MySQL.Parser-415"><span class="linenos">415</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-416"><a href="#MySQL.Parser-416"><span class="linenos">416</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Parser-417"><a href="#MySQL.Parser-417"><span class="linenos">417</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-418"><a href="#MySQL.Parser-418"><span class="linenos">418</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-419"><a href="#MySQL.Parser-419"><span class="linenos">419</span></a>
-</span><span id="MySQL.Parser-420"><a href="#MySQL.Parser-420"><span class="linenos">420</span></a> <span class="k">if</span> <span class="bp">self</span><span 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="MySQL.Parser-421"><a href="#MySQL.Parser-421"><span class="linenos">421</span></a> <span class="n">db</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="MySQL.Parser-422"><a href="#MySQL.Parser-422"><span class="linenos">422</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">DOT</span><span class="p">):</span>
-</span><span id="MySQL.Parser-423"><a href="#MySQL.Parser-423"><span class="linenos">423</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">target_id</span>
-</span><span id="MySQL.Parser-424"><a href="#MySQL.Parser-424"><span class="linenos">424</span></a> <span class="n">target_id</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="MySQL.Parser-425"><a href="#MySQL.Parser-425"><span class="linenos">425</span></a>
-</span><span id="MySQL.Parser-426"><a href="#MySQL.Parser-426"><span class="linenos">426</span></a> <span class="n">channel</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="k">if</span> <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;CHANNEL&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-427"><a href="#MySQL.Parser-427"><span class="linenos">427</span></a>
-</span><span id="MySQL.Parser-428"><a href="#MySQL.Parser-428"><span class="linenos">428</span></a> <span class="n">like</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;LIKE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-429"><a href="#MySQL.Parser-429"><span class="linenos">429</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="MySQL.Parser-430"><a href="#MySQL.Parser-430"><span class="linenos">430</span></a>
-</span><span id="MySQL.Parser-431"><a href="#MySQL.Parser-431"><span class="linenos">431</span></a> <span class="k">if</span> <span class="n">this</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Parser-432"><a href="#MySQL.Parser-432"><span class="linenos">432</span></a> <span class="n">types</span> <span 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_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROFILE_TYPES</span><span class="p">))</span>
-</span><span id="MySQL.Parser-433"><a href="#MySQL.Parser-433"><span class="linenos">433</span></a> <span class="n">query</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="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;QUERY&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-434"><a href="#MySQL.Parser-434"><span class="linenos">434</span></a> <span class="n">offset</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-435"><a href="#MySQL.Parser-435"><span class="linenos">435</span></a> <span class="n">limit</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-436"><a href="#MySQL.Parser-436"><span class="linenos">436</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Parser-437"><a href="#MySQL.Parser-437"><span class="linenos">437</span></a> <span class="n">types</span><span class="p">,</span> <span class="n">query</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-438"><a href="#MySQL.Parser-438"><span class="linenos">438</span></a> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_oldstyle_limit</span><span class="p">()</span>
+</span><span id="MySQL.Parser-411"><a href="#MySQL.Parser-411"><span class="linenos">411</span></a> <span class="k">def</span> <span class="nf">_parse_show_mysql</span><span class="p">(</span>
+</span><span id="MySQL.Parser-412"><a href="#MySQL.Parser-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MySQL.Parser-413"><a href="#MySQL.Parser-413"><span class="linenos">413</span></a> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MySQL.Parser-414"><a href="#MySQL.Parser-414"><span class="linenos">414</span></a> <span class="n">target</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MySQL.Parser-415"><a href="#MySQL.Parser-415"><span class="linenos">415</span></a> <span class="n">full</span><span 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="MySQL.Parser-416"><a href="#MySQL.Parser-416"><span class="linenos">416</span></a> <span class="n">global_</span><span 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="MySQL.Parser-417"><a href="#MySQL.Parser-417"><span class="linenos">417</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">:</span>
+</span><span id="MySQL.Parser-418"><a href="#MySQL.Parser-418"><span class="linenos">418</span></a> <span class="k">if</span> <span class="n">target</span><span class="p">:</span>
+</span><span id="MySQL.Parser-419"><a href="#MySQL.Parser-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="MySQL.Parser-420"><a href="#MySQL.Parser-420"><span class="linenos">420</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+</span><span id="MySQL.Parser-421"><a href="#MySQL.Parser-421"><span class="linenos">421</span></a> <span class="n">target_id</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="MySQL.Parser-422"><a href="#MySQL.Parser-422"><span class="linenos">422</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Parser-423"><a href="#MySQL.Parser-423"><span class="linenos">423</span></a> <span class="n">target_id</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-424"><a href="#MySQL.Parser-424"><span class="linenos">424</span></a>
+</span><span id="MySQL.Parser-425"><a href="#MySQL.Parser-425"><span class="linenos">425</span></a> <span class="n">log</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;IN&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-426"><a href="#MySQL.Parser-426"><span class="linenos">426</span></a>
+</span><span id="MySQL.Parser-427"><a href="#MySQL.Parser-427"><span class="linenos">427</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;BINLOG EVENTS&quot;</span><span class="p">,</span> <span class="s2">&quot;RELAYLOG EVENTS&quot;</span><span class="p">}:</span>
+</span><span id="MySQL.Parser-428"><a href="#MySQL.Parser-428"><span class="linenos">428</span></a> <span class="n">position</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-429"><a href="#MySQL.Parser-429"><span class="linenos">429</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-430"><a href="#MySQL.Parser-430"><span class="linenos">430</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Parser-431"><a href="#MySQL.Parser-431"><span class="linenos">431</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-432"><a href="#MySQL.Parser-432"><span class="linenos">432</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-433"><a href="#MySQL.Parser-433"><span class="linenos">433</span></a>
+</span><span id="MySQL.Parser-434"><a href="#MySQL.Parser-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="bp">self</span><span 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="MySQL.Parser-435"><a href="#MySQL.Parser-435"><span class="linenos">435</span></a> <span class="n">db</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="MySQL.Parser-436"><a href="#MySQL.Parser-436"><span class="linenos">436</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">DOT</span><span class="p">):</span>
+</span><span id="MySQL.Parser-437"><a href="#MySQL.Parser-437"><span class="linenos">437</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">target_id</span>
+</span><span id="MySQL.Parser-438"><a href="#MySQL.Parser-438"><span class="linenos">438</span></a> <span class="n">target_id</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="MySQL.Parser-439"><a href="#MySQL.Parser-439"><span class="linenos">439</span></a>
-</span><span id="MySQL.Parser-440"><a href="#MySQL.Parser-440"><span class="linenos">440</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">True</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;MUTEX&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-441"><a href="#MySQL.Parser-441"><span class="linenos">441</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">False</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;STATUS&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">mutex</span>
-</span><span id="MySQL.Parser-442"><a href="#MySQL.Parser-442"><span class="linenos">442</span></a>
-</span><span id="MySQL.Parser-443"><a href="#MySQL.Parser-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="MySQL.Parser-444"><a href="#MySQL.Parser-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">,</span>
-</span><span id="MySQL.Parser-445"><a href="#MySQL.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="MySQL.Parser-446"><a href="#MySQL.Parser-446"><span class="linenos">446</span></a> <span class="n">target</span><span class="o">=</span><span class="n">target_id</span><span class="p">,</span>
-</span><span id="MySQL.Parser-447"><a href="#MySQL.Parser-447"><span class="linenos">447</span></a> <span class="n">full</span><span class="o">=</span><span class="n">full</span><span class="p">,</span>
-</span><span id="MySQL.Parser-448"><a href="#MySQL.Parser-448"><span class="linenos">448</span></a> <span class="n">log</span><span class="o">=</span><span class="n">log</span><span class="p">,</span>
-</span><span id="MySQL.Parser-449"><a href="#MySQL.Parser-449"><span class="linenos">449</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
-</span><span id="MySQL.Parser-450"><a href="#MySQL.Parser-450"><span class="linenos">450</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
-</span><span id="MySQL.Parser-451"><a href="#MySQL.Parser-451"><span class="linenos">451</span></a> <span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
-</span><span id="MySQL.Parser-452"><a href="#MySQL.Parser-452"><span class="linenos">452</span></a> <span class="n">like</span><span class="o">=</span><span class="n">like</span><span class="p">,</span>
-</span><span id="MySQL.Parser-453"><a href="#MySQL.Parser-453"><span class="linenos">453</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
-</span><span id="MySQL.Parser-454"><a href="#MySQL.Parser-454"><span class="linenos">454</span></a> <span class="n">types</span><span class="o">=</span><span class="n">types</span><span class="p">,</span>
-</span><span id="MySQL.Parser-455"><a href="#MySQL.Parser-455"><span class="linenos">455</span></a> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
-</span><span id="MySQL.Parser-456"><a href="#MySQL.Parser-456"><span class="linenos">456</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
-</span><span id="MySQL.Parser-457"><a href="#MySQL.Parser-457"><span class="linenos">457</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="MySQL.Parser-458"><a href="#MySQL.Parser-458"><span class="linenos">458</span></a> <span class="n">mutex</span><span class="o">=</span><span class="n">mutex</span><span class="p">,</span>
-</span><span id="MySQL.Parser-459"><a href="#MySQL.Parser-459"><span class="linenos">459</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="MySQL.Parser-460"><a href="#MySQL.Parser-460"><span class="linenos">460</span></a> <span class="p">)</span>
-</span><span id="MySQL.Parser-461"><a href="#MySQL.Parser-461"><span class="linenos">461</span></a>
-</span><span id="MySQL.Parser-462"><a href="#MySQL.Parser-462"><span class="linenos">462</span></a> <span class="k">def</span> <span class="nf">_parse_oldstyle_limit</span><span class="p">(</span>
-</span><span id="MySQL.Parser-463"><a href="#MySQL.Parser-463"><span class="linenos">463</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MySQL.Parser-464"><a href="#MySQL.Parser-464"><span class="linenos">464</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="MySQL.Parser-465"><a href="#MySQL.Parser-465"><span class="linenos">465</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-466"><a href="#MySQL.Parser-466"><span class="linenos">466</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-467"><a href="#MySQL.Parser-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-468"><a href="#MySQL.Parser-468"><span class="linenos">468</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</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="MySQL.Parser-469"><a href="#MySQL.Parser-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="MySQL.Parser-470"><a href="#MySQL.Parser-470"><span class="linenos">470</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="MySQL.Parser-471"><a href="#MySQL.Parser-471"><span class="linenos">471</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="MySQL.Parser-472"><a href="#MySQL.Parser-472"><span class="linenos">472</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="MySQL.Parser-473"><a href="#MySQL.Parser-473"><span class="linenos">473</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="MySQL.Parser-474"><a href="#MySQL.Parser-474"><span class="linenos">474</span></a>
-</span><span id="MySQL.Parser-475"><a href="#MySQL.Parser-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span>
-</span><span id="MySQL.Parser-476"><a href="#MySQL.Parser-476"><span class="linenos">476</span></a>
-</span><span id="MySQL.Parser-477"><a href="#MySQL.Parser-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="MySQL.Parser-478"><a href="#MySQL.Parser-478"><span class="linenos">478</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</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="MySQL.Parser-479"><a href="#MySQL.Parser-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="MySQL.Parser-480"><a href="#MySQL.Parser-480"><span class="linenos">480</span></a>
-</span><span id="MySQL.Parser-481"><a href="#MySQL.Parser-481"><span class="linenos">481</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_names</span><span class="p">(</span><span class="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="MySQL.Parser-482"><a href="#MySQL.Parser-482"><span class="linenos">482</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="MySQL.Parser-483"><a href="#MySQL.Parser-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLATE&quot;</span><span class="p">):</span>
-</span><span id="MySQL.Parser-484"><a href="#MySQL.Parser-484"><span class="linenos">484</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="MySQL.Parser-485"><a href="#MySQL.Parser-485"><span class="linenos">485</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Parser-486"><a href="#MySQL.Parser-486"><span class="linenos">486</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="MySQL.Parser-487"><a href="#MySQL.Parser-487"><span class="linenos">487</span></a>
-</span><span id="MySQL.Parser-488"><a href="#MySQL.Parser-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">charset</span><span class="p">,</span> <span class="n">collate</span><span class="o">=</span><span class="n">collate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;NAMES&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Parser-440"><a href="#MySQL.Parser-440"><span class="linenos">440</span></a> <span class="n">channel</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="k">if</span> <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;CHANNEL&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-441"><a href="#MySQL.Parser-441"><span class="linenos">441</span></a>
+</span><span id="MySQL.Parser-442"><a href="#MySQL.Parser-442"><span class="linenos">442</span></a> <span class="n">like</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;LIKE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-443"><a href="#MySQL.Parser-443"><span class="linenos">443</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="MySQL.Parser-444"><a href="#MySQL.Parser-444"><span class="linenos">444</span></a>
+</span><span id="MySQL.Parser-445"><a href="#MySQL.Parser-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="n">this</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Parser-446"><a href="#MySQL.Parser-446"><span class="linenos">446</span></a> <span class="n">types</span> <span 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_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROFILE_TYPES</span><span class="p">))</span>
+</span><span id="MySQL.Parser-447"><a href="#MySQL.Parser-447"><span class="linenos">447</span></a> <span class="n">query</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="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;QUERY&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-448"><a href="#MySQL.Parser-448"><span class="linenos">448</span></a> <span class="n">offset</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-449"><a href="#MySQL.Parser-449"><span class="linenos">449</span></a> <span class="n">limit</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-450"><a href="#MySQL.Parser-450"><span class="linenos">450</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Parser-451"><a href="#MySQL.Parser-451"><span class="linenos">451</span></a> <span class="n">types</span><span class="p">,</span> <span class="n">query</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-452"><a href="#MySQL.Parser-452"><span class="linenos">452</span></a> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_oldstyle_limit</span><span class="p">()</span>
+</span><span id="MySQL.Parser-453"><a href="#MySQL.Parser-453"><span class="linenos">453</span></a>
+</span><span id="MySQL.Parser-454"><a href="#MySQL.Parser-454"><span class="linenos">454</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">True</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;MUTEX&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-455"><a href="#MySQL.Parser-455"><span class="linenos">455</span></a> <span class="n">mutex</span> <span class="o">=</span> <span class="kc">False</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;STATUS&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">mutex</span>
+</span><span id="MySQL.Parser-456"><a href="#MySQL.Parser-456"><span class="linenos">456</span></a>
+</span><span id="MySQL.Parser-457"><a href="#MySQL.Parser-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="MySQL.Parser-458"><a href="#MySQL.Parser-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">,</span>
+</span><span id="MySQL.Parser-459"><a href="#MySQL.Parser-459"><span class="linenos">459</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="MySQL.Parser-460"><a href="#MySQL.Parser-460"><span class="linenos">460</span></a> <span class="n">target</span><span class="o">=</span><span class="n">target_id</span><span class="p">,</span>
+</span><span id="MySQL.Parser-461"><a href="#MySQL.Parser-461"><span class="linenos">461</span></a> <span class="n">full</span><span class="o">=</span><span class="n">full</span><span class="p">,</span>
+</span><span id="MySQL.Parser-462"><a href="#MySQL.Parser-462"><span class="linenos">462</span></a> <span class="n">log</span><span class="o">=</span><span class="n">log</span><span class="p">,</span>
+</span><span id="MySQL.Parser-463"><a href="#MySQL.Parser-463"><span class="linenos">463</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
+</span><span id="MySQL.Parser-464"><a href="#MySQL.Parser-464"><span class="linenos">464</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
+</span><span id="MySQL.Parser-465"><a href="#MySQL.Parser-465"><span class="linenos">465</span></a> <span class="n">channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span>
+</span><span id="MySQL.Parser-466"><a href="#MySQL.Parser-466"><span class="linenos">466</span></a> <span class="n">like</span><span class="o">=</span><span class="n">like</span><span class="p">,</span>
+</span><span id="MySQL.Parser-467"><a href="#MySQL.Parser-467"><span class="linenos">467</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
+</span><span id="MySQL.Parser-468"><a href="#MySQL.Parser-468"><span class="linenos">468</span></a> <span class="n">types</span><span class="o">=</span><span class="n">types</span><span class="p">,</span>
+</span><span id="MySQL.Parser-469"><a href="#MySQL.Parser-469"><span class="linenos">469</span></a> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
+</span><span id="MySQL.Parser-470"><a href="#MySQL.Parser-470"><span class="linenos">470</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="MySQL.Parser-471"><a href="#MySQL.Parser-471"><span class="linenos">471</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
+</span><span id="MySQL.Parser-472"><a href="#MySQL.Parser-472"><span class="linenos">472</span></a> <span class="n">mutex</span><span class="o">=</span><span class="n">mutex</span><span class="p">,</span>
+</span><span id="MySQL.Parser-473"><a href="#MySQL.Parser-473"><span class="linenos">473</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="MySQL.Parser-474"><a href="#MySQL.Parser-474"><span class="linenos">474</span></a> <span class="p">)</span>
+</span><span id="MySQL.Parser-475"><a href="#MySQL.Parser-475"><span class="linenos">475</span></a>
+</span><span id="MySQL.Parser-476"><a href="#MySQL.Parser-476"><span class="linenos">476</span></a> <span class="k">def</span> <span class="nf">_parse_oldstyle_limit</span><span class="p">(</span>
+</span><span id="MySQL.Parser-477"><a href="#MySQL.Parser-477"><span class="linenos">477</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MySQL.Parser-478"><a href="#MySQL.Parser-478"><span class="linenos">478</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="MySQL.Parser-479"><a href="#MySQL.Parser-479"><span class="linenos">479</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-480"><a href="#MySQL.Parser-480"><span class="linenos">480</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-481"><a href="#MySQL.Parser-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-482"><a href="#MySQL.Parser-482"><span class="linenos">482</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</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="MySQL.Parser-483"><a href="#MySQL.Parser-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="MySQL.Parser-484"><a href="#MySQL.Parser-484"><span class="linenos">484</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="MySQL.Parser-485"><a href="#MySQL.Parser-485"><span class="linenos">485</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="MySQL.Parser-486"><a href="#MySQL.Parser-486"><span class="linenos">486</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="MySQL.Parser-487"><a href="#MySQL.Parser-487"><span class="linenos">487</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="MySQL.Parser-488"><a href="#MySQL.Parser-488"><span class="linenos">488</span></a>
+</span><span id="MySQL.Parser-489"><a href="#MySQL.Parser-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span>
+</span><span id="MySQL.Parser-490"><a href="#MySQL.Parser-490"><span class="linenos">490</span></a>
+</span><span id="MySQL.Parser-491"><a href="#MySQL.Parser-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_charset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="MySQL.Parser-492"><a href="#MySQL.Parser-492"><span class="linenos">492</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 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="MySQL.Parser-493"><a href="#MySQL.Parser-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="MySQL.Parser-494"><a href="#MySQL.Parser-494"><span class="linenos">494</span></a>
+</span><span id="MySQL.Parser-495"><a href="#MySQL.Parser-495"><span class="linenos">495</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_names</span><span class="p">(</span><span class="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="MySQL.Parser-496"><a href="#MySQL.Parser-496"><span class="linenos">496</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="MySQL.Parser-497"><a href="#MySQL.Parser-497"><span class="linenos">497</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLATE&quot;</span><span class="p">):</span>
+</span><span id="MySQL.Parser-498"><a href="#MySQL.Parser-498"><span class="linenos">498</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="MySQL.Parser-499"><a href="#MySQL.Parser-499"><span class="linenos">499</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Parser-500"><a href="#MySQL.Parser-500"><span class="linenos">500</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="MySQL.Parser-501"><a href="#MySQL.Parser-501"><span class="linenos">501</span></a>
+</span><span id="MySQL.Parser-502"><a href="#MySQL.Parser-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">charset</span><span class="p">,</span> <span class="n">collate</span><span class="o">=</span><span class="n">collate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;NAMES&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Parser-503"><a href="#MySQL.Parser-503"><span class="linenos">503</span></a>
+</span><span id="MySQL.Parser-504"><a href="#MySQL.Parser-504"><span class="linenos">504</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="MySQL.Parser-505"><a href="#MySQL.Parser-505"><span class="linenos">505</span></a> <span class="c1"># mysql binary is special and can work anywhere, even in order by operations</span>
+</span><span id="MySQL.Parser-506"><a href="#MySQL.Parser-506"><span class="linenos">506</span></a> <span class="c1"># it operates like a no paren func</span>
+</span><span id="MySQL.Parser-507"><a href="#MySQL.Parser-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</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="MySQL.Parser-508"><a href="#MySQL.Parser-508"><span class="linenos">508</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MySQL.Parser-509"><a href="#MySQL.Parser-509"><span class="linenos">509</span></a>
+</span><span id="MySQL.Parser-510"><a href="#MySQL.Parser-510"><span class="linenos">510</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
+</span><span id="MySQL.Parser-511"><a href="#MySQL.Parser-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_column</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="MySQL.Parser-512"><a href="#MySQL.Parser-512"><span class="linenos">512</span></a>
+</span><span id="MySQL.Parser-513"><a href="#MySQL.Parser-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span></pre></div>
@@ -2318,11 +2449,23 @@ Default: 3</li>
</div>
+ <div id="MySQL.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="MySQL.Parser.FUNC_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="MySQL.Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;}</span>
</div>
@@ -2335,7 +2478,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CONJUNCTION</span> =
<input id="MySQL.Parser.CONJUNCTION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.CONJUNCTION-view-value"></label><span class="default_value">{&lt;TokenType.AND: &#39;AND&#39;&gt;: &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;, &lt;TokenType.OR: &#39;OR&#39;&gt;: &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;, &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;: &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;: &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.CONJUNCTION-view-value"></label><span class="default_value">{&lt;TokenType.AND: &#39;AND&#39;&gt;: &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;, &lt;TokenType.OR: &#39;OR&#39;&gt;: &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;, &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;: &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;: &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;, &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;: &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;}</span>
</div>
@@ -2344,11 +2487,24 @@ Default: 3</li>
</div>
+ <div id="MySQL.Parser.BITWISE" class="classattr">
+ <div class="attr variable">
+ <span class="name">BITWISE</span> =
+<input id="MySQL.Parser.BITWISE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.BITWISE-view-value"></label><span class="default_value">{&lt;TokenType.AMP: &#39;AMP&#39;&gt;: &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;: &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;: &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.Parser.BITWISE"></a>
+
+
+
+ </div>
<div id="MySQL.Parser.TABLE_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="MySQL.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -2361,7 +2517,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RANGE_PARSERS</span> =
<input id="MySQL.Parser.RANGE_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.MEMBER_OF: &#39;MEMBER_OF&#39;&gt;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MEMBER_OF: &#39;MEMBER_OF&#39;&gt;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2374,7 +2530,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="MySQL.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;function _str_to_date&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;INSTR&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;function _str_to_date&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;INSTR&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;}</span>
</div>
@@ -2400,7 +2556,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">STATEMENT_PARSERS</span> =
<input id="MySQL.Parser.STATEMENT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FROM: &#39;FROM&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2439,7 +2595,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CONSTRAINT_PARSERS</span> =
<input id="MySQL.Parser.CONSTRAINT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FULLTEXT&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;INDEX&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;KEY&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;SPATIAL&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NONCLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;WITH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FULLTEXT&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;INDEX&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;KEY&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;SPATIAL&#39;: &lt;function <a href="#MySQL.Parser">MySQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2451,7 +2607,7 @@ Default: 3</li>
<div id="MySQL.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="classattr">
<div class="attr variable">
<span class="name">SCHEMA_UNNAMED_CONSTRAINTS</span> =
-<span class="default_value">{&#39;FOREIGN KEY&#39;, &#39;LIKE&#39;, &#39;PRIMARY KEY&#39;, &#39;UNIQUE&#39;, &#39;INDEX&#39;, &#39;KEY&#39;, &#39;SPATIAL&#39;, &#39;FULLTEXT&#39;, &#39;CHECK&#39;}</span>
+<span class="default_value">{&#39;PRIMARY KEY&#39;, &#39;FULLTEXT&#39;, &#39;UNIQUE&#39;, &#39;SPATIAL&#39;, &#39;LIKE&#39;, &#39;KEY&#39;, &#39;CHECK&#39;, &#39;INDEX&#39;, &#39;FOREIGN KEY&#39;}</span>
</div>
@@ -2463,7 +2619,7 @@ Default: 3</li>
<div id="MySQL.Parser.PROFILE_TYPES" class="classattr">
<div class="attr variable">
<span class="name">PROFILE_TYPES</span> =
-<span class="default_value">{&#39;ALL&#39;, &#39;SWAPS&#39;, &#39;IPC&#39;, &#39;BLOCK IO&#39;, &#39;MEMORY&#39;, &#39;PAGE FAULTS&#39;, &#39;CPU&#39;, &#39;CONTEXT SWITCHES&#39;, &#39;SOURCE&#39;}</span>
+<span class="default_value">{&#39;BLOCK IO&#39;, &#39;ALL&#39;, &#39;CONTEXT SWITCHES&#39;, &#39;PAGE FAULTS&#39;, &#39;SOURCE&#39;, &#39;CPU&#39;, &#39;SWAPS&#39;, &#39;IPC&#39;, &#39;MEMORY&#39;}</span>
</div>
@@ -2476,7 +2632,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TYPE_TOKENS</span> =
<input id="MySQL.Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;}</span>
</div>
@@ -2488,7 +2644,8 @@ Default: 3</li>
<div id="MySQL.Parser.ENUM_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ENUM_TYPE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;}</span>
+<input id="MySQL.Parser.ENUM_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.ENUM_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;}</span>
</div>
@@ -2509,6 +2666,18 @@ Default: 3</li>
</div>
+ <div id="MySQL.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="MySQL.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -2539,7 +2708,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="MySQL.Parser.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -2552,7 +2721,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="MySQL.Parser.TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
</div>
@@ -2565,7 +2734,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="MySQL.Parser.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -2580,6 +2749,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="MySQL.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="MySQL.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="MySQL.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="MySQL.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="MySQL.Parser.SUBQUERY_PREDICATES" class="variable"><a href="../parser.html#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a></dd>
<dd id="MySQL.Parser.RESERVED_KEYWORDS" class="variable"><a href="../parser.html#Parser.RESERVED_KEYWORDS">RESERVED_KEYWORDS</a></dd>
@@ -2592,9 +2762,9 @@ Default: 3</li>
<dd id="MySQL.Parser.TRIM_TYPES" class="variable"><a href="../parser.html#Parser.TRIM_TYPES">TRIM_TYPES</a></dd>
<dd id="MySQL.Parser.EQUALITY" class="variable"><a href="../parser.html#Parser.EQUALITY">EQUALITY</a></dd>
<dd id="MySQL.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
- <dd id="MySQL.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="MySQL.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="MySQL.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="MySQL.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="MySQL.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="MySQL.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="MySQL.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -2610,6 +2780,7 @@ Default: 3</li>
<dd id="MySQL.Parser.PROPERTY_PARSERS" class="variable"><a href="../parser.html#Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
<dd id="MySQL.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="MySQL.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="MySQL.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="MySQL.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="MySQL.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="MySQL.Parser.TYPE_LITERAL_PARSERS" class="variable"><a href="../parser.html#Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a></dd>
@@ -2625,11 +2796,13 @@ Default: 3</li>
<dd id="MySQL.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="MySQL.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="MySQL.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="MySQL.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="MySQL.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="MySQL.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="MySQL.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="MySQL.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="MySQL.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="MySQL.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="MySQL.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="MySQL.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="MySQL.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -2665,149 +2838,152 @@ Default: 3</li>
</div>
<a class="headerlink" href="#MySQL.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator-490"><a href="#MySQL.Generator-490"><span class="linenos">490</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="MySQL.Generator-491"><a href="#MySQL.Generator-491"><span class="linenos">491</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="MySQL.Generator-492"><a href="#MySQL.Generator-492"><span class="linenos">492</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL.Generator-493"><a href="#MySQL.Generator-493"><span class="linenos">493</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL.Generator-494"><a href="#MySQL.Generator-494"><span class="linenos">494</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="MySQL.Generator-495"><a href="#MySQL.Generator-495"><span class="linenos">495</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL.Generator-496"><a href="#MySQL.Generator-496"><span class="linenos">496</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="MySQL.Generator-497"><a href="#MySQL.Generator-497"><span class="linenos">497</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="MySQL.Generator-498"><a href="#MySQL.Generator-498"><span class="linenos">498</span></a>
-</span><span id="MySQL.Generator-499"><a href="#MySQL.Generator-499"><span class="linenos">499</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Generator-500"><a href="#MySQL.Generator-500"><span class="linenos">500</span></a> <span 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="MySQL.Generator-501"><a href="#MySQL.Generator-501"><span class="linenos">501</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="MySQL.Generator-502"><a href="#MySQL.Generator-502"><span class="linenos">502</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 class="s2">&quot;DATEDIFF&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="MySQL.Generator-503"><a href="#MySQL.Generator-503"><span class="linenos">503</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Generator-504"><a href="#MySQL.Generator-504"><span class="linenos">504</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="MySQL.Generator-505"><a href="#MySQL.Generator-505"><span class="linenos">505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Generator-506"><a href="#MySQL.Generator-506"><span class="linenos">506</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="n">_date_trunc_sql</span><span class="p">,</span>
-</span><span id="MySQL.Generator-507"><a href="#MySQL.Generator-507"><span class="linenos">507</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="MySQL.Generator-508"><a href="#MySQL.Generator-508"><span class="linenos">508</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="MySQL.Generator-509"><a href="#MySQL.Generator-509"><span class="linenos">509</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="MySQL.Generator-510"><a href="#MySQL.Generator-510"><span class="linenos">510</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;this&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2"> SEPARATOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;separator&quot;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s2">&quot;&#39;,&#39;&quot;</span><span class="si">}</span><span class="s2">)&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-511"><a href="#MySQL.Generator-511"><span class="linenos">511</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="MySQL.Generator-512"><a href="#MySQL.Generator-512"><span class="linenos">512</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="MySQL.Generator-513"><a href="#MySQL.Generator-513"><span class="linenos">513</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="MySQL.Generator-514"><a href="#MySQL.Generator-514"><span class="linenos">514</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-515"><a href="#MySQL.Generator-515"><span class="linenos">515</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-516"><a href="#MySQL.Generator-516"><span class="linenos">516</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-517"><a href="#MySQL.Generator-517"><span class="linenos">517</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="MySQL.Generator-518"><a href="#MySQL.Generator-518"><span class="linenos">518</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-519"><a href="#MySQL.Generator-519"><span class="linenos">519</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-520"><a href="#MySQL.Generator-520"><span class="linenos">520</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-521"><a href="#MySQL.Generator-521"><span class="linenos">521</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-522"><a href="#MySQL.Generator-522"><span class="linenos">522</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-523"><a href="#MySQL.Generator-523"><span class="linenos">523</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-524"><a href="#MySQL.Generator-524"><span class="linenos">524</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">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;datetime&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
-</span><span id="MySQL.Generator-525"><a href="#MySQL.Generator-525"><span class="linenos">525</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-526"><a href="#MySQL.Generator-526"><span class="linenos">526</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-527"><a href="#MySQL.Generator-527"><span class="linenos">527</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-528"><a href="#MySQL.Generator-528"><span class="linenos">528</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-529"><a href="#MySQL.Generator-529"><span class="linenos">529</span></a> <span class="p">}</span>
-</span><span id="MySQL.Generator-530"><a href="#MySQL.Generator-530"><span class="linenos">530</span></a>
-</span><span id="MySQL.Generator-531"><a href="#MySQL.Generator-531"><span class="linenos">531</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-532"><a href="#MySQL.Generator-532"><span class="linenos">532</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-533"><a href="#MySQL.Generator-533"><span class="linenos">533</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-534"><a href="#MySQL.Generator-534"><span class="linenos">534</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-535"><a href="#MySQL.Generator-535"><span class="linenos">535</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-536"><a href="#MySQL.Generator-536"><span class="linenos">536</span></a>
-</span><span id="MySQL.Generator-537"><a href="#MySQL.Generator-537"><span class="linenos">537</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Generator-538"><a href="#MySQL.Generator-538"><span class="linenos">538</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="MySQL.Generator-539"><a href="#MySQL.Generator-539"><span class="linenos">539</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-540"><a href="#MySQL.Generator-540"><span class="linenos">540</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-541"><a href="#MySQL.Generator-541"><span class="linenos">541</span></a> <span class="p">}</span>
-</span><span id="MySQL.Generator-542"><a href="#MySQL.Generator-542"><span class="linenos">542</span></a>
-</span><span id="MySQL.Generator-543"><a href="#MySQL.Generator-543"><span class="linenos">543</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="MySQL.Generator-544"><a href="#MySQL.Generator-544"><span class="linenos">544</span></a>
-</span><span id="MySQL.Generator-545"><a href="#MySQL.Generator-545"><span class="linenos">545</span></a> <span class="c1"># MySQL doesn&#39;t support many datatypes in cast.</span>
-</span><span id="MySQL.Generator-546"><a href="#MySQL.Generator-546"><span class="linenos">546</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast</span>
-</span><span id="MySQL.Generator-547"><a href="#MySQL.Generator-547"><span class="linenos">547</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Generator-548"><a href="#MySQL.Generator-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-549"><a href="#MySQL.Generator-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-550"><a href="#MySQL.Generator-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;SIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-551"><a href="#MySQL.Generator-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-552"><a href="#MySQL.Generator-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UNSIGNED&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-553"><a href="#MySQL.Generator-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="MySQL.Generator-554"><a href="#MySQL.Generator-554"><span class="linenos">554</span></a> <span class="p">}</span>
-</span><span id="MySQL.Generator-555"><a href="#MySQL.Generator-555"><span class="linenos">555</span></a>
-</span><span id="MySQL.Generator-556"><a href="#MySQL.Generator-556"><span class="linenos">556</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator-557"><a href="#MySQL.Generator-557"><span class="linenos">557</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
-</span><span id="MySQL.Generator-558"><a href="#MySQL.Generator-558"><span class="linenos">558</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator-559"><a href="#MySQL.Generator-559"><span class="linenos">559</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
-</span><span id="MySQL.Generator-560"><a href="#MySQL.Generator-560"><span class="linenos">560</span></a>
-</span><span id="MySQL.Generator-561"><a href="#MySQL.Generator-561"><span class="linenos">561</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="MySQL.Generator-562"><a href="#MySQL.Generator-562"><span class="linenos">562</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
-</span><span id="MySQL.Generator-563"><a href="#MySQL.Generator-563"><span class="linenos">563</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator-564"><a href="#MySQL.Generator-564"><span class="linenos">564</span></a> <span class="k">return</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><span id="MySQL.Generator-565"><a href="#MySQL.Generator-565"><span class="linenos">565</span></a>
-</span><span id="MySQL.Generator-566"><a href="#MySQL.Generator-566"><span class="linenos">566</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator-567"><a href="#MySQL.Generator-567"><span class="linenos">567</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="MySQL.Generator-568"><a href="#MySQL.Generator-568"><span class="linenos">568</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator-569"><a href="#MySQL.Generator-569"><span class="linenos">569</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_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="MySQL.Generator-515"><a href="#MySQL.Generator-515"><span class="linenos">515</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="MySQL.Generator-516"><a href="#MySQL.Generator-516"><span class="linenos">516</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL.Generator-517"><a href="#MySQL.Generator-517"><span class="linenos">517</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL.Generator-518"><a href="#MySQL.Generator-518"><span class="linenos">518</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL.Generator-519"><a href="#MySQL.Generator-519"><span class="linenos">519</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="MySQL.Generator-520"><a href="#MySQL.Generator-520"><span class="linenos">520</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL.Generator-521"><a href="#MySQL.Generator-521"><span class="linenos">521</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="MySQL.Generator-522"><a href="#MySQL.Generator-522"><span class="linenos">522</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL.Generator-523"><a href="#MySQL.Generator-523"><span class="linenos">523</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="MySQL.Generator-524"><a href="#MySQL.Generator-524"><span class="linenos">524</span></a>
+</span><span id="MySQL.Generator-525"><a href="#MySQL.Generator-525"><span class="linenos">525</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Generator-526"><a href="#MySQL.Generator-526"><span class="linenos">526</span></a> <span 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="MySQL.Generator-527"><a href="#MySQL.Generator-527"><span class="linenos">527</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="MySQL.Generator-528"><a href="#MySQL.Generator-528"><span class="linenos">528</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 class="s2">&quot;DATEDIFF&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="MySQL.Generator-529"><a href="#MySQL.Generator-529"><span class="linenos">529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Generator-530"><a href="#MySQL.Generator-530"><span class="linenos">530</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="MySQL.Generator-531"><a href="#MySQL.Generator-531"><span class="linenos">531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Generator-532"><a href="#MySQL.Generator-532"><span class="linenos">532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="n">_date_trunc_sql</span><span class="p">,</span>
+</span><span id="MySQL.Generator-533"><a href="#MySQL.Generator-533"><span class="linenos">533</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="MySQL.Generator-534"><a href="#MySQL.Generator-534"><span class="linenos">534</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="MySQL.Generator-535"><a href="#MySQL.Generator-535"><span class="linenos">535</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="MySQL.Generator-536"><a href="#MySQL.Generator-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;this&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2"> SEPARATOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;separator&quot;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s2">&quot;&#39;,&#39;&quot;</span><span class="si">}</span><span class="s2">)&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-537"><a href="#MySQL.Generator-537"><span class="linenos">537</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="MySQL.Generator-538"><a href="#MySQL.Generator-538"><span class="linenos">538</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="MySQL.Generator-539"><a href="#MySQL.Generator-539"><span class="linenos">539</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">:</span> <span class="n">json_keyvalue_comma_sql</span><span class="p">,</span>
+</span><span id="MySQL.Generator-540"><a href="#MySQL.Generator-540"><span class="linenos">540</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="MySQL.Generator-541"><a href="#MySQL.Generator-541"><span class="linenos">541</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-542"><a href="#MySQL.Generator-542"><span class="linenos">542</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-543"><a href="#MySQL.Generator-543"><span class="linenos">543</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-544"><a href="#MySQL.Generator-544"><span class="linenos">544</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="MySQL.Generator-545"><a href="#MySQL.Generator-545"><span class="linenos">545</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-546"><a href="#MySQL.Generator-546"><span class="linenos">546</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-547"><a href="#MySQL.Generator-547"><span class="linenos">547</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-548"><a href="#MySQL.Generator-548"><span class="linenos">548</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-549"><a href="#MySQL.Generator-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Stuff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;INSERT&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Generator-550"><a href="#MySQL.Generator-550"><span class="linenos">550</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-551"><a href="#MySQL.Generator-551"><span class="linenos">551</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-552"><a href="#MySQL.Generator-552"><span class="linenos">552</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">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;datetime&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
+</span><span id="MySQL.Generator-553"><a href="#MySQL.Generator-553"><span class="linenos">553</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-554"><a href="#MySQL.Generator-554"><span class="linenos">554</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-555"><a href="#MySQL.Generator-555"><span class="linenos">555</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-556"><a href="#MySQL.Generator-556"><span class="linenos">556</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-557"><a href="#MySQL.Generator-557"><span class="linenos">557</span></a> <span class="p">}</span>
+</span><span id="MySQL.Generator-558"><a href="#MySQL.Generator-558"><span class="linenos">558</span></a>
+</span><span id="MySQL.Generator-559"><a href="#MySQL.Generator-559"><span class="linenos">559</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-560"><a href="#MySQL.Generator-560"><span class="linenos">560</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-561"><a href="#MySQL.Generator-561"><span class="linenos">561</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-562"><a href="#MySQL.Generator-562"><span class="linenos">562</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-563"><a href="#MySQL.Generator-563"><span class="linenos">563</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-564"><a href="#MySQL.Generator-564"><span class="linenos">564</span></a>
+</span><span id="MySQL.Generator-565"><a href="#MySQL.Generator-565"><span class="linenos">565</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Generator-566"><a href="#MySQL.Generator-566"><span class="linenos">566</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="MySQL.Generator-567"><a href="#MySQL.Generator-567"><span class="linenos">567</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-568"><a href="#MySQL.Generator-568"><span class="linenos">568</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-569"><a href="#MySQL.Generator-569"><span class="linenos">569</span></a> <span class="p">}</span>
</span><span id="MySQL.Generator-570"><a href="#MySQL.Generator-570"><span class="linenos">570</span></a>
-</span><span id="MySQL.Generator-571"><a href="#MySQL.Generator-571"><span class="linenos">571</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator-572"><a href="#MySQL.Generator-572"><span class="linenos">572</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="MySQL.Generator-573"><a href="#MySQL.Generator-573"><span class="linenos">573</span></a>
-</span><span id="MySQL.Generator-574"><a href="#MySQL.Generator-574"><span class="linenos">574</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator-575"><a href="#MySQL.Generator-575"><span class="linenos">575</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="MySQL.Generator-576"><a href="#MySQL.Generator-576"><span class="linenos">576</span></a>
-</span><span id="MySQL.Generator-577"><a href="#MySQL.Generator-577"><span class="linenos">577</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="MySQL.Generator-578"><a href="#MySQL.Generator-578"><span class="linenos">578</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="MySQL.Generator-579"><a href="#MySQL.Generator-579"><span class="linenos">579</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
-</span><span id="MySQL.Generator-580"><a href="#MySQL.Generator-580"><span class="linenos">580</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="MySQL.Generator-581"><a href="#MySQL.Generator-581"><span class="linenos">581</span></a>
-</span><span id="MySQL.Generator-582"><a href="#MySQL.Generator-582"><span class="linenos">582</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-583"><a href="#MySQL.Generator-583"><span class="linenos">583</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-584"><a href="#MySQL.Generator-584"><span class="linenos">584</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-585"><a href="#MySQL.Generator-585"><span class="linenos">585</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-586"><a href="#MySQL.Generator-586"><span class="linenos">586</span></a>
-</span><span id="MySQL.Generator-587"><a href="#MySQL.Generator-587"><span class="linenos">587</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-588"><a href="#MySQL.Generator-588"><span class="linenos">588</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-589"><a href="#MySQL.Generator-589"><span class="linenos">589</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-590"><a href="#MySQL.Generator-590"><span class="linenos">590</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-591"><a href="#MySQL.Generator-591"><span class="linenos">591</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-592"><a href="#MySQL.Generator-592"><span class="linenos">592</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-571"><a href="#MySQL.Generator-571"><span class="linenos">571</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="MySQL.Generator-572"><a href="#MySQL.Generator-572"><span class="linenos">572</span></a>
+</span><span id="MySQL.Generator-573"><a href="#MySQL.Generator-573"><span class="linenos">573</span></a> <span class="c1"># MySQL doesn&#39;t support many datatypes in cast.</span>
+</span><span id="MySQL.Generator-574"><a href="#MySQL.Generator-574"><span class="linenos">574</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast</span>
+</span><span id="MySQL.Generator-575"><a href="#MySQL.Generator-575"><span class="linenos">575</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Generator-576"><a href="#MySQL.Generator-576"><span class="linenos">576</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-577"><a href="#MySQL.Generator-577"><span class="linenos">577</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-578"><a href="#MySQL.Generator-578"><span class="linenos">578</span></a> <span class="n">exp</span><span 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;SIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-579"><a href="#MySQL.Generator-579"><span class="linenos">579</span></a> <span class="n">exp</span><span 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;CHAR&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-580"><a href="#MySQL.Generator-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UNSIGNED&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-581"><a href="#MySQL.Generator-581"><span class="linenos">581</span></a> <span class="n">exp</span><span 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;CHAR&quot;</span><span class="p">,</span>
+</span><span id="MySQL.Generator-582"><a href="#MySQL.Generator-582"><span class="linenos">582</span></a> <span class="p">}</span>
+</span><span id="MySQL.Generator-583"><a href="#MySQL.Generator-583"><span class="linenos">583</span></a>
+</span><span id="MySQL.Generator-584"><a href="#MySQL.Generator-584"><span class="linenos">584</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator-585"><a href="#MySQL.Generator-585"><span class="linenos">585</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
+</span><span id="MySQL.Generator-586"><a href="#MySQL.Generator-586"><span class="linenos">586</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator-587"><a href="#MySQL.Generator-587"><span class="linenos">587</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
+</span><span id="MySQL.Generator-588"><a href="#MySQL.Generator-588"><span class="linenos">588</span></a>
+</span><span id="MySQL.Generator-589"><a href="#MySQL.Generator-589"><span class="linenos">589</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="MySQL.Generator-590"><a href="#MySQL.Generator-590"><span class="linenos">590</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
+</span><span id="MySQL.Generator-591"><a href="#MySQL.Generator-591"><span class="linenos">591</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator-592"><a href="#MySQL.Generator-592"><span class="linenos">592</span></a> <span class="k">return</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><span id="MySQL.Generator-593"><a href="#MySQL.Generator-593"><span class="linenos">593</span></a>
-</span><span id="MySQL.Generator-594"><a href="#MySQL.Generator-594"><span class="linenos">594</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-595"><a href="#MySQL.Generator-595"><span class="linenos">595</span></a>
-</span><span id="MySQL.Generator-596"><a href="#MySQL.Generator-596"><span class="linenos">596</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-597"><a href="#MySQL.Generator-597"><span class="linenos">597</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-594"><a href="#MySQL.Generator-594"><span class="linenos">594</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator-595"><a href="#MySQL.Generator-595"><span class="linenos">595</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="MySQL.Generator-596"><a href="#MySQL.Generator-596"><span class="linenos">596</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator-597"><a href="#MySQL.Generator-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="MySQL.Generator-598"><a href="#MySQL.Generator-598"><span class="linenos">598</span></a>
-</span><span id="MySQL.Generator-599"><a href="#MySQL.Generator-599"><span class="linenos">599</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-600"><a href="#MySQL.Generator-600"><span class="linenos">600</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-601"><a href="#MySQL.Generator-601"><span class="linenos">601</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-602"><a href="#MySQL.Generator-602"><span class="linenos">602</span></a>
-</span><span id="MySQL.Generator-603"><a href="#MySQL.Generator-603"><span class="linenos">603</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-604"><a href="#MySQL.Generator-604"><span class="linenos">604</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-605"><a href="#MySQL.Generator-605"><span class="linenos">605</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-606"><a href="#MySQL.Generator-606"><span class="linenos">606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator-607"><a href="#MySQL.Generator-607"><span class="linenos">607</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-608"><a href="#MySQL.Generator-608"><span class="linenos">608</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-599"><a href="#MySQL.Generator-599"><span class="linenos">599</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator-600"><a href="#MySQL.Generator-600"><span class="linenos">600</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="MySQL.Generator-601"><a href="#MySQL.Generator-601"><span class="linenos">601</span></a>
+</span><span id="MySQL.Generator-602"><a href="#MySQL.Generator-602"><span class="linenos">602</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator-603"><a href="#MySQL.Generator-603"><span class="linenos">603</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="MySQL.Generator-604"><a href="#MySQL.Generator-604"><span class="linenos">604</span></a>
+</span><span id="MySQL.Generator-605"><a href="#MySQL.Generator-605"><span class="linenos">605</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="MySQL.Generator-606"><a href="#MySQL.Generator-606"><span class="linenos">606</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="MySQL.Generator-607"><a href="#MySQL.Generator-607"><span class="linenos">607</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
+</span><span id="MySQL.Generator-608"><a href="#MySQL.Generator-608"><span class="linenos">608</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="MySQL.Generator-609"><a href="#MySQL.Generator-609"><span class="linenos">609</span></a>
-</span><span id="MySQL.Generator-610"><a href="#MySQL.Generator-610"><span class="linenos">610</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-611"><a href="#MySQL.Generator-611"><span class="linenos">611</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-612"><a href="#MySQL.Generator-612"><span class="linenos">612</span></a>
-</span><span id="MySQL.Generator-613"><a href="#MySQL.Generator-613"><span class="linenos">613</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-610"><a href="#MySQL.Generator-610"><span class="linenos">610</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-611"><a href="#MySQL.Generator-611"><span class="linenos">611</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-612"><a href="#MySQL.Generator-612"><span class="linenos">612</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-613"><a href="#MySQL.Generator-613"><span class="linenos">613</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-614"><a href="#MySQL.Generator-614"><span class="linenos">614</span></a>
-</span><span id="MySQL.Generator-615"><a href="#MySQL.Generator-615"><span class="linenos">615</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-616"><a href="#MySQL.Generator-616"><span class="linenos">616</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-617"><a href="#MySQL.Generator-617"><span class="linenos">617</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator-618"><a href="#MySQL.Generator-618"><span class="linenos">618</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-619"><a href="#MySQL.Generator-619"><span class="linenos">619</span></a>
-</span><span id="MySQL.Generator-620"><a href="#MySQL.Generator-620"><span class="linenos">620</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-615"><a href="#MySQL.Generator-615"><span class="linenos">615</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-616"><a href="#MySQL.Generator-616"><span class="linenos">616</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-617"><a href="#MySQL.Generator-617"><span class="linenos">617</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-618"><a href="#MySQL.Generator-618"><span class="linenos">618</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-619"><a href="#MySQL.Generator-619"><span class="linenos">619</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-620"><a href="#MySQL.Generator-620"><span class="linenos">620</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-621"><a href="#MySQL.Generator-621"><span class="linenos">621</span></a>
-</span><span id="MySQL.Generator-622"><a href="#MySQL.Generator-622"><span class="linenos">622</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-623"><a href="#MySQL.Generator-623"><span class="linenos">623</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-624"><a href="#MySQL.Generator-624"><span class="linenos">624</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 class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-625"><a href="#MySQL.Generator-625"><span class="linenos">625</span></a>
-</span><span id="MySQL.Generator-626"><a href="#MySQL.Generator-626"><span class="linenos">626</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-627"><a href="#MySQL.Generator-627"><span class="linenos">627</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-628"><a href="#MySQL.Generator-628"><span class="linenos">628</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-629"><a href="#MySQL.Generator-629"><span class="linenos">629</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
-</span><span id="MySQL.Generator-630"><a href="#MySQL.Generator-630"><span class="linenos">630</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-631"><a href="#MySQL.Generator-631"><span class="linenos">631</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-632"><a href="#MySQL.Generator-632"><span class="linenos">632</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-622"><a href="#MySQL.Generator-622"><span class="linenos">622</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-623"><a href="#MySQL.Generator-623"><span class="linenos">623</span></a>
+</span><span id="MySQL.Generator-624"><a href="#MySQL.Generator-624"><span class="linenos">624</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-625"><a href="#MySQL.Generator-625"><span class="linenos">625</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-626"><a href="#MySQL.Generator-626"><span class="linenos">626</span></a>
+</span><span id="MySQL.Generator-627"><a href="#MySQL.Generator-627"><span class="linenos">627</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-628"><a href="#MySQL.Generator-628"><span class="linenos">628</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-629"><a href="#MySQL.Generator-629"><span class="linenos">629</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-630"><a href="#MySQL.Generator-630"><span class="linenos">630</span></a>
+</span><span id="MySQL.Generator-631"><a href="#MySQL.Generator-631"><span class="linenos">631</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-632"><a href="#MySQL.Generator-632"><span class="linenos">632</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-633"><a href="#MySQL.Generator-633"><span class="linenos">633</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-634"><a href="#MySQL.Generator-634"><span class="linenos">634</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator-635"><a href="#MySQL.Generator-635"><span class="linenos">635</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-636"><a href="#MySQL.Generator-636"><span class="linenos">636</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-637"><a href="#MySQL.Generator-637"><span class="linenos">637</span></a>
+</span><span id="MySQL.Generator-638"><a href="#MySQL.Generator-638"><span class="linenos">638</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-639"><a href="#MySQL.Generator-639"><span class="linenos">639</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-640"><a href="#MySQL.Generator-640"><span class="linenos">640</span></a>
+</span><span id="MySQL.Generator-641"><a href="#MySQL.Generator-641"><span class="linenos">641</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-642"><a href="#MySQL.Generator-642"><span class="linenos">642</span></a>
+</span><span id="MySQL.Generator-643"><a href="#MySQL.Generator-643"><span class="linenos">643</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-644"><a href="#MySQL.Generator-644"><span class="linenos">644</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-645"><a href="#MySQL.Generator-645"><span class="linenos">645</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator-646"><a href="#MySQL.Generator-646"><span class="linenos">646</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-647"><a href="#MySQL.Generator-647"><span class="linenos">647</span></a>
+</span><span id="MySQL.Generator-648"><a href="#MySQL.Generator-648"><span class="linenos">648</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-649"><a href="#MySQL.Generator-649"><span class="linenos">649</span></a>
+</span><span id="MySQL.Generator-650"><a href="#MySQL.Generator-650"><span class="linenos">650</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-651"><a href="#MySQL.Generator-651"><span class="linenos">651</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-652"><a href="#MySQL.Generator-652"><span class="linenos">652</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 class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-653"><a href="#MySQL.Generator-653"><span class="linenos">653</span></a>
+</span><span id="MySQL.Generator-654"><a href="#MySQL.Generator-654"><span class="linenos">654</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-655"><a href="#MySQL.Generator-655"><span class="linenos">655</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-656"><a href="#MySQL.Generator-656"><span class="linenos">656</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-657"><a href="#MySQL.Generator-657"><span class="linenos">657</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
+</span><span id="MySQL.Generator-658"><a href="#MySQL.Generator-658"><span class="linenos">658</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-659"><a href="#MySQL.Generator-659"><span class="linenos">659</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-660"><a href="#MySQL.Generator-660"><span class="linenos">660</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -2934,11 +3110,23 @@ Default: True</li>
</div>
+ <div id="MySQL.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="MySQL.Generator.TRANSFORMS" class="classattr">
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="MySQL.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function _date_trunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function _date_trunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONKeyValue">sqlglot.expressions.JSONKeyValue</a>&#39;&gt;: &lt;function json_keyvalue_comma_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#MySQL.Generator">MySQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2963,7 +3151,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="MySQL.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -3008,10 +3196,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.limit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.limit_sql-556"><a href="#MySQL.Generator.limit_sql-556"><span class="linenos">556</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator.limit_sql-557"><a href="#MySQL.Generator.limit_sql-557"><span class="linenos">557</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
-</span><span id="MySQL.Generator.limit_sql-558"><a href="#MySQL.Generator.limit_sql-558"><span class="linenos">558</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator.limit_sql-559"><a href="#MySQL.Generator.limit_sql-559"><span class="linenos">559</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.limit_sql-584"><a href="#MySQL.Generator.limit_sql-584"><span class="linenos">584</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator.limit_sql-585"><a href="#MySQL.Generator.limit_sql-585"><span class="linenos">585</span></a> <span class="c1"># MySQL requires simple literal values for its LIMIT clause.</span>
+</span><span id="MySQL.Generator.limit_sql-586"><a href="#MySQL.Generator.limit_sql-586"><span class="linenos">586</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator.limit_sql-587"><a href="#MySQL.Generator.limit_sql-587"><span class="linenos">587</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="n">top</span><span class="p">)</span>
</span></pre></div>
@@ -3029,10 +3217,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.offset_sql-561"><a href="#MySQL.Generator.offset_sql-561"><span class="linenos">561</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="MySQL.Generator.offset_sql-562"><a href="#MySQL.Generator.offset_sql-562"><span class="linenos">562</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
-</span><span id="MySQL.Generator.offset_sql-563"><a href="#MySQL.Generator.offset_sql-563"><span class="linenos">563</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator.offset_sql-564"><a href="#MySQL.Generator.offset_sql-564"><span class="linenos">564</span></a> <span class="k">return</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.offset_sql-589"><a href="#MySQL.Generator.offset_sql-589"><span class="linenos">589</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="MySQL.Generator.offset_sql-590"><a href="#MySQL.Generator.offset_sql-590"><span class="linenos">590</span></a> <span class="c1"># MySQL requires simple literal values for its OFFSET clause.</span>
+</span><span id="MySQL.Generator.offset_sql-591"><a href="#MySQL.Generator.offset_sql-591"><span class="linenos">591</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</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="MySQL.Generator.offset_sql-592"><a href="#MySQL.Generator.offset_sql-592"><span class="linenos">592</span></a> <span class="k">return</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></pre></div>
@@ -3050,10 +3238,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.xor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.xor_sql-566"><a href="#MySQL.Generator.xor_sql-566"><span class="linenos">566</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator.xor_sql-567"><a href="#MySQL.Generator.xor_sql-567"><span class="linenos">567</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="MySQL.Generator.xor_sql-568"><a href="#MySQL.Generator.xor_sql-568"><span class="linenos">568</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator.xor_sql-569"><a href="#MySQL.Generator.xor_sql-569"><span class="linenos">569</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_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="MySQL.Generator.xor_sql-594"><a href="#MySQL.Generator.xor_sql-594"><span class="linenos">594</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator.xor_sql-595"><a href="#MySQL.Generator.xor_sql-595"><span class="linenos">595</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="MySQL.Generator.xor_sql-596"><a href="#MySQL.Generator.xor_sql-596"><span class="linenos">596</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; XOR &quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator.xor_sql-597"><a href="#MySQL.Generator.xor_sql-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">xor_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3071,8 +3259,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.jsonarraycontains_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.jsonarraycontains_sql-571"><a href="#MySQL.Generator.jsonarraycontains_sql-571"><span class="linenos">571</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator.jsonarraycontains_sql-572"><a href="#MySQL.Generator.jsonarraycontains_sql-572"><span class="linenos">572</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="MySQL.Generator.jsonarraycontains_sql-599"><a href="#MySQL.Generator.jsonarraycontains_sql-599"><span class="linenos">599</span></a> <span class="k">def</span> <span class="nf">jsonarraycontains_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONArrayContains</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator.jsonarraycontains_sql-600"><a href="#MySQL.Generator.jsonarraycontains_sql-600"><span class="linenos">600</span></a> <span class="k">return</span> <span class="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"> MEMBER OF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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>
@@ -3090,13 +3278,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.cast_sql-574"><a href="#MySQL.Generator.cast_sql-574"><span class="linenos">574</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator.cast_sql-575"><a href="#MySQL.Generator.cast_sql-575"><span class="linenos">575</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="MySQL.Generator.cast_sql-576"><a href="#MySQL.Generator.cast_sql-576"><span class="linenos">576</span></a>
-</span><span id="MySQL.Generator.cast_sql-577"><a href="#MySQL.Generator.cast_sql-577"><span class="linenos">577</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="MySQL.Generator.cast_sql-578"><a href="#MySQL.Generator.cast_sql-578"><span class="linenos">578</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="MySQL.Generator.cast_sql-579"><a href="#MySQL.Generator.cast_sql-579"><span class="linenos">579</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
-</span><span id="MySQL.Generator.cast_sql-580"><a href="#MySQL.Generator.cast_sql-580"><span class="linenos">580</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="MySQL.Generator.cast_sql-602"><a href="#MySQL.Generator.cast_sql-602"><span class="linenos">602</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator.cast_sql-603"><a href="#MySQL.Generator.cast_sql-603"><span class="linenos">603</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CAST_MAPPING</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="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="MySQL.Generator.cast_sql-604"><a href="#MySQL.Generator.cast_sql-604"><span class="linenos">604</span></a>
+</span><span id="MySQL.Generator.cast_sql-605"><a href="#MySQL.Generator.cast_sql-605"><span class="linenos">605</span></a> <span class="k">if</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="MySQL.Generator.cast_sql-606"><a href="#MySQL.Generator.cast_sql-606"><span class="linenos">606</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="MySQL.Generator.cast_sql-607"><a href="#MySQL.Generator.cast_sql-607"><span class="linenos">607</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">to</span><span class="p">)</span>
+</span><span id="MySQL.Generator.cast_sql-608"><a href="#MySQL.Generator.cast_sql-608"><span class="linenos">608</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>
@@ -3114,45 +3302,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-582"><a href="#MySQL.Generator.show_sql-582"><span class="linenos">582</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-583"><a href="#MySQL.Generator.show_sql-583"><span class="linenos">583</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-584"><a href="#MySQL.Generator.show_sql-584"><span class="linenos">584</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-585"><a href="#MySQL.Generator.show_sql-585"><span class="linenos">585</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-586"><a href="#MySQL.Generator.show_sql-586"><span class="linenos">586</span></a>
-</span><span id="MySQL.Generator.show_sql-587"><a href="#MySQL.Generator.show_sql-587"><span class="linenos">587</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-588"><a href="#MySQL.Generator.show_sql-588"><span class="linenos">588</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-589"><a href="#MySQL.Generator.show_sql-589"><span class="linenos">589</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-590"><a href="#MySQL.Generator.show_sql-590"><span class="linenos">590</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-591"><a href="#MySQL.Generator.show_sql-591"><span class="linenos">591</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-592"><a href="#MySQL.Generator.show_sql-592"><span class="linenos">592</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-593"><a href="#MySQL.Generator.show_sql-593"><span class="linenos">593</span></a>
-</span><span id="MySQL.Generator.show_sql-594"><a href="#MySQL.Generator.show_sql-594"><span class="linenos">594</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-595"><a href="#MySQL.Generator.show_sql-595"><span class="linenos">595</span></a>
-</span><span id="MySQL.Generator.show_sql-596"><a href="#MySQL.Generator.show_sql-596"><span class="linenos">596</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-597"><a href="#MySQL.Generator.show_sql-597"><span class="linenos">597</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-598"><a href="#MySQL.Generator.show_sql-598"><span class="linenos">598</span></a>
-</span><span id="MySQL.Generator.show_sql-599"><a href="#MySQL.Generator.show_sql-599"><span class="linenos">599</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-600"><a href="#MySQL.Generator.show_sql-600"><span class="linenos">600</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-601"><a href="#MySQL.Generator.show_sql-601"><span class="linenos">601</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-602"><a href="#MySQL.Generator.show_sql-602"><span class="linenos">602</span></a>
-</span><span id="MySQL.Generator.show_sql-603"><a href="#MySQL.Generator.show_sql-603"><span class="linenos">603</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-604"><a href="#MySQL.Generator.show_sql-604"><span class="linenos">604</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-605"><a href="#MySQL.Generator.show_sql-605"><span class="linenos">605</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-606"><a href="#MySQL.Generator.show_sql-606"><span class="linenos">606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-607"><a href="#MySQL.Generator.show_sql-607"><span class="linenos">607</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator.show_sql-608"><a href="#MySQL.Generator.show_sql-608"><span class="linenos">608</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-609"><a href="#MySQL.Generator.show_sql-609"><span class="linenos">609</span></a>
-</span><span id="MySQL.Generator.show_sql-610"><a href="#MySQL.Generator.show_sql-610"><span class="linenos">610</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-611"><a href="#MySQL.Generator.show_sql-611"><span class="linenos">611</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-612"><a href="#MySQL.Generator.show_sql-612"><span class="linenos">612</span></a>
-</span><span id="MySQL.Generator.show_sql-613"><a href="#MySQL.Generator.show_sql-613"><span class="linenos">613</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.show_sql-610"><a href="#MySQL.Generator.show_sql-610"><span class="linenos">610</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-611"><a href="#MySQL.Generator.show_sql-611"><span class="linenos">611</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-612"><a href="#MySQL.Generator.show_sql-612"><span class="linenos">612</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-613"><a href="#MySQL.Generator.show_sql-613"><span class="linenos">613</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-614"><a href="#MySQL.Generator.show_sql-614"><span class="linenos">614</span></a>
-</span><span id="MySQL.Generator.show_sql-615"><a href="#MySQL.Generator.show_sql-615"><span class="linenos">615</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-616"><a href="#MySQL.Generator.show_sql-616"><span class="linenos">616</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-617"><a href="#MySQL.Generator.show_sql-617"><span class="linenos">617</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-618"><a href="#MySQL.Generator.show_sql-618"><span class="linenos">618</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-619"><a href="#MySQL.Generator.show_sql-619"><span class="linenos">619</span></a>
-</span><span id="MySQL.Generator.show_sql-620"><a href="#MySQL.Generator.show_sql-620"><span class="linenos">620</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.show_sql-615"><a href="#MySQL.Generator.show_sql-615"><span class="linenos">615</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-616"><a href="#MySQL.Generator.show_sql-616"><span class="linenos">616</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-617"><a href="#MySQL.Generator.show_sql-617"><span class="linenos">617</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-618"><a href="#MySQL.Generator.show_sql-618"><span class="linenos">618</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-619"><a href="#MySQL.Generator.show_sql-619"><span class="linenos">619</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-620"><a href="#MySQL.Generator.show_sql-620"><span class="linenos">620</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-621"><a href="#MySQL.Generator.show_sql-621"><span class="linenos">621</span></a>
+</span><span id="MySQL.Generator.show_sql-622"><a href="#MySQL.Generator.show_sql-622"><span class="linenos">622</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-623"><a href="#MySQL.Generator.show_sql-623"><span class="linenos">623</span></a>
+</span><span id="MySQL.Generator.show_sql-624"><a href="#MySQL.Generator.show_sql-624"><span class="linenos">624</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-625"><a href="#MySQL.Generator.show_sql-625"><span class="linenos">625</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-626"><a href="#MySQL.Generator.show_sql-626"><span class="linenos">626</span></a>
+</span><span id="MySQL.Generator.show_sql-627"><a href="#MySQL.Generator.show_sql-627"><span class="linenos">627</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-628"><a href="#MySQL.Generator.show_sql-628"><span class="linenos">628</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-629"><a href="#MySQL.Generator.show_sql-629"><span class="linenos">629</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-630"><a href="#MySQL.Generator.show_sql-630"><span class="linenos">630</span></a>
+</span><span id="MySQL.Generator.show_sql-631"><a href="#MySQL.Generator.show_sql-631"><span class="linenos">631</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-632"><a href="#MySQL.Generator.show_sql-632"><span class="linenos">632</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-633"><a href="#MySQL.Generator.show_sql-633"><span class="linenos">633</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-634"><a href="#MySQL.Generator.show_sql-634"><span class="linenos">634</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-635"><a href="#MySQL.Generator.show_sql-635"><span class="linenos">635</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator.show_sql-636"><a href="#MySQL.Generator.show_sql-636"><span class="linenos">636</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-637"><a href="#MySQL.Generator.show_sql-637"><span class="linenos">637</span></a>
+</span><span id="MySQL.Generator.show_sql-638"><a href="#MySQL.Generator.show_sql-638"><span class="linenos">638</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-639"><a href="#MySQL.Generator.show_sql-639"><span class="linenos">639</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-640"><a href="#MySQL.Generator.show_sql-640"><span class="linenos">640</span></a>
+</span><span id="MySQL.Generator.show_sql-641"><a href="#MySQL.Generator.show_sql-641"><span class="linenos">641</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-642"><a href="#MySQL.Generator.show_sql-642"><span class="linenos">642</span></a>
+</span><span id="MySQL.Generator.show_sql-643"><a href="#MySQL.Generator.show_sql-643"><span class="linenos">643</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-644"><a href="#MySQL.Generator.show_sql-644"><span class="linenos">644</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-645"><a href="#MySQL.Generator.show_sql-645"><span class="linenos">645</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-646"><a href="#MySQL.Generator.show_sql-646"><span class="linenos">646</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-647"><a href="#MySQL.Generator.show_sql-647"><span class="linenos">647</span></a>
+</span><span id="MySQL.Generator.show_sql-648"><a href="#MySQL.Generator.show_sql-648"><span class="linenos">648</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>
@@ -3175,7 +3363,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="MySQL.Generator.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -3197,6 +3385,18 @@ Default: True</li>
</div>
+ <div id="MySQL.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="classattr">
+ <div class="attr variable">
+ <span class="name">IDENTIFIERS_CAN_START_WITH_DIGIT</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#MySQL.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT"></a>
+
+
+
+ </div>
<div id="MySQL.Generator.can_identify" class="classattr">
<input id="MySQL.Generator.can_identify-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -3209,26 +3409,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.can_identify-253"><a href="#MySQL.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="MySQL.Generator.can_identify-254"><a href="#MySQL.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="MySQL.Generator.can_identify-255"><a href="#MySQL.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="MySQL.Generator.can_identify-256"><a href="#MySQL.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="MySQL.Generator.can_identify-257"><a href="#MySQL.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="MySQL.Generator.can_identify-258"><a href="#MySQL.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="MySQL.Generator.can_identify-259"><a href="#MySQL.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="MySQL.Generator.can_identify-260"><a href="#MySQL.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="MySQL.Generator.can_identify-261"><a href="#MySQL.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="MySQL.Generator.can_identify-262"><a href="#MySQL.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="MySQL.Generator.can_identify-263"><a href="#MySQL.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="MySQL.Generator.can_identify-264"><a href="#MySQL.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="MySQL.Generator.can_identify-265"><a href="#MySQL.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MySQL.Generator.can_identify-266"><a href="#MySQL.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator.can_identify-267"><a href="#MySQL.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="MySQL.Generator.can_identify-268"><a href="#MySQL.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="MySQL.Generator.can_identify-269"><a href="#MySQL.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator.can_identify-270"><a href="#MySQL.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.can_identify-256"><a href="#MySQL.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="MySQL.Generator.can_identify-257"><a href="#MySQL.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="MySQL.Generator.can_identify-258"><a href="#MySQL.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="MySQL.Generator.can_identify-259"><a href="#MySQL.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="MySQL.Generator.can_identify-260"><a href="#MySQL.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="MySQL.Generator.can_identify-261"><a href="#MySQL.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="MySQL.Generator.can_identify-262"><a href="#MySQL.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="MySQL.Generator.can_identify-263"><a href="#MySQL.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="MySQL.Generator.can_identify-264"><a href="#MySQL.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="MySQL.Generator.can_identify-265"><a href="#MySQL.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="MySQL.Generator.can_identify-266"><a href="#MySQL.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="MySQL.Generator.can_identify-267"><a href="#MySQL.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="MySQL.Generator.can_identify-268"><a href="#MySQL.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MySQL.Generator.can_identify-269"><a href="#MySQL.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator.can_identify-270"><a href="#MySQL.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="MySQL.Generator.can_identify-271"><a href="#MySQL.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="MySQL.Generator.can_identify-272"><a href="#MySQL.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="MySQL.Generator.can_identify-272"><a href="#MySQL.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator.can_identify-273"><a href="#MySQL.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="MySQL.Generator.can_identify-274"><a href="#MySQL.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="MySQL.Generator.can_identify-275"><a href="#MySQL.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -3299,26 +3499,14 @@ Default: True</li>
</div>
- <div id="MySQL.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#MySQL.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="MySQL.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="MySQL.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#MySQL.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#MySQL.Generator.TOKENIZER_CLASS"></a>
@@ -3417,6 +3605,8 @@ Default: True</li>
<dd id="MySQL.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="MySQL.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="MySQL.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="MySQL.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="MySQL.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="MySQL.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="MySQL.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="MySQL.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -3429,7 +3619,6 @@ Default: True</li>
<dd id="MySQL.Generator.INDEX_OFFSET" class="variable"><a href="../generator.html#Generator.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="MySQL.Generator.UNNEST_COLUMN_ONLY" class="variable"><a href="../generator.html#Generator.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="MySQL.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../generator.html#Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
- <dd id="MySQL.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../generator.html#Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="MySQL.Generator.STRICT_STRING_CONCAT" class="variable"><a href="../generator.html#Generator.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="MySQL.Generator.NORMALIZE_FUNCTIONS" class="variable"><a href="../generator.html#Generator.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="MySQL.Generator.NULL_ORDERING" class="variable"><a href="../generator.html#Generator.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -3463,6 +3652,7 @@ Default: True</li>
<dd id="MySQL.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="MySQL.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="MySQL.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="MySQL.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="MySQL.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="MySQL.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="MySQL.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -3481,7 +3671,7 @@ Default: True</li>
<dd id="MySQL.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="MySQL.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="MySQL.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="MySQL.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="MySQL.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="MySQL.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="MySQL.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="MySQL.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -3526,6 +3716,7 @@ Default: True</li>
<dd id="MySQL.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="MySQL.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="MySQL.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="MySQL.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="MySQL.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="MySQL.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="MySQL.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -3534,6 +3725,8 @@ Default: True</li>
<dd id="MySQL.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="MySQL.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="MySQL.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="MySQL.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="MySQL.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="MySQL.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="MySQL.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="MySQL.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -3689,6 +3882,8 @@ Default: True</li>
<dd id="MySQL.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="MySQL.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="MySQL.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="MySQL.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="MySQL.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/oracle.html b/docs/sqlglot/dialects/oracle.html
index 2cb0064..2d56b8c 100644
--- a/docs/sqlglot/dialects/oracle.html
+++ b/docs/sqlglot/dialects/oracle.html
@@ -58,6 +58,12 @@
<a class="variable" href="#Oracle.Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Oracle.Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Oracle.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Oracle.Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a>
</li>
<li>
@@ -139,10 +145,7 @@
<a class="variable" href="#Oracle.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Oracle.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Oracle.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Oracle.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Oracle.Generator.BIT_START">BIT_START</a>
@@ -278,7 +281,7 @@
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;REF&quot;</span><span class="p">)</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)))</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">)</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">passing</span><span class="o">=</span><span class="n">passing</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span> <span class="n">by_ref</span><span class="o">=</span><span class="n">by_ref</span><span class="p">)</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
@@ -334,106 +337,110 @@
</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="p">}</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">JOIN_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 class="n">TABLE_HINTS</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">COLUMN_JOIN_MARKS_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><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&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="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><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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;NCHAR&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">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&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">BINARY</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="n">exp</span><span 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-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="p">}</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><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">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-128"><a href="#L-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="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">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-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">Coalesce</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><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="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-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="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-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">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-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">KEYWORDS</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">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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</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-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="p">}</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="c1"># SELECT UNIQUE .. is old-style Oracle syntax for SELECT DISTINCT ..</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="c1"># Reference: https://stackoverflow.com/a/336455</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">DISTINCT_TOKENS</span> <span class="o">=</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="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</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">_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-86"><a href="#L-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="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
+</span><span id="L-88"><a href="#L-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="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="L-92"><a href="#L-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="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="L-94"><a href="#L-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="L-95"><a href="#L-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="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="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-98"><a href="#L-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="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="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-101"><a href="#L-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="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">return</span> <span class="kc">None</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">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-106"><a href="#L-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="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</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><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&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 class="n">TYPE_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="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-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">TINYINT</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">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;NCHAR&quot;</span><span class="p">,</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="p">}</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><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">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-132"><a href="#L-132"><span class="linenos">132</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-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="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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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="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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</span></a> <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">PROPERTIES_LOCATION</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</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-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><span id="L-154"><a href="#L-154"><span class="linenos">154</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-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;</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-156"><a href="#L-156"><span class="linenos">156</span></a>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">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-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="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-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">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-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">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-169"><a href="#L-169"><span class="linenos">169</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 class="s2">&quot;$&quot;</span><span class="p">,</span> <span class="s2">&quot;#&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="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</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-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="p">}</span>
</span></pre></div>
@@ -500,106 +507,110 @@
</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 class="p">}</span>
</span><span id="Oracle-81"><a href="#Oracle-81"><span class="linenos"> 81</span></a>
-</span><span id="Oracle-82"><a href="#Oracle-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Oracle-83"><a href="#Oracle-83"><span class="linenos"> 83</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Oracle-84"><a href="#Oracle-84"><span class="linenos"> 84</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
-</span><span id="Oracle-85"><a href="#Oracle-85"><span class="linenos"> 85</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
-</span><span id="Oracle-86"><a href="#Oracle-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="Oracle-87"><a href="#Oracle-87"><span class="linenos"> 87</span></a>
-</span><span id="Oracle-88"><a href="#Oracle-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="Oracle-89"><a href="#Oracle-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="Oracle-90"><a href="#Oracle-90"><span class="linenos"> 90</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="Oracle-91"><a href="#Oracle-91"><span class="linenos"> 91</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="Oracle-92"><a href="#Oracle-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Oracle-93"><a href="#Oracle-93"><span class="linenos"> 93</span></a>
-</span><span id="Oracle-94"><a href="#Oracle-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Oracle-95"><a href="#Oracle-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="Oracle-96"><a href="#Oracle-96"><span class="linenos"> 96</span></a>
-</span><span id="Oracle-97"><a href="#Oracle-97"><span class="linenos"> 97</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
-</span><span id="Oracle-98"><a href="#Oracle-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
-</span><span id="Oracle-99"><a href="#Oracle-99"><span class="linenos"> 99</span></a>
-</span><span id="Oracle-100"><a href="#Oracle-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Oracle-101"><a href="#Oracle-101"><span class="linenos">101</span></a>
-</span><span id="Oracle-102"><a href="#Oracle-102"><span class="linenos">102</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Oracle-103"><a href="#Oracle-103"><span class="linenos">103</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Oracle-104"><a href="#Oracle-104"><span class="linenos">104</span></a> <span class="n">JOIN_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 class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Oracle-106"><a href="#Oracle-106"><span class="linenos">106</span></a> <span class="n">COLUMN_JOIN_MARKS_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><span id="Oracle-108"><a href="#Oracle-108"><span class="linenos">108</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</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><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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;NCHAR&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">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&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">BINARY</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="n">exp</span><span 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-124"><a href="#Oracle-124"><span class="linenos">124</span></a> <span class="p">}</span>
-</span><span id="Oracle-125"><a href="#Oracle-125"><span class="linenos">125</span></a>
-</span><span id="Oracle-126"><a href="#Oracle-126"><span class="linenos">126</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-127"><a href="#Oracle-127"><span class="linenos">127</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><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">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-129"><a href="#Oracle-129"><span class="linenos">129</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-130"><a href="#Oracle-130"><span class="linenos">130</span></a> <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">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-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">Coalesce</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><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="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-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="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-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">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-167"><a href="#Oracle-167"><span class="linenos">167</span></a>
-</span><span id="Oracle-168"><a href="#Oracle-168"><span class="linenos">168</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-169"><a href="#Oracle-169"><span class="linenos">169</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-170"><a href="#Oracle-170"><span class="linenos">170</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-171"><a href="#Oracle-171"><span class="linenos">171</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-172"><a href="#Oracle-172"><span class="linenos">172</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-173"><a href="#Oracle-173"><span class="linenos">173</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-174"><a href="#Oracle-174"><span class="linenos">174</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-175"><a href="#Oracle-175"><span class="linenos">175</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-176"><a href="#Oracle-176"><span class="linenos">176</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-177"><a href="#Oracle-177"><span class="linenos">177</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-178"><a href="#Oracle-178"><span class="linenos">178</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-179"><a href="#Oracle-179"><span class="linenos">179</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-180"><a href="#Oracle-180"><span class="linenos">180</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-181"><a href="#Oracle-181"><span class="linenos">181</span></a> <span class="p">}</span>
+</span><span id="Oracle-82"><a href="#Oracle-82"><span class="linenos"> 82</span></a> <span class="c1"># SELECT UNIQUE .. is old-style Oracle syntax for SELECT DISTINCT ..</span>
+</span><span id="Oracle-83"><a href="#Oracle-83"><span class="linenos"> 83</span></a> <span class="c1"># Reference: https://stackoverflow.com/a/336455</span>
+</span><span id="Oracle-84"><a href="#Oracle-84"><span class="linenos"> 84</span></a> <span class="n">DISTINCT_TOKENS</span> <span class="o">=</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="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">}</span>
+</span><span id="Oracle-85"><a href="#Oracle-85"><span class="linenos"> 85</span></a>
+</span><span id="Oracle-86"><a href="#Oracle-86"><span class="linenos"> 86</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-87"><a href="#Oracle-87"><span class="linenos"> 87</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-88"><a href="#Oracle-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
+</span><span id="Oracle-89"><a href="#Oracle-89"><span class="linenos"> 89</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-90"><a href="#Oracle-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="Oracle-91"><a href="#Oracle-91"><span class="linenos"> 91</span></a>
+</span><span id="Oracle-92"><a href="#Oracle-92"><span class="linenos"> 92</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="Oracle-93"><a href="#Oracle-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-94"><a href="#Oracle-94"><span class="linenos"> 94</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-95"><a href="#Oracle-95"><span class="linenos"> 95</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-96"><a href="#Oracle-96"><span class="linenos"> 96</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Oracle-97"><a href="#Oracle-97"><span class="linenos"> 97</span></a>
+</span><span id="Oracle-98"><a href="#Oracle-98"><span class="linenos"> 98</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-99"><a href="#Oracle-99"><span class="linenos"> 99</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-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="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-102"><a href="#Oracle-102"><span class="linenos">102</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-103"><a href="#Oracle-103"><span class="linenos">103</span></a>
+</span><span id="Oracle-104"><a href="#Oracle-104"><span class="linenos">104</span></a> <span class="k">return</span> <span class="kc">None</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="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-107"><a href="#Oracle-107"><span class="linenos">107</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle-108"><a href="#Oracle-108"><span class="linenos">108</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle-109"><a href="#Oracle-109"><span class="linenos">109</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle-110"><a href="#Oracle-110"><span class="linenos">110</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle-111"><a href="#Oracle-111"><span class="linenos">111</span></a>
+</span><span id="Oracle-112"><a href="#Oracle-112"><span class="linenos">112</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="Oracle-113"><a href="#Oracle-113"><span class="linenos">113</span></a>
+</span><span id="Oracle-114"><a href="#Oracle-114"><span class="linenos">114</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-115"><a href="#Oracle-115"><span class="linenos">115</span></a> <span 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="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">TINYINT</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">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="Oracle-123"><a href="#Oracle-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-124"><a href="#Oracle-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;NCHAR&quot;</span><span class="p">,</span>
+</span><span id="Oracle-125"><a href="#Oracle-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-126"><a href="#Oracle-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle-127"><a href="#Oracle-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-128"><a href="#Oracle-128"><span class="linenos">128</span></a> <span class="p">}</span>
+</span><span id="Oracle-129"><a href="#Oracle-129"><span class="linenos">129</span></a>
+</span><span id="Oracle-130"><a href="#Oracle-130"><span class="linenos">130</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-131"><a href="#Oracle-131"><span class="linenos">131</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><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">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-133"><a href="#Oracle-133"><span class="linenos">133</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-134"><a href="#Oracle-134"><span class="linenos">134</span></a> <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">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-136"><a href="#Oracle-136"><span class="linenos">136</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-137"><a href="#Oracle-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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="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-139"><a href="#Oracle-139"><span class="linenos">139</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-140"><a href="#Oracle-140"><span class="linenos">140</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-141"><a href="#Oracle-141"><span class="linenos">141</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-142"><a href="#Oracle-142"><span class="linenos">142</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-143"><a href="#Oracle-143"><span class="linenos">143</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-144"><a href="#Oracle-144"><span class="linenos">144</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-145"><a href="#Oracle-145"><span class="linenos">145</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-146"><a href="#Oracle-146"><span class="linenos">146</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-147"><a href="#Oracle-147"><span class="linenos">147</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-148"><a href="#Oracle-148"><span class="linenos">148</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-151"><a href="#Oracle-151"><span class="linenos">151</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Oracle-152"><a href="#Oracle-152"><span class="linenos">152</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-153"><a href="#Oracle-153"><span class="linenos">153</span></a> <span class="p">}</span>
+</span><span id="Oracle-154"><a href="#Oracle-154"><span class="linenos">154</span></a>
+</span><span id="Oracle-155"><a href="#Oracle-155"><span class="linenos">155</span></a> <span class="k">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-156"><a href="#Oracle-156"><span class="linenos">156</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-157"><a href="#Oracle-157"><span class="linenos">157</span></a>
+</span><span id="Oracle-158"><a href="#Oracle-158"><span class="linenos">158</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-159"><a href="#Oracle-159"><span class="linenos">159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-160"><a href="#Oracle-160"><span class="linenos">160</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-161"><a href="#Oracle-161"><span class="linenos">161</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-162"><a href="#Oracle-162"><span class="linenos">162</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-163"><a href="#Oracle-163"><span class="linenos">163</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-164"><a href="#Oracle-164"><span class="linenos">164</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Oracle-165"><a href="#Oracle-165"><span class="linenos">165</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-166"><a href="#Oracle-166"><span class="linenos">166</span></a> <span class="p">)</span>
+</span><span id="Oracle-167"><a href="#Oracle-167"><span class="linenos">167</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-168"><a href="#Oracle-168"><span class="linenos">168</span></a>
+</span><span id="Oracle-169"><a href="#Oracle-169"><span class="linenos">169</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-170"><a href="#Oracle-170"><span class="linenos">170</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 class="s2">&quot;$&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">}</span>
+</span><span id="Oracle-171"><a href="#Oracle-171"><span class="linenos">171</span></a>
+</span><span id="Oracle-172"><a href="#Oracle-172"><span class="linenos">172</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-173"><a href="#Oracle-173"><span class="linenos">173</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-174"><a href="#Oracle-174"><span class="linenos">174</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-175"><a href="#Oracle-175"><span class="linenos">175</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-176"><a href="#Oracle-176"><span class="linenos">176</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-177"><a href="#Oracle-177"><span class="linenos">177</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-178"><a href="#Oracle-178"><span class="linenos">178</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-179"><a href="#Oracle-179"><span class="linenos">179</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-180"><a href="#Oracle-180"><span class="linenos">180</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-181"><a href="#Oracle-181"><span class="linenos">181</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-182"><a href="#Oracle-182"><span class="linenos">182</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-183"><a href="#Oracle-183"><span class="linenos">183</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-184"><a href="#Oracle-184"><span class="linenos">184</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-185"><a href="#Oracle-185"><span class="linenos">185</span></a> <span class="p">}</span>
</span></pre></div>
@@ -857,6 +868,7 @@
<dd id="Oracle.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Oracle.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Oracle.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Oracle.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Oracle.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Oracle.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Oracle.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -914,25 +926,29 @@
</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 class="p">}</span>
</span><span id="Oracle.Parser-81"><a href="#Oracle.Parser-81"><span class="linenos"> 81</span></a>
-</span><span id="Oracle.Parser-82"><a href="#Oracle.Parser-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Oracle.Parser-83"><a href="#Oracle.Parser-83"><span class="linenos"> 83</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Oracle.Parser-84"><a href="#Oracle.Parser-84"><span class="linenos"> 84</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
-</span><span id="Oracle.Parser-85"><a href="#Oracle.Parser-85"><span class="linenos"> 85</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
-</span><span id="Oracle.Parser-86"><a href="#Oracle.Parser-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="Oracle.Parser-87"><a href="#Oracle.Parser-87"><span class="linenos"> 87</span></a>
-</span><span id="Oracle.Parser-88"><a href="#Oracle.Parser-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="Oracle.Parser-90"><a href="#Oracle.Parser-90"><span class="linenos"> 90</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="Oracle.Parser-91"><a href="#Oracle.Parser-91"><span class="linenos"> 91</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="Oracle.Parser-92"><a href="#Oracle.Parser-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Oracle.Parser-93"><a href="#Oracle.Parser-93"><span class="linenos"> 93</span></a>
-</span><span id="Oracle.Parser-94"><a href="#Oracle.Parser-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Oracle.Parser-95"><a href="#Oracle.Parser-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Parser-96"><a href="#Oracle.Parser-96"><span class="linenos"> 96</span></a>
-</span><span id="Oracle.Parser-97"><a href="#Oracle.Parser-97"><span class="linenos"> 97</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
-</span><span id="Oracle.Parser-98"><a href="#Oracle.Parser-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
-</span><span id="Oracle.Parser-99"><a href="#Oracle.Parser-99"><span class="linenos"> 99</span></a>
-</span><span id="Oracle.Parser-100"><a href="#Oracle.Parser-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Oracle.Parser-82"><a href="#Oracle.Parser-82"><span class="linenos"> 82</span></a> <span class="c1"># SELECT UNIQUE .. is old-style Oracle syntax for SELECT DISTINCT ..</span>
+</span><span id="Oracle.Parser-83"><a href="#Oracle.Parser-83"><span class="linenos"> 83</span></a> <span class="c1"># Reference: https://stackoverflow.com/a/336455</span>
+</span><span id="Oracle.Parser-84"><a href="#Oracle.Parser-84"><span class="linenos"> 84</span></a> <span class="n">DISTINCT_TOKENS</span> <span class="o">=</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="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">}</span>
+</span><span id="Oracle.Parser-85"><a href="#Oracle.Parser-85"><span class="linenos"> 85</span></a>
+</span><span id="Oracle.Parser-86"><a href="#Oracle.Parser-86"><span class="linenos"> 86</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-87"><a href="#Oracle.Parser-87"><span class="linenos"> 87</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-88"><a href="#Oracle.Parser-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="n">column</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">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-90"><a href="#Oracle.Parser-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="Oracle.Parser-91"><a href="#Oracle.Parser-91"><span class="linenos"> 91</span></a>
+</span><span id="Oracle.Parser-92"><a href="#Oracle.Parser-92"><span class="linenos"> 92</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="Oracle.Parser-93"><a href="#Oracle.Parser-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-94"><a href="#Oracle.Parser-94"><span class="linenos"> 94</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-95"><a href="#Oracle.Parser-95"><span class="linenos"> 95</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-96"><a href="#Oracle.Parser-96"><span class="linenos"> 96</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-97"><a href="#Oracle.Parser-97"><span class="linenos"> 97</span></a>
+</span><span id="Oracle.Parser-98"><a href="#Oracle.Parser-98"><span class="linenos"> 98</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-99"><a href="#Oracle.Parser-99"><span class="linenos"> 99</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-100"><a href="#Oracle.Parser-100"><span class="linenos">100</span></a>
+</span><span id="Oracle.Parser-101"><a href="#Oracle.Parser-101"><span class="linenos">101</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-102"><a href="#Oracle.Parser-102"><span class="linenos">102</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-103"><a href="#Oracle.Parser-103"><span class="linenos">103</span></a>
+</span><span id="Oracle.Parser-104"><a href="#Oracle.Parser-104"><span class="linenos">104</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -956,7 +972,7 @@ Default: 3</li>
<div id="Oracle.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">WINDOW_BEFORE_PAREN_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.OVER: &#39;OVER&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.OVER: &#39;OVER&#39;&gt;}</span>
</div>
@@ -969,7 +985,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Oracle.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Oracle.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;SQUARE&#39;: &lt;function <a href="#Oracle.Parser">Oracle.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Oracle.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;SQUARE&#39;: &lt;function <a href="#Oracle.Parser">Oracle.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1003,6 +1019,30 @@ Default: 3</li>
</div>
+ <div id="Oracle.Parser.DISTINCT_TOKENS" class="classattr">
+ <div class="attr variable">
+ <span class="name">DISTINCT_TOKENS</span> =
+<span class="default_value">{&lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Oracle.Parser.DISTINCT_TOKENS"></a>
+
+
+
+ </div>
+ <div id="Oracle.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Oracle.Tokenizer">sqlglot.dialects.oracle.Oracle.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Oracle.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Oracle.Parser.ALIAS_POST_TABLESAMPLE" class="classattr">
<div class="attr variable">
<span class="name">ALIAS_POST_TABLESAMPLE</span><span class="annotation">: bool</span> =
@@ -1084,6 +1124,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Oracle.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Oracle.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Oracle.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Oracle.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Oracle.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Oracle.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1104,6 +1145,7 @@ Default: 3</li>
<dd id="Oracle.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Oracle.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Oracle.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Oracle.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Oracle.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Oracle.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Oracle.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1123,6 +1165,7 @@ Default: 3</li>
<dd id="Oracle.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Oracle.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Oracle.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Oracle.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Oracle.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Oracle.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Oracle.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1144,6 +1187,8 @@ Default: 3</li>
<dd id="Oracle.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Oracle.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Oracle.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Oracle.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="Oracle.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Oracle.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Oracle.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Oracle.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -1178,68 +1223,68 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Oracle.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator-102"><a href="#Oracle.Generator-102"><span class="linenos">102</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Oracle.Generator-103"><a href="#Oracle.Generator-103"><span class="linenos">103</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Oracle.Generator-104"><a href="#Oracle.Generator-104"><span class="linenos">104</span></a> <span class="n">JOIN_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 class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Oracle.Generator-106"><a href="#Oracle.Generator-106"><span class="linenos">106</span></a> <span class="n">COLUMN_JOIN_MARKS_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><span id="Oracle.Generator-108"><a href="#Oracle.Generator-108"><span class="linenos">108</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</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><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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;NCHAR&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">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&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">BINARY</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="n">exp</span><span 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-124"><a href="#Oracle.Generator-124"><span class="linenos">124</span></a> <span class="p">}</span>
-</span><span id="Oracle.Generator-125"><a href="#Oracle.Generator-125"><span class="linenos">125</span></a>
-</span><span id="Oracle.Generator-126"><a href="#Oracle.Generator-126"><span class="linenos">126</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Generator-127"><a href="#Oracle.Generator-127"><span class="linenos">127</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><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">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-129"><a href="#Oracle.Generator-129"><span class="linenos">129</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-130"><a href="#Oracle.Generator-130"><span class="linenos">130</span></a> <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">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-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">Coalesce</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><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="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-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="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-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-106"><a href="#Oracle.Generator-106"><span class="linenos">106</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Oracle.Generator-107"><a href="#Oracle.Generator-107"><span class="linenos">107</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle.Generator-108"><a href="#Oracle.Generator-108"><span class="linenos">108</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle.Generator-109"><a href="#Oracle.Generator-109"><span class="linenos">109</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle.Generator-110"><a href="#Oracle.Generator-110"><span class="linenos">110</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle.Generator-111"><a href="#Oracle.Generator-111"><span class="linenos">111</span></a>
+</span><span id="Oracle.Generator-112"><a href="#Oracle.Generator-112"><span class="linenos">112</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="Oracle.Generator-113"><a href="#Oracle.Generator-113"><span class="linenos">113</span></a>
+</span><span id="Oracle.Generator-114"><a href="#Oracle.Generator-114"><span class="linenos">114</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Generator-115"><a href="#Oracle.Generator-115"><span class="linenos">115</span></a> <span 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="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">TINYINT</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">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&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">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&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="n">exp</span><span 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-124"><a href="#Oracle.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;NCHAR&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-125"><a href="#Oracle.Generator-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-126"><a href="#Oracle.Generator-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-127"><a href="#Oracle.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-128"><a href="#Oracle.Generator-128"><span class="linenos">128</span></a> <span class="p">}</span>
+</span><span id="Oracle.Generator-129"><a href="#Oracle.Generator-129"><span class="linenos">129</span></a>
+</span><span id="Oracle.Generator-130"><a href="#Oracle.Generator-130"><span class="linenos">130</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Generator-131"><a href="#Oracle.Generator-131"><span class="linenos">131</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><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">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-133"><a href="#Oracle.Generator-133"><span class="linenos">133</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-134"><a href="#Oracle.Generator-134"><span class="linenos">134</span></a> <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">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-136"><a href="#Oracle.Generator-136"><span class="linenos">136</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-137"><a href="#Oracle.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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="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-139"><a href="#Oracle.Generator-139"><span class="linenos">139</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-140"><a href="#Oracle.Generator-140"><span class="linenos">140</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-141"><a href="#Oracle.Generator-141"><span class="linenos">141</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-142"><a href="#Oracle.Generator-142"><span class="linenos">142</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-143"><a href="#Oracle.Generator-143"><span class="linenos">143</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-144"><a href="#Oracle.Generator-144"><span class="linenos">144</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-145"><a href="#Oracle.Generator-145"><span class="linenos">145</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-146"><a href="#Oracle.Generator-146"><span class="linenos">146</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-147"><a href="#Oracle.Generator-147"><span class="linenos">147</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-148"><a href="#Oracle.Generator-148"><span class="linenos">148</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Generator-151"><a href="#Oracle.Generator-151"><span class="linenos">151</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Oracle.Generator-152"><a href="#Oracle.Generator-152"><span class="linenos">152</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-153"><a href="#Oracle.Generator-153"><span class="linenos">153</span></a> <span class="p">}</span>
+</span><span id="Oracle.Generator-154"><a href="#Oracle.Generator-154"><span class="linenos">154</span></a>
+</span><span id="Oracle.Generator-155"><a href="#Oracle.Generator-155"><span class="linenos">155</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-156"><a href="#Oracle.Generator-156"><span class="linenos">156</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-157"><a href="#Oracle.Generator-157"><span class="linenos">157</span></a>
+</span><span id="Oracle.Generator-158"><a href="#Oracle.Generator-158"><span class="linenos">158</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-159"><a href="#Oracle.Generator-159"><span class="linenos">159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-160"><a href="#Oracle.Generator-160"><span class="linenos">160</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-161"><a href="#Oracle.Generator-161"><span class="linenos">161</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-162"><a href="#Oracle.Generator-162"><span class="linenos">162</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-163"><a href="#Oracle.Generator-163"><span class="linenos">163</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-164"><a href="#Oracle.Generator-164"><span class="linenos">164</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Oracle.Generator-165"><a href="#Oracle.Generator-165"><span class="linenos">165</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-166"><a href="#Oracle.Generator-166"><span class="linenos">166</span></a> <span class="p">)</span>
+</span><span id="Oracle.Generator-167"><a href="#Oracle.Generator-167"><span class="linenos">167</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>
@@ -1359,7 +1404,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Oracle.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Oracle.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Subquery">sqlglot.expressions.Subquery</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Oracle.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Subquery">sqlglot.expressions.Subquery</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function <a href="#Oracle.Generator">Oracle.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1372,7 +1417,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Oracle.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Oracle.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Oracle.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1392,8 +1437,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-151"><a href="#Oracle.Generator.offset_sql-151"><span class="linenos">151</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-152"><a href="#Oracle.Generator.offset_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="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-155"><a href="#Oracle.Generator.offset_sql-155"><span class="linenos">155</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-156"><a href="#Oracle.Generator.offset_sql-156"><span class="linenos">156</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>
@@ -1411,16 +1456,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-158"><a href="#Oracle.Generator.xmltable_sql-158"><span class="linenos">158</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-159"><a href="#Oracle.Generator.xmltable_sql-159"><span class="linenos">159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-160"><a href="#Oracle.Generator.xmltable_sql-160"><span class="linenos">160</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-161"><a href="#Oracle.Generator.xmltable_sql-161"><span class="linenos">161</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-162"><a href="#Oracle.Generator.xmltable_sql-162"><span class="linenos">162</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-163"><a href="#Oracle.Generator.xmltable_sql-163"><span class="linenos">163</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-164"><a href="#Oracle.Generator.xmltable_sql-164"><span class="linenos">164</span></a> <span class="n">by_ref</span> <span class="o">=</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="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-166"><a href="#Oracle.Generator.xmltable_sql-166"><span class="linenos">166</span></a> <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="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>
@@ -1489,26 +1534,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.can_identify-253"><a href="#Oracle.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Oracle.Generator.can_identify-254"><a href="#Oracle.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Oracle.Generator.can_identify-255"><a href="#Oracle.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Oracle.Generator.can_identify-256"><a href="#Oracle.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Oracle.Generator.can_identify-257"><a href="#Oracle.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Oracle.Generator.can_identify-258"><a href="#Oracle.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Oracle.Generator.can_identify-259"><a href="#Oracle.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Oracle.Generator.can_identify-260"><a href="#Oracle.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Oracle.Generator.can_identify-261"><a href="#Oracle.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Oracle.Generator.can_identify-262"><a href="#Oracle.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Oracle.Generator.can_identify-263"><a href="#Oracle.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Oracle.Generator.can_identify-264"><a href="#Oracle.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Oracle.Generator.can_identify-265"><a href="#Oracle.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Oracle.Generator.can_identify-266"><a href="#Oracle.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Oracle.Generator.can_identify-267"><a href="#Oracle.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Oracle.Generator.can_identify-268"><a href="#Oracle.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Oracle.Generator.can_identify-269"><a href="#Oracle.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Oracle.Generator.can_identify-270"><a href="#Oracle.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.can_identify-256"><a href="#Oracle.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Oracle.Generator.can_identify-257"><a href="#Oracle.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Oracle.Generator.can_identify-258"><a href="#Oracle.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Oracle.Generator.can_identify-259"><a href="#Oracle.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Oracle.Generator.can_identify-260"><a href="#Oracle.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Oracle.Generator.can_identify-261"><a href="#Oracle.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Oracle.Generator.can_identify-262"><a href="#Oracle.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Oracle.Generator.can_identify-263"><a href="#Oracle.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Oracle.Generator.can_identify-264"><a href="#Oracle.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Oracle.Generator.can_identify-265"><a href="#Oracle.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Oracle.Generator.can_identify-266"><a href="#Oracle.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Oracle.Generator.can_identify-267"><a href="#Oracle.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Oracle.Generator.can_identify-268"><a href="#Oracle.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Oracle.Generator.can_identify-269"><a href="#Oracle.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Oracle.Generator.can_identify-270"><a href="#Oracle.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Oracle.Generator.can_identify-271"><a href="#Oracle.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Oracle.Generator.can_identify-272"><a href="#Oracle.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Oracle.Generator.can_identify-272"><a href="#Oracle.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Oracle.Generator.can_identify-273"><a href="#Oracle.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Oracle.Generator.can_identify-274"><a href="#Oracle.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Oracle.Generator.can_identify-275"><a href="#Oracle.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1579,26 +1624,14 @@ Default: True</li>
</div>
- <div id="Oracle.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Oracle.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Oracle.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Oracle.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Oracle.Tokenizer">sqlglot.dialects.oracle.Oracle.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Oracle.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Oracle.Generator.TOKENIZER_CLASS"></a>
@@ -1699,7 +1732,10 @@ Default: True</li>
<dd id="Oracle.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
<dd id="Oracle.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Oracle.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Oracle.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Oracle.Generator.NVL2_SUPPORTED" class="variable"><a href="../generator.html#Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Oracle.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Oracle.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Oracle.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Oracle.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Oracle.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1745,6 +1781,7 @@ Default: True</li>
<dd id="Oracle.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Oracle.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Oracle.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Oracle.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Oracle.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Oracle.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Oracle.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1763,7 +1800,7 @@ Default: True</li>
<dd id="Oracle.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Oracle.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Oracle.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Oracle.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Oracle.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Oracle.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Oracle.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Oracle.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -1808,6 +1845,7 @@ Default: True</li>
<dd id="Oracle.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Oracle.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Oracle.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Oracle.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Oracle.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Oracle.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Oracle.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -1816,6 +1854,8 @@ Default: True</li>
<dd id="Oracle.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Oracle.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Oracle.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Oracle.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Oracle.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Oracle.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Oracle.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Oracle.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1974,6 +2014,8 @@ Default: True</li>
<dd id="Oracle.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Oracle.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Oracle.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Oracle.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Oracle.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
@@ -1990,23 +2032,23 @@ 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">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-167"><a href="#Oracle.Tokenizer-167"><span class="linenos">167</span></a>
-</span><span id="Oracle.Tokenizer-168"><a href="#Oracle.Tokenizer-168"><span class="linenos">168</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Tokenizer-169"><a href="#Oracle.Tokenizer-169"><span class="linenos">169</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-170"><a href="#Oracle.Tokenizer-170"><span class="linenos">170</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-171"><a href="#Oracle.Tokenizer-171"><span class="linenos">171</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-172"><a href="#Oracle.Tokenizer-172"><span class="linenos">172</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-173"><a href="#Oracle.Tokenizer-173"><span class="linenos">173</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-174"><a href="#Oracle.Tokenizer-174"><span class="linenos">174</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-175"><a href="#Oracle.Tokenizer-175"><span class="linenos">175</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-176"><a href="#Oracle.Tokenizer-176"><span class="linenos">176</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-177"><a href="#Oracle.Tokenizer-177"><span class="linenos">177</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-178"><a href="#Oracle.Tokenizer-178"><span class="linenos">178</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-179"><a href="#Oracle.Tokenizer-179"><span class="linenos">179</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-180"><a href="#Oracle.Tokenizer-180"><span class="linenos">180</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-181"><a href="#Oracle.Tokenizer-181"><span class="linenos">181</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Tokenizer-169"><a href="#Oracle.Tokenizer-169"><span class="linenos">169</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-170"><a href="#Oracle.Tokenizer-170"><span class="linenos">170</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 class="s2">&quot;$&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">}</span>
+</span><span id="Oracle.Tokenizer-171"><a href="#Oracle.Tokenizer-171"><span class="linenos">171</span></a>
+</span><span id="Oracle.Tokenizer-172"><a href="#Oracle.Tokenizer-172"><span class="linenos">172</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Tokenizer-173"><a href="#Oracle.Tokenizer-173"><span class="linenos">173</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-174"><a href="#Oracle.Tokenizer-174"><span class="linenos">174</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-175"><a href="#Oracle.Tokenizer-175"><span class="linenos">175</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-176"><a href="#Oracle.Tokenizer-176"><span class="linenos">176</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-177"><a href="#Oracle.Tokenizer-177"><span class="linenos">177</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-178"><a href="#Oracle.Tokenizer-178"><span class="linenos">178</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-179"><a href="#Oracle.Tokenizer-179"><span class="linenos">179</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-180"><a href="#Oracle.Tokenizer-180"><span class="linenos">180</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-181"><a href="#Oracle.Tokenizer-181"><span class="linenos">181</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-182"><a href="#Oracle.Tokenizer-182"><span class="linenos">182</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-183"><a href="#Oracle.Tokenizer-183"><span class="linenos">183</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-184"><a href="#Oracle.Tokenizer-184"><span class="linenos">184</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-185"><a href="#Oracle.Tokenizer-185"><span class="linenos">185</span></a> <span class="p">}</span>
</span></pre></div>
@@ -2015,7 +2057,7 @@ Default: True</li>
<div id="Oracle.Tokenizer.VAR_SINGLE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">VAR_SINGLE_TOKENS</span> =
-<span class="default_value">{&#39;@&#39;}</span>
+<span class="default_value">{&#39;#&#39;, &#39;@&#39;, &#39;$&#39;}</span>
</div>
@@ -2028,7 +2070,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Oracle.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Oracle.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;(+)&#39;: &lt;TokenType.JOIN_MARKER: &#39;JOIN_MARKER&#39;&gt;, &#39;BINARY_DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;BINARY_FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;COLUMNS&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;MATCH_RECOGNIZE&#39;: &lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;, &#39;MINUS&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;SAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;START&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Oracle.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;(+)&#39;: &lt;TokenType.JOIN_MARKER: &#39;JOIN_MARKER&#39;&gt;, &#39;BINARY_DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;BINARY_FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;COLUMNS&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;MATCH_RECOGNIZE&#39;: &lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;, &#39;MINUS&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;SAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;START&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;}</span>
</div>
diff --git a/docs/sqlglot/dialects/postgres.html b/docs/sqlglot/dialects/postgres.html
index 36086fd..48bde5b 100644
--- a/docs/sqlglot/dialects/postgres.html
+++ b/docs/sqlglot/dialects/postgres.html
@@ -100,6 +100,9 @@
<a class="variable" href="#Postgres.Parser.STATEMENT_PARSERS">STATEMENT_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Postgres.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Postgres.Parser.INDEX_OFFSET">INDEX_OFFSET</a>
</li>
<li>
@@ -142,6 +145,9 @@
<a class="variable" href="#Postgres.Generator.QUERY_HINTS">QUERY_HINTS</a>
</li>
<li>
+ <a class="variable" href="#Postgres.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#Postgres.Generator.PARAMETER_TOKEN">PARAMETER_TOKEN</a>
</li>
<li>
@@ -157,6 +163,9 @@
<a class="function" href="#Postgres.Generator.bracket_sql">bracket_sql</a>
</li>
<li>
+ <a class="function" href="#Postgres.Generator.matchagainst_sql">matchagainst_sql</a>
+ </li>
+ <li>
<a class="variable" href="#Postgres.Generator.SELECT_KINDS">SELECT_KINDS</a>
</li>
<li>
@@ -187,10 +196,7 @@
<a class="variable" href="#Postgres.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Postgres.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Postgres.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Postgres.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Postgres.Generator.BIT_START">BIT_START</a>
@@ -297,418 +303,431 @@
</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">arrow_json_extract_scalar_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_sql</span><span class="p">,</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">format_time_lambda</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">no_map_from_entries_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_paren_current_date_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_pivot_sql</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">simplify_literal</span><span class="p">,</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="p">)</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</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-28"><a href="#L-28"><span class="linenos"> 28</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-29"><a href="#L-29"><span class="linenos"> 29</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-30"><a href="#L-30"><span class="linenos"> 30</span></a>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="n">DATE_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000000&quot;</span><span class="p">,</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</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-34"><a href="#L-34"><span class="linenos"> 34</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-35"><a href="#L-35"><span class="linenos"> 35</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-36"><a href="#L-36"><span class="linenos"> 36</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-37"><a href="#L-37"><span class="linenos"> 37</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-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><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">],</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="k">def</span> <span class="nf">func</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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</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-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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="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-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="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</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-50"><a href="#L-50"><span class="linenos"> 50</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-51"><a href="#L-51"><span class="linenos"> 51</span></a>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">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-53"><a href="#L-53"><span class="linenos"> 53</span></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-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="n">func</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">any_value_to_max_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">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">no_map_from_entries_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_paren_current_date_sql</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">simplify_literal</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="p">)</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</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-30"><a href="#L-30"><span class="linenos"> 30</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-31"><a href="#L-31"><span class="linenos"> 31</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-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="n">DATE_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000000&quot;</span><span class="p">,</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</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-36"><a href="#L-36"><span class="linenos"> 36</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-37"><a href="#L-37"><span class="linenos"> 37</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-38"><a href="#L-38"><span class="linenos"> 38</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-39"><a href="#L-39"><span class="linenos"> 39</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-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="p">}</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</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">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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</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><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="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-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="n">expression</span> <span class="o">=</span> <span class="n">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</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-53"><a href="#L-53"><span class="linenos"> 53</span></a>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">expression</span><span class="o">.</span><span class="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-55"><a href="#L-55"><span class="linenos"> 55</span></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-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><span id="L-58"><a href="#L-58"><span class="linenos"> 58</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">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">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</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-60"><a href="#L-60"><span class="linenos"> 60</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-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">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-63"><a href="#L-63"><span class="linenos"> 63</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-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">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-66"><a href="#L-66"><span class="linenos"> 66</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-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">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-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">return</span> <span class="n">func</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">_date_diff_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">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">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-62"><a href="#L-62"><span class="linenos"> 62</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-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">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-65"><a href="#L-65"><span class="linenos"> 65</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-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">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-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</span></a>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">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-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">) * 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-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</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-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</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-76"><a href="#L-76"><span class="linenos"> 76</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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">age</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</span></a>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;WEEK&quot;</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="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-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</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-76"><a href="#L-76"><span class="linenos"> 76</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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">age</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">_substring_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">Substring</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</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">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-87"><a href="#L-87"><span class="linenos"> 87</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-88"><a href="#L-88"><span class="linenos"> 88</span></a>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="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-90"><a href="#L-90"><span class="linenos"> 90</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-91"><a href="#L-91"><span class="linenos"> 91</span></a>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="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-83"><a href="#L-83"><span class="linenos"> 83</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-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><span id="L-86"><a href="#L-86"><span class="linenos"> 86</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">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">Substring</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</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">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-89"><a href="#L-89"><span class="linenos"> 89</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-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">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-92"><a href="#L-92"><span class="linenos"> 92</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-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">_string_agg_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">GroupConcat</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="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-97"><a href="#L-97"><span class="linenos"> 97</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-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">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">expression</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">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-102"><a href="#L-102"><span class="linenos">102</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-103"><a href="#L-103"><span class="linenos">103</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-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</span></a>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="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-94"><a href="#L-94"><span class="linenos"> 94</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-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 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">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">GroupConcat</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="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-99"><a href="#L-99"><span class="linenos"> 99</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-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="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="n">expression</span><span class="o">.</span><span class="n">this</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">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-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</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-106"><a href="#L-106"><span class="linenos">106</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-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 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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
-</span><span id="L-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;</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-112"><a href="#L-112"><span class="linenos">112</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-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><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="k">def</span> <span class="nf">_auto_increment_to_serial</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</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-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">auto</span><span class="p">:</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</span></a>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="n">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-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGSERIAL</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">return</span> <span class="n">expression</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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-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">_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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="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-114"><a href="#L-114"><span class="linenos">114</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-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">_auto_increment_to_serial</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</span></a>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">auto</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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-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">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-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">))</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGSERIAL</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><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="k">def</span> <span class="nf">_serial_to_generated</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</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-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="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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</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="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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</span></a>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">if</span> <span class="n">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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</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-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">expression</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a><span class="k">def</span> <span class="nf">_serial_to_generated</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-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="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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="n">data_type</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="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-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">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-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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-157"><a href="#L-157"><span class="linenos">157</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-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><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="k">def</span> <span class="nf">_generate_series</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-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">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-165"><a href="#L-165"><span class="linenos">165</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-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 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-169"><a href="#L-169"><span class="linenos">169</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-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">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-171"><a href="#L-171"><span class="linenos">171</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-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">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-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">expression</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">_generate_series</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-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">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-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</span></a>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">step</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-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><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="k">def</span> <span class="nf">_to_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="c1"># TO_TIMESTAMP accepts either a single double argument or (text, text)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</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-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"># https://www.postgresql.org/docs/current/functions-formatting.html</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</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-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">_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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-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">normalize</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">identifier</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</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-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 class="k">def</span> <span class="nf">_to_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="c1"># TO_TIMESTAMP accepts either a single double argument or (text, text)</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">1</span><span class="p">:</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</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-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="c1"># https://www.postgresql.org/docs/current/functions-formatting.html</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</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-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><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</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-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">targets</span> <span class="o">=</span> <span class="p">{</span><span class="n">normalize</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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">identifier</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span><span class="o">.</span><span class="n">name</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">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">normalize</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-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="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-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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">normalize</span><span class="p">(</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-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</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><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">targets</span> <span class="o">=</span> <span class="p">{</span><span class="n">normalize</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-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">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">normalize</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-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">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-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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">normalize</span><span class="p">(</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-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</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><span id="L-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># 1-based day of week</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># zero padded day of year</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;FMDD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># - is no leading zero for Python; same for FM in postgres</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">&quot;FMDDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span> <span class="c1"># day of year</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">&quot;FMHH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;FMHH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;FMMI&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span> <span class="c1"># Minute</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;FMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span> <span class="c1"># 1</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;FMSS&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span> <span class="c1"># Second</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># zero padded minute</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># 01</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;OF&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><span class="p">,</span> <span class="c1"># utc offset</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># zero padded second</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;TMDay&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># TM is locale dependent</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;TMDy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;TMMon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Sep</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;TMMonth&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># September</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;TZ&quot;</span><span class="p">:</span> <span class="s2">&quot;%Z&quot;</span><span class="p">,</span> <span class="c1"># uppercase timezone name</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">&quot;US&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># zero padded microsecond</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%U&quot;</span><span class="p">,</span> <span class="c1"># 1-based week of year</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">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-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">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-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;BEGIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;DO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</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-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</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-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</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-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">SINGLE_TOKENS</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">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-279"><a href="#L-279"><span class="linenos">279</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-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">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-283"><a href="#L-283"><span class="linenos">283</span></a>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="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-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</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-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">TIME_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="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&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;</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-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</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-242"><a href="#L-242"><span class="linenos">242</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-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="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-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">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-249"><a href="#L-249"><span class="linenos">249</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-250"><a href="#L-250"><span class="linenos">250</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-251"><a href="#L-251"><span class="linenos">251</span></a>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="o">**</span><span class="n">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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</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-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</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-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</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-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">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="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-282"><a href="#L-282"><span class="linenos">282</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-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="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-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="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</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_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-290"><a href="#L-290"><span class="linenos">290</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-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 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-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="p">}</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;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-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><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</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">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-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="p">}</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="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-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="p">}</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="p">}</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</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">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-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><span id="L-325"><a href="#L-325"><span class="linenos">325</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-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">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</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-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">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-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">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="k">def</span> <span class="nf">_parse_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-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="bp">self</span><span 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-334"><a href="#L-334"><span class="linenos">334</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-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">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-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&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="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span 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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">exp</span><span 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-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span 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-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">exp</span><span 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-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">exp</span><span 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-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">exp</span><span 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-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">exp</span><span 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-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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="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-361"><a href="#L-361"><span class="linenos">361</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-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</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-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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-370"><a href="#L-370"><span class="linenos">370</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-371"><a href="#L-371"><span class="linenos">371</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-372"><a href="#L-372"><span class="linenos">372</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-373"><a href="#L-373"><span class="linenos">373</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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</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-376"><a href="#L-376"><span class="linenos">376</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-377"><a href="#L-377"><span class="linenos">377</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-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</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-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</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-384"><a href="#L-384"><span class="linenos">384</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">_remove_target_from_merge</span><span class="p">]),</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-387"><a href="#L-387"><span class="linenos">387</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-388"><a href="#L-388"><span class="linenos">388</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-389"><a href="#L-389"><span class="linenos">389</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-390"><a href="#L-390"><span class="linenos">390</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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</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-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</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-397"><a href="#L-397"><span class="linenos">397</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-398"><a href="#L-398"><span class="linenos">398</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;postgres&quot;</span><span class="p">),</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</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">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-403"><a href="#L-403"><span class="linenos">403</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-404"><a href="#L-404"><span class="linenos">404</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-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><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</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">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-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="p">}</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="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-414"><a href="#L-414"><span class="linenos">414</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</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-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-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">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</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-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-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><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="o">**</span><span class="n">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-302"><a href="#L-302"><span class="linenos">302</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-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><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</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">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-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="p">}</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="n">EXPONENT</span> <span class="o">=</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">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-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="p">}</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</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">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-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
+</span><span id="L-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">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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="p">}</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</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">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-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="p">}</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="k">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-330"><a href="#L-330"><span class="linenos">330</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_exponent</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-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">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-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">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="L-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">_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-336"><a href="#L-336"><span class="linenos">336</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-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="bp">self</span><span 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-338"><a href="#L-338"><span class="linenos">338</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-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">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-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="bp">self</span><span 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-344"><a href="#L-344"><span class="linenos">344</span></a>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">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-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span 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-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">exp</span><span 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-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="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-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="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-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="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-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">exp</span><span 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-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">exp</span><span 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-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">TRANSFORMS</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">TRANSFORMS</span><span class="p">,</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</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-371"><a href="#L-371"><span class="linenos">371</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-372"><a href="#L-372"><span class="linenos">372</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-373"><a href="#L-373"><span class="linenos">373</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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</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-376"><a href="#L-376"><span class="linenos">376</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-377"><a href="#L-377"><span class="linenos">377</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-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</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-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</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-384"><a href="#L-384"><span class="linenos">384</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-385"><a href="#L-385"><span class="linenos">385</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-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</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-388"><a href="#L-388"><span class="linenos">388</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-389"><a href="#L-389"><span class="linenos">389</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-390"><a href="#L-390"><span class="linenos">390</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-391"><a href="#L-391"><span class="linenos">391</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">_remove_target_from_merge</span><span class="p">]),</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</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-397"><a href="#L-397"><span class="linenos">397</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-398"><a href="#L-398"><span class="linenos">398</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-399"><a href="#L-399"><span class="linenos">399</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-400"><a href="#L-400"><span class="linenos">400</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-401"><a href="#L-401"><span class="linenos">401</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-402"><a href="#L-402"><span class="linenos">402</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-403"><a href="#L-403"><span class="linenos">403</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-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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;postgres&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">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-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_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">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_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">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-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span 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">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-417"><a href="#L-417"><span class="linenos">417</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-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="p">}</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</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-421"><a href="#L-421"><span class="linenos">421</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="L-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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">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-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -737,217 +756,228 @@
</div>
<a class="headerlink" href="#Postgres"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres-210"><a href="#Postgres-210"><span class="linenos">210</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-211"><a href="#Postgres-211"><span class="linenos">211</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Postgres-212"><a href="#Postgres-212"><span class="linenos">212</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-213"><a href="#Postgres-213"><span class="linenos">213</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-214"><a href="#Postgres-214"><span class="linenos">214</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-215"><a href="#Postgres-215"><span class="linenos">215</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-216"><a href="#Postgres-216"><span class="linenos">216</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-217"><a href="#Postgres-217"><span class="linenos">217</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-218"><a href="#Postgres-218"><span class="linenos">218</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-219"><a href="#Postgres-219"><span class="linenos">219</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-220"><a href="#Postgres-220"><span class="linenos">220</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-221"><a href="#Postgres-221"><span class="linenos">221</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-222"><a href="#Postgres-222"><span class="linenos">222</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-223"><a href="#Postgres-223"><span class="linenos">223</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-224"><a href="#Postgres-224"><span class="linenos">224</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-225"><a href="#Postgres-225"><span class="linenos">225</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-226"><a href="#Postgres-226"><span class="linenos">226</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-227"><a href="#Postgres-227"><span class="linenos">227</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-228"><a href="#Postgres-228"><span class="linenos">228</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-229"><a href="#Postgres-229"><span class="linenos">229</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-230"><a href="#Postgres-230"><span class="linenos">230</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-231"><a href="#Postgres-231"><span class="linenos">231</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-232"><a href="#Postgres-232"><span class="linenos">232</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-233"><a href="#Postgres-233"><span class="linenos">233</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-234"><a href="#Postgres-234"><span class="linenos">234</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-235"><a href="#Postgres-235"><span class="linenos">235</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-236"><a href="#Postgres-236"><span class="linenos">236</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-237"><a href="#Postgres-237"><span class="linenos">237</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-238"><a href="#Postgres-238"><span class="linenos">238</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-239"><a href="#Postgres-239"><span class="linenos">239</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-240"><a href="#Postgres-240"><span class="linenos">240</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-241"><a href="#Postgres-241"><span class="linenos">241</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-242"><a href="#Postgres-242"><span class="linenos">242</span></a> <span class="p">}</span>
-</span><span id="Postgres-243"><a href="#Postgres-243"><span class="linenos">243</span></a>
-</span><span id="Postgres-244"><a href="#Postgres-244"><span class="linenos">244</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Postgres-245"><a href="#Postgres-245"><span class="linenos">245</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-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">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-248"><a href="#Postgres-248"><span class="linenos">248</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-249"><a href="#Postgres-249"><span class="linenos">249</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-252"><a href="#Postgres-252"><span class="linenos">252</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-253"><a href="#Postgres-253"><span class="linenos">253</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="Postgres-254"><a href="#Postgres-254"><span class="linenos">254</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="Postgres-255"><a href="#Postgres-255"><span class="linenos">255</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
-</span><span id="Postgres-256"><a href="#Postgres-256"><span class="linenos">256</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-257"><a href="#Postgres-257"><span class="linenos">257</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-258"><a href="#Postgres-258"><span class="linenos">258</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-259"><a href="#Postgres-259"><span class="linenos">259</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-260"><a href="#Postgres-260"><span class="linenos">260</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-261"><a href="#Postgres-261"><span class="linenos">261</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-262"><a href="#Postgres-262"><span class="linenos">262</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-263"><a href="#Postgres-263"><span class="linenos">263</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres-264"><a href="#Postgres-264"><span class="linenos">264</span></a> <span class="s2">&quot;DO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres-265"><a href="#Postgres-265"><span class="linenos">265</span></a> <span class="s2">&quot;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-266"><a href="#Postgres-266"><span class="linenos">266</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="Postgres-267"><a href="#Postgres-267"><span class="linenos">267</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="Postgres-268"><a href="#Postgres-268"><span class="linenos">268</span></a> <span class="s2">&quot;REFRESH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres-269"><a href="#Postgres-269"><span class="linenos">269</span></a> <span class="s2">&quot;REINDEX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres-270"><a href="#Postgres-270"><span class="linenos">270</span></a> <span class="s2">&quot;RESET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres-271"><a href="#Postgres-271"><span class="linenos">271</span></a> <span class="s2">&quot;REVOKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres-272"><a href="#Postgres-272"><span class="linenos">272</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="Postgres-273"><a href="#Postgres-273"><span class="linenos">273</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="Postgres-274"><a href="#Postgres-274"><span class="linenos">274</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Postgres-275"><a href="#Postgres-275"><span class="linenos">275</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="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">SINGLE_TOKENS</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">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-280"><a href="#Postgres-280"><span class="linenos">280</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-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">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-284"><a href="#Postgres-284"><span class="linenos">284</span></a>
-</span><span id="Postgres-285"><a href="#Postgres-285"><span class="linenos">285</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-286"><a href="#Postgres-286"><span class="linenos">286</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres-212"><a href="#Postgres-212"><span class="linenos">212</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-213"><a href="#Postgres-213"><span class="linenos">213</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Postgres-214"><a href="#Postgres-214"><span class="linenos">214</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-215"><a href="#Postgres-215"><span class="linenos">215</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-216"><a href="#Postgres-216"><span class="linenos">216</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-217"><a href="#Postgres-217"><span class="linenos">217</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-218"><a href="#Postgres-218"><span class="linenos">218</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-219"><a href="#Postgres-219"><span class="linenos">219</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-220"><a href="#Postgres-220"><span class="linenos">220</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-221"><a href="#Postgres-221"><span class="linenos">221</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-222"><a href="#Postgres-222"><span class="linenos">222</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-223"><a href="#Postgres-223"><span class="linenos">223</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-224"><a href="#Postgres-224"><span class="linenos">224</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-225"><a href="#Postgres-225"><span class="linenos">225</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-226"><a href="#Postgres-226"><span class="linenos">226</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-227"><a href="#Postgres-227"><span class="linenos">227</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-228"><a href="#Postgres-228"><span class="linenos">228</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-229"><a href="#Postgres-229"><span class="linenos">229</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-230"><a href="#Postgres-230"><span class="linenos">230</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-231"><a href="#Postgres-231"><span class="linenos">231</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-232"><a href="#Postgres-232"><span class="linenos">232</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-233"><a href="#Postgres-233"><span class="linenos">233</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-234"><a href="#Postgres-234"><span class="linenos">234</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-235"><a href="#Postgres-235"><span class="linenos">235</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-236"><a href="#Postgres-236"><span class="linenos">236</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-237"><a href="#Postgres-237"><span class="linenos">237</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-238"><a href="#Postgres-238"><span class="linenos">238</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-239"><a href="#Postgres-239"><span class="linenos">239</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-240"><a href="#Postgres-240"><span class="linenos">240</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-241"><a href="#Postgres-241"><span class="linenos">241</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-242"><a href="#Postgres-242"><span class="linenos">242</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-243"><a href="#Postgres-243"><span class="linenos">243</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-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="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-247"><a href="#Postgres-247"><span class="linenos">247</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="Postgres-248"><a href="#Postgres-248"><span class="linenos">248</span></a>
+</span><span id="Postgres-249"><a href="#Postgres-249"><span class="linenos">249</span></a> <span class="n">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-250"><a href="#Postgres-250"><span class="linenos">250</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-251"><a href="#Postgres-251"><span class="linenos">251</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-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="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-254"><a href="#Postgres-254"><span class="linenos">254</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-255"><a href="#Postgres-255"><span class="linenos">255</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="Postgres-256"><a href="#Postgres-256"><span class="linenos">256</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-257"><a href="#Postgres-257"><span class="linenos">257</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-258"><a href="#Postgres-258"><span class="linenos">258</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-259"><a href="#Postgres-259"><span class="linenos">259</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
+</span><span id="Postgres-260"><a href="#Postgres-260"><span class="linenos">260</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-261"><a href="#Postgres-261"><span class="linenos">261</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-262"><a href="#Postgres-262"><span class="linenos">262</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-263"><a href="#Postgres-263"><span class="linenos">263</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-264"><a href="#Postgres-264"><span class="linenos">264</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-265"><a href="#Postgres-265"><span class="linenos">265</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-266"><a href="#Postgres-266"><span class="linenos">266</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-267"><a href="#Postgres-267"><span class="linenos">267</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-268"><a href="#Postgres-268"><span class="linenos">268</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-269"><a href="#Postgres-269"><span class="linenos">269</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-270"><a href="#Postgres-270"><span class="linenos">270</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="Postgres-271"><a href="#Postgres-271"><span class="linenos">271</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-272"><a href="#Postgres-272"><span class="linenos">272</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-273"><a href="#Postgres-273"><span class="linenos">273</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-274"><a href="#Postgres-274"><span class="linenos">274</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-275"><a href="#Postgres-275"><span class="linenos">275</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-276"><a href="#Postgres-276"><span class="linenos">276</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-277"><a href="#Postgres-277"><span class="linenos">277</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-278"><a href="#Postgres-278"><span class="linenos">278</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-279"><a href="#Postgres-279"><span class="linenos">279</span></a> <span class="p">}</span>
+</span><span id="Postgres-280"><a href="#Postgres-280"><span class="linenos">280</span></a>
+</span><span id="Postgres-281"><a href="#Postgres-281"><span class="linenos">281</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-282"><a href="#Postgres-282"><span class="linenos">282</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="Postgres-283"><a href="#Postgres-283"><span class="linenos">283</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
+</span><span id="Postgres-284"><a href="#Postgres-284"><span class="linenos">284</span></a> <span class="p">}</span>
+</span><span id="Postgres-285"><a href="#Postgres-285"><span class="linenos">285</span></a>
+</span><span id="Postgres-286"><a href="#Postgres-286"><span class="linenos">286</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
</span><span id="Postgres-287"><a href="#Postgres-287"><span class="linenos">287</span></a>
-</span><span id="Postgres-288"><a href="#Postgres-288"><span class="linenos">288</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-289"><a href="#Postgres-289"><span class="linenos">289</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Postgres-290"><a href="#Postgres-290"><span class="linenos">290</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-291"><a href="#Postgres-291"><span class="linenos">291</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-292"><a href="#Postgres-292"><span class="linenos">292</span></a> <span class="p">),</span>
-</span><span id="Postgres-293"><a href="#Postgres-293"><span class="linenos">293</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-294"><a href="#Postgres-294"><span class="linenos">294</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-295"><a href="#Postgres-295"><span class="linenos">295</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-296"><a href="#Postgres-296"><span class="linenos">296</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-297"><a href="#Postgres-297"><span class="linenos">297</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Postgres-298"><a href="#Postgres-298"><span class="linenos">298</span></a> <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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-301"><a href="#Postgres-301"><span class="linenos">301</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres-302"><a href="#Postgres-302"><span class="linenos">302</span></a> <span class="s2">&quot;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-303"><a href="#Postgres-303"><span class="linenos">303</span></a> <span class="p">}</span>
-</span><span id="Postgres-304"><a href="#Postgres-304"><span class="linenos">304</span></a>
-</span><span id="Postgres-305"><a href="#Postgres-305"><span class="linenos">305</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-306"><a href="#Postgres-306"><span class="linenos">306</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
-</span><span id="Postgres-307"><a href="#Postgres-307"><span class="linenos">307</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-308"><a href="#Postgres-308"><span class="linenos">308</span></a> <span class="p">}</span>
-</span><span id="Postgres-309"><a href="#Postgres-309"><span class="linenos">309</span></a>
-</span><span id="Postgres-310"><a href="#Postgres-310"><span class="linenos">310</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-311"><a href="#Postgres-311"><span class="linenos">311</span></a> <span class="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-312"><a href="#Postgres-312"><span class="linenos">312</span></a> <span class="p">}</span>
-</span><span id="Postgres-313"><a href="#Postgres-313"><span class="linenos">313</span></a>
-</span><span id="Postgres-314"><a href="#Postgres-314"><span class="linenos">314</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-315"><a href="#Postgres-315"><span class="linenos">315</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres-316"><a href="#Postgres-316"><span class="linenos">316</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-317"><a href="#Postgres-317"><span class="linenos">317</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-318"><a href="#Postgres-318"><span class="linenos">318</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-319"><a href="#Postgres-319"><span class="linenos">319</span></a> <span class="p">}</span>
-</span><span id="Postgres-320"><a href="#Postgres-320"><span class="linenos">320</span></a>
-</span><span id="Postgres-321"><a href="#Postgres-321"><span class="linenos">321</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-322"><a href="#Postgres-322"><span class="linenos">322</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres-323"><a href="#Postgres-323"><span class="linenos">323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
-</span><span id="Postgres-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><span id="Postgres-326"><a href="#Postgres-326"><span class="linenos">326</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="Postgres-327"><a href="#Postgres-327"><span class="linenos">327</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_exponent</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="Postgres-328"><a href="#Postgres-328"><span class="linenos">328</span></a>
-</span><span id="Postgres-329"><a href="#Postgres-329"><span class="linenos">329</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Postgres-330"><a href="#Postgres-330"><span class="linenos">330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="Postgres-331"><a href="#Postgres-331"><span class="linenos">331</span></a>
-</span><span id="Postgres-332"><a href="#Postgres-332"><span class="linenos">332</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-333"><a href="#Postgres-333"><span class="linenos">333</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-334"><a href="#Postgres-334"><span class="linenos">334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="Postgres-335"><a href="#Postgres-335"><span class="linenos">335</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-336"><a href="#Postgres-336"><span class="linenos">336</span></a>
-</span><span id="Postgres-337"><a href="#Postgres-337"><span class="linenos">337</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-338"><a href="#Postgres-338"><span class="linenos">338</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Postgres-339"><a href="#Postgres-339"><span class="linenos">339</span></a>
-</span><span id="Postgres-340"><a href="#Postgres-340"><span class="linenos">340</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-341"><a href="#Postgres-341"><span class="linenos">341</span></a>
-</span><span id="Postgres-342"><a href="#Postgres-342"><span class="linenos">342</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-343"><a href="#Postgres-343"><span class="linenos">343</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-344"><a href="#Postgres-344"><span class="linenos">344</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-345"><a href="#Postgres-345"><span class="linenos">345</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-346"><a href="#Postgres-346"><span class="linenos">346</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-347"><a href="#Postgres-347"><span class="linenos">347</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-348"><a href="#Postgres-348"><span class="linenos">348</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Postgres-349"><a href="#Postgres-349"><span class="linenos">349</span></a>
-</span><span id="Postgres-350"><a href="#Postgres-350"><span class="linenos">350</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-351"><a href="#Postgres-351"><span class="linenos">351</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Postgres-352"><a href="#Postgres-352"><span class="linenos">352</span></a> <span class="n">exp</span><span 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-353"><a href="#Postgres-353"><span class="linenos">353</span></a> <span class="n">exp</span><span 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-354"><a href="#Postgres-354"><span class="linenos">354</span></a> <span class="n">exp</span><span 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-355"><a href="#Postgres-355"><span class="linenos">355</span></a> <span class="n">exp</span><span 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-356"><a href="#Postgres-356"><span class="linenos">356</span></a> <span class="n">exp</span><span 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-357"><a href="#Postgres-357"><span class="linenos">357</span></a> <span class="n">exp</span><span 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-358"><a href="#Postgres-358"><span class="linenos">358</span></a> <span class="p">}</span>
-</span><span id="Postgres-359"><a href="#Postgres-359"><span class="linenos">359</span></a>
-</span><span id="Postgres-360"><a href="#Postgres-360"><span class="linenos">360</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-361"><a href="#Postgres-361"><span class="linenos">361</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Postgres-362"><a href="#Postgres-362"><span class="linenos">362</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-363"><a href="#Postgres-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
-</span><span id="Postgres-364"><a href="#Postgres-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="Postgres-365"><a href="#Postgres-365"><span class="linenos">365</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-366"><a href="#Postgres-366"><span class="linenos">366</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-367"><a href="#Postgres-367"><span class="linenos">367</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-368"><a href="#Postgres-368"><span class="linenos">368</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-369"><a href="#Postgres-369"><span class="linenos">369</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-370"><a href="#Postgres-370"><span class="linenos">370</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-371"><a href="#Postgres-371"><span class="linenos">371</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-372"><a href="#Postgres-372"><span class="linenos">372</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-373"><a href="#Postgres-373"><span class="linenos">373</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-374"><a href="#Postgres-374"><span class="linenos">374</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-375"><a href="#Postgres-375"><span class="linenos">375</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-376"><a href="#Postgres-376"><span class="linenos">376</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-377"><a href="#Postgres-377"><span class="linenos">377</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-378"><a href="#Postgres-378"><span class="linenos">378</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-379"><a href="#Postgres-379"><span class="linenos">379</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-380"><a href="#Postgres-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="Postgres-381"><a href="#Postgres-381"><span class="linenos">381</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-382"><a href="#Postgres-382"><span class="linenos">382</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-383"><a href="#Postgres-383"><span class="linenos">383</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-384"><a href="#Postgres-384"><span class="linenos">384</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-385"><a href="#Postgres-385"><span class="linenos">385</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">_remove_target_from_merge</span><span class="p">]),</span>
-</span><span id="Postgres-386"><a href="#Postgres-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Postgres-387"><a href="#Postgres-387"><span class="linenos">387</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-388"><a href="#Postgres-388"><span class="linenos">388</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-389"><a href="#Postgres-389"><span class="linenos">389</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-390"><a href="#Postgres-390"><span class="linenos">390</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-391"><a href="#Postgres-391"><span class="linenos">391</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-392"><a href="#Postgres-392"><span class="linenos">392</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-393"><a href="#Postgres-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Postgres-394"><a href="#Postgres-394"><span class="linenos">394</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-395"><a href="#Postgres-395"><span class="linenos">395</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-396"><a href="#Postgres-396"><span class="linenos">396</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-397"><a href="#Postgres-397"><span class="linenos">397</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-398"><a href="#Postgres-398"><span class="linenos">398</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-399"><a href="#Postgres-399"><span class="linenos">399</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;postgres&quot;</span><span class="p">),</span>
-</span><span id="Postgres-400"><a href="#Postgres-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-401"><a href="#Postgres-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="Postgres-402"><a href="#Postgres-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="Postgres-403"><a href="#Postgres-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-404"><a href="#Postgres-404"><span class="linenos">404</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-405"><a href="#Postgres-405"><span class="linenos">405</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-406"><a href="#Postgres-406"><span class="linenos">406</span></a> <span class="p">}</span>
-</span><span id="Postgres-407"><a href="#Postgres-407"><span class="linenos">407</span></a>
-</span><span id="Postgres-408"><a href="#Postgres-408"><span class="linenos">408</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-409"><a href="#Postgres-409"><span class="linenos">409</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Postgres-410"><a href="#Postgres-410"><span class="linenos">410</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-411"><a href="#Postgres-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Postgres-412"><a href="#Postgres-412"><span class="linenos">412</span></a> <span class="p">}</span>
-</span><span id="Postgres-413"><a href="#Postgres-413"><span class="linenos">413</span></a>
-</span><span id="Postgres-414"><a href="#Postgres-414"><span class="linenos">414</span></a> <span class="k">def</span> <span class="nf">bracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres-415"><a href="#Postgres-415"><span class="linenos">415</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="Postgres-416"><a href="#Postgres-416"><span class="linenos">416</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="Postgres-417"><a href="#Postgres-417"><span class="linenos">417</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="Postgres-418"><a href="#Postgres-418"><span class="linenos">418</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Postgres-419"><a href="#Postgres-419"><span class="linenos">419</span></a>
-</span><span id="Postgres-420"><a href="#Postgres-420"><span class="linenos">420</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Postgres-288"><a href="#Postgres-288"><span class="linenos">288</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Postgres-289"><a href="#Postgres-289"><span class="linenos">289</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-290"><a href="#Postgres-290"><span class="linenos">290</span></a>
+</span><span id="Postgres-291"><a href="#Postgres-291"><span class="linenos">291</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-292"><a href="#Postgres-292"><span class="linenos">292</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Postgres-293"><a href="#Postgres-293"><span class="linenos">293</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="Postgres-294"><a href="#Postgres-294"><span class="linenos">294</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-295"><a href="#Postgres-295"><span class="linenos">295</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-296"><a href="#Postgres-296"><span class="linenos">296</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-297"><a href="#Postgres-297"><span class="linenos">297</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-298"><a href="#Postgres-298"><span class="linenos">298</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres-299"><a href="#Postgres-299"><span class="linenos">299</span></a> <span class="p">}</span>
+</span><span id="Postgres-300"><a href="#Postgres-300"><span class="linenos">300</span></a>
+</span><span id="Postgres-301"><a href="#Postgres-301"><span class="linenos">301</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-302"><a href="#Postgres-302"><span class="linenos">302</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-303"><a href="#Postgres-303"><span class="linenos">303</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-304"><a href="#Postgres-304"><span class="linenos">304</span></a> <span class="p">}</span>
+</span><span id="Postgres-305"><a href="#Postgres-305"><span class="linenos">305</span></a>
+</span><span id="Postgres-306"><a href="#Postgres-306"><span class="linenos">306</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-307"><a href="#Postgres-307"><span class="linenos">307</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
+</span><span id="Postgres-308"><a href="#Postgres-308"><span class="linenos">308</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-309"><a href="#Postgres-309"><span class="linenos">309</span></a> <span class="p">}</span>
+</span><span id="Postgres-310"><a href="#Postgres-310"><span class="linenos">310</span></a>
+</span><span id="Postgres-311"><a href="#Postgres-311"><span class="linenos">311</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-312"><a href="#Postgres-312"><span class="linenos">312</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-313"><a href="#Postgres-313"><span class="linenos">313</span></a> <span class="p">}</span>
+</span><span id="Postgres-314"><a href="#Postgres-314"><span class="linenos">314</span></a>
+</span><span id="Postgres-315"><a href="#Postgres-315"><span class="linenos">315</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-316"><a href="#Postgres-316"><span class="linenos">316</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres-317"><a href="#Postgres-317"><span class="linenos">317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">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-318"><a href="#Postgres-318"><span class="linenos">318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Postgres-319"><a href="#Postgres-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
+</span><span id="Postgres-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">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-322"><a href="#Postgres-322"><span class="linenos">322</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-323"><a href="#Postgres-323"><span class="linenos">323</span></a> <span class="p">}</span>
+</span><span id="Postgres-324"><a href="#Postgres-324"><span class="linenos">324</span></a>
+</span><span id="Postgres-325"><a href="#Postgres-325"><span class="linenos">325</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-326"><a href="#Postgres-326"><span class="linenos">326</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres-327"><a href="#Postgres-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
+</span><span id="Postgres-328"><a href="#Postgres-328"><span class="linenos">328</span></a> <span class="p">}</span>
+</span><span id="Postgres-329"><a href="#Postgres-329"><span class="linenos">329</span></a>
+</span><span id="Postgres-330"><a href="#Postgres-330"><span class="linenos">330</span></a> <span class="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="Postgres-331"><a href="#Postgres-331"><span class="linenos">331</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_exponent</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="Postgres-332"><a href="#Postgres-332"><span class="linenos">332</span></a>
+</span><span id="Postgres-333"><a href="#Postgres-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Postgres-334"><a href="#Postgres-334"><span class="linenos">334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="Postgres-335"><a href="#Postgres-335"><span class="linenos">335</span></a>
+</span><span id="Postgres-336"><a href="#Postgres-336"><span class="linenos">336</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-337"><a href="#Postgres-337"><span class="linenos">337</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-338"><a href="#Postgres-338"><span class="linenos">338</span></a> <span class="bp">self</span><span 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-339"><a href="#Postgres-339"><span class="linenos">339</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-340"><a href="#Postgres-340"><span class="linenos">340</span></a>
+</span><span id="Postgres-341"><a href="#Postgres-341"><span class="linenos">341</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-342"><a href="#Postgres-342"><span class="linenos">342</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Postgres-343"><a href="#Postgres-343"><span class="linenos">343</span></a>
+</span><span id="Postgres-344"><a href="#Postgres-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-345"><a href="#Postgres-345"><span class="linenos">345</span></a>
+</span><span id="Postgres-346"><a href="#Postgres-346"><span class="linenos">346</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-347"><a href="#Postgres-347"><span class="linenos">347</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-348"><a href="#Postgres-348"><span class="linenos">348</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-349"><a href="#Postgres-349"><span class="linenos">349</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-350"><a href="#Postgres-350"><span class="linenos">350</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-351"><a href="#Postgres-351"><span class="linenos">351</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-352"><a href="#Postgres-352"><span class="linenos">352</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-353"><a href="#Postgres-353"><span class="linenos">353</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Postgres-354"><a href="#Postgres-354"><span class="linenos">354</span></a>
+</span><span id="Postgres-355"><a href="#Postgres-355"><span class="linenos">355</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-356"><a href="#Postgres-356"><span class="linenos">356</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Postgres-357"><a href="#Postgres-357"><span class="linenos">357</span></a> <span class="n">exp</span><span 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-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="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-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="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-360"><a href="#Postgres-360"><span class="linenos">360</span></a> <span class="n">exp</span><span 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-361"><a href="#Postgres-361"><span class="linenos">361</span></a> <span class="n">exp</span><span 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-362"><a href="#Postgres-362"><span class="linenos">362</span></a> <span class="n">exp</span><span 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-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">TRANSFORMS</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">TRANSFORMS</span><span class="p">,</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">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</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">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="Postgres-369"><a href="#Postgres-369"><span class="linenos">369</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-370"><a href="#Postgres-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
+</span><span id="Postgres-371"><a href="#Postgres-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="Postgres-372"><a href="#Postgres-372"><span class="linenos">372</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-373"><a href="#Postgres-373"><span class="linenos">373</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-374"><a href="#Postgres-374"><span class="linenos">374</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-375"><a href="#Postgres-375"><span class="linenos">375</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-376"><a href="#Postgres-376"><span class="linenos">376</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-377"><a href="#Postgres-377"><span class="linenos">377</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-378"><a href="#Postgres-378"><span class="linenos">378</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-379"><a href="#Postgres-379"><span class="linenos">379</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-380"><a href="#Postgres-380"><span class="linenos">380</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-381"><a href="#Postgres-381"><span class="linenos">381</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-382"><a href="#Postgres-382"><span class="linenos">382</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-383"><a href="#Postgres-383"><span class="linenos">383</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-384"><a href="#Postgres-384"><span class="linenos">384</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-385"><a href="#Postgres-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="Postgres-386"><a href="#Postgres-386"><span class="linenos">386</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-387"><a href="#Postgres-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
+</span><span id="Postgres-388"><a href="#Postgres-388"><span class="linenos">388</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-389"><a href="#Postgres-389"><span class="linenos">389</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-390"><a href="#Postgres-390"><span class="linenos">390</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-391"><a href="#Postgres-391"><span class="linenos">391</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-392"><a href="#Postgres-392"><span class="linenos">392</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">_remove_target_from_merge</span><span class="p">]),</span>
+</span><span id="Postgres-393"><a href="#Postgres-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Postgres-394"><a href="#Postgres-394"><span class="linenos">394</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-395"><a href="#Postgres-395"><span class="linenos">395</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-396"><a href="#Postgres-396"><span class="linenos">396</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-397"><a href="#Postgres-397"><span class="linenos">397</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-398"><a href="#Postgres-398"><span class="linenos">398</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-399"><a href="#Postgres-399"><span class="linenos">399</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-400"><a href="#Postgres-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Postgres-401"><a href="#Postgres-401"><span class="linenos">401</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-402"><a href="#Postgres-402"><span class="linenos">402</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-403"><a href="#Postgres-403"><span class="linenos">403</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-404"><a href="#Postgres-404"><span class="linenos">404</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-405"><a href="#Postgres-405"><span class="linenos">405</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-406"><a href="#Postgres-406"><span class="linenos">406</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;postgres&quot;</span><span class="p">),</span>
+</span><span id="Postgres-407"><a href="#Postgres-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-408"><a href="#Postgres-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="Postgres-409"><a href="#Postgres-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="Postgres-410"><a href="#Postgres-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-411"><a href="#Postgres-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="Postgres-412"><a href="#Postgres-412"><span class="linenos">412</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
+</span><span id="Postgres-413"><a href="#Postgres-413"><span class="linenos">413</span></a> <span class="p">}</span>
+</span><span id="Postgres-414"><a href="#Postgres-414"><span class="linenos">414</span></a>
+</span><span id="Postgres-415"><a href="#Postgres-415"><span class="linenos">415</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-416"><a href="#Postgres-416"><span class="linenos">416</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Postgres-417"><a href="#Postgres-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-418"><a href="#Postgres-418"><span class="linenos">418</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-419"><a href="#Postgres-419"><span class="linenos">419</span></a> <span class="p">}</span>
+</span><span id="Postgres-420"><a href="#Postgres-420"><span class="linenos">420</span></a>
+</span><span id="Postgres-421"><a href="#Postgres-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">bracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres-422"><a href="#Postgres-422"><span class="linenos">422</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="Postgres-423"><a href="#Postgres-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="Postgres-424"><a href="#Postgres-424"><span class="linenos">424</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="Postgres-425"><a href="#Postgres-425"><span class="linenos">425</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Postgres-426"><a href="#Postgres-426"><span class="linenos">426</span></a>
+</span><span id="Postgres-427"><a href="#Postgres-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Postgres-428"><a href="#Postgres-428"><span class="linenos">428</span></a>
+</span><span id="Postgres-429"><a href="#Postgres-429"><span class="linenos">429</span></a> <span class="k">def</span> <span class="nf">matchagainst_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres-430"><a href="#Postgres-430"><span class="linenos">430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Postgres-431"><a href="#Postgres-431"><span class="linenos">431</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="Postgres-432"><a href="#Postgres-432"><span class="linenos">432</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Postgres-433"><a href="#Postgres-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -1218,6 +1248,7 @@
<dd id="Postgres.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Postgres.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
<dd id="Postgres.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Postgres.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Postgres.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Postgres.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Postgres.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
@@ -1254,46 +1285,47 @@
</div>
<a class="headerlink" href="#Postgres.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Tokenizer-244"><a href="#Postgres.Tokenizer-244"><span class="linenos">244</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Postgres.Tokenizer-245"><a href="#Postgres.Tokenizer-245"><span class="linenos">245</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-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">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-248"><a href="#Postgres.Tokenizer-248"><span class="linenos">248</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-249"><a href="#Postgres.Tokenizer-249"><span class="linenos">249</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Tokenizer-252"><a href="#Postgres.Tokenizer-252"><span class="linenos">252</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-253"><a href="#Postgres.Tokenizer-253"><span class="linenos">253</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-254"><a href="#Postgres.Tokenizer-254"><span class="linenos">254</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-255"><a href="#Postgres.Tokenizer-255"><span class="linenos">255</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-256"><a href="#Postgres.Tokenizer-256"><span class="linenos">256</span></a> <span class="s2">&quot;~&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-257"><a href="#Postgres.Tokenizer-257"><span class="linenos">257</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-258"><a href="#Postgres.Tokenizer-258"><span class="linenos">258</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-259"><a href="#Postgres.Tokenizer-259"><span class="linenos">259</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-260"><a href="#Postgres.Tokenizer-260"><span class="linenos">260</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-261"><a href="#Postgres.Tokenizer-261"><span class="linenos">261</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-262"><a href="#Postgres.Tokenizer-262"><span class="linenos">262</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-263"><a href="#Postgres.Tokenizer-263"><span class="linenos">263</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-264"><a href="#Postgres.Tokenizer-264"><span class="linenos">264</span></a> <span class="s2">&quot;DO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-265"><a href="#Postgres.Tokenizer-265"><span class="linenos">265</span></a> <span class="s2">&quot;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-266"><a href="#Postgres.Tokenizer-266"><span class="linenos">266</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-267"><a href="#Postgres.Tokenizer-267"><span class="linenos">267</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-268"><a href="#Postgres.Tokenizer-268"><span class="linenos">268</span></a> <span class="s2">&quot;REFRESH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-269"><a href="#Postgres.Tokenizer-269"><span class="linenos">269</span></a> <span class="s2">&quot;REINDEX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-270"><a href="#Postgres.Tokenizer-270"><span class="linenos">270</span></a> <span class="s2">&quot;RESET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-271"><a href="#Postgres.Tokenizer-271"><span class="linenos">271</span></a> <span class="s2">&quot;REVOKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-272"><a href="#Postgres.Tokenizer-272"><span class="linenos">272</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-273"><a href="#Postgres.Tokenizer-273"><span class="linenos">273</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-274"><a href="#Postgres.Tokenizer-274"><span class="linenos">274</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-275"><a href="#Postgres.Tokenizer-275"><span class="linenos">275</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-276"><a href="#Postgres.Tokenizer-276"><span class="linenos">276</span></a> <span class="p">}</span>
-</span><span id="Postgres.Tokenizer-277"><a href="#Postgres.Tokenizer-277"><span class="linenos">277</span></a>
-</span><span id="Postgres.Tokenizer-278"><a href="#Postgres.Tokenizer-278"><span class="linenos">278</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Tokenizer-279"><a href="#Postgres.Tokenizer-279"><span class="linenos">279</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-280"><a href="#Postgres.Tokenizer-280"><span class="linenos">280</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-281"><a href="#Postgres.Tokenizer-281"><span class="linenos">281</span></a> <span class="p">}</span>
-</span><span id="Postgres.Tokenizer-282"><a href="#Postgres.Tokenizer-282"><span class="linenos">282</span></a>
-</span><span id="Postgres.Tokenizer-283"><a href="#Postgres.Tokenizer-283"><span class="linenos">283</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-246"><a href="#Postgres.Tokenizer-246"><span class="linenos">246</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-247"><a href="#Postgres.Tokenizer-247"><span class="linenos">247</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="Postgres.Tokenizer-248"><a href="#Postgres.Tokenizer-248"><span class="linenos">248</span></a>
+</span><span id="Postgres.Tokenizer-249"><a href="#Postgres.Tokenizer-249"><span class="linenos">249</span></a> <span class="n">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-250"><a href="#Postgres.Tokenizer-250"><span class="linenos">250</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-251"><a href="#Postgres.Tokenizer-251"><span class="linenos">251</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-252"><a href="#Postgres.Tokenizer-252"><span class="linenos">252</span></a>
+</span><span id="Postgres.Tokenizer-253"><a href="#Postgres.Tokenizer-253"><span class="linenos">253</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Tokenizer-254"><a href="#Postgres.Tokenizer-254"><span class="linenos">254</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-255"><a href="#Postgres.Tokenizer-255"><span class="linenos">255</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-256"><a href="#Postgres.Tokenizer-256"><span class="linenos">256</span></a> <span class="s2">&quot;~~*&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-257"><a href="#Postgres.Tokenizer-257"><span class="linenos">257</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-258"><a href="#Postgres.Tokenizer-258"><span class="linenos">258</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-259"><a href="#Postgres.Tokenizer-259"><span class="linenos">259</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-260"><a href="#Postgres.Tokenizer-260"><span class="linenos">260</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-261"><a href="#Postgres.Tokenizer-261"><span class="linenos">261</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-262"><a href="#Postgres.Tokenizer-262"><span class="linenos">262</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-263"><a href="#Postgres.Tokenizer-263"><span class="linenos">263</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-264"><a href="#Postgres.Tokenizer-264"><span class="linenos">264</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-265"><a href="#Postgres.Tokenizer-265"><span class="linenos">265</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-266"><a href="#Postgres.Tokenizer-266"><span class="linenos">266</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-267"><a href="#Postgres.Tokenizer-267"><span class="linenos">267</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-268"><a href="#Postgres.Tokenizer-268"><span class="linenos">268</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-269"><a href="#Postgres.Tokenizer-269"><span class="linenos">269</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-270"><a href="#Postgres.Tokenizer-270"><span class="linenos">270</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-271"><a href="#Postgres.Tokenizer-271"><span class="linenos">271</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-272"><a href="#Postgres.Tokenizer-272"><span class="linenos">272</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-273"><a href="#Postgres.Tokenizer-273"><span class="linenos">273</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-274"><a href="#Postgres.Tokenizer-274"><span class="linenos">274</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-275"><a href="#Postgres.Tokenizer-275"><span class="linenos">275</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-276"><a href="#Postgres.Tokenizer-276"><span class="linenos">276</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-277"><a href="#Postgres.Tokenizer-277"><span class="linenos">277</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-278"><a href="#Postgres.Tokenizer-278"><span class="linenos">278</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-279"><a href="#Postgres.Tokenizer-279"><span class="linenos">279</span></a> <span class="p">}</span>
+</span><span id="Postgres.Tokenizer-280"><a href="#Postgres.Tokenizer-280"><span class="linenos">280</span></a>
+</span><span id="Postgres.Tokenizer-281"><a href="#Postgres.Tokenizer-281"><span class="linenos">281</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Tokenizer-282"><a href="#Postgres.Tokenizer-282"><span class="linenos">282</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-283"><a href="#Postgres.Tokenizer-283"><span class="linenos">283</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-284"><a href="#Postgres.Tokenizer-284"><span class="linenos">284</span></a> <span class="p">}</span>
+</span><span id="Postgres.Tokenizer-285"><a href="#Postgres.Tokenizer-285"><span class="linenos">285</span></a>
+</span><span id="Postgres.Tokenizer-286"><a href="#Postgres.Tokenizer-286"><span class="linenos">286</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
</span></pre></div>
@@ -1351,7 +1383,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Postgres.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;~~&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;~~*&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;~*&#39;: &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;, &#39;~&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;@&gt;&#39;: &lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;, &#39;&lt;@&#39;: &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;, &#39;BEGIN TRANSACTION&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BIGSERIAL&#39;: &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;DO&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;HSTORE&#39;: &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &#39;JSONB&#39;: &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &#39;MONEY&#39;: &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &#39;REFRESH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REINDEX&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;RESET&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REVOKE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;SERIAL&#39;: &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &#39;SMALLSERIAL&#39;: &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &#39;CSTRING&#39;: &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;~~&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;~~*&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;~*&#39;: &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;, &#39;~&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;@@&#39;: &lt;TokenType.DAT: &#39;DAT&#39;&gt;, &#39;@&gt;&#39;: &lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;, &#39;&lt;@&#39;: &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;, &#39;BEGIN TRANSACTION&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BIGSERIAL&#39;: &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;DO&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;HSTORE&#39;: &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &#39;JSONB&#39;: &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &#39;MONEY&#39;: &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &#39;REFRESH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REINDEX&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;RESET&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REVOKE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;SERIAL&#39;: &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &#39;SMALLSERIAL&#39;: &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &#39;CSTRING&#39;: &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;}</span>
</div>
@@ -1422,62 +1454,63 @@
</div>
<a class="headerlink" href="#Postgres.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Parser-285"><a href="#Postgres.Parser-285"><span class="linenos">285</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-286"><a href="#Postgres.Parser-286"><span class="linenos">286</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Parser-287"><a href="#Postgres.Parser-287"><span class="linenos">287</span></a>
-</span><span id="Postgres.Parser-288"><a href="#Postgres.Parser-288"><span class="linenos">288</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-289"><a href="#Postgres.Parser-289"><span class="linenos">289</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-290"><a href="#Postgres.Parser-290"><span class="linenos">290</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-291"><a href="#Postgres.Parser-291"><span class="linenos">291</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-292"><a href="#Postgres.Parser-292"><span class="linenos">292</span></a> <span class="p">),</span>
-</span><span id="Postgres.Parser-293"><a href="#Postgres.Parser-293"><span class="linenos">293</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-294"><a href="#Postgres.Parser-294"><span class="linenos">294</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-295"><a href="#Postgres.Parser-295"><span class="linenos">295</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-296"><a href="#Postgres.Parser-296"><span class="linenos">296</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-297"><a href="#Postgres.Parser-297"><span class="linenos">297</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Postgres.Parser-298"><a href="#Postgres.Parser-298"><span class="linenos">298</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-299"><a href="#Postgres.Parser-299"><span class="linenos">299</span></a>
-</span><span id="Postgres.Parser-300"><a href="#Postgres.Parser-300"><span class="linenos">300</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-301"><a href="#Postgres.Parser-301"><span class="linenos">301</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-302"><a href="#Postgres.Parser-302"><span class="linenos">302</span></a> <span class="s2">&quot;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-303"><a href="#Postgres.Parser-303"><span class="linenos">303</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-304"><a href="#Postgres.Parser-304"><span class="linenos">304</span></a>
-</span><span id="Postgres.Parser-305"><a href="#Postgres.Parser-305"><span class="linenos">305</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-306"><a href="#Postgres.Parser-306"><span class="linenos">306</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
-</span><span id="Postgres.Parser-307"><a href="#Postgres.Parser-307"><span class="linenos">307</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-308"><a href="#Postgres.Parser-308"><span class="linenos">308</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-309"><a href="#Postgres.Parser-309"><span class="linenos">309</span></a>
-</span><span id="Postgres.Parser-310"><a href="#Postgres.Parser-310"><span class="linenos">310</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-311"><a href="#Postgres.Parser-311"><span class="linenos">311</span></a> <span class="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-312"><a href="#Postgres.Parser-312"><span class="linenos">312</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-313"><a href="#Postgres.Parser-313"><span class="linenos">313</span></a>
-</span><span id="Postgres.Parser-314"><a href="#Postgres.Parser-314"><span class="linenos">314</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-315"><a href="#Postgres.Parser-315"><span class="linenos">315</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-316"><a href="#Postgres.Parser-316"><span class="linenos">316</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-317"><a href="#Postgres.Parser-317"><span class="linenos">317</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-318"><a href="#Postgres.Parser-318"><span class="linenos">318</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-319"><a href="#Postgres.Parser-319"><span class="linenos">319</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-320"><a href="#Postgres.Parser-320"><span class="linenos">320</span></a>
-</span><span id="Postgres.Parser-321"><a href="#Postgres.Parser-321"><span class="linenos">321</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-322"><a href="#Postgres.Parser-322"><span class="linenos">322</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-323"><a href="#Postgres.Parser-323"><span class="linenos">323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
-</span><span id="Postgres.Parser-324"><a href="#Postgres.Parser-324"><span class="linenos">324</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-325"><a href="#Postgres.Parser-325"><span class="linenos">325</span></a>
-</span><span id="Postgres.Parser-326"><a href="#Postgres.Parser-326"><span class="linenos">326</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="Postgres.Parser-327"><a href="#Postgres.Parser-327"><span class="linenos">327</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_exponent</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="Postgres.Parser-328"><a href="#Postgres.Parser-328"><span class="linenos">328</span></a>
-</span><span id="Postgres.Parser-329"><a href="#Postgres.Parser-329"><span class="linenos">329</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Postgres.Parser-330"><a href="#Postgres.Parser-330"><span class="linenos">330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="Postgres.Parser-331"><a href="#Postgres.Parser-331"><span class="linenos">331</span></a>
-</span><span id="Postgres.Parser-332"><a href="#Postgres.Parser-332"><span class="linenos">332</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-333"><a href="#Postgres.Parser-333"><span class="linenos">333</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-334"><a href="#Postgres.Parser-334"><span class="linenos">334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="Postgres.Parser-335"><a href="#Postgres.Parser-335"><span class="linenos">335</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-336"><a href="#Postgres.Parser-336"><span class="linenos">336</span></a>
-</span><span id="Postgres.Parser-337"><a href="#Postgres.Parser-337"><span class="linenos">337</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-338"><a href="#Postgres.Parser-338"><span class="linenos">338</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Postgres.Parser-339"><a href="#Postgres.Parser-339"><span class="linenos">339</span></a>
-</span><span id="Postgres.Parser-340"><a href="#Postgres.Parser-340"><span class="linenos">340</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-288"><a href="#Postgres.Parser-288"><span class="linenos">288</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Postgres.Parser-289"><a href="#Postgres.Parser-289"><span class="linenos">289</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Parser-290"><a href="#Postgres.Parser-290"><span class="linenos">290</span></a>
+</span><span id="Postgres.Parser-291"><a href="#Postgres.Parser-291"><span class="linenos">291</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-292"><a href="#Postgres.Parser-292"><span class="linenos">292</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Postgres.Parser-293"><a href="#Postgres.Parser-293"><span class="linenos">293</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="Postgres.Parser-294"><a href="#Postgres.Parser-294"><span class="linenos">294</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-295"><a href="#Postgres.Parser-295"><span class="linenos">295</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-296"><a href="#Postgres.Parser-296"><span class="linenos">296</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-297"><a href="#Postgres.Parser-297"><span class="linenos">297</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-298"><a href="#Postgres.Parser-298"><span class="linenos">298</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres.Parser-299"><a href="#Postgres.Parser-299"><span class="linenos">299</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-300"><a href="#Postgres.Parser-300"><span class="linenos">300</span></a>
+</span><span id="Postgres.Parser-301"><a href="#Postgres.Parser-301"><span class="linenos">301</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-302"><a href="#Postgres.Parser-302"><span class="linenos">302</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-303"><a href="#Postgres.Parser-303"><span class="linenos">303</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-304"><a href="#Postgres.Parser-304"><span class="linenos">304</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-305"><a href="#Postgres.Parser-305"><span class="linenos">305</span></a>
+</span><span id="Postgres.Parser-306"><a href="#Postgres.Parser-306"><span class="linenos">306</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-307"><a href="#Postgres.Parser-307"><span class="linenos">307</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">,</span>
+</span><span id="Postgres.Parser-308"><a href="#Postgres.Parser-308"><span class="linenos">308</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-309"><a href="#Postgres.Parser-309"><span class="linenos">309</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-310"><a href="#Postgres.Parser-310"><span class="linenos">310</span></a>
+</span><span id="Postgres.Parser-311"><a href="#Postgres.Parser-311"><span class="linenos">311</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-312"><a href="#Postgres.Parser-312"><span class="linenos">312</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-313"><a href="#Postgres.Parser-313"><span class="linenos">313</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-314"><a href="#Postgres.Parser-314"><span class="linenos">314</span></a>
+</span><span id="Postgres.Parser-315"><a href="#Postgres.Parser-315"><span class="linenos">315</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-316"><a href="#Postgres.Parser-316"><span class="linenos">316</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres.Parser-317"><a href="#Postgres.Parser-317"><span class="linenos">317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">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-318"><a href="#Postgres.Parser-318"><span class="linenos">318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Postgres.Parser-319"><a href="#Postgres.Parser-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
+</span><span id="Postgres.Parser-320"><a href="#Postgres.Parser-320"><span class="linenos">320</span></a> <span class="p">),</span>
+</span><span id="Postgres.Parser-321"><a href="#Postgres.Parser-321"><span class="linenos">321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">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-322"><a href="#Postgres.Parser-322"><span class="linenos">322</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-323"><a href="#Postgres.Parser-323"><span class="linenos">323</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-324"><a href="#Postgres.Parser-324"><span class="linenos">324</span></a>
+</span><span id="Postgres.Parser-325"><a href="#Postgres.Parser-325"><span class="linenos">325</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-326"><a href="#Postgres.Parser-326"><span class="linenos">326</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres.Parser-327"><a href="#Postgres.Parser-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
+</span><span id="Postgres.Parser-328"><a href="#Postgres.Parser-328"><span class="linenos">328</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-329"><a href="#Postgres.Parser-329"><span class="linenos">329</span></a>
+</span><span id="Postgres.Parser-330"><a href="#Postgres.Parser-330"><span class="linenos">330</span></a> <span class="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="Postgres.Parser-331"><a href="#Postgres.Parser-331"><span class="linenos">331</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_exponent</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="Postgres.Parser-332"><a href="#Postgres.Parser-332"><span class="linenos">332</span></a>
+</span><span id="Postgres.Parser-333"><a href="#Postgres.Parser-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Postgres.Parser-334"><a href="#Postgres.Parser-334"><span class="linenos">334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="Postgres.Parser-335"><a href="#Postgres.Parser-335"><span class="linenos">335</span></a>
+</span><span id="Postgres.Parser-336"><a href="#Postgres.Parser-336"><span class="linenos">336</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-337"><a href="#Postgres.Parser-337"><span class="linenos">337</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-338"><a href="#Postgres.Parser-338"><span class="linenos">338</span></a> <span class="bp">self</span><span 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-339"><a href="#Postgres.Parser-339"><span class="linenos">339</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-340"><a href="#Postgres.Parser-340"><span class="linenos">340</span></a>
+</span><span id="Postgres.Parser-341"><a href="#Postgres.Parser-341"><span class="linenos">341</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-342"><a href="#Postgres.Parser-342"><span class="linenos">342</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Postgres.Parser-343"><a href="#Postgres.Parser-343"><span class="linenos">343</span></a>
+</span><span id="Postgres.Parser-344"><a href="#Postgres.Parser-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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>
@@ -1514,7 +1547,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Postgres.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function <a href="#Postgres.Parser">Postgres.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;function _generate_series&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;NOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function _to_timestamp&gt;, &#39;UNNEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function parse_timestamp_trunc&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;function _generate_series&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;NOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function _to_timestamp&gt;, &#39;UNNEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;}</span>
</div>
@@ -1565,7 +1598,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RANGE_PARSERS</span> =
<input id="Postgres.Parser.RANGE_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.DAT: &#39;DAT&#39;&gt;: &lt;function <a href="#Postgres.Parser">Postgres.Parser</a>.&lt;lambda&gt;&gt;, &lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1578,7 +1611,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">STATEMENT_PARSERS</span> =
<input id="Postgres.Parser.STATEMENT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FROM: &#39;FROM&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;: &lt;function <a href="#Postgres.Parser">Postgres.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;: &lt;function <a href="#Postgres.Parser">Postgres.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1587,6 +1620,18 @@ Default: 3</li>
</div>
+ <div id="Postgres.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Postgres.Tokenizer">sqlglot.dialects.postgres.Postgres.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Postgres.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Postgres.Parser.INDEX_OFFSET" class="classattr">
<div class="attr variable">
<span class="name">INDEX_OFFSET</span><span class="annotation">: int</span> =
@@ -1680,6 +1725,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Postgres.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Postgres.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Postgres.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Postgres.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Postgres.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Postgres.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1699,6 +1745,7 @@ Default: 3</li>
<dd id="Postgres.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
<dd id="Postgres.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Postgres.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Postgres.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Postgres.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Postgres.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Postgres.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1716,6 +1763,7 @@ Default: 3</li>
<dd id="Postgres.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Postgres.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Postgres.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Postgres.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Postgres.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Postgres.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Postgres.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1733,11 +1781,14 @@ Default: 3</li>
<dd id="Postgres.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Postgres.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Postgres.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Postgres.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Postgres.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="Postgres.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Postgres.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Postgres.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Postgres.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Postgres.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="Postgres.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Postgres.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Postgres.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Postgres.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -1771,85 +1822,94 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Postgres.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator-342"><a href="#Postgres.Generator-342"><span class="linenos">342</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-343"><a href="#Postgres.Generator-343"><span class="linenos">343</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-344"><a href="#Postgres.Generator-344"><span class="linenos">344</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-345"><a href="#Postgres.Generator-345"><span class="linenos">345</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-346"><a href="#Postgres.Generator-346"><span class="linenos">346</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-347"><a href="#Postgres.Generator-347"><span class="linenos">347</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-348"><a href="#Postgres.Generator-348"><span class="linenos">348</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Postgres.Generator-349"><a href="#Postgres.Generator-349"><span class="linenos">349</span></a>
-</span><span id="Postgres.Generator-350"><a href="#Postgres.Generator-350"><span class="linenos">350</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-351"><a href="#Postgres.Generator-351"><span class="linenos">351</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Postgres.Generator-352"><a href="#Postgres.Generator-352"><span class="linenos">352</span></a> <span class="n">exp</span><span 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-353"><a href="#Postgres.Generator-353"><span class="linenos">353</span></a> <span class="n">exp</span><span 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-354"><a href="#Postgres.Generator-354"><span class="linenos">354</span></a> <span class="n">exp</span><span 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-355"><a href="#Postgres.Generator-355"><span class="linenos">355</span></a> <span class="n">exp</span><span 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-356"><a href="#Postgres.Generator-356"><span class="linenos">356</span></a> <span class="n">exp</span><span 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-357"><a href="#Postgres.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span 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-358"><a href="#Postgres.Generator-358"><span class="linenos">358</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-359"><a href="#Postgres.Generator-359"><span class="linenos">359</span></a>
-</span><span id="Postgres.Generator-360"><a href="#Postgres.Generator-360"><span class="linenos">360</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-361"><a href="#Postgres.Generator-361"><span class="linenos">361</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Postgres.Generator-362"><a href="#Postgres.Generator-362"><span class="linenos">362</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-363"><a href="#Postgres.Generator-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
-</span><span id="Postgres.Generator-364"><a href="#Postgres.Generator-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-365"><a href="#Postgres.Generator-365"><span class="linenos">365</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-366"><a href="#Postgres.Generator-366"><span class="linenos">366</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-367"><a href="#Postgres.Generator-367"><span class="linenos">367</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-368"><a href="#Postgres.Generator-368"><span class="linenos">368</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-369"><a href="#Postgres.Generator-369"><span class="linenos">369</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-370"><a href="#Postgres.Generator-370"><span class="linenos">370</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-371"><a href="#Postgres.Generator-371"><span class="linenos">371</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-372"><a href="#Postgres.Generator-372"><span class="linenos">372</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-373"><a href="#Postgres.Generator-373"><span class="linenos">373</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-374"><a href="#Postgres.Generator-374"><span class="linenos">374</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-375"><a href="#Postgres.Generator-375"><span class="linenos">375</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-376"><a href="#Postgres.Generator-376"><span class="linenos">376</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-377"><a href="#Postgres.Generator-377"><span class="linenos">377</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-378"><a href="#Postgres.Generator-378"><span class="linenos">378</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-379"><a href="#Postgres.Generator-379"><span class="linenos">379</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-380"><a href="#Postgres.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-381"><a href="#Postgres.Generator-381"><span class="linenos">381</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-382"><a href="#Postgres.Generator-382"><span class="linenos">382</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-383"><a href="#Postgres.Generator-383"><span class="linenos">383</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-384"><a href="#Postgres.Generator-384"><span class="linenos">384</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-385"><a href="#Postgres.Generator-385"><span class="linenos">385</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">_remove_target_from_merge</span><span class="p">]),</span>
-</span><span id="Postgres.Generator-386"><a href="#Postgres.Generator-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-387"><a href="#Postgres.Generator-387"><span class="linenos">387</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-388"><a href="#Postgres.Generator-388"><span class="linenos">388</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-389"><a href="#Postgres.Generator-389"><span class="linenos">389</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-390"><a href="#Postgres.Generator-390"><span class="linenos">390</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-391"><a href="#Postgres.Generator-391"><span class="linenos">391</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-392"><a href="#Postgres.Generator-392"><span class="linenos">392</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-393"><a href="#Postgres.Generator-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-394"><a href="#Postgres.Generator-394"><span class="linenos">394</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-395"><a href="#Postgres.Generator-395"><span class="linenos">395</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-396"><a href="#Postgres.Generator-396"><span class="linenos">396</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-397"><a href="#Postgres.Generator-397"><span class="linenos">397</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-398"><a href="#Postgres.Generator-398"><span class="linenos">398</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-399"><a href="#Postgres.Generator-399"><span class="linenos">399</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;postgres&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-400"><a href="#Postgres.Generator-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-401"><a href="#Postgres.Generator-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-402"><a href="#Postgres.Generator-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-403"><a href="#Postgres.Generator-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-404"><a href="#Postgres.Generator-404"><span class="linenos">404</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-405"><a href="#Postgres.Generator-405"><span class="linenos">405</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-406"><a href="#Postgres.Generator-406"><span class="linenos">406</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-407"><a href="#Postgres.Generator-407"><span class="linenos">407</span></a>
-</span><span id="Postgres.Generator-408"><a href="#Postgres.Generator-408"><span class="linenos">408</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-409"><a href="#Postgres.Generator-409"><span class="linenos">409</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Postgres.Generator-410"><a href="#Postgres.Generator-410"><span class="linenos">410</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-411"><a href="#Postgres.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Postgres.Generator-412"><a href="#Postgres.Generator-412"><span class="linenos">412</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-413"><a href="#Postgres.Generator-413"><span class="linenos">413</span></a>
-</span><span id="Postgres.Generator-414"><a href="#Postgres.Generator-414"><span class="linenos">414</span></a> <span class="k">def</span> <span class="nf">bracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator-415"><a href="#Postgres.Generator-415"><span class="linenos">415</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="Postgres.Generator-416"><a href="#Postgres.Generator-416"><span class="linenos">416</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="Postgres.Generator-417"><a href="#Postgres.Generator-417"><span class="linenos">417</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="Postgres.Generator-418"><a href="#Postgres.Generator-418"><span class="linenos">418</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Postgres.Generator-419"><a href="#Postgres.Generator-419"><span class="linenos">419</span></a>
-</span><span id="Postgres.Generator-420"><a href="#Postgres.Generator-420"><span class="linenos">420</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator-346"><a href="#Postgres.Generator-346"><span class="linenos">346</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-347"><a href="#Postgres.Generator-347"><span class="linenos">347</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-348"><a href="#Postgres.Generator-348"><span class="linenos">348</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-349"><a href="#Postgres.Generator-349"><span class="linenos">349</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-350"><a href="#Postgres.Generator-350"><span class="linenos">350</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-351"><a href="#Postgres.Generator-351"><span class="linenos">351</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-352"><a href="#Postgres.Generator-352"><span class="linenos">352</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-353"><a href="#Postgres.Generator-353"><span class="linenos">353</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Postgres.Generator-354"><a href="#Postgres.Generator-354"><span class="linenos">354</span></a>
+</span><span id="Postgres.Generator-355"><a href="#Postgres.Generator-355"><span class="linenos">355</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-356"><a href="#Postgres.Generator-356"><span class="linenos">356</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Postgres.Generator-357"><a href="#Postgres.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span 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-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="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-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="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-360"><a href="#Postgres.Generator-360"><span class="linenos">360</span></a> <span class="n">exp</span><span 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-361"><a href="#Postgres.Generator-361"><span class="linenos">361</span></a> <span class="n">exp</span><span 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-362"><a href="#Postgres.Generator-362"><span class="linenos">362</span></a> <span class="n">exp</span><span 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-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">TRANSFORMS</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">TRANSFORMS</span><span class="p">,</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">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</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">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-369"><a href="#Postgres.Generator-369"><span class="linenos">369</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-370"><a href="#Postgres.Generator-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
+</span><span id="Postgres.Generator-371"><a href="#Postgres.Generator-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-372"><a href="#Postgres.Generator-372"><span class="linenos">372</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-373"><a href="#Postgres.Generator-373"><span class="linenos">373</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-374"><a href="#Postgres.Generator-374"><span class="linenos">374</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-375"><a href="#Postgres.Generator-375"><span class="linenos">375</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-376"><a href="#Postgres.Generator-376"><span class="linenos">376</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-377"><a href="#Postgres.Generator-377"><span class="linenos">377</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-378"><a href="#Postgres.Generator-378"><span class="linenos">378</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-379"><a href="#Postgres.Generator-379"><span class="linenos">379</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-380"><a href="#Postgres.Generator-380"><span class="linenos">380</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-381"><a href="#Postgres.Generator-381"><span class="linenos">381</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-382"><a href="#Postgres.Generator-382"><span class="linenos">382</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-383"><a href="#Postgres.Generator-383"><span class="linenos">383</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-384"><a href="#Postgres.Generator-384"><span class="linenos">384</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-385"><a href="#Postgres.Generator-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-386"><a href="#Postgres.Generator-386"><span class="linenos">386</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-387"><a href="#Postgres.Generator-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-388"><a href="#Postgres.Generator-388"><span class="linenos">388</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-389"><a href="#Postgres.Generator-389"><span class="linenos">389</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-390"><a href="#Postgres.Generator-390"><span class="linenos">390</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-391"><a href="#Postgres.Generator-391"><span class="linenos">391</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-392"><a href="#Postgres.Generator-392"><span class="linenos">392</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">_remove_target_from_merge</span><span class="p">]),</span>
+</span><span id="Postgres.Generator-393"><a href="#Postgres.Generator-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-394"><a href="#Postgres.Generator-394"><span class="linenos">394</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-395"><a href="#Postgres.Generator-395"><span class="linenos">395</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-396"><a href="#Postgres.Generator-396"><span class="linenos">396</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-397"><a href="#Postgres.Generator-397"><span class="linenos">397</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-398"><a href="#Postgres.Generator-398"><span class="linenos">398</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-399"><a href="#Postgres.Generator-399"><span class="linenos">399</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-400"><a href="#Postgres.Generator-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-401"><a href="#Postgres.Generator-401"><span class="linenos">401</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-402"><a href="#Postgres.Generator-402"><span class="linenos">402</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-403"><a href="#Postgres.Generator-403"><span class="linenos">403</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-404"><a href="#Postgres.Generator-404"><span class="linenos">404</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-405"><a href="#Postgres.Generator-405"><span class="linenos">405</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-406"><a href="#Postgres.Generator-406"><span class="linenos">406</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;postgres&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-407"><a href="#Postgres.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-408"><a href="#Postgres.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-409"><a href="#Postgres.Generator-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-410"><a href="#Postgres.Generator-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-411"><a href="#Postgres.Generator-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="Postgres.Generator-412"><a href="#Postgres.Generator-412"><span class="linenos">412</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-413"><a href="#Postgres.Generator-413"><span class="linenos">413</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-414"><a href="#Postgres.Generator-414"><span class="linenos">414</span></a>
+</span><span id="Postgres.Generator-415"><a href="#Postgres.Generator-415"><span class="linenos">415</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-416"><a href="#Postgres.Generator-416"><span class="linenos">416</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Postgres.Generator-417"><a href="#Postgres.Generator-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-418"><a href="#Postgres.Generator-418"><span class="linenos">418</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-419"><a href="#Postgres.Generator-419"><span class="linenos">419</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-420"><a href="#Postgres.Generator-420"><span class="linenos">420</span></a>
+</span><span id="Postgres.Generator-421"><a href="#Postgres.Generator-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">bracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator-422"><a href="#Postgres.Generator-422"><span class="linenos">422</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="Postgres.Generator-423"><a href="#Postgres.Generator-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="Postgres.Generator-424"><a href="#Postgres.Generator-424"><span class="linenos">424</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="Postgres.Generator-425"><a href="#Postgres.Generator-425"><span class="linenos">425</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Postgres.Generator-426"><a href="#Postgres.Generator-426"><span class="linenos">426</span></a>
+</span><span id="Postgres.Generator-427"><a href="#Postgres.Generator-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Postgres.Generator-428"><a href="#Postgres.Generator-428"><span class="linenos">428</span></a>
+</span><span id="Postgres.Generator-429"><a href="#Postgres.Generator-429"><span class="linenos">429</span></a> <span class="k">def</span> <span class="nf">matchagainst_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator-430"><a href="#Postgres.Generator-430"><span class="linenos">430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Postgres.Generator-431"><a href="#Postgres.Generator-431"><span class="linenos">431</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="Postgres.Generator-432"><a href="#Postgres.Generator-432"><span class="linenos">432</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Postgres.Generator-433"><a href="#Postgres.Generator-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -1952,6 +2012,18 @@ Default: True</li>
</div>
+ <div id="Postgres.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Postgres.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="Postgres.Generator.PARAMETER_TOKEN" class="classattr">
<div class="attr variable">
<span class="name">PARAMETER_TOKEN</span> =
@@ -1981,7 +2053,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Postgres.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function any_value_to_max_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1994,7 +2066,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Postgres.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -2014,13 +2086,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Postgres.Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.bracket_sql-414"><a href="#Postgres.Generator.bracket_sql-414"><span class="linenos">414</span></a> <span class="k">def</span> <span class="nf">bracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator.bracket_sql-415"><a href="#Postgres.Generator.bracket_sql-415"><span class="linenos">415</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="Postgres.Generator.bracket_sql-416"><a href="#Postgres.Generator.bracket_sql-416"><span class="linenos">416</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="Postgres.Generator.bracket_sql-417"><a href="#Postgres.Generator.bracket_sql-417"><span class="linenos">417</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="Postgres.Generator.bracket_sql-418"><a href="#Postgres.Generator.bracket_sql-418"><span class="linenos">418</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Postgres.Generator.bracket_sql-419"><a href="#Postgres.Generator.bracket_sql-419"><span class="linenos">419</span></a>
-</span><span id="Postgres.Generator.bracket_sql-420"><a href="#Postgres.Generator.bracket_sql-420"><span class="linenos">420</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.bracket_sql-421"><a href="#Postgres.Generator.bracket_sql-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">bracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator.bracket_sql-422"><a href="#Postgres.Generator.bracket_sql-422"><span class="linenos">422</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="Postgres.Generator.bracket_sql-423"><a href="#Postgres.Generator.bracket_sql-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="Postgres.Generator.bracket_sql-424"><a href="#Postgres.Generator.bracket_sql-424"><span class="linenos">424</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="Postgres.Generator.bracket_sql-425"><a href="#Postgres.Generator.bracket_sql-425"><span class="linenos">425</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Postgres.Generator.bracket_sql-426"><a href="#Postgres.Generator.bracket_sql-426"><span class="linenos">426</span></a>
+</span><span id="Postgres.Generator.bracket_sql-427"><a href="#Postgres.Generator.bracket_sql-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2029,6 +2101,28 @@ Default: True</li>
</div>
+ <div id="Postgres.Generator.matchagainst_sql" class="classattr">
+ <input id="Postgres.Generator.matchagainst_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">matchagainst_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#MatchAgainst">sqlglot.expressions.MatchAgainst</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Postgres.Generator.matchagainst_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Postgres.Generator.matchagainst_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.matchagainst_sql-429"><a href="#Postgres.Generator.matchagainst_sql-429"><span class="linenos">429</span></a> <span class="k">def</span> <span class="nf">matchagainst_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator.matchagainst_sql-430"><a href="#Postgres.Generator.matchagainst_sql-430"><span class="linenos">430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Postgres.Generator.matchagainst_sql-431"><a href="#Postgres.Generator.matchagainst_sql-431"><span class="linenos">431</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="Postgres.Generator.matchagainst_sql-432"><a href="#Postgres.Generator.matchagainst_sql-432"><span class="linenos">432</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Postgres.Generator.matchagainst_sql-433"><a href="#Postgres.Generator.matchagainst_sql-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
+</span></pre></div>
+
+
+
+
+ </div>
<div id="Postgres.Generator.SELECT_KINDS" class="classattr">
<div class="attr variable">
<span class="name">SELECT_KINDS</span><span class="annotation">: Tuple[str, ...]</span> =
@@ -2103,26 +2197,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Postgres.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.can_identify-253"><a href="#Postgres.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Postgres.Generator.can_identify-254"><a href="#Postgres.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Postgres.Generator.can_identify-255"><a href="#Postgres.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Postgres.Generator.can_identify-256"><a href="#Postgres.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Postgres.Generator.can_identify-257"><a href="#Postgres.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Postgres.Generator.can_identify-258"><a href="#Postgres.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Postgres.Generator.can_identify-259"><a href="#Postgres.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Postgres.Generator.can_identify-260"><a href="#Postgres.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Postgres.Generator.can_identify-261"><a href="#Postgres.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Postgres.Generator.can_identify-262"><a href="#Postgres.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Postgres.Generator.can_identify-263"><a href="#Postgres.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Postgres.Generator.can_identify-264"><a href="#Postgres.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Postgres.Generator.can_identify-265"><a href="#Postgres.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Postgres.Generator.can_identify-266"><a href="#Postgres.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Postgres.Generator.can_identify-267"><a href="#Postgres.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator.can_identify-268"><a href="#Postgres.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Postgres.Generator.can_identify-269"><a href="#Postgres.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Postgres.Generator.can_identify-270"><a href="#Postgres.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.can_identify-256"><a href="#Postgres.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Postgres.Generator.can_identify-257"><a href="#Postgres.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Postgres.Generator.can_identify-258"><a href="#Postgres.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Postgres.Generator.can_identify-259"><a href="#Postgres.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Postgres.Generator.can_identify-260"><a href="#Postgres.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Postgres.Generator.can_identify-261"><a href="#Postgres.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Postgres.Generator.can_identify-262"><a href="#Postgres.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Postgres.Generator.can_identify-263"><a href="#Postgres.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Postgres.Generator.can_identify-264"><a href="#Postgres.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Postgres.Generator.can_identify-265"><a href="#Postgres.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Postgres.Generator.can_identify-266"><a href="#Postgres.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Postgres.Generator.can_identify-267"><a href="#Postgres.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Postgres.Generator.can_identify-268"><a href="#Postgres.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Postgres.Generator.can_identify-269"><a href="#Postgres.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Postgres.Generator.can_identify-270"><a href="#Postgres.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Postgres.Generator.can_identify-271"><a href="#Postgres.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Postgres.Generator.can_identify-272"><a href="#Postgres.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator.can_identify-272"><a href="#Postgres.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Postgres.Generator.can_identify-273"><a href="#Postgres.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Postgres.Generator.can_identify-274"><a href="#Postgres.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Postgres.Generator.can_identify-275"><a href="#Postgres.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2193,26 +2287,14 @@ Default: True</li>
</div>
- <div id="Postgres.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Postgres.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Postgres.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Postgres.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Postgres.Tokenizer">sqlglot.dialects.postgres.Postgres.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Postgres.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Postgres.Generator.TOKENIZER_CLASS"></a>
@@ -2313,7 +2395,9 @@ Default: True</li>
<dd id="Postgres.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Postgres.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Postgres.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Postgres.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="Postgres.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Postgres.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Postgres.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Postgres.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Postgres.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -2357,6 +2441,7 @@ Default: True</li>
<dd id="Postgres.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Postgres.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Postgres.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Postgres.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Postgres.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Postgres.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Postgres.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2375,7 +2460,7 @@ Default: True</li>
<dd id="Postgres.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Postgres.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Postgres.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Postgres.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Postgres.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Postgres.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Postgres.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Postgres.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -2420,6 +2505,7 @@ Default: True</li>
<dd id="Postgres.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Postgres.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Postgres.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Postgres.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Postgres.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Postgres.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Postgres.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -2428,6 +2514,8 @@ Default: True</li>
<dd id="Postgres.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Postgres.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Postgres.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Postgres.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Postgres.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Postgres.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Postgres.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Postgres.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2484,7 +2572,6 @@ Default: True</li>
<dd id="Postgres.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Postgres.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Postgres.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
- <dd id="Postgres.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Postgres.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
<dd id="Postgres.Generator.jsonobject_sql" class="function"><a href="../generator.html#Generator.jsonobject_sql">jsonobject_sql</a></dd>
<dd id="Postgres.Generator.openjsoncolumndef_sql" class="function"><a href="../generator.html#Generator.openjsoncolumndef_sql">openjsoncolumndef_sql</a></dd>
@@ -2586,6 +2673,8 @@ Default: True</li>
<dd id="Postgres.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Postgres.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Postgres.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Postgres.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Postgres.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/presto.html b/docs/sqlglot/dialects/presto.html
index b24fcb1..9e1c1be 100644
--- a/docs/sqlglot/dialects/presto.html
+++ b/docs/sqlglot/dialects/presto.html
@@ -70,6 +70,9 @@
<a class="variable" href="#Presto.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Presto.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Presto.Parser.INDEX_OFFSET">INDEX_OFFSET</a>
</li>
<li>
@@ -115,6 +118,12 @@
<a class="variable" href="#Presto.Generator.IS_BOOL_ALLOWED">IS_BOOL_ALLOWED</a>
</li>
<li>
+ <a class="variable" href="#Presto.Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Presto.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#Presto.Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a>
</li>
<li>
@@ -172,10 +181,7 @@
<a class="variable" href="#Presto.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Presto.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Presto.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Presto.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Presto.Generator.BIT_START">BIT_START</a>
@@ -309,346 +315,376 @@
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;APPROX_DISTINCT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span 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">accuracy</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</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-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">sql</span> <span class="o">=</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-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamptz&quot;</span><span class="p">):</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</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"> WITH TIME ZONE&quot;</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">return</span> <span class="n">sql</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><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="k">def</span> <span class="nf">_explode_to_unnest_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</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="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-44"><a href="#L-44"><span class="linenos"> 44</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-45"><a href="#L-45"><span class="linenos"> 45</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-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">],</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</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-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">ordinality</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">Posexplode</span><span class="p">),</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="p">),</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;cross&quot;</span><span class="p">,</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="p">)</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="p">)</span>
-</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">lateral_sql</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><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="k">def</span> <span class="nf">_initcap_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">Initcap</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;(\w)(\w*)&quot;</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;REGEXP_REPLACE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, &#39;</span><span class="si">{</span><span class="n">regex</span><span class="si">}</span><span class="s2">&#39;, x -&gt; UPPER(x[1]) || LOWER(x[2]))&quot;</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</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">_explode_to_unnest_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="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="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-37"><a href="#L-37"><span class="linenos"> 37</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-38"><a href="#L-38"><span class="linenos"> 38</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-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">],</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</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-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">ordinality</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">Posexplode</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">kind</span><span class="o">=</span><span class="s2">&quot;cross&quot;</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 class="p">)</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">lateral_sql</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><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">_initcap_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">Initcap</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;(\w)(\w*)&quot;</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REGEXP_REPLACE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, &#39;</span><span class="si">{</span><span class="n">regex</span><span class="si">}</span><span class="s2">&#39;, x -&gt; UPPER(x[1]) || LOWER(x[2]))&quot;</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">def</span> <span class="nf">_no_sort_array</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-57"><a href="#L-57"><span class="linenos"> 57</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-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">comparator</span> <span class="o">=</span> <span class="s2">&quot;(a, b) -&gt; CASE WHEN a &lt; b THEN 1 WHEN a &gt; b THEN -1 ELSE 0 END&quot;</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">comparator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <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;ARRAY_SORT&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">comparator</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="k">def</span> <span class="nf">_no_sort_array</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-64"><a href="#L-64"><span class="linenos"> 64</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-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">comparator</span> <span class="o">=</span> <span class="s2">&quot;(a, b) -&gt; CASE WHEN a &lt; b THEN 1 WHEN a &gt; b THEN -1 ELSE 0 END&quot;</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">comparator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <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;ARRAY_SORT&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">comparator</span><span class="p">)</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</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">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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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">Property</span><span class="p">):</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">columns</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;&#39;</span><span class="si">{</span><span class="n">c</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">for</span> <span class="n">c</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-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;ARRAY[</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">:</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</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">Schema</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">schema</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">Property</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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">expression</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">schema</span><span class="o">.</span><span class="n">expressions</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="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">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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="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">Property</span><span class="p">):</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">columns</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;&#39;</span><span class="si">{</span><span class="n">c</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">for</span> <span class="n">c</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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="n">columns</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><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">:</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</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">Schema</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 class="n">schema</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">Property</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">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">schema_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">_quantile_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">Quantile</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="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Presto does not support exact quantiles&quot;</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="sa">f</span><span class="s2">&quot;APPROX_PERCENTILE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">)</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><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">schema_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-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">_quantile_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">Quantile</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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;Presto does not support exact quantiles&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;APPROX_PERCENTILE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">)</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 class="k">def</span> <span class="nf">_str_to_time_sql</span><span class="p">(</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</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">StrToDate</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="sa">f</span><span class="s2">&quot;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">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><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">expression</span><span class="p">)</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">_str_to_time_sql</span><span class="p">(</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="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="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="sa">f</span><span class="s2">&quot;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">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><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">expression</span><span class="p">)</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">_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="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-90"><a href="#L-90"><span class="linenos"> 90</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-91"><a href="#L-91"><span class="linenos"> 91</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">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">Presto</span><span class="o">.</span><span class="n">DATE_FORMAT</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">cast</span><span class="p">(</span><span class="n">_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="s2">&quot;DATE&quot;</span><span class="p">)</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;presto&quot;</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">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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;TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;DATE&quot;</span><span class="p">)</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;presto&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><span id="L-96"><a href="#L-96"><span class="linenos"> 96</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="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-97"><a href="#L-97"><span class="linenos"> 97</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-98"><a href="#L-98"><span class="linenos"> 98</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">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">Presto</span><span class="o">.</span><span class="n">DATE_FORMAT</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="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">_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="s2">&quot;DATE&quot;</span><span class="p">)</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;presto&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="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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;TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;DATE&quot;</span><span class="p">)</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;presto&quot;</span><span class="p">)</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</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-97"><a href="#L-97"><span class="linenos"> 97</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-98"><a href="#L-98"><span class="linenos"> 98</span></a>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="ow">not</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">CurrentDate</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">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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;TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;DATE&quot;</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><span id="L-103"><a href="#L-103"><span class="linenos">103</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-104"><a href="#L-104"><span class="linenos">104</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-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">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">exp</span><span class="o">.</span><span class="n">CurrentDate</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="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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;TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;DATE&quot;</span><span class="p">)</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="s2">&quot;DATE_ADD&quot;</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">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><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</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="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><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="s2">&quot;DATE_ADD&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">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><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">this</span><span class="p">,</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <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><span id="L-117"><a href="#L-117"><span class="linenos">117</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</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-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">_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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</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">seq_get</span><span 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-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-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="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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="p">)</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="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-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">ApproxQuantile</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 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 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-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="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-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><span id="L-132"><a href="#L-132"><span class="linenos">132</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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-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">UnixToTime</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">seq_get</span><span 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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</span></a> <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">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-140"><a href="#L-140"><span class="linenos">140</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 class="n">this</span><span class="o">=</span><span class="n">seq_get</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">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-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">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-120"><a href="#L-120"><span class="linenos">120</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">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 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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="p">)</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span 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-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><span id="L-125"><a href="#L-125"><span class="linenos">125</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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-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">UnixToTime</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="n">seq_get</span><span 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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</span></a> <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="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-133"><a href="#L-133"><span class="linenos">133</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 class="n">this</span><span class="o">=</span><span class="n">seq_get</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">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-134"><a href="#L-134"><span class="linenos">134</span></a>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">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-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><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a><span class="k">def</span> <span class="nf">_parse_element_at</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</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">seq_get</span><span 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-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">index</span> <span class="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-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span 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">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">[</span><span class="n">index</span><span class="p">],</span> <span class="o">-</span><span class="mi">1</span><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><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="k">def</span> <span class="nf">_parse_element_at</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">index</span> <span class="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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</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 class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span 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">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">[</span><span class="n">index</span><span class="p">],</span> <span class="o">-</span><span class="mi">1</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><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="k">def</span> <span class="nf">_unnest_sequence</span><span 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-153"><a href="#L-153"><span class="linenos">153</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">Table</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">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">GenerateSeries</span><span class="p">):</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</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">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><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">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">alias</span><span class="o">=</span><span class="s2">&quot;_u&quot;</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">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-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">unnest</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-145"><a href="#L-145"><span class="linenos">145</span></a><span class="k">def</span> <span class="nf">_unnest_sequence</span><span 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-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">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><span id="L-147"><a href="#L-147"><span class="linenos">147</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">GenerateSeries</span><span class="p">):</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</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">expression</span><span class="o">.</span><span class="n">this</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="n">expression</span><span class="o">.</span><span class="n">alias</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">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">alias</span><span class="o">=</span><span class="s2">&quot;_u&quot;</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">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-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">unnest</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="k">def</span> <span class="nf">_first_last_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">First</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Last</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> Trino doesn&#39;t support FIRST / LAST as functions, but they&#39;re valid in the context</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> of MATCH_RECOGNIZE, so we need to preserve them in that case. In all other cases</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd"> they&#39;re converted into an ARBITRARY call.</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><span id="L-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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><span id="L-167"><a href="#L-167"><span class="linenos">167</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><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> Reference: https://trino.io/docs/current/sql/match-recognize.html#logical-navigation-functions</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</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">find_ancestor</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">):</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&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-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="c1"># https://github.com/trinodb/trino/issues/17</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/12289</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="c1"># https://github.com/prestodb/presto/issues/2863</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">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-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-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;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-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="s2">&quot;IPADDRESS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;IPPREFIX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <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="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-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;BITWISE_AND&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;BITWISE_NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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="n">seq_get</span><span 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-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;BITWISE_OR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">&quot;BITWISE_XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-194"><a href="#L-194"><span class="linenos">194</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-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="p">),</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-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 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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">:</span> <span class="n">_parse_element_at</span><span class="p">,</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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-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 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-212"><a href="#L-212"><span class="linenos">212</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-213"><a href="#L-213"><span class="linenos">213</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">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">group</span><span class="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-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="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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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">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 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-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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><span id="L-174"><a href="#L-174"><span class="linenos">174</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><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/17</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/12289</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="c1"># https://github.com/prestodb/presto/issues/2863</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">KEYWORDS</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">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-185"><a href="#L-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="L-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">&quot;IPADDRESS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;IPPREFIX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</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><span id="L-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="s2">&quot;ARBITRARY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="s2">&quot;BITWISE_AND&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">&quot;BITWISE_NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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="n">seq_get</span><span 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-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">&quot;BITWISE_OR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;BITWISE_XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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="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-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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 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-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">:</span> <span class="n">_parse_element_at</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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-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;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-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</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-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="p">}</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-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="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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</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-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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="p">}</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span 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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">exp</span><span 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-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">exp</span><span 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-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">exp</span><span 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-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">exp</span><span 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-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">exp</span><span 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-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">exp</span><span 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-250"><a href="#L-250"><span class="linenos">250</span></a> <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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="o">**</span><span class="n">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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</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-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="p">:</span> <span class="n">_datatype_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">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-270"><a href="#L-270"><span class="linenos">270</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-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">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-273"><a href="#L-273"><span class="linenos">273</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-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 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-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</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-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="s2">&quot;ELEMENT_AT&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">seq_get</span><span class="p">(</span><span class="n">apply_index_offset</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">expressions</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-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="p">),</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="p">[</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="p">]</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span 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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</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-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</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-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-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><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">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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</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-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="p">),</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span 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">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-336"><a href="#L-336"><span class="linenos">336</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-337"><a href="#L-337"><span class="linenos">337</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-338"><a href="#L-338"><span class="linenos">338</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-339"><a href="#L-339"><span class="linenos">339</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-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">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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</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-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;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-345"><a href="#L-345"><span class="linenos">345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</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-350"><a href="#L-350"><span class="linenos">350</span></a>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</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">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</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">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <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-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">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</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;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-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-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">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 class="n">group</span><span class="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-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;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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">seq_get</span><span 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">seq_get</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="n">replacement</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="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-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="p">),</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;ROW&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-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</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;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-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 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 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-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="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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-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">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-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">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">NVL2_SUPPORTED</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">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-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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-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="n">TYPE_MAPPING</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 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-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">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&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">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&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">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&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="n">exp</span><span 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-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">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</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">TRANSFORMS</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">TRANSFORMS</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">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</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-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</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-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-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 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-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="p">),</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="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-296"><a href="#L-296"><span class="linenos">296</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-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="k">lambda</span> <span class="bp">self</span><span 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-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;DATE_ADD&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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="p">),</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</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-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</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-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</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-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;ELEMENT_AT&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">seq_get</span><span class="p">(</span><span class="n">apply_index_offset</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">expressions</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-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 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-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="p">[</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</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-332"><a href="#L-332"><span class="linenos">332</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-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="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-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">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&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">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-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
+</span><span id="L-339"><a href="#L-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="L-340"><a href="#L-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="k">lambda</span> <span class="bp">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-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&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">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</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">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</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-345"><a href="#L-345"><span class="linenos">345</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-346"><a href="#L-346"><span class="linenos">346</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-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</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-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">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</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-352"><a href="#L-352"><span class="linenos">352</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-353"><a href="#L-353"><span class="linenos">353</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-354"><a href="#L-354"><span class="linenos">354</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-355"><a href="#L-355"><span class="linenos">355</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-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="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&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">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-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="L-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 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="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-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</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-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">interval_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">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-372"><a href="#L-372"><span class="linenos">372</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-373"><a href="#L-373"><span class="linenos">373</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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</span></a>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</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-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</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-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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">target_type</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><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">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-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">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="L-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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="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">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-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="p">]</span>
</span></pre></div>
@@ -664,218 +700,241 @@
</div>
<a class="headerlink" href="#Presto"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto-164"><a href="#Presto-164"><span class="linenos">164</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-165"><a href="#Presto-165"><span class="linenos">165</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Presto-166"><a href="#Presto-166"><span class="linenos">166</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-167"><a href="#Presto-167"><span class="linenos">167</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><span id="Presto-168"><a href="#Presto-168"><span class="linenos">168</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><span id="Presto-169"><a href="#Presto-169"><span class="linenos">169</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Presto-170"><a href="#Presto-170"><span class="linenos">170</span></a>
-</span><span id="Presto-171"><a href="#Presto-171"><span class="linenos">171</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/17</span>
-</span><span id="Presto-172"><a href="#Presto-172"><span class="linenos">172</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/12289</span>
-</span><span id="Presto-173"><a href="#Presto-173"><span class="linenos">173</span></a> <span class="c1"># https://github.com/prestodb/presto/issues/2863</span>
-</span><span id="Presto-174"><a href="#Presto-174"><span class="linenos">174</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto-175"><a href="#Presto-175"><span class="linenos">175</span></a>
-</span><span id="Presto-176"><a href="#Presto-176"><span class="linenos">176</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-177"><a href="#Presto-177"><span class="linenos">177</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-178"><a href="#Presto-178"><span class="linenos">178</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-179"><a href="#Presto-179"><span class="linenos">179</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-180"><a href="#Presto-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="Presto-181"><a href="#Presto-181"><span class="linenos">181</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-182"><a href="#Presto-182"><span class="linenos">182</span></a> <span class="s2">&quot;IPADDRESS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
-</span><span id="Presto-183"><a href="#Presto-183"><span class="linenos">183</span></a> <span class="s2">&quot;IPPREFIX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
-</span><span id="Presto-184"><a href="#Presto-184"><span class="linenos">184</span></a> <span class="p">}</span>
-</span><span id="Presto-185"><a href="#Presto-185"><span class="linenos">185</span></a>
-</span><span id="Presto-186"><a href="#Presto-186"><span class="linenos">186</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-187"><a href="#Presto-187"><span class="linenos">187</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-188"><a href="#Presto-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">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Presto-189"><a href="#Presto-189"><span class="linenos">189</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-190"><a href="#Presto-190"><span class="linenos">190</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-191"><a href="#Presto-191"><span class="linenos">191</span></a> <span class="s2">&quot;BITWISE_AND&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto-192"><a href="#Presto-192"><span class="linenos">192</span></a> <span class="s2">&quot;BITWISE_NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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="n">seq_get</span><span 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-193"><a href="#Presto-193"><span class="linenos">193</span></a> <span class="s2">&quot;BITWISE_OR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto-194"><a href="#Presto-194"><span class="linenos">194</span></a> <span class="s2">&quot;BITWISE_XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto-195"><a href="#Presto-195"><span class="linenos">195</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-196"><a href="#Presto-196"><span class="linenos">196</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-197"><a href="#Presto-197"><span class="linenos">197</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-198"><a href="#Presto-198"><span class="linenos">198</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Presto-199"><a href="#Presto-199"><span class="linenos">199</span></a> <span class="p">),</span>
-</span><span id="Presto-200"><a href="#Presto-200"><span class="linenos">200</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-201"><a href="#Presto-201"><span class="linenos">201</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="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 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-204"><a href="#Presto-204"><span class="linenos">204</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-205"><a href="#Presto-205"><span class="linenos">205</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-206"><a href="#Presto-206"><span class="linenos">206</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">:</span> <span class="n">_parse_element_at</span><span class="p">,</span>
-</span><span id="Presto-207"><a href="#Presto-207"><span class="linenos">207</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-208"><a href="#Presto-208"><span class="linenos">208</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-209"><a href="#Presto-209"><span class="linenos">209</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-210"><a href="#Presto-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">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-211"><a href="#Presto-211"><span class="linenos">211</span></a> <span class="p">),</span>
-</span><span id="Presto-212"><a href="#Presto-212"><span class="linenos">212</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-213"><a href="#Presto-213"><span class="linenos">213</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="Presto-214"><a href="#Presto-214"><span class="linenos">214</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">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">group</span><span class="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-215"><a href="#Presto-215"><span class="linenos">215</span></a> <span class="p">),</span>
-</span><span id="Presto-216"><a href="#Presto-216"><span class="linenos">216</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-217"><a href="#Presto-217"><span class="linenos">217</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-218"><a href="#Presto-218"><span class="linenos">218</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">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 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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto-171"><a href="#Presto-171"><span class="linenos">171</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-172"><a href="#Presto-172"><span class="linenos">172</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Presto-173"><a href="#Presto-173"><span class="linenos">173</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-174"><a href="#Presto-174"><span class="linenos">174</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><span id="Presto-175"><a href="#Presto-175"><span class="linenos">175</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><span id="Presto-176"><a href="#Presto-176"><span class="linenos">176</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Presto-177"><a href="#Presto-177"><span class="linenos">177</span></a>
+</span><span id="Presto-178"><a href="#Presto-178"><span class="linenos">178</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/17</span>
+</span><span id="Presto-179"><a href="#Presto-179"><span class="linenos">179</span></a> <span class="c1"># https://github.com/trinodb/trino/issues/12289</span>
+</span><span id="Presto-180"><a href="#Presto-180"><span class="linenos">180</span></a> <span class="c1"># https://github.com/prestodb/presto/issues/2863</span>
+</span><span id="Presto-181"><a href="#Presto-181"><span class="linenos">181</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto-182"><a href="#Presto-182"><span class="linenos">182</span></a>
+</span><span id="Presto-183"><a href="#Presto-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="Presto-184"><a href="#Presto-184"><span class="linenos">184</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-185"><a href="#Presto-185"><span class="linenos">185</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-186"><a href="#Presto-186"><span class="linenos">186</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-187"><a href="#Presto-187"><span class="linenos">187</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="Presto-188"><a href="#Presto-188"><span class="linenos">188</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-189"><a href="#Presto-189"><span class="linenos">189</span></a> <span class="s2">&quot;IPADDRESS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
+</span><span id="Presto-190"><a href="#Presto-190"><span class="linenos">190</span></a> <span class="s2">&quot;IPPREFIX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
+</span><span id="Presto-191"><a href="#Presto-191"><span class="linenos">191</span></a> <span class="p">}</span>
+</span><span id="Presto-192"><a href="#Presto-192"><span class="linenos">192</span></a>
+</span><span id="Presto-193"><a href="#Presto-193"><span class="linenos">193</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-194"><a href="#Presto-194"><span class="linenos">194</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-195"><a href="#Presto-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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Presto-196"><a href="#Presto-196"><span class="linenos">196</span></a> <span class="s2">&quot;ARBITRARY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-197"><a href="#Presto-197"><span class="linenos">197</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-198"><a href="#Presto-198"><span class="linenos">198</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-199"><a href="#Presto-199"><span class="linenos">199</span></a> <span class="s2">&quot;BITWISE_AND&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto-200"><a href="#Presto-200"><span class="linenos">200</span></a> <span class="s2">&quot;BITWISE_NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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="n">seq_get</span><span 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-201"><a href="#Presto-201"><span class="linenos">201</span></a> <span class="s2">&quot;BITWISE_OR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto-202"><a href="#Presto-202"><span class="linenos">202</span></a> <span class="s2">&quot;BITWISE_XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto-203"><a href="#Presto-203"><span class="linenos">203</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-204"><a href="#Presto-204"><span class="linenos">204</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-205"><a href="#Presto-205"><span class="linenos">205</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-206"><a href="#Presto-206"><span class="linenos">206</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Presto-207"><a href="#Presto-207"><span class="linenos">207</span></a> <span class="p">),</span>
+</span><span id="Presto-208"><a href="#Presto-208"><span class="linenos">208</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-209"><a href="#Presto-209"><span class="linenos">209</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Presto-210"><a href="#Presto-210"><span class="linenos">210</span></a> <span class="p">),</span>
+</span><span id="Presto-211"><a href="#Presto-211"><span class="linenos">211</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-212"><a href="#Presto-212"><span class="linenos">212</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-213"><a href="#Presto-213"><span class="linenos">213</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-214"><a href="#Presto-214"><span class="linenos">214</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">:</span> <span class="n">_parse_element_at</span><span class="p">,</span>
+</span><span id="Presto-215"><a href="#Presto-215"><span class="linenos">215</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-216"><a href="#Presto-216"><span class="linenos">216</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-217"><a href="#Presto-217"><span class="linenos">217</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-218"><a href="#Presto-218"><span class="linenos">218</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-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;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-221"><a href="#Presto-221"><span class="linenos">221</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-222"><a href="#Presto-222"><span class="linenos">222</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-223"><a href="#Presto-223"><span class="linenos">223</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-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="p">}</span>
-</span><span id="Presto-226"><a href="#Presto-226"><span class="linenos">226</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-227"><a href="#Presto-227"><span class="linenos">227</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-228"><a href="#Presto-228"><span class="linenos">228</span></a>
-</span><span id="Presto-229"><a href="#Presto-229"><span class="linenos">229</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-230"><a href="#Presto-230"><span class="linenos">230</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-231"><a href="#Presto-231"><span class="linenos">231</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-232"><a href="#Presto-232"><span class="linenos">232</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-233"><a href="#Presto-233"><span class="linenos">233</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-234"><a href="#Presto-234"><span class="linenos">234</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-235"><a href="#Presto-235"><span class="linenos">235</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-236"><a href="#Presto-236"><span class="linenos">236</span></a>
-</span><span id="Presto-237"><a href="#Presto-237"><span class="linenos">237</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-238"><a href="#Presto-238"><span class="linenos">238</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Presto-239"><a href="#Presto-239"><span class="linenos">239</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-240"><a href="#Presto-240"><span class="linenos">240</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-241"><a href="#Presto-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="Presto-242"><a href="#Presto-242"><span class="linenos">242</span></a>
-</span><span id="Presto-243"><a href="#Presto-243"><span class="linenos">243</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-244"><a href="#Presto-244"><span class="linenos">244</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Presto-245"><a href="#Presto-245"><span class="linenos">245</span></a> <span class="n">exp</span><span 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-246"><a href="#Presto-246"><span class="linenos">246</span></a> <span class="n">exp</span><span 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-247"><a href="#Presto-247"><span class="linenos">247</span></a> <span class="n">exp</span><span 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-248"><a href="#Presto-248"><span class="linenos">248</span></a> <span class="n">exp</span><span 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-249"><a href="#Presto-249"><span class="linenos">249</span></a> <span class="n">exp</span><span 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-250"><a href="#Presto-250"><span class="linenos">250</span></a> <span class="n">exp</span><span 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-251"><a href="#Presto-251"><span class="linenos">251</span></a> <span class="p">}</span>
-</span><span id="Presto-252"><a href="#Presto-252"><span class="linenos">252</span></a>
-</span><span id="Presto-253"><a href="#Presto-253"><span class="linenos">253</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-254"><a href="#Presto-254"><span class="linenos">254</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Presto-255"><a href="#Presto-255"><span class="linenos">255</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-256"><a href="#Presto-256"><span class="linenos">256</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-257"><a href="#Presto-257"><span class="linenos">257</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-258"><a href="#Presto-258"><span class="linenos">258</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-259"><a href="#Presto-259"><span class="linenos">259</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-260"><a href="#Presto-260"><span class="linenos">260</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-261"><a href="#Presto-261"><span class="linenos">261</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-262"><a href="#Presto-262"><span class="linenos">262</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-263"><a href="#Presto-263"><span class="linenos">263</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-264"><a href="#Presto-264"><span class="linenos">264</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-265"><a href="#Presto-265"><span class="linenos">265</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-266"><a href="#Presto-266"><span class="linenos">266</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-267"><a href="#Presto-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto-268"><a href="#Presto-268"><span class="linenos">268</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-269"><a href="#Presto-269"><span class="linenos">269</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-270"><a href="#Presto-270"><span class="linenos">270</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-271"><a href="#Presto-271"><span class="linenos">271</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-272"><a href="#Presto-272"><span class="linenos">272</span></a> <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">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-274"><a href="#Presto-274"><span class="linenos">274</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-275"><a href="#Presto-275"><span class="linenos">275</span></a> <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">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-277"><a href="#Presto-277"><span class="linenos">277</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-278"><a href="#Presto-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto-279"><a href="#Presto-279"><span class="linenos">279</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-280"><a href="#Presto-280"><span class="linenos">280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto-281"><a href="#Presto-281"><span class="linenos">281</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-282"><a href="#Presto-282"><span class="linenos">282</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-283"><a href="#Presto-283"><span class="linenos">283</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-284"><a href="#Presto-284"><span class="linenos">284</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-285"><a href="#Presto-285"><span class="linenos">285</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-286"><a href="#Presto-286"><span class="linenos">286</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-287"><a href="#Presto-287"><span class="linenos">287</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-288"><a href="#Presto-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto-289"><a href="#Presto-289"><span class="linenos">289</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-290"><a href="#Presto-290"><span class="linenos">290</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-291"><a href="#Presto-291"><span class="linenos">291</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-292"><a href="#Presto-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Presto-293"><a href="#Presto-293"><span class="linenos">293</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-294"><a href="#Presto-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="Presto-295"><a href="#Presto-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto-296"><a href="#Presto-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-297"><a href="#Presto-297"><span class="linenos">297</span></a> <span class="s2">&quot;ELEMENT_AT&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">seq_get</span><span class="p">(</span><span class="n">apply_index_offset</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">expressions</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="Presto-298"><a href="#Presto-298"><span class="linenos">298</span></a> <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">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</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">Schema</span><span class="p">:</span> <span class="n">_schema_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">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-302"><a href="#Presto-302"><span class="linenos">302</span></a> <span class="p">[</span>
-</span><span id="Presto-303"><a href="#Presto-303"><span class="linenos">303</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="Presto-304"><a href="#Presto-304"><span class="linenos">304</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-305"><a href="#Presto-305"><span class="linenos">305</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-306"><a href="#Presto-306"><span class="linenos">306</span></a> <span class="p">]</span>
-</span><span id="Presto-307"><a href="#Presto-307"><span class="linenos">307</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-310"><a href="#Presto-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="Presto-311"><a href="#Presto-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="Presto-312"><a href="#Presto-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="Presto-313"><a href="#Presto-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="Presto-314"><a href="#Presto-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
-</span><span id="Presto-315"><a href="#Presto-315"><span class="linenos">315</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-316"><a href="#Presto-316"><span class="linenos">316</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-317"><a href="#Presto-317"><span class="linenos">317</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-318"><a href="#Presto-318"><span class="linenos">318</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-319"><a href="#Presto-319"><span class="linenos">319</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-320"><a href="#Presto-320"><span class="linenos">320</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-321"><a href="#Presto-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto-322"><a href="#Presto-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="Presto-323"><a href="#Presto-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="Presto-324"><a href="#Presto-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="Presto-325"><a href="#Presto-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="Presto-326"><a href="#Presto-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="Presto-327"><a href="#Presto-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="Presto-328"><a href="#Presto-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="Presto-329"><a href="#Presto-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="Presto-330"><a href="#Presto-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
-</span><span id="Presto-331"><a href="#Presto-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Presto-332"><a href="#Presto-332"><span class="linenos">332</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Presto-333"><a href="#Presto-333"><span class="linenos">333</span></a> <span class="p">),</span>
-</span><span id="Presto-334"><a href="#Presto-334"><span class="linenos">334</span></a> <span class="p">}</span>
-</span><span id="Presto-335"><a href="#Presto-335"><span class="linenos">335</span></a>
-</span><span id="Presto-336"><a href="#Presto-336"><span class="linenos">336</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-337"><a href="#Presto-337"><span class="linenos">337</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-338"><a href="#Presto-338"><span class="linenos">338</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-339"><a href="#Presto-339"><span class="linenos">339</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-340"><a href="#Presto-340"><span class="linenos">340</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-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">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-343"><a href="#Presto-343"><span class="linenos">343</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-344"><a href="#Presto-344"><span class="linenos">344</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-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;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-346"><a href="#Presto-346"><span class="linenos">346</span></a>
-</span><span id="Presto-347"><a href="#Presto-347"><span class="linenos">347</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-348"><a href="#Presto-348"><span class="linenos">348</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span>
-</span><span id="Presto-349"><a href="#Presto-349"><span class="linenos">349</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span>
-</span><span id="Presto-350"><a href="#Presto-350"><span class="linenos">350</span></a> <span class="n">step</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;step&quot;</span><span class="p">)</span>
-</span><span id="Presto-351"><a href="#Presto-351"><span class="linenos">351</span></a>
-</span><span id="Presto-352"><a href="#Presto-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto-353"><a href="#Presto-353"><span class="linenos">353</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto-354"><a href="#Presto-354"><span class="linenos">354</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto-355"><a href="#Presto-355"><span class="linenos">355</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto-356"><a href="#Presto-356"><span class="linenos">356</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto-357"><a href="#Presto-357"><span class="linenos">357</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto-358"><a href="#Presto-358"><span class="linenos">358</span></a>
-</span><span id="Presto-359"><a href="#Presto-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="Presto-360"><a href="#Presto-360"><span class="linenos">360</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Presto-361"><a href="#Presto-361"><span class="linenos">361</span></a>
-</span><span id="Presto-362"><a href="#Presto-362"><span class="linenos">362</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="Presto-363"><a href="#Presto-363"><span class="linenos">363</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="Presto-364"><a href="#Presto-364"><span class="linenos">364</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto-365"><a href="#Presto-365"><span class="linenos">365</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="Presto-366"><a href="#Presto-366"><span class="linenos">366</span></a>
-</span><span id="Presto-367"><a href="#Presto-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
-</span><span id="Presto-368"><a href="#Presto-368"><span class="linenos">368</span></a>
-</span><span id="Presto-369"><a href="#Presto-369"><span class="linenos">369</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Presto-370"><a href="#Presto-370"><span class="linenos">370</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Presto-371"><a href="#Presto-371"><span class="linenos">371</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Presto-372"><a href="#Presto-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Presto-373"><a href="#Presto-373"><span class="linenos">373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Presto-374"><a href="#Presto-374"><span class="linenos">374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Presto-375"><a href="#Presto-375"><span class="linenos">375</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;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-221"><a href="#Presto-221"><span class="linenos">221</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="Presto-222"><a href="#Presto-222"><span class="linenos">222</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">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">group</span><span class="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-223"><a href="#Presto-223"><span class="linenos">223</span></a> <span class="p">),</span>
+</span><span id="Presto-224"><a href="#Presto-224"><span class="linenos">224</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">(</span>
+</span><span id="Presto-225"><a href="#Presto-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="Presto-226"><a href="#Presto-226"><span class="linenos">226</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-227"><a href="#Presto-227"><span class="linenos">227</span></a> <span class="n">replacement</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="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="Presto-228"><a href="#Presto-228"><span class="linenos">228</span></a> <span class="p">),</span>
+</span><span id="Presto-229"><a href="#Presto-229"><span class="linenos">229</span></a> <span class="s2">&quot;ROW&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="Presto-230"><a href="#Presto-230"><span class="linenos">230</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-231"><a href="#Presto-231"><span class="linenos">231</span></a> <span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-232"><a href="#Presto-232"><span class="linenos">232</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-233"><a href="#Presto-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 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 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-234"><a href="#Presto-234"><span class="linenos">234</span></a> <span class="p">),</span>
+</span><span id="Presto-235"><a href="#Presto-235"><span class="linenos">235</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-236"><a href="#Presto-236"><span class="linenos">236</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-237"><a href="#Presto-237"><span class="linenos">237</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-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">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-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">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto-249"><a href="#Presto-249"><span class="linenos">249</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto-250"><a href="#Presto-250"><span class="linenos">250</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Presto-251"><a href="#Presto-251"><span class="linenos">251</span></a> <span class="n">NVL2_SUPPORTED</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">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-253"><a href="#Presto-253"><span class="linenos">253</span></a>
+</span><span id="Presto-254"><a href="#Presto-254"><span class="linenos">254</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-255"><a href="#Presto-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><span id="Presto-256"><a href="#Presto-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="Presto-257"><a href="#Presto-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="Presto-258"><a href="#Presto-258"><span class="linenos">258</span></a> <span class="p">}</span>
+</span><span id="Presto-259"><a href="#Presto-259"><span class="linenos">259</span></a>
+</span><span id="Presto-260"><a href="#Presto-260"><span class="linenos">260</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-261"><a href="#Presto-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><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">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&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">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&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">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto-270"><a href="#Presto-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">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto-271"><a href="#Presto-271"><span class="linenos">271</span></a> <span class="p">}</span>
+</span><span id="Presto-272"><a href="#Presto-272"><span class="linenos">272</span></a>
+</span><span id="Presto-273"><a href="#Presto-273"><span class="linenos">273</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-274"><a href="#Presto-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">TRANSFORMS</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">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
+</span><span id="Presto-276"><a href="#Presto-276"><span class="linenos">276</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-277"><a href="#Presto-277"><span class="linenos">277</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-278"><a href="#Presto-278"><span class="linenos">278</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-279"><a href="#Presto-279"><span class="linenos">279</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-280"><a href="#Presto-280"><span class="linenos">280</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-281"><a href="#Presto-281"><span class="linenos">281</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-282"><a href="#Presto-282"><span class="linenos">282</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-283"><a href="#Presto-283"><span class="linenos">283</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-284"><a href="#Presto-284"><span class="linenos">284</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-285"><a href="#Presto-285"><span class="linenos">285</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-286"><a href="#Presto-286"><span class="linenos">286</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-287"><a href="#Presto-287"><span class="linenos">287</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-288"><a href="#Presto-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto-289"><a href="#Presto-289"><span class="linenos">289</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-290"><a href="#Presto-290"><span class="linenos">290</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-291"><a href="#Presto-291"><span class="linenos">291</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-292"><a href="#Presto-292"><span class="linenos">292</span></a> <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">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-294"><a href="#Presto-294"><span class="linenos">294</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-295"><a href="#Presto-295"><span class="linenos">295</span></a> <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">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-297"><a href="#Presto-297"><span class="linenos">297</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-298"><a href="#Presto-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="k">lambda</span> <span class="bp">self</span><span 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-299"><a href="#Presto-299"><span class="linenos">299</span></a> <span class="s2">&quot;DATE_ADD&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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span>
+</span><span id="Presto-301"><a href="#Presto-301"><span class="linenos">301</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="Presto-302"><a href="#Presto-302"><span class="linenos">302</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto-303"><a href="#Presto-303"><span class="linenos">303</span></a> <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">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto-305"><a href="#Presto-305"><span class="linenos">305</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-306"><a href="#Presto-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto-307"><a href="#Presto-307"><span class="linenos">307</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-308"><a href="#Presto-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto-309"><a href="#Presto-309"><span class="linenos">309</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-310"><a href="#Presto-310"><span class="linenos">310</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-311"><a href="#Presto-311"><span class="linenos">311</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-312"><a href="#Presto-312"><span class="linenos">312</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-313"><a href="#Presto-313"><span class="linenos">313</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-314"><a href="#Presto-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto-315"><a href="#Presto-315"><span class="linenos">315</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-316"><a href="#Presto-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto-317"><a href="#Presto-317"><span class="linenos">317</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-318"><a href="#Presto-318"><span class="linenos">318</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-319"><a href="#Presto-319"><span class="linenos">319</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-320"><a href="#Presto-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Presto-321"><a href="#Presto-321"><span class="linenos">321</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-322"><a href="#Presto-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="Presto-323"><a href="#Presto-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto-324"><a href="#Presto-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-325"><a href="#Presto-325"><span class="linenos">325</span></a> <span class="s2">&quot;ELEMENT_AT&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">seq_get</span><span class="p">(</span><span class="n">apply_index_offset</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">expressions</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="Presto-326"><a href="#Presto-326"><span class="linenos">326</span></a> <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">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_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">Schema</span><span class="p">:</span> <span class="n">_schema_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">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-330"><a href="#Presto-330"><span class="linenos">330</span></a> <span class="p">[</span>
+</span><span id="Presto-331"><a href="#Presto-331"><span class="linenos">331</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-332"><a href="#Presto-332"><span class="linenos">332</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-333"><a href="#Presto-333"><span class="linenos">333</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-334"><a href="#Presto-334"><span class="linenos">334</span></a> <span class="p">]</span>
+</span><span id="Presto-335"><a href="#Presto-335"><span class="linenos">335</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-338"><a href="#Presto-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="k">lambda</span> <span class="bp">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-339"><a href="#Presto-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
+</span><span id="Presto-340"><a href="#Presto-340"><span class="linenos">340</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-341"><a href="#Presto-341"><span class="linenos">341</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-342"><a href="#Presto-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">),</span>
+</span><span id="Presto-343"><a href="#Presto-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="Presto-344"><a href="#Presto-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
+</span><span id="Presto-345"><a href="#Presto-345"><span class="linenos">345</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-346"><a href="#Presto-346"><span class="linenos">346</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-347"><a href="#Presto-347"><span class="linenos">347</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-348"><a href="#Presto-348"><span class="linenos">348</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-349"><a href="#Presto-349"><span class="linenos">349</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-350"><a href="#Presto-350"><span class="linenos">350</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-351"><a href="#Presto-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">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto-352"><a href="#Presto-352"><span class="linenos">352</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-353"><a href="#Presto-353"><span class="linenos">353</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-354"><a href="#Presto-354"><span class="linenos">354</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-355"><a href="#Presto-355"><span class="linenos">355</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-356"><a href="#Presto-356"><span class="linenos">356</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-357"><a href="#Presto-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="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Presto-358"><a href="#Presto-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-359"><a href="#Presto-359"><span class="linenos">359</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-360"><a href="#Presto-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
+</span><span id="Presto-361"><a href="#Presto-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Presto-362"><a href="#Presto-362"><span class="linenos">362</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Presto-363"><a href="#Presto-363"><span class="linenos">363</span></a> <span class="p">),</span>
+</span><span id="Presto-364"><a href="#Presto-364"><span class="linenos">364</span></a> <span class="p">}</span>
+</span><span id="Presto-365"><a href="#Presto-365"><span class="linenos">365</span></a>
+</span><span id="Presto-366"><a href="#Presto-366"><span class="linenos">366</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-367"><a href="#Presto-367"><span class="linenos">367</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-368"><a href="#Presto-368"><span class="linenos">368</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-369"><a href="#Presto-369"><span class="linenos">369</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-370"><a href="#Presto-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">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto-371"><a href="#Presto-371"><span class="linenos">371</span></a>
+</span><span id="Presto-372"><a href="#Presto-372"><span class="linenos">372</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-373"><a href="#Presto-373"><span class="linenos">373</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-374"><a href="#Presto-374"><span class="linenos">374</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-375"><a href="#Presto-375"><span class="linenos">375</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-376"><a href="#Presto-376"><span class="linenos">376</span></a>
+</span><span id="Presto-377"><a href="#Presto-377"><span class="linenos">377</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-378"><a href="#Presto-378"><span class="linenos">378</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span>
+</span><span id="Presto-379"><a href="#Presto-379"><span class="linenos">379</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span>
+</span><span id="Presto-380"><a href="#Presto-380"><span class="linenos">380</span></a> <span class="n">step</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;step&quot;</span><span class="p">)</span>
+</span><span id="Presto-381"><a href="#Presto-381"><span class="linenos">381</span></a>
+</span><span id="Presto-382"><a href="#Presto-382"><span class="linenos">382</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto-383"><a href="#Presto-383"><span class="linenos">383</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto-384"><a href="#Presto-384"><span class="linenos">384</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto-385"><a href="#Presto-385"><span class="linenos">385</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto-386"><a href="#Presto-386"><span class="linenos">386</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto-387"><a href="#Presto-387"><span class="linenos">387</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto-388"><a href="#Presto-388"><span class="linenos">388</span></a>
+</span><span id="Presto-389"><a href="#Presto-389"><span class="linenos">389</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="Presto-390"><a href="#Presto-390"><span class="linenos">390</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Presto-391"><a href="#Presto-391"><span class="linenos">391</span></a>
+</span><span id="Presto-392"><a href="#Presto-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="Presto-393"><a href="#Presto-393"><span class="linenos">393</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="Presto-394"><a href="#Presto-394"><span class="linenos">394</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto-395"><a href="#Presto-395"><span class="linenos">395</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="Presto-396"><a href="#Presto-396"><span class="linenos">396</span></a>
+</span><span id="Presto-397"><a href="#Presto-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+</span><span id="Presto-398"><a href="#Presto-398"><span class="linenos">398</span></a>
+</span><span id="Presto-399"><a href="#Presto-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Presto-400"><a href="#Presto-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Presto-401"><a href="#Presto-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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Presto-402"><a href="#Presto-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Presto-403"><a href="#Presto-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Presto-404"><a href="#Presto-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Presto-405"><a href="#Presto-405"><span class="linenos">405</span></a> <span class="p">]</span>
</span></pre></div>
@@ -921,7 +980,7 @@
<div class="attr variable">
<span class="name">TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="Presto.TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
</div>
@@ -994,7 +1053,7 @@
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="Presto.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="Presto.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -1007,7 +1066,7 @@
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="Presto.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="Presto.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -1020,7 +1079,7 @@
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="Presto.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -1169,6 +1228,7 @@
<dd id="Presto.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Presto.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Presto.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Presto.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Presto.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Presto.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
<dd id="Presto.DATEINT_FORMAT" class="variable"><a href="dialect.html#Dialect.DATEINT_FORMAT">DATEINT_FORMAT</a></dd>
@@ -1204,15 +1264,15 @@
</div>
<a class="headerlink" href="#Presto.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Tokenizer-176"><a href="#Presto.Tokenizer-176"><span class="linenos">176</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-177"><a href="#Presto.Tokenizer-177"><span class="linenos">177</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Tokenizer-178"><a href="#Presto.Tokenizer-178"><span class="linenos">178</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-179"><a href="#Presto.Tokenizer-179"><span class="linenos">179</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-180"><a href="#Presto.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="Presto.Tokenizer-181"><a href="#Presto.Tokenizer-181"><span class="linenos">181</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-182"><a href="#Presto.Tokenizer-182"><span class="linenos">182</span></a> <span class="s2">&quot;IPADDRESS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
-</span><span id="Presto.Tokenizer-183"><a href="#Presto.Tokenizer-183"><span class="linenos">183</span></a> <span class="s2">&quot;IPPREFIX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
-</span><span id="Presto.Tokenizer-184"><a href="#Presto.Tokenizer-184"><span class="linenos">184</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Tokenizer-183"><a href="#Presto.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="Presto.Tokenizer-184"><a href="#Presto.Tokenizer-184"><span class="linenos">184</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Tokenizer-185"><a href="#Presto.Tokenizer-185"><span class="linenos">185</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-186"><a href="#Presto.Tokenizer-186"><span class="linenos">186</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-187"><a href="#Presto.Tokenizer-187"><span class="linenos">187</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="Presto.Tokenizer-188"><a href="#Presto.Tokenizer-188"><span class="linenos">188</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-189"><a href="#Presto.Tokenizer-189"><span class="linenos">189</span></a> <span class="s2">&quot;IPADDRESS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
+</span><span id="Presto.Tokenizer-190"><a href="#Presto.Tokenizer-190"><span class="linenos">190</span></a> <span class="s2">&quot;IPPREFIX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
+</span><span id="Presto.Tokenizer-191"><a href="#Presto.Tokenizer-191"><span class="linenos">191</span></a> <span class="p">}</span>
</span></pre></div>
@@ -1222,7 +1282,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Presto.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;START&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;MATCH_RECOGNIZE&#39;: &lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;, &#39;IPADDRESS&#39;: &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &#39;IPPREFIX&#39;: &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;START&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;MATCH_RECOGNIZE&#39;: &lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;, &#39;IPADDRESS&#39;: &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &#39;IPPREFIX&#39;: &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;}</span>
</div>
@@ -1274,48 +1334,56 @@
</div>
<a class="headerlink" href="#Presto.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Parser-186"><a href="#Presto.Parser-186"><span class="linenos">186</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-187"><a href="#Presto.Parser-187"><span class="linenos">187</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Parser-188"><a href="#Presto.Parser-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">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Presto.Parser-189"><a href="#Presto.Parser-189"><span class="linenos">189</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-190"><a href="#Presto.Parser-190"><span class="linenos">190</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-191"><a href="#Presto.Parser-191"><span class="linenos">191</span></a> <span class="s2">&quot;BITWISE_AND&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto.Parser-192"><a href="#Presto.Parser-192"><span class="linenos">192</span></a> <span class="s2">&quot;BITWISE_NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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="n">seq_get</span><span 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-193"><a href="#Presto.Parser-193"><span class="linenos">193</span></a> <span class="s2">&quot;BITWISE_OR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto.Parser-194"><a href="#Presto.Parser-194"><span class="linenos">194</span></a> <span class="s2">&quot;BITWISE_XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto.Parser-195"><a href="#Presto.Parser-195"><span class="linenos">195</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-196"><a href="#Presto.Parser-196"><span class="linenos">196</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-197"><a href="#Presto.Parser-197"><span class="linenos">197</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-198"><a href="#Presto.Parser-198"><span class="linenos">198</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Presto.Parser-199"><a href="#Presto.Parser-199"><span class="linenos">199</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-200"><a href="#Presto.Parser-200"><span class="linenos">200</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-201"><a href="#Presto.Parser-201"><span class="linenos">201</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Presto.Parser-202"><a href="#Presto.Parser-202"><span class="linenos">202</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-203"><a href="#Presto.Parser-203"><span class="linenos">203</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-204"><a href="#Presto.Parser-204"><span class="linenos">204</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-205"><a href="#Presto.Parser-205"><span class="linenos">205</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-206"><a href="#Presto.Parser-206"><span class="linenos">206</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">:</span> <span class="n">_parse_element_at</span><span class="p">,</span>
-</span><span id="Presto.Parser-207"><a href="#Presto.Parser-207"><span class="linenos">207</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-208"><a href="#Presto.Parser-208"><span class="linenos">208</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-209"><a href="#Presto.Parser-209"><span class="linenos">209</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-210"><a href="#Presto.Parser-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">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-211"><a href="#Presto.Parser-211"><span class="linenos">211</span></a> <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;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-213"><a href="#Presto.Parser-213"><span class="linenos">213</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="Presto.Parser-214"><a href="#Presto.Parser-214"><span class="linenos">214</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">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">group</span><span class="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-215"><a href="#Presto.Parser-215"><span class="linenos">215</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-216"><a href="#Presto.Parser-216"><span class="linenos">216</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-217"><a href="#Presto.Parser-217"><span class="linenos">217</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-218"><a href="#Presto.Parser-218"><span class="linenos">218</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">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 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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Parser-193"><a href="#Presto.Parser-193"><span class="linenos">193</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-194"><a href="#Presto.Parser-194"><span class="linenos">194</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Parser-195"><a href="#Presto.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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Presto.Parser-196"><a href="#Presto.Parser-196"><span class="linenos">196</span></a> <span class="s2">&quot;ARBITRARY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-197"><a href="#Presto.Parser-197"><span class="linenos">197</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-198"><a href="#Presto.Parser-198"><span class="linenos">198</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-199"><a href="#Presto.Parser-199"><span class="linenos">199</span></a> <span class="s2">&quot;BITWISE_AND&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto.Parser-200"><a href="#Presto.Parser-200"><span class="linenos">200</span></a> <span class="s2">&quot;BITWISE_NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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="n">seq_get</span><span 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-201"><a href="#Presto.Parser-201"><span class="linenos">201</span></a> <span class="s2">&quot;BITWISE_OR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto.Parser-202"><a href="#Presto.Parser-202"><span class="linenos">202</span></a> <span class="s2">&quot;BITWISE_XOR&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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="Presto.Parser-203"><a href="#Presto.Parser-203"><span class="linenos">203</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-204"><a href="#Presto.Parser-204"><span class="linenos">204</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-205"><a href="#Presto.Parser-205"><span class="linenos">205</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-206"><a href="#Presto.Parser-206"><span class="linenos">206</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Presto.Parser-207"><a href="#Presto.Parser-207"><span class="linenos">207</span></a> <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;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-209"><a href="#Presto.Parser-209"><span class="linenos">209</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Presto.Parser-210"><a href="#Presto.Parser-210"><span class="linenos">210</span></a> <span class="p">),</span>
+</span><span id="Presto.Parser-211"><a href="#Presto.Parser-211"><span class="linenos">211</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-212"><a href="#Presto.Parser-212"><span class="linenos">212</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-213"><a href="#Presto.Parser-213"><span class="linenos">213</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-214"><a href="#Presto.Parser-214"><span class="linenos">214</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">:</span> <span class="n">_parse_element_at</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;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-216"><a href="#Presto.Parser-216"><span class="linenos">216</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-217"><a href="#Presto.Parser-217"><span class="linenos">217</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-218"><a href="#Presto.Parser-218"><span class="linenos">218</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-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;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-221"><a href="#Presto.Parser-221"><span class="linenos">221</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-222"><a href="#Presto.Parser-222"><span class="linenos">222</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-223"><a href="#Presto.Parser-223"><span class="linenos">223</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-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="p">}</span>
-</span><span id="Presto.Parser-226"><a href="#Presto.Parser-226"><span class="linenos">226</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-227"><a href="#Presto.Parser-227"><span class="linenos">227</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-220"><a href="#Presto.Parser-220"><span class="linenos">220</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-221"><a href="#Presto.Parser-221"><span class="linenos">221</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="Presto.Parser-222"><a href="#Presto.Parser-222"><span class="linenos">222</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">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">group</span><span class="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-223"><a href="#Presto.Parser-223"><span class="linenos">223</span></a> <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;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">(</span>
+</span><span id="Presto.Parser-225"><a href="#Presto.Parser-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="Presto.Parser-226"><a href="#Presto.Parser-226"><span class="linenos">226</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-227"><a href="#Presto.Parser-227"><span class="linenos">227</span></a> <span class="n">replacement</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="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="Presto.Parser-228"><a href="#Presto.Parser-228"><span class="linenos">228</span></a> <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;ROW&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="Presto.Parser-230"><a href="#Presto.Parser-230"><span class="linenos">230</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-231"><a href="#Presto.Parser-231"><span class="linenos">231</span></a> <span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="o">.</span><span class="n">from_arg_list</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;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-233"><a href="#Presto.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 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 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-234"><a href="#Presto.Parser-234"><span class="linenos">234</span></a> <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;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-236"><a href="#Presto.Parser-236"><span class="linenos">236</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-237"><a href="#Presto.Parser-237"><span class="linenos">237</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-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">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-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></pre></div>
@@ -1340,7 +1408,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Presto.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;function _approx_percentile&gt;, &#39;BITWISE_AND&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;BITWISE_NOT&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;BITWISE_OR&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;BITWISE_XOR&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;CARDINALITY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;DATE_PARSE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;ELEMENT_AT&#39;: &lt;function _parse_element_at&gt;, &#39;FROM_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function _from_unixtime&gt;, &#39;FROM_UTF8&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;NOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;SEQUENCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;STRPOS&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;TO_UNIXTIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TO_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;TO_UTF8&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ARBITRARY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;function _approx_percentile&gt;, &#39;BITWISE_AND&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;BITWISE_NOT&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;BITWISE_OR&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;BITWISE_XOR&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;CARDINALITY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;DATE_PARSE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;ELEMENT_AT&#39;: &lt;function _parse_element_at&gt;, &#39;FROM_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function _from_unixtime&gt;, &#39;FROM_UTF8&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;NOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;ROW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;SEQUENCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;SPLIT_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STRPOS&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;, &#39;TO_UNIXTIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TO_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;TO_UTF8&#39;: &lt;function <a href="#Presto.Parser">Presto.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1362,6 +1430,18 @@ Default: 3</li>
</div>
+ <div id="Presto.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Presto.Tokenizer">sqlglot.dialects.presto.Presto.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Presto.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Presto.Parser.INDEX_OFFSET" class="classattr">
<div class="attr variable">
<span class="name">INDEX_OFFSET</span><span class="annotation">: int</span> =
@@ -1426,7 +1506,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="Presto.Parser.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -1439,7 +1519,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="Presto.Parser.TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Parser.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Parser.TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%M&#39;: &#39;%B&#39;, &#39;%c&#39;: &#39;%-m&#39;, &#39;%e&#39;: &#39;%-d&#39;, &#39;%h&#39;: &#39;%I&#39;, &#39;%i&#39;: &#39;%M&#39;, &#39;%s&#39;: &#39;%S&#39;, &#39;%u&#39;: &#39;%W&#39;, &#39;%k&#39;: &#39;%-H&#39;, &#39;%l&#39;: &#39;%-I&#39;, &#39;%T&#39;: &#39;%H:%M:%S&#39;, &#39;%W&#39;: &#39;%a&#39;}</span>
</div>
@@ -1452,7 +1532,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="Presto.Parser.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -1467,6 +1547,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Presto.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Presto.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Presto.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Presto.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Presto.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Presto.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1487,6 +1568,7 @@ Default: 3</li>
<dd id="Presto.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Presto.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Presto.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Presto.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Presto.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Presto.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Presto.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1506,6 +1588,7 @@ Default: 3</li>
<dd id="Presto.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Presto.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Presto.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Presto.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Presto.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Presto.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Presto.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1523,12 +1606,15 @@ Default: 3</li>
<dd id="Presto.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Presto.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Presto.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Presto.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Presto.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="Presto.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Presto.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Presto.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Presto.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Presto.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Presto.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="Presto.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Presto.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Presto.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Presto.Parser.NORMALIZE_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
@@ -1561,153 +1647,168 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Presto.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator-229"><a href="#Presto.Generator-229"><span class="linenos">229</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-230"><a href="#Presto.Generator-230"><span class="linenos">230</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-231"><a href="#Presto.Generator-231"><span class="linenos">231</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-232"><a href="#Presto.Generator-232"><span class="linenos">232</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-233"><a href="#Presto.Generator-233"><span class="linenos">233</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-234"><a href="#Presto.Generator-234"><span class="linenos">234</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-235"><a href="#Presto.Generator-235"><span class="linenos">235</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-236"><a href="#Presto.Generator-236"><span class="linenos">236</span></a>
-</span><span id="Presto.Generator-237"><a href="#Presto.Generator-237"><span class="linenos">237</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-238"><a href="#Presto.Generator-238"><span class="linenos">238</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Presto.Generator-239"><a href="#Presto.Generator-239"><span class="linenos">239</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-240"><a href="#Presto.Generator-240"><span class="linenos">240</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-241"><a href="#Presto.Generator-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-242"><a href="#Presto.Generator-242"><span class="linenos">242</span></a>
-</span><span id="Presto.Generator-243"><a href="#Presto.Generator-243"><span class="linenos">243</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-244"><a href="#Presto.Generator-244"><span class="linenos">244</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Presto.Generator-245"><a href="#Presto.Generator-245"><span class="linenos">245</span></a> <span class="n">exp</span><span 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-246"><a href="#Presto.Generator-246"><span class="linenos">246</span></a> <span class="n">exp</span><span 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-247"><a href="#Presto.Generator-247"><span class="linenos">247</span></a> <span class="n">exp</span><span 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-248"><a href="#Presto.Generator-248"><span class="linenos">248</span></a> <span class="n">exp</span><span 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-249"><a href="#Presto.Generator-249"><span class="linenos">249</span></a> <span class="n">exp</span><span 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-250"><a href="#Presto.Generator-250"><span class="linenos">250</span></a> <span class="n">exp</span><span 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-251"><a href="#Presto.Generator-251"><span class="linenos">251</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-252"><a href="#Presto.Generator-252"><span class="linenos">252</span></a>
-</span><span id="Presto.Generator-253"><a href="#Presto.Generator-253"><span class="linenos">253</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-254"><a href="#Presto.Generator-254"><span class="linenos">254</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Presto.Generator-255"><a href="#Presto.Generator-255"><span class="linenos">255</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-256"><a href="#Presto.Generator-256"><span class="linenos">256</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-257"><a href="#Presto.Generator-257"><span class="linenos">257</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-258"><a href="#Presto.Generator-258"><span class="linenos">258</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-259"><a href="#Presto.Generator-259"><span class="linenos">259</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-260"><a href="#Presto.Generator-260"><span class="linenos">260</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-261"><a href="#Presto.Generator-261"><span class="linenos">261</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-262"><a href="#Presto.Generator-262"><span class="linenos">262</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-263"><a href="#Presto.Generator-263"><span class="linenos">263</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-264"><a href="#Presto.Generator-264"><span class="linenos">264</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-265"><a href="#Presto.Generator-265"><span class="linenos">265</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-266"><a href="#Presto.Generator-266"><span class="linenos">266</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-267"><a href="#Presto.Generator-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto.Generator-268"><a href="#Presto.Generator-268"><span class="linenos">268</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-269"><a href="#Presto.Generator-269"><span class="linenos">269</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-270"><a href="#Presto.Generator-270"><span class="linenos">270</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-271"><a href="#Presto.Generator-271"><span class="linenos">271</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-272"><a href="#Presto.Generator-272"><span class="linenos">272</span></a> <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">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-274"><a href="#Presto.Generator-274"><span class="linenos">274</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-275"><a href="#Presto.Generator-275"><span class="linenos">275</span></a> <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">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-277"><a href="#Presto.Generator-277"><span class="linenos">277</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-278"><a href="#Presto.Generator-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-279"><a href="#Presto.Generator-279"><span class="linenos">279</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-280"><a href="#Presto.Generator-280"><span class="linenos">280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-281"><a href="#Presto.Generator-281"><span class="linenos">281</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-282"><a href="#Presto.Generator-282"><span class="linenos">282</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-283"><a href="#Presto.Generator-283"><span class="linenos">283</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-284"><a href="#Presto.Generator-284"><span class="linenos">284</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-285"><a href="#Presto.Generator-285"><span class="linenos">285</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-286"><a href="#Presto.Generator-286"><span class="linenos">286</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-287"><a href="#Presto.Generator-287"><span class="linenos">287</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-288"><a href="#Presto.Generator-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-289"><a href="#Presto.Generator-289"><span class="linenos">289</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-290"><a href="#Presto.Generator-290"><span class="linenos">290</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-291"><a href="#Presto.Generator-291"><span class="linenos">291</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-292"><a href="#Presto.Generator-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-293"><a href="#Presto.Generator-293"><span class="linenos">293</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-294"><a href="#Presto.Generator-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-295"><a href="#Presto.Generator-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-296"><a href="#Presto.Generator-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-297"><a href="#Presto.Generator-297"><span class="linenos">297</span></a> <span class="s2">&quot;ELEMENT_AT&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">seq_get</span><span class="p">(</span><span class="n">apply_index_offset</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">expressions</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="Presto.Generator-298"><a href="#Presto.Generator-298"><span class="linenos">298</span></a> <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">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</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">Schema</span><span class="p">:</span> <span class="n">_schema_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">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-302"><a href="#Presto.Generator-302"><span class="linenos">302</span></a> <span class="p">[</span>
-</span><span id="Presto.Generator-303"><a href="#Presto.Generator-303"><span class="linenos">303</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</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">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</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">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">,</span>
-</span><span id="Presto.Generator-306"><a href="#Presto.Generator-306"><span class="linenos">306</span></a> <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><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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-310"><a href="#Presto.Generator-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="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">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</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">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-313"><a href="#Presto.Generator-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="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">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
-</span><span id="Presto.Generator-315"><a href="#Presto.Generator-315"><span class="linenos">315</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-316"><a href="#Presto.Generator-316"><span class="linenos">316</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-317"><a href="#Presto.Generator-317"><span class="linenos">317</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-318"><a href="#Presto.Generator-318"><span class="linenos">318</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-319"><a href="#Presto.Generator-319"><span class="linenos">319</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-320"><a href="#Presto.Generator-320"><span class="linenos">320</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-321"><a href="#Presto.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto.Generator-322"><a href="#Presto.Generator-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="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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_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">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-325"><a href="#Presto.Generator-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="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">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-327"><a href="#Presto.Generator-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="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">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-329"><a href="#Presto.Generator-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="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">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
-</span><span id="Presto.Generator-331"><a href="#Presto.Generator-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Presto.Generator-332"><a href="#Presto.Generator-332"><span class="linenos">332</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Presto.Generator-333"><a href="#Presto.Generator-333"><span class="linenos">333</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-334"><a href="#Presto.Generator-334"><span class="linenos">334</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-335"><a href="#Presto.Generator-335"><span class="linenos">335</span></a>
-</span><span id="Presto.Generator-336"><a href="#Presto.Generator-336"><span class="linenos">336</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-337"><a href="#Presto.Generator-337"><span class="linenos">337</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-338"><a href="#Presto.Generator-338"><span class="linenos">338</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-339"><a href="#Presto.Generator-339"><span class="linenos">339</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-340"><a href="#Presto.Generator-340"><span class="linenos">340</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-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">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-343"><a href="#Presto.Generator-343"><span class="linenos">343</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-344"><a href="#Presto.Generator-344"><span class="linenos">344</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-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;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Presto.Generator-346"><a href="#Presto.Generator-346"><span class="linenos">346</span></a>
-</span><span id="Presto.Generator-347"><a href="#Presto.Generator-347"><span class="linenos">347</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-348"><a href="#Presto.Generator-348"><span class="linenos">348</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator-349"><a href="#Presto.Generator-349"><span class="linenos">349</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator-350"><a href="#Presto.Generator-350"><span class="linenos">350</span></a> <span class="n">step</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;step&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator-351"><a href="#Presto.Generator-351"><span class="linenos">351</span></a>
-</span><span id="Presto.Generator-352"><a href="#Presto.Generator-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator-353"><a href="#Presto.Generator-353"><span class="linenos">353</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator-354"><a href="#Presto.Generator-354"><span class="linenos">354</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator-355"><a href="#Presto.Generator-355"><span class="linenos">355</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator-356"><a href="#Presto.Generator-356"><span class="linenos">356</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator-357"><a href="#Presto.Generator-357"><span class="linenos">357</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto.Generator-358"><a href="#Presto.Generator-358"><span class="linenos">358</span></a>
-</span><span id="Presto.Generator-359"><a href="#Presto.Generator-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator-360"><a href="#Presto.Generator-360"><span class="linenos">360</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Presto.Generator-361"><a href="#Presto.Generator-361"><span class="linenos">361</span></a>
-</span><span id="Presto.Generator-362"><a href="#Presto.Generator-362"><span class="linenos">362</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="Presto.Generator-363"><a href="#Presto.Generator-363"><span class="linenos">363</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="Presto.Generator-364"><a href="#Presto.Generator-364"><span class="linenos">364</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator-365"><a href="#Presto.Generator-365"><span class="linenos">365</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="Presto.Generator-366"><a href="#Presto.Generator-366"><span class="linenos">366</span></a>
-</span><span id="Presto.Generator-367"><a href="#Presto.Generator-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
-</span><span id="Presto.Generator-368"><a href="#Presto.Generator-368"><span class="linenos">368</span></a>
-</span><span id="Presto.Generator-369"><a href="#Presto.Generator-369"><span class="linenos">369</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Presto.Generator-370"><a href="#Presto.Generator-370"><span class="linenos">370</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Presto.Generator-371"><a href="#Presto.Generator-371"><span class="linenos">371</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Presto.Generator-372"><a href="#Presto.Generator-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Presto.Generator-373"><a href="#Presto.Generator-373"><span class="linenos">373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-374"><a href="#Presto.Generator-374"><span class="linenos">374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Presto.Generator-375"><a href="#Presto.Generator-375"><span class="linenos">375</span></a> <span class="p">]</span>
+ <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">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto.Generator-249"><a href="#Presto.Generator-249"><span class="linenos">249</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto.Generator-250"><a href="#Presto.Generator-250"><span class="linenos">250</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Presto.Generator-251"><a href="#Presto.Generator-251"><span class="linenos">251</span></a> <span class="n">NVL2_SUPPORTED</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">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-253"><a href="#Presto.Generator-253"><span class="linenos">253</span></a>
+</span><span id="Presto.Generator-254"><a href="#Presto.Generator-254"><span class="linenos">254</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-255"><a href="#Presto.Generator-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><span id="Presto.Generator-256"><a href="#Presto.Generator-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="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">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-258"><a href="#Presto.Generator-258"><span class="linenos">258</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-259"><a href="#Presto.Generator-259"><span class="linenos">259</span></a>
+</span><span id="Presto.Generator-260"><a href="#Presto.Generator-260"><span class="linenos">260</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-261"><a href="#Presto.Generator-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><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">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&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">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&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">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-270"><a href="#Presto.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">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&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="p">}</span>
+</span><span id="Presto.Generator-272"><a href="#Presto.Generator-272"><span class="linenos">272</span></a>
+</span><span id="Presto.Generator-273"><a href="#Presto.Generator-273"><span class="linenos">273</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-274"><a href="#Presto.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">TRANSFORMS</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">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-276"><a href="#Presto.Generator-276"><span class="linenos">276</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-277"><a href="#Presto.Generator-277"><span class="linenos">277</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-278"><a href="#Presto.Generator-278"><span class="linenos">278</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-279"><a href="#Presto.Generator-279"><span class="linenos">279</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-280"><a href="#Presto.Generator-280"><span class="linenos">280</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-281"><a href="#Presto.Generator-281"><span class="linenos">281</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-282"><a href="#Presto.Generator-282"><span class="linenos">282</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-283"><a href="#Presto.Generator-283"><span class="linenos">283</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-284"><a href="#Presto.Generator-284"><span class="linenos">284</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-285"><a href="#Presto.Generator-285"><span class="linenos">285</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-286"><a href="#Presto.Generator-286"><span class="linenos">286</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-287"><a href="#Presto.Generator-287"><span class="linenos">287</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-288"><a href="#Presto.Generator-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto.Generator-289"><a href="#Presto.Generator-289"><span class="linenos">289</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-290"><a href="#Presto.Generator-290"><span class="linenos">290</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-291"><a href="#Presto.Generator-291"><span class="linenos">291</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-292"><a href="#Presto.Generator-292"><span class="linenos">292</span></a> <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">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-294"><a href="#Presto.Generator-294"><span class="linenos">294</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-295"><a href="#Presto.Generator-295"><span class="linenos">295</span></a> <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">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-297"><a href="#Presto.Generator-297"><span class="linenos">297</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-298"><a href="#Presto.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="k">lambda</span> <span class="bp">self</span><span 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-299"><a href="#Presto.Generator-299"><span class="linenos">299</span></a> <span class="s2">&quot;DATE_ADD&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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-301"><a href="#Presto.Generator-301"><span class="linenos">301</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="Presto.Generator-302"><a href="#Presto.Generator-302"><span class="linenos">302</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator-303"><a href="#Presto.Generator-303"><span class="linenos">303</span></a> <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">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-305"><a href="#Presto.Generator-305"><span class="linenos">305</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-306"><a href="#Presto.Generator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-307"><a href="#Presto.Generator-307"><span class="linenos">307</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-308"><a href="#Presto.Generator-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-309"><a href="#Presto.Generator-309"><span class="linenos">309</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-310"><a href="#Presto.Generator-310"><span class="linenos">310</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-311"><a href="#Presto.Generator-311"><span class="linenos">311</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-312"><a href="#Presto.Generator-312"><span class="linenos">312</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-313"><a href="#Presto.Generator-313"><span class="linenos">313</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-314"><a href="#Presto.Generator-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-315"><a href="#Presto.Generator-315"><span class="linenos">315</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-316"><a href="#Presto.Generator-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-317"><a href="#Presto.Generator-317"><span class="linenos">317</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-318"><a href="#Presto.Generator-318"><span class="linenos">318</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-319"><a href="#Presto.Generator-319"><span class="linenos">319</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-320"><a href="#Presto.Generator-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-321"><a href="#Presto.Generator-321"><span class="linenos">321</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-322"><a href="#Presto.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-323"><a href="#Presto.Generator-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-324"><a href="#Presto.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-325"><a href="#Presto.Generator-325"><span class="linenos">325</span></a> <span class="s2">&quot;ELEMENT_AT&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">seq_get</span><span class="p">(</span><span class="n">apply_index_offset</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">expressions</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="Presto.Generator-326"><a href="#Presto.Generator-326"><span class="linenos">326</span></a> <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">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_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">Schema</span><span class="p">:</span> <span class="n">_schema_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">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-330"><a href="#Presto.Generator-330"><span class="linenos">330</span></a> <span class="p">[</span>
+</span><span id="Presto.Generator-331"><a href="#Presto.Generator-331"><span class="linenos">331</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-332"><a href="#Presto.Generator-332"><span class="linenos">332</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-333"><a href="#Presto.Generator-333"><span class="linenos">333</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-334"><a href="#Presto.Generator-334"><span class="linenos">334</span></a> <span class="p">]</span>
+</span><span id="Presto.Generator-335"><a href="#Presto.Generator-335"><span class="linenos">335</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-338"><a href="#Presto.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="k">lambda</span> <span class="bp">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-339"><a href="#Presto.Generator-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-340"><a href="#Presto.Generator-340"><span class="linenos">340</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-341"><a href="#Presto.Generator-341"><span class="linenos">341</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-342"><a href="#Presto.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-343"><a href="#Presto.Generator-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-344"><a href="#Presto.Generator-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
+</span><span id="Presto.Generator-345"><a href="#Presto.Generator-345"><span class="linenos">345</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-346"><a href="#Presto.Generator-346"><span class="linenos">346</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-347"><a href="#Presto.Generator-347"><span class="linenos">347</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-348"><a href="#Presto.Generator-348"><span class="linenos">348</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-349"><a href="#Presto.Generator-349"><span class="linenos">349</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-350"><a href="#Presto.Generator-350"><span class="linenos">350</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-351"><a href="#Presto.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">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto.Generator-352"><a href="#Presto.Generator-352"><span class="linenos">352</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-353"><a href="#Presto.Generator-353"><span class="linenos">353</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-354"><a href="#Presto.Generator-354"><span class="linenos">354</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-355"><a href="#Presto.Generator-355"><span class="linenos">355</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-356"><a href="#Presto.Generator-356"><span class="linenos">356</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-357"><a href="#Presto.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="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-358"><a href="#Presto.Generator-358"><span class="linenos">358</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-359"><a href="#Presto.Generator-359"><span class="linenos">359</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-360"><a href="#Presto.Generator-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
+</span><span id="Presto.Generator-361"><a href="#Presto.Generator-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Presto.Generator-362"><a href="#Presto.Generator-362"><span class="linenos">362</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Presto.Generator-363"><a href="#Presto.Generator-363"><span class="linenos">363</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-364"><a href="#Presto.Generator-364"><span class="linenos">364</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-365"><a href="#Presto.Generator-365"><span class="linenos">365</span></a>
+</span><span id="Presto.Generator-366"><a href="#Presto.Generator-366"><span class="linenos">366</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-367"><a href="#Presto.Generator-367"><span class="linenos">367</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-368"><a href="#Presto.Generator-368"><span class="linenos">368</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-369"><a href="#Presto.Generator-369"><span class="linenos">369</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-370"><a href="#Presto.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">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator-371"><a href="#Presto.Generator-371"><span class="linenos">371</span></a>
+</span><span id="Presto.Generator-372"><a href="#Presto.Generator-372"><span class="linenos">372</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-373"><a href="#Presto.Generator-373"><span class="linenos">373</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-374"><a href="#Presto.Generator-374"><span class="linenos">374</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-375"><a href="#Presto.Generator-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Presto.Generator-376"><a href="#Presto.Generator-376"><span class="linenos">376</span></a>
+</span><span id="Presto.Generator-377"><a href="#Presto.Generator-377"><span class="linenos">377</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-378"><a href="#Presto.Generator-378"><span class="linenos">378</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator-379"><a href="#Presto.Generator-379"><span class="linenos">379</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator-380"><a href="#Presto.Generator-380"><span class="linenos">380</span></a> <span class="n">step</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;step&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator-381"><a href="#Presto.Generator-381"><span class="linenos">381</span></a>
+</span><span id="Presto.Generator-382"><a href="#Presto.Generator-382"><span class="linenos">382</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator-383"><a href="#Presto.Generator-383"><span class="linenos">383</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator-384"><a href="#Presto.Generator-384"><span class="linenos">384</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator-385"><a href="#Presto.Generator-385"><span class="linenos">385</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator-386"><a href="#Presto.Generator-386"><span class="linenos">386</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator-387"><a href="#Presto.Generator-387"><span class="linenos">387</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto.Generator-388"><a href="#Presto.Generator-388"><span class="linenos">388</span></a>
+</span><span id="Presto.Generator-389"><a href="#Presto.Generator-389"><span class="linenos">389</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator-390"><a href="#Presto.Generator-390"><span class="linenos">390</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Presto.Generator-391"><a href="#Presto.Generator-391"><span class="linenos">391</span></a>
+</span><span id="Presto.Generator-392"><a href="#Presto.Generator-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="Presto.Generator-393"><a href="#Presto.Generator-393"><span class="linenos">393</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="Presto.Generator-394"><a href="#Presto.Generator-394"><span class="linenos">394</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator-395"><a href="#Presto.Generator-395"><span class="linenos">395</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="Presto.Generator-396"><a href="#Presto.Generator-396"><span class="linenos">396</span></a>
+</span><span id="Presto.Generator-397"><a href="#Presto.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">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+</span><span id="Presto.Generator-398"><a href="#Presto.Generator-398"><span class="linenos">398</span></a>
+</span><span id="Presto.Generator-399"><a href="#Presto.Generator-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Presto.Generator-400"><a href="#Presto.Generator-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Presto.Generator-401"><a href="#Presto.Generator-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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Presto.Generator-402"><a href="#Presto.Generator-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Presto.Generator-403"><a href="#Presto.Generator-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-404"><a href="#Presto.Generator-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Presto.Generator-405"><a href="#Presto.Generator-405"><span class="linenos">405</span></a> <span class="p">]</span>
</span></pre></div>
@@ -1810,6 +1911,30 @@ Default: True</li>
</div>
+ <div id="Presto.Generator.TZ_TO_WITH_TIME_ZONE" class="classattr">
+ <div class="attr variable">
+ <span class="name">TZ_TO_WITH_TIME_ZONE</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Presto.Generator.TZ_TO_WITH_TIME_ZONE"></a>
+
+
+
+ </div>
+ <div id="Presto.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Presto.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="Presto.Generator.STRUCT_DELIMITER" class="classattr">
<div class="attr variable">
<span class="name">STRUCT_DELIMITER</span> =
@@ -1826,7 +1951,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Presto.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1839,7 +1964,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
<input id="Presto.Generator.TYPE_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.INT: &#39;INT&#39;&gt;: &#39;INTEGER&#39;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: &#39;REAL&#39;, &lt;Type.BINARY: &#39;BINARY&#39;&gt;: &#39;VARBINARY&#39;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.STRUCT: &#39;STRUCT&#39;&gt;: &#39;ROW&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.INT: &#39;INT&#39;&gt;: &#39;INTEGER&#39;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: &#39;REAL&#39;, &lt;Type.BINARY: &#39;BINARY&#39;&gt;: &#39;VARBINARY&#39;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.TIMETZ: &#39;TIMETZ&#39;&gt;: &#39;TIME&#39;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.STRUCT: &#39;STRUCT&#39;&gt;: &#39;ROW&#39;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;: &#39;TIMESTAMP&#39;}</span>
</div>
@@ -1852,7 +1977,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Presto.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _ts_or_ds_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _approx_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _initcap_sql&gt;, &lt;class &#39;<a href="../expressions.html#Lateral">sqlglot.expressions.Lateral</a>&#39;&gt;: &lt;function _explode_to_unnest_sql&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function left_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _quantile_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function right_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeBracket">sqlglot.expressions.SafeBracket</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#Schema">sqlglot.expressions.Schema</a>&#39;&gt;: &lt;function _schema_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _no_sort_array&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _ts_or_ds_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _approx_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;: &lt;function _first_last_sql&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _initcap_sql&gt;, &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;: &lt;function _first_last_sql&gt;, &lt;class &#39;<a href="../expressions.html#Lateral">sqlglot.expressions.Lateral</a>&#39;&gt;: &lt;function _explode_to_unnest_sql&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function left_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _quantile_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function right_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeBracket">sqlglot.expressions.SafeBracket</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#Schema">sqlglot.expressions.Schema</a>&#39;&gt;: &lt;function _schema_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _no_sort_array&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function <a href="#Presto.Generator">Presto.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;}</span>
</div>
@@ -1872,11 +1997,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-336"><a href="#Presto.Generator.interval_sql-336"><span class="linenos">336</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-337"><a href="#Presto.Generator.interval_sql-337"><span class="linenos">337</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-338"><a href="#Presto.Generator.interval_sql-338"><span class="linenos">338</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-339"><a href="#Presto.Generator.interval_sql-339"><span class="linenos">339</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-340"><a href="#Presto.Generator.interval_sql-340"><span class="linenos">340</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-366"><a href="#Presto.Generator.interval_sql-366"><span class="linenos">366</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-367"><a href="#Presto.Generator.interval_sql-367"><span class="linenos">367</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-368"><a href="#Presto.Generator.interval_sql-368"><span class="linenos">368</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-369"><a href="#Presto.Generator.interval_sql-369"><span class="linenos">369</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-370"><a href="#Presto.Generator.interval_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">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1894,10 +2019,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-342"><a href="#Presto.Generator.transaction_sql-342"><span class="linenos">342</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-343"><a href="#Presto.Generator.transaction_sql-343"><span class="linenos">343</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-344"><a href="#Presto.Generator.transaction_sql-344"><span class="linenos">344</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-345"><a href="#Presto.Generator.transaction_sql-345"><span class="linenos">345</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-372"><a href="#Presto.Generator.transaction_sql-372"><span class="linenos">372</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-373"><a href="#Presto.Generator.transaction_sql-373"><span class="linenos">373</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-374"><a href="#Presto.Generator.transaction_sql-374"><span class="linenos">374</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-375"><a href="#Presto.Generator.transaction_sql-375"><span class="linenos">375</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>
@@ -1915,27 +2040,27 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.generateseries_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.generateseries_sql-347"><a href="#Presto.Generator.generateseries_sql-347"><span class="linenos">347</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-348"><a href="#Presto.Generator.generateseries_sql-348"><span class="linenos">348</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator.generateseries_sql-349"><a href="#Presto.Generator.generateseries_sql-349"><span class="linenos">349</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator.generateseries_sql-350"><a href="#Presto.Generator.generateseries_sql-350"><span class="linenos">350</span></a> <span class="n">step</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;step&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator.generateseries_sql-351"><a href="#Presto.Generator.generateseries_sql-351"><span class="linenos">351</span></a>
-</span><span id="Presto.Generator.generateseries_sql-352"><a href="#Presto.Generator.generateseries_sql-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator.generateseries_sql-353"><a href="#Presto.Generator.generateseries_sql-353"><span class="linenos">353</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator.generateseries_sql-354"><a href="#Presto.Generator.generateseries_sql-354"><span class="linenos">354</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator.generateseries_sql-355"><a href="#Presto.Generator.generateseries_sql-355"><span class="linenos">355</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator.generateseries_sql-356"><a href="#Presto.Generator.generateseries_sql-356"><span class="linenos">356</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-357"><a href="#Presto.Generator.generateseries_sql-357"><span class="linenos">357</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto.Generator.generateseries_sql-358"><a href="#Presto.Generator.generateseries_sql-358"><span class="linenos">358</span></a>
-</span><span id="Presto.Generator.generateseries_sql-359"><a href="#Presto.Generator.generateseries_sql-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator.generateseries_sql-360"><a href="#Presto.Generator.generateseries_sql-360"><span class="linenos">360</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Presto.Generator.generateseries_sql-361"><a href="#Presto.Generator.generateseries_sql-361"><span class="linenos">361</span></a>
-</span><span id="Presto.Generator.generateseries_sql-362"><a href="#Presto.Generator.generateseries_sql-362"><span class="linenos">362</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-363"><a href="#Presto.Generator.generateseries_sql-363"><span class="linenos">363</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="Presto.Generator.generateseries_sql-364"><a href="#Presto.Generator.generateseries_sql-364"><span class="linenos">364</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-365"><a href="#Presto.Generator.generateseries_sql-365"><span class="linenos">365</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
-</span><span id="Presto.Generator.generateseries_sql-366"><a href="#Presto.Generator.generateseries_sql-366"><span class="linenos">366</span></a>
-</span><span id="Presto.Generator.generateseries_sql-367"><a href="#Presto.Generator.generateseries_sql-367"><span class="linenos">367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.generateseries_sql-377"><a href="#Presto.Generator.generateseries_sql-377"><span class="linenos">377</span></a> <span class="k">def</span> <span class="nf">generateseries_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-378"><a href="#Presto.Generator.generateseries_sql-378"><span class="linenos">378</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;start&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator.generateseries_sql-379"><a href="#Presto.Generator.generateseries_sql-379"><span class="linenos">379</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;end&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator.generateseries_sql-380"><a href="#Presto.Generator.generateseries_sql-380"><span class="linenos">380</span></a> <span class="n">step</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;step&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator.generateseries_sql-381"><a href="#Presto.Generator.generateseries_sql-381"><span class="linenos">381</span></a>
+</span><span id="Presto.Generator.generateseries_sql-382"><a href="#Presto.Generator.generateseries_sql-382"><span class="linenos">382</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator.generateseries_sql-383"><a href="#Presto.Generator.generateseries_sql-383"><span class="linenos">383</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator.generateseries_sql-384"><a href="#Presto.Generator.generateseries_sql-384"><span class="linenos">384</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator.generateseries_sql-385"><a href="#Presto.Generator.generateseries_sql-385"><span class="linenos">385</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator.generateseries_sql-386"><a href="#Presto.Generator.generateseries_sql-386"><span class="linenos">386</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-387"><a href="#Presto.Generator.generateseries_sql-387"><span class="linenos">387</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto.Generator.generateseries_sql-388"><a href="#Presto.Generator.generateseries_sql-388"><span class="linenos">388</span></a>
+</span><span id="Presto.Generator.generateseries_sql-389"><a href="#Presto.Generator.generateseries_sql-389"><span class="linenos">389</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator.generateseries_sql-390"><a href="#Presto.Generator.generateseries_sql-390"><span class="linenos">390</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">target_type</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Presto.Generator.generateseries_sql-391"><a href="#Presto.Generator.generateseries_sql-391"><span class="linenos">391</span></a>
+</span><span id="Presto.Generator.generateseries_sql-392"><a href="#Presto.Generator.generateseries_sql-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-393"><a href="#Presto.Generator.generateseries_sql-393"><span class="linenos">393</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="Presto.Generator.generateseries_sql-394"><a href="#Presto.Generator.generateseries_sql-394"><span class="linenos">394</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-395"><a href="#Presto.Generator.generateseries_sql-395"><span class="linenos">395</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="p">)</span>
+</span><span id="Presto.Generator.generateseries_sql-396"><a href="#Presto.Generator.generateseries_sql-396"><span class="linenos">396</span></a>
+</span><span id="Presto.Generator.generateseries_sql-397"><a href="#Presto.Generator.generateseries_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">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
</span></pre></div>
@@ -1953,13 +2078,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.offset_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.offset_limit_modifiers-369"><a href="#Presto.Generator.offset_limit_modifiers-369"><span class="linenos">369</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-370"><a href="#Presto.Generator.offset_limit_modifiers-370"><span class="linenos">370</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-371"><a href="#Presto.Generator.offset_limit_modifiers-371"><span class="linenos">371</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-372"><a href="#Presto.Generator.offset_limit_modifiers-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-373"><a href="#Presto.Generator.offset_limit_modifiers-373"><span class="linenos">373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-374"><a href="#Presto.Generator.offset_limit_modifiers-374"><span class="linenos">374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-375"><a href="#Presto.Generator.offset_limit_modifiers-375"><span class="linenos">375</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.offset_limit_modifiers-399"><a href="#Presto.Generator.offset_limit_modifiers-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-400"><a href="#Presto.Generator.offset_limit_modifiers-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-401"><a href="#Presto.Generator.offset_limit_modifiers-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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-402"><a href="#Presto.Generator.offset_limit_modifiers-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-403"><a href="#Presto.Generator.offset_limit_modifiers-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-404"><a href="#Presto.Generator.offset_limit_modifiers-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-405"><a href="#Presto.Generator.offset_limit_modifiers-405"><span class="linenos">405</span></a> <span class="p">]</span>
</span></pre></div>
@@ -1982,7 +2107,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="Presto.Generator.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -2052,26 +2177,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.can_identify-253"><a href="#Presto.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Presto.Generator.can_identify-254"><a href="#Presto.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Presto.Generator.can_identify-255"><a href="#Presto.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Presto.Generator.can_identify-256"><a href="#Presto.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Presto.Generator.can_identify-257"><a href="#Presto.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Presto.Generator.can_identify-258"><a href="#Presto.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Presto.Generator.can_identify-259"><a href="#Presto.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Presto.Generator.can_identify-260"><a href="#Presto.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Presto.Generator.can_identify-261"><a href="#Presto.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Presto.Generator.can_identify-262"><a href="#Presto.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Presto.Generator.can_identify-263"><a href="#Presto.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Presto.Generator.can_identify-264"><a href="#Presto.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Presto.Generator.can_identify-265"><a href="#Presto.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Presto.Generator.can_identify-266"><a href="#Presto.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Presto.Generator.can_identify-267"><a href="#Presto.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Presto.Generator.can_identify-268"><a href="#Presto.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Presto.Generator.can_identify-269"><a href="#Presto.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Presto.Generator.can_identify-270"><a href="#Presto.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.can_identify-256"><a href="#Presto.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Presto.Generator.can_identify-257"><a href="#Presto.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Presto.Generator.can_identify-258"><a href="#Presto.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Presto.Generator.can_identify-259"><a href="#Presto.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Presto.Generator.can_identify-260"><a href="#Presto.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Presto.Generator.can_identify-261"><a href="#Presto.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Presto.Generator.can_identify-262"><a href="#Presto.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Presto.Generator.can_identify-263"><a href="#Presto.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Presto.Generator.can_identify-264"><a href="#Presto.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Presto.Generator.can_identify-265"><a href="#Presto.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Presto.Generator.can_identify-266"><a href="#Presto.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Presto.Generator.can_identify-267"><a href="#Presto.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Presto.Generator.can_identify-268"><a href="#Presto.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Presto.Generator.can_identify-269"><a href="#Presto.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Presto.Generator.can_identify-270"><a href="#Presto.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Presto.Generator.can_identify-271"><a href="#Presto.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Presto.Generator.can_identify-272"><a href="#Presto.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Presto.Generator.can_identify-272"><a href="#Presto.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Presto.Generator.can_identify-273"><a href="#Presto.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Presto.Generator.can_identify-274"><a href="#Presto.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Presto.Generator.can_identify-275"><a href="#Presto.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2142,26 +2267,14 @@ Default: True</li>
</div>
- <div id="Presto.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Presto.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Presto.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Presto.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Presto.Tokenizer">sqlglot.dialects.presto.Presto.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Presto.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Presto.Generator.TOKENIZER_CLASS"></a>
@@ -2263,6 +2376,7 @@ Default: True</li>
<dd id="Presto.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Presto.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
<dd id="Presto.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Presto.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Presto.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Presto.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Presto.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -2305,6 +2419,7 @@ Default: True</li>
<dd id="Presto.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Presto.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Presto.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Presto.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Presto.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Presto.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Presto.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2323,7 +2438,7 @@ Default: True</li>
<dd id="Presto.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Presto.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Presto.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Presto.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Presto.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Presto.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Presto.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Presto.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -2368,6 +2483,7 @@ Default: True</li>
<dd id="Presto.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Presto.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Presto.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Presto.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Presto.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Presto.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Presto.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -2376,6 +2492,8 @@ Default: True</li>
<dd id="Presto.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Presto.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Presto.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Presto.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Presto.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Presto.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Presto.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Presto.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2532,6 +2650,8 @@ Default: True</li>
<dd id="Presto.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Presto.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Presto.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Presto.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Presto.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/redshift.html b/docs/sqlglot/dialects/redshift.html
index 6cdb37d..a3a2fda 100644
--- a/docs/sqlglot/dialects/redshift.html
+++ b/docs/sqlglot/dialects/redshift.html
@@ -46,9 +46,15 @@
<a class="class" href="#Redshift.Parser">Redshift.Parser</a>
<ul class="memberlist">
<li>
+ <a class="variable" href="#Redshift.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#Redshift.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
+ <a class="variable" href="#Redshift.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Redshift.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -103,6 +109,12 @@
<a class="variable" href="#Redshift.Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a>
</li>
<li>
+ <a class="variable" href="#Redshift.Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Redshift.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#Redshift.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -145,10 +157,7 @@
<a class="variable" href="#Redshift.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Redshift.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Redshift.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Redshift.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Redshift.Generator.BIT_START">BIT_START</a>
@@ -287,132 +296,141 @@
</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">Postgres</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">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</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-44"><a href="#L-44"><span class="linenos"> 44</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-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
-</span><span id="L-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 class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</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-50"><a href="#L-50"><span class="linenos"> 50</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">2</span><span class="p">)),</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</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-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="p">),</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="p">}</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="nb">super</span><span class="p">()</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="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><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="p">(</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="L-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 class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">return</span> <span class="n">this</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">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-73"><a href="#L-73"><span class="linenos"> 73</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-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="bp">self</span><span 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-75"><a href="#L-75"><span class="linenos"> 75</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-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
-</span><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">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;SYSDATE&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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="L-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="c1"># Redshift allows # to appear as a table identifier prefix</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
-</span><span id="L-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">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">QUERY_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">VALUES_AS_TABLE</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">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="L-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&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;INTEGER&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">PROPERTIES_LOCATION</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">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</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><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-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="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-125"><a href="#L-125"><span class="linenos">125</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-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">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-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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">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-135"><a href="#L-135"><span class="linenos">135</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;redshift&quot;</span><span class="p">),</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <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="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
-</span><span id="L-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="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="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="n">FUNCTIONS</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 class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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="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-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="p">),</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</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">2</span><span class="p">)),</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</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-54"><a href="#L-54"><span class="linenos"> 54</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-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="p">),</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="p">}</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="p">)</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="L-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 class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="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-77"><a href="#L-77"><span class="linenos"> 77</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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="bp">self</span><span 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-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">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><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">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</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-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="n">KEYWORDS</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="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;SYSDATE&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-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="L-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="c1"># Redshift allows # to appear as a table identifier prefix</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">RENAME_TABLE_WITH_DB</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">QUERY_HINTS</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">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</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">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="L-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&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">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</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><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</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">PROPERTIES_LOCATION</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">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="p">}</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</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-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">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-131"><a href="#L-131"><span class="linenos">131</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-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="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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</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">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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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;redshift&quot;</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">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
-</span><span id="L-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">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-147"><a href="#L-147"><span class="linenos">147</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="L-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">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
+</span><span id="L-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="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="L-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">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-151"><a href="#L-151"><span class="linenos">151</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
-</span><span id="L-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="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="L-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="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-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span>
+</span><span id="L-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">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
+</span><span id="L-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">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-156"><a href="#L-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-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">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-160"><a href="#L-160"><span class="linenos">160</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd"> &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="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
+</span><span id="L-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">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>
@@ -440,132 +458,141 @@
</span><span id="Redshift-38"><a href="#Redshift-38"><span class="linenos"> 38</span></a> <span class="p">}</span>
</span><span id="Redshift-39"><a href="#Redshift-39"><span class="linenos"> 39</span></a>
</span><span id="Redshift-40"><a href="#Redshift-40"><span class="linenos"> 40</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Redshift-41"><a href="#Redshift-41"><span class="linenos"> 41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-42"><a href="#Redshift-42"><span class="linenos"> 42</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Redshift-43"><a href="#Redshift-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
-</span><span id="Redshift-44"><a href="#Redshift-44"><span class="linenos"> 44</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="Redshift-45"><a href="#Redshift-45"><span class="linenos"> 45</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Redshift-46"><a href="#Redshift-46"><span class="linenos"> 46</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
-</span><span id="Redshift-47"><a href="#Redshift-47"><span class="linenos"> 47</span></a> <span class="p">),</span>
-</span><span id="Redshift-48"><a href="#Redshift-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
-</span><span id="Redshift-49"><a href="#Redshift-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
-</span><span id="Redshift-50"><a href="#Redshift-50"><span class="linenos"> 50</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="Redshift-51"><a href="#Redshift-51"><span class="linenos"> 51</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">2</span><span class="p">)),</span>
-</span><span id="Redshift-52"><a href="#Redshift-52"><span class="linenos"> 52</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="Redshift-53"><a href="#Redshift-53"><span class="linenos"> 53</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="Redshift-54"><a href="#Redshift-54"><span class="linenos"> 54</span></a> <span class="p">),</span>
-</span><span id="Redshift-55"><a href="#Redshift-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Redshift-56"><a href="#Redshift-56"><span class="linenos"> 56</span></a> <span class="p">}</span>
-</span><span id="Redshift-57"><a href="#Redshift-57"><span class="linenos"> 57</span></a>
-</span><span id="Redshift-58"><a href="#Redshift-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Redshift-59"><a href="#Redshift-59"><span class="linenos"> 59</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-60"><a href="#Redshift-60"><span class="linenos"> 60</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Redshift-61"><a href="#Redshift-61"><span class="linenos"> 61</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Redshift-62"><a href="#Redshift-62"><span class="linenos"> 62</span></a>
-</span><span id="Redshift-63"><a href="#Redshift-63"><span class="linenos"> 63</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Redshift-64"><a href="#Redshift-64"><span class="linenos"> 64</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
-</span><span id="Redshift-65"><a href="#Redshift-65"><span class="linenos"> 65</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="Redshift-66"><a href="#Redshift-66"><span class="linenos"> 66</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Redshift-67"><a href="#Redshift-67"><span class="linenos"> 67</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Redshift-68"><a href="#Redshift-68"><span class="linenos"> 68</span></a> <span class="p">):</span>
-</span><span id="Redshift-69"><a href="#Redshift-69"><span class="linenos"> 69</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
-</span><span id="Redshift-70"><a href="#Redshift-70"><span class="linenos"> 70</span></a>
-</span><span id="Redshift-71"><a href="#Redshift-71"><span class="linenos"> 71</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Redshift-72"><a href="#Redshift-72"><span class="linenos"> 72</span></a>
-</span><span id="Redshift-73"><a href="#Redshift-73"><span class="linenos"> 73</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="Redshift-74"><a href="#Redshift-74"><span class="linenos"> 74</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="Redshift-75"><a href="#Redshift-75"><span class="linenos"> 75</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="Redshift-76"><a href="#Redshift-76"><span class="linenos"> 76</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Redshift-77"><a href="#Redshift-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
-</span><span id="Redshift-78"><a href="#Redshift-78"><span class="linenos"> 78</span></a>
-</span><span id="Redshift-79"><a href="#Redshift-79"><span class="linenos"> 79</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Redshift-80"><a href="#Redshift-80"><span class="linenos"> 80</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift-81"><a href="#Redshift-81"><span class="linenos"> 81</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift-82"><a href="#Redshift-82"><span class="linenos"> 82</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="Redshift-83"><a href="#Redshift-83"><span class="linenos"> 83</span></a>
-</span><span id="Redshift-84"><a href="#Redshift-84"><span class="linenos"> 84</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-85"><a href="#Redshift-85"><span class="linenos"> 85</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="Redshift-86"><a href="#Redshift-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="Redshift-87"><a href="#Redshift-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="Redshift-88"><a href="#Redshift-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;SYSDATE&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="Redshift-89"><a href="#Redshift-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="Redshift-90"><a href="#Redshift-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Redshift-91"><a href="#Redshift-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="Redshift-92"><a href="#Redshift-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="p">}</span>
-</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</span></a>
-</span><span id="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
-</span><span id="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
-</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</span></a>
-</span><span id="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a>
-</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Redshift-108"><a href="#Redshift-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift-109"><a href="#Redshift-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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift-110"><a href="#Redshift-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Redshift-111"><a href="#Redshift-111"><span class="linenos">111</span></a> <span class="p">}</span>
-</span><span id="Redshift-112"><a href="#Redshift-112"><span class="linenos">112</span></a>
-</span><span id="Redshift-113"><a href="#Redshift-113"><span class="linenos">113</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-114"><a href="#Redshift-114"><span class="linenos">114</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">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Redshift-115"><a href="#Redshift-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Redshift-116"><a href="#Redshift-116"><span class="linenos">116</span></a> <span class="p">}</span>
-</span><span id="Redshift-117"><a href="#Redshift-117"><span class="linenos">117</span></a>
-</span><span id="Redshift-118"><a href="#Redshift-118"><span class="linenos">118</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-119"><a href="#Redshift-119"><span class="linenos">119</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Redshift-120"><a href="#Redshift-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift-121"><a href="#Redshift-121"><span class="linenos">121</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-122"><a href="#Redshift-122"><span class="linenos">122</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-123"><a href="#Redshift-123"><span class="linenos">123</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-124"><a href="#Redshift-124"><span class="linenos">124</span></a> <span class="p">),</span>
-</span><span id="Redshift-125"><a href="#Redshift-125"><span class="linenos">125</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-126"><a href="#Redshift-126"><span class="linenos">126</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-127"><a href="#Redshift-127"><span class="linenos">127</span></a> <span class="p">),</span>
-</span><span id="Redshift-128"><a href="#Redshift-128"><span class="linenos">128</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-129"><a href="#Redshift-129"><span class="linenos">129</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-130"><a href="#Redshift-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
-</span><span id="Redshift-131"><a href="#Redshift-131"><span class="linenos">131</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-132"><a href="#Redshift-132"><span class="linenos">132</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-133"><a href="#Redshift-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift-134"><a href="#Redshift-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="Redshift-135"><a href="#Redshift-135"><span class="linenos">135</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-136"><a href="#Redshift-136"><span class="linenos">136</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;redshift&quot;</span><span class="p">),</span>
-</span><span id="Redshift-137"><a href="#Redshift-137"><span class="linenos">137</span></a> <span class="p">}</span>
-</span><span id="Redshift-138"><a href="#Redshift-138"><span class="linenos">138</span></a>
-</span><span id="Redshift-139"><a href="#Redshift-139"><span class="linenos">139</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
-</span><span id="Redshift-140"><a href="#Redshift-140"><span class="linenos">140</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
-</span><span id="Redshift-141"><a href="#Redshift-141"><span class="linenos">141</span></a>
-</span><span id="Redshift-142"><a href="#Redshift-142"><span class="linenos">142</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
-</span><span id="Redshift-143"><a href="#Redshift-143"><span class="linenos">143</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
+</span><span id="Redshift-41"><a href="#Redshift-41"><span class="linenos"> 41</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-42"><a href="#Redshift-42"><span class="linenos"> 42</span></a>
+</span><span id="Redshift-43"><a href="#Redshift-43"><span class="linenos"> 43</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-44"><a href="#Redshift-44"><span class="linenos"> 44</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Redshift-45"><a href="#Redshift-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="Redshift-46"><a href="#Redshift-46"><span class="linenos"> 46</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="Redshift-47"><a href="#Redshift-47"><span class="linenos"> 47</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Redshift-48"><a href="#Redshift-48"><span class="linenos"> 48</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
+</span><span id="Redshift-49"><a href="#Redshift-49"><span class="linenos"> 49</span></a> <span class="p">),</span>
+</span><span id="Redshift-50"><a href="#Redshift-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
+</span><span id="Redshift-51"><a href="#Redshift-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
+</span><span id="Redshift-52"><a href="#Redshift-52"><span class="linenos"> 52</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="Redshift-53"><a href="#Redshift-53"><span class="linenos"> 53</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">2</span><span class="p">)),</span>
+</span><span id="Redshift-54"><a href="#Redshift-54"><span class="linenos"> 54</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="Redshift-55"><a href="#Redshift-55"><span class="linenos"> 55</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="Redshift-56"><a href="#Redshift-56"><span class="linenos"> 56</span></a> <span class="p">),</span>
+</span><span id="Redshift-57"><a href="#Redshift-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Redshift-58"><a href="#Redshift-58"><span class="linenos"> 58</span></a> <span class="p">}</span>
+</span><span id="Redshift-59"><a href="#Redshift-59"><span class="linenos"> 59</span></a>
+</span><span id="Redshift-60"><a href="#Redshift-60"><span class="linenos"> 60</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Redshift-61"><a href="#Redshift-61"><span class="linenos"> 61</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift-62"><a href="#Redshift-62"><span class="linenos"> 62</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Redshift-63"><a href="#Redshift-63"><span class="linenos"> 63</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Redshift-64"><a href="#Redshift-64"><span class="linenos"> 64</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Redshift-65"><a href="#Redshift-65"><span class="linenos"> 65</span></a> <span class="p">)</span>
+</span><span id="Redshift-66"><a href="#Redshift-66"><span class="linenos"> 66</span></a>
+</span><span id="Redshift-67"><a href="#Redshift-67"><span class="linenos"> 67</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Redshift-68"><a href="#Redshift-68"><span class="linenos"> 68</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="Redshift-69"><a href="#Redshift-69"><span class="linenos"> 69</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="Redshift-70"><a href="#Redshift-70"><span class="linenos"> 70</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Redshift-71"><a href="#Redshift-71"><span class="linenos"> 71</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Redshift-72"><a href="#Redshift-72"><span class="linenos"> 72</span></a> <span class="p">):</span>
+</span><span id="Redshift-73"><a href="#Redshift-73"><span class="linenos"> 73</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
+</span><span id="Redshift-74"><a href="#Redshift-74"><span class="linenos"> 74</span></a>
+</span><span id="Redshift-75"><a href="#Redshift-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Redshift-76"><a href="#Redshift-76"><span class="linenos"> 76</span></a>
+</span><span id="Redshift-77"><a href="#Redshift-77"><span class="linenos"> 77</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="Redshift-78"><a href="#Redshift-78"><span class="linenos"> 78</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Redshift-79"><a href="#Redshift-79"><span class="linenos"> 79</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
+</span><span id="Redshift-80"><a href="#Redshift-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">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Redshift-81"><a href="#Redshift-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="Redshift-82"><a href="#Redshift-82"><span class="linenos"> 82</span></a>
+</span><span id="Redshift-83"><a href="#Redshift-83"><span class="linenos"> 83</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Redshift-84"><a href="#Redshift-84"><span class="linenos"> 84</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift-85"><a href="#Redshift-85"><span class="linenos"> 85</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift-86"><a href="#Redshift-86"><span class="linenos"> 86</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="Redshift-87"><a href="#Redshift-87"><span class="linenos"> 87</span></a>
+</span><span id="Redshift-88"><a href="#Redshift-88"><span class="linenos"> 88</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-89"><a href="#Redshift-89"><span class="linenos"> 89</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="Redshift-90"><a href="#Redshift-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="Redshift-91"><a href="#Redshift-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="Redshift-92"><a href="#Redshift-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;SYSDATE&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="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
+</span><span id="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a>
+</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
+</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
+</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a>
+</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Redshift-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift-108"><a href="#Redshift-108"><span class="linenos">108</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift-109"><a href="#Redshift-109"><span class="linenos">109</span></a>
+</span><span id="Redshift-110"><a href="#Redshift-110"><span class="linenos">110</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-111"><a href="#Redshift-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Redshift-112"><a href="#Redshift-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift-113"><a href="#Redshift-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Redshift-114"><a href="#Redshift-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">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="Redshift-115"><a href="#Redshift-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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Redshift-116"><a href="#Redshift-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift-117"><a href="#Redshift-117"><span class="linenos">117</span></a> <span class="p">}</span>
+</span><span id="Redshift-118"><a href="#Redshift-118"><span class="linenos">118</span></a>
+</span><span id="Redshift-119"><a href="#Redshift-119"><span class="linenos">119</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-120"><a href="#Redshift-120"><span class="linenos">120</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">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Redshift-121"><a href="#Redshift-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Redshift-122"><a href="#Redshift-122"><span class="linenos">122</span></a> <span class="p">}</span>
+</span><span id="Redshift-123"><a href="#Redshift-123"><span class="linenos">123</span></a>
+</span><span id="Redshift-124"><a href="#Redshift-124"><span class="linenos">124</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-125"><a href="#Redshift-125"><span class="linenos">125</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Redshift-126"><a href="#Redshift-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift-127"><a href="#Redshift-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="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-128"><a href="#Redshift-128"><span class="linenos">128</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-129"><a href="#Redshift-129"><span class="linenos">129</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-130"><a href="#Redshift-130"><span class="linenos">130</span></a> <span class="p">),</span>
+</span><span id="Redshift-131"><a href="#Redshift-131"><span class="linenos">131</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-132"><a href="#Redshift-132"><span class="linenos">132</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-133"><a href="#Redshift-133"><span class="linenos">133</span></a> <span class="p">),</span>
+</span><span id="Redshift-134"><a href="#Redshift-134"><span class="linenos">134</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-135"><a href="#Redshift-135"><span class="linenos">135</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-136"><a href="#Redshift-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
+</span><span id="Redshift-137"><a href="#Redshift-137"><span class="linenos">137</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-138"><a href="#Redshift-138"><span class="linenos">138</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-139"><a href="#Redshift-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift-140"><a href="#Redshift-140"><span class="linenos">140</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-141"><a href="#Redshift-141"><span class="linenos">141</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-142"><a href="#Redshift-142"><span class="linenos">142</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;redshift&quot;</span><span class="p">),</span>
+</span><span id="Redshift-143"><a href="#Redshift-143"><span class="linenos">143</span></a> <span class="p">}</span>
</span><span id="Redshift-144"><a href="#Redshift-144"><span class="linenos">144</span></a>
-</span><span id="Redshift-145"><a href="#Redshift-145"><span class="linenos">145</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
-</span><span id="Redshift-146"><a href="#Redshift-146"><span class="linenos">146</span></a>
-</span><span id="Redshift-147"><a href="#Redshift-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift-148"><a href="#Redshift-148"><span class="linenos">148</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="Redshift-149"><a href="#Redshift-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Redshift-145"><a href="#Redshift-145"><span class="linenos">145</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
+</span><span id="Redshift-146"><a href="#Redshift-146"><span class="linenos">146</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
+</span><span id="Redshift-147"><a href="#Redshift-147"><span class="linenos">147</span></a>
+</span><span id="Redshift-148"><a href="#Redshift-148"><span class="linenos">148</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
+</span><span id="Redshift-149"><a href="#Redshift-149"><span class="linenos">149</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="Redshift-150"><a href="#Redshift-150"><span class="linenos">150</span></a>
-</span><span id="Redshift-151"><a href="#Redshift-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift-152"><a href="#Redshift-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Redshift-153"><a href="#Redshift-153"><span class="linenos">153</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="Redshift-154"><a href="#Redshift-154"><span class="linenos">154</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="Redshift-155"><a href="#Redshift-155"><span class="linenos">155</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="Redshift-156"><a href="#Redshift-156"><span class="linenos">156</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="Redshift-157"><a href="#Redshift-157"><span class="linenos">157</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift-158"><a href="#Redshift-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="Redshift-159"><a href="#Redshift-159"><span class="linenos">159</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="Redshift-160"><a href="#Redshift-160"><span class="linenos">160</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="Redshift-161"><a href="#Redshift-161"><span class="linenos">161</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
-</span><span id="Redshift-162"><a href="#Redshift-162"><span class="linenos">162</span></a>
-</span><span id="Redshift-163"><a href="#Redshift-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="Redshift-164"><a href="#Redshift-164"><span class="linenos">164</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="Redshift-165"><a href="#Redshift-165"><span class="linenos">165</span></a>
-</span><span id="Redshift-166"><a href="#Redshift-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Redshift-151"><a href="#Redshift-151"><span class="linenos">151</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
+</span><span id="Redshift-152"><a href="#Redshift-152"><span class="linenos">152</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span>
+</span><span id="Redshift-153"><a href="#Redshift-153"><span class="linenos">153</span></a>
+</span><span id="Redshift-154"><a href="#Redshift-154"><span class="linenos">154</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
+</span><span id="Redshift-155"><a href="#Redshift-155"><span class="linenos">155</span></a>
+</span><span id="Redshift-156"><a href="#Redshift-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift-157"><a href="#Redshift-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="Redshift-158"><a href="#Redshift-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Redshift-159"><a href="#Redshift-159"><span class="linenos">159</span></a>
+</span><span id="Redshift-160"><a href="#Redshift-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift-161"><a href="#Redshift-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Redshift-162"><a href="#Redshift-162"><span class="linenos">162</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="Redshift-163"><a href="#Redshift-163"><span class="linenos">163</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="Redshift-164"><a href="#Redshift-164"><span class="linenos">164</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="Redshift-165"><a href="#Redshift-165"><span class="linenos">165</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="Redshift-166"><a href="#Redshift-166"><span class="linenos">166</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift-167"><a href="#Redshift-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="Redshift-168"><a href="#Redshift-168"><span class="linenos">168</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="Redshift-169"><a href="#Redshift-169"><span class="linenos">169</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="Redshift-170"><a href="#Redshift-170"><span class="linenos">170</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
+</span><span id="Redshift-171"><a href="#Redshift-171"><span class="linenos">171</span></a>
+</span><span id="Redshift-172"><a href="#Redshift-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="Redshift-173"><a href="#Redshift-173"><span class="linenos">173</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
+</span><span id="Redshift-174"><a href="#Redshift-174"><span class="linenos">174</span></a>
+</span><span id="Redshift-175"><a href="#Redshift-175"><span class="linenos">175</span></a> <span class="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>
@@ -828,6 +855,7 @@
<dd id="Redshift.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Redshift.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Redshift.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Redshift.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Redshift.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Redshift.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Redshift.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
@@ -865,43 +893,47 @@
</div>
<a class="headerlink" href="#Redshift.Parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Parser-40"><a href="#Redshift.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">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Redshift.Parser-41"><a href="#Redshift.Parser-41"><span class="linenos">41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Parser-42"><a href="#Redshift.Parser-42"><span class="linenos">42</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Redshift.Parser-43"><a href="#Redshift.Parser-43"><span class="linenos">43</span></a> <span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
-</span><span id="Redshift.Parser-44"><a href="#Redshift.Parser-44"><span class="linenos">44</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="Redshift.Parser-45"><a href="#Redshift.Parser-45"><span class="linenos">45</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Redshift.Parser-46"><a href="#Redshift.Parser-46"><span class="linenos">46</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Parser-47"><a href="#Redshift.Parser-47"><span class="linenos">47</span></a> <span class="p">),</span>
-</span><span id="Redshift.Parser-48"><a href="#Redshift.Parser-48"><span class="linenos">48</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
-</span><span id="Redshift.Parser-49"><a href="#Redshift.Parser-49"><span class="linenos">49</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
-</span><span id="Redshift.Parser-50"><a href="#Redshift.Parser-50"><span class="linenos">50</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="Redshift.Parser-51"><a href="#Redshift.Parser-51"><span class="linenos">51</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">2</span><span class="p">)),</span>
-</span><span id="Redshift.Parser-52"><a href="#Redshift.Parser-52"><span class="linenos">52</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="Redshift.Parser-53"><a href="#Redshift.Parser-53"><span class="linenos">53</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="Redshift.Parser-54"><a href="#Redshift.Parser-54"><span class="linenos">54</span></a> <span class="p">),</span>
-</span><span id="Redshift.Parser-55"><a href="#Redshift.Parser-55"><span class="linenos">55</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Redshift.Parser-56"><a href="#Redshift.Parser-56"><span class="linenos">56</span></a> <span class="p">}</span>
-</span><span id="Redshift.Parser-57"><a href="#Redshift.Parser-57"><span class="linenos">57</span></a>
-</span><span id="Redshift.Parser-58"><a href="#Redshift.Parser-58"><span class="linenos">58</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Redshift.Parser-59"><a href="#Redshift.Parser-59"><span class="linenos">59</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Parser-60"><a href="#Redshift.Parser-60"><span class="linenos">60</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Redshift.Parser-61"><a href="#Redshift.Parser-61"><span class="linenos">61</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Redshift.Parser-62"><a href="#Redshift.Parser-62"><span class="linenos">62</span></a>
-</span><span id="Redshift.Parser-63"><a href="#Redshift.Parser-63"><span class="linenos">63</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Redshift.Parser-64"><a href="#Redshift.Parser-64"><span class="linenos">64</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
-</span><span id="Redshift.Parser-65"><a href="#Redshift.Parser-65"><span class="linenos">65</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Parser-66"><a href="#Redshift.Parser-66"><span class="linenos">66</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Redshift.Parser-67"><a href="#Redshift.Parser-67"><span class="linenos">67</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Parser-68"><a href="#Redshift.Parser-68"><span class="linenos">68</span></a> <span class="p">):</span>
-</span><span id="Redshift.Parser-69"><a href="#Redshift.Parser-69"><span class="linenos">69</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
-</span><span id="Redshift.Parser-70"><a href="#Redshift.Parser-70"><span class="linenos">70</span></a>
-</span><span id="Redshift.Parser-71"><a href="#Redshift.Parser-71"><span class="linenos">71</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Redshift.Parser-72"><a href="#Redshift.Parser-72"><span class="linenos">72</span></a>
-</span><span id="Redshift.Parser-73"><a href="#Redshift.Parser-73"><span class="linenos">73</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="Redshift.Parser-74"><a href="#Redshift.Parser-74"><span class="linenos">74</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="Redshift.Parser-75"><a href="#Redshift.Parser-75"><span class="linenos">75</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="Redshift.Parser-76"><a href="#Redshift.Parser-76"><span class="linenos">76</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Redshift.Parser-77"><a href="#Redshift.Parser-77"><span class="linenos">77</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="Redshift.Parser-41"><a href="#Redshift.Parser-41"><span class="linenos">41</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Parser-42"><a href="#Redshift.Parser-42"><span class="linenos">42</span></a>
+</span><span id="Redshift.Parser-43"><a href="#Redshift.Parser-43"><span class="linenos">43</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Parser-44"><a href="#Redshift.Parser-44"><span class="linenos">44</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Redshift.Parser-45"><a href="#Redshift.Parser-45"><span class="linenos">45</span></a> <span class="s2">&quot;ADD_MONTHS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="Redshift.Parser-46"><a href="#Redshift.Parser-46"><span class="linenos">46</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="Redshift.Parser-47"><a href="#Redshift.Parser-47"><span class="linenos">47</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Redshift.Parser-48"><a href="#Redshift.Parser-48"><span class="linenos">48</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Parser-49"><a href="#Redshift.Parser-49"><span class="linenos">49</span></a> <span class="p">),</span>
+</span><span id="Redshift.Parser-50"><a href="#Redshift.Parser-50"><span class="linenos">50</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
+</span><span id="Redshift.Parser-51"><a href="#Redshift.Parser-51"><span class="linenos">51</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_add</span><span class="p">,</span>
+</span><span id="Redshift.Parser-52"><a href="#Redshift.Parser-52"><span class="linenos">52</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="Redshift.Parser-53"><a href="#Redshift.Parser-53"><span class="linenos">53</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">2</span><span class="p">)),</span>
+</span><span id="Redshift.Parser-54"><a href="#Redshift.Parser-54"><span class="linenos">54</span></a> <span class="n">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="Redshift.Parser-55"><a href="#Redshift.Parser-55"><span class="linenos">55</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="Redshift.Parser-56"><a href="#Redshift.Parser-56"><span class="linenos">56</span></a> <span class="p">),</span>
+</span><span id="Redshift.Parser-57"><a href="#Redshift.Parser-57"><span class="linenos">57</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Redshift.Parser-58"><a href="#Redshift.Parser-58"><span class="linenos">58</span></a> <span class="p">}</span>
+</span><span id="Redshift.Parser-59"><a href="#Redshift.Parser-59"><span class="linenos">59</span></a>
+</span><span id="Redshift.Parser-60"><a href="#Redshift.Parser-60"><span class="linenos">60</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Redshift.Parser-61"><a href="#Redshift.Parser-61"><span class="linenos">61</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift.Parser-62"><a href="#Redshift.Parser-62"><span class="linenos">62</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Redshift.Parser-63"><a href="#Redshift.Parser-63"><span class="linenos">63</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Redshift.Parser-64"><a href="#Redshift.Parser-64"><span class="linenos">64</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Redshift.Parser-65"><a href="#Redshift.Parser-65"><span class="linenos">65</span></a> <span class="p">)</span>
+</span><span id="Redshift.Parser-66"><a href="#Redshift.Parser-66"><span class="linenos">66</span></a>
+</span><span id="Redshift.Parser-67"><a href="#Redshift.Parser-67"><span class="linenos">67</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Redshift.Parser-68"><a href="#Redshift.Parser-68"><span class="linenos">68</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="Redshift.Parser-69"><a href="#Redshift.Parser-69"><span class="linenos">69</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Parser-70"><a href="#Redshift.Parser-70"><span class="linenos">70</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Redshift.Parser-71"><a href="#Redshift.Parser-71"><span class="linenos">71</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Parser-72"><a href="#Redshift.Parser-72"><span class="linenos">72</span></a> <span class="p">):</span>
+</span><span id="Redshift.Parser-73"><a href="#Redshift.Parser-73"><span class="linenos">73</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
+</span><span id="Redshift.Parser-74"><a href="#Redshift.Parser-74"><span class="linenos">74</span></a>
+</span><span id="Redshift.Parser-75"><a href="#Redshift.Parser-75"><span class="linenos">75</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Redshift.Parser-76"><a href="#Redshift.Parser-76"><span class="linenos">76</span></a>
+</span><span id="Redshift.Parser-77"><a href="#Redshift.Parser-77"><span class="linenos">77</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="Redshift.Parser-78"><a href="#Redshift.Parser-78"><span class="linenos">78</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Redshift.Parser-79"><a href="#Redshift.Parser-79"><span class="linenos">79</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
+</span><span id="Redshift.Parser-80"><a href="#Redshift.Parser-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">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Redshift.Parser-81"><a href="#Redshift.Parser-81"><span class="linenos">81</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
</span></pre></div>
@@ -922,11 +954,23 @@ Default: 3</li>
</div>
+ <div id="Redshift.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Redshift.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="Redshift.Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Redshift.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Redshift.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function _parse_date_add&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#Redshift.Parser">Redshift.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function Postgres.Parser.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;function _generate_series&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;NOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function _to_timestamp&gt;, &#39;UNNEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;ADD_MONTHS&#39;: &lt;function <a href="#Redshift.Parser">Redshift.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEADD&#39;: &lt;function _parse_date_add&gt;, &#39;STRTOL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Redshift.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function _parse_date_add&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#Redshift.Parser">Redshift.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function parse_timestamp_trunc&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;function _generate_series&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;NOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function _to_timestamp&gt;, &#39;UNNEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;ADD_MONTHS&#39;: &lt;function <a href="#Redshift.Parser">Redshift.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEADD&#39;: &lt;function _parse_date_add&gt;, &#39;STRTOL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;}</span>
</div>
@@ -935,6 +979,18 @@ Default: 3</li>
</div>
+ <div id="Redshift.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Redshift.Tokenizer">sqlglot.dialects.redshift.Redshift.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Redshift.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Redshift.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -1004,6 +1060,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Redshift.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Redshift.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Redshift.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Redshift.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Redshift.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Redshift.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1023,6 +1080,7 @@ Default: 3</li>
<dd id="Redshift.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
<dd id="Redshift.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Redshift.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Redshift.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Redshift.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Redshift.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Redshift.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1040,6 +1098,7 @@ Default: 3</li>
<dd id="Redshift.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Redshift.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Redshift.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Redshift.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Redshift.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Redshift.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Redshift.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1057,11 +1116,13 @@ Default: 3</li>
<dd id="Redshift.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Redshift.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Redshift.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Redshift.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Redshift.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="Redshift.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Redshift.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Redshift.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Redshift.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Redshift.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Redshift.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Redshift.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Redshift.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -1106,26 +1167,24 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Redshift.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Tokenizer-79"><a href="#Redshift.Tokenizer-79"><span class="linenos">79</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Redshift.Tokenizer-80"><a href="#Redshift.Tokenizer-80"><span class="linenos">80</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift.Tokenizer-81"><a href="#Redshift.Tokenizer-81"><span class="linenos">81</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift.Tokenizer-82"><a href="#Redshift.Tokenizer-82"><span class="linenos">82</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="Redshift.Tokenizer-83"><a href="#Redshift.Tokenizer-83"><span class="linenos">83</span></a>
-</span><span id="Redshift.Tokenizer-84"><a href="#Redshift.Tokenizer-84"><span class="linenos">84</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Tokenizer-85"><a href="#Redshift.Tokenizer-85"><span class="linenos">85</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-86"><a href="#Redshift.Tokenizer-86"><span class="linenos">86</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-87"><a href="#Redshift.Tokenizer-87"><span class="linenos">87</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-88"><a href="#Redshift.Tokenizer-88"><span class="linenos">88</span></a> <span class="s2">&quot;SYSDATE&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="Redshift.Tokenizer-89"><a href="#Redshift.Tokenizer-89"><span class="linenos">89</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-90"><a href="#Redshift.Tokenizer-90"><span class="linenos">90</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-91"><a href="#Redshift.Tokenizer-91"><span class="linenos">91</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-92"><a href="#Redshift.Tokenizer-92"><span class="linenos">92</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-93"><a href="#Redshift.Tokenizer-93"><span class="linenos">93</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-94"><a href="#Redshift.Tokenizer-94"><span class="linenos">94</span></a> <span class="p">}</span>
-</span><span id="Redshift.Tokenizer-95"><a href="#Redshift.Tokenizer-95"><span class="linenos">95</span></a>
-</span><span id="Redshift.Tokenizer-96"><a href="#Redshift.Tokenizer-96"><span class="linenos">96</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
-</span><span id="Redshift.Tokenizer-97"><a href="#Redshift.Tokenizer-97"><span class="linenos">97</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Redshift.Tokenizer-98"><a href="#Redshift.Tokenizer-98"><span class="linenos">98</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Tokenizer-83"><a href="#Redshift.Tokenizer-83"><span class="linenos"> 83</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Redshift.Tokenizer-84"><a href="#Redshift.Tokenizer-84"><span class="linenos"> 84</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift.Tokenizer-85"><a href="#Redshift.Tokenizer-85"><span class="linenos"> 85</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift.Tokenizer-86"><a href="#Redshift.Tokenizer-86"><span class="linenos"> 86</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="Redshift.Tokenizer-87"><a href="#Redshift.Tokenizer-87"><span class="linenos"> 87</span></a>
+</span><span id="Redshift.Tokenizer-88"><a href="#Redshift.Tokenizer-88"><span class="linenos"> 88</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Tokenizer-89"><a href="#Redshift.Tokenizer-89"><span class="linenos"> 89</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-90"><a href="#Redshift.Tokenizer-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-91"><a href="#Redshift.Tokenizer-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-92"><a href="#Redshift.Tokenizer-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;SYSDATE&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="Redshift.Tokenizer-93"><a href="#Redshift.Tokenizer-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-94"><a href="#Redshift.Tokenizer-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-95"><a href="#Redshift.Tokenizer-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-96"><a href="#Redshift.Tokenizer-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
+</span><span id="Redshift.Tokenizer-97"><a href="#Redshift.Tokenizer-97"><span class="linenos"> 97</span></a>
+</span><span id="Redshift.Tokenizer-98"><a href="#Redshift.Tokenizer-98"><span class="linenos"> 98</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
+</span><span id="Redshift.Tokenizer-99"><a href="#Redshift.Tokenizer-99"><span class="linenos"> 99</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Redshift.Tokenizer-100"><a href="#Redshift.Tokenizer-100"><span class="linenos">100</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1171,7 +1230,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Redshift.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Redshift.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;~~&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;~~*&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;~*&#39;: &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;, &#39;~&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;@&gt;&#39;: &lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;, &#39;&lt;@&#39;: &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;, &#39;BEGIN TRANSACTION&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BIGSERIAL&#39;: &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;DO&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;HSTORE&#39;: &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &#39;JSONB&#39;: &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &#39;MONEY&#39;: &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &#39;REFRESH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REINDEX&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;RESET&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REVOKE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;SERIAL&#39;: &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &#39;SMALLSERIAL&#39;: &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &#39;CSTRING&#39;: &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &#39;HLLSKETCH&#39;: &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &#39;SUPER&#39;: &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &#39;SYSDATE&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &#39;UNLOAD&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VARBYTE&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Redshift.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;~~&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;~~*&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;~*&#39;: &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;, &#39;~&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;@@&#39;: &lt;TokenType.DAT: &#39;DAT&#39;&gt;, &#39;@&gt;&#39;: &lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;, &#39;&lt;@&#39;: &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;, &#39;BEGIN TRANSACTION&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BIGSERIAL&#39;: &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;DO&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;HSTORE&#39;: &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &#39;JSONB&#39;: &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &#39;MONEY&#39;: &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &#39;REFRESH&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REINDEX&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;RESET&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;REVOKE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;SERIAL&#39;: &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &#39;SMALLSERIAL&#39;: &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &#39;CSTRING&#39;: &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &#39;HLLSKETCH&#39;: &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &#39;SUPER&#39;: &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &#39;SYSDATE&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &#39;UNLOAD&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VARBYTE&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;}</span>
</div>
@@ -1235,73 +1294,80 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Redshift.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator-100"><a href="#Redshift.Generator-100"><span class="linenos">100</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Redshift.Generator-101"><a href="#Redshift.Generator-101"><span class="linenos">101</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-102"><a href="#Redshift.Generator-102"><span class="linenos">102</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-103"><a href="#Redshift.Generator-103"><span class="linenos">103</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-104"><a href="#Redshift.Generator-104"><span class="linenos">104</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-105"><a href="#Redshift.Generator-105"><span class="linenos">105</span></a>
-</span><span id="Redshift.Generator-106"><a href="#Redshift.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="Redshift.Generator-107"><a href="#Redshift.Generator-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Redshift.Generator-108"><a href="#Redshift.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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-109"><a href="#Redshift.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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-110"><a href="#Redshift.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-111"><a href="#Redshift.Generator-111"><span class="linenos">111</span></a> <span class="p">}</span>
-</span><span id="Redshift.Generator-112"><a href="#Redshift.Generator-112"><span class="linenos">112</span></a>
-</span><span id="Redshift.Generator-113"><a href="#Redshift.Generator-113"><span class="linenos">113</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Generator-114"><a href="#Redshift.Generator-114"><span class="linenos">114</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">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Redshift.Generator-115"><a href="#Redshift.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Redshift.Generator-116"><a href="#Redshift.Generator-116"><span class="linenos">116</span></a> <span class="p">}</span>
-</span><span id="Redshift.Generator-117"><a href="#Redshift.Generator-117"><span class="linenos">117</span></a>
-</span><span id="Redshift.Generator-118"><a href="#Redshift.Generator-118"><span class="linenos">118</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Generator-119"><a href="#Redshift.Generator-119"><span class="linenos">119</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Redshift.Generator-120"><a href="#Redshift.Generator-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-121"><a href="#Redshift.Generator-121"><span class="linenos">121</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-122"><a href="#Redshift.Generator-122"><span class="linenos">122</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-123"><a href="#Redshift.Generator-123"><span class="linenos">123</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-124"><a href="#Redshift.Generator-124"><span class="linenos">124</span></a> <span class="p">),</span>
-</span><span id="Redshift.Generator-125"><a href="#Redshift.Generator-125"><span class="linenos">125</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-126"><a href="#Redshift.Generator-126"><span class="linenos">126</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-127"><a href="#Redshift.Generator-127"><span class="linenos">127</span></a> <span class="p">),</span>
-</span><span id="Redshift.Generator-128"><a href="#Redshift.Generator-128"><span class="linenos">128</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-129"><a href="#Redshift.Generator-129"><span class="linenos">129</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-130"><a href="#Redshift.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-131"><a href="#Redshift.Generator-131"><span class="linenos">131</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-132"><a href="#Redshift.Generator-132"><span class="linenos">132</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-133"><a href="#Redshift.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-134"><a href="#Redshift.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="Redshift.Generator-135"><a href="#Redshift.Generator-135"><span class="linenos">135</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-136"><a href="#Redshift.Generator-136"><span class="linenos">136</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;redshift&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-137"><a href="#Redshift.Generator-137"><span class="linenos">137</span></a> <span class="p">}</span>
-</span><span id="Redshift.Generator-138"><a href="#Redshift.Generator-138"><span class="linenos">138</span></a>
-</span><span id="Redshift.Generator-139"><a href="#Redshift.Generator-139"><span class="linenos">139</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
-</span><span id="Redshift.Generator-140"><a href="#Redshift.Generator-140"><span class="linenos">140</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
-</span><span id="Redshift.Generator-141"><a href="#Redshift.Generator-141"><span class="linenos">141</span></a>
-</span><span id="Redshift.Generator-142"><a href="#Redshift.Generator-142"><span class="linenos">142</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
-</span><span id="Redshift.Generator-143"><a href="#Redshift.Generator-143"><span class="linenos">143</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator-102"><a href="#Redshift.Generator-102"><span class="linenos">102</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</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">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-104"><a href="#Redshift.Generator-104"><span class="linenos">104</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-105"><a href="#Redshift.Generator-105"><span class="linenos">105</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-106"><a href="#Redshift.Generator-106"><span class="linenos">106</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-107"><a href="#Redshift.Generator-107"><span class="linenos">107</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift.Generator-108"><a href="#Redshift.Generator-108"><span class="linenos">108</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift.Generator-109"><a href="#Redshift.Generator-109"><span class="linenos">109</span></a>
+</span><span id="Redshift.Generator-110"><a href="#Redshift.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="Redshift.Generator-111"><a href="#Redshift.Generator-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Redshift.Generator-112"><a href="#Redshift.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">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-113"><a href="#Redshift.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-114"><a href="#Redshift.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">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-115"><a href="#Redshift.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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-116"><a href="#Redshift.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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-117"><a href="#Redshift.Generator-117"><span class="linenos">117</span></a> <span class="p">}</span>
+</span><span id="Redshift.Generator-118"><a href="#Redshift.Generator-118"><span class="linenos">118</span></a>
+</span><span id="Redshift.Generator-119"><a href="#Redshift.Generator-119"><span class="linenos">119</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Generator-120"><a href="#Redshift.Generator-120"><span class="linenos">120</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">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Redshift.Generator-121"><a href="#Redshift.Generator-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Redshift.Generator-122"><a href="#Redshift.Generator-122"><span class="linenos">122</span></a> <span class="p">}</span>
+</span><span id="Redshift.Generator-123"><a href="#Redshift.Generator-123"><span class="linenos">123</span></a>
+</span><span id="Redshift.Generator-124"><a href="#Redshift.Generator-124"><span class="linenos">124</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Generator-125"><a href="#Redshift.Generator-125"><span class="linenos">125</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Redshift.Generator-126"><a href="#Redshift.Generator-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-127"><a href="#Redshift.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="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-128"><a href="#Redshift.Generator-128"><span class="linenos">128</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-129"><a href="#Redshift.Generator-129"><span class="linenos">129</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-130"><a href="#Redshift.Generator-130"><span class="linenos">130</span></a> <span class="p">),</span>
+</span><span id="Redshift.Generator-131"><a href="#Redshift.Generator-131"><span class="linenos">131</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-132"><a href="#Redshift.Generator-132"><span class="linenos">132</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-133"><a href="#Redshift.Generator-133"><span class="linenos">133</span></a> <span class="p">),</span>
+</span><span id="Redshift.Generator-134"><a href="#Redshift.Generator-134"><span class="linenos">134</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-135"><a href="#Redshift.Generator-135"><span class="linenos">135</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-136"><a href="#Redshift.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-137"><a href="#Redshift.Generator-137"><span class="linenos">137</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-138"><a href="#Redshift.Generator-138"><span class="linenos">138</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-139"><a href="#Redshift.Generator-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-140"><a href="#Redshift.Generator-140"><span class="linenos">140</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-141"><a href="#Redshift.Generator-141"><span class="linenos">141</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-142"><a href="#Redshift.Generator-142"><span class="linenos">142</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;redshift&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-143"><a href="#Redshift.Generator-143"><span class="linenos">143</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-144"><a href="#Redshift.Generator-144"><span class="linenos">144</span></a>
-</span><span id="Redshift.Generator-145"><a href="#Redshift.Generator-145"><span class="linenos">145</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
-</span><span id="Redshift.Generator-146"><a href="#Redshift.Generator-146"><span class="linenos">146</span></a>
-</span><span id="Redshift.Generator-147"><a href="#Redshift.Generator-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator-148"><a href="#Redshift.Generator-148"><span class="linenos">148</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator-149"><a href="#Redshift.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">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-145"><a href="#Redshift.Generator-145"><span class="linenos">145</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
+</span><span id="Redshift.Generator-146"><a href="#Redshift.Generator-146"><span class="linenos">146</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
+</span><span id="Redshift.Generator-147"><a href="#Redshift.Generator-147"><span class="linenos">147</span></a>
+</span><span id="Redshift.Generator-148"><a href="#Redshift.Generator-148"><span class="linenos">148</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
+</span><span id="Redshift.Generator-149"><a href="#Redshift.Generator-149"><span class="linenos">149</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="Redshift.Generator-150"><a href="#Redshift.Generator-150"><span class="linenos">150</span></a>
-</span><span id="Redshift.Generator-151"><a href="#Redshift.Generator-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator-152"><a href="#Redshift.Generator-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator-153"><a href="#Redshift.Generator-153"><span class="linenos">153</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="Redshift.Generator-154"><a href="#Redshift.Generator-154"><span class="linenos">154</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="Redshift.Generator-155"><a href="#Redshift.Generator-155"><span class="linenos">155</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="Redshift.Generator-156"><a href="#Redshift.Generator-156"><span class="linenos">156</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="Redshift.Generator-157"><a href="#Redshift.Generator-157"><span class="linenos">157</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator-158"><a href="#Redshift.Generator-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="Redshift.Generator-159"><a href="#Redshift.Generator-159"><span class="linenos">159</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="Redshift.Generator-160"><a href="#Redshift.Generator-160"><span class="linenos">160</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="Redshift.Generator-161"><a href="#Redshift.Generator-161"><span class="linenos">161</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Generator-162"><a href="#Redshift.Generator-162"><span class="linenos">162</span></a>
-</span><span id="Redshift.Generator-163"><a href="#Redshift.Generator-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="Redshift.Generator-164"><a href="#Redshift.Generator-164"><span class="linenos">164</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="Redshift.Generator-165"><a href="#Redshift.Generator-165"><span class="linenos">165</span></a>
-</span><span id="Redshift.Generator-166"><a href="#Redshift.Generator-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Redshift.Generator-151"><a href="#Redshift.Generator-151"><span class="linenos">151</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
+</span><span id="Redshift.Generator-152"><a href="#Redshift.Generator-152"><span class="linenos">152</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span>
+</span><span id="Redshift.Generator-153"><a href="#Redshift.Generator-153"><span class="linenos">153</span></a>
+</span><span id="Redshift.Generator-154"><a href="#Redshift.Generator-154"><span class="linenos">154</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
+</span><span id="Redshift.Generator-155"><a href="#Redshift.Generator-155"><span class="linenos">155</span></a>
+</span><span id="Redshift.Generator-156"><a href="#Redshift.Generator-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator-157"><a href="#Redshift.Generator-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator-158"><a href="#Redshift.Generator-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-159"><a href="#Redshift.Generator-159"><span class="linenos">159</span></a>
+</span><span id="Redshift.Generator-160"><a href="#Redshift.Generator-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator-161"><a href="#Redshift.Generator-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator-162"><a href="#Redshift.Generator-162"><span class="linenos">162</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="Redshift.Generator-163"><a href="#Redshift.Generator-163"><span class="linenos">163</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="Redshift.Generator-164"><a href="#Redshift.Generator-164"><span class="linenos">164</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="Redshift.Generator-165"><a href="#Redshift.Generator-165"><span class="linenos">165</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="Redshift.Generator-166"><a href="#Redshift.Generator-166"><span class="linenos">166</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator-167"><a href="#Redshift.Generator-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="Redshift.Generator-168"><a href="#Redshift.Generator-168"><span class="linenos">168</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="Redshift.Generator-169"><a href="#Redshift.Generator-169"><span class="linenos">169</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="Redshift.Generator-170"><a href="#Redshift.Generator-170"><span class="linenos">170</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-171"><a href="#Redshift.Generator-171"><span class="linenos">171</span></a>
+</span><span id="Redshift.Generator-172"><a href="#Redshift.Generator-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="Redshift.Generator-173"><a href="#Redshift.Generator-173"><span class="linenos">173</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
+</span><span id="Redshift.Generator-174"><a href="#Redshift.Generator-174"><span class="linenos">174</span></a>
+</span><span id="Redshift.Generator-175"><a href="#Redshift.Generator-175"><span class="linenos">175</span></a> <span class="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>
@@ -1392,11 +1458,35 @@ Default: True</li>
</div>
+ <div id="Redshift.Generator.TZ_TO_WITH_TIME_ZONE" class="classattr">
+ <div class="attr variable">
+ <span class="name">TZ_TO_WITH_TIME_ZONE</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Redshift.Generator.TZ_TO_WITH_TIME_ZONE"></a>
+
+
+
+ </div>
+ <div id="Redshift.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Redshift.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="Redshift.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
<input id="Redshift.Generator.TYPE_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Redshift.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: &#39;SMALLINT&#39;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: &#39;REAL&#39;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: &#39;DOUBLE PRECISION&#39;, &lt;Type.BINARY: &#39;BINARY&#39;&gt;: &#39;VARBYTE&#39;, &lt;Type.VARBINARY: &#39;VARBINARY&#39;&gt;: &#39;VARBYTE&#39;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.INT: &#39;INT&#39;&gt;: &#39;INTEGER&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Redshift.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: &#39;SMALLINT&#39;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: &#39;REAL&#39;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: &#39;DOUBLE PRECISION&#39;, &lt;Type.BINARY: &#39;BINARY&#39;&gt;: &#39;VARBYTE&#39;, &lt;Type.VARBINARY: &#39;VARBINARY&#39;&gt;: &#39;VARBYTE&#39;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.INT: &#39;INT&#39;&gt;: &#39;INTEGER&#39;, &lt;Type.TIMETZ: &#39;TIMETZ&#39;&gt;: &#39;TIME&#39;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: &#39;TIMESTAMP&#39;}</span>
</div>
@@ -1409,7 +1499,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Redshift.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Redshift.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Redshift.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1422,7 +1512,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Redshift.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Redshift.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function _json_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function _json_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Redshift.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function _json_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function _json_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1434,7 +1524,7 @@ Default: True</li>
<div id="Redshift.Generator.RESERVED_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">RESERVED_KEYWORDS</span> =
-<span class="default_value">{&#39;snapshot&#39;, &#39;type&#39;}</span>
+<span class="default_value">{&#39;type&#39;, &#39;snapshot&#39;}</span>
</div>
@@ -1454,9 +1544,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Redshift.Generator.with_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.with_properties-147"><a href="#Redshift.Generator.with_properties-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator.with_properties-148"><a href="#Redshift.Generator.with_properties-148"><span class="linenos">148</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.with_properties-149"><a href="#Redshift.Generator.with_properties-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.with_properties-156"><a href="#Redshift.Generator.with_properties-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator.with_properties-157"><a href="#Redshift.Generator.with_properties-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.with_properties-158"><a href="#Redshift.Generator.with_properties-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1476,22 +1566,22 @@ Default: True</li>
</div>
<a class="headerlink" href="#Redshift.Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.datatype_sql-151"><a href="#Redshift.Generator.datatype_sql-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator.datatype_sql-152"><a href="#Redshift.Generator.datatype_sql-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.datatype_sql-153"><a href="#Redshift.Generator.datatype_sql-153"><span class="linenos">153</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="Redshift.Generator.datatype_sql-154"><a href="#Redshift.Generator.datatype_sql-154"><span class="linenos">154</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="Redshift.Generator.datatype_sql-155"><a href="#Redshift.Generator.datatype_sql-155"><span class="linenos">155</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="Redshift.Generator.datatype_sql-156"><a href="#Redshift.Generator.datatype_sql-156"><span class="linenos">156</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="Redshift.Generator.datatype_sql-157"><a href="#Redshift.Generator.datatype_sql-157"><span class="linenos">157</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.datatype_sql-158"><a href="#Redshift.Generator.datatype_sql-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="Redshift.Generator.datatype_sql-159"><a href="#Redshift.Generator.datatype_sql-159"><span class="linenos">159</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="Redshift.Generator.datatype_sql-160"><a href="#Redshift.Generator.datatype_sql-160"><span class="linenos">160</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="Redshift.Generator.datatype_sql-161"><a href="#Redshift.Generator.datatype_sql-161"><span class="linenos">161</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Generator.datatype_sql-162"><a href="#Redshift.Generator.datatype_sql-162"><span class="linenos">162</span></a>
-</span><span id="Redshift.Generator.datatype_sql-163"><a href="#Redshift.Generator.datatype_sql-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="Redshift.Generator.datatype_sql-164"><a href="#Redshift.Generator.datatype_sql-164"><span class="linenos">164</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="Redshift.Generator.datatype_sql-165"><a href="#Redshift.Generator.datatype_sql-165"><span class="linenos">165</span></a>
-</span><span id="Redshift.Generator.datatype_sql-166"><a href="#Redshift.Generator.datatype_sql-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.datatype_sql-160"><a href="#Redshift.Generator.datatype_sql-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator.datatype_sql-161"><a href="#Redshift.Generator.datatype_sql-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.datatype_sql-162"><a href="#Redshift.Generator.datatype_sql-162"><span class="linenos">162</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="Redshift.Generator.datatype_sql-163"><a href="#Redshift.Generator.datatype_sql-163"><span class="linenos">163</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="Redshift.Generator.datatype_sql-164"><a href="#Redshift.Generator.datatype_sql-164"><span class="linenos">164</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="Redshift.Generator.datatype_sql-165"><a href="#Redshift.Generator.datatype_sql-165"><span class="linenos">165</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="Redshift.Generator.datatype_sql-166"><a href="#Redshift.Generator.datatype_sql-166"><span class="linenos">166</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.datatype_sql-167"><a href="#Redshift.Generator.datatype_sql-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="Redshift.Generator.datatype_sql-168"><a href="#Redshift.Generator.datatype_sql-168"><span class="linenos">168</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="Redshift.Generator.datatype_sql-169"><a href="#Redshift.Generator.datatype_sql-169"><span class="linenos">169</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="Redshift.Generator.datatype_sql-170"><a href="#Redshift.Generator.datatype_sql-170"><span class="linenos">170</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator.datatype_sql-171"><a href="#Redshift.Generator.datatype_sql-171"><span class="linenos">171</span></a>
+</span><span id="Redshift.Generator.datatype_sql-172"><a href="#Redshift.Generator.datatype_sql-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="Redshift.Generator.datatype_sql-173"><a href="#Redshift.Generator.datatype_sql-173"><span class="linenos">173</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
+</span><span id="Redshift.Generator.datatype_sql-174"><a href="#Redshift.Generator.datatype_sql-174"><span class="linenos">174</span></a>
+</span><span id="Redshift.Generator.datatype_sql-175"><a href="#Redshift.Generator.datatype_sql-175"><span class="linenos">175</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>
@@ -1553,26 +1643,26 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
</div>
<a class="headerlink" href="#Redshift.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.can_identify-253"><a href="#Redshift.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Redshift.Generator.can_identify-254"><a href="#Redshift.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Redshift.Generator.can_identify-255"><a href="#Redshift.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Redshift.Generator.can_identify-256"><a href="#Redshift.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Redshift.Generator.can_identify-257"><a href="#Redshift.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Redshift.Generator.can_identify-258"><a href="#Redshift.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Redshift.Generator.can_identify-259"><a href="#Redshift.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Redshift.Generator.can_identify-260"><a href="#Redshift.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Redshift.Generator.can_identify-261"><a href="#Redshift.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Redshift.Generator.can_identify-262"><a href="#Redshift.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Redshift.Generator.can_identify-263"><a href="#Redshift.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Redshift.Generator.can_identify-264"><a href="#Redshift.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Redshift.Generator.can_identify-265"><a href="#Redshift.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.can_identify-266"><a href="#Redshift.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Redshift.Generator.can_identify-267"><a href="#Redshift.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Redshift.Generator.can_identify-268"><a href="#Redshift.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Redshift.Generator.can_identify-269"><a href="#Redshift.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Redshift.Generator.can_identify-270"><a href="#Redshift.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.can_identify-256"><a href="#Redshift.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Redshift.Generator.can_identify-257"><a href="#Redshift.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Redshift.Generator.can_identify-258"><a href="#Redshift.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Redshift.Generator.can_identify-259"><a href="#Redshift.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Redshift.Generator.can_identify-260"><a href="#Redshift.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Redshift.Generator.can_identify-261"><a href="#Redshift.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Redshift.Generator.can_identify-262"><a href="#Redshift.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Redshift.Generator.can_identify-263"><a href="#Redshift.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Redshift.Generator.can_identify-264"><a href="#Redshift.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Redshift.Generator.can_identify-265"><a href="#Redshift.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Redshift.Generator.can_identify-266"><a href="#Redshift.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Redshift.Generator.can_identify-267"><a href="#Redshift.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Redshift.Generator.can_identify-268"><a href="#Redshift.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.can_identify-269"><a href="#Redshift.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Redshift.Generator.can_identify-270"><a href="#Redshift.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Redshift.Generator.can_identify-271"><a href="#Redshift.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Redshift.Generator.can_identify-272"><a href="#Redshift.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator.can_identify-272"><a href="#Redshift.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Redshift.Generator.can_identify-273"><a href="#Redshift.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Redshift.Generator.can_identify-274"><a href="#Redshift.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Redshift.Generator.can_identify-275"><a href="#Redshift.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1643,26 +1733,14 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
</div>
- <div id="Redshift.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Redshift.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Redshift.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Redshift.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Redshift.Tokenizer">sqlglot.dialects.redshift.Redshift.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Redshift.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Redshift.Generator.TOKENIZER_CLASS"></a>
@@ -1762,6 +1840,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Redshift.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Redshift.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Redshift.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Redshift.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Redshift.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Redshift.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1804,6 +1883,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Redshift.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Redshift.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Redshift.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Redshift.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Redshift.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Redshift.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1822,7 +1902,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Redshift.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Redshift.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Redshift.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Redshift.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Redshift.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Redshift.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="Redshift.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@@ -1865,6 +1945,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Redshift.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Redshift.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Redshift.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Redshift.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Redshift.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Redshift.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -1873,6 +1954,8 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Redshift.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Redshift.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Redshift.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Redshift.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Redshift.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Redshift.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Redshift.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1929,7 +2012,6 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Redshift.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Redshift.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
- <dd id="Redshift.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Redshift.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
<dd id="Redshift.Generator.jsonobject_sql" class="function"><a href="../generator.html#Generator.jsonobject_sql">jsonobject_sql</a></dd>
<dd id="Redshift.Generator.openjsoncolumndef_sql" class="function"><a href="../generator.html#Generator.openjsoncolumndef_sql">openjsoncolumndef_sql</a></dd>
@@ -2031,6 +2113,8 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Redshift.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Redshift.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Redshift.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Redshift.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
<div><dt><a href="postgres.html#Postgres.Generator">sqlglot.dialects.postgres.Postgres.Generator</a></dt>
@@ -2039,6 +2123,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.TABLE_HINTS" class="variable"><a href="postgres.html#Postgres.Generator.TABLE_HINTS">TABLE_HINTS</a></dd>
<dd id="Redshift.Generator.PARAMETER_TOKEN" class="variable"><a href="postgres.html#Postgres.Generator.PARAMETER_TOKEN">PARAMETER_TOKEN</a></dd>
<dd id="Redshift.Generator.bracket_sql" class="function"><a href="postgres.html#Postgres.Generator.bracket_sql">bracket_sql</a></dd>
+ <dd id="Redshift.Generator.matchagainst_sql" class="function"><a href="postgres.html#Postgres.Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Redshift.Generator.INDEX_OFFSET" class="variable"><a href="postgres.html#Postgres.Generator.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Redshift.Generator.NULL_ORDERING" class="variable"><a href="postgres.html#Postgres.Generator.NULL_ORDERING">NULL_ORDERING</a></dd>
diff --git a/docs/sqlglot/dialects/snowflake.html b/docs/sqlglot/dialects/snowflake.html
index 8e118ad..3faba8b 100644
--- a/docs/sqlglot/dialects/snowflake.html
+++ b/docs/sqlglot/dialects/snowflake.html
@@ -52,13 +52,13 @@
<a class="variable" href="#Snowflake.Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a>
</li>
<li>
- <a class="variable" href="#Snowflake.Parser.FUNCTIONS">FUNCTIONS</a>
+ <a class="variable" href="#Snowflake.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
</li>
<li>
- <a class="variable" href="#Snowflake.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
+ <a class="variable" href="#Snowflake.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
- <a class="variable" href="#Snowflake.Parser.FUNC_TOKENS">FUNC_TOKENS</a>
+ <a class="variable" href="#Snowflake.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
</li>
<li>
<a class="variable" href="#Snowflake.Parser.COLUMN_OPERATORS">COLUMN_OPERATORS</a>
@@ -73,6 +73,9 @@
<a class="variable" href="#Snowflake.Parser.ALTER_PARSERS">ALTER_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Snowflake.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Snowflake.Parser.NULL_ORDERING">NULL_ORDERING</a>
</li>
<li>
@@ -97,9 +100,6 @@
<a class="class" href="#Snowflake.Tokenizer">Snowflake.Tokenizer</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Snowflake.Tokenizer.QUOTES">QUOTES</a>
- </li>
- <li>
<a class="variable" href="#Snowflake.Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a>
</li>
<li>
@@ -199,10 +199,7 @@
<a class="variable" href="#Snowflake.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Snowflake.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Snowflake.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Snowflake.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Snowflake.Generator.BIT_START">BIT_START</a>
@@ -468,288 +465,296 @@
</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">datatype_sql</span><span class="p">(</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><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="k">def</span> <span class="nf">_parse_convert_timezone</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">]:</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">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-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">return</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="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">return</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">seq_get</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">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">0</span><span class="p">))</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="k">def</span> <span class="nf">_regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">flag</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;flag&quot;</span><span class="p">)</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="s2">&quot;i&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">flag</span><span class="p">:</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">flag</span> <span class="o">+=</span> <span class="s2">&quot;i&quot;</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">_parse_regexp_replace</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">regexp_replace</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">regexp_replace</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replacement&quot;</span><span class="p">):</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">regexp_replace</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;replacement&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">))</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">regexp_replace</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><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a><span class="k">class</span> <span class="nc">Snowflake</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/identifiers-syntax</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</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-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="n">TIME_MAPPING</span> <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;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="s2">&quot;mmmm&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="s2">&quot;mon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">&quot;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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;%w&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;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&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;hh24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&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;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&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;hh12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&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;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;FF&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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;ff&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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;FF6&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-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;ff6&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-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="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-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">True</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">FUNCTIONS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;ARRAYAGG&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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;ARRAY_CONSTRUCT&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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">_parse_convert_timezone</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;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
-</span><span id="L-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="p">),</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;DIV0&quot;</span><span class="p">:</span> <span class="n">_div0_to_if</span><span class="p">,</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;IFF&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-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;NULLIFZERO&quot;</span><span class="p">:</span> <span class="n">_nullifzero_to_if</span><span class="p">,</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">:</span> <span class="n">_parse_object_construct</span><span class="p">,</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="n">_parse_regexp_replace</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">&quot;RLIKE&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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;TIMEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</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_ARRAY&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-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_to_timestamp</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;TO_VARCHAR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</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;ZEROIFNULL&quot;</span><span class="p">:</span> <span class="n">_zeroifnull_to_if</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><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="o">**</span><span class="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-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;DATE_PART&quot;</span><span class="p">:</span> <span class="n">_parse_date_part</span><span class="p">,</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="p">}</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-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="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</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">FUNC_TOKENS</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">TABLE</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">COLUMN_OPERATORS</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">COLUMN_OPERATORS</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">COLON</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-261"><a href="#L-261"><span class="linenos">261</span></a> <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="p">[</span><span class="n">path</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-173"><a href="#L-173"><span class="linenos">173</span></a> <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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;REGEXP_LIKE&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 class="n">exp</span><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">flag</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><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="k">def</span> <span class="nf">_parse_convert_timezone</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">]:</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</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">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="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
+</span><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">AtTimeZone</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">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">0</span><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><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a><span class="k">def</span> <span class="nf">_parse_regexp_replace</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">regexp_replace</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">regexp_replace</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replacement&quot;</span><span class="p">):</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">regexp_replace</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;replacement&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">return</span> <span class="n">regexp_replace</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">class</span> <span class="nc">Snowflake</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/identifiers-syntax</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH24:MI:SS&#39;&quot;</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;mmmm&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&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;mon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;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-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</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><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;%w&quot;</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;hh24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&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;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&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;hh12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&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;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&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;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&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;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&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;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;FF&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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;ff&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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;FF6&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-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;ff6&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-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><span id="L-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;ARRAYAGG&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-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;ARRAY_CONSTRUCT&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-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">_parse_convert_timezone</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="p">),</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;DIV0&quot;</span><span class="p">:</span> <span class="n">_div0_to_if</span><span class="p">,</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">&quot;IFF&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-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;NULLIFZERO&quot;</span><span class="p">:</span> <span class="n">_nullifzero_to_if</span><span class="p">,</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">:</span> <span class="n">_parse_object_construct</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="n">_parse_regexp_replace</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</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;RLIKE&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-250"><a href="#L-250"><span class="linenos">250</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-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;TIMEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</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_ARRAY&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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_to_timestamp</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;TO_VARCHAR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;ZEROIFNULL&quot;</span><span class="p">:</span> <span class="n">_zeroifnull_to_if</span><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="n">FUNCTION_PARSERS</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 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-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;DATE_PART&quot;</span><span class="p">:</span> <span class="n">_parse_date_part</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="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-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">TIMESTAMPS</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">TIMESTAMPS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><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">RANGE_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">RANGE_PARSERS</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">LIKE_ANY</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">LikeAny</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">ILIKE_ANY</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">ILikeAny</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-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="n">ALTER_PARSERS</span> <span class="o">=</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="p">,</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</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">_parse_set</span><span class="p">(</span><span class="n">tag</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;TAG&quot;</span><span class="p">)),</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;UNSET&quot;</span><span class="p">:</span> <span class="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-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">tag</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;TAG&quot;</span><span class="p">),</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">unset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="p">),</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="p">}</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</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-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="nb">super</span><span class="p">()</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-292"><a href="#L-292"><span class="linenos">292</span></a> <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-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="p">)</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">identifier</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="nb">super</span><span class="p">()</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-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">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-300"><a href="#L-300"><span class="linenos">300</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><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$$&quot;</span><span class="p">]</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">COLUMN_OPERATORS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</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">COLON</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-268"><a href="#L-268"><span class="linenos">268</span></a> <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="p">[</span><span class="n">path</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 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">TIMESTAMPS</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">TIMESTAMPS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</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="n">RANGE_PARSERS</span> <span class="o">=</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</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">LikeAny</span><span class="p">),</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</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">ILikeAny</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">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</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">_parse_set</span><span class="p">(</span><span class="n">tag</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;TAG&quot;</span><span class="p">)),</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;UNSET&quot;</span><span class="p">:</span> <span class="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-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">tag</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;TAG&quot;</span><span class="p">),</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">unset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <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="k">def</span> <span class="nf">_parse_id_var</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="p">,</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">identifier</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="nb">super</span><span class="p">()</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-299"><a href="#L-299"><span class="linenos">299</span></a> <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-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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">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="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">identifier</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="nb">super</span><span class="p">()</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-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">KEYWORDS</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">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-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="s2">&quot;BYTEINT&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-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="s2">&quot;CHAR 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-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</span><span class="p">,</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</span><span class="p">,</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="s2">&quot;NCHAR 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-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="s2">&quot;PUT&quot;</span><span 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-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="s2">&quot;RENAME&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-319"><a href="#L-319"><span class="linenos">319</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-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="s2">&quot;TIMESTAMP_LTZ&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-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="s2">&quot;TIMESTAMP_NTZ&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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="s2">&quot;TIMESTAMP_TZ&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-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;TIMESTAMPNTZ&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-324"><a href="#L-324"><span class="linenos">324</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-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">SINGLE_TOKENS</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">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-329"><a href="#L-329"><span class="linenos">329</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-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">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-333"><a href="#L-333"><span class="linenos">333</span></a>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="k">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-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span 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-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_TO_STRING&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">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-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&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;zone&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="p">),</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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 class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_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">DataType</span><span class="p">:</span> <span class="n">_datatype_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">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATE_PART&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">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IFF&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">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOLAND_AGG&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">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOLOR_AGG&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">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">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-362"><a href="#L-362"><span class="linenos">362</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-363"><a href="#L-363"><span class="linenos">363</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-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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-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 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-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">,</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="o">*</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()),</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="p">),</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="p">),</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</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-384"><a href="#L-384"><span class="linenos">384</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-385"><a href="#L-385"><span class="linenos">385</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-386"><a href="#L-386"><span class="linenos">386</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-387"><a href="#L-387"><span class="linenos">387</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-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">TYPE_MAPPING</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="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-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">exp</span><span 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-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="p">}</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</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-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="p">}</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</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-403"><a href="#L-403"><span class="linenos">403</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-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><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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-306"><a href="#L-306"><span class="linenos">306</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-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</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-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="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="s2">&quot;BYTEINT&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-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="s2">&quot;CHAR 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-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</span><span class="p">,</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="s2">&quot;NCHAR 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-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;PUT&quot;</span><span 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-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;RENAME&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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="s2">&quot;TIMESTAMP_LTZ&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-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="s2">&quot;TIMESTAMP_NTZ&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-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="s2">&quot;TIMESTAMP_TZ&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-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="s2">&quot;TIMESTAMPNTZ&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-330"><a href="#L-330"><span class="linenos">330</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-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">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">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-335"><a href="#L-335"><span class="linenos">335</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-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">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-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">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-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</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">TRANSFORMS</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">TRANSFORMS</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">Array</span><span class="p">:</span> <span class="n">inline_array_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">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_TO_STRING&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">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-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&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;zone&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</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="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 class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATE_PART&quot;</span><span class="p">),</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IFF&quot;</span><span class="p">),</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOLAND_AGG&quot;</span><span class="p">),</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOLOR_AGG&quot;</span><span class="p">),</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">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-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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-370"><a href="#L-370"><span class="linenos">370</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-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="n">_regexpilike_sql</span><span class="p">,</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-373"><a href="#L-373"><span class="linenos">373</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-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</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-376"><a href="#L-376"><span class="linenos">376</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-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 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-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="o">*</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</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 class="n">exp</span><span class="o">.</span><span class="n">Stuff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;INSERT&quot;</span><span class="p">),</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-387"><a href="#L-387"><span class="linenos">387</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-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="p">),</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-390"><a href="#L-390"><span class="linenos">390</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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</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-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</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-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">TYPE_MAPPING</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="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-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="p">}</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="p">}</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="p">}</span>
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="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-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</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="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">expression</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">position</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">occurrence</span><span class="p">,</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">parameters</span><span class="p">,</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">group</span><span class="p">,</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="p">)</span>
-</span><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">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-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</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-428"><a href="#L-428"><span class="linenos">428</span></a>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">def</span> <span class="nf">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-430"><a href="#L-430"><span class="linenos">430</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-431"><a href="#L-431"><span class="linenos">431</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-432"><a href="#L-432"><span class="linenos">432</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-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">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-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</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-437"><a href="#L-437"><span class="linenos">437</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-438"><a href="#L-438"><span class="linenos">438</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-439"><a href="#L-439"><span class="linenos">439</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-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">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</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-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="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-445"><a href="#L-445"><span class="linenos">445</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-446"><a href="#L-446"><span class="linenos">446</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-447"><a href="#L-447"><span class="linenos">447</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-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;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-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">def</span> <span class="nf">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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-421"><a href="#L-421"><span class="linenos">421</span></a>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</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">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">expression</span><span class="p">,</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">position</span><span class="p">,</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">occurrence</span><span class="p">,</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">parameters</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">group</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><span id="L-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</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-434"><a href="#L-434"><span class="linenos">434</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-435"><a href="#L-435"><span class="linenos">435</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-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="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-438"><a href="#L-438"><span class="linenos">438</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-439"><a href="#L-439"><span class="linenos">439</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-440"><a href="#L-440"><span class="linenos">440</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-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">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-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</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-445"><a href="#L-445"><span class="linenos">445</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-446"><a href="#L-446"><span class="linenos">446</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-447"><a href="#L-447"><span class="linenos">447</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-448"><a href="#L-448"><span class="linenos">448</span></a>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="bp">self</span><span class="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-451"><a href="#L-451"><span class="linenos">451</span></a> <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="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-453"><a href="#L-453"><span class="linenos">453</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-454"><a href="#L-454"><span class="linenos">454</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-455"><a href="#L-455"><span class="linenos">455</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-456"><a href="#L-456"><span class="linenos">456</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>
@@ -765,273 +770,270 @@
</div>
<a class="headerlink" href="#Snowflake"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake-183"><a href="#Snowflake-183"><span class="linenos">183</span></a><span class="k">class</span> <span class="nc">Snowflake</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Snowflake-184"><a href="#Snowflake-184"><span class="linenos">184</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/identifiers-syntax</span>
-</span><span id="Snowflake-185"><a href="#Snowflake-185"><span class="linenos">185</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Snowflake-186"><a href="#Snowflake-186"><span class="linenos">186</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="Snowflake-187"><a href="#Snowflake-187"><span class="linenos">187</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="Snowflake-188"><a href="#Snowflake-188"><span class="linenos">188</span></a>
-</span><span id="Snowflake-189"><a href="#Snowflake-189"><span class="linenos">189</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-190"><a href="#Snowflake-190"><span class="linenos">190</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="Snowflake-191"><a href="#Snowflake-191"><span class="linenos">191</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="Snowflake-192"><a href="#Snowflake-192"><span class="linenos">192</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="Snowflake-193"><a href="#Snowflake-193"><span class="linenos">193</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="Snowflake-194"><a href="#Snowflake-194"><span class="linenos">194</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="Snowflake-195"><a href="#Snowflake-195"><span class="linenos">195</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="Snowflake-196"><a href="#Snowflake-196"><span class="linenos">196</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-197"><a href="#Snowflake-197"><span class="linenos">197</span></a> <span class="s2">&quot;mon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-198"><a href="#Snowflake-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><span id="Snowflake-199"><a href="#Snowflake-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><span id="Snowflake-200"><a href="#Snowflake-200"><span class="linenos">200</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="Snowflake-201"><a href="#Snowflake-201"><span class="linenos">201</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="Snowflake-202"><a href="#Snowflake-202"><span class="linenos">202</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><span id="Snowflake-203"><a href="#Snowflake-203"><span class="linenos">203</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;%w&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-204"><a href="#Snowflake-204"><span class="linenos">204</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><span id="Snowflake-205"><a href="#Snowflake-205"><span class="linenos">205</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><span id="Snowflake-206"><a href="#Snowflake-206"><span class="linenos">206</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><span id="Snowflake-207"><a href="#Snowflake-207"><span class="linenos">207</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><span id="Snowflake-208"><a href="#Snowflake-208"><span class="linenos">208</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-209"><a href="#Snowflake-209"><span class="linenos">209</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-210"><a href="#Snowflake-210"><span class="linenos">210</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="Snowflake-211"><a href="#Snowflake-211"><span class="linenos">211</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="Snowflake-212"><a href="#Snowflake-212"><span class="linenos">212</span></a> <span class="s2">&quot;FF&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="Snowflake-213"><a href="#Snowflake-213"><span class="linenos">213</span></a> <span class="s2">&quot;ff&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="Snowflake-214"><a href="#Snowflake-214"><span class="linenos">214</span></a> <span class="s2">&quot;FF6&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="Snowflake-215"><a href="#Snowflake-215"><span class="linenos">215</span></a> <span class="s2">&quot;ff6&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="Snowflake-216"><a href="#Snowflake-216"><span class="linenos">216</span></a> <span class="p">}</span>
-</span><span id="Snowflake-217"><a href="#Snowflake-217"><span class="linenos">217</span></a>
-</span><span id="Snowflake-218"><a href="#Snowflake-218"><span class="linenos">218</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="Snowflake-219"><a href="#Snowflake-219"><span class="linenos">219</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Snowflake-220"><a href="#Snowflake-220"><span class="linenos">220</span></a>
-</span><span id="Snowflake-221"><a href="#Snowflake-221"><span class="linenos">221</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-222"><a href="#Snowflake-222"><span class="linenos">222</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Snowflake-223"><a href="#Snowflake-223"><span class="linenos">223</span></a> <span class="s2">&quot;ARRAYAGG&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="Snowflake-224"><a href="#Snowflake-224"><span class="linenos">224</span></a> <span class="s2">&quot;ARRAY_CONSTRUCT&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="Snowflake-225"><a href="#Snowflake-225"><span class="linenos">225</span></a> <span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Snowflake-226"><a href="#Snowflake-226"><span class="linenos">226</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">_parse_convert_timezone</span><span class="p">,</span>
-</span><span id="Snowflake-227"><a href="#Snowflake-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="Snowflake-228"><a href="#Snowflake-228"><span class="linenos">228</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
-</span><span id="Snowflake-229"><a href="#Snowflake-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Snowflake-230"><a href="#Snowflake-230"><span class="linenos">230</span></a> <span class="p">),</span>
-</span><span id="Snowflake-231"><a href="#Snowflake-231"><span class="linenos">231</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="Snowflake-232"><a href="#Snowflake-232"><span class="linenos">232</span></a> <span class="s2">&quot;DIV0&quot;</span><span class="p">:</span> <span class="n">_div0_to_if</span><span class="p">,</span>
-</span><span id="Snowflake-233"><a href="#Snowflake-233"><span class="linenos">233</span></a> <span class="s2">&quot;IFF&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="Snowflake-234"><a href="#Snowflake-234"><span class="linenos">234</span></a> <span class="s2">&quot;NULLIFZERO&quot;</span><span class="p">:</span> <span class="n">_nullifzero_to_if</span><span class="p">,</span>
-</span><span id="Snowflake-235"><a href="#Snowflake-235"><span class="linenos">235</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">:</span> <span class="n">_parse_object_construct</span><span class="p">,</span>
-</span><span id="Snowflake-236"><a href="#Snowflake-236"><span class="linenos">236</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="n">_parse_regexp_replace</span><span class="p">,</span>
-</span><span id="Snowflake-237"><a href="#Snowflake-237"><span class="linenos">237</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Snowflake-238"><a href="#Snowflake-238"><span class="linenos">238</span></a> <span class="s2">&quot;RLIKE&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="Snowflake-239"><a href="#Snowflake-239"><span class="linenos">239</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="Snowflake-240"><a href="#Snowflake-240"><span class="linenos">240</span></a> <span class="s2">&quot;TIMEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
-</span><span id="Snowflake-241"><a href="#Snowflake-241"><span class="linenos">241</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
-</span><span id="Snowflake-242"><a href="#Snowflake-242"><span class="linenos">242</span></a> <span class="s2">&quot;TO_ARRAY&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="Snowflake-243"><a href="#Snowflake-243"><span class="linenos">243</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_to_timestamp</span><span class="p">,</span>
-</span><span id="Snowflake-244"><a href="#Snowflake-244"><span class="linenos">244</span></a> <span class="s2">&quot;TO_VARCHAR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Snowflake-245"><a href="#Snowflake-245"><span class="linenos">245</span></a> <span class="s2">&quot;ZEROIFNULL&quot;</span><span class="p">:</span> <span class="n">_zeroifnull_to_if</span><span class="p">,</span>
-</span><span id="Snowflake-246"><a href="#Snowflake-246"><span class="linenos">246</span></a> <span class="p">}</span>
-</span><span id="Snowflake-247"><a href="#Snowflake-247"><span class="linenos">247</span></a>
-</span><span id="Snowflake-248"><a href="#Snowflake-248"><span class="linenos">248</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-249"><a href="#Snowflake-249"><span class="linenos">249</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="Snowflake-250"><a href="#Snowflake-250"><span class="linenos">250</span></a> <span class="s2">&quot;DATE_PART&quot;</span><span class="p">:</span> <span class="n">_parse_date_part</span><span class="p">,</span>
-</span><span id="Snowflake-251"><a href="#Snowflake-251"><span class="linenos">251</span></a> <span class="p">}</span>
-</span><span id="Snowflake-252"><a href="#Snowflake-252"><span class="linenos">252</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="Snowflake-253"><a href="#Snowflake-253"><span class="linenos">253</span></a>
-</span><span id="Snowflake-254"><a href="#Snowflake-254"><span class="linenos">254</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-255"><a href="#Snowflake-255"><span class="linenos">255</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">FUNC_TOKENS</span><span class="p">,</span>
-</span><span id="Snowflake-256"><a href="#Snowflake-256"><span class="linenos">256</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="Snowflake-257"><a href="#Snowflake-257"><span class="linenos">257</span></a> <span class="p">}</span>
-</span><span id="Snowflake-258"><a href="#Snowflake-258"><span class="linenos">258</span></a>
-</span><span id="Snowflake-259"><a href="#Snowflake-259"><span class="linenos">259</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-260"><a href="#Snowflake-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">COLUMN_OPERATORS</span><span class="p">,</span>
-</span><span id="Snowflake-261"><a href="#Snowflake-261"><span class="linenos">261</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="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="Snowflake-262"><a href="#Snowflake-262"><span class="linenos">262</span></a> <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="p">[</span><span class="n">path</span><span class="p">]</span>
-</span><span id="Snowflake-263"><a href="#Snowflake-263"><span class="linenos">263</span></a> <span class="p">),</span>
-</span><span id="Snowflake-264"><a href="#Snowflake-264"><span class="linenos">264</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake-194"><a href="#Snowflake-194"><span class="linenos">194</span></a><span class="k">class</span> <span class="nc">Snowflake</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="Snowflake-195"><a href="#Snowflake-195"><span class="linenos">195</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/identifiers-syntax</span>
+</span><span id="Snowflake-196"><a href="#Snowflake-196"><span class="linenos">196</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Snowflake-197"><a href="#Snowflake-197"><span class="linenos">197</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="Snowflake-198"><a href="#Snowflake-198"><span class="linenos">198</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH24:MI:SS&#39;&quot;</span>
+</span><span id="Snowflake-199"><a href="#Snowflake-199"><span class="linenos">199</span></a>
+</span><span id="Snowflake-200"><a href="#Snowflake-200"><span class="linenos">200</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-201"><a href="#Snowflake-201"><span class="linenos">201</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="Snowflake-202"><a href="#Snowflake-202"><span class="linenos">202</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="Snowflake-203"><a href="#Snowflake-203"><span class="linenos">203</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="Snowflake-204"><a href="#Snowflake-204"><span class="linenos">204</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="Snowflake-205"><a href="#Snowflake-205"><span class="linenos">205</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="Snowflake-206"><a href="#Snowflake-206"><span class="linenos">206</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="Snowflake-207"><a href="#Snowflake-207"><span class="linenos">207</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-208"><a href="#Snowflake-208"><span class="linenos">208</span></a> <span class="s2">&quot;mon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-209"><a href="#Snowflake-209"><span class="linenos">209</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="Snowflake-210"><a href="#Snowflake-210"><span class="linenos">210</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="Snowflake-211"><a href="#Snowflake-211"><span class="linenos">211</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="Snowflake-212"><a href="#Snowflake-212"><span class="linenos">212</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="Snowflake-213"><a href="#Snowflake-213"><span class="linenos">213</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><span id="Snowflake-214"><a href="#Snowflake-214"><span class="linenos">214</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;%w&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-215"><a href="#Snowflake-215"><span class="linenos">215</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><span id="Snowflake-216"><a href="#Snowflake-216"><span class="linenos">216</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><span id="Snowflake-217"><a href="#Snowflake-217"><span class="linenos">217</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><span id="Snowflake-218"><a href="#Snowflake-218"><span class="linenos">218</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><span id="Snowflake-219"><a href="#Snowflake-219"><span class="linenos">219</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-220"><a href="#Snowflake-220"><span class="linenos">220</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-221"><a href="#Snowflake-221"><span class="linenos">221</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="Snowflake-222"><a href="#Snowflake-222"><span class="linenos">222</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="Snowflake-223"><a href="#Snowflake-223"><span class="linenos">223</span></a> <span class="s2">&quot;FF&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="Snowflake-224"><a href="#Snowflake-224"><span class="linenos">224</span></a> <span class="s2">&quot;ff&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="Snowflake-225"><a href="#Snowflake-225"><span class="linenos">225</span></a> <span class="s2">&quot;FF6&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="Snowflake-226"><a href="#Snowflake-226"><span class="linenos">226</span></a> <span class="s2">&quot;ff6&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="Snowflake-227"><a href="#Snowflake-227"><span class="linenos">227</span></a> <span class="p">}</span>
+</span><span id="Snowflake-228"><a href="#Snowflake-228"><span class="linenos">228</span></a>
+</span><span id="Snowflake-229"><a href="#Snowflake-229"><span class="linenos">229</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="Snowflake-230"><a href="#Snowflake-230"><span class="linenos">230</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Snowflake-231"><a href="#Snowflake-231"><span class="linenos">231</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake-232"><a href="#Snowflake-232"><span class="linenos">232</span></a>
+</span><span id="Snowflake-233"><a href="#Snowflake-233"><span class="linenos">233</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-234"><a href="#Snowflake-234"><span class="linenos">234</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Snowflake-235"><a href="#Snowflake-235"><span class="linenos">235</span></a> <span class="s2">&quot;ARRAYAGG&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="Snowflake-236"><a href="#Snowflake-236"><span class="linenos">236</span></a> <span class="s2">&quot;ARRAY_CONSTRUCT&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="Snowflake-237"><a href="#Snowflake-237"><span class="linenos">237</span></a> <span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Snowflake-238"><a href="#Snowflake-238"><span class="linenos">238</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">_parse_convert_timezone</span><span class="p">,</span>
+</span><span id="Snowflake-239"><a href="#Snowflake-239"><span class="linenos">239</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="Snowflake-240"><a href="#Snowflake-240"><span class="linenos">240</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="Snowflake-241"><a href="#Snowflake-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Snowflake-242"><a href="#Snowflake-242"><span class="linenos">242</span></a> <span class="p">),</span>
+</span><span id="Snowflake-243"><a href="#Snowflake-243"><span class="linenos">243</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="Snowflake-244"><a href="#Snowflake-244"><span class="linenos">244</span></a> <span class="s2">&quot;DIV0&quot;</span><span class="p">:</span> <span class="n">_div0_to_if</span><span class="p">,</span>
+</span><span id="Snowflake-245"><a href="#Snowflake-245"><span class="linenos">245</span></a> <span class="s2">&quot;IFF&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="Snowflake-246"><a href="#Snowflake-246"><span class="linenos">246</span></a> <span class="s2">&quot;NULLIFZERO&quot;</span><span class="p">:</span> <span class="n">_nullifzero_to_if</span><span class="p">,</span>
+</span><span id="Snowflake-247"><a href="#Snowflake-247"><span class="linenos">247</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">:</span> <span class="n">_parse_object_construct</span><span class="p">,</span>
+</span><span id="Snowflake-248"><a href="#Snowflake-248"><span class="linenos">248</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="n">_parse_regexp_replace</span><span class="p">,</span>
+</span><span id="Snowflake-249"><a href="#Snowflake-249"><span class="linenos">249</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Snowflake-250"><a href="#Snowflake-250"><span class="linenos">250</span></a> <span class="s2">&quot;RLIKE&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="Snowflake-251"><a href="#Snowflake-251"><span class="linenos">251</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="Snowflake-252"><a href="#Snowflake-252"><span class="linenos">252</span></a> <span class="s2">&quot;TIMEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="Snowflake-253"><a href="#Snowflake-253"><span class="linenos">253</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="Snowflake-254"><a href="#Snowflake-254"><span class="linenos">254</span></a> <span class="s2">&quot;TO_ARRAY&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="Snowflake-255"><a href="#Snowflake-255"><span class="linenos">255</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_to_timestamp</span><span class="p">,</span>
+</span><span id="Snowflake-256"><a href="#Snowflake-256"><span class="linenos">256</span></a> <span class="s2">&quot;TO_VARCHAR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Snowflake-257"><a href="#Snowflake-257"><span class="linenos">257</span></a> <span class="s2">&quot;ZEROIFNULL&quot;</span><span class="p">:</span> <span class="n">_zeroifnull_to_if</span><span class="p">,</span>
+</span><span id="Snowflake-258"><a href="#Snowflake-258"><span class="linenos">258</span></a> <span class="p">}</span>
+</span><span id="Snowflake-259"><a href="#Snowflake-259"><span class="linenos">259</span></a>
+</span><span id="Snowflake-260"><a href="#Snowflake-260"><span class="linenos">260</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-261"><a href="#Snowflake-261"><span class="linenos">261</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="Snowflake-262"><a href="#Snowflake-262"><span class="linenos">262</span></a> <span class="s2">&quot;DATE_PART&quot;</span><span class="p">:</span> <span class="n">_parse_date_part</span><span class="p">,</span>
+</span><span id="Snowflake-263"><a href="#Snowflake-263"><span class="linenos">263</span></a> <span class="p">}</span>
+</span><span id="Snowflake-264"><a href="#Snowflake-264"><span class="linenos">264</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="Snowflake-265"><a href="#Snowflake-265"><span class="linenos">265</span></a>
-</span><span id="Snowflake-266"><a href="#Snowflake-266"><span class="linenos">266</span></a> <span class="n">TIMESTAMPS</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">TIMESTAMPS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">}</span>
-</span><span id="Snowflake-267"><a href="#Snowflake-267"><span class="linenos">267</span></a>
-</span><span id="Snowflake-268"><a href="#Snowflake-268"><span class="linenos">268</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-269"><a href="#Snowflake-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">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="Snowflake-270"><a href="#Snowflake-270"><span class="linenos">270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</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">LikeAny</span><span class="p">),</span>
-</span><span id="Snowflake-271"><a href="#Snowflake-271"><span class="linenos">271</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</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">ILikeAny</span><span class="p">),</span>
-</span><span id="Snowflake-272"><a href="#Snowflake-272"><span class="linenos">272</span></a> <span class="p">}</span>
-</span><span id="Snowflake-273"><a href="#Snowflake-273"><span class="linenos">273</span></a>
-</span><span id="Snowflake-274"><a href="#Snowflake-274"><span class="linenos">274</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-275"><a href="#Snowflake-275"><span class="linenos">275</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">ALTER_PARSERS</span><span class="p">,</span>
-</span><span id="Snowflake-276"><a href="#Snowflake-276"><span class="linenos">276</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">_parse_set</span><span class="p">(</span><span class="n">tag</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;TAG&quot;</span><span class="p">)),</span>
-</span><span id="Snowflake-277"><a href="#Snowflake-277"><span class="linenos">277</span></a> <span class="s2">&quot;UNSET&quot;</span><span class="p">:</span> <span class="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="Snowflake-278"><a href="#Snowflake-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span>
-</span><span id="Snowflake-279"><a href="#Snowflake-279"><span class="linenos">279</span></a> <span class="n">tag</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;TAG&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-280"><a href="#Snowflake-280"><span class="linenos">280</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="Snowflake-281"><a href="#Snowflake-281"><span class="linenos">281</span></a> <span class="n">unset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Snowflake-282"><a href="#Snowflake-282"><span class="linenos">282</span></a> <span class="p">),</span>
-</span><span id="Snowflake-283"><a href="#Snowflake-283"><span class="linenos">283</span></a> <span class="p">}</span>
-</span><span id="Snowflake-284"><a href="#Snowflake-284"><span class="linenos">284</span></a>
-</span><span id="Snowflake-285"><a href="#Snowflake-285"><span class="linenos">285</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="Snowflake-286"><a href="#Snowflake-286"><span class="linenos">286</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Snowflake-287"><a href="#Snowflake-287"><span class="linenos">287</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="Snowflake-288"><a href="#Snowflake-288"><span class="linenos">288</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="Snowflake-289"><a href="#Snowflake-289"><span class="linenos">289</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Snowflake-290"><a href="#Snowflake-290"><span class="linenos">290</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
-</span><span id="Snowflake-291"><a href="#Snowflake-291"><span class="linenos">291</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Snowflake-292"><a href="#Snowflake-292"><span class="linenos">292</span></a> <span class="nb">super</span><span class="p">()</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="Snowflake-293"><a href="#Snowflake-293"><span class="linenos">293</span></a> <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="Snowflake-294"><a href="#Snowflake-294"><span class="linenos">294</span></a> <span class="p">)</span>
-</span><span id="Snowflake-295"><a href="#Snowflake-295"><span class="linenos">295</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="Snowflake-296"><a href="#Snowflake-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">Anonymous</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">identifier</span><span class="p">])</span>
-</span><span id="Snowflake-297"><a href="#Snowflake-297"><span class="linenos">297</span></a>
-</span><span id="Snowflake-298"><a href="#Snowflake-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake-299"><a href="#Snowflake-299"><span class="linenos">299</span></a>
-</span><span id="Snowflake-300"><a href="#Snowflake-300"><span class="linenos">300</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="Snowflake-301"><a href="#Snowflake-301"><span class="linenos">301</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><span id="Snowflake-302"><a href="#Snowflake-302"><span class="linenos">302</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="Snowflake-303"><a href="#Snowflake-303"><span class="linenos">303</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="Snowflake-304"><a href="#Snowflake-304"><span class="linenos">304</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$$&quot;</span><span class="p">]</span>
-</span><span id="Snowflake-305"><a href="#Snowflake-305"><span class="linenos">305</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="Snowflake-266"><a href="#Snowflake-266"><span class="linenos">266</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-267"><a href="#Snowflake-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">COLUMN_OPERATORS</span><span class="p">,</span>
+</span><span id="Snowflake-268"><a href="#Snowflake-268"><span class="linenos">268</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="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="Snowflake-269"><a href="#Snowflake-269"><span class="linenos">269</span></a> <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="p">[</span><span class="n">path</span><span class="p">]</span>
+</span><span id="Snowflake-270"><a href="#Snowflake-270"><span class="linenos">270</span></a> <span class="p">),</span>
+</span><span id="Snowflake-271"><a href="#Snowflake-271"><span class="linenos">271</span></a> <span class="p">}</span>
+</span><span id="Snowflake-272"><a href="#Snowflake-272"><span class="linenos">272</span></a>
+</span><span id="Snowflake-273"><a href="#Snowflake-273"><span class="linenos">273</span></a> <span class="n">TIMESTAMPS</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">TIMESTAMPS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">}</span>
+</span><span id="Snowflake-274"><a href="#Snowflake-274"><span class="linenos">274</span></a>
+</span><span id="Snowflake-275"><a href="#Snowflake-275"><span class="linenos">275</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-276"><a href="#Snowflake-276"><span class="linenos">276</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="Snowflake-277"><a href="#Snowflake-277"><span class="linenos">277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</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">LikeAny</span><span class="p">),</span>
+</span><span id="Snowflake-278"><a href="#Snowflake-278"><span class="linenos">278</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</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">ILikeAny</span><span class="p">),</span>
+</span><span id="Snowflake-279"><a href="#Snowflake-279"><span class="linenos">279</span></a> <span class="p">}</span>
+</span><span id="Snowflake-280"><a href="#Snowflake-280"><span class="linenos">280</span></a>
+</span><span id="Snowflake-281"><a href="#Snowflake-281"><span class="linenos">281</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-282"><a href="#Snowflake-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">ALTER_PARSERS</span><span class="p">,</span>
+</span><span id="Snowflake-283"><a href="#Snowflake-283"><span class="linenos">283</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">_parse_set</span><span class="p">(</span><span class="n">tag</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;TAG&quot;</span><span class="p">)),</span>
+</span><span id="Snowflake-284"><a href="#Snowflake-284"><span class="linenos">284</span></a> <span class="s2">&quot;UNSET&quot;</span><span class="p">:</span> <span class="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="Snowflake-285"><a href="#Snowflake-285"><span class="linenos">285</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span>
+</span><span id="Snowflake-286"><a href="#Snowflake-286"><span class="linenos">286</span></a> <span class="n">tag</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;TAG&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-287"><a href="#Snowflake-287"><span class="linenos">287</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="Snowflake-288"><a href="#Snowflake-288"><span class="linenos">288</span></a> <span class="n">unset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Snowflake-289"><a href="#Snowflake-289"><span class="linenos">289</span></a> <span class="p">),</span>
+</span><span id="Snowflake-290"><a href="#Snowflake-290"><span class="linenos">290</span></a> <span class="p">}</span>
+</span><span id="Snowflake-291"><a href="#Snowflake-291"><span class="linenos">291</span></a>
+</span><span id="Snowflake-292"><a href="#Snowflake-292"><span class="linenos">292</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="Snowflake-293"><a href="#Snowflake-293"><span class="linenos">293</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Snowflake-294"><a href="#Snowflake-294"><span class="linenos">294</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="Snowflake-295"><a href="#Snowflake-295"><span class="linenos">295</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="Snowflake-296"><a href="#Snowflake-296"><span class="linenos">296</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Snowflake-297"><a href="#Snowflake-297"><span class="linenos">297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
+</span><span id="Snowflake-298"><a href="#Snowflake-298"><span class="linenos">298</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Snowflake-299"><a href="#Snowflake-299"><span class="linenos">299</span></a> <span class="nb">super</span><span class="p">()</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="Snowflake-300"><a href="#Snowflake-300"><span class="linenos">300</span></a> <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="Snowflake-301"><a href="#Snowflake-301"><span class="linenos">301</span></a> <span class="p">)</span>
+</span><span id="Snowflake-302"><a href="#Snowflake-302"><span class="linenos">302</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="Snowflake-303"><a href="#Snowflake-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">identifier</span><span class="p">])</span>
+</span><span id="Snowflake-304"><a href="#Snowflake-304"><span class="linenos">304</span></a>
+</span><span id="Snowflake-305"><a href="#Snowflake-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake-306"><a href="#Snowflake-306"><span class="linenos">306</span></a>
-</span><span id="Snowflake-307"><a href="#Snowflake-307"><span class="linenos">307</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-308"><a href="#Snowflake-308"><span class="linenos">308</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="Snowflake-309"><a href="#Snowflake-309"><span class="linenos">309</span></a> <span class="s2">&quot;BYTEINT&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="Snowflake-310"><a href="#Snowflake-310"><span class="linenos">310</span></a> <span class="s2">&quot;CHAR 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="Snowflake-311"><a href="#Snowflake-311"><span class="linenos">311</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="Snowflake-312"><a href="#Snowflake-312"><span class="linenos">312</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="Snowflake-313"><a href="#Snowflake-313"><span class="linenos">313</span></a> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</span><span class="p">,</span>
-</span><span id="Snowflake-314"><a href="#Snowflake-314"><span class="linenos">314</span></a> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</span><span class="p">,</span>
-</span><span id="Snowflake-315"><a href="#Snowflake-315"><span class="linenos">315</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="Snowflake-316"><a href="#Snowflake-316"><span class="linenos">316</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="Snowflake-317"><a href="#Snowflake-317"><span class="linenos">317</span></a> <span class="s2">&quot;NCHAR 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="Snowflake-318"><a href="#Snowflake-318"><span class="linenos">318</span></a> <span class="s2">&quot;PUT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Snowflake-319"><a href="#Snowflake-319"><span class="linenos">319</span></a> <span class="s2">&quot;RENAME&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="Snowflake-320"><a href="#Snowflake-320"><span class="linenos">320</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="Snowflake-321"><a href="#Snowflake-321"><span class="linenos">321</span></a> <span class="s2">&quot;TIMESTAMP_LTZ&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="Snowflake-322"><a href="#Snowflake-322"><span class="linenos">322</span></a> <span class="s2">&quot;TIMESTAMP_NTZ&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="Snowflake-323"><a href="#Snowflake-323"><span class="linenos">323</span></a> <span class="s2">&quot;TIMESTAMP_TZ&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="Snowflake-324"><a href="#Snowflake-324"><span class="linenos">324</span></a> <span class="s2">&quot;TIMESTAMPNTZ&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="Snowflake-325"><a href="#Snowflake-325"><span class="linenos">325</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="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">SINGLE_TOKENS</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">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="Snowflake-330"><a href="#Snowflake-330"><span class="linenos">330</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="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">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="Snowflake-334"><a href="#Snowflake-334"><span class="linenos">334</span></a>
-</span><span id="Snowflake-335"><a href="#Snowflake-335"><span class="linenos">335</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="Snowflake-336"><a href="#Snowflake-336"><span class="linenos">336</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Snowflake-337"><a href="#Snowflake-337"><span class="linenos">337</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Snowflake-338"><a href="#Snowflake-338"><span class="linenos">338</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Snowflake-339"><a href="#Snowflake-339"><span class="linenos">339</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Snowflake-340"><a href="#Snowflake-340"><span class="linenos">340</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Snowflake-341"><a href="#Snowflake-341"><span class="linenos">341</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-344"><a href="#Snowflake-344"><span class="linenos">344</span></a> <span 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="Snowflake-345"><a href="#Snowflake-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="Snowflake-346"><a href="#Snowflake-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-347"><a href="#Snowflake-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-348"><a href="#Snowflake-348"><span class="linenos">348</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="Snowflake-349"><a href="#Snowflake-349"><span class="linenos">349</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&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;zone&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Snowflake-350"><a href="#Snowflake-350"><span class="linenos">350</span></a> <span class="p">),</span>
-</span><span id="Snowflake-351"><a href="#Snowflake-351"><span class="linenos">351</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 class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Snowflake-352"><a href="#Snowflake-352"><span class="linenos">352</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="Snowflake-353"><a href="#Snowflake-353"><span class="linenos">353</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Snowflake-354"><a href="#Snowflake-354"><span class="linenos">354</span></a> <span class="p">),</span>
-</span><span id="Snowflake-355"><a href="#Snowflake-355"><span class="linenos">355</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="Snowflake-356"><a href="#Snowflake-356"><span class="linenos">356</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="Snowflake-357"><a href="#Snowflake-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-358"><a href="#Snowflake-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATE_PART&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-359"><a href="#Snowflake-359"><span class="linenos">359</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;IFF&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-360"><a href="#Snowflake-360"><span class="linenos">360</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;BOOLAND_AGG&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-361"><a href="#Snowflake-361"><span class="linenos">361</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;BOOLOR_AGG&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-362"><a href="#Snowflake-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">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-363"><a href="#Snowflake-363"><span class="linenos">363</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-364"><a href="#Snowflake-364"><span class="linenos">364</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-365"><a href="#Snowflake-365"><span class="linenos">365</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-366"><a href="#Snowflake-366"><span class="linenos">366</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-367"><a href="#Snowflake-367"><span class="linenos">367</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-368"><a href="#Snowflake-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-369"><a href="#Snowflake-369"><span class="linenos">369</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-370"><a href="#Snowflake-370"><span class="linenos">370</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-371"><a href="#Snowflake-371"><span class="linenos">371</span></a> <span class="p">),</span>
-</span><span id="Snowflake-372"><a href="#Snowflake-372"><span class="linenos">372</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-373"><a href="#Snowflake-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake-374"><a href="#Snowflake-374"><span class="linenos">374</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-375"><a href="#Snowflake-375"><span class="linenos">375</span></a> <span class="o">*</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()),</span>
-</span><span id="Snowflake-376"><a href="#Snowflake-376"><span class="linenos">376</span></a> <span class="p">),</span>
-</span><span id="Snowflake-377"><a href="#Snowflake-377"><span class="linenos">377</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-378"><a href="#Snowflake-378"><span class="linenos">378</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-379"><a href="#Snowflake-379"><span class="linenos">379</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-380"><a href="#Snowflake-380"><span class="linenos">380</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-381"><a href="#Snowflake-381"><span class="linenos">381</span></a> <span class="p">),</span>
-</span><span id="Snowflake-382"><a href="#Snowflake-382"><span class="linenos">382</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-383"><a href="#Snowflake-383"><span class="linenos">383</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-384"><a href="#Snowflake-384"><span class="linenos">384</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-385"><a href="#Snowflake-385"><span class="linenos">385</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-386"><a href="#Snowflake-386"><span class="linenos">386</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-387"><a href="#Snowflake-387"><span class="linenos">387</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-388"><a href="#Snowflake-388"><span class="linenos">388</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="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><span id="Snowflake-391"><a href="#Snowflake-391"><span class="linenos">391</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-392"><a href="#Snowflake-392"><span class="linenos">392</span></a> <span 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="Snowflake-393"><a href="#Snowflake-393"><span class="linenos">393</span></a> <span class="n">exp</span><span 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-394"><a href="#Snowflake-394"><span class="linenos">394</span></a> <span class="p">}</span>
-</span><span id="Snowflake-395"><a href="#Snowflake-395"><span class="linenos">395</span></a>
-</span><span id="Snowflake-396"><a href="#Snowflake-396"><span class="linenos">396</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-397"><a href="#Snowflake-397"><span class="linenos">397</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-398"><a href="#Snowflake-398"><span class="linenos">398</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-399"><a href="#Snowflake-399"><span class="linenos">399</span></a> <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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-402"><a href="#Snowflake-402"><span class="linenos">402</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Snowflake-403"><a href="#Snowflake-403"><span class="linenos">403</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-404"><a href="#Snowflake-404"><span class="linenos">404</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-405"><a href="#Snowflake-405"><span class="linenos">405</span></a> <span class="p">}</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">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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="Snowflake-408"><a href="#Snowflake-408"><span class="linenos">408</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
-</span><span id="Snowflake-409"><a href="#Snowflake-409"><span class="linenos">409</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
-</span><span id="Snowflake-410"><a href="#Snowflake-410"><span class="linenos">410</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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="Snowflake-411"><a href="#Snowflake-411"><span class="linenos">411</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
-</span><span id="Snowflake-412"><a href="#Snowflake-412"><span class="linenos">412</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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="Snowflake-413"><a href="#Snowflake-413"><span class="linenos">413</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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="Snowflake-307"><a href="#Snowflake-307"><span class="linenos">307</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="Snowflake-308"><a href="#Snowflake-308"><span class="linenos">308</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="Snowflake-309"><a href="#Snowflake-309"><span class="linenos">309</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="Snowflake-310"><a href="#Snowflake-310"><span class="linenos">310</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="Snowflake-311"><a href="#Snowflake-311"><span class="linenos">311</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="Snowflake-312"><a href="#Snowflake-312"><span class="linenos">312</span></a>
+</span><span id="Snowflake-313"><a href="#Snowflake-313"><span class="linenos">313</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-314"><a href="#Snowflake-314"><span class="linenos">314</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="Snowflake-315"><a href="#Snowflake-315"><span class="linenos">315</span></a> <span class="s2">&quot;BYTEINT&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="Snowflake-316"><a href="#Snowflake-316"><span class="linenos">316</span></a> <span class="s2">&quot;CHAR 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="Snowflake-317"><a href="#Snowflake-317"><span class="linenos">317</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="Snowflake-318"><a href="#Snowflake-318"><span class="linenos">318</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="Snowflake-319"><a href="#Snowflake-319"><span class="linenos">319</span></a> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</span><span class="p">,</span>
+</span><span id="Snowflake-320"><a href="#Snowflake-320"><span class="linenos">320</span></a> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</span><span class="p">,</span>
+</span><span id="Snowflake-321"><a href="#Snowflake-321"><span class="linenos">321</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="Snowflake-322"><a href="#Snowflake-322"><span class="linenos">322</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="Snowflake-323"><a href="#Snowflake-323"><span class="linenos">323</span></a> <span class="s2">&quot;NCHAR 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="Snowflake-324"><a href="#Snowflake-324"><span class="linenos">324</span></a> <span class="s2">&quot;PUT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Snowflake-325"><a href="#Snowflake-325"><span class="linenos">325</span></a> <span class="s2">&quot;RENAME&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="Snowflake-326"><a href="#Snowflake-326"><span class="linenos">326</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="Snowflake-327"><a href="#Snowflake-327"><span class="linenos">327</span></a> <span class="s2">&quot;TIMESTAMP_LTZ&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="Snowflake-328"><a href="#Snowflake-328"><span class="linenos">328</span></a> <span class="s2">&quot;TIMESTAMP_NTZ&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="Snowflake-329"><a href="#Snowflake-329"><span class="linenos">329</span></a> <span class="s2">&quot;TIMESTAMP_TZ&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="Snowflake-330"><a href="#Snowflake-330"><span class="linenos">330</span></a> <span class="s2">&quot;TIMESTAMPNTZ&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="Snowflake-331"><a href="#Snowflake-331"><span class="linenos">331</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="Snowflake-332"><a href="#Snowflake-332"><span class="linenos">332</span></a> <span class="p">}</span>
+</span><span id="Snowflake-333"><a href="#Snowflake-333"><span class="linenos">333</span></a>
+</span><span id="Snowflake-334"><a href="#Snowflake-334"><span class="linenos">334</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-335"><a href="#Snowflake-335"><span class="linenos">335</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="Snowflake-336"><a href="#Snowflake-336"><span class="linenos">336</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="Snowflake-337"><a href="#Snowflake-337"><span class="linenos">337</span></a> <span class="p">}</span>
+</span><span id="Snowflake-338"><a href="#Snowflake-338"><span class="linenos">338</span></a>
+</span><span id="Snowflake-339"><a href="#Snowflake-339"><span class="linenos">339</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="Snowflake-340"><a href="#Snowflake-340"><span class="linenos">340</span></a>
+</span><span id="Snowflake-341"><a href="#Snowflake-341"><span class="linenos">341</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="Snowflake-342"><a href="#Snowflake-342"><span class="linenos">342</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Snowflake-343"><a href="#Snowflake-343"><span class="linenos">343</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake-344"><a href="#Snowflake-344"><span class="linenos">344</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Snowflake-345"><a href="#Snowflake-345"><span class="linenos">345</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake-346"><a href="#Snowflake-346"><span class="linenos">346</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake-347"><a href="#Snowflake-347"><span class="linenos">347</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-350"><a href="#Snowflake-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">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Snowflake-351"><a href="#Snowflake-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="Snowflake-352"><a href="#Snowflake-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-353"><a href="#Snowflake-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-354"><a href="#Snowflake-354"><span class="linenos">354</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="Snowflake-355"><a href="#Snowflake-355"><span class="linenos">355</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&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;zone&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Snowflake-356"><a href="#Snowflake-356"><span class="linenos">356</span></a> <span class="p">),</span>
+</span><span id="Snowflake-357"><a href="#Snowflake-357"><span class="linenos">357</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 class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Snowflake-358"><a href="#Snowflake-358"><span class="linenos">358</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="Snowflake-359"><a href="#Snowflake-359"><span class="linenos">359</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Snowflake-360"><a href="#Snowflake-360"><span class="linenos">360</span></a> <span class="p">),</span>
+</span><span id="Snowflake-361"><a href="#Snowflake-361"><span class="linenos">361</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="Snowflake-362"><a href="#Snowflake-362"><span class="linenos">362</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="Snowflake-363"><a href="#Snowflake-363"><span class="linenos">363</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="Snowflake-364"><a href="#Snowflake-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATE_PART&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-365"><a href="#Snowflake-365"><span class="linenos">365</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;IFF&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-366"><a href="#Snowflake-366"><span class="linenos">366</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;BOOLAND_AGG&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-367"><a href="#Snowflake-367"><span class="linenos">367</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;BOOLOR_AGG&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-368"><a href="#Snowflake-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">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-369"><a href="#Snowflake-369"><span class="linenos">369</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-370"><a href="#Snowflake-370"><span class="linenos">370</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-371"><a href="#Snowflake-371"><span class="linenos">371</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-372"><a href="#Snowflake-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="n">_regexpilike_sql</span><span class="p">,</span>
+</span><span id="Snowflake-373"><a href="#Snowflake-373"><span class="linenos">373</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-374"><a href="#Snowflake-374"><span class="linenos">374</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-375"><a href="#Snowflake-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-376"><a href="#Snowflake-376"><span class="linenos">376</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-377"><a href="#Snowflake-377"><span class="linenos">377</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-378"><a href="#Snowflake-378"><span class="linenos">378</span></a> <span class="p">),</span>
+</span><span id="Snowflake-379"><a href="#Snowflake-379"><span class="linenos">379</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-380"><a href="#Snowflake-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Snowflake-381"><a href="#Snowflake-381"><span class="linenos">381</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-382"><a href="#Snowflake-382"><span class="linenos">382</span></a> <span class="o">*</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()),</span>
+</span><span id="Snowflake-383"><a href="#Snowflake-383"><span class="linenos">383</span></a> <span class="p">),</span>
+</span><span id="Snowflake-384"><a href="#Snowflake-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Stuff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;INSERT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-385"><a href="#Snowflake-385"><span class="linenos">385</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-386"><a href="#Snowflake-386"><span class="linenos">386</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-387"><a href="#Snowflake-387"><span class="linenos">387</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-388"><a href="#Snowflake-388"><span class="linenos">388</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-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="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-391"><a href="#Snowflake-391"><span class="linenos">391</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-392"><a href="#Snowflake-392"><span class="linenos">392</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-393"><a href="#Snowflake-393"><span class="linenos">393</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-394"><a href="#Snowflake-394"><span class="linenos">394</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-395"><a href="#Snowflake-395"><span class="linenos">395</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-396"><a href="#Snowflake-396"><span class="linenos">396</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="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><span id="Snowflake-399"><a href="#Snowflake-399"><span class="linenos">399</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-400"><a href="#Snowflake-400"><span class="linenos">400</span></a> <span 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="Snowflake-401"><a href="#Snowflake-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-402"><a href="#Snowflake-402"><span class="linenos">402</span></a> <span class="p">}</span>
+</span><span id="Snowflake-403"><a href="#Snowflake-403"><span class="linenos">403</span></a>
+</span><span id="Snowflake-404"><a href="#Snowflake-404"><span class="linenos">404</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-405"><a href="#Snowflake-405"><span class="linenos">405</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-406"><a href="#Snowflake-406"><span class="linenos">406</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-407"><a href="#Snowflake-407"><span class="linenos">407</span></a> <span class="p">}</span>
+</span><span id="Snowflake-408"><a href="#Snowflake-408"><span class="linenos">408</span></a>
+</span><span id="Snowflake-409"><a href="#Snowflake-409"><span class="linenos">409</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-410"><a href="#Snowflake-410"><span class="linenos">410</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Snowflake-411"><a href="#Snowflake-411"><span class="linenos">411</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-412"><a href="#Snowflake-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Snowflake-413"><a href="#Snowflake-413"><span class="linenos">413</span></a> <span class="p">}</span>
</span><span id="Snowflake-414"><a href="#Snowflake-414"><span class="linenos">414</span></a>
-</span><span id="Snowflake-415"><a href="#Snowflake-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake-416"><a href="#Snowflake-416"><span class="linenos">416</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-417"><a href="#Snowflake-417"><span class="linenos">417</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Snowflake-418"><a href="#Snowflake-418"><span class="linenos">418</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Snowflake-419"><a href="#Snowflake-419"><span class="linenos">419</span></a> <span class="n">position</span><span class="p">,</span>
-</span><span id="Snowflake-420"><a href="#Snowflake-420"><span class="linenos">420</span></a> <span class="n">occurrence</span><span class="p">,</span>
-</span><span id="Snowflake-421"><a href="#Snowflake-421"><span class="linenos">421</span></a> <span class="n">parameters</span><span class="p">,</span>
-</span><span id="Snowflake-422"><a href="#Snowflake-422"><span class="linenos">422</span></a> <span class="n">group</span><span class="p">,</span>
-</span><span id="Snowflake-423"><a href="#Snowflake-423"><span class="linenos">423</span></a> <span class="p">)</span>
-</span><span id="Snowflake-424"><a href="#Snowflake-424"><span class="linenos">424</span></a>
-</span><span id="Snowflake-425"><a href="#Snowflake-425"><span class="linenos">425</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-426"><a href="#Snowflake-426"><span class="linenos">426</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-427"><a href="#Snowflake-427"><span class="linenos">427</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-428"><a href="#Snowflake-428"><span class="linenos">428</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-429"><a href="#Snowflake-429"><span class="linenos">429</span></a>
-</span><span id="Snowflake-430"><a href="#Snowflake-430"><span class="linenos">430</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-431"><a href="#Snowflake-431"><span class="linenos">431</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-432"><a href="#Snowflake-432"><span class="linenos">432</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-433"><a href="#Snowflake-433"><span class="linenos">433</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-434"><a href="#Snowflake-434"><span class="linenos">434</span></a>
-</span><span id="Snowflake-435"><a href="#Snowflake-435"><span class="linenos">435</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-436"><a href="#Snowflake-436"><span class="linenos">436</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="Snowflake-437"><a href="#Snowflake-437"><span class="linenos">437</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-438"><a href="#Snowflake-438"><span class="linenos">438</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-439"><a href="#Snowflake-439"><span class="linenos">439</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-440"><a href="#Snowflake-440"><span class="linenos">440</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-441"><a href="#Snowflake-441"><span class="linenos">441</span></a>
-</span><span id="Snowflake-442"><a href="#Snowflake-442"><span class="linenos">442</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Snowflake-443"><a href="#Snowflake-443"><span class="linenos">443</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-444"><a href="#Snowflake-444"><span class="linenos">444</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake-445"><a href="#Snowflake-445"><span class="linenos">445</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-446"><a href="#Snowflake-446"><span class="linenos">446</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-447"><a href="#Snowflake-447"><span class="linenos">447</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-448"><a href="#Snowflake-448"><span class="linenos">448</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-449"><a href="#Snowflake-449"><span class="linenos">449</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-415"><a href="#Snowflake-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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="Snowflake-416"><a href="#Snowflake-416"><span class="linenos">416</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
+</span><span id="Snowflake-417"><a href="#Snowflake-417"><span class="linenos">417</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
+</span><span id="Snowflake-418"><a href="#Snowflake-418"><span class="linenos">418</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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="Snowflake-419"><a href="#Snowflake-419"><span class="linenos">419</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
+</span><span id="Snowflake-420"><a href="#Snowflake-420"><span class="linenos">420</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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="Snowflake-421"><a href="#Snowflake-421"><span class="linenos">421</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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="Snowflake-422"><a href="#Snowflake-422"><span class="linenos">422</span></a>
+</span><span id="Snowflake-423"><a href="#Snowflake-423"><span class="linenos">423</span></a> <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="Snowflake-424"><a href="#Snowflake-424"><span class="linenos">424</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-425"><a href="#Snowflake-425"><span class="linenos">425</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Snowflake-426"><a href="#Snowflake-426"><span class="linenos">426</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Snowflake-427"><a href="#Snowflake-427"><span class="linenos">427</span></a> <span class="n">position</span><span class="p">,</span>
+</span><span id="Snowflake-428"><a href="#Snowflake-428"><span class="linenos">428</span></a> <span class="n">occurrence</span><span class="p">,</span>
+</span><span id="Snowflake-429"><a href="#Snowflake-429"><span class="linenos">429</span></a> <span class="n">parameters</span><span class="p">,</span>
+</span><span id="Snowflake-430"><a href="#Snowflake-430"><span class="linenos">430</span></a> <span class="n">group</span><span class="p">,</span>
+</span><span id="Snowflake-431"><a href="#Snowflake-431"><span class="linenos">431</span></a> <span class="p">)</span>
+</span><span id="Snowflake-432"><a href="#Snowflake-432"><span class="linenos">432</span></a>
+</span><span id="Snowflake-433"><a href="#Snowflake-433"><span class="linenos">433</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-434"><a href="#Snowflake-434"><span class="linenos">434</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-435"><a href="#Snowflake-435"><span class="linenos">435</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-436"><a href="#Snowflake-436"><span class="linenos">436</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-437"><a href="#Snowflake-437"><span class="linenos">437</span></a>
+</span><span id="Snowflake-438"><a href="#Snowflake-438"><span class="linenos">438</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-439"><a href="#Snowflake-439"><span class="linenos">439</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-440"><a href="#Snowflake-440"><span class="linenos">440</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-441"><a href="#Snowflake-441"><span class="linenos">441</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-442"><a href="#Snowflake-442"><span class="linenos">442</span></a>
+</span><span id="Snowflake-443"><a href="#Snowflake-443"><span class="linenos">443</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-444"><a href="#Snowflake-444"><span class="linenos">444</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="Snowflake-445"><a href="#Snowflake-445"><span class="linenos">445</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-446"><a href="#Snowflake-446"><span class="linenos">446</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-447"><a href="#Snowflake-447"><span class="linenos">447</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-448"><a href="#Snowflake-448"><span class="linenos">448</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-449"><a href="#Snowflake-449"><span class="linenos">449</span></a>
+</span><span id="Snowflake-450"><a href="#Snowflake-450"><span class="linenos">450</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Snowflake-451"><a href="#Snowflake-451"><span class="linenos">451</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-452"><a href="#Snowflake-452"><span class="linenos">452</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake-453"><a href="#Snowflake-453"><span class="linenos">453</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-454"><a href="#Snowflake-454"><span class="linenos">454</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-455"><a href="#Snowflake-455"><span class="linenos">455</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-456"><a href="#Snowflake-456"><span class="linenos">456</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-457"><a href="#Snowflake-457"><span class="linenos">457</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>
@@ -1302,6 +1304,7 @@
<dd id="Snowflake.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Snowflake.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Snowflake.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Snowflake.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Snowflake.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Snowflake.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Snowflake.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
@@ -1338,87 +1341,83 @@
</div>
<a class="headerlink" href="#Snowflake.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Parser-218"><a href="#Snowflake.Parser-218"><span class="linenos">218</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="Snowflake.Parser-219"><a href="#Snowflake.Parser-219"><span class="linenos">219</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Snowflake.Parser-220"><a href="#Snowflake.Parser-220"><span class="linenos">220</span></a>
-</span><span id="Snowflake.Parser-221"><a href="#Snowflake.Parser-221"><span class="linenos">221</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Parser-222"><a href="#Snowflake.Parser-222"><span class="linenos">222</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-223"><a href="#Snowflake.Parser-223"><span class="linenos">223</span></a> <span class="s2">&quot;ARRAYAGG&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="Snowflake.Parser-224"><a href="#Snowflake.Parser-224"><span class="linenos">224</span></a> <span class="s2">&quot;ARRAY_CONSTRUCT&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="Snowflake.Parser-225"><a href="#Snowflake.Parser-225"><span class="linenos">225</span></a> <span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-226"><a href="#Snowflake.Parser-226"><span class="linenos">226</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">_parse_convert_timezone</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-227"><a href="#Snowflake.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="Snowflake.Parser-228"><a href="#Snowflake.Parser-228"><span class="linenos">228</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
-</span><span id="Snowflake.Parser-229"><a href="#Snowflake.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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Snowflake.Parser-230"><a href="#Snowflake.Parser-230"><span class="linenos">230</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Parser-231"><a href="#Snowflake.Parser-231"><span class="linenos">231</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="Snowflake.Parser-232"><a href="#Snowflake.Parser-232"><span class="linenos">232</span></a> <span class="s2">&quot;DIV0&quot;</span><span class="p">:</span> <span class="n">_div0_to_if</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-233"><a href="#Snowflake.Parser-233"><span class="linenos">233</span></a> <span class="s2">&quot;IFF&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="Snowflake.Parser-234"><a href="#Snowflake.Parser-234"><span class="linenos">234</span></a> <span class="s2">&quot;NULLIFZERO&quot;</span><span class="p">:</span> <span class="n">_nullifzero_to_if</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-235"><a href="#Snowflake.Parser-235"><span class="linenos">235</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">:</span> <span class="n">_parse_object_construct</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-236"><a href="#Snowflake.Parser-236"><span class="linenos">236</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="n">_parse_regexp_replace</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-237"><a href="#Snowflake.Parser-237"><span class="linenos">237</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-238"><a href="#Snowflake.Parser-238"><span class="linenos">238</span></a> <span class="s2">&quot;RLIKE&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="Snowflake.Parser-239"><a href="#Snowflake.Parser-239"><span class="linenos">239</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="Snowflake.Parser-240"><a href="#Snowflake.Parser-240"><span class="linenos">240</span></a> <span class="s2">&quot;TIMEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-241"><a href="#Snowflake.Parser-241"><span class="linenos">241</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-242"><a href="#Snowflake.Parser-242"><span class="linenos">242</span></a> <span class="s2">&quot;TO_ARRAY&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="Snowflake.Parser-243"><a href="#Snowflake.Parser-243"><span class="linenos">243</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_to_timestamp</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-244"><a href="#Snowflake.Parser-244"><span class="linenos">244</span></a> <span class="s2">&quot;TO_VARCHAR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-245"><a href="#Snowflake.Parser-245"><span class="linenos">245</span></a> <span class="s2">&quot;ZEROIFNULL&quot;</span><span class="p">:</span> <span class="n">_zeroifnull_to_if</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-246"><a href="#Snowflake.Parser-246"><span class="linenos">246</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Parser-247"><a href="#Snowflake.Parser-247"><span class="linenos">247</span></a>
-</span><span id="Snowflake.Parser-248"><a href="#Snowflake.Parser-248"><span class="linenos">248</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Parser-249"><a href="#Snowflake.Parser-249"><span class="linenos">249</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="Snowflake.Parser-250"><a href="#Snowflake.Parser-250"><span class="linenos">250</span></a> <span class="s2">&quot;DATE_PART&quot;</span><span class="p">:</span> <span class="n">_parse_date_part</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-251"><a href="#Snowflake.Parser-251"><span class="linenos">251</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Parser-252"><a href="#Snowflake.Parser-252"><span class="linenos">252</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="Snowflake.Parser-253"><a href="#Snowflake.Parser-253"><span class="linenos">253</span></a>
-</span><span id="Snowflake.Parser-254"><a href="#Snowflake.Parser-254"><span class="linenos">254</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Parser-255"><a href="#Snowflake.Parser-255"><span class="linenos">255</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">FUNC_TOKENS</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-256"><a href="#Snowflake.Parser-256"><span class="linenos">256</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-257"><a href="#Snowflake.Parser-257"><span class="linenos">257</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Parser-258"><a href="#Snowflake.Parser-258"><span class="linenos">258</span></a>
-</span><span id="Snowflake.Parser-259"><a href="#Snowflake.Parser-259"><span class="linenos">259</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Parser-260"><a href="#Snowflake.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">COLUMN_OPERATORS</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-261"><a href="#Snowflake.Parser-261"><span class="linenos">261</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="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="Snowflake.Parser-262"><a href="#Snowflake.Parser-262"><span class="linenos">262</span></a> <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="p">[</span><span class="n">path</span><span class="p">]</span>
-</span><span id="Snowflake.Parser-263"><a href="#Snowflake.Parser-263"><span class="linenos">263</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Parser-264"><a href="#Snowflake.Parser-264"><span class="linenos">264</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Parser-229"><a href="#Snowflake.Parser-229"><span class="linenos">229</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="Snowflake.Parser-230"><a href="#Snowflake.Parser-230"><span class="linenos">230</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Snowflake.Parser-231"><a href="#Snowflake.Parser-231"><span class="linenos">231</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake.Parser-232"><a href="#Snowflake.Parser-232"><span class="linenos">232</span></a>
+</span><span id="Snowflake.Parser-233"><a href="#Snowflake.Parser-233"><span class="linenos">233</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Parser-234"><a href="#Snowflake.Parser-234"><span class="linenos">234</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-235"><a href="#Snowflake.Parser-235"><span class="linenos">235</span></a> <span class="s2">&quot;ARRAYAGG&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="Snowflake.Parser-236"><a href="#Snowflake.Parser-236"><span class="linenos">236</span></a> <span class="s2">&quot;ARRAY_CONSTRUCT&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="Snowflake.Parser-237"><a href="#Snowflake.Parser-237"><span class="linenos">237</span></a> <span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-238"><a href="#Snowflake.Parser-238"><span class="linenos">238</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">_parse_convert_timezone</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-239"><a href="#Snowflake.Parser-239"><span class="linenos">239</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="Snowflake.Parser-240"><a href="#Snowflake.Parser-240"><span class="linenos">240</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span>
+</span><span id="Snowflake.Parser-241"><a href="#Snowflake.Parser-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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Snowflake.Parser-242"><a href="#Snowflake.Parser-242"><span class="linenos">242</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Parser-243"><a href="#Snowflake.Parser-243"><span class="linenos">243</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="Snowflake.Parser-244"><a href="#Snowflake.Parser-244"><span class="linenos">244</span></a> <span class="s2">&quot;DIV0&quot;</span><span class="p">:</span> <span class="n">_div0_to_if</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-245"><a href="#Snowflake.Parser-245"><span class="linenos">245</span></a> <span class="s2">&quot;IFF&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="Snowflake.Parser-246"><a href="#Snowflake.Parser-246"><span class="linenos">246</span></a> <span class="s2">&quot;NULLIFZERO&quot;</span><span class="p">:</span> <span class="n">_nullifzero_to_if</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-247"><a href="#Snowflake.Parser-247"><span class="linenos">247</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">:</span> <span class="n">_parse_object_construct</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-248"><a href="#Snowflake.Parser-248"><span class="linenos">248</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">:</span> <span class="n">_parse_regexp_replace</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-249"><a href="#Snowflake.Parser-249"><span class="linenos">249</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-250"><a href="#Snowflake.Parser-250"><span class="linenos">250</span></a> <span class="s2">&quot;RLIKE&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="Snowflake.Parser-251"><a href="#Snowflake.Parser-251"><span class="linenos">251</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="Snowflake.Parser-252"><a href="#Snowflake.Parser-252"><span class="linenos">252</span></a> <span class="s2">&quot;TIMEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-253"><a href="#Snowflake.Parser-253"><span class="linenos">253</span></a> <span class="s2">&quot;TIMESTAMPDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-254"><a href="#Snowflake.Parser-254"><span class="linenos">254</span></a> <span class="s2">&quot;TO_ARRAY&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="Snowflake.Parser-255"><a href="#Snowflake.Parser-255"><span class="linenos">255</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_to_timestamp</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-256"><a href="#Snowflake.Parser-256"><span class="linenos">256</span></a> <span class="s2">&quot;TO_VARCHAR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-257"><a href="#Snowflake.Parser-257"><span class="linenos">257</span></a> <span class="s2">&quot;ZEROIFNULL&quot;</span><span class="p">:</span> <span class="n">_zeroifnull_to_if</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-258"><a href="#Snowflake.Parser-258"><span class="linenos">258</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Parser-259"><a href="#Snowflake.Parser-259"><span class="linenos">259</span></a>
+</span><span id="Snowflake.Parser-260"><a href="#Snowflake.Parser-260"><span class="linenos">260</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Parser-261"><a href="#Snowflake.Parser-261"><span class="linenos">261</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="Snowflake.Parser-262"><a href="#Snowflake.Parser-262"><span class="linenos">262</span></a> <span class="s2">&quot;DATE_PART&quot;</span><span class="p">:</span> <span class="n">_parse_date_part</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-263"><a href="#Snowflake.Parser-263"><span class="linenos">263</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Parser-264"><a href="#Snowflake.Parser-264"><span class="linenos">264</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="Snowflake.Parser-265"><a href="#Snowflake.Parser-265"><span class="linenos">265</span></a>
-</span><span id="Snowflake.Parser-266"><a href="#Snowflake.Parser-266"><span class="linenos">266</span></a> <span class="n">TIMESTAMPS</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">TIMESTAMPS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">}</span>
-</span><span id="Snowflake.Parser-267"><a href="#Snowflake.Parser-267"><span class="linenos">267</span></a>
-</span><span id="Snowflake.Parser-268"><a href="#Snowflake.Parser-268"><span class="linenos">268</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Parser-269"><a href="#Snowflake.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">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-270"><a href="#Snowflake.Parser-270"><span class="linenos">270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</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">LikeAny</span><span class="p">),</span>
-</span><span id="Snowflake.Parser-271"><a href="#Snowflake.Parser-271"><span class="linenos">271</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</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">ILikeAny</span><span class="p">),</span>
-</span><span id="Snowflake.Parser-272"><a href="#Snowflake.Parser-272"><span class="linenos">272</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Parser-273"><a href="#Snowflake.Parser-273"><span class="linenos">273</span></a>
-</span><span id="Snowflake.Parser-274"><a href="#Snowflake.Parser-274"><span class="linenos">274</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Parser-275"><a href="#Snowflake.Parser-275"><span class="linenos">275</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">ALTER_PARSERS</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-276"><a href="#Snowflake.Parser-276"><span class="linenos">276</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">_parse_set</span><span class="p">(</span><span class="n">tag</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;TAG&quot;</span><span class="p">)),</span>
-</span><span id="Snowflake.Parser-277"><a href="#Snowflake.Parser-277"><span class="linenos">277</span></a> <span class="s2">&quot;UNSET&quot;</span><span class="p">:</span> <span class="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="Snowflake.Parser-278"><a href="#Snowflake.Parser-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-279"><a href="#Snowflake.Parser-279"><span class="linenos">279</span></a> <span class="n">tag</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;TAG&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Parser-280"><a href="#Snowflake.Parser-280"><span class="linenos">280</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="Snowflake.Parser-281"><a href="#Snowflake.Parser-281"><span class="linenos">281</span></a> <span class="n">unset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-282"><a href="#Snowflake.Parser-282"><span class="linenos">282</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Parser-283"><a href="#Snowflake.Parser-283"><span class="linenos">283</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Parser-284"><a href="#Snowflake.Parser-284"><span class="linenos">284</span></a>
-</span><span id="Snowflake.Parser-285"><a href="#Snowflake.Parser-285"><span class="linenos">285</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="Snowflake.Parser-286"><a href="#Snowflake.Parser-286"><span class="linenos">286</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Snowflake.Parser-287"><a href="#Snowflake.Parser-287"><span class="linenos">287</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="Snowflake.Parser-288"><a href="#Snowflake.Parser-288"><span class="linenos">288</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="Snowflake.Parser-289"><a href="#Snowflake.Parser-289"><span class="linenos">289</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Snowflake.Parser-290"><a href="#Snowflake.Parser-290"><span class="linenos">290</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
-</span><span id="Snowflake.Parser-291"><a href="#Snowflake.Parser-291"><span class="linenos">291</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Snowflake.Parser-292"><a href="#Snowflake.Parser-292"><span class="linenos">292</span></a> <span class="nb">super</span><span class="p">()</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="Snowflake.Parser-293"><a href="#Snowflake.Parser-293"><span class="linenos">293</span></a> <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="Snowflake.Parser-294"><a href="#Snowflake.Parser-294"><span class="linenos">294</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Parser-295"><a href="#Snowflake.Parser-295"><span class="linenos">295</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="Snowflake.Parser-296"><a href="#Snowflake.Parser-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">Anonymous</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">identifier</span><span class="p">])</span>
-</span><span id="Snowflake.Parser-297"><a href="#Snowflake.Parser-297"><span class="linenos">297</span></a>
-</span><span id="Snowflake.Parser-298"><a href="#Snowflake.Parser-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake.Parser-266"><a href="#Snowflake.Parser-266"><span class="linenos">266</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Parser-267"><a href="#Snowflake.Parser-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">COLUMN_OPERATORS</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-268"><a href="#Snowflake.Parser-268"><span class="linenos">268</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="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="Snowflake.Parser-269"><a href="#Snowflake.Parser-269"><span class="linenos">269</span></a> <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="p">[</span><span class="n">path</span><span class="p">]</span>
+</span><span id="Snowflake.Parser-270"><a href="#Snowflake.Parser-270"><span class="linenos">270</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Parser-271"><a href="#Snowflake.Parser-271"><span class="linenos">271</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Parser-272"><a href="#Snowflake.Parser-272"><span class="linenos">272</span></a>
+</span><span id="Snowflake.Parser-273"><a href="#Snowflake.Parser-273"><span class="linenos">273</span></a> <span class="n">TIMESTAMPS</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">TIMESTAMPS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">}</span>
+</span><span id="Snowflake.Parser-274"><a href="#Snowflake.Parser-274"><span class="linenos">274</span></a>
+</span><span id="Snowflake.Parser-275"><a href="#Snowflake.Parser-275"><span class="linenos">275</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Parser-276"><a href="#Snowflake.Parser-276"><span class="linenos">276</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-277"><a href="#Snowflake.Parser-277"><span class="linenos">277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</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">LikeAny</span><span class="p">),</span>
+</span><span id="Snowflake.Parser-278"><a href="#Snowflake.Parser-278"><span class="linenos">278</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</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">ILikeAny</span><span class="p">),</span>
+</span><span id="Snowflake.Parser-279"><a href="#Snowflake.Parser-279"><span class="linenos">279</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Parser-280"><a href="#Snowflake.Parser-280"><span class="linenos">280</span></a>
+</span><span id="Snowflake.Parser-281"><a href="#Snowflake.Parser-281"><span class="linenos">281</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Parser-282"><a href="#Snowflake.Parser-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">ALTER_PARSERS</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-283"><a href="#Snowflake.Parser-283"><span class="linenos">283</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">_parse_set</span><span class="p">(</span><span class="n">tag</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;TAG&quot;</span><span class="p">)),</span>
+</span><span id="Snowflake.Parser-284"><a href="#Snowflake.Parser-284"><span class="linenos">284</span></a> <span class="s2">&quot;UNSET&quot;</span><span class="p">:</span> <span class="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="Snowflake.Parser-285"><a href="#Snowflake.Parser-285"><span class="linenos">285</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-286"><a href="#Snowflake.Parser-286"><span class="linenos">286</span></a> <span class="n">tag</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;TAG&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Parser-287"><a href="#Snowflake.Parser-287"><span class="linenos">287</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="Snowflake.Parser-288"><a href="#Snowflake.Parser-288"><span class="linenos">288</span></a> <span class="n">unset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-289"><a href="#Snowflake.Parser-289"><span class="linenos">289</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Parser-290"><a href="#Snowflake.Parser-290"><span class="linenos">290</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Parser-291"><a href="#Snowflake.Parser-291"><span class="linenos">291</span></a>
+</span><span id="Snowflake.Parser-292"><a href="#Snowflake.Parser-292"><span class="linenos">292</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="Snowflake.Parser-293"><a href="#Snowflake.Parser-293"><span class="linenos">293</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Snowflake.Parser-294"><a href="#Snowflake.Parser-294"><span class="linenos">294</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="Snowflake.Parser-295"><a href="#Snowflake.Parser-295"><span class="linenos">295</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="Snowflake.Parser-296"><a href="#Snowflake.Parser-296"><span class="linenos">296</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Snowflake.Parser-297"><a href="#Snowflake.Parser-297"><span class="linenos">297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
+</span><span id="Snowflake.Parser-298"><a href="#Snowflake.Parser-298"><span class="linenos">298</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Snowflake.Parser-299"><a href="#Snowflake.Parser-299"><span class="linenos">299</span></a> <span class="nb">super</span><span class="p">()</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="Snowflake.Parser-300"><a href="#Snowflake.Parser-300"><span class="linenos">300</span></a> <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="Snowflake.Parser-301"><a href="#Snowflake.Parser-301"><span class="linenos">301</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Parser-302"><a href="#Snowflake.Parser-302"><span class="linenos">302</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="Snowflake.Parser-303"><a href="#Snowflake.Parser-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">identifier</span><span class="p">])</span>
+</span><span id="Snowflake.Parser-304"><a href="#Snowflake.Parser-304"><span class="linenos">304</span></a>
+</span><span id="Snowflake.Parser-305"><a href="#Snowflake.Parser-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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></pre></div>
@@ -1451,11 +1450,23 @@ Default: 3</li>
</div>
+ <div id="Snowflake.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Snowflake.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
<div id="Snowflake.Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Snowflake.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;function _parse_regexp_replace&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ARRAYAGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_CONSTRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_TO_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;CONVERT_TIMEZONE&#39;: &lt;function _parse_convert_timezone&gt;, &#39;DATEADD&#39;: &lt;function <a href="#Snowflake.Parser">Snowflake.Parser</a>.&lt;lambda&gt;&gt;, &#39;DIV0&#39;: &lt;function _div0_to_if&gt;, &#39;IFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;NULLIFZERO&#39;: &lt;function _nullifzero_to_if&gt;, &#39;OBJECT_CONSTRUCT&#39;: &lt;function _parse_object_construct&gt;, &#39;REGEXP_SUBSTR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SQUARE&#39;: &lt;function <a href="#Snowflake.Parser">Snowflake.Parser</a>.&lt;lambda&gt;&gt;, &#39;TIMEDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function _parse_to_timestamp&gt;, &#39;TO_VARCHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;ZEROIFNULL&#39;: &lt;function _zeroifnull_to_if&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function date_trunc_to_time&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;function _parse_regexp_replace&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ARRAYAGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_CONSTRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_TO_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;CONVERT_TIMEZONE&#39;: &lt;function _parse_convert_timezone&gt;, &#39;DATEADD&#39;: &lt;function <a href="#Snowflake.Parser">Snowflake.Parser</a>.&lt;lambda&gt;&gt;, &#39;DIV0&#39;: &lt;function _div0_to_if&gt;, &#39;IFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;NULLIFZERO&#39;: &lt;function _nullifzero_to_if&gt;, &#39;OBJECT_CONSTRUCT&#39;: &lt;function _parse_object_construct&gt;, &#39;REGEXP_SUBSTR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SQUARE&#39;: &lt;function <a href="#Snowflake.Parser">Snowflake.Parser</a>.&lt;lambda&gt;&gt;, &#39;TIMEDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function _parse_to_timestamp&gt;, &#39;TO_VARCHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;ZEROIFNULL&#39;: &lt;function _zeroifnull_to_if&gt;}</span>
</div>
@@ -1477,19 +1488,6 @@ Default: 3</li>
</div>
- <div id="Snowflake.Parser.FUNC_TOKENS" class="classattr">
- <div class="attr variable">
- <span class="name">FUNC_TOKENS</span> =
-<input id="Snowflake.Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
-
-
- </div>
- <a class="headerlink" href="#Snowflake.Parser.FUNC_TOKENS"></a>
-
-
-
- </div>
<div id="Snowflake.Parser.COLUMN_OPERATORS" class="classattr">
<div class="attr variable">
<span class="name">COLUMN_OPERATORS</span> =
@@ -1507,7 +1505,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIMESTAMPS</span> =
<input id="Snowflake.Parser.TIMESTAMPS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;}</span>
</div>
@@ -1520,7 +1518,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RANGE_PARSERS</span> =
<input id="Snowflake.Parser.RANGE_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE_ANY: &#39;LIKE_ANY&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE_ANY: &#39;ILIKE_ANY&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE_ANY: &#39;LIKE_ANY&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE_ANY: &#39;ILIKE_ANY&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1542,6 +1540,18 @@ Default: 3</li>
</div>
+ <div id="Snowflake.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Snowflake.Tokenizer">sqlglot.dialects.snowflake.Snowflake.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Snowflake.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Snowflake.Parser.NULL_ORDERING" class="classattr">
<div class="attr variable">
<span class="name">NULL_ORDERING</span><span class="annotation">: str</span> =
@@ -1623,6 +1633,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Snowflake.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Snowflake.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Snowflake.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Snowflake.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Snowflake.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Snowflake.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1636,12 +1647,14 @@ Default: 3</li>
<dd id="Snowflake.Parser.COMMENT_TABLE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.COMMENT_TABLE_ALIAS_TOKENS">COMMENT_TABLE_ALIAS_TOKENS</a></dd>
<dd id="Snowflake.Parser.UPDATE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.UPDATE_ALIAS_TOKENS">UPDATE_ALIAS_TOKENS</a></dd>
<dd id="Snowflake.Parser.TRIM_TYPES" class="variable"><a href="../parser.html#Parser.TRIM_TYPES">TRIM_TYPES</a></dd>
+ <dd id="Snowflake.Parser.FUNC_TOKENS" class="variable"><a href="../parser.html#Parser.FUNC_TOKENS">FUNC_TOKENS</a></dd>
<dd id="Snowflake.Parser.CONJUNCTION" class="variable"><a href="../parser.html#Parser.CONJUNCTION">CONJUNCTION</a></dd>
<dd id="Snowflake.Parser.EQUALITY" class="variable"><a href="../parser.html#Parser.EQUALITY">EQUALITY</a></dd>
<dd id="Snowflake.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
<dd id="Snowflake.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Snowflake.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Snowflake.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Snowflake.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Snowflake.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Snowflake.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
<dd id="Snowflake.Parser.JOIN_SIDES" class="variable"><a href="../parser.html#Parser.JOIN_SIDES">JOIN_SIDES</a></dd>
@@ -1657,6 +1670,7 @@ Default: 3</li>
<dd id="Snowflake.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
<dd id="Snowflake.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Snowflake.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Snowflake.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Snowflake.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Snowflake.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Snowflake.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1674,11 +1688,13 @@ Default: 3</li>
<dd id="Snowflake.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Snowflake.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Snowflake.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Snowflake.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Snowflake.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="Snowflake.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Snowflake.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Snowflake.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Snowflake.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Snowflake.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Snowflake.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Snowflake.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Snowflake.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -1713,57 +1729,44 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Snowflake.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Tokenizer-300"><a href="#Snowflake.Tokenizer-300"><span class="linenos">300</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="Snowflake.Tokenizer-301"><a href="#Snowflake.Tokenizer-301"><span class="linenos">301</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><span id="Snowflake.Tokenizer-302"><a href="#Snowflake.Tokenizer-302"><span class="linenos">302</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="Snowflake.Tokenizer-303"><a href="#Snowflake.Tokenizer-303"><span class="linenos">303</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="Snowflake.Tokenizer-304"><a href="#Snowflake.Tokenizer-304"><span class="linenos">304</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$$&quot;</span><span class="p">]</span>
-</span><span id="Snowflake.Tokenizer-305"><a href="#Snowflake.Tokenizer-305"><span class="linenos">305</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="Snowflake.Tokenizer-306"><a href="#Snowflake.Tokenizer-306"><span class="linenos">306</span></a>
-</span><span id="Snowflake.Tokenizer-307"><a href="#Snowflake.Tokenizer-307"><span class="linenos">307</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Tokenizer-308"><a href="#Snowflake.Tokenizer-308"><span class="linenos">308</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="Snowflake.Tokenizer-309"><a href="#Snowflake.Tokenizer-309"><span class="linenos">309</span></a> <span class="s2">&quot;BYTEINT&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="Snowflake.Tokenizer-310"><a href="#Snowflake.Tokenizer-310"><span class="linenos">310</span></a> <span class="s2">&quot;CHAR 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="Snowflake.Tokenizer-311"><a href="#Snowflake.Tokenizer-311"><span class="linenos">311</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="Snowflake.Tokenizer-312"><a href="#Snowflake.Tokenizer-312"><span class="linenos">312</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="Snowflake.Tokenizer-313"><a href="#Snowflake.Tokenizer-313"><span class="linenos">313</span></a> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</span><span class="p">,</span>
-</span><span id="Snowflake.Tokenizer-314"><a href="#Snowflake.Tokenizer-314"><span class="linenos">314</span></a> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</span><span class="p">,</span>
-</span><span id="Snowflake.Tokenizer-315"><a href="#Snowflake.Tokenizer-315"><span class="linenos">315</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="Snowflake.Tokenizer-316"><a href="#Snowflake.Tokenizer-316"><span class="linenos">316</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="Snowflake.Tokenizer-317"><a href="#Snowflake.Tokenizer-317"><span class="linenos">317</span></a> <span class="s2">&quot;NCHAR 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="Snowflake.Tokenizer-318"><a href="#Snowflake.Tokenizer-318"><span class="linenos">318</span></a> <span class="s2">&quot;PUT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Snowflake.Tokenizer-319"><a href="#Snowflake.Tokenizer-319"><span class="linenos">319</span></a> <span class="s2">&quot;RENAME&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="Snowflake.Tokenizer-320"><a href="#Snowflake.Tokenizer-320"><span class="linenos">320</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="Snowflake.Tokenizer-321"><a href="#Snowflake.Tokenizer-321"><span class="linenos">321</span></a> <span class="s2">&quot;TIMESTAMP_LTZ&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="Snowflake.Tokenizer-322"><a href="#Snowflake.Tokenizer-322"><span class="linenos">322</span></a> <span class="s2">&quot;TIMESTAMP_NTZ&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="Snowflake.Tokenizer-323"><a href="#Snowflake.Tokenizer-323"><span class="linenos">323</span></a> <span class="s2">&quot;TIMESTAMP_TZ&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="Snowflake.Tokenizer-324"><a href="#Snowflake.Tokenizer-324"><span class="linenos">324</span></a> <span class="s2">&quot;TIMESTAMPNTZ&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="Snowflake.Tokenizer-325"><a href="#Snowflake.Tokenizer-325"><span class="linenos">325</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="Snowflake.Tokenizer-326"><a href="#Snowflake.Tokenizer-326"><span class="linenos">326</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Tokenizer-327"><a href="#Snowflake.Tokenizer-327"><span class="linenos">327</span></a>
-</span><span id="Snowflake.Tokenizer-328"><a href="#Snowflake.Tokenizer-328"><span class="linenos">328</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Tokenizer-329"><a href="#Snowflake.Tokenizer-329"><span class="linenos">329</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="Snowflake.Tokenizer-330"><a href="#Snowflake.Tokenizer-330"><span class="linenos">330</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="Snowflake.Tokenizer-331"><a href="#Snowflake.Tokenizer-331"><span class="linenos">331</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Tokenizer-332"><a href="#Snowflake.Tokenizer-332"><span class="linenos">332</span></a>
-</span><span id="Snowflake.Tokenizer-333"><a href="#Snowflake.Tokenizer-333"><span class="linenos">333</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="Snowflake.Tokenizer-307"><a href="#Snowflake.Tokenizer-307"><span class="linenos">307</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="Snowflake.Tokenizer-308"><a href="#Snowflake.Tokenizer-308"><span class="linenos">308</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="Snowflake.Tokenizer-309"><a href="#Snowflake.Tokenizer-309"><span class="linenos">309</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="Snowflake.Tokenizer-310"><a href="#Snowflake.Tokenizer-310"><span class="linenos">310</span></a> <span class="n">RAW_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="Snowflake.Tokenizer-311"><a href="#Snowflake.Tokenizer-311"><span class="linenos">311</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="Snowflake.Tokenizer-312"><a href="#Snowflake.Tokenizer-312"><span class="linenos">312</span></a>
+</span><span id="Snowflake.Tokenizer-313"><a href="#Snowflake.Tokenizer-313"><span class="linenos">313</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Tokenizer-314"><a href="#Snowflake.Tokenizer-314"><span class="linenos">314</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="Snowflake.Tokenizer-315"><a href="#Snowflake.Tokenizer-315"><span class="linenos">315</span></a> <span class="s2">&quot;BYTEINT&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="Snowflake.Tokenizer-316"><a href="#Snowflake.Tokenizer-316"><span class="linenos">316</span></a> <span class="s2">&quot;CHAR 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="Snowflake.Tokenizer-317"><a href="#Snowflake.Tokenizer-317"><span class="linenos">317</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="Snowflake.Tokenizer-318"><a href="#Snowflake.Tokenizer-318"><span class="linenos">318</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="Snowflake.Tokenizer-319"><a href="#Snowflake.Tokenizer-319"><span class="linenos">319</span></a> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE_ANY</span><span class="p">,</span>
+</span><span id="Snowflake.Tokenizer-320"><a href="#Snowflake.Tokenizer-320"><span class="linenos">320</span></a> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE_ANY</span><span class="p">,</span>
+</span><span id="Snowflake.Tokenizer-321"><a href="#Snowflake.Tokenizer-321"><span class="linenos">321</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="Snowflake.Tokenizer-322"><a href="#Snowflake.Tokenizer-322"><span class="linenos">322</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="Snowflake.Tokenizer-323"><a href="#Snowflake.Tokenizer-323"><span class="linenos">323</span></a> <span class="s2">&quot;NCHAR 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="Snowflake.Tokenizer-324"><a href="#Snowflake.Tokenizer-324"><span class="linenos">324</span></a> <span class="s2">&quot;PUT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Snowflake.Tokenizer-325"><a href="#Snowflake.Tokenizer-325"><span class="linenos">325</span></a> <span class="s2">&quot;RENAME&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="Snowflake.Tokenizer-326"><a href="#Snowflake.Tokenizer-326"><span class="linenos">326</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="Snowflake.Tokenizer-327"><a href="#Snowflake.Tokenizer-327"><span class="linenos">327</span></a> <span class="s2">&quot;TIMESTAMP_LTZ&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="Snowflake.Tokenizer-328"><a href="#Snowflake.Tokenizer-328"><span class="linenos">328</span></a> <span class="s2">&quot;TIMESTAMP_NTZ&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="Snowflake.Tokenizer-329"><a href="#Snowflake.Tokenizer-329"><span class="linenos">329</span></a> <span class="s2">&quot;TIMESTAMP_TZ&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="Snowflake.Tokenizer-330"><a href="#Snowflake.Tokenizer-330"><span class="linenos">330</span></a> <span class="s2">&quot;TIMESTAMPNTZ&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="Snowflake.Tokenizer-331"><a href="#Snowflake.Tokenizer-331"><span class="linenos">331</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="Snowflake.Tokenizer-332"><a href="#Snowflake.Tokenizer-332"><span class="linenos">332</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Tokenizer-333"><a href="#Snowflake.Tokenizer-333"><span class="linenos">333</span></a>
+</span><span id="Snowflake.Tokenizer-334"><a href="#Snowflake.Tokenizer-334"><span class="linenos">334</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Tokenizer-335"><a href="#Snowflake.Tokenizer-335"><span class="linenos">335</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="Snowflake.Tokenizer-336"><a href="#Snowflake.Tokenizer-336"><span class="linenos">336</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="Snowflake.Tokenizer-337"><a href="#Snowflake.Tokenizer-337"><span class="linenos">337</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Tokenizer-338"><a href="#Snowflake.Tokenizer-338"><span class="linenos">338</span></a>
+</span><span id="Snowflake.Tokenizer-339"><a href="#Snowflake.Tokenizer-339"><span class="linenos">339</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>
- <div id="Snowflake.Tokenizer.QUOTES" class="classattr">
- <div class="attr variable">
- <span class="name">QUOTES</span> =
-<span class="default_value">[&#34;&#39;&#34;]</span>
-
-
- </div>
- <a class="headerlink" href="#Snowflake.Tokenizer.QUOTES"></a>
-
-
-
- </div>
<div id="Snowflake.Tokenizer.STRING_ESCAPES" class="classattr">
<div class="attr variable">
<span class="name">STRING_ESCAPES</span> =
@@ -1816,7 +1819,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Snowflake.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;BYTEINT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;CHAR VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;EXCLUDE&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;ILIKE ANY&#39;: &lt;TokenType.ILIKE_ANY: &#39;ILIKE_ANY&#39;&gt;, &#39;LIKE ANY&#39;: &lt;TokenType.LIKE_ANY: &#39;LIKE_ANY&#39;&gt;, &#39;MATCH_RECOGNIZE&#39;: &lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;, &#39;MINUS&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;NCHAR VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;PUT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;RENAME&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;SAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TIMESTAMP_LTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;TIMESTAMP_NTZ&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMP_TZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPNTZ&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;BYTEINT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;CHAR VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;CHARACTER VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;EXCLUDE&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;ILIKE ANY&#39;: &lt;TokenType.ILIKE_ANY: &#39;ILIKE_ANY&#39;&gt;, &#39;LIKE ANY&#39;: &lt;TokenType.LIKE_ANY: &#39;LIKE_ANY&#39;&gt;, &#39;MATCH_RECOGNIZE&#39;: &lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;, &#39;MINUS&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;NCHAR VARYING&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;PUT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;RENAME&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;SAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TIMESTAMP_LTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;TIMESTAMP_NTZ&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMP_TZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPNTZ&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;}</span>
</div>
@@ -1858,6 +1861,7 @@ Default: 3</li>
<dd id="Snowflake.Tokenizer.BYTE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.BYTE_STRINGS">BYTE_STRINGS</a></dd>
<dd id="Snowflake.Tokenizer.IDENTIFIERS" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIERS">IDENTIFIERS</a></dd>
<dd id="Snowflake.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
+ <dd id="Snowflake.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Snowflake.Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="Snowflake.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Snowflake.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
@@ -1886,121 +1890,123 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Snowflake.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator-335"><a href="#Snowflake.Generator-335"><span class="linenos">335</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="Snowflake.Generator-336"><a href="#Snowflake.Generator-336"><span class="linenos">336</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Snowflake.Generator-337"><a href="#Snowflake.Generator-337"><span class="linenos">337</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Snowflake.Generator-338"><a href="#Snowflake.Generator-338"><span class="linenos">338</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Snowflake.Generator-339"><a href="#Snowflake.Generator-339"><span class="linenos">339</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Snowflake.Generator-340"><a href="#Snowflake.Generator-340"><span class="linenos">340</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Snowflake.Generator-341"><a href="#Snowflake.Generator-341"><span class="linenos">341</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-344"><a href="#Snowflake.Generator-344"><span class="linenos">344</span></a> <span 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="Snowflake.Generator-345"><a href="#Snowflake.Generator-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-346"><a href="#Snowflake.Generator-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-347"><a href="#Snowflake.Generator-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-348"><a href="#Snowflake.Generator-348"><span class="linenos">348</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="Snowflake.Generator-349"><a href="#Snowflake.Generator-349"><span class="linenos">349</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&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;zone&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Snowflake.Generator-350"><a href="#Snowflake.Generator-350"><span class="linenos">350</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-351"><a href="#Snowflake.Generator-351"><span class="linenos">351</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 class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-352"><a href="#Snowflake.Generator-352"><span class="linenos">352</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="Snowflake.Generator-353"><a href="#Snowflake.Generator-353"><span class="linenos">353</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Snowflake.Generator-354"><a href="#Snowflake.Generator-354"><span class="linenos">354</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-355"><a href="#Snowflake.Generator-355"><span class="linenos">355</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="Snowflake.Generator-356"><a href="#Snowflake.Generator-356"><span class="linenos">356</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="Snowflake.Generator-357"><a href="#Snowflake.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-358"><a href="#Snowflake.Generator-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATE_PART&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-359"><a href="#Snowflake.Generator-359"><span class="linenos">359</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;IFF&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="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;BOOLAND_AGG&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">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;BOOLOR_AGG&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">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">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-363"><a href="#Snowflake.Generator-363"><span class="linenos">363</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-364"><a href="#Snowflake.Generator-364"><span class="linenos">364</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-365"><a href="#Snowflake.Generator-365"><span class="linenos">365</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-366"><a href="#Snowflake.Generator-366"><span class="linenos">366</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-367"><a href="#Snowflake.Generator-367"><span class="linenos">367</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-368"><a href="#Snowflake.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-369"><a href="#Snowflake.Generator-369"><span class="linenos">369</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-370"><a href="#Snowflake.Generator-370"><span class="linenos">370</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-371"><a href="#Snowflake.Generator-371"><span class="linenos">371</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-372"><a href="#Snowflake.Generator-372"><span class="linenos">372</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-373"><a href="#Snowflake.Generator-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-374"><a href="#Snowflake.Generator-374"><span class="linenos">374</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-375"><a href="#Snowflake.Generator-375"><span class="linenos">375</span></a> <span class="o">*</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()),</span>
-</span><span id="Snowflake.Generator-376"><a href="#Snowflake.Generator-376"><span class="linenos">376</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-377"><a href="#Snowflake.Generator-377"><span class="linenos">377</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-378"><a href="#Snowflake.Generator-378"><span class="linenos">378</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-379"><a href="#Snowflake.Generator-379"><span class="linenos">379</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-380"><a href="#Snowflake.Generator-380"><span class="linenos">380</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-381"><a href="#Snowflake.Generator-381"><span class="linenos">381</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-382"><a href="#Snowflake.Generator-382"><span class="linenos">382</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-383"><a href="#Snowflake.Generator-383"><span class="linenos">383</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-384"><a href="#Snowflake.Generator-384"><span class="linenos">384</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-385"><a href="#Snowflake.Generator-385"><span class="linenos">385</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-386"><a href="#Snowflake.Generator-386"><span class="linenos">386</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-387"><a href="#Snowflake.Generator-387"><span class="linenos">387</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-388"><a href="#Snowflake.Generator-388"><span class="linenos">388</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="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><span id="Snowflake.Generator-391"><a href="#Snowflake.Generator-391"><span class="linenos">391</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-392"><a href="#Snowflake.Generator-392"><span class="linenos">392</span></a> <span 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="Snowflake.Generator-393"><a href="#Snowflake.Generator-393"><span class="linenos">393</span></a> <span class="n">exp</span><span 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-394"><a href="#Snowflake.Generator-394"><span class="linenos">394</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Generator-395"><a href="#Snowflake.Generator-395"><span class="linenos">395</span></a>
-</span><span id="Snowflake.Generator-396"><a href="#Snowflake.Generator-396"><span class="linenos">396</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-397"><a href="#Snowflake.Generator-397"><span class="linenos">397</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-398"><a href="#Snowflake.Generator-398"><span class="linenos">398</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-399"><a href="#Snowflake.Generator-399"><span class="linenos">399</span></a> <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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-402"><a href="#Snowflake.Generator-402"><span class="linenos">402</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-403"><a href="#Snowflake.Generator-403"><span class="linenos">403</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-404"><a href="#Snowflake.Generator-404"><span class="linenos">404</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-405"><a href="#Snowflake.Generator-405"><span class="linenos">405</span></a> <span class="p">}</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">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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="Snowflake.Generator-408"><a href="#Snowflake.Generator-408"><span class="linenos">408</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
-</span><span id="Snowflake.Generator-409"><a href="#Snowflake.Generator-409"><span class="linenos">409</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
-</span><span id="Snowflake.Generator-410"><a href="#Snowflake.Generator-410"><span class="linenos">410</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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="Snowflake.Generator-411"><a href="#Snowflake.Generator-411"><span class="linenos">411</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&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">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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="Snowflake.Generator-413"><a href="#Snowflake.Generator-413"><span class="linenos">413</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator-341"><a href="#Snowflake.Generator-341"><span class="linenos">341</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="Snowflake.Generator-342"><a href="#Snowflake.Generator-342"><span class="linenos">342</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Snowflake.Generator-343"><a href="#Snowflake.Generator-343"><span class="linenos">343</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake.Generator-344"><a href="#Snowflake.Generator-344"><span class="linenos">344</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Snowflake.Generator-345"><a href="#Snowflake.Generator-345"><span class="linenos">345</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake.Generator-346"><a href="#Snowflake.Generator-346"><span class="linenos">346</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Snowflake.Generator-347"><a href="#Snowflake.Generator-347"><span class="linenos">347</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-350"><a href="#Snowflake.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">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-351"><a href="#Snowflake.Generator-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-352"><a href="#Snowflake.Generator-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-353"><a href="#Snowflake.Generator-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_TO_STRING&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-354"><a href="#Snowflake.Generator-354"><span class="linenos">354</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="Snowflake.Generator-355"><a href="#Snowflake.Generator-355"><span class="linenos">355</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&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;zone&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Snowflake.Generator-356"><a href="#Snowflake.Generator-356"><span class="linenos">356</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Generator-357"><a href="#Snowflake.Generator-357"><span class="linenos">357</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 class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-358"><a href="#Snowflake.Generator-358"><span class="linenos">358</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="Snowflake.Generator-359"><a href="#Snowflake.Generator-359"><span class="linenos">359</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Snowflake.Generator-360"><a href="#Snowflake.Generator-360"><span class="linenos">360</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Generator-361"><a href="#Snowflake.Generator-361"><span class="linenos">361</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="Snowflake.Generator-362"><a href="#Snowflake.Generator-362"><span class="linenos">362</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="Snowflake.Generator-363"><a href="#Snowflake.Generator-363"><span class="linenos">363</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="Snowflake.Generator-364"><a href="#Snowflake.Generator-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATE_PART&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-365"><a href="#Snowflake.Generator-365"><span class="linenos">365</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;IFF&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-366"><a href="#Snowflake.Generator-366"><span class="linenos">366</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;BOOLAND_AGG&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-367"><a href="#Snowflake.Generator-367"><span class="linenos">367</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;BOOLOR_AGG&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-368"><a href="#Snowflake.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">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-369"><a href="#Snowflake.Generator-369"><span class="linenos">369</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-370"><a href="#Snowflake.Generator-370"><span class="linenos">370</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-371"><a href="#Snowflake.Generator-371"><span class="linenos">371</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-372"><a href="#Snowflake.Generator-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="n">_regexpilike_sql</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">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-374"><a href="#Snowflake.Generator-374"><span class="linenos">374</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-375"><a href="#Snowflake.Generator-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-376"><a href="#Snowflake.Generator-376"><span class="linenos">376</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-377"><a href="#Snowflake.Generator-377"><span class="linenos">377</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-378"><a href="#Snowflake.Generator-378"><span class="linenos">378</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Generator-379"><a href="#Snowflake.Generator-379"><span class="linenos">379</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-380"><a href="#Snowflake.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-381"><a href="#Snowflake.Generator-381"><span class="linenos">381</span></a> <span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-382"><a href="#Snowflake.Generator-382"><span class="linenos">382</span></a> <span class="o">*</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()),</span>
+</span><span id="Snowflake.Generator-383"><a href="#Snowflake.Generator-383"><span class="linenos">383</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Generator-384"><a href="#Snowflake.Generator-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Stuff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;INSERT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-385"><a href="#Snowflake.Generator-385"><span class="linenos">385</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-386"><a href="#Snowflake.Generator-386"><span class="linenos">386</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-387"><a href="#Snowflake.Generator-387"><span class="linenos">387</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-388"><a href="#Snowflake.Generator-388"><span class="linenos">388</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-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="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-391"><a href="#Snowflake.Generator-391"><span class="linenos">391</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-392"><a href="#Snowflake.Generator-392"><span class="linenos">392</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-393"><a href="#Snowflake.Generator-393"><span class="linenos">393</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-394"><a href="#Snowflake.Generator-394"><span class="linenos">394</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-395"><a href="#Snowflake.Generator-395"><span class="linenos">395</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-396"><a href="#Snowflake.Generator-396"><span class="linenos">396</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="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><span id="Snowflake.Generator-399"><a href="#Snowflake.Generator-399"><span class="linenos">399</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-400"><a href="#Snowflake.Generator-400"><span class="linenos">400</span></a> <span 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="Snowflake.Generator-401"><a href="#Snowflake.Generator-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-402"><a href="#Snowflake.Generator-402"><span class="linenos">402</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Generator-403"><a href="#Snowflake.Generator-403"><span class="linenos">403</span></a>
+</span><span id="Snowflake.Generator-404"><a href="#Snowflake.Generator-404"><span class="linenos">404</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-405"><a href="#Snowflake.Generator-405"><span class="linenos">405</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-406"><a href="#Snowflake.Generator-406"><span class="linenos">406</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-407"><a href="#Snowflake.Generator-407"><span class="linenos">407</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Generator-408"><a href="#Snowflake.Generator-408"><span class="linenos">408</span></a>
+</span><span id="Snowflake.Generator-409"><a href="#Snowflake.Generator-409"><span class="linenos">409</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-410"><a href="#Snowflake.Generator-410"><span class="linenos">410</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-411"><a href="#Snowflake.Generator-411"><span class="linenos">411</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-412"><a href="#Snowflake.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-413"><a href="#Snowflake.Generator-413"><span class="linenos">413</span></a> <span class="p">}</span>
</span><span id="Snowflake.Generator-414"><a href="#Snowflake.Generator-414"><span class="linenos">414</span></a>
-</span><span id="Snowflake.Generator-415"><a href="#Snowflake.Generator-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-416"><a href="#Snowflake.Generator-416"><span class="linenos">416</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-417"><a href="#Snowflake.Generator-417"><span class="linenos">417</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-418"><a href="#Snowflake.Generator-418"><span class="linenos">418</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-419"><a href="#Snowflake.Generator-419"><span class="linenos">419</span></a> <span class="n">position</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-420"><a href="#Snowflake.Generator-420"><span class="linenos">420</span></a> <span class="n">occurrence</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-421"><a href="#Snowflake.Generator-421"><span class="linenos">421</span></a> <span class="n">parameters</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-422"><a href="#Snowflake.Generator-422"><span class="linenos">422</span></a> <span class="n">group</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-423"><a href="#Snowflake.Generator-423"><span class="linenos">423</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator-424"><a href="#Snowflake.Generator-424"><span class="linenos">424</span></a>
-</span><span id="Snowflake.Generator-425"><a href="#Snowflake.Generator-425"><span class="linenos">425</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-426"><a href="#Snowflake.Generator-426"><span class="linenos">426</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-427"><a href="#Snowflake.Generator-427"><span class="linenos">427</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-428"><a href="#Snowflake.Generator-428"><span class="linenos">428</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-429"><a href="#Snowflake.Generator-429"><span class="linenos">429</span></a>
-</span><span id="Snowflake.Generator-430"><a href="#Snowflake.Generator-430"><span class="linenos">430</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-431"><a href="#Snowflake.Generator-431"><span class="linenos">431</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-432"><a href="#Snowflake.Generator-432"><span class="linenos">432</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-433"><a href="#Snowflake.Generator-433"><span class="linenos">433</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-434"><a href="#Snowflake.Generator-434"><span class="linenos">434</span></a>
-</span><span id="Snowflake.Generator-435"><a href="#Snowflake.Generator-435"><span class="linenos">435</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-436"><a href="#Snowflake.Generator-436"><span class="linenos">436</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="Snowflake.Generator-437"><a href="#Snowflake.Generator-437"><span class="linenos">437</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-438"><a href="#Snowflake.Generator-438"><span class="linenos">438</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-439"><a href="#Snowflake.Generator-439"><span class="linenos">439</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-440"><a href="#Snowflake.Generator-440"><span class="linenos">440</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-441"><a href="#Snowflake.Generator-441"><span class="linenos">441</span></a>
-</span><span id="Snowflake.Generator-442"><a href="#Snowflake.Generator-442"><span class="linenos">442</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-443"><a href="#Snowflake.Generator-443"><span class="linenos">443</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-444"><a href="#Snowflake.Generator-444"><span class="linenos">444</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-445"><a href="#Snowflake.Generator-445"><span class="linenos">445</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-446"><a href="#Snowflake.Generator-446"><span class="linenos">446</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-447"><a href="#Snowflake.Generator-447"><span class="linenos">447</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-448"><a href="#Snowflake.Generator-448"><span class="linenos">448</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-449"><a href="#Snowflake.Generator-449"><span class="linenos">449</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-415"><a href="#Snowflake.Generator-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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="Snowflake.Generator-416"><a href="#Snowflake.Generator-416"><span class="linenos">416</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
+</span><span id="Snowflake.Generator-417"><a href="#Snowflake.Generator-417"><span class="linenos">417</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
+</span><span id="Snowflake.Generator-418"><a href="#Snowflake.Generator-418"><span class="linenos">418</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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="Snowflake.Generator-419"><a href="#Snowflake.Generator-419"><span class="linenos">419</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
+</span><span id="Snowflake.Generator-420"><a href="#Snowflake.Generator-420"><span class="linenos">420</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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="Snowflake.Generator-421"><a href="#Snowflake.Generator-421"><span class="linenos">421</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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="Snowflake.Generator-422"><a href="#Snowflake.Generator-422"><span class="linenos">422</span></a>
+</span><span id="Snowflake.Generator-423"><a href="#Snowflake.Generator-423"><span class="linenos">423</span></a> <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="Snowflake.Generator-424"><a href="#Snowflake.Generator-424"><span class="linenos">424</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-425"><a href="#Snowflake.Generator-425"><span class="linenos">425</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-426"><a href="#Snowflake.Generator-426"><span class="linenos">426</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-427"><a href="#Snowflake.Generator-427"><span class="linenos">427</span></a> <span class="n">position</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-428"><a href="#Snowflake.Generator-428"><span class="linenos">428</span></a> <span class="n">occurrence</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-429"><a href="#Snowflake.Generator-429"><span class="linenos">429</span></a> <span class="n">parameters</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-430"><a href="#Snowflake.Generator-430"><span class="linenos">430</span></a> <span class="n">group</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-431"><a href="#Snowflake.Generator-431"><span class="linenos">431</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator-432"><a href="#Snowflake.Generator-432"><span class="linenos">432</span></a>
+</span><span id="Snowflake.Generator-433"><a href="#Snowflake.Generator-433"><span class="linenos">433</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-434"><a href="#Snowflake.Generator-434"><span class="linenos">434</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-435"><a href="#Snowflake.Generator-435"><span class="linenos">435</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-436"><a href="#Snowflake.Generator-436"><span class="linenos">436</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-437"><a href="#Snowflake.Generator-437"><span class="linenos">437</span></a>
+</span><span id="Snowflake.Generator-438"><a href="#Snowflake.Generator-438"><span class="linenos">438</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-439"><a href="#Snowflake.Generator-439"><span class="linenos">439</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-440"><a href="#Snowflake.Generator-440"><span class="linenos">440</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-441"><a href="#Snowflake.Generator-441"><span class="linenos">441</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-442"><a href="#Snowflake.Generator-442"><span class="linenos">442</span></a>
+</span><span id="Snowflake.Generator-443"><a href="#Snowflake.Generator-443"><span class="linenos">443</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-444"><a href="#Snowflake.Generator-444"><span class="linenos">444</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="Snowflake.Generator-445"><a href="#Snowflake.Generator-445"><span class="linenos">445</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-446"><a href="#Snowflake.Generator-446"><span class="linenos">446</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-447"><a href="#Snowflake.Generator-447"><span class="linenos">447</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-448"><a href="#Snowflake.Generator-448"><span class="linenos">448</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-449"><a href="#Snowflake.Generator-449"><span class="linenos">449</span></a>
+</span><span id="Snowflake.Generator-450"><a href="#Snowflake.Generator-450"><span class="linenos">450</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-451"><a href="#Snowflake.Generator-451"><span class="linenos">451</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-452"><a href="#Snowflake.Generator-452"><span class="linenos">452</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-453"><a href="#Snowflake.Generator-453"><span class="linenos">453</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-454"><a href="#Snowflake.Generator-454"><span class="linenos">454</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-455"><a href="#Snowflake.Generator-455"><span class="linenos">455</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-456"><a href="#Snowflake.Generator-456"><span class="linenos">456</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-457"><a href="#Snowflake.Generator-457"><span class="linenos">457</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>
@@ -2119,7 +2125,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Snowflake.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function _regexpilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function <a href="#Snowflake.Generator">Snowflake.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function ts_or_ds_to_date_sql.&lt;locals&gt;._ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2157,7 +2163,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Snowflake.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -2177,23 +2183,23 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.regexpextract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.regexpextract_sql-407"><a href="#Snowflake.Generator.regexpextract_sql-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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="Snowflake.Generator.regexpextract_sql-408"><a href="#Snowflake.Generator.regexpextract_sql-408"><span class="linenos">408</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-409"><a href="#Snowflake.Generator.regexpextract_sql-409"><span class="linenos">409</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-410"><a href="#Snowflake.Generator.regexpextract_sql-410"><span class="linenos">410</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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="Snowflake.Generator.regexpextract_sql-411"><a href="#Snowflake.Generator.regexpextract_sql-411"><span class="linenos">411</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-412"><a href="#Snowflake.Generator.regexpextract_sql-412"><span class="linenos">412</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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="Snowflake.Generator.regexpextract_sql-413"><a href="#Snowflake.Generator.regexpextract_sql-413"><span class="linenos">413</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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="Snowflake.Generator.regexpextract_sql-414"><a href="#Snowflake.Generator.regexpextract_sql-414"><span class="linenos">414</span></a>
-</span><span id="Snowflake.Generator.regexpextract_sql-415"><a href="#Snowflake.Generator.regexpextract_sql-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-416"><a href="#Snowflake.Generator.regexpextract_sql-416"><span class="linenos">416</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-417"><a href="#Snowflake.Generator.regexpextract_sql-417"><span class="linenos">417</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-418"><a href="#Snowflake.Generator.regexpextract_sql-418"><span class="linenos">418</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-419"><a href="#Snowflake.Generator.regexpextract_sql-419"><span class="linenos">419</span></a> <span class="n">position</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-420"><a href="#Snowflake.Generator.regexpextract_sql-420"><span class="linenos">420</span></a> <span class="n">occurrence</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-421"><a href="#Snowflake.Generator.regexpextract_sql-421"><span class="linenos">421</span></a> <span class="n">parameters</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-422"><a href="#Snowflake.Generator.regexpextract_sql-422"><span class="linenos">422</span></a> <span class="n">group</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.regexpextract_sql-423"><a href="#Snowflake.Generator.regexpextract_sql-423"><span class="linenos">423</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.regexpextract_sql-415"><a href="#Snowflake.Generator.regexpextract_sql-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">regexpextract_sql</span><span class="p">(</span><span class="bp">self</span><span 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="Snowflake.Generator.regexpextract_sql-416"><a href="#Snowflake.Generator.regexpextract_sql-416"><span class="linenos">416</span></a> <span class="c1"># Other dialects don&#39;t support all of the following parameters, so we need to</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-417"><a href="#Snowflake.Generator.regexpextract_sql-417"><span class="linenos">417</span></a> <span class="c1"># generate default values as necessary to ensure the transpilation is correct</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-418"><a href="#Snowflake.Generator.regexpextract_sql-418"><span class="linenos">418</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">expression</span><span class="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="Snowflake.Generator.regexpextract_sql-419"><a href="#Snowflake.Generator.regexpextract_sql-419"><span class="linenos">419</span></a> <span class="n">parameters</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;parameters&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">group</span> <span class="ow">and</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;c&quot;</span><span class="p">))</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-420"><a href="#Snowflake.Generator.regexpextract_sql-420"><span class="linenos">420</span></a> <span class="n">occurrence</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;occurrence&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">parameters</span> <span class="ow">and</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="Snowflake.Generator.regexpextract_sql-421"><a href="#Snowflake.Generator.regexpextract_sql-421"><span class="linenos">421</span></a> <span class="n">position</span> <span class="o">=</span> <span class="n">expression</span><span class="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 class="ow">or</span> <span class="p">(</span><span class="n">occurrence</span> <span class="ow">and</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="Snowflake.Generator.regexpextract_sql-422"><a href="#Snowflake.Generator.regexpextract_sql-422"><span class="linenos">422</span></a>
+</span><span id="Snowflake.Generator.regexpextract_sql-423"><a href="#Snowflake.Generator.regexpextract_sql-423"><span class="linenos">423</span></a> <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="Snowflake.Generator.regexpextract_sql-424"><a href="#Snowflake.Generator.regexpextract_sql-424"><span class="linenos">424</span></a> <span class="s2">&quot;REGEXP_SUBSTR&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-425"><a href="#Snowflake.Generator.regexpextract_sql-425"><span class="linenos">425</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-426"><a href="#Snowflake.Generator.regexpextract_sql-426"><span class="linenos">426</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-427"><a href="#Snowflake.Generator.regexpextract_sql-427"><span class="linenos">427</span></a> <span class="n">position</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-428"><a href="#Snowflake.Generator.regexpextract_sql-428"><span class="linenos">428</span></a> <span class="n">occurrence</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-429"><a href="#Snowflake.Generator.regexpextract_sql-429"><span class="linenos">429</span></a> <span class="n">parameters</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-430"><a href="#Snowflake.Generator.regexpextract_sql-430"><span class="linenos">430</span></a> <span class="n">group</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.regexpextract_sql-431"><a href="#Snowflake.Generator.regexpextract_sql-431"><span class="linenos">431</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2211,10 +2217,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-425"><a href="#Snowflake.Generator.except_op-425"><span class="linenos">425</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-426"><a href="#Snowflake.Generator.except_op-426"><span class="linenos">426</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-427"><a href="#Snowflake.Generator.except_op-427"><span class="linenos">427</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-428"><a href="#Snowflake.Generator.except_op-428"><span class="linenos">428</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-433"><a href="#Snowflake.Generator.except_op-433"><span class="linenos">433</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-434"><a href="#Snowflake.Generator.except_op-434"><span class="linenos">434</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-435"><a href="#Snowflake.Generator.except_op-435"><span class="linenos">435</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-436"><a href="#Snowflake.Generator.except_op-436"><span class="linenos">436</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>
@@ -2232,10 +2238,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-430"><a href="#Snowflake.Generator.intersect_op-430"><span class="linenos">430</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-431"><a href="#Snowflake.Generator.intersect_op-431"><span class="linenos">431</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-432"><a href="#Snowflake.Generator.intersect_op-432"><span class="linenos">432</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-433"><a href="#Snowflake.Generator.intersect_op-433"><span class="linenos">433</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-438"><a href="#Snowflake.Generator.intersect_op-438"><span class="linenos">438</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-439"><a href="#Snowflake.Generator.intersect_op-439"><span class="linenos">439</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-440"><a href="#Snowflake.Generator.intersect_op-440"><span class="linenos">440</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-441"><a href="#Snowflake.Generator.intersect_op-441"><span class="linenos">441</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>
@@ -2253,12 +2259,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.describe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.describe_sql-435"><a href="#Snowflake.Generator.describe_sql-435"><span class="linenos">435</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-436"><a href="#Snowflake.Generator.describe_sql-436"><span class="linenos">436</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="Snowflake.Generator.describe_sql-437"><a href="#Snowflake.Generator.describe_sql-437"><span class="linenos">437</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-438"><a href="#Snowflake.Generator.describe_sql-438"><span class="linenos">438</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-439"><a href="#Snowflake.Generator.describe_sql-439"><span class="linenos">439</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-440"><a href="#Snowflake.Generator.describe_sql-440"><span class="linenos">440</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-443"><a href="#Snowflake.Generator.describe_sql-443"><span class="linenos">443</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-444"><a href="#Snowflake.Generator.describe_sql-444"><span class="linenos">444</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="Snowflake.Generator.describe_sql-445"><a href="#Snowflake.Generator.describe_sql-445"><span class="linenos">445</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-446"><a href="#Snowflake.Generator.describe_sql-446"><span class="linenos">446</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-447"><a href="#Snowflake.Generator.describe_sql-447"><span class="linenos">447</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-448"><a href="#Snowflake.Generator.describe_sql-448"><span class="linenos">448</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>
@@ -2276,14 +2282,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-442"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-442"><span class="linenos">442</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-443"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-443"><span class="linenos">443</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-444"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-444"><span class="linenos">444</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-445"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-445"><span class="linenos">445</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-446"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-446"><span class="linenos">446</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-447"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-447"><span class="linenos">447</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-448"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-448"><span class="linenos">448</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-449"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-449"><span class="linenos">449</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-450"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-450"><span class="linenos">450</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-451"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-451"><span class="linenos">451</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-452"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-452"><span class="linenos">452</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-453"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-453"><span class="linenos">453</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-454"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-454"><span class="linenos">454</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-455"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-455"><span class="linenos">455</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-456"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-456"><span class="linenos">456</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-457"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-457"><span class="linenos">457</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>
@@ -2352,26 +2358,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.can_identify-253"><a href="#Snowflake.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Snowflake.Generator.can_identify-254"><a href="#Snowflake.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Snowflake.Generator.can_identify-255"><a href="#Snowflake.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Snowflake.Generator.can_identify-256"><a href="#Snowflake.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Snowflake.Generator.can_identify-257"><a href="#Snowflake.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Snowflake.Generator.can_identify-258"><a href="#Snowflake.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Snowflake.Generator.can_identify-259"><a href="#Snowflake.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Snowflake.Generator.can_identify-260"><a href="#Snowflake.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Snowflake.Generator.can_identify-261"><a href="#Snowflake.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Snowflake.Generator.can_identify-262"><a href="#Snowflake.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Snowflake.Generator.can_identify-263"><a href="#Snowflake.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Snowflake.Generator.can_identify-264"><a href="#Snowflake.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Snowflake.Generator.can_identify-265"><a href="#Snowflake.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake.Generator.can_identify-266"><a href="#Snowflake.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Snowflake.Generator.can_identify-267"><a href="#Snowflake.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Snowflake.Generator.can_identify-268"><a href="#Snowflake.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Snowflake.Generator.can_identify-269"><a href="#Snowflake.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Snowflake.Generator.can_identify-270"><a href="#Snowflake.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.can_identify-256"><a href="#Snowflake.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Snowflake.Generator.can_identify-257"><a href="#Snowflake.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Snowflake.Generator.can_identify-258"><a href="#Snowflake.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Snowflake.Generator.can_identify-259"><a href="#Snowflake.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Snowflake.Generator.can_identify-260"><a href="#Snowflake.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Snowflake.Generator.can_identify-261"><a href="#Snowflake.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Snowflake.Generator.can_identify-262"><a href="#Snowflake.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Snowflake.Generator.can_identify-263"><a href="#Snowflake.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Snowflake.Generator.can_identify-264"><a href="#Snowflake.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Snowflake.Generator.can_identify-265"><a href="#Snowflake.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Snowflake.Generator.can_identify-266"><a href="#Snowflake.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Snowflake.Generator.can_identify-267"><a href="#Snowflake.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Snowflake.Generator.can_identify-268"><a href="#Snowflake.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake.Generator.can_identify-269"><a href="#Snowflake.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Snowflake.Generator.can_identify-270"><a href="#Snowflake.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Snowflake.Generator.can_identify-271"><a href="#Snowflake.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Snowflake.Generator.can_identify-272"><a href="#Snowflake.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Snowflake.Generator.can_identify-272"><a href="#Snowflake.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Snowflake.Generator.can_identify-273"><a href="#Snowflake.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Snowflake.Generator.can_identify-274"><a href="#Snowflake.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Snowflake.Generator.can_identify-275"><a href="#Snowflake.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2442,26 +2448,14 @@ Default: True</li>
</div>
- <div id="Snowflake.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Snowflake.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Snowflake.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Snowflake.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Snowflake.Tokenizer">sqlglot.dialects.snowflake.Snowflake.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Snowflake.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Snowflake.Generator.TOKENIZER_CLASS"></a>
@@ -2562,7 +2556,10 @@ Default: True</li>
<dd id="Snowflake.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Snowflake.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Snowflake.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Snowflake.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Snowflake.Generator.NVL2_SUPPORTED" class="variable"><a href="../generator.html#Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Snowflake.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Snowflake.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Snowflake.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Snowflake.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
<dd id="Snowflake.Generator.STRUCT_DELIMITER" class="variable"><a href="../generator.html#Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a></dd>
@@ -2606,6 +2603,7 @@ Default: True</li>
<dd id="Snowflake.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Snowflake.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Snowflake.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Snowflake.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Snowflake.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Snowflake.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Snowflake.Generator.notnullcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.notnullcolumnconstraint_sql">notnullcolumnconstraint_sql</a></dd>
@@ -2622,7 +2620,7 @@ Default: True</li>
<dd id="Snowflake.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Snowflake.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Snowflake.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Snowflake.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Snowflake.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Snowflake.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Snowflake.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Snowflake.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -2665,6 +2663,7 @@ Default: True</li>
<dd id="Snowflake.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Snowflake.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Snowflake.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Snowflake.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Snowflake.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Snowflake.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Snowflake.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -2673,6 +2672,8 @@ Default: True</li>
<dd id="Snowflake.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Snowflake.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Snowflake.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Snowflake.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Snowflake.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Snowflake.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Snowflake.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Snowflake.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2832,6 +2833,8 @@ Default: True</li>
<dd id="Snowflake.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Snowflake.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Snowflake.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Snowflake.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Snowflake.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/spark.html b/docs/sqlglot/dialects/spark.html
index 4ac7be3..759b08a 100644
--- a/docs/sqlglot/dialects/spark.html
+++ b/docs/sqlglot/dialects/spark.html
@@ -40,6 +40,12 @@
<a class="variable" href="#Spark.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
+ <a class="variable" href="#Spark.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Spark.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Spark.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -64,6 +70,9 @@
<a class="variable" href="#Spark.Generator.TRANSFORMS">TRANSFORMS</a>
</li>
<li>
+ <a class="function" href="#Spark.Generator.anyvalue_sql">anyvalue_sql</a>
+ </li>
+ <li>
<a class="function" href="#Spark.Generator.datediff_sql">datediff_sql</a>
</li>
<li>
@@ -91,10 +100,7 @@
<a class="variable" href="#Spark.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Spark.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Spark.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Spark.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Spark.Generator.BIT_START">BIT_START</a>
@@ -234,33 +240,46 @@
</span><span id="L-38"><a href="#L-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="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">FUNCTIONS</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">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><span id="L-41"><a href="#L-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="L-42"><a href="#L-42"><span class="linenos">42</span></a> <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="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-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">TYPE_MAPPING</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="o">**</span><span class="n">Spark2</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-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(15, 4)&quot;</span><span class="p">,</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(6, 4)&quot;</span><span class="p">,</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">:</span> <span class="s2">&quot;STRING&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><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a> <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="p">,</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="p">}</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> <span class="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-57"><a href="#L-57"><span class="linenos">57</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">Group</span><span class="p">)</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a>
-</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a> <span class="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-60"><a href="#L-60"><span class="linenos">60</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-61"><a href="#L-61"><span class="linenos">61</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-62"><a href="#L-62"><span class="linenos">62</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-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="p">:</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">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-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">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><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">(</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</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">ignore_nulls</span><span class="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-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="p">),</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</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><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="n">FUNCTION_PARSERS</span> <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">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">48</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;ANY_VALUE&quot;</span><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 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-51"><a href="#L-51"><span class="linenos">51</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a> <span class="o">**</span><span class="n">Spark2</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-53"><a href="#L-53"><span class="linenos">53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(15, 4)&quot;</span><span class="p">,</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(6, 4)&quot;</span><span class="p">,</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> <span class="p">}</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a> <span class="n">TRANSFORMS</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">Spark2</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-60"><a href="#L-60"><span class="linenos">60</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-62"><a href="#L-62"><span class="linenos">62</span></a> <span class="s2">&quot;DATEADD&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="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-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="p">}</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos">66</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-67"><a href="#L-67"><span class="linenos">67</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">Group</span><span class="p">)</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a>
+</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos">70</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-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">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-73"><a href="#L-73"><span class="linenos">73</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-74"><a href="#L-74"><span class="linenos">74</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-75"><a href="#L-75"><span class="linenos">75</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-76"><a href="#L-76"><span class="linenos">76</span></a>
+</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="bp">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-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">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>
@@ -280,33 +299,46 @@
</span><span id="Spark-39"><a href="#Spark-39"><span class="linenos">39</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-40"><a href="#Spark-40"><span class="linenos">40</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark-41"><a href="#Spark-41"><span class="linenos">41</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><span id="Spark-42"><a href="#Spark-42"><span class="linenos">42</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-43"><a href="#Spark-43"><span class="linenos">43</span></a> <span class="p">}</span>
-</span><span id="Spark-44"><a href="#Spark-44"><span class="linenos">44</span></a>
-</span><span id="Spark-45"><a href="#Spark-45"><span class="linenos">45</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-46"><a href="#Spark-46"><span class="linenos">46</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-47"><a href="#Spark-47"><span class="linenos">47</span></a> <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">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Spark-48"><a href="#Spark-48"><span class="linenos">48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(15, 4)&quot;</span><span class="p">,</span>
-</span><span id="Spark-49"><a href="#Spark-49"><span class="linenos">49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(6, 4)&quot;</span><span class="p">,</span>
-</span><span id="Spark-50"><a href="#Spark-50"><span class="linenos">50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="Spark-51"><a href="#Spark-51"><span class="linenos">51</span></a> <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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-54"><a href="#Spark-54"><span class="linenos">54</span></a> <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="p">,</span>
-</span><span id="Spark-55"><a href="#Spark-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
-</span><span id="Spark-56"><a href="#Spark-56"><span class="linenos">56</span></a> <span class="p">}</span>
-</span><span id="Spark-57"><a href="#Spark-57"><span class="linenos">57</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-58"><a href="#Spark-58"><span class="linenos">58</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">Group</span><span class="p">)</span>
-</span><span id="Spark-59"><a href="#Spark-59"><span class="linenos">59</span></a>
-</span><span id="Spark-60"><a href="#Spark-60"><span class="linenos">60</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-61"><a href="#Spark-61"><span class="linenos">61</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-62"><a href="#Spark-62"><span class="linenos">62</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-63"><a href="#Spark-63"><span class="linenos">63</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-64"><a href="#Spark-64"><span class="linenos">64</span></a>
-</span><span id="Spark-65"><a href="#Spark-65"><span class="linenos">65</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Spark-66"><a href="#Spark-66"><span class="linenos">66</span></a> <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-67"><a href="#Spark-67"><span class="linenos">67</span></a>
-</span><span id="Spark-68"><a href="#Spark-68"><span class="linenos">68</span></a> <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><span id="Spark-42"><a href="#Spark-42"><span class="linenos">42</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">(</span>
+</span><span id="Spark-43"><a href="#Spark-43"><span class="linenos">43</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">ignore_nulls</span><span class="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-44"><a href="#Spark-44"><span class="linenos">44</span></a> <span class="p">),</span>
+</span><span id="Spark-45"><a href="#Spark-45"><span class="linenos">45</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-46"><a href="#Spark-46"><span class="linenos">46</span></a> <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="n">FUNCTION_PARSERS</span> <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">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Spark-49"><a href="#Spark-49"><span class="linenos">49</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;ANY_VALUE&quot;</span><span class="p">)</span>
+</span><span id="Spark-50"><a href="#Spark-50"><span class="linenos">50</span></a>
+</span><span id="Spark-51"><a href="#Spark-51"><span class="linenos">51</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-52"><a href="#Spark-52"><span class="linenos">52</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark-53"><a href="#Spark-53"><span class="linenos">53</span></a> <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">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Spark-54"><a href="#Spark-54"><span class="linenos">54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(15, 4)&quot;</span><span class="p">,</span>
+</span><span id="Spark-55"><a href="#Spark-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(6, 4)&quot;</span><span class="p">,</span>
+</span><span id="Spark-56"><a href="#Spark-56"><span class="linenos">56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="Spark-57"><a href="#Spark-57"><span class="linenos">57</span></a> <span class="p">}</span>
+</span><span id="Spark-58"><a href="#Spark-58"><span class="linenos">58</span></a>
+</span><span id="Spark-59"><a href="#Spark-59"><span class="linenos">59</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark-60"><a href="#Spark-60"><span class="linenos">60</span></a> <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="p">,</span>
+</span><span id="Spark-61"><a href="#Spark-61"><span class="linenos">61</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
+</span><span id="Spark-62"><a href="#Spark-62"><span class="linenos">62</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-63"><a href="#Spark-63"><span class="linenos">63</span></a> <span class="s2">&quot;DATEADD&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="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="Spark-64"><a href="#Spark-64"><span class="linenos">64</span></a> <span class="p">),</span>
+</span><span id="Spark-65"><a href="#Spark-65"><span class="linenos">65</span></a> <span class="p">}</span>
+</span><span id="Spark-66"><a href="#Spark-66"><span class="linenos">66</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span>
+</span><span id="Spark-67"><a href="#Spark-67"><span class="linenos">67</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-68"><a href="#Spark-68"><span class="linenos">68</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">Group</span><span class="p">)</span>
+</span><span id="Spark-69"><a href="#Spark-69"><span class="linenos">69</span></a>
+</span><span id="Spark-70"><a href="#Spark-70"><span class="linenos">70</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark-71"><a href="#Spark-71"><span class="linenos">71</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="Spark-72"><a href="#Spark-72"><span class="linenos">72</span></a>
+</span><span id="Spark-73"><a href="#Spark-73"><span class="linenos">73</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-74"><a href="#Spark-74"><span class="linenos">74</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-75"><a href="#Spark-75"><span class="linenos">75</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-76"><a href="#Spark-76"><span class="linenos">76</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-77"><a href="#Spark-77"><span class="linenos">77</span></a>
+</span><span id="Spark-78"><a href="#Spark-78"><span class="linenos">78</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Spark-79"><a href="#Spark-79"><span class="linenos">79</span></a> <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-80"><a href="#Spark-80"><span class="linenos">80</span></a>
+</span><span id="Spark-81"><a href="#Spark-81"><span class="linenos">81</span></a> <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>
@@ -540,6 +572,7 @@
<div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
<dd id="Spark.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Spark.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Spark.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Spark.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Spark.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Spark.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -578,8 +611,14 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Parser-39"><a href="#Spark.Parser-39"><span class="linenos">39</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-40"><a href="#Spark.Parser-40"><span class="linenos">40</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark.Parser-41"><a href="#Spark.Parser-41"><span class="linenos">41</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><span id="Spark.Parser-42"><a href="#Spark.Parser-42"><span class="linenos">42</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-43"><a href="#Spark.Parser-43"><span class="linenos">43</span></a> <span class="p">}</span>
+</span><span id="Spark.Parser-42"><a href="#Spark.Parser-42"><span class="linenos">42</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">(</span>
+</span><span id="Spark.Parser-43"><a href="#Spark.Parser-43"><span class="linenos">43</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">ignore_nulls</span><span class="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-44"><a href="#Spark.Parser-44"><span class="linenos">44</span></a> <span class="p">),</span>
+</span><span id="Spark.Parser-45"><a href="#Spark.Parser-45"><span class="linenos">45</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-46"><a href="#Spark.Parser-46"><span class="linenos">46</span></a> <span class="p">}</span>
+</span><span id="Spark.Parser-47"><a href="#Spark.Parser-47"><span class="linenos">47</span></a>
+</span><span id="Spark.Parser-48"><a href="#Spark.Parser-48"><span class="linenos">48</span></a> <span class="n">FUNCTION_PARSERS</span> <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">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Spark.Parser-49"><a href="#Spark.Parser-49"><span class="linenos">49</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;ANY_VALUE&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -604,7 +643,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Spark.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Spark.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;AGGREGATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;BOOLEAN&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DOUBLE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;FLOAT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;MAP_FROM_ARRAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHIFTLEFT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;SHIFTRIGHT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;STRING&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;TO_UNIX_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Spark.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;function <a href="#Spark.Parser">Spark.Parser</a>.&lt;lambda&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_datediff&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;AGGREGATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;BOOLEAN&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DOUBLE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;FLOAT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;MAP_FROM_ARRAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHIFTLEFT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;SHIFTRIGHT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;STRING&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;TO_UNIX_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;TRUNC&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;}</span>
</div>
@@ -613,6 +652,31 @@ Default: 3</li>
</div>
+ <div id="Spark.Parser.FUNCTION_PARSERS" class="classattr">
+ <div class="attr variable">
+ <span class="name">FUNCTION_PARSERS</span> =
+<input id="Spark.Parser.FUNCTION_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Spark.Parser.FUNCTION_PARSERS-view-value"></label><span class="default_value">{&#39;CAST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONCAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONVERT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EXTRACT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_OBJECT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MATCH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;OPENJSON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;POSITION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SAFE_CAST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STRING_AGG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SUBSTRING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRIM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRY_CAST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRY_CONVERT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;BROADCAST&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;BROADCASTJOIN&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;MAPJOIN&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;MERGE&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;SHUFFLEMERGE&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;MERGEJOIN&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;SHUFFLE_HASH&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;, &#39;SHUFFLE_REPLICATE_NL&#39;: &lt;function Spark2.Parser.&lt;lambda&gt;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Spark.Parser.FUNCTION_PARSERS"></a>
+
+
+
+ </div>
+ <div id="Spark.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="spark2.html#Spark2.Tokenizer">sqlglot.dialects.spark2.Spark2.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Spark.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Spark.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -669,6 +733,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Spark.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Spark.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Spark.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Spark.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Spark.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Spark.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -689,6 +754,7 @@ Default: 3</li>
<dd id="Spark.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Spark.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Spark.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Spark.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Spark.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Spark.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Spark.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -706,6 +772,7 @@ Default: 3</li>
<dd id="Spark.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
<dd id="Spark.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Spark.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="Spark.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Spark.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Spark.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Spark.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -723,10 +790,12 @@ Default: 3</li>
<dd id="Spark.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Spark.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Spark.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Spark.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Spark.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Spark.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Spark.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Spark.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Spark.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Spark.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Spark.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Spark.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -747,13 +816,10 @@ Default: 3</li>
<dd id="Spark.Parser.sql" class="variable"><a href="../parser.html#Parser.sql">sql</a></dd>
</div>
- <div><dt><a href="spark2.html#Spark2.Parser">sqlglot.dialects.spark2.Spark2.Parser</a></dt>
- <dd id="Spark.Parser.FUNCTION_PARSERS" class="variable"><a href="spark2.html#Spark2.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
-
- </div>
<div><dt><a href="hive.html#Hive.Parser">sqlglot.dialects.hive.Hive.Parser</a></dt>
<dd id="Spark.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="hive.html#Hive.Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
<dd id="Spark.Parser.STRICT_CAST" class="variable"><a href="hive.html#Hive.Parser.STRICT_CAST">STRICT_CAST</a></dd>
+ <dd id="Spark.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="hive.html#Hive.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
<dd id="Spark.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="hive.html#Hive.Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
<dd id="Spark.Parser.PROPERTY_PARSERS" class="variable"><a href="hive.html#Hive.Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
<dd id="Spark.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="hive.html#Hive.Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -774,30 +840,37 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Spark.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator-45"><a href="#Spark.Generator-45"><span class="linenos">45</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-46"><a href="#Spark.Generator-46"><span class="linenos">46</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Generator-47"><a href="#Spark.Generator-47"><span class="linenos">47</span></a> <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">TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="Spark.Generator-48"><a href="#Spark.Generator-48"><span class="linenos">48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(15, 4)&quot;</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(6, 4)&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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">:</span> <span class="s2">&quot;STRING&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="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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Generator-54"><a href="#Spark.Generator-54"><span class="linenos">54</span></a> <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="p">,</span>
-</span><span id="Spark.Generator-55"><a href="#Spark.Generator-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
-</span><span id="Spark.Generator-56"><a href="#Spark.Generator-56"><span class="linenos">56</span></a> <span class="p">}</span>
-</span><span id="Spark.Generator-57"><a href="#Spark.Generator-57"><span class="linenos">57</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-58"><a href="#Spark.Generator-58"><span class="linenos">58</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">Group</span><span class="p">)</span>
-</span><span id="Spark.Generator-59"><a href="#Spark.Generator-59"><span class="linenos">59</span></a>
-</span><span id="Spark.Generator-60"><a href="#Spark.Generator-60"><span class="linenos">60</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-61"><a href="#Spark.Generator-61"><span class="linenos">61</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-62"><a href="#Spark.Generator-62"><span class="linenos">62</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-63"><a href="#Spark.Generator-63"><span class="linenos">63</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-64"><a href="#Spark.Generator-64"><span class="linenos">64</span></a>
-</span><span id="Spark.Generator-65"><a href="#Spark.Generator-65"><span class="linenos">65</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Spark.Generator-66"><a href="#Spark.Generator-66"><span class="linenos">66</span></a> <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-67"><a href="#Spark.Generator-67"><span class="linenos">67</span></a>
-</span><span id="Spark.Generator-68"><a href="#Spark.Generator-68"><span class="linenos">68</span></a> <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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator-51"><a href="#Spark.Generator-51"><span class="linenos">51</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-52"><a href="#Spark.Generator-52"><span class="linenos">52</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark.Generator-53"><a href="#Spark.Generator-53"><span class="linenos">53</span></a> <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">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="Spark.Generator-54"><a href="#Spark.Generator-54"><span class="linenos">54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(15, 4)&quot;</span><span class="p">,</span>
+</span><span id="Spark.Generator-55"><a href="#Spark.Generator-55"><span class="linenos">55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">:</span> <span class="s2">&quot;DECIMAL(6, 4)&quot;</span><span class="p">,</span>
+</span><span id="Spark.Generator-56"><a href="#Spark.Generator-56"><span class="linenos">56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="Spark.Generator-57"><a href="#Spark.Generator-57"><span class="linenos">57</span></a> <span class="p">}</span>
+</span><span id="Spark.Generator-58"><a href="#Spark.Generator-58"><span class="linenos">58</span></a>
+</span><span id="Spark.Generator-59"><a href="#Spark.Generator-59"><span class="linenos">59</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark.Generator-60"><a href="#Spark.Generator-60"><span class="linenos">60</span></a> <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="p">,</span>
+</span><span id="Spark.Generator-61"><a href="#Spark.Generator-61"><span class="linenos">61</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STARTSWITH&quot;</span><span class="p">),</span>
+</span><span id="Spark.Generator-62"><a href="#Spark.Generator-62"><span class="linenos">62</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-63"><a href="#Spark.Generator-63"><span class="linenos">63</span></a> <span class="s2">&quot;DATEADD&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="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="Spark.Generator-64"><a href="#Spark.Generator-64"><span class="linenos">64</span></a> <span class="p">),</span>
+</span><span id="Spark.Generator-65"><a href="#Spark.Generator-65"><span class="linenos">65</span></a> <span class="p">}</span>
+</span><span id="Spark.Generator-66"><a href="#Spark.Generator-66"><span class="linenos">66</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span>
+</span><span id="Spark.Generator-67"><a href="#Spark.Generator-67"><span class="linenos">67</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-68"><a href="#Spark.Generator-68"><span class="linenos">68</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">Group</span><span class="p">)</span>
+</span><span id="Spark.Generator-69"><a href="#Spark.Generator-69"><span class="linenos">69</span></a>
+</span><span id="Spark.Generator-70"><a href="#Spark.Generator-70"><span class="linenos">70</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark.Generator-71"><a href="#Spark.Generator-71"><span class="linenos">71</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="Spark.Generator-72"><a href="#Spark.Generator-72"><span class="linenos">72</span></a>
+</span><span id="Spark.Generator-73"><a href="#Spark.Generator-73"><span class="linenos">73</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-74"><a href="#Spark.Generator-74"><span class="linenos">74</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-75"><a href="#Spark.Generator-75"><span class="linenos">75</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-76"><a href="#Spark.Generator-76"><span class="linenos">76</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-77"><a href="#Spark.Generator-77"><span class="linenos">77</span></a>
+</span><span id="Spark.Generator-78"><a href="#Spark.Generator-78"><span class="linenos">78</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Spark.Generator-79"><a href="#Spark.Generator-79"><span class="linenos">79</span></a> <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-80"><a href="#Spark.Generator-80"><span class="linenos">80</span></a>
+</span><span id="Spark.Generator-81"><a href="#Spark.Generator-81"><span class="linenos">81</span></a> <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>
@@ -857,7 +930,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Spark.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Spark.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Spark.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NotNullColumnConstraint">sqlglot.expressions.NotNullColumnConstraint</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;: &lt;function _insert_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function Spark2.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function <a href="#Spark.Generator">Spark.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -866,6 +939,25 @@ Default: True</li>
</div>
+ <div id="Spark.Generator.anyvalue_sql" class="classattr">
+ <input id="Spark.Generator.anyvalue_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">anyvalue_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#AnyValue">sqlglot.expressions.AnyValue</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Spark.Generator.anyvalue_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Spark.Generator.anyvalue_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.anyvalue_sql-70"><a href="#Spark.Generator.anyvalue_sql-70"><span class="linenos">70</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark.Generator.anyvalue_sql-71"><a href="#Spark.Generator.anyvalue_sql-71"><span class="linenos">71</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>
+
+
+
+
+ </div>
<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">
@@ -877,15 +969,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark.Generator.datediff_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.datediff_sql-60"><a href="#Spark.Generator.datediff_sql-60"><span class="linenos">60</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-61"><a href="#Spark.Generator.datediff_sql-61"><span class="linenos">61</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-62"><a href="#Spark.Generator.datediff_sql-62"><span class="linenos">62</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-63"><a href="#Spark.Generator.datediff_sql-63"><span class="linenos">63</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-64"><a href="#Spark.Generator.datediff_sql-64"><span class="linenos">64</span></a>
-</span><span id="Spark.Generator.datediff_sql-65"><a href="#Spark.Generator.datediff_sql-65"><span class="linenos">65</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Spark.Generator.datediff_sql-66"><a href="#Spark.Generator.datediff_sql-66"><span class="linenos">66</span></a> <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-67"><a href="#Spark.Generator.datediff_sql-67"><span class="linenos">67</span></a>
-</span><span id="Spark.Generator.datediff_sql-68"><a href="#Spark.Generator.datediff_sql-68"><span class="linenos">68</span></a> <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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.datediff_sql-73"><a href="#Spark.Generator.datediff_sql-73"><span class="linenos">73</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-74"><a href="#Spark.Generator.datediff_sql-74"><span class="linenos">74</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-75"><a href="#Spark.Generator.datediff_sql-75"><span class="linenos">75</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-76"><a href="#Spark.Generator.datediff_sql-76"><span class="linenos">76</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-77"><a href="#Spark.Generator.datediff_sql-77"><span class="linenos">77</span></a>
+</span><span id="Spark.Generator.datediff_sql-78"><a href="#Spark.Generator.datediff_sql-78"><span class="linenos">78</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Spark.Generator.datediff_sql-79"><a href="#Spark.Generator.datediff_sql-79"><span class="linenos">79</span></a> <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-80"><a href="#Spark.Generator.datediff_sql-80"><span class="linenos">80</span></a>
+</span><span id="Spark.Generator.datediff_sql-81"><a href="#Spark.Generator.datediff_sql-81"><span class="linenos">81</span></a> <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>
@@ -942,26 +1034,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.can_identify-253"><a href="#Spark.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Spark.Generator.can_identify-254"><a href="#Spark.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Spark.Generator.can_identify-255"><a href="#Spark.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Spark.Generator.can_identify-256"><a href="#Spark.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Spark.Generator.can_identify-257"><a href="#Spark.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Spark.Generator.can_identify-258"><a href="#Spark.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Spark.Generator.can_identify-259"><a href="#Spark.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Spark.Generator.can_identify-260"><a href="#Spark.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Spark.Generator.can_identify-261"><a href="#Spark.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Spark.Generator.can_identify-262"><a href="#Spark.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Spark.Generator.can_identify-263"><a href="#Spark.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Spark.Generator.can_identify-264"><a href="#Spark.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Spark.Generator.can_identify-265"><a href="#Spark.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Spark.Generator.can_identify-266"><a href="#Spark.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Spark.Generator.can_identify-267"><a href="#Spark.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Spark.Generator.can_identify-268"><a href="#Spark.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Spark.Generator.can_identify-269"><a href="#Spark.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Spark.Generator.can_identify-270"><a href="#Spark.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.can_identify-256"><a href="#Spark.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Spark.Generator.can_identify-257"><a href="#Spark.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Spark.Generator.can_identify-258"><a href="#Spark.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Spark.Generator.can_identify-259"><a href="#Spark.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Spark.Generator.can_identify-260"><a href="#Spark.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Spark.Generator.can_identify-261"><a href="#Spark.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Spark.Generator.can_identify-262"><a href="#Spark.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Spark.Generator.can_identify-263"><a href="#Spark.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Spark.Generator.can_identify-264"><a href="#Spark.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Spark.Generator.can_identify-265"><a href="#Spark.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Spark.Generator.can_identify-266"><a href="#Spark.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Spark.Generator.can_identify-267"><a href="#Spark.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Spark.Generator.can_identify-268"><a href="#Spark.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Spark.Generator.can_identify-269"><a href="#Spark.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Spark.Generator.can_identify-270"><a href="#Spark.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Spark.Generator.can_identify-271"><a href="#Spark.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Spark.Generator.can_identify-272"><a href="#Spark.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Spark.Generator.can_identify-272"><a href="#Spark.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Spark.Generator.can_identify-273"><a href="#Spark.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Spark.Generator.can_identify-274"><a href="#Spark.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Spark.Generator.can_identify-275"><a href="#Spark.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1032,26 +1124,14 @@ Default: True</li>
</div>
- <div id="Spark.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Spark.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Spark.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Spark.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="spark2.html#Spark2.Tokenizer">sqlglot.dialects.spark2.Spark2.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Spark.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Spark.Generator.TOKENIZER_CLASS"></a>
@@ -1147,7 +1227,9 @@ Default: True</li>
<dd id="Spark.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
<dd id="Spark.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Spark.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
+ <dd id="Spark.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="Spark.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Spark.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Spark.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Spark.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Spark.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1191,6 +1273,7 @@ Default: True</li>
<dd id="Spark.Generator.column_sql" class="function"><a href="../generator.html#Generator.column_sql">column_sql</a></dd>
<dd id="Spark.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Spark.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Spark.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Spark.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Spark.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Spark.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1209,7 +1292,7 @@ Default: True</li>
<dd id="Spark.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Spark.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Spark.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Spark.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Spark.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Spark.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Spark.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="Spark.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@@ -1260,6 +1343,8 @@ Default: True</li>
<dd id="Spark.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Spark.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Spark.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Spark.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Spark.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Spark.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Spark.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Spark.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1414,14 +1499,16 @@ Default: True</li>
<dd id="Spark.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
<dd id="Spark.Generator.oncluster_sql" class="function"><a href="../generator.html#Generator.oncluster_sql">oncluster_sql</a></dd>
<dd id="Spark.Generator.clusteredbyproperty_sql" class="function"><a href="../generator.html#Generator.clusteredbyproperty_sql">clusteredbyproperty_sql</a></dd>
- <dd id="Spark.Generator.anyvalue_sql" class="function"><a href="../generator.html#Generator.anyvalue_sql">anyvalue_sql</a></dd>
<dd id="Spark.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Spark.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Spark.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Spark.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Spark.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
<div><dt><a href="spark2.html#Spark2.Generator">sqlglot.dialects.spark2.Spark2.Generator</a></dt>
<dd id="Spark.Generator.QUERY_HINTS" class="variable"><a href="spark2.html#Spark2.Generator.QUERY_HINTS">QUERY_HINTS</a></dd>
+ <dd id="Spark.Generator.NVL2_SUPPORTED" class="variable"><a href="spark2.html#Spark2.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Spark.Generator.PROPERTIES_LOCATION" class="variable"><a href="spark2.html#Spark2.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
<dd id="Spark.Generator.WRAP_DERIVED_VALUES" class="variable"><a href="spark2.html#Spark2.Generator.WRAP_DERIVED_VALUES">WRAP_DERIVED_VALUES</a></dd>
<dd id="Spark.Generator.CREATE_FUNCTION_RETURN_AS" class="variable"><a href="spark2.html#Spark2.Generator.CREATE_FUNCTION_RETURN_AS">CREATE_FUNCTION_RETURN_AS</a></dd>
@@ -1441,6 +1528,7 @@ Default: True</li>
<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>
<dd id="Spark.Generator.datatype_sql" class="function"><a href="hive.html#Hive.Generator.datatype_sql">datatype_sql</a></dd>
+ <dd id="Spark.Generator.version_sql" class="function"><a href="hive.html#Hive.Generator.version_sql">version_sql</a></dd>
<dd id="Spark.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="hive.html#Hive.Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Spark.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="hive.html#Hive.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
diff --git a/docs/sqlglot/dialects/spark2.html b/docs/sqlglot/dialects/spark2.html
index 0c58e7f..521f4ba 100644
--- a/docs/sqlglot/dialects/spark2.html
+++ b/docs/sqlglot/dialects/spark2.html
@@ -43,6 +43,9 @@
<a class="variable" href="#Spark2.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Spark2.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Spark2.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -64,7 +67,7 @@
<a class="variable" href="#Spark2.Generator.QUERY_HINTS">QUERY_HINTS</a>
</li>
<li>
- <a class="variable" href="#Spark2.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
+ <a class="variable" href="#Spark2.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
</li>
<li>
<a class="variable" href="#Spark2.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a>
@@ -109,10 +112,7 @@
<a class="variable" href="#Spark2.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Spark2.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Spark2.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Spark2.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Spark2.Generator.BIT_START">BIT_START</a>
@@ -255,226 +255,235 @@
</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">_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-35"><a href="#L-35"><span class="linenos"> 35</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-36"><a href="#L-36"><span class="linenos"> 36</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-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;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-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">_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">List</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</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-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;keys&quot;</span><span class="p">)</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">return</span> <span class="s2">&quot;MAP()&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">return</span> <span class="sa">f</span><span class="s2">&quot;MAP_FROM_ARRAYS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">values</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">_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-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="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-47"><a href="#L-47"><span class="linenos"> 47</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-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;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-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;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-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">_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-53"><a href="#L-53"><span class="linenos"> 53</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-54"><a href="#L-54"><span class="linenos"> 54</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-55"><a href="#L-55"><span class="linenos"> 55</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-56"><a href="#L-56"><span class="linenos"> 56</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-57"><a href="#L-57"><span class="linenos"> 57</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-58"><a href="#L-58"><span class="linenos"> 58</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-59"><a href="#L-59"><span class="linenos"> 59</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-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;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-61"><a href="#L-61"><span class="linenos"> 61</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-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;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-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">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-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">_unalias_pivot</span><span 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-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"> Spark doesn&#39;t allow PIVOT aliases, so we need to remove them and possibly wrap a</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> pivoted source in a subquery with the same alias to preserve the query&#39;s semantics.</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="sd"> Example:</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="sd"> &gt;&gt;&gt; expr = parse_one(&quot;SELECT piv.x FROM tbl PIVOT (SUM(a) FOR b IN (&#39;x&#39;)) piv&quot;)</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="sd"> &gt;&gt;&gt; print(_unalias_pivot(expr).sql(dialect=&quot;spark&quot;))</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="sd"> SELECT piv.x FROM (SELECT * FROM tbl PIVOT(SUM(a) FOR b IN (&#39;x&#39;))) AS piv</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> &quot;&quot;&quot;</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">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="ow">and</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;pivots&quot;</span><span class="p">):</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">pivot</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="p">[</span><span class="s2">&quot;pivots&quot;</span><span class="p">][</span><span class="mi">0</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">pivot</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">(</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
-</span><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">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</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="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="p">)</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="p">)</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">return</span> <span class="n">expression</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">def</span> <span class="nf">_unqualify_pivot_columns</span><span 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-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> Spark doesn&#39;t allow the column referenced in the PIVOT&#39;s field to be qualified,</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> so we need to unqualify it.</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="sd"> Example:</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> &gt;&gt;&gt; expr = parse_one(&quot;SELECT * FROM tbl PIVOT (SUM(tbl.sales) FOR tbl.quarter IN (&#39;Q1&#39;, &#39;Q2&#39;))&quot;)</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> &gt;&gt;&gt; print(_unqualify_pivot_columns(expr).sql(dialect=&quot;spark&quot;))</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> SELECT * FROM tbl PIVOT(SUM(tbl.sales) FOR quarter IN (&#39;Q1&#39;, &#39;Q1&#39;))</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</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">Pivot</span><span class="p">):</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">expression</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">transform</span><span class="p">(</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</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">output_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="p">)</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</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><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><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="k">return</span> <span class="n">expression</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="k">class</span> <span class="nc">Spark2</span><span class="p">(</span><span class="n">Hive</span><span class="p">):</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</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><span id="L-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;date&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;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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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">seq_get</span><span 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-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="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 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-125"><a href="#L-125"><span class="linenos">125</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 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-126"><a href="#L-126"><span class="linenos">126</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 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-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;RLIKE&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-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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 class="n">args</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="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><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">else</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;spark&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">),</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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 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-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">FUNCTION_PARSERS</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">Hive</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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="p">}</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">_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-158"><a href="#L-158"><span class="linenos">158</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-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="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span 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_schema</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</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">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-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">aggregations</span><span class="p">)</span> <span class="o">==</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="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</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="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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><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">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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">TYPE_MAPPING</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">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><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">PROPERTIES_LOCATION</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">PROPERTIES_LOCATION</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">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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="p">}</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</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">List</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</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-46"><a href="#L-46"><span class="linenos"> 46</span></a>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="k">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-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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">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-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</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-53"><a href="#L-53"><span class="linenos"> 53</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-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">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-57"><a href="#L-57"><span class="linenos"> 57</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-58"><a href="#L-58"><span class="linenos"> 58</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-59"><a href="#L-59"><span class="linenos"> 59</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-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(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-61"><a href="#L-61"><span class="linenos"> 61</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-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;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-63"><a href="#L-63"><span class="linenos"> 63</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-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;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-65"><a href="#L-65"><span class="linenos"> 65</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-66"><a href="#L-66"><span class="linenos"> 66</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-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">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-69"><a href="#L-69"><span class="linenos"> 69</span></a>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="k">def</span> <span class="nf">_unalias_pivot</span><span 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-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd"> Spark doesn&#39;t allow PIVOT aliases, so we need to remove them and possibly wrap a</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="sd"> pivoted source in a subquery with the same alias to preserve the query&#39;s semantics.</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="sd"> Example:</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="sd"> &gt;&gt;&gt; expr = parse_one(&quot;SELECT piv.x FROM tbl PIVOT (SUM(a) FOR b IN (&#39;x&#39;)) piv&quot;)</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> &gt;&gt;&gt; print(_unalias_pivot(expr).sql(dialect=&quot;spark&quot;))</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="sd"> SELECT piv.x FROM (SELECT * FROM tbl PIVOT(SUM(a) FOR b IN (&#39;x&#39;))) AS piv</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</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">From</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">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-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">pivot</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="p">[</span><span class="s2">&quot;pivots&quot;</span><span class="p">][</span><span class="mi">0</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">pivot</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-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">From</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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
+</span><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">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</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="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="p">)</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="p">)</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="n">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">_unqualify_pivot_columns</span><span 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-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"> Spark doesn&#39;t allow the column referenced in the PIVOT&#39;s field to be qualified,</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> so we need to unqualify it.</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="sd"> Example:</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="sd"> &gt;&gt;&gt; expr = parse_one(&quot;SELECT * FROM tbl PIVOT (SUM(tbl.sales) FOR tbl.quarter IN (&#39;Q1&#39;, &#39;Q2&#39;))&quot;)</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="sd"> &gt;&gt;&gt; print(_unqualify_pivot_columns(expr).sql(dialect=&quot;spark&quot;))</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> SELECT * FROM tbl PIVOT(SUM(tbl.sales) FOR quarter IN (&#39;Q1&#39;, &#39;Q1&#39;))</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">expression</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">transform</span><span class="p">(</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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">output_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="p">)</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">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><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="p">)</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">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">_insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">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;with&quot;</span><span class="p">):</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">expression</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">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">pop</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">))</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_sql</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><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">Spark2</span><span class="p">(</span><span class="n">Hive</span><span class="p">):</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">FUNCTIONS</span> <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">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><span id="L-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">),</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;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-133"><a href="#L-133"><span class="linenos">133</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">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-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="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 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-136"><a href="#L-136"><span class="linenos">136</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 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-137"><a href="#L-137"><span class="linenos">137</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 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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;RLIKE&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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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 class="n">args</span><span class="p">)</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</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><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">else</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;spark&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">),</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</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 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-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">FUNCTION_PARSERS</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="o">**</span><span class="n">Hive</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-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</span></a> <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">_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-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">_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-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">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="L-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">_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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span 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_schema</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="p">)</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</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">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</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><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</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-194"><a href="#L-194"><span class="linenos">194</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-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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">_unalias_pivot</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">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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</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">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-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">],</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</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">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-213"><a href="#L-213"><span class="linenos">213</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-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</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-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">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-218"><a href="#L-218"><span class="linenos">218</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-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="L-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="p">}</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</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">ArrayJoin</span><span class="p">)</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">)</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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">Right</span><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">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</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">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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">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 class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="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-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">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-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><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="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-241"><a href="#L-241"><span class="linenos">241</span></a>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</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><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">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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="p">}</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">TRANSFORMS</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">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><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">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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-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="L-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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">_unalias_pivot</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">Insert</span><span class="p">:</span> <span class="n">_insert_sql</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">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-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</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">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-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">],</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="p">),</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="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-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="p">),</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span 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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="L-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="p">}</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</span><span class="p">)</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</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">Right</span><span class="p">)</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</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">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
-</span><span id="L-248"><a href="#L-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="o">.</span><span class="n">parent</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-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="p">)</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</span></a> <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-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <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-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">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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</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">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-254"><a href="#L-254"><span class="linenos">254</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><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
+</span><span id="L-257"><a href="#L-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="o">.</span><span class="n">parent</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-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="p">)</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="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-263"><a href="#L-263"><span class="linenos">263</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>
@@ -490,148 +499,146 @@
</div>
<a class="headerlink" href="#Spark2"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2-114"><a href="#Spark2-114"><span class="linenos">114</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-115"><a href="#Spark2-115"><span class="linenos">115</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-116"><a href="#Spark2-116"><span class="linenos">116</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2-117"><a href="#Spark2-117"><span class="linenos">117</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><span id="Spark2-118"><a href="#Spark2-118"><span class="linenos">118</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-119"><a href="#Spark2-119"><span class="linenos">119</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-120"><a href="#Spark2-120"><span class="linenos">120</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-121"><a href="#Spark2-121"><span class="linenos">121</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;date&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;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-123"><a href="#Spark2-123"><span class="linenos">123</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">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-124"><a href="#Spark2-124"><span class="linenos">124</span></a> <span class="p">),</span>
-</span><span id="Spark2-125"><a href="#Spark2-125"><span class="linenos">125</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 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-126"><a href="#Spark2-126"><span class="linenos">126</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 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-127"><a href="#Spark2-127"><span class="linenos">127</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 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-128"><a href="#Spark2-128"><span class="linenos">128</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-129"><a href="#Spark2-129"><span class="linenos">129</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-130"><a href="#Spark2-130"><span class="linenos">130</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-131"><a href="#Spark2-131"><span class="linenos">131</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-132"><a href="#Spark2-132"><span class="linenos">132</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-133"><a href="#Spark2-133"><span class="linenos">133</span></a> <span class="s2">&quot;RLIKE&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="Spark2-134"><a href="#Spark2-134"><span class="linenos">134</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-135"><a href="#Spark2-135"><span class="linenos">135</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-136"><a href="#Spark2-136"><span class="linenos">136</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-137"><a href="#Spark2-137"><span class="linenos">137</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-138"><a href="#Spark2-138"><span class="linenos">138</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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 class="n">args</span><span class="p">)</span>
-</span><span id="Spark2-139"><a href="#Spark2-139"><span class="linenos">139</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><span id="Spark2-140"><a href="#Spark2-140"><span class="linenos">140</span></a> <span class="k">else</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;spark&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">),</span>
-</span><span id="Spark2-141"><a href="#Spark2-141"><span class="linenos">141</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-142"><a href="#Spark2-142"><span class="linenos">142</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-143"><a href="#Spark2-143"><span class="linenos">143</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 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-144"><a href="#Spark2-144"><span class="linenos">144</span></a> <span class="p">}</span>
-</span><span id="Spark2-145"><a href="#Spark2-145"><span class="linenos">145</span></a>
-</span><span id="Spark2-146"><a href="#Spark2-146"><span class="linenos">146</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2-147"><a href="#Spark2-147"><span class="linenos">147</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">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Spark2-148"><a href="#Spark2-148"><span class="linenos">148</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-149"><a href="#Spark2-149"><span class="linenos">149</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-150"><a href="#Spark2-150"><span class="linenos">150</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-151"><a href="#Spark2-151"><span class="linenos">151</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-152"><a href="#Spark2-152"><span class="linenos">152</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-153"><a href="#Spark2-153"><span class="linenos">153</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-154"><a href="#Spark2-154"><span class="linenos">154</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-155"><a href="#Spark2-155"><span class="linenos">155</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-156"><a href="#Spark2-156"><span class="linenos">156</span></a> <span class="p">}</span>
-</span><span id="Spark2-157"><a href="#Spark2-157"><span class="linenos">157</span></a>
-</span><span id="Spark2-158"><a href="#Spark2-158"><span class="linenos">158</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-159"><a href="#Spark2-159"><span class="linenos">159</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-160"><a href="#Spark2-160"><span class="linenos">160</span></a>
-</span><span id="Spark2-161"><a href="#Spark2-161"><span class="linenos">161</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="Spark2-162"><a href="#Spark2-162"><span class="linenos">162</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-163"><a href="#Spark2-163"><span class="linenos">163</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span 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_schema</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span>
-</span><span id="Spark2-164"><a href="#Spark2-164"><span class="linenos">164</span></a> <span class="p">)</span>
-</span><span id="Spark2-165"><a href="#Spark2-165"><span class="linenos">165</span></a>
-</span><span id="Spark2-166"><a href="#Spark2-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Spark2-167"><a href="#Spark2-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Spark2-168"><a href="#Spark2-168"><span class="linenos">168</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-169"><a href="#Spark2-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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><span id="Spark2-170"><a href="#Spark2-170"><span class="linenos">170</span></a>
-</span><span id="Spark2-171"><a href="#Spark2-171"><span class="linenos">171</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-172"><a href="#Spark2-172"><span class="linenos">172</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Spark2-173"><a href="#Spark2-173"><span class="linenos">173</span></a>
-</span><span id="Spark2-174"><a href="#Spark2-174"><span class="linenos">174</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2-175"><a href="#Spark2-175"><span class="linenos">175</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><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">PROPERTIES_LOCATION</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">PROPERTIES_LOCATION</span><span class="p">,</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">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-181"><a href="#Spark2-181"><span class="linenos">181</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-182"><a href="#Spark2-182"><span class="linenos">182</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-183"><a href="#Spark2-183"><span class="linenos">183</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-184"><a href="#Spark2-184"><span class="linenos">184</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2-125"><a href="#Spark2-125"><span class="linenos">125</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-126"><a href="#Spark2-126"><span class="linenos">126</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-127"><a href="#Spark2-127"><span class="linenos">127</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-128"><a href="#Spark2-128"><span class="linenos">128</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><span id="Spark2-129"><a href="#Spark2-129"><span class="linenos">129</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-130"><a href="#Spark2-130"><span class="linenos">130</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-131"><a href="#Spark2-131"><span class="linenos">131</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-132"><a href="#Spark2-132"><span class="linenos">132</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">),</span>
+</span><span id="Spark2-133"><a href="#Spark2-133"><span class="linenos">133</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-134"><a href="#Spark2-134"><span class="linenos">134</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">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-135"><a href="#Spark2-135"><span class="linenos">135</span></a> <span class="p">),</span>
+</span><span id="Spark2-136"><a href="#Spark2-136"><span class="linenos">136</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 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-137"><a href="#Spark2-137"><span class="linenos">137</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 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-138"><a href="#Spark2-138"><span class="linenos">138</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 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-139"><a href="#Spark2-139"><span class="linenos">139</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-140"><a href="#Spark2-140"><span class="linenos">140</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-141"><a href="#Spark2-141"><span class="linenos">141</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-142"><a href="#Spark2-142"><span class="linenos">142</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-143"><a href="#Spark2-143"><span class="linenos">143</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-144"><a href="#Spark2-144"><span class="linenos">144</span></a> <span class="s2">&quot;RLIKE&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="Spark2-145"><a href="#Spark2-145"><span class="linenos">145</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-146"><a href="#Spark2-146"><span class="linenos">146</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-147"><a href="#Spark2-147"><span class="linenos">147</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-148"><a href="#Spark2-148"><span class="linenos">148</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-149"><a href="#Spark2-149"><span class="linenos">149</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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 class="n">args</span><span class="p">)</span>
+</span><span id="Spark2-150"><a href="#Spark2-150"><span class="linenos">150</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><span id="Spark2-151"><a href="#Spark2-151"><span class="linenos">151</span></a> <span class="k">else</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;spark&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">),</span>
+</span><span id="Spark2-152"><a href="#Spark2-152"><span class="linenos">152</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-153"><a href="#Spark2-153"><span class="linenos">153</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-154"><a href="#Spark2-154"><span class="linenos">154</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 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-155"><a href="#Spark2-155"><span class="linenos">155</span></a> <span class="p">}</span>
+</span><span id="Spark2-156"><a href="#Spark2-156"><span class="linenos">156</span></a>
+</span><span id="Spark2-157"><a href="#Spark2-157"><span class="linenos">157</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-158"><a href="#Spark2-158"><span class="linenos">158</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">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Spark2-159"><a href="#Spark2-159"><span class="linenos">159</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-160"><a href="#Spark2-160"><span class="linenos">160</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-161"><a href="#Spark2-161"><span class="linenos">161</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-162"><a href="#Spark2-162"><span class="linenos">162</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-163"><a href="#Spark2-163"><span class="linenos">163</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-164"><a href="#Spark2-164"><span class="linenos">164</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-165"><a href="#Spark2-165"><span class="linenos">165</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-166"><a href="#Spark2-166"><span class="linenos">166</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-167"><a href="#Spark2-167"><span class="linenos">167</span></a> <span class="p">}</span>
+</span><span id="Spark2-168"><a href="#Spark2-168"><span class="linenos">168</span></a>
+</span><span id="Spark2-169"><a href="#Spark2-169"><span class="linenos">169</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-170"><a href="#Spark2-170"><span class="linenos">170</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-171"><a href="#Spark2-171"><span class="linenos">171</span></a>
+</span><span id="Spark2-172"><a href="#Spark2-172"><span class="linenos">172</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="Spark2-173"><a href="#Spark2-173"><span class="linenos">173</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-174"><a href="#Spark2-174"><span class="linenos">174</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span 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_schema</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span>
+</span><span id="Spark2-175"><a href="#Spark2-175"><span class="linenos">175</span></a> <span class="p">)</span>
+</span><span id="Spark2-176"><a href="#Spark2-176"><span class="linenos">176</span></a>
+</span><span id="Spark2-177"><a href="#Spark2-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Spark2-178"><a href="#Spark2-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Spark2-179"><a href="#Spark2-179"><span class="linenos">179</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-180"><a href="#Spark2-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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><span id="Spark2-181"><a href="#Spark2-181"><span class="linenos">181</span></a>
+</span><span id="Spark2-182"><a href="#Spark2-182"><span class="linenos">182</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-183"><a href="#Spark2-183"><span class="linenos">183</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Spark2-184"><a href="#Spark2-184"><span class="linenos">184</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Spark2-185"><a href="#Spark2-185"><span class="linenos">185</span></a>
-</span><span id="Spark2-186"><a href="#Spark2-186"><span class="linenos">186</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2-187"><a href="#Spark2-187"><span class="linenos">187</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><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">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-189"><a href="#Spark2-189"><span class="linenos">189</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-190"><a href="#Spark2-190"><span class="linenos">190</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-191"><a href="#Spark2-191"><span class="linenos">191</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-192"><a href="#Spark2-192"><span class="linenos">192</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-193"><a href="#Spark2-193"><span class="linenos">193</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-194"><a href="#Spark2-194"><span class="linenos">194</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-195"><a href="#Spark2-195"><span class="linenos">195</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-196"><a href="#Spark2-196"><span class="linenos">196</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-197"><a href="#Spark2-197"><span class="linenos">197</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-198"><a href="#Spark2-198"><span class="linenos">198</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-199"><a href="#Spark2-199"><span class="linenos">199</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-200"><a href="#Spark2-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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">_unalias_pivot</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">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-203"><a href="#Spark2-203"><span class="linenos">203</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-204"><a href="#Spark2-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</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">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-206"><a href="#Spark2-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Spark2-207"><a href="#Spark2-207"><span class="linenos">207</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
-</span><span id="Spark2-208"><a href="#Spark2-208"><span class="linenos">208</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Spark2-209"><a href="#Spark2-209"><span class="linenos">209</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Spark2-210"><a href="#Spark2-210"><span class="linenos">210</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">],</span>
-</span><span id="Spark2-211"><a href="#Spark2-211"><span class="linenos">211</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
-</span><span id="Spark2-212"><a href="#Spark2-212"><span class="linenos">212</span></a> <span class="p">),</span>
-</span><span id="Spark2-213"><a href="#Spark2-213"><span class="linenos">213</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-214"><a href="#Spark2-214"><span class="linenos">214</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-215"><a href="#Spark2-215"><span class="linenos">215</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-216"><a href="#Spark2-216"><span class="linenos">216</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-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">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-219"><a href="#Spark2-219"><span class="linenos">219</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-220"><a href="#Spark2-220"><span class="linenos">220</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-221"><a href="#Spark2-221"><span class="linenos">221</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-222"><a href="#Spark2-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Spark2-223"><a href="#Spark2-223"><span class="linenos">223</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Spark2-224"><a href="#Spark2-224"><span class="linenos">224</span></a> <span class="p">),</span>
-</span><span id="Spark2-225"><a href="#Spark2-225"><span class="linenos">225</span></a> <span class="p">}</span>
-</span><span id="Spark2-226"><a href="#Spark2-226"><span class="linenos">226</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">ArrayJoin</span><span class="p">)</span>
-</span><span id="Spark2-227"><a href="#Spark2-227"><span class="linenos">227</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-228"><a href="#Spark2-228"><span class="linenos">228</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
-</span><span id="Spark2-229"><a href="#Spark2-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
-</span><span id="Spark2-230"><a href="#Spark2-230"><span class="linenos">230</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">MonthsBetween</span><span class="p">)</span>
-</span><span id="Spark2-231"><a href="#Spark2-231"><span class="linenos">231</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">)</span>
-</span><span id="Spark2-232"><a href="#Spark2-232"><span class="linenos">232</span></a>
-</span><span id="Spark2-233"><a href="#Spark2-233"><span class="linenos">233</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark2-234"><a href="#Spark2-234"><span class="linenos">234</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark2-235"><a href="#Spark2-235"><span class="linenos">235</span></a>
-</span><span id="Spark2-236"><a href="#Spark2-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark2-237"><a href="#Spark2-237"><span class="linenos">237</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="Spark2-238"><a href="#Spark2-238"><span class="linenos">238</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-239"><a href="#Spark2-239"><span class="linenos">239</span></a> <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-240"><a href="#Spark2-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="Spark2-241"><a href="#Spark2-241"><span class="linenos">241</span></a> <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-242"><a href="#Spark2-242"><span class="linenos">242</span></a>
-</span><span id="Spark2-243"><a href="#Spark2-243"><span class="linenos">243</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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
+</span><span id="Spark2-186"><a href="#Spark2-186"><span class="linenos">186</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-187"><a href="#Spark2-187"><span class="linenos">187</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><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">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-189"><a href="#Spark2-189"><span class="linenos">189</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-190"><a href="#Spark2-190"><span class="linenos">190</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-191"><a href="#Spark2-191"><span class="linenos">191</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-192"><a href="#Spark2-192"><span class="linenos">192</span></a> <span class="p">}</span>
+</span><span id="Spark2-193"><a href="#Spark2-193"><span class="linenos">193</span></a>
+</span><span id="Spark2-194"><a href="#Spark2-194"><span class="linenos">194</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-195"><a href="#Spark2-195"><span class="linenos">195</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><span id="Spark2-196"><a href="#Spark2-196"><span class="linenos">196</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-197"><a href="#Spark2-197"><span class="linenos">197</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-198"><a href="#Spark2-198"><span class="linenos">198</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-199"><a href="#Spark2-199"><span class="linenos">199</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-200"><a href="#Spark2-200"><span class="linenos">200</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-201"><a href="#Spark2-201"><span class="linenos">201</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-202"><a href="#Spark2-202"><span class="linenos">202</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-203"><a href="#Spark2-203"><span class="linenos">203</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-204"><a href="#Spark2-204"><span class="linenos">204</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-205"><a href="#Spark2-205"><span class="linenos">205</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-206"><a href="#Spark2-206"><span class="linenos">206</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-207"><a href="#Spark2-207"><span class="linenos">207</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-208"><a href="#Spark2-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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">_unalias_pivot</span><span class="p">]),</span>
+</span><span id="Spark2-209"><a href="#Spark2-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">:</span> <span class="n">_insert_sql</span><span class="p">,</span>
+</span><span id="Spark2-210"><a href="#Spark2-210"><span class="linenos">210</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-211"><a href="#Spark2-211"><span class="linenos">211</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-212"><a href="#Spark2-212"><span class="linenos">212</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-213"><a href="#Spark2-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
+</span><span id="Spark2-214"><a href="#Spark2-214"><span class="linenos">214</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-215"><a href="#Spark2-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Spark2-216"><a href="#Spark2-216"><span class="linenos">216</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
+</span><span id="Spark2-217"><a href="#Spark2-217"><span class="linenos">217</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Spark2-218"><a href="#Spark2-218"><span class="linenos">218</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Spark2-219"><a href="#Spark2-219"><span class="linenos">219</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">],</span>
+</span><span id="Spark2-220"><a href="#Spark2-220"><span class="linenos">220</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
+</span><span id="Spark2-221"><a href="#Spark2-221"><span class="linenos">221</span></a> <span class="p">),</span>
+</span><span id="Spark2-222"><a href="#Spark2-222"><span class="linenos">222</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-223"><a href="#Spark2-223"><span class="linenos">223</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-224"><a href="#Spark2-224"><span class="linenos">224</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-225"><a href="#Spark2-225"><span class="linenos">225</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-226"><a href="#Spark2-226"><span class="linenos">226</span></a> <span class="p">),</span>
+</span><span id="Spark2-227"><a href="#Spark2-227"><span class="linenos">227</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-228"><a href="#Spark2-228"><span class="linenos">228</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-229"><a href="#Spark2-229"><span class="linenos">229</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-230"><a href="#Spark2-230"><span class="linenos">230</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-231"><a href="#Spark2-231"><span class="linenos">231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Spark2-232"><a href="#Spark2-232"><span class="linenos">232</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Spark2-233"><a href="#Spark2-233"><span class="linenos">233</span></a> <span class="p">),</span>
+</span><span id="Spark2-234"><a href="#Spark2-234"><span class="linenos">234</span></a> <span class="p">}</span>
+</span><span id="Spark2-235"><a href="#Spark2-235"><span class="linenos">235</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
+</span><span id="Spark2-236"><a href="#Spark2-236"><span class="linenos">236</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-237"><a href="#Spark2-237"><span class="linenos">237</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
+</span><span id="Spark2-238"><a href="#Spark2-238"><span class="linenos">238</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
+</span><span id="Spark2-239"><a href="#Spark2-239"><span class="linenos">239</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">MonthsBetween</span><span class="p">)</span>
+</span><span id="Spark2-240"><a href="#Spark2-240"><span class="linenos">240</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">Right</span><span class="p">)</span>
+</span><span id="Spark2-241"><a href="#Spark2-241"><span class="linenos">241</span></a>
+</span><span id="Spark2-242"><a href="#Spark2-242"><span class="linenos">242</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Spark2-243"><a href="#Spark2-243"><span class="linenos">243</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2-244"><a href="#Spark2-244"><span class="linenos">244</span></a>
-</span><span id="Spark2-245"><a href="#Spark2-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark2-246"><a href="#Spark2-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
-</span><span id="Spark2-247"><a href="#Spark2-247"><span class="linenos">247</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Spark2-248"><a href="#Spark2-248"><span class="linenos">248</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
-</span><span id="Spark2-249"><a href="#Spark2-249"><span class="linenos">249</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">DataType</span><span class="p">)</span>
-</span><span id="Spark2-250"><a href="#Spark2-250"><span class="linenos">250</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
-</span><span id="Spark2-251"><a href="#Spark2-251"><span class="linenos">251</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
-</span><span id="Spark2-252"><a href="#Spark2-252"><span class="linenos">252</span></a> <span class="p">)</span>
+</span><span id="Spark2-245"><a href="#Spark2-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2-246"><a href="#Spark2-246"><span class="linenos">246</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="Spark2-247"><a href="#Spark2-247"><span class="linenos">247</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-248"><a href="#Spark2-248"><span class="linenos">248</span></a> <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-249"><a href="#Spark2-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="Spark2-250"><a href="#Spark2-250"><span class="linenos">250</span></a> <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-251"><a href="#Spark2-251"><span class="linenos">251</span></a>
+</span><span id="Spark2-252"><a href="#Spark2-252"><span class="linenos">252</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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
</span><span id="Spark2-253"><a href="#Spark2-253"><span class="linenos">253</span></a>
-</span><span id="Spark2-254"><a href="#Spark2-254"><span class="linenos">254</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-255"><a href="#Spark2-255"><span class="linenos">255</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><span id="Spark2-254"><a href="#Spark2-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2-255"><a href="#Spark2-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
+</span><span id="Spark2-256"><a href="#Spark2-256"><span class="linenos">256</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Spark2-257"><a href="#Spark2-257"><span class="linenos">257</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
+</span><span id="Spark2-258"><a href="#Spark2-258"><span class="linenos">258</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">DataType</span><span class="p">)</span>
+</span><span id="Spark2-259"><a href="#Spark2-259"><span class="linenos">259</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
+</span><span id="Spark2-260"><a href="#Spark2-260"><span class="linenos">260</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
+</span><span id="Spark2-261"><a href="#Spark2-261"><span class="linenos">261</span></a> <span class="p">)</span>
+</span><span id="Spark2-262"><a href="#Spark2-262"><span class="linenos">262</span></a>
+</span><span id="Spark2-263"><a href="#Spark2-263"><span class="linenos">263</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-264"><a href="#Spark2-264"><span class="linenos">264</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>
@@ -861,6 +868,7 @@
<div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
<dd id="Spark2.INDEX_OFFSET" class="variable"><a href="dialect.html#Dialect.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Spark2.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Spark2.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Spark2.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Spark2.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Spark2.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -896,61 +904,61 @@
</div>
<a class="headerlink" href="#Spark2.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Parser-115"><a href="#Spark2.Parser-115"><span class="linenos">115</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-116"><a href="#Spark2.Parser-116"><span class="linenos">116</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2.Parser-117"><a href="#Spark2.Parser-117"><span class="linenos">117</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><span id="Spark2.Parser-118"><a href="#Spark2.Parser-118"><span class="linenos">118</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-119"><a href="#Spark2.Parser-119"><span class="linenos">119</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-120"><a href="#Spark2.Parser-120"><span class="linenos">120</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-121"><a href="#Spark2.Parser-121"><span class="linenos">121</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;date&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;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-123"><a href="#Spark2.Parser-123"><span class="linenos">123</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">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-124"><a href="#Spark2.Parser-124"><span class="linenos">124</span></a> <span class="p">),</span>
-</span><span id="Spark2.Parser-125"><a href="#Spark2.Parser-125"><span class="linenos">125</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 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-126"><a href="#Spark2.Parser-126"><span class="linenos">126</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 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-127"><a href="#Spark2.Parser-127"><span class="linenos">127</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 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-128"><a href="#Spark2.Parser-128"><span class="linenos">128</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-129"><a href="#Spark2.Parser-129"><span class="linenos">129</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-130"><a href="#Spark2.Parser-130"><span class="linenos">130</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-131"><a href="#Spark2.Parser-131"><span class="linenos">131</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-132"><a href="#Spark2.Parser-132"><span class="linenos">132</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-133"><a href="#Spark2.Parser-133"><span class="linenos">133</span></a> <span class="s2">&quot;RLIKE&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="Spark2.Parser-134"><a href="#Spark2.Parser-134"><span class="linenos">134</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-135"><a href="#Spark2.Parser-135"><span class="linenos">135</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-136"><a href="#Spark2.Parser-136"><span class="linenos">136</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-137"><a href="#Spark2.Parser-137"><span class="linenos">137</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-138"><a href="#Spark2.Parser-138"><span class="linenos">138</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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 class="n">args</span><span class="p">)</span>
-</span><span id="Spark2.Parser-139"><a href="#Spark2.Parser-139"><span class="linenos">139</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><span id="Spark2.Parser-140"><a href="#Spark2.Parser-140"><span class="linenos">140</span></a> <span class="k">else</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;spark&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">),</span>
-</span><span id="Spark2.Parser-141"><a href="#Spark2.Parser-141"><span class="linenos">141</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-142"><a href="#Spark2.Parser-142"><span class="linenos">142</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-143"><a href="#Spark2.Parser-143"><span class="linenos">143</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 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-144"><a href="#Spark2.Parser-144"><span class="linenos">144</span></a> <span class="p">}</span>
-</span><span id="Spark2.Parser-145"><a href="#Spark2.Parser-145"><span class="linenos">145</span></a>
-</span><span id="Spark2.Parser-146"><a href="#Spark2.Parser-146"><span class="linenos">146</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2.Parser-147"><a href="#Spark2.Parser-147"><span class="linenos">147</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">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Spark2.Parser-148"><a href="#Spark2.Parser-148"><span class="linenos">148</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-149"><a href="#Spark2.Parser-149"><span class="linenos">149</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-150"><a href="#Spark2.Parser-150"><span class="linenos">150</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-151"><a href="#Spark2.Parser-151"><span class="linenos">151</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-152"><a href="#Spark2.Parser-152"><span class="linenos">152</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-153"><a href="#Spark2.Parser-153"><span class="linenos">153</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-154"><a href="#Spark2.Parser-154"><span class="linenos">154</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-155"><a href="#Spark2.Parser-155"><span class="linenos">155</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-156"><a href="#Spark2.Parser-156"><span class="linenos">156</span></a> <span class="p">}</span>
-</span><span id="Spark2.Parser-157"><a href="#Spark2.Parser-157"><span class="linenos">157</span></a>
-</span><span id="Spark2.Parser-158"><a href="#Spark2.Parser-158"><span class="linenos">158</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-159"><a href="#Spark2.Parser-159"><span class="linenos">159</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-160"><a href="#Spark2.Parser-160"><span class="linenos">160</span></a>
-</span><span id="Spark2.Parser-161"><a href="#Spark2.Parser-161"><span class="linenos">161</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="Spark2.Parser-162"><a href="#Spark2.Parser-162"><span class="linenos">162</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-163"><a href="#Spark2.Parser-163"><span class="linenos">163</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span 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_schema</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span>
-</span><span id="Spark2.Parser-164"><a href="#Spark2.Parser-164"><span class="linenos">164</span></a> <span class="p">)</span>
-</span><span id="Spark2.Parser-165"><a href="#Spark2.Parser-165"><span class="linenos">165</span></a>
-</span><span id="Spark2.Parser-166"><a href="#Spark2.Parser-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Spark2.Parser-167"><a href="#Spark2.Parser-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Spark2.Parser-168"><a href="#Spark2.Parser-168"><span class="linenos">168</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-169"><a href="#Spark2.Parser-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Parser-126"><a href="#Spark2.Parser-126"><span class="linenos">126</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-127"><a href="#Spark2.Parser-127"><span class="linenos">127</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Parser-128"><a href="#Spark2.Parser-128"><span class="linenos">128</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><span id="Spark2.Parser-129"><a href="#Spark2.Parser-129"><span class="linenos">129</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-130"><a href="#Spark2.Parser-130"><span class="linenos">130</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-131"><a href="#Spark2.Parser-131"><span class="linenos">131</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-132"><a href="#Spark2.Parser-132"><span class="linenos">132</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;date&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="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-134"><a href="#Spark2.Parser-134"><span class="linenos">134</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">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-135"><a href="#Spark2.Parser-135"><span class="linenos">135</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-136"><a href="#Spark2.Parser-136"><span class="linenos">136</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 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-137"><a href="#Spark2.Parser-137"><span class="linenos">137</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 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-138"><a href="#Spark2.Parser-138"><span class="linenos">138</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 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-139"><a href="#Spark2.Parser-139"><span class="linenos">139</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-140"><a href="#Spark2.Parser-140"><span class="linenos">140</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-141"><a href="#Spark2.Parser-141"><span class="linenos">141</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-142"><a href="#Spark2.Parser-142"><span class="linenos">142</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-143"><a href="#Spark2.Parser-143"><span class="linenos">143</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-144"><a href="#Spark2.Parser-144"><span class="linenos">144</span></a> <span class="s2">&quot;RLIKE&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="Spark2.Parser-145"><a href="#Spark2.Parser-145"><span class="linenos">145</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-146"><a href="#Spark2.Parser-146"><span class="linenos">146</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="n">binary_from_function</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-147"><a href="#Spark2.Parser-147"><span class="linenos">147</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-148"><a href="#Spark2.Parser-148"><span class="linenos">148</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-149"><a href="#Spark2.Parser-149"><span class="linenos">149</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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 class="n">args</span><span class="p">)</span>
+</span><span id="Spark2.Parser-150"><a href="#Spark2.Parser-150"><span class="linenos">150</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><span id="Spark2.Parser-151"><a href="#Spark2.Parser-151"><span class="linenos">151</span></a> <span class="k">else</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;spark&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">),</span>
+</span><span id="Spark2.Parser-152"><a href="#Spark2.Parser-152"><span class="linenos">152</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-153"><a href="#Spark2.Parser-153"><span class="linenos">153</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-154"><a href="#Spark2.Parser-154"><span class="linenos">154</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 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-155"><a href="#Spark2.Parser-155"><span class="linenos">155</span></a> <span class="p">}</span>
+</span><span id="Spark2.Parser-156"><a href="#Spark2.Parser-156"><span class="linenos">156</span></a>
+</span><span id="Spark2.Parser-157"><a href="#Spark2.Parser-157"><span class="linenos">157</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Parser-158"><a href="#Spark2.Parser-158"><span class="linenos">158</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">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Spark2.Parser-159"><a href="#Spark2.Parser-159"><span class="linenos">159</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-160"><a href="#Spark2.Parser-160"><span class="linenos">160</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-161"><a href="#Spark2.Parser-161"><span class="linenos">161</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-162"><a href="#Spark2.Parser-162"><span class="linenos">162</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-163"><a href="#Spark2.Parser-163"><span class="linenos">163</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-164"><a href="#Spark2.Parser-164"><span class="linenos">164</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-165"><a href="#Spark2.Parser-165"><span class="linenos">165</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-166"><a href="#Spark2.Parser-166"><span class="linenos">166</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-167"><a href="#Spark2.Parser-167"><span class="linenos">167</span></a> <span class="p">}</span>
+</span><span id="Spark2.Parser-168"><a href="#Spark2.Parser-168"><span class="linenos">168</span></a>
+</span><span id="Spark2.Parser-169"><a href="#Spark2.Parser-169"><span class="linenos">169</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-170"><a href="#Spark2.Parser-170"><span class="linenos">170</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-171"><a href="#Spark2.Parser-171"><span class="linenos">171</span></a>
+</span><span id="Spark2.Parser-172"><a href="#Spark2.Parser-172"><span class="linenos">172</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="Spark2.Parser-173"><a href="#Spark2.Parser-173"><span class="linenos">173</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-174"><a href="#Spark2.Parser-174"><span class="linenos">174</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span 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_schema</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span>
+</span><span id="Spark2.Parser-175"><a href="#Spark2.Parser-175"><span class="linenos">175</span></a> <span class="p">)</span>
+</span><span id="Spark2.Parser-176"><a href="#Spark2.Parser-176"><span class="linenos">176</span></a>
+</span><span id="Spark2.Parser-177"><a href="#Spark2.Parser-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Spark2.Parser-178"><a href="#Spark2.Parser-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Spark2.Parser-179"><a href="#Spark2.Parser-179"><span class="linenos">179</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-180"><a href="#Spark2.Parser-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</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></pre></div>
@@ -975,7 +983,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Spark2.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Spark2.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;AGGREGATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;BOOLEAN&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DOUBLE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;FLOAT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;MAP_FROM_ARRAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHIFTLEFT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;SHIFTRIGHT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;STRING&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;TO_UNIX_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;TRUNC&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Spark2.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;COLLECT_LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;COLLECT_SET&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;DATE_FORMAT&#39;: &lt;function Hive.Parser.&lt;lambda&gt;&gt;, &#39;FROM_UNIXTIME&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;GET_JSON_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;PERCENTILE_APPROX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;TO_DATE&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;TO_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;UNBASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;UNIX_TIMESTAMP&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;AGGREGATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;APPROX_PERCENTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;BOOLEAN&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;DOUBLE&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;FLOAT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INT&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;MAP_FROM_ARRAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;RLIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;SHIFTLEFT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;SHIFTRIGHT&#39;: &lt;function binary_from_function.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;STRING&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;function _parse_as_cast.&lt;locals&gt;.&lt;lambda&gt;&gt;, &#39;TO_TIMESTAMP&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;, &#39;TO_UNIX_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;TRUNC&#39;: &lt;function <a href="#Spark2.Parser">Spark2.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -997,6 +1005,18 @@ Default: 3</li>
</div>
+ <div id="Spark2.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Spark2.Tokenizer">sqlglot.dialects.spark2.Spark2.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Spark2.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Spark2.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -1053,6 +1073,7 @@ Default: 3</li>
<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.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Spark2.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Spark2.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Spark2.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Spark2.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1073,6 +1094,7 @@ Default: 3</li>
<dd id="Spark2.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Spark2.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Spark2.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Spark2.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Spark2.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Spark2.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Spark2.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1090,6 +1112,7 @@ Default: 3</li>
<dd id="Spark2.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
<dd id="Spark2.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Spark2.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="Spark2.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Spark2.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Spark2.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Spark2.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1107,10 +1130,12 @@ Default: 3</li>
<dd id="Spark2.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Spark2.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Spark2.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Spark2.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Spark2.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Spark2.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Spark2.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Spark2.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Spark2.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Spark2.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Spark2.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Spark2.Parser.STRICT_STRING_CONCAT" class="variable"><a href="../parser.html#Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
@@ -1134,6 +1159,7 @@ Default: 3</li>
<div><dt><a href="hive.html#Hive.Parser">sqlglot.dialects.hive.Hive.Parser</a></dt>
<dd id="Spark2.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="hive.html#Hive.Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
<dd id="Spark2.Parser.STRICT_CAST" class="variable"><a href="hive.html#Hive.Parser.STRICT_CAST">STRICT_CAST</a></dd>
+ <dd id="Spark2.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="hive.html#Hive.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
<dd id="Spark2.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="hive.html#Hive.Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
<dd id="Spark2.Parser.PROPERTY_PARSERS" class="variable"><a href="hive.html#Hive.Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
<dd id="Spark2.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="hive.html#Hive.Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -1154,88 +1180,86 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Spark2.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator-171"><a href="#Spark2.Generator-171"><span class="linenos">171</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-172"><a href="#Spark2.Generator-172"><span class="linenos">172</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Spark2.Generator-173"><a href="#Spark2.Generator-173"><span class="linenos">173</span></a>
-</span><span id="Spark2.Generator-174"><a href="#Spark2.Generator-174"><span class="linenos">174</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2.Generator-175"><a href="#Spark2.Generator-175"><span class="linenos">175</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><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">PROPERTIES_LOCATION</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">PROPERTIES_LOCATION</span><span class="p">,</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">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-181"><a href="#Spark2.Generator-181"><span class="linenos">181</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-182"><a href="#Spark2.Generator-182"><span class="linenos">182</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-183"><a href="#Spark2.Generator-183"><span class="linenos">183</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-184"><a href="#Spark2.Generator-184"><span class="linenos">184</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator-182"><a href="#Spark2.Generator-182"><span class="linenos">182</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</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">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Spark2.Generator-184"><a href="#Spark2.Generator-184"><span class="linenos">184</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Spark2.Generator-185"><a href="#Spark2.Generator-185"><span class="linenos">185</span></a>
-</span><span id="Spark2.Generator-186"><a href="#Spark2.Generator-186"><span class="linenos">186</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark2.Generator-187"><a href="#Spark2.Generator-187"><span class="linenos">187</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><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">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-189"><a href="#Spark2.Generator-189"><span class="linenos">189</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-190"><a href="#Spark2.Generator-190"><span class="linenos">190</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-191"><a href="#Spark2.Generator-191"><span class="linenos">191</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-192"><a href="#Spark2.Generator-192"><span class="linenos">192</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-193"><a href="#Spark2.Generator-193"><span class="linenos">193</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-194"><a href="#Spark2.Generator-194"><span class="linenos">194</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-195"><a href="#Spark2.Generator-195"><span class="linenos">195</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-196"><a href="#Spark2.Generator-196"><span class="linenos">196</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-197"><a href="#Spark2.Generator-197"><span class="linenos">197</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-198"><a href="#Spark2.Generator-198"><span class="linenos">198</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-199"><a href="#Spark2.Generator-199"><span class="linenos">199</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-200"><a href="#Spark2.Generator-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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">_unalias_pivot</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">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-203"><a href="#Spark2.Generator-203"><span class="linenos">203</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-204"><a href="#Spark2.Generator-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</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">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-206"><a href="#Spark2.Generator-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Spark2.Generator-207"><a href="#Spark2.Generator-207"><span class="linenos">207</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
-</span><span id="Spark2.Generator-208"><a href="#Spark2.Generator-208"><span class="linenos">208</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Spark2.Generator-210"><a href="#Spark2.Generator-210"><span class="linenos">210</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">],</span>
-</span><span id="Spark2.Generator-211"><a href="#Spark2.Generator-211"><span class="linenos">211</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
-</span><span id="Spark2.Generator-212"><a href="#Spark2.Generator-212"><span class="linenos">212</span></a> <span class="p">),</span>
-</span><span id="Spark2.Generator-213"><a href="#Spark2.Generator-213"><span class="linenos">213</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-214"><a href="#Spark2.Generator-214"><span class="linenos">214</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-215"><a href="#Spark2.Generator-215"><span class="linenos">215</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-216"><a href="#Spark2.Generator-216"><span class="linenos">216</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-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">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-219"><a href="#Spark2.Generator-219"><span class="linenos">219</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-220"><a href="#Spark2.Generator-220"><span class="linenos">220</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-221"><a href="#Spark2.Generator-221"><span class="linenos">221</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-222"><a href="#Spark2.Generator-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Spark2.Generator-223"><a href="#Spark2.Generator-223"><span class="linenos">223</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Spark2.Generator-224"><a href="#Spark2.Generator-224"><span class="linenos">224</span></a> <span class="p">),</span>
-</span><span id="Spark2.Generator-225"><a href="#Spark2.Generator-225"><span class="linenos">225</span></a> <span class="p">}</span>
-</span><span id="Spark2.Generator-226"><a href="#Spark2.Generator-226"><span class="linenos">226</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">ArrayJoin</span><span class="p">)</span>
-</span><span id="Spark2.Generator-227"><a href="#Spark2.Generator-227"><span class="linenos">227</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-228"><a href="#Spark2.Generator-228"><span class="linenos">228</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
-</span><span id="Spark2.Generator-229"><a href="#Spark2.Generator-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
-</span><span id="Spark2.Generator-230"><a href="#Spark2.Generator-230"><span class="linenos">230</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">MonthsBetween</span><span class="p">)</span>
-</span><span id="Spark2.Generator-231"><a href="#Spark2.Generator-231"><span class="linenos">231</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">)</span>
-</span><span id="Spark2.Generator-232"><a href="#Spark2.Generator-232"><span class="linenos">232</span></a>
-</span><span id="Spark2.Generator-233"><a href="#Spark2.Generator-233"><span class="linenos">233</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark2.Generator-234"><a href="#Spark2.Generator-234"><span class="linenos">234</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark2.Generator-235"><a href="#Spark2.Generator-235"><span class="linenos">235</span></a>
-</span><span id="Spark2.Generator-236"><a href="#Spark2.Generator-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark2.Generator-237"><a href="#Spark2.Generator-237"><span class="linenos">237</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="Spark2.Generator-238"><a href="#Spark2.Generator-238"><span class="linenos">238</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-239"><a href="#Spark2.Generator-239"><span class="linenos">239</span></a> <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-240"><a href="#Spark2.Generator-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="Spark2.Generator-241"><a href="#Spark2.Generator-241"><span class="linenos">241</span></a> <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-242"><a href="#Spark2.Generator-242"><span class="linenos">242</span></a>
-</span><span id="Spark2.Generator-243"><a href="#Spark2.Generator-243"><span class="linenos">243</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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</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">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Generator-187"><a href="#Spark2.Generator-187"><span class="linenos">187</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><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">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-189"><a href="#Spark2.Generator-189"><span class="linenos">189</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-190"><a href="#Spark2.Generator-190"><span class="linenos">190</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-191"><a href="#Spark2.Generator-191"><span class="linenos">191</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-192"><a href="#Spark2.Generator-192"><span class="linenos">192</span></a> <span class="p">}</span>
+</span><span id="Spark2.Generator-193"><a href="#Spark2.Generator-193"><span class="linenos">193</span></a>
+</span><span id="Spark2.Generator-194"><a href="#Spark2.Generator-194"><span class="linenos">194</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Generator-195"><a href="#Spark2.Generator-195"><span class="linenos">195</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><span id="Spark2.Generator-196"><a href="#Spark2.Generator-196"><span class="linenos">196</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-197"><a href="#Spark2.Generator-197"><span class="linenos">197</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-198"><a href="#Spark2.Generator-198"><span class="linenos">198</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-199"><a href="#Spark2.Generator-199"><span class="linenos">199</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-200"><a href="#Spark2.Generator-200"><span class="linenos">200</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-201"><a href="#Spark2.Generator-201"><span class="linenos">201</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-202"><a href="#Spark2.Generator-202"><span class="linenos">202</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-203"><a href="#Spark2.Generator-203"><span class="linenos">203</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-204"><a href="#Spark2.Generator-204"><span class="linenos">204</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-205"><a href="#Spark2.Generator-205"><span class="linenos">205</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-206"><a href="#Spark2.Generator-206"><span class="linenos">206</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-207"><a href="#Spark2.Generator-207"><span class="linenos">207</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-208"><a href="#Spark2.Generator-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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">_unalias_pivot</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">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">:</span> <span class="n">_insert_sql</span><span class="p">,</span>
+</span><span id="Spark2.Generator-210"><a href="#Spark2.Generator-210"><span class="linenos">210</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-211"><a href="#Spark2.Generator-211"><span class="linenos">211</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-212"><a href="#Spark2.Generator-212"><span class="linenos">212</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-213"><a href="#Spark2.Generator-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
+</span><span id="Spark2.Generator-214"><a href="#Spark2.Generator-214"><span class="linenos">214</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-215"><a href="#Spark2.Generator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Spark2.Generator-216"><a href="#Spark2.Generator-216"><span class="linenos">216</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-217"><a href="#Spark2.Generator-217"><span class="linenos">217</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Spark2.Generator-218"><a href="#Spark2.Generator-218"><span class="linenos">218</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Spark2.Generator-219"><a href="#Spark2.Generator-219"><span class="linenos">219</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;replacement&quot;</span><span class="p">],</span>
+</span><span id="Spark2.Generator-220"><a href="#Spark2.Generator-220"><span class="linenos">220</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Generator-221"><a href="#Spark2.Generator-221"><span class="linenos">221</span></a> <span class="p">),</span>
+</span><span id="Spark2.Generator-222"><a href="#Spark2.Generator-222"><span class="linenos">222</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-223"><a href="#Spark2.Generator-223"><span class="linenos">223</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-224"><a href="#Spark2.Generator-224"><span class="linenos">224</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-225"><a href="#Spark2.Generator-225"><span class="linenos">225</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-226"><a href="#Spark2.Generator-226"><span class="linenos">226</span></a> <span class="p">),</span>
+</span><span id="Spark2.Generator-227"><a href="#Spark2.Generator-227"><span class="linenos">227</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-228"><a href="#Spark2.Generator-228"><span class="linenos">228</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-229"><a href="#Spark2.Generator-229"><span class="linenos">229</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-230"><a href="#Spark2.Generator-230"><span class="linenos">230</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-231"><a href="#Spark2.Generator-231"><span class="linenos">231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Spark2.Generator-232"><a href="#Spark2.Generator-232"><span class="linenos">232</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Spark2.Generator-233"><a href="#Spark2.Generator-233"><span class="linenos">233</span></a> <span class="p">),</span>
+</span><span id="Spark2.Generator-234"><a href="#Spark2.Generator-234"><span class="linenos">234</span></a> <span class="p">}</span>
+</span><span id="Spark2.Generator-235"><a href="#Spark2.Generator-235"><span class="linenos">235</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
+</span><span id="Spark2.Generator-236"><a href="#Spark2.Generator-236"><span class="linenos">236</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-237"><a href="#Spark2.Generator-237"><span class="linenos">237</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
+</span><span id="Spark2.Generator-238"><a href="#Spark2.Generator-238"><span class="linenos">238</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
+</span><span id="Spark2.Generator-239"><a href="#Spark2.Generator-239"><span class="linenos">239</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">MonthsBetween</span><span class="p">)</span>
+</span><span id="Spark2.Generator-240"><a href="#Spark2.Generator-240"><span class="linenos">240</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">Right</span><span class="p">)</span>
+</span><span id="Spark2.Generator-241"><a href="#Spark2.Generator-241"><span class="linenos">241</span></a>
+</span><span id="Spark2.Generator-242"><a href="#Spark2.Generator-242"><span class="linenos">242</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Spark2.Generator-243"><a href="#Spark2.Generator-243"><span class="linenos">243</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2.Generator-244"><a href="#Spark2.Generator-244"><span class="linenos">244</span></a>
-</span><span id="Spark2.Generator-245"><a href="#Spark2.Generator-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark2.Generator-246"><a href="#Spark2.Generator-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
-</span><span id="Spark2.Generator-247"><a href="#Spark2.Generator-247"><span class="linenos">247</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Spark2.Generator-248"><a href="#Spark2.Generator-248"><span class="linenos">248</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
-</span><span id="Spark2.Generator-249"><a href="#Spark2.Generator-249"><span class="linenos">249</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">DataType</span><span class="p">)</span>
-</span><span id="Spark2.Generator-250"><a href="#Spark2.Generator-250"><span class="linenos">250</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
-</span><span id="Spark2.Generator-251"><a href="#Spark2.Generator-251"><span class="linenos">251</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
-</span><span id="Spark2.Generator-252"><a href="#Spark2.Generator-252"><span class="linenos">252</span></a> <span class="p">)</span>
+</span><span id="Spark2.Generator-245"><a href="#Spark2.Generator-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2.Generator-246"><a href="#Spark2.Generator-246"><span class="linenos">246</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="Spark2.Generator-247"><a href="#Spark2.Generator-247"><span class="linenos">247</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-248"><a href="#Spark2.Generator-248"><span class="linenos">248</span></a> <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-249"><a href="#Spark2.Generator-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="Spark2.Generator-250"><a href="#Spark2.Generator-250"><span class="linenos">250</span></a> <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-251"><a href="#Spark2.Generator-251"><span class="linenos">251</span></a>
+</span><span id="Spark2.Generator-252"><a href="#Spark2.Generator-252"><span class="linenos">252</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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
+</span><span id="Spark2.Generator-253"><a href="#Spark2.Generator-253"><span class="linenos">253</span></a>
+</span><span id="Spark2.Generator-254"><a href="#Spark2.Generator-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2.Generator-255"><a href="#Spark2.Generator-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
+</span><span id="Spark2.Generator-256"><a href="#Spark2.Generator-256"><span class="linenos">256</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Spark2.Generator-257"><a href="#Spark2.Generator-257"><span class="linenos">257</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
+</span><span id="Spark2.Generator-258"><a href="#Spark2.Generator-258"><span class="linenos">258</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">DataType</span><span class="p">)</span>
+</span><span id="Spark2.Generator-259"><a href="#Spark2.Generator-259"><span class="linenos">259</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
+</span><span id="Spark2.Generator-260"><a href="#Spark2.Generator-260"><span class="linenos">260</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
+</span><span id="Spark2.Generator-261"><a href="#Spark2.Generator-261"><span class="linenos">261</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1290,15 +1314,14 @@ Default: True</li>
</div>
- <div id="Spark2.Generator.TYPE_MAPPING" class="classattr">
+ <div id="Spark2.Generator.NVL2_SUPPORTED" class="classattr">
<div class="attr variable">
- <span class="name">TYPE_MAPPING</span> =
-<input id="Spark2.Generator.TYPE_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Spark2.Generator.TYPE_MAPPING-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: &#39;CHAR&#39;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: &#39;VARCHAR&#39;, &lt;Type.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.LONGTEXT: &#39;LONGTEXT&#39;&gt;: &#39;TEXT&#39;, &lt;Type.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.LONGBLOB: &#39;LONGBLOB&#39;&gt;: &#39;BLOB&#39;, &lt;Type.INET: &#39;INET&#39;&gt;: &#39;INET&#39;, &lt;Type.BIT: &#39;BIT&#39;&gt;: &#39;BOOLEAN&#39;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;: &#39;STRING&#39;, &lt;Type.TIME: &#39;TIME&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: &#39;TIMESTAMP&#39;, &lt;Type.VARBINARY: &#39;VARBINARY&#39;&gt;: &#39;BINARY&#39;}</span>
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">True</span>
</div>
- <a class="headerlink" href="#Spark2.Generator.TYPE_MAPPING"></a>
+ <a class="headerlink" href="#Spark2.Generator.NVL2_SUPPORTED"></a>
@@ -1307,7 +1330,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Spark2.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Spark2.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Spark2.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1320,7 +1343,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Spark2.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Spark2.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Spark2.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function var_map_sql&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;function _property_sql&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function no_recursive_cte_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _add_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _json_format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _map_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NotNullColumnConstraint">sqlglot.expressions.NotNullColumnConstraint</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function _create_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _str_to_unix_sql&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _time_to_str&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _unix_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#National">sqlglot.expressions.National</a>&#39;&gt;: &lt;function Hive.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AtTimeZone">sqlglot.expressions.AtTimeZone</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;: &lt;function _insert_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function <a href="#Spark2.Generator">Spark2.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;}</span>
</div>
@@ -1364,14 +1387,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.cast_sql-236"><a href="#Spark2.Generator.cast_sql-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark2.Generator.cast_sql-237"><a href="#Spark2.Generator.cast_sql-237"><span class="linenos">237</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="Spark2.Generator.cast_sql-238"><a href="#Spark2.Generator.cast_sql-238"><span class="linenos">238</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-239"><a href="#Spark2.Generator.cast_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">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-240"><a href="#Spark2.Generator.cast_sql-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
-</span><span id="Spark2.Generator.cast_sql-241"><a href="#Spark2.Generator.cast_sql-241"><span class="linenos">241</span></a> <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-242"><a href="#Spark2.Generator.cast_sql-242"><span class="linenos">242</span></a>
-</span><span id="Spark2.Generator.cast_sql-243"><a href="#Spark2.Generator.cast_sql-243"><span class="linenos">243</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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.cast_sql-245"><a href="#Spark2.Generator.cast_sql-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2.Generator.cast_sql-246"><a href="#Spark2.Generator.cast_sql-246"><span class="linenos">246</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 class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="Spark2.Generator.cast_sql-247"><a href="#Spark2.Generator.cast_sql-247"><span class="linenos">247</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-248"><a href="#Spark2.Generator.cast_sql-248"><span class="linenos">248</span></a> <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-249"><a href="#Spark2.Generator.cast_sql-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
+</span><span id="Spark2.Generator.cast_sql-250"><a href="#Spark2.Generator.cast_sql-250"><span class="linenos">250</span></a> <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-251"><a href="#Spark2.Generator.cast_sql-251"><span class="linenos">251</span></a>
+</span><span id="Spark2.Generator.cast_sql-252"><a href="#Spark2.Generator.cast_sql-252"><span class="linenos">252</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 class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
</span></pre></div>
@@ -1389,14 +1412,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Generator.columndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.columndef_sql-245"><a href="#Spark2.Generator.columndef_sql-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark2.Generator.columndef_sql-246"><a href="#Spark2.Generator.columndef_sql-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
-</span><span id="Spark2.Generator.columndef_sql-247"><a href="#Spark2.Generator.columndef_sql-247"><span class="linenos">247</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Spark2.Generator.columndef_sql-248"><a href="#Spark2.Generator.columndef_sql-248"><span class="linenos">248</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
-</span><span id="Spark2.Generator.columndef_sql-249"><a href="#Spark2.Generator.columndef_sql-249"><span class="linenos">249</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">DataType</span><span class="p">)</span>
-</span><span id="Spark2.Generator.columndef_sql-250"><a href="#Spark2.Generator.columndef_sql-250"><span class="linenos">250</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
-</span><span id="Spark2.Generator.columndef_sql-251"><a href="#Spark2.Generator.columndef_sql-251"><span class="linenos">251</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
-</span><span id="Spark2.Generator.columndef_sql-252"><a href="#Spark2.Generator.columndef_sql-252"><span class="linenos">252</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.columndef_sql-254"><a href="#Spark2.Generator.columndef_sql-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2.Generator.columndef_sql-255"><a href="#Spark2.Generator.columndef_sql-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
+</span><span id="Spark2.Generator.columndef_sql-256"><a href="#Spark2.Generator.columndef_sql-256"><span class="linenos">256</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Spark2.Generator.columndef_sql-257"><a href="#Spark2.Generator.columndef_sql-257"><span class="linenos">257</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
+</span><span id="Spark2.Generator.columndef_sql-258"><a href="#Spark2.Generator.columndef_sql-258"><span class="linenos">258</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">DataType</span><span class="p">)</span>
+</span><span id="Spark2.Generator.columndef_sql-259"><a href="#Spark2.Generator.columndef_sql-259"><span class="linenos">259</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
+</span><span id="Spark2.Generator.columndef_sql-260"><a href="#Spark2.Generator.columndef_sql-260"><span class="linenos">260</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
+</span><span id="Spark2.Generator.columndef_sql-261"><a href="#Spark2.Generator.columndef_sql-261"><span class="linenos">261</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1453,26 +1476,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.can_identify-253"><a href="#Spark2.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Spark2.Generator.can_identify-254"><a href="#Spark2.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Spark2.Generator.can_identify-255"><a href="#Spark2.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Spark2.Generator.can_identify-256"><a href="#Spark2.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Spark2.Generator.can_identify-257"><a href="#Spark2.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Spark2.Generator.can_identify-258"><a href="#Spark2.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Spark2.Generator.can_identify-259"><a href="#Spark2.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Spark2.Generator.can_identify-260"><a href="#Spark2.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Spark2.Generator.can_identify-261"><a href="#Spark2.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Spark2.Generator.can_identify-262"><a href="#Spark2.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Spark2.Generator.can_identify-263"><a href="#Spark2.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Spark2.Generator.can_identify-264"><a href="#Spark2.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Spark2.Generator.can_identify-265"><a href="#Spark2.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Spark2.Generator.can_identify-266"><a href="#Spark2.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Spark2.Generator.can_identify-267"><a href="#Spark2.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Spark2.Generator.can_identify-268"><a href="#Spark2.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Spark2.Generator.can_identify-269"><a href="#Spark2.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Spark2.Generator.can_identify-270"><a href="#Spark2.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.can_identify-256"><a href="#Spark2.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Spark2.Generator.can_identify-257"><a href="#Spark2.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Spark2.Generator.can_identify-258"><a href="#Spark2.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Spark2.Generator.can_identify-259"><a href="#Spark2.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Spark2.Generator.can_identify-260"><a href="#Spark2.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Spark2.Generator.can_identify-261"><a href="#Spark2.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Spark2.Generator.can_identify-262"><a href="#Spark2.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Spark2.Generator.can_identify-263"><a href="#Spark2.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Spark2.Generator.can_identify-264"><a href="#Spark2.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Spark2.Generator.can_identify-265"><a href="#Spark2.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Spark2.Generator.can_identify-266"><a href="#Spark2.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Spark2.Generator.can_identify-267"><a href="#Spark2.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Spark2.Generator.can_identify-268"><a href="#Spark2.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Spark2.Generator.can_identify-269"><a href="#Spark2.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Spark2.Generator.can_identify-270"><a href="#Spark2.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Spark2.Generator.can_identify-271"><a href="#Spark2.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Spark2.Generator.can_identify-272"><a href="#Spark2.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Spark2.Generator.can_identify-272"><a href="#Spark2.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Spark2.Generator.can_identify-273"><a href="#Spark2.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Spark2.Generator.can_identify-274"><a href="#Spark2.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Spark2.Generator.can_identify-275"><a href="#Spark2.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1543,26 +1566,14 @@ Default: True</li>
</div>
- <div id="Spark2.Generator.STRING_ESCAPE" class="classattr">
+ <div id="Spark2.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Spark2.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Spark2.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Spark2.Tokenizer">sqlglot.dialects.spark2.Spark2.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Spark2.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Spark2.Generator.TOKENIZER_CLASS"></a>
@@ -1658,7 +1669,9 @@ Default: True</li>
<dd id="Spark2.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
<dd id="Spark2.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Spark2.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
+ <dd id="Spark2.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="Spark2.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Spark2.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Spark2.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Spark2.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Spark2.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1702,6 +1715,7 @@ Default: True</li>
<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.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_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>
@@ -1720,7 +1734,7 @@ Default: True</li>
<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.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Spark2.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Spark2.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_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>
@@ -1771,6 +1785,8 @@ Default: True</li>
<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.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Spark2.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_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>
@@ -1929,6 +1945,8 @@ Default: True</li>
<dd id="Spark2.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Spark2.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Spark2.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Spark2.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
<div><dt><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></dt>
@@ -1939,10 +1957,12 @@ Default: True</li>
<dd id="Spark2.Generator.TABLE_HINTS" class="variable"><a href="hive.html#Hive.Generator.TABLE_HINTS">TABLE_HINTS</a></dd>
<dd id="Spark2.Generator.INDEX_ON" class="variable"><a href="hive.html#Hive.Generator.INDEX_ON">INDEX_ON</a></dd>
<dd id="Spark2.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="hive.html#Hive.Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Spark2.Generator.TYPE_MAPPING" class="variable"><a href="hive.html#Hive.Generator.TYPE_MAPPING">TYPE_MAPPING</a></dd>
<dd id="Spark2.Generator.rowformatserdeproperty_sql" class="function"><a href="hive.html#Hive.Generator.rowformatserdeproperty_sql">rowformatserdeproperty_sql</a></dd>
<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>
+ <dd id="Spark2.Generator.version_sql" class="function"><a href="hive.html#Hive.Generator.version_sql">version_sql</a></dd>
<dd id="Spark2.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="hive.html#Hive.Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Spark2.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="hive.html#Hive.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
@@ -1961,8 +1981,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Tokenizer-254"><a href="#Spark2.Tokenizer-254"><span class="linenos">254</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-255"><a href="#Spark2.Tokenizer-255"><span class="linenos">255</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="Spark2.Tokenizer-263"><a href="#Spark2.Tokenizer-263"><span class="linenos">263</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-264"><a href="#Spark2.Tokenizer-264"><span class="linenos">264</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>
diff --git a/docs/sqlglot/dialects/sqlite.html b/docs/sqlglot/dialects/sqlite.html
index a37a1ee..1378abb 100644
--- a/docs/sqlglot/dialects/sqlite.html
+++ b/docs/sqlglot/dialects/sqlite.html
@@ -55,6 +55,9 @@
<a class="variable" href="#SQLite.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
+ <a class="variable" href="#SQLite.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#SQLite.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -82,6 +85,9 @@
<a class="variable" href="#SQLite.Generator.QUERY_HINTS">QUERY_HINTS</a>
</li>
<li>
+ <a class="variable" href="#SQLite.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#SQLite.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -136,10 +142,7 @@
<a class="variable" href="#SQLite.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#SQLite.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#SQLite.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#SQLite.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#SQLite.Generator.BIT_START">BIT_START</a>
@@ -246,199 +249,202 @@
</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">arrow_json_extract_scalar_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_sql</span><span class="p">,</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">count_if_to_sum</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">no_ilike_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_pivot_sql</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">no_tablesample_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_trycast_sql</span><span class="p">,</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="p">)</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">any_value_to_max_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">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">count_if_to_sum</span><span class="p">,</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">no_ilike_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_tablesample_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_trycast_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="p">)</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="k">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-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">modifier</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">modifier</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">modifier</span><span class="p">)</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</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-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">modifier</span><span class="p">)</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="k">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-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">modifier</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">modifier</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">modifier</span><span class="p">)</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</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-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">modifier</span><span class="p">)</span>
</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">_transform_create</span><span 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-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Move primary key to a column and enforce auto_increment on primary keys.&quot;&quot;&quot;</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</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-32"><a href="#L-32"><span class="linenos"> 32</span></a>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</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-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">defs</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="n">primary_key</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="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="p">:</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">defs</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">e</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">elif</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">PrimaryKey</span><span class="p">):</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">primary_key</span> <span class="o">=</span> <span class="n">e</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="n">primary_key</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">primary_key</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-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">defs</span><span class="p">[</span><span class="n">primary_key</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-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">column</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;constraints&quot;</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="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">())</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="p">)</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">primary_key</span><span class="p">)</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">defs</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">auto_increment</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="k">for</span> <span class="n">constraint</span> <span class="ow">in</span> <span class="n">column</span><span class="o">.</span><span class="n">constraints</span><span class="o">.</span><span class="n">copy</span><span class="p">():</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">constraint</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">):</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">break</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">constraint</span><span class="o">.</span><span class="n">kind</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-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">auto_increment</span> <span class="o">=</span> <span class="n">constraint</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">if</span> <span class="n">auto_increment</span><span class="p">:</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">column</span><span class="o">.</span><span class="n">constraints</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">auto_increment</span><span class="p">)</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">return</span> <span class="n">expression</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
+</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">def</span> <span class="nf">_transform_create</span><span 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-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Move primary key to a column and enforce auto_increment on primary keys.&quot;&quot;&quot;</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</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-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">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">Create</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</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-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">defs</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="n">primary_key</span> <span class="o">=</span> <span class="kc">None</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">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="p">:</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">if</span> <span class="nb">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">ColumnDef</span><span class="p">):</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">defs</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">e</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">elif</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">PrimaryKey</span><span class="p">):</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">primary_key</span> <span class="o">=</span> <span class="n">e</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">if</span> <span class="n">primary_key</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">primary_key</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-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">defs</span><span class="p">[</span><span class="n">primary_key</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-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">column</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;constraints&quot;</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="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">())</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="p">)</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">primary_key</span><span class="p">)</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">defs</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">auto_increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">for</span> <span class="n">constraint</span> <span class="ow">in</span> <span class="n">column</span><span class="o">.</span><span class="n">constraints</span><span class="o">.</span><span class="n">copy</span><span class="p">():</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">constraint</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">):</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">break</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">constraint</span><span class="o">.</span><span class="n">kind</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-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">auto_increment</span> <span class="o">=</span> <span class="n">constraint</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">if</span> <span class="n">auto_increment</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">constraints</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">auto_increment</span><span class="p">)</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">return</span> <span class="n">expression</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">SQLite</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="c1"># https://sqlite.org/forum/forumpost/5e575586ac5c711b?raw</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</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 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-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">class</span> <span class="nc">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-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;EDITDIST3&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="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="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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">TYPE_MAPPING</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">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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span 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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span 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-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span 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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span 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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span 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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span 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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span 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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span 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-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="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
-</span><span id="L-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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</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">Create</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">_transform_create</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">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-110"><a href="#L-110"><span class="linenos">110</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-111"><a href="#L-111"><span class="linenos">111</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-112"><a href="#L-112"><span class="linenos">112</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-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-125"><a href="#L-125"><span class="linenos">125</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-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">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-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="p">}</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">PROPERTIES_LOCATION</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="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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</span></a> <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">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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">is_type</span><span class="p">(</span><span class="s2">&quot;date&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="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-142"><a href="#L-142"><span class="linenos">142</span></a>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">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-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">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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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-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">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-150"><a href="#L-150"><span class="linenos">150</span></a>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</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;</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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-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;</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-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</span></a>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="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-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="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</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-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">if</span> <span class="n">distinct</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">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-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">distinct_sql</span> <span class="o">=</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">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-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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-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="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-189"><a href="#L-189"><span class="linenos">189</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_sql</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-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">class</span> <span class="nc">SQLite</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="c1"># https://sqlite.org/forum/forumpost/5e575586ac5c711b?raw</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</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">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-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</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 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-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">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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">FUNCTIONS</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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;EDITDIST3&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="o">.</span><span class="n">from_arg_list</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="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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</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">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span 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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span 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-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span 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-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span 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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span 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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span 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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span 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-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span 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-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">exp</span><span 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-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><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="p">}</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">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-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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">_transform_create</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">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-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</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">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-128"><a href="#L-128"><span class="linenos">128</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-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">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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</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-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><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">PROPERTIES_LOCATION</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="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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</span></a> <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">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&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="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-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">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-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">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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</span></a>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">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-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">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-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-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;</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-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-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;</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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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-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="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-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="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-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">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</span></a>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="nf">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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</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-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">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-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">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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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_sql</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-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">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-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</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-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="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-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">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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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>
@@ -454,144 +460,146 @@
</div>
<a class="headerlink" href="#SQLite"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite-64"><a href="#SQLite-64"><span class="linenos"> 64</span></a><span class="k">class</span> <span class="nc">SQLite</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="SQLite-65"><a href="#SQLite-65"><span class="linenos"> 65</span></a> <span class="c1"># https://sqlite.org/forum/forumpost/5e575586ac5c711b?raw</span>
-</span><span id="SQLite-66"><a href="#SQLite-66"><span class="linenos"> 66</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="SQLite-67"><a href="#SQLite-67"><span class="linenos"> 67</span></a>
-</span><span id="SQLite-68"><a href="#SQLite-68"><span class="linenos"> 68</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="SQLite-69"><a href="#SQLite-69"><span class="linenos"> 69</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="SQLite-70"><a href="#SQLite-70"><span class="linenos"> 70</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 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="SQLite-71"><a href="#SQLite-71"><span class="linenos"> 71</span></a>
-</span><span id="SQLite-72"><a href="#SQLite-72"><span class="linenos"> 72</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="SQLite-73"><a href="#SQLite-73"><span class="linenos"> 73</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite-74"><a href="#SQLite-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">FUNCTIONS</span><span class="p">,</span>
-</span><span id="SQLite-75"><a href="#SQLite-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;EDITDIST3&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="SQLite-76"><a href="#SQLite-76"><span class="linenos"> 76</span></a> <span class="p">}</span>
-</span><span id="SQLite-77"><a href="#SQLite-77"><span class="linenos"> 77</span></a>
-</span><span id="SQLite-78"><a href="#SQLite-78"><span class="linenos"> 78</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="SQLite-79"><a href="#SQLite-79"><span class="linenos"> 79</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="SQLite-80"><a href="#SQLite-80"><span class="linenos"> 80</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="SQLite-81"><a href="#SQLite-81"><span class="linenos"> 81</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="SQLite-82"><a href="#SQLite-82"><span class="linenos"> 82</span></a>
-</span><span id="SQLite-83"><a href="#SQLite-83"><span class="linenos"> 83</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite-84"><a href="#SQLite-84"><span class="linenos"> 84</span></a> <span 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="SQLite-85"><a href="#SQLite-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite-86"><a href="#SQLite-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite-87"><a href="#SQLite-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite-88"><a href="#SQLite-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite-89"><a href="#SQLite-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite-90"><a href="#SQLite-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="SQLite-91"><a href="#SQLite-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="SQLite-92"><a href="#SQLite-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="SQLite-93"><a href="#SQLite-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite-94"><a href="#SQLite-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite-95"><a href="#SQLite-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite-96"><a href="#SQLite-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite-97"><a href="#SQLite-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="SQLite-98"><a href="#SQLite-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="SQLite-99"><a href="#SQLite-99"><span class="linenos"> 99</span></a> <span class="p">}</span>
-</span><span id="SQLite-100"><a href="#SQLite-100"><span class="linenos">100</span></a>
-</span><span id="SQLite-101"><a href="#SQLite-101"><span class="linenos">101</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite-102"><a href="#SQLite-102"><span class="linenos">102</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
-</span><span id="SQLite-103"><a href="#SQLite-103"><span class="linenos">103</span></a> <span class="p">}</span>
-</span><span id="SQLite-104"><a href="#SQLite-104"><span class="linenos">104</span></a>
-</span><span id="SQLite-105"><a href="#SQLite-105"><span class="linenos">105</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite-106"><a href="#SQLite-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">TRANSFORMS</span><span class="p">,</span>
-</span><span id="SQLite-107"><a href="#SQLite-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="SQLite-108"><a href="#SQLite-108"><span class="linenos">108</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-109"><a href="#SQLite-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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">_transform_create</span><span class="p">]),</span>
-</span><span id="SQLite-110"><a href="#SQLite-110"><span class="linenos">110</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-111"><a href="#SQLite-111"><span class="linenos">111</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-112"><a href="#SQLite-112"><span class="linenos">112</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-113"><a href="#SQLite-113"><span class="linenos">113</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-114"><a href="#SQLite-114"><span class="linenos">114</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-115"><a href="#SQLite-115"><span class="linenos">115</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-116"><a href="#SQLite-116"><span class="linenos">116</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-117"><a href="#SQLite-117"><span class="linenos">117</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-118"><a href="#SQLite-118"><span class="linenos">118</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-119"><a href="#SQLite-119"><span class="linenos">119</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-120"><a href="#SQLite-120"><span class="linenos">120</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-121"><a href="#SQLite-121"><span class="linenos">121</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-122"><a href="#SQLite-122"><span class="linenos">122</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-123"><a href="#SQLite-123"><span class="linenos">123</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="SQLite-124"><a href="#SQLite-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="SQLite-125"><a href="#SQLite-125"><span class="linenos">125</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-126"><a href="#SQLite-126"><span class="linenos">126</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-127"><a href="#SQLite-127"><span class="linenos">127</span></a> <span class="p">),</span>
-</span><span id="SQLite-128"><a href="#SQLite-128"><span class="linenos">128</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-129"><a href="#SQLite-129"><span class="linenos">129</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-130"><a href="#SQLite-130"><span class="linenos">130</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-131"><a href="#SQLite-131"><span class="linenos">131</span></a> <span class="p">}</span>
-</span><span id="SQLite-132"><a href="#SQLite-132"><span class="linenos">132</span></a>
-</span><span id="SQLite-133"><a href="#SQLite-133"><span class="linenos">133</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite-134"><a href="#SQLite-134"><span class="linenos">134</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-135"><a href="#SQLite-135"><span class="linenos">135</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-136"><a href="#SQLite-136"><span class="linenos">136</span></a> <span class="p">}</span>
-</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</span></a>
-</span><span id="SQLite-138"><a href="#SQLite-138"><span class="linenos">138</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="SQLite-139"><a href="#SQLite-139"><span class="linenos">139</span></a>
-</span><span id="SQLite-140"><a href="#SQLite-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="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">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
-</span><span id="SQLite-142"><a href="#SQLite-142"><span class="linenos">142</span></a> <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-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="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-145"><a href="#SQLite-145"><span class="linenos">145</span></a>
-</span><span id="SQLite-146"><a href="#SQLite-146"><span class="linenos">146</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-147"><a href="#SQLite-147"><span class="linenos">147</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-148"><a href="#SQLite-148"><span class="linenos">148</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-149"><a href="#SQLite-149"><span class="linenos">149</span></a>
-</span><span id="SQLite-150"><a href="#SQLite-150"><span class="linenos">150</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-151"><a href="#SQLite-151"><span class="linenos">151</span></a>
-</span><span id="SQLite-152"><a href="#SQLite-152"><span class="linenos">152</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-153"><a href="#SQLite-153"><span class="linenos">153</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-154"><a href="#SQLite-154"><span class="linenos">154</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-155"><a href="#SQLite-155"><span class="linenos">155</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-156"><a href="#SQLite-156"><span class="linenos">156</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-157"><a href="#SQLite-157"><span class="linenos">157</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-158"><a href="#SQLite-158"><span class="linenos">158</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-159"><a href="#SQLite-159"><span class="linenos">159</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-160"><a href="#SQLite-160"><span class="linenos">160</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-161"><a href="#SQLite-161"><span class="linenos">161</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-162"><a href="#SQLite-162"><span class="linenos">162</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-163"><a href="#SQLite-163"><span class="linenos">163</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-164"><a href="#SQLite-164"><span class="linenos">164</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-165"><a href="#SQLite-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;</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-166"><a href="#SQLite-166"><span class="linenos">166</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-167"><a href="#SQLite-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;</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-168"><a href="#SQLite-168"><span class="linenos">168</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite-169"><a href="#SQLite-169"><span class="linenos">169</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-170"><a href="#SQLite-170"><span class="linenos">170</span></a>
-</span><span id="SQLite-171"><a href="#SQLite-171"><span class="linenos">171</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-172"><a href="#SQLite-172"><span class="linenos">172</span></a>
-</span><span id="SQLite-173"><a href="#SQLite-173"><span class="linenos">173</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
-</span><span id="SQLite-174"><a href="#SQLite-174"><span class="linenos">174</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite-175"><a href="#SQLite-175"><span class="linenos">175</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-176"><a href="#SQLite-176"><span class="linenos">176</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-177"><a href="#SQLite-177"><span class="linenos">177</span></a>
-</span><span id="SQLite-178"><a href="#SQLite-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite-179"><a href="#SQLite-179"><span class="linenos">179</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-180"><a href="#SQLite-180"><span class="linenos">180</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="SQLite-181"><a href="#SQLite-181"><span class="linenos">181</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite-182"><a href="#SQLite-182"><span class="linenos">182</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="SQLite-183"><a href="#SQLite-183"><span class="linenos">183</span></a>
-</span><span id="SQLite-184"><a href="#SQLite-184"><span class="linenos">184</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-185"><a href="#SQLite-185"><span class="linenos">185</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-186"><a href="#SQLite-186"><span class="linenos">186</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-187"><a href="#SQLite-187"><span class="linenos">187</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-188"><a href="#SQLite-188"><span class="linenos">188</span></a>
-</span><span id="SQLite-189"><a href="#SQLite-189"><span class="linenos">189</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-190"><a href="#SQLite-190"><span class="linenos">190</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_sql</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-65"><a href="#SQLite-65"><span class="linenos"> 65</span></a><span class="k">class</span> <span class="nc">SQLite</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="SQLite-66"><a href="#SQLite-66"><span class="linenos"> 66</span></a> <span class="c1"># https://sqlite.org/forum/forumpost/5e575586ac5c711b?raw</span>
+</span><span id="SQLite-67"><a href="#SQLite-67"><span class="linenos"> 67</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="SQLite-68"><a href="#SQLite-68"><span class="linenos"> 68</span></a>
+</span><span id="SQLite-69"><a href="#SQLite-69"><span class="linenos"> 69</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="SQLite-70"><a href="#SQLite-70"><span class="linenos"> 70</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="SQLite-71"><a href="#SQLite-71"><span class="linenos"> 71</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 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="SQLite-72"><a href="#SQLite-72"><span class="linenos"> 72</span></a>
+</span><span id="SQLite-73"><a href="#SQLite-73"><span class="linenos"> 73</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="SQLite-74"><a href="#SQLite-74"><span class="linenos"> 74</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite-75"><a href="#SQLite-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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="SQLite-76"><a href="#SQLite-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;EDITDIST3&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="SQLite-77"><a href="#SQLite-77"><span class="linenos"> 77</span></a> <span class="p">}</span>
+</span><span id="SQLite-78"><a href="#SQLite-78"><span class="linenos"> 78</span></a>
+</span><span id="SQLite-79"><a href="#SQLite-79"><span class="linenos"> 79</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="SQLite-80"><a href="#SQLite-80"><span class="linenos"> 80</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite-81"><a href="#SQLite-81"><span class="linenos"> 81</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite-82"><a href="#SQLite-82"><span class="linenos"> 82</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite-83"><a href="#SQLite-83"><span class="linenos"> 83</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite-84"><a href="#SQLite-84"><span class="linenos"> 84</span></a>
+</span><span id="SQLite-85"><a href="#SQLite-85"><span class="linenos"> 85</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite-86"><a href="#SQLite-86"><span class="linenos"> 86</span></a> <span 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="SQLite-87"><a href="#SQLite-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite-88"><a href="#SQLite-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite-89"><a href="#SQLite-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite-90"><a href="#SQLite-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite-91"><a href="#SQLite-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite-92"><a href="#SQLite-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="SQLite-93"><a href="#SQLite-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="SQLite-94"><a href="#SQLite-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="SQLite-95"><a href="#SQLite-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite-96"><a href="#SQLite-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite-97"><a href="#SQLite-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite-98"><a href="#SQLite-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite-99"><a href="#SQLite-99"><span class="linenos"> 99</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="SQLite-100"><a href="#SQLite-100"><span class="linenos">100</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="SQLite-101"><a href="#SQLite-101"><span class="linenos">101</span></a> <span class="p">}</span>
+</span><span id="SQLite-102"><a href="#SQLite-102"><span class="linenos">102</span></a>
+</span><span id="SQLite-103"><a href="#SQLite-103"><span class="linenos">103</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite-104"><a href="#SQLite-104"><span class="linenos">104</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
+</span><span id="SQLite-105"><a href="#SQLite-105"><span class="linenos">105</span></a> <span class="p">}</span>
+</span><span id="SQLite-106"><a href="#SQLite-106"><span class="linenos">106</span></a>
+</span><span id="SQLite-107"><a href="#SQLite-107"><span class="linenos">107</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite-108"><a href="#SQLite-108"><span class="linenos">108</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="SQLite-109"><a href="#SQLite-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="SQLite-110"><a href="#SQLite-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="SQLite-111"><a href="#SQLite-111"><span class="linenos">111</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-112"><a href="#SQLite-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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">_transform_create</span><span class="p">]),</span>
+</span><span id="SQLite-113"><a href="#SQLite-113"><span class="linenos">113</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-114"><a href="#SQLite-114"><span class="linenos">114</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-115"><a href="#SQLite-115"><span class="linenos">115</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-116"><a href="#SQLite-116"><span class="linenos">116</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-117"><a href="#SQLite-117"><span class="linenos">117</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-118"><a href="#SQLite-118"><span class="linenos">118</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-119"><a href="#SQLite-119"><span class="linenos">119</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-120"><a href="#SQLite-120"><span class="linenos">120</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-121"><a href="#SQLite-121"><span class="linenos">121</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-122"><a href="#SQLite-122"><span class="linenos">122</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-123"><a href="#SQLite-123"><span class="linenos">123</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-124"><a href="#SQLite-124"><span class="linenos">124</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-125"><a href="#SQLite-125"><span class="linenos">125</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-126"><a href="#SQLite-126"><span class="linenos">126</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="SQLite-127"><a href="#SQLite-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="SQLite-128"><a href="#SQLite-128"><span class="linenos">128</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-129"><a href="#SQLite-129"><span class="linenos">129</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-130"><a href="#SQLite-130"><span class="linenos">130</span></a> <span class="p">),</span>
+</span><span id="SQLite-131"><a href="#SQLite-131"><span class="linenos">131</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-132"><a href="#SQLite-132"><span class="linenos">132</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-133"><a href="#SQLite-133"><span class="linenos">133</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-134"><a href="#SQLite-134"><span class="linenos">134</span></a> <span class="p">}</span>
+</span><span id="SQLite-135"><a href="#SQLite-135"><span class="linenos">135</span></a>
+</span><span id="SQLite-136"><a href="#SQLite-136"><span class="linenos">136</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</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-138"><a href="#SQLite-138"><span class="linenos">138</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-139"><a href="#SQLite-139"><span class="linenos">139</span></a> <span class="p">}</span>
+</span><span id="SQLite-140"><a href="#SQLite-140"><span class="linenos">140</span></a>
+</span><span id="SQLite-141"><a href="#SQLite-141"><span class="linenos">141</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="SQLite-142"><a href="#SQLite-142"><span class="linenos">142</span></a>
+</span><span id="SQLite-143"><a href="#SQLite-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite-144"><a href="#SQLite-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&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="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-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">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-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">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-150"><a href="#SQLite-150"><span class="linenos">150</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-151"><a href="#SQLite-151"><span class="linenos">151</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-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="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-154"><a href="#SQLite-154"><span class="linenos">154</span></a>
+</span><span id="SQLite-155"><a href="#SQLite-155"><span class="linenos">155</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-156"><a href="#SQLite-156"><span class="linenos">156</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-157"><a href="#SQLite-157"><span class="linenos">157</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-158"><a href="#SQLite-158"><span class="linenos">158</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-159"><a href="#SQLite-159"><span class="linenos">159</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-160"><a href="#SQLite-160"><span class="linenos">160</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-161"><a href="#SQLite-161"><span class="linenos">161</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-162"><a href="#SQLite-162"><span class="linenos">162</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-163"><a href="#SQLite-163"><span class="linenos">163</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-164"><a href="#SQLite-164"><span class="linenos">164</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-165"><a href="#SQLite-165"><span class="linenos">165</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-166"><a href="#SQLite-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;</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-167"><a href="#SQLite-167"><span class="linenos">167</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-168"><a href="#SQLite-168"><span class="linenos">168</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-169"><a href="#SQLite-169"><span class="linenos">169</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-170"><a href="#SQLite-170"><span class="linenos">170</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-171"><a href="#SQLite-171"><span class="linenos">171</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite-172"><a href="#SQLite-172"><span class="linenos">172</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-173"><a href="#SQLite-173"><span class="linenos">173</span></a>
+</span><span id="SQLite-174"><a href="#SQLite-174"><span class="linenos">174</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-175"><a href="#SQLite-175"><span class="linenos">175</span></a>
+</span><span id="SQLite-176"><a href="#SQLite-176"><span class="linenos">176</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
+</span><span id="SQLite-177"><a href="#SQLite-177"><span class="linenos">177</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite-178"><a href="#SQLite-178"><span class="linenos">178</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-179"><a href="#SQLite-179"><span class="linenos">179</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-180"><a href="#SQLite-180"><span class="linenos">180</span></a>
+</span><span id="SQLite-181"><a href="#SQLite-181"><span class="linenos">181</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite-182"><a href="#SQLite-182"><span class="linenos">182</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-183"><a href="#SQLite-183"><span class="linenos">183</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="SQLite-184"><a href="#SQLite-184"><span class="linenos">184</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite-185"><a href="#SQLite-185"><span class="linenos">185</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="SQLite-186"><a href="#SQLite-186"><span class="linenos">186</span></a>
+</span><span id="SQLite-187"><a href="#SQLite-187"><span class="linenos">187</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-188"><a href="#SQLite-188"><span class="linenos">188</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-189"><a href="#SQLite-189"><span class="linenos">189</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-190"><a href="#SQLite-190"><span class="linenos">190</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-191"><a href="#SQLite-191"><span class="linenos">191</span></a>
-</span><span id="SQLite-192"><a href="#SQLite-192"><span class="linenos">192</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-193"><a href="#SQLite-193"><span class="linenos">193</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-194"><a href="#SQLite-194"><span class="linenos">194</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-195"><a href="#SQLite-195"><span class="linenos">195</span></a>
-</span><span id="SQLite-196"><a href="#SQLite-196"><span class="linenos">196</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="SQLite-197"><a href="#SQLite-197"><span class="linenos">197</span></a>
-</span><span id="SQLite-198"><a href="#SQLite-198"><span class="linenos">198</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-199"><a href="#SQLite-199"><span class="linenos">199</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-200"><a href="#SQLite-200"><span class="linenos">200</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-201"><a href="#SQLite-201"><span class="linenos">201</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-192"><a href="#SQLite-192"><span class="linenos">192</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-193"><a href="#SQLite-193"><span class="linenos">193</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_sql</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-194"><a href="#SQLite-194"><span class="linenos">194</span></a>
+</span><span id="SQLite-195"><a href="#SQLite-195"><span class="linenos">195</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-196"><a href="#SQLite-196"><span class="linenos">196</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-197"><a href="#SQLite-197"><span class="linenos">197</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-198"><a href="#SQLite-198"><span class="linenos">198</span></a>
+</span><span id="SQLite-199"><a href="#SQLite-199"><span class="linenos">199</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="SQLite-200"><a href="#SQLite-200"><span class="linenos">200</span></a>
+</span><span id="SQLite-201"><a href="#SQLite-201"><span class="linenos">201</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-202"><a href="#SQLite-202"><span class="linenos">202</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-203"><a href="#SQLite-203"><span class="linenos">203</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-204"><a href="#SQLite-204"><span class="linenos">204</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>
@@ -821,6 +829,7 @@
<dd id="SQLite.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="SQLite.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="SQLite.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="SQLite.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="SQLite.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="SQLite.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="SQLite.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -860,9 +869,9 @@
</div>
<a class="headerlink" href="#SQLite.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Tokenizer-68"><a href="#SQLite.Tokenizer-68"><span class="linenos">68</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="SQLite.Tokenizer-69"><a href="#SQLite.Tokenizer-69"><span class="linenos">69</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="SQLite.Tokenizer-70"><a href="#SQLite.Tokenizer-70"><span class="linenos">70</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 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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Tokenizer-69"><a href="#SQLite.Tokenizer-69"><span class="linenos">69</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="SQLite.Tokenizer-70"><a href="#SQLite.Tokenizer-70"><span class="linenos">70</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="SQLite.Tokenizer-71"><a href="#SQLite.Tokenizer-71"><span class="linenos">71</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 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></pre></div>
@@ -934,11 +943,11 @@
</div>
<a class="headerlink" href="#SQLite.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Parser-72"><a href="#SQLite.Parser-72"><span class="linenos">72</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="SQLite.Parser-73"><a href="#SQLite.Parser-73"><span class="linenos">73</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite.Parser-74"><a href="#SQLite.Parser-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">FUNCTIONS</span><span class="p">,</span>
-</span><span id="SQLite.Parser-75"><a href="#SQLite.Parser-75"><span class="linenos">75</span></a> <span class="s2">&quot;EDITDIST3&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="SQLite.Parser-76"><a href="#SQLite.Parser-76"><span class="linenos">76</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Parser-73"><a href="#SQLite.Parser-73"><span class="linenos">73</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="SQLite.Parser-74"><a href="#SQLite.Parser-74"><span class="linenos">74</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite.Parser-75"><a href="#SQLite.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">FUNCTIONS</span><span class="p">,</span>
+</span><span id="SQLite.Parser-76"><a href="#SQLite.Parser-76"><span class="linenos">76</span></a> <span class="s2">&quot;EDITDIST3&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="SQLite.Parser-77"><a href="#SQLite.Parser-77"><span class="linenos">77</span></a> <span class="p">}</span>
</span></pre></div>
@@ -963,7 +972,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="SQLite.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="SQLite.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;EDITDIST3&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="SQLite.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;EDITDIST3&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;}</span>
</div>
@@ -972,6 +981,18 @@ Default: 3</li>
</div>
+ <div id="SQLite.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#SQLite.Tokenizer">sqlglot.dialects.sqlite.SQLite.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#SQLite.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="SQLite.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -1026,6 +1047,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="SQLite.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="SQLite.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="SQLite.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="SQLite.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="SQLite.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="SQLite.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1046,6 +1068,7 @@ Default: 3</li>
<dd id="SQLite.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="SQLite.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="SQLite.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="SQLite.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="SQLite.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="SQLite.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="SQLite.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1065,6 +1088,7 @@ Default: 3</li>
<dd id="SQLite.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="SQLite.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="SQLite.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="SQLite.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="SQLite.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="SQLite.Parser.FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
<dd id="SQLite.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
@@ -1083,12 +1107,15 @@ Default: 3</li>
<dd id="SQLite.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="SQLite.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="SQLite.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="SQLite.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="SQLite.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="SQLite.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="SQLite.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="SQLite.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="SQLite.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="SQLite.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="SQLite.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="SQLite.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="SQLite.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="SQLite.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="SQLite.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -1125,130 +1152,132 @@ Default: 3</li>
</div>
<a class="headerlink" href="#SQLite.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator-78"><a href="#SQLite.Generator-78"><span class="linenos"> 78</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="SQLite.Generator-79"><a href="#SQLite.Generator-79"><span class="linenos"> 79</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="SQLite.Generator-80"><a href="#SQLite.Generator-80"><span class="linenos"> 80</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="SQLite.Generator-81"><a href="#SQLite.Generator-81"><span class="linenos"> 81</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="SQLite.Generator-82"><a href="#SQLite.Generator-82"><span class="linenos"> 82</span></a>
-</span><span id="SQLite.Generator-83"><a href="#SQLite.Generator-83"><span class="linenos"> 83</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite.Generator-84"><a href="#SQLite.Generator-84"><span class="linenos"> 84</span></a> <span 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="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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-86"><a href="#SQLite.Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-87"><a href="#SQLite.Generator-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-88"><a href="#SQLite.Generator-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-89"><a href="#SQLite.Generator-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-90"><a href="#SQLite.Generator-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-91"><a href="#SQLite.Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-92"><a href="#SQLite.Generator-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-93"><a href="#SQLite.Generator-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-94"><a href="#SQLite.Generator-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-95"><a href="#SQLite.Generator-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-96"><a href="#SQLite.Generator-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-97"><a href="#SQLite.Generator-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-98"><a href="#SQLite.Generator-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-99"><a href="#SQLite.Generator-99"><span class="linenos"> 99</span></a> <span class="p">}</span>
-</span><span id="SQLite.Generator-100"><a href="#SQLite.Generator-100"><span class="linenos">100</span></a>
-</span><span id="SQLite.Generator-101"><a href="#SQLite.Generator-101"><span class="linenos">101</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite.Generator-102"><a href="#SQLite.Generator-102"><span class="linenos">102</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-103"><a href="#SQLite.Generator-103"><span class="linenos">103</span></a> <span class="p">}</span>
-</span><span id="SQLite.Generator-104"><a href="#SQLite.Generator-104"><span class="linenos">104</span></a>
-</span><span id="SQLite.Generator-105"><a href="#SQLite.Generator-105"><span class="linenos">105</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite.Generator-106"><a href="#SQLite.Generator-106"><span class="linenos">106</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="SQLite.Generator-107"><a href="#SQLite.Generator-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-108"><a href="#SQLite.Generator-108"><span class="linenos">108</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-109"><a href="#SQLite.Generator-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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">_transform_create</span><span class="p">]),</span>
-</span><span id="SQLite.Generator-110"><a href="#SQLite.Generator-110"><span class="linenos">110</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-111"><a href="#SQLite.Generator-111"><span class="linenos">111</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-112"><a href="#SQLite.Generator-112"><span class="linenos">112</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-113"><a href="#SQLite.Generator-113"><span class="linenos">113</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-114"><a href="#SQLite.Generator-114"><span class="linenos">114</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-115"><a href="#SQLite.Generator-115"><span class="linenos">115</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-116"><a href="#SQLite.Generator-116"><span class="linenos">116</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-117"><a href="#SQLite.Generator-117"><span class="linenos">117</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-118"><a href="#SQLite.Generator-118"><span class="linenos">118</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-119"><a href="#SQLite.Generator-119"><span class="linenos">119</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-120"><a href="#SQLite.Generator-120"><span class="linenos">120</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-121"><a href="#SQLite.Generator-121"><span class="linenos">121</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-122"><a href="#SQLite.Generator-122"><span class="linenos">122</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-123"><a href="#SQLite.Generator-123"><span class="linenos">123</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="SQLite.Generator-124"><a href="#SQLite.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</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">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-126"><a href="#SQLite.Generator-126"><span class="linenos">126</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-127"><a href="#SQLite.Generator-127"><span class="linenos">127</span></a> <span class="p">),</span>
-</span><span id="SQLite.Generator-128"><a href="#SQLite.Generator-128"><span class="linenos">128</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-129"><a href="#SQLite.Generator-129"><span class="linenos">129</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-130"><a href="#SQLite.Generator-130"><span class="linenos">130</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-131"><a href="#SQLite.Generator-131"><span class="linenos">131</span></a> <span class="p">}</span>
-</span><span id="SQLite.Generator-132"><a href="#SQLite.Generator-132"><span class="linenos">132</span></a>
-</span><span id="SQLite.Generator-133"><a href="#SQLite.Generator-133"><span class="linenos">133</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</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">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-135"><a href="#SQLite.Generator-135"><span class="linenos">135</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-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a> <span class="p">}</span>
-</span><span id="SQLite.Generator-137"><a href="#SQLite.Generator-137"><span class="linenos">137</span></a>
-</span><span id="SQLite.Generator-138"><a href="#SQLite.Generator-138"><span class="linenos">138</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="SQLite.Generator-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a>
-</span><span id="SQLite.Generator-140"><a href="#SQLite.Generator-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="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">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
-</span><span id="SQLite.Generator-142"><a href="#SQLite.Generator-142"><span class="linenos">142</span></a> <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-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="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-145"><a href="#SQLite.Generator-145"><span class="linenos">145</span></a>
-</span><span id="SQLite.Generator-146"><a href="#SQLite.Generator-146"><span class="linenos">146</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-147"><a href="#SQLite.Generator-147"><span class="linenos">147</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-148"><a href="#SQLite.Generator-148"><span class="linenos">148</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-149"><a href="#SQLite.Generator-149"><span class="linenos">149</span></a>
-</span><span id="SQLite.Generator-150"><a href="#SQLite.Generator-150"><span class="linenos">150</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-151"><a href="#SQLite.Generator-151"><span class="linenos">151</span></a>
-</span><span id="SQLite.Generator-152"><a href="#SQLite.Generator-152"><span class="linenos">152</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-153"><a href="#SQLite.Generator-153"><span class="linenos">153</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-154"><a href="#SQLite.Generator-154"><span class="linenos">154</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-155"><a href="#SQLite.Generator-155"><span class="linenos">155</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-156"><a href="#SQLite.Generator-156"><span class="linenos">156</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-157"><a href="#SQLite.Generator-157"><span class="linenos">157</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-158"><a href="#SQLite.Generator-158"><span class="linenos">158</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-159"><a href="#SQLite.Generator-159"><span class="linenos">159</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-160"><a href="#SQLite.Generator-160"><span class="linenos">160</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-161"><a href="#SQLite.Generator-161"><span class="linenos">161</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-162"><a href="#SQLite.Generator-162"><span class="linenos">162</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-163"><a href="#SQLite.Generator-163"><span class="linenos">163</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-164"><a href="#SQLite.Generator-164"><span class="linenos">164</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-165"><a href="#SQLite.Generator-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;</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-166"><a href="#SQLite.Generator-166"><span class="linenos">166</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-167"><a href="#SQLite.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;</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-168"><a href="#SQLite.Generator-168"><span class="linenos">168</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite.Generator-169"><a href="#SQLite.Generator-169"><span class="linenos">169</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-170"><a href="#SQLite.Generator-170"><span class="linenos">170</span></a>
-</span><span id="SQLite.Generator-171"><a href="#SQLite.Generator-171"><span class="linenos">171</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-172"><a href="#SQLite.Generator-172"><span class="linenos">172</span></a>
-</span><span id="SQLite.Generator-173"><a href="#SQLite.Generator-173"><span class="linenos">173</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
-</span><span id="SQLite.Generator-174"><a href="#SQLite.Generator-174"><span class="linenos">174</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator-175"><a href="#SQLite.Generator-175"><span class="linenos">175</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-176"><a href="#SQLite.Generator-176"><span class="linenos">176</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-177"><a href="#SQLite.Generator-177"><span class="linenos">177</span></a>
-</span><span id="SQLite.Generator-178"><a href="#SQLite.Generator-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite.Generator-179"><a href="#SQLite.Generator-179"><span class="linenos">179</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-180"><a href="#SQLite.Generator-180"><span class="linenos">180</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="SQLite.Generator-181"><a href="#SQLite.Generator-181"><span class="linenos">181</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite.Generator-182"><a href="#SQLite.Generator-182"><span class="linenos">182</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="SQLite.Generator-183"><a href="#SQLite.Generator-183"><span class="linenos">183</span></a>
-</span><span id="SQLite.Generator-184"><a href="#SQLite.Generator-184"><span class="linenos">184</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-185"><a href="#SQLite.Generator-185"><span class="linenos">185</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-186"><a href="#SQLite.Generator-186"><span class="linenos">186</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-187"><a href="#SQLite.Generator-187"><span class="linenos">187</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-188"><a href="#SQLite.Generator-188"><span class="linenos">188</span></a>
-</span><span id="SQLite.Generator-189"><a href="#SQLite.Generator-189"><span class="linenos">189</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-190"><a href="#SQLite.Generator-190"><span class="linenos">190</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_sql</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-79"><a href="#SQLite.Generator-79"><span class="linenos"> 79</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="SQLite.Generator-80"><a href="#SQLite.Generator-80"><span class="linenos"> 80</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite.Generator-81"><a href="#SQLite.Generator-81"><span class="linenos"> 81</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite.Generator-82"><a href="#SQLite.Generator-82"><span class="linenos"> 82</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite.Generator-83"><a href="#SQLite.Generator-83"><span class="linenos"> 83</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="SQLite.Generator-84"><a href="#SQLite.Generator-84"><span class="linenos"> 84</span></a>
+</span><span id="SQLite.Generator-85"><a href="#SQLite.Generator-85"><span class="linenos"> 85</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite.Generator-86"><a href="#SQLite.Generator-86"><span class="linenos"> 86</span></a> <span 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="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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-88"><a href="#SQLite.Generator-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-89"><a href="#SQLite.Generator-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-90"><a href="#SQLite.Generator-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-91"><a href="#SQLite.Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-92"><a href="#SQLite.Generator-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-93"><a href="#SQLite.Generator-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-94"><a href="#SQLite.Generator-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-95"><a href="#SQLite.Generator-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-96"><a href="#SQLite.Generator-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-97"><a href="#SQLite.Generator-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-98"><a href="#SQLite.Generator-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-99"><a href="#SQLite.Generator-99"><span class="linenos"> 99</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-100"><a href="#SQLite.Generator-100"><span class="linenos">100</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-101"><a href="#SQLite.Generator-101"><span class="linenos">101</span></a> <span class="p">}</span>
+</span><span id="SQLite.Generator-102"><a href="#SQLite.Generator-102"><span class="linenos">102</span></a>
+</span><span id="SQLite.Generator-103"><a href="#SQLite.Generator-103"><span class="linenos">103</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</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">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-105"><a href="#SQLite.Generator-105"><span class="linenos">105</span></a> <span class="p">}</span>
+</span><span id="SQLite.Generator-106"><a href="#SQLite.Generator-106"><span class="linenos">106</span></a>
+</span><span id="SQLite.Generator-107"><a href="#SQLite.Generator-107"><span class="linenos">107</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite.Generator-108"><a href="#SQLite.Generator-108"><span class="linenos">108</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</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">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-110"><a href="#SQLite.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-111"><a href="#SQLite.Generator-111"><span class="linenos">111</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-112"><a href="#SQLite.Generator-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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">_transform_create</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">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-114"><a href="#SQLite.Generator-114"><span class="linenos">114</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-115"><a href="#SQLite.Generator-115"><span class="linenos">115</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-116"><a href="#SQLite.Generator-116"><span class="linenos">116</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-117"><a href="#SQLite.Generator-117"><span class="linenos">117</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-118"><a href="#SQLite.Generator-118"><span class="linenos">118</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-119"><a href="#SQLite.Generator-119"><span class="linenos">119</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-120"><a href="#SQLite.Generator-120"><span class="linenos">120</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-121"><a href="#SQLite.Generator-121"><span class="linenos">121</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-122"><a href="#SQLite.Generator-122"><span class="linenos">122</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-123"><a href="#SQLite.Generator-123"><span class="linenos">123</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-124"><a href="#SQLite.Generator-124"><span class="linenos">124</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-125"><a href="#SQLite.Generator-125"><span class="linenos">125</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-126"><a href="#SQLite.Generator-126"><span class="linenos">126</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="SQLite.Generator-127"><a href="#SQLite.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-128"><a href="#SQLite.Generator-128"><span class="linenos">128</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-129"><a href="#SQLite.Generator-129"><span class="linenos">129</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-130"><a href="#SQLite.Generator-130"><span class="linenos">130</span></a> <span class="p">),</span>
+</span><span id="SQLite.Generator-131"><a href="#SQLite.Generator-131"><span class="linenos">131</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-132"><a href="#SQLite.Generator-132"><span class="linenos">132</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-133"><a href="#SQLite.Generator-133"><span class="linenos">133</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-134"><a href="#SQLite.Generator-134"><span class="linenos">134</span></a> <span class="p">}</span>
+</span><span id="SQLite.Generator-135"><a href="#SQLite.Generator-135"><span class="linenos">135</span></a>
+</span><span id="SQLite.Generator-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</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">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-138"><a href="#SQLite.Generator-138"><span class="linenos">138</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-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a> <span class="p">}</span>
+</span><span id="SQLite.Generator-140"><a href="#SQLite.Generator-140"><span class="linenos">140</span></a>
+</span><span id="SQLite.Generator-141"><a href="#SQLite.Generator-141"><span class="linenos">141</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="SQLite.Generator-142"><a href="#SQLite.Generator-142"><span class="linenos">142</span></a>
+</span><span id="SQLite.Generator-143"><a href="#SQLite.Generator-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator-144"><a href="#SQLite.Generator-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&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="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-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">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-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">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-150"><a href="#SQLite.Generator-150"><span class="linenos">150</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-151"><a href="#SQLite.Generator-151"><span class="linenos">151</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-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="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-154"><a href="#SQLite.Generator-154"><span class="linenos">154</span></a>
+</span><span id="SQLite.Generator-155"><a href="#SQLite.Generator-155"><span class="linenos">155</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-156"><a href="#SQLite.Generator-156"><span class="linenos">156</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-157"><a href="#SQLite.Generator-157"><span class="linenos">157</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-158"><a href="#SQLite.Generator-158"><span class="linenos">158</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-159"><a href="#SQLite.Generator-159"><span class="linenos">159</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-160"><a href="#SQLite.Generator-160"><span class="linenos">160</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-161"><a href="#SQLite.Generator-161"><span class="linenos">161</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-162"><a href="#SQLite.Generator-162"><span class="linenos">162</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-163"><a href="#SQLite.Generator-163"><span class="linenos">163</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-164"><a href="#SQLite.Generator-164"><span class="linenos">164</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-165"><a href="#SQLite.Generator-165"><span class="linenos">165</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-166"><a href="#SQLite.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;</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-167"><a href="#SQLite.Generator-167"><span class="linenos">167</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-168"><a href="#SQLite.Generator-168"><span class="linenos">168</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-169"><a href="#SQLite.Generator-169"><span class="linenos">169</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-170"><a href="#SQLite.Generator-170"><span class="linenos">170</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-171"><a href="#SQLite.Generator-171"><span class="linenos">171</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite.Generator-172"><a href="#SQLite.Generator-172"><span class="linenos">172</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-173"><a href="#SQLite.Generator-173"><span class="linenos">173</span></a>
+</span><span id="SQLite.Generator-174"><a href="#SQLite.Generator-174"><span class="linenos">174</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-175"><a href="#SQLite.Generator-175"><span class="linenos">175</span></a>
+</span><span id="SQLite.Generator-176"><a href="#SQLite.Generator-176"><span class="linenos">176</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
+</span><span id="SQLite.Generator-177"><a href="#SQLite.Generator-177"><span class="linenos">177</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator-178"><a href="#SQLite.Generator-178"><span class="linenos">178</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-179"><a href="#SQLite.Generator-179"><span class="linenos">179</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-180"><a href="#SQLite.Generator-180"><span class="linenos">180</span></a>
+</span><span id="SQLite.Generator-181"><a href="#SQLite.Generator-181"><span class="linenos">181</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite.Generator-182"><a href="#SQLite.Generator-182"><span class="linenos">182</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-183"><a href="#SQLite.Generator-183"><span class="linenos">183</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="SQLite.Generator-184"><a href="#SQLite.Generator-184"><span class="linenos">184</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite.Generator-185"><a href="#SQLite.Generator-185"><span class="linenos">185</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="SQLite.Generator-186"><a href="#SQLite.Generator-186"><span class="linenos">186</span></a>
+</span><span id="SQLite.Generator-187"><a href="#SQLite.Generator-187"><span class="linenos">187</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-188"><a href="#SQLite.Generator-188"><span class="linenos">188</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-189"><a href="#SQLite.Generator-189"><span class="linenos">189</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-190"><a href="#SQLite.Generator-190"><span class="linenos">190</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-191"><a href="#SQLite.Generator-191"><span class="linenos">191</span></a>
-</span><span id="SQLite.Generator-192"><a href="#SQLite.Generator-192"><span class="linenos">192</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-193"><a href="#SQLite.Generator-193"><span class="linenos">193</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-194"><a href="#SQLite.Generator-194"><span class="linenos">194</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-195"><a href="#SQLite.Generator-195"><span class="linenos">195</span></a>
-</span><span id="SQLite.Generator-196"><a href="#SQLite.Generator-196"><span class="linenos">196</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="SQLite.Generator-197"><a href="#SQLite.Generator-197"><span class="linenos">197</span></a>
-</span><span id="SQLite.Generator-198"><a href="#SQLite.Generator-198"><span class="linenos">198</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-199"><a href="#SQLite.Generator-199"><span class="linenos">199</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-200"><a href="#SQLite.Generator-200"><span class="linenos">200</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-201"><a href="#SQLite.Generator-201"><span class="linenos">201</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-192"><a href="#SQLite.Generator-192"><span class="linenos">192</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-193"><a href="#SQLite.Generator-193"><span class="linenos">193</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_sql</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-194"><a href="#SQLite.Generator-194"><span class="linenos">194</span></a>
+</span><span id="SQLite.Generator-195"><a href="#SQLite.Generator-195"><span class="linenos">195</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-196"><a href="#SQLite.Generator-196"><span class="linenos">196</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-197"><a href="#SQLite.Generator-197"><span class="linenos">197</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-198"><a href="#SQLite.Generator-198"><span class="linenos">198</span></a>
+</span><span id="SQLite.Generator-199"><a href="#SQLite.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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator-200"><a href="#SQLite.Generator-200"><span class="linenos">200</span></a>
+</span><span id="SQLite.Generator-201"><a href="#SQLite.Generator-201"><span class="linenos">201</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-202"><a href="#SQLite.Generator-202"><span class="linenos">202</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-203"><a href="#SQLite.Generator-203"><span class="linenos">203</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-204"><a href="#SQLite.Generator-204"><span class="linenos">204</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>
@@ -1327,6 +1356,18 @@ Default: True</li>
</div>
+ <div id="SQLite.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#SQLite.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="SQLite.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
@@ -1356,7 +1397,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="SQLite.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="SQLite.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;: &lt;function count_if_to_sum&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="SQLite.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function any_value_to_max_sql&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;: &lt;function count_if_to_sum&gt;, &lt;class &#39;<a href="../expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_scalar_sql&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function <a href="#SQLite.Generator">SQLite.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;}</span>
</div>
@@ -1369,7 +1410,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="SQLite.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="SQLite.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="SQLite.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;}</span>
</div>
@@ -1401,11 +1442,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-140"><a href="#SQLite.Generator.cast_sql-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator.cast_sql-141"><a href="#SQLite.Generator.cast_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">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
-</span><span id="SQLite.Generator.cast_sql-142"><a href="#SQLite.Generator.cast_sql-142"><span class="linenos">142</span></a> <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-143"><a href="#SQLite.Generator.cast_sql-143"><span class="linenos">143</span></a>
-</span><span id="SQLite.Generator.cast_sql-144"><a href="#SQLite.Generator.cast_sql-144"><span class="linenos">144</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-143"><a href="#SQLite.Generator.cast_sql-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator.cast_sql-144"><a href="#SQLite.Generator.cast_sql-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
+</span><span id="SQLite.Generator.cast_sql-145"><a href="#SQLite.Generator.cast_sql-145"><span class="linenos">145</span></a> <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-146"><a href="#SQLite.Generator.cast_sql-146"><span class="linenos">146</span></a>
+</span><span id="SQLite.Generator.cast_sql-147"><a href="#SQLite.Generator.cast_sql-147"><span class="linenos">147</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>
@@ -1423,32 +1464,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-146"><a href="#SQLite.Generator.datediff_sql-146"><span class="linenos">146</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-147"><a href="#SQLite.Generator.datediff_sql-147"><span class="linenos">147</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-148"><a href="#SQLite.Generator.datediff_sql-148"><span class="linenos">148</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-149"><a href="#SQLite.Generator.datediff_sql-149"><span class="linenos">149</span></a>
-</span><span id="SQLite.Generator.datediff_sql-150"><a href="#SQLite.Generator.datediff_sql-150"><span class="linenos">150</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-151"><a href="#SQLite.Generator.datediff_sql-151"><span class="linenos">151</span></a>
-</span><span id="SQLite.Generator.datediff_sql-152"><a href="#SQLite.Generator.datediff_sql-152"><span class="linenos">152</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-153"><a href="#SQLite.Generator.datediff_sql-153"><span class="linenos">153</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-154"><a href="#SQLite.Generator.datediff_sql-154"><span class="linenos">154</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-155"><a href="#SQLite.Generator.datediff_sql-155"><span class="linenos">155</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-156"><a href="#SQLite.Generator.datediff_sql-156"><span class="linenos">156</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-157"><a href="#SQLite.Generator.datediff_sql-157"><span class="linenos">157</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-158"><a href="#SQLite.Generator.datediff_sql-158"><span class="linenos">158</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-159"><a href="#SQLite.Generator.datediff_sql-159"><span class="linenos">159</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-160"><a href="#SQLite.Generator.datediff_sql-160"><span class="linenos">160</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-161"><a href="#SQLite.Generator.datediff_sql-161"><span class="linenos">161</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-162"><a href="#SQLite.Generator.datediff_sql-162"><span class="linenos">162</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-163"><a href="#SQLite.Generator.datediff_sql-163"><span class="linenos">163</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-164"><a href="#SQLite.Generator.datediff_sql-164"><span class="linenos">164</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-165"><a href="#SQLite.Generator.datediff_sql-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;</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-166"><a href="#SQLite.Generator.datediff_sql-166"><span class="linenos">166</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-167"><a href="#SQLite.Generator.datediff_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;</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-168"><a href="#SQLite.Generator.datediff_sql-168"><span class="linenos">168</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-169"><a href="#SQLite.Generator.datediff_sql-169"><span class="linenos">169</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-170"><a href="#SQLite.Generator.datediff_sql-170"><span class="linenos">170</span></a>
-</span><span id="SQLite.Generator.datediff_sql-171"><a href="#SQLite.Generator.datediff_sql-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.datediff_sql-149"><a href="#SQLite.Generator.datediff_sql-149"><span class="linenos">149</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-150"><a href="#SQLite.Generator.datediff_sql-150"><span class="linenos">150</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-151"><a href="#SQLite.Generator.datediff_sql-151"><span class="linenos">151</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-152"><a href="#SQLite.Generator.datediff_sql-152"><span class="linenos">152</span></a>
+</span><span id="SQLite.Generator.datediff_sql-153"><a href="#SQLite.Generator.datediff_sql-153"><span class="linenos">153</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-154"><a href="#SQLite.Generator.datediff_sql-154"><span class="linenos">154</span></a>
+</span><span id="SQLite.Generator.datediff_sql-155"><a href="#SQLite.Generator.datediff_sql-155"><span class="linenos">155</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-156"><a href="#SQLite.Generator.datediff_sql-156"><span class="linenos">156</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-157"><a href="#SQLite.Generator.datediff_sql-157"><span class="linenos">157</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-158"><a href="#SQLite.Generator.datediff_sql-158"><span class="linenos">158</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-159"><a href="#SQLite.Generator.datediff_sql-159"><span class="linenos">159</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-160"><a href="#SQLite.Generator.datediff_sql-160"><span class="linenos">160</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-161"><a href="#SQLite.Generator.datediff_sql-161"><span class="linenos">161</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-162"><a href="#SQLite.Generator.datediff_sql-162"><span class="linenos">162</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-163"><a href="#SQLite.Generator.datediff_sql-163"><span class="linenos">163</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-164"><a href="#SQLite.Generator.datediff_sql-164"><span class="linenos">164</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-165"><a href="#SQLite.Generator.datediff_sql-165"><span class="linenos">165</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-166"><a href="#SQLite.Generator.datediff_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;</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-167"><a href="#SQLite.Generator.datediff_sql-167"><span class="linenos">167</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-168"><a href="#SQLite.Generator.datediff_sql-168"><span class="linenos">168</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-169"><a href="#SQLite.Generator.datediff_sql-169"><span class="linenos">169</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-170"><a href="#SQLite.Generator.datediff_sql-170"><span class="linenos">170</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-171"><a href="#SQLite.Generator.datediff_sql-171"><span class="linenos">171</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-172"><a href="#SQLite.Generator.datediff_sql-172"><span class="linenos">172</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-173"><a href="#SQLite.Generator.datediff_sql-173"><span class="linenos">173</span></a>
+</span><span id="SQLite.Generator.datediff_sql-174"><a href="#SQLite.Generator.datediff_sql-174"><span class="linenos">174</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>
@@ -1466,23 +1507,23 @@ 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-174"><a href="#SQLite.Generator.groupconcat_sql-174"><span class="linenos">174</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator.groupconcat_sql-175"><a href="#SQLite.Generator.groupconcat_sql-175"><span class="linenos">175</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-176"><a href="#SQLite.Generator.groupconcat_sql-176"><span class="linenos">176</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-177"><a href="#SQLite.Generator.groupconcat_sql-177"><span class="linenos">177</span></a>
-</span><span id="SQLite.Generator.groupconcat_sql-178"><a href="#SQLite.Generator.groupconcat_sql-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite.Generator.groupconcat_sql-179"><a href="#SQLite.Generator.groupconcat_sql-179"><span class="linenos">179</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-180"><a href="#SQLite.Generator.groupconcat_sql-180"><span class="linenos">180</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="SQLite.Generator.groupconcat_sql-181"><a href="#SQLite.Generator.groupconcat_sql-181"><span class="linenos">181</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite.Generator.groupconcat_sql-182"><a href="#SQLite.Generator.groupconcat_sql-182"><span class="linenos">182</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="SQLite.Generator.groupconcat_sql-183"><a href="#SQLite.Generator.groupconcat_sql-183"><span class="linenos">183</span></a>
-</span><span id="SQLite.Generator.groupconcat_sql-184"><a href="#SQLite.Generator.groupconcat_sql-184"><span class="linenos">184</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-185"><a href="#SQLite.Generator.groupconcat_sql-185"><span class="linenos">185</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-186"><a href="#SQLite.Generator.groupconcat_sql-186"><span class="linenos">186</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-187"><a href="#SQLite.Generator.groupconcat_sql-187"><span class="linenos">187</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-188"><a href="#SQLite.Generator.groupconcat_sql-188"><span class="linenos">188</span></a>
-</span><span id="SQLite.Generator.groupconcat_sql-189"><a href="#SQLite.Generator.groupconcat_sql-189"><span class="linenos">189</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-190"><a href="#SQLite.Generator.groupconcat_sql-190"><span class="linenos">190</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_sql</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-177"><a href="#SQLite.Generator.groupconcat_sql-177"><span class="linenos">177</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 class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator.groupconcat_sql-178"><a href="#SQLite.Generator.groupconcat_sql-178"><span class="linenos">178</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-179"><a href="#SQLite.Generator.groupconcat_sql-179"><span class="linenos">179</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-180"><a href="#SQLite.Generator.groupconcat_sql-180"><span class="linenos">180</span></a>
+</span><span id="SQLite.Generator.groupconcat_sql-181"><a href="#SQLite.Generator.groupconcat_sql-181"><span class="linenos">181</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite.Generator.groupconcat_sql-182"><a href="#SQLite.Generator.groupconcat_sql-182"><span class="linenos">182</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-183"><a href="#SQLite.Generator.groupconcat_sql-183"><span class="linenos">183</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="SQLite.Generator.groupconcat_sql-184"><a href="#SQLite.Generator.groupconcat_sql-184"><span class="linenos">184</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite.Generator.groupconcat_sql-185"><a href="#SQLite.Generator.groupconcat_sql-185"><span class="linenos">185</span></a> <span class="n">distinct_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="SQLite.Generator.groupconcat_sql-186"><a href="#SQLite.Generator.groupconcat_sql-186"><span class="linenos">186</span></a>
+</span><span id="SQLite.Generator.groupconcat_sql-187"><a href="#SQLite.Generator.groupconcat_sql-187"><span class="linenos">187</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-188"><a href="#SQLite.Generator.groupconcat_sql-188"><span class="linenos">188</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-189"><a href="#SQLite.Generator.groupconcat_sql-189"><span class="linenos">189</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-190"><a href="#SQLite.Generator.groupconcat_sql-190"><span class="linenos">190</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-191"><a href="#SQLite.Generator.groupconcat_sql-191"><span class="linenos">191</span></a>
+</span><span id="SQLite.Generator.groupconcat_sql-192"><a href="#SQLite.Generator.groupconcat_sql-192"><span class="linenos">192</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-193"><a href="#SQLite.Generator.groupconcat_sql-193"><span class="linenos">193</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_sql</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>
@@ -1500,11 +1541,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-192"><a href="#SQLite.Generator.least_sql-192"><span class="linenos">192</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-193"><a href="#SQLite.Generator.least_sql-193"><span class="linenos">193</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-194"><a href="#SQLite.Generator.least_sql-194"><span class="linenos">194</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-195"><a href="#SQLite.Generator.least_sql-195"><span class="linenos">195</span></a>
-</span><span id="SQLite.Generator.least_sql-196"><a href="#SQLite.Generator.least_sql-196"><span class="linenos">196</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="SQLite.Generator.least_sql-195"><a href="#SQLite.Generator.least_sql-195"><span class="linenos">195</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-196"><a href="#SQLite.Generator.least_sql-196"><span class="linenos">196</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-197"><a href="#SQLite.Generator.least_sql-197"><span class="linenos">197</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-198"><a href="#SQLite.Generator.least_sql-198"><span class="linenos">198</span></a>
+</span><span id="SQLite.Generator.least_sql-199"><a href="#SQLite.Generator.least_sql-199"><span class="linenos">199</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>
@@ -1522,10 +1563,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-198"><a href="#SQLite.Generator.transaction_sql-198"><span class="linenos">198</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-199"><a href="#SQLite.Generator.transaction_sql-199"><span class="linenos">199</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-200"><a href="#SQLite.Generator.transaction_sql-200"><span class="linenos">200</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-201"><a href="#SQLite.Generator.transaction_sql-201"><span class="linenos">201</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-201"><a href="#SQLite.Generator.transaction_sql-201"><span class="linenos">201</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-202"><a href="#SQLite.Generator.transaction_sql-202"><span class="linenos">202</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-203"><a href="#SQLite.Generator.transaction_sql-203"><span class="linenos">203</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-204"><a href="#SQLite.Generator.transaction_sql-204"><span class="linenos">204</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>
@@ -1580,26 +1621,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.can_identify-253"><a href="#SQLite.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="SQLite.Generator.can_identify-254"><a href="#SQLite.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="SQLite.Generator.can_identify-255"><a href="#SQLite.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="SQLite.Generator.can_identify-256"><a href="#SQLite.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="SQLite.Generator.can_identify-257"><a href="#SQLite.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="SQLite.Generator.can_identify-258"><a href="#SQLite.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="SQLite.Generator.can_identify-259"><a href="#SQLite.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="SQLite.Generator.can_identify-260"><a href="#SQLite.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="SQLite.Generator.can_identify-261"><a href="#SQLite.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="SQLite.Generator.can_identify-262"><a href="#SQLite.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="SQLite.Generator.can_identify-263"><a href="#SQLite.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="SQLite.Generator.can_identify-264"><a href="#SQLite.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="SQLite.Generator.can_identify-265"><a href="#SQLite.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="SQLite.Generator.can_identify-266"><a href="#SQLite.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.can_identify-267"><a href="#SQLite.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="SQLite.Generator.can_identify-268"><a href="#SQLite.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="SQLite.Generator.can_identify-269"><a href="#SQLite.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.can_identify-270"><a href="#SQLite.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.can_identify-256"><a href="#SQLite.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="SQLite.Generator.can_identify-257"><a href="#SQLite.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="SQLite.Generator.can_identify-258"><a href="#SQLite.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="SQLite.Generator.can_identify-259"><a href="#SQLite.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="SQLite.Generator.can_identify-260"><a href="#SQLite.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="SQLite.Generator.can_identify-261"><a href="#SQLite.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="SQLite.Generator.can_identify-262"><a href="#SQLite.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="SQLite.Generator.can_identify-263"><a href="#SQLite.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="SQLite.Generator.can_identify-264"><a href="#SQLite.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="SQLite.Generator.can_identify-265"><a href="#SQLite.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="SQLite.Generator.can_identify-266"><a href="#SQLite.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="SQLite.Generator.can_identify-267"><a href="#SQLite.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="SQLite.Generator.can_identify-268"><a href="#SQLite.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="SQLite.Generator.can_identify-269"><a href="#SQLite.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.can_identify-270"><a href="#SQLite.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="SQLite.Generator.can_identify-271"><a href="#SQLite.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="SQLite.Generator.can_identify-272"><a href="#SQLite.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="SQLite.Generator.can_identify-272"><a href="#SQLite.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.can_identify-273"><a href="#SQLite.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="SQLite.Generator.can_identify-274"><a href="#SQLite.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="SQLite.Generator.can_identify-275"><a href="#SQLite.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1670,26 +1711,14 @@ Default: True</li>
</div>
- <div id="SQLite.Generator.STRING_ESCAPE" class="classattr">
+ <div id="SQLite.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#SQLite.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="SQLite.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#SQLite.Tokenizer">sqlglot.dialects.sqlite.SQLite.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#SQLite.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#SQLite.Generator.TOKENIZER_CLASS"></a>
@@ -1791,7 +1820,9 @@ Default: True</li>
<dd id="SQLite.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="SQLite.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="SQLite.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="SQLite.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="SQLite.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="SQLite.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="SQLite.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="SQLite.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="SQLite.Generator.STRUCT_DELIMITER" class="variable"><a href="../generator.html#Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a></dd>
@@ -1837,6 +1868,7 @@ Default: True</li>
<dd id="SQLite.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="SQLite.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="SQLite.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="SQLite.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="SQLite.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="SQLite.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="SQLite.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1855,7 +1887,7 @@ Default: True</li>
<dd id="SQLite.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="SQLite.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="SQLite.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="SQLite.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="SQLite.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="SQLite.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="SQLite.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="SQLite.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -1900,6 +1932,7 @@ Default: True</li>
<dd id="SQLite.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="SQLite.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="SQLite.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="SQLite.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="SQLite.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="SQLite.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="SQLite.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -1908,6 +1941,8 @@ Default: True</li>
<dd id="SQLite.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="SQLite.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="SQLite.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="SQLite.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="SQLite.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="SQLite.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="SQLite.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="SQLite.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2065,6 +2100,8 @@ Default: True</li>
<dd id="SQLite.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="SQLite.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="SQLite.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="SQLite.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="SQLite.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/starrocks.html b/docs/sqlglot/dialects/starrocks.html
index cddcb59..6c0700d 100644
--- a/docs/sqlglot/dialects/starrocks.html
+++ b/docs/sqlglot/dialects/starrocks.html
@@ -40,6 +40,9 @@
<a class="variable" href="#StarRocks.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
+ <a class="variable" href="#StarRocks.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#StarRocks.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -91,10 +94,7 @@
<a class="variable" href="#StarRocks.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#StarRocks.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#StarRocks.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#StarRocks.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#StarRocks.Generator.BIT_START">BIT_START</a>
@@ -200,57 +200,56 @@
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="p">)</span>
-</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="p">)</span>
+</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</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.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a>
-</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> <span class="s2">&quot;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-18"><a href="#L-18"><span class="linenos">18</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-19"><a href="#L-19"><span class="linenos">19</span></a> <span class="p">),</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a> <span 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-21"><a href="#L-21"><span class="linenos">21</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">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">exp</span><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-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="p">),</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos">23</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-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">1</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">2</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-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="p">),</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="s2">&quot;REGEXP&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-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="p">}</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a>
-</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</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 class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><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">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-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">exp</span><span 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-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="L-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="n">TRANSFORMS</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">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</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">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-43"><a href="#L-43"><span class="linenos">43</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">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</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">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-46"><a href="#L-46"><span class="linenos">46</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-47"><a href="#L-47"><span class="linenos">47</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-48"><a href="#L-48"><span class="linenos">48</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-49"><a href="#L-49"><span class="linenos">49</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-50"><a href="#L-50"><span class="linenos">50</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-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="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-53"><a href="#L-53"><span class="linenos">53</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-54"><a href="#L-54"><span class="linenos">54</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-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="p">}</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a>
-</span><span id="L-57"><a href="#L-57"><span class="linenos">57</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-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="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos">19</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-20"><a href="#L-20"><span class="linenos">20</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">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 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-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="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-23"><a href="#L-23"><span class="linenos">23</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">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">2</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-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="p">),</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="s2">&quot;REGEXP&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-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="p">}</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a>
+</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</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="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">exp</span><span 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-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="L-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><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">TRANSFORMS</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">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</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-41"><a href="#L-41"><span class="linenos">41</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-42"><a href="#L-42"><span class="linenos">42</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">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="p">),</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span 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-45"><a href="#L-45"><span class="linenos">45</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-46"><a href="#L-46"><span class="linenos">46</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-47"><a href="#L-47"><span class="linenos">47</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-48"><a href="#L-48"><span class="linenos">48</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-49"><a href="#L-49"><span class="linenos">49</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-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">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-52"><a href="#L-52"><span class="linenos">52</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-53"><a href="#L-53"><span class="linenos">53</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-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="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>
@@ -266,51 +265,49 @@
</div>
<a class="headerlink" href="#StarRocks"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks-14"><a href="#StarRocks-14"><span class="linenos">14</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
-</span><span id="StarRocks-15"><a href="#StarRocks-15"><span class="linenos">15</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="StarRocks-16"><a href="#StarRocks-16"><span class="linenos">16</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StarRocks-17"><a href="#StarRocks-17"><span class="linenos">17</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="StarRocks-18"><a href="#StarRocks-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="StarRocks-19"><a href="#StarRocks-19"><span class="linenos">19</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="StarRocks-20"><a href="#StarRocks-20"><span class="linenos">20</span></a> <span class="p">),</span>
-</span><span id="StarRocks-21"><a href="#StarRocks-21"><span class="linenos">21</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="StarRocks-22"><a href="#StarRocks-22"><span class="linenos">22</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">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">exp</span><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="StarRocks-23"><a href="#StarRocks-23"><span class="linenos">23</span></a> <span class="p">),</span>
-</span><span id="StarRocks-24"><a href="#StarRocks-24"><span class="linenos">24</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="StarRocks-25"><a href="#StarRocks-25"><span class="linenos">25</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">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">2</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="StarRocks-26"><a href="#StarRocks-26"><span class="linenos">26</span></a> <span class="p">),</span>
-</span><span id="StarRocks-27"><a href="#StarRocks-27"><span class="linenos">27</span></a> <span class="s2">&quot;REGEXP&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="StarRocks-28"><a href="#StarRocks-28"><span class="linenos">28</span></a> <span class="p">}</span>
-</span><span id="StarRocks-29"><a href="#StarRocks-29"><span class="linenos">29</span></a>
-</span><span id="StarRocks-30"><a href="#StarRocks-30"><span class="linenos">30</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="StarRocks-31"><a href="#StarRocks-31"><span class="linenos">31</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="StarRocks-32"><a href="#StarRocks-32"><span class="linenos">32</span></a>
-</span><span id="StarRocks-33"><a href="#StarRocks-33"><span class="linenos">33</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StarRocks-34"><a href="#StarRocks-34"><span class="linenos">34</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="StarRocks-36"><a href="#StarRocks-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="StarRocks-37"><a href="#StarRocks-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="StarRocks-38"><a href="#StarRocks-38"><span class="linenos">38</span></a> <span class="p">}</span>
-</span><span id="StarRocks-39"><a href="#StarRocks-39"><span class="linenos">39</span></a>
-</span><span id="StarRocks-40"><a href="#StarRocks-40"><span class="linenos">40</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StarRocks-41"><a href="#StarRocks-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</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">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="StarRocks-44"><a href="#StarRocks-44"><span class="linenos">44</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">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</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">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-47"><a href="#StarRocks-47"><span class="linenos">47</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-48"><a href="#StarRocks-48"><span class="linenos">48</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-49"><a href="#StarRocks-49"><span class="linenos">49</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-50"><a href="#StarRocks-50"><span class="linenos">50</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-51"><a href="#StarRocks-51"><span class="linenos">51</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-52"><a href="#StarRocks-52"><span class="linenos">52</span></a> <span class="p">),</span>
-</span><span id="StarRocks-53"><a href="#StarRocks-53"><span class="linenos">53</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-54"><a href="#StarRocks-54"><span class="linenos">54</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-55"><a href="#StarRocks-55"><span class="linenos">55</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-56"><a href="#StarRocks-56"><span class="linenos">56</span></a> <span class="p">}</span>
-</span><span id="StarRocks-57"><a href="#StarRocks-57"><span class="linenos">57</span></a>
-</span><span id="StarRocks-58"><a href="#StarRocks-58"><span class="linenos">58</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks-15"><a href="#StarRocks-15"><span class="linenos">15</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
+</span><span id="StarRocks-16"><a href="#StarRocks-16"><span class="linenos">16</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="StarRocks-17"><a href="#StarRocks-17"><span class="linenos">17</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StarRocks-18"><a href="#StarRocks-18"><span class="linenos">18</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="StarRocks-19"><a href="#StarRocks-19"><span class="linenos">19</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="StarRocks-20"><a href="#StarRocks-20"><span class="linenos">20</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="StarRocks-21"><a href="#StarRocks-21"><span class="linenos">21</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">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">exp</span><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="StarRocks-22"><a href="#StarRocks-22"><span class="linenos">22</span></a> <span class="p">),</span>
+</span><span id="StarRocks-23"><a href="#StarRocks-23"><span class="linenos">23</span></a> <span 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="StarRocks-24"><a href="#StarRocks-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">1</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">2</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="StarRocks-25"><a href="#StarRocks-25"><span class="linenos">25</span></a> <span class="p">),</span>
+</span><span id="StarRocks-26"><a href="#StarRocks-26"><span class="linenos">26</span></a> <span class="s2">&quot;REGEXP&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="StarRocks-27"><a href="#StarRocks-27"><span class="linenos">27</span></a> <span class="p">}</span>
+</span><span id="StarRocks-28"><a href="#StarRocks-28"><span class="linenos">28</span></a>
+</span><span id="StarRocks-29"><a href="#StarRocks-29"><span class="linenos">29</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="StarRocks-30"><a href="#StarRocks-30"><span class="linenos">30</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="StarRocks-31"><a href="#StarRocks-31"><span class="linenos">31</span></a>
+</span><span id="StarRocks-32"><a href="#StarRocks-32"><span class="linenos">32</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StarRocks-33"><a href="#StarRocks-33"><span class="linenos">33</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="StarRocks-34"><a href="#StarRocks-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="StarRocks-35"><a href="#StarRocks-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="StarRocks-36"><a href="#StarRocks-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="StarRocks-37"><a href="#StarRocks-37"><span class="linenos">37</span></a> <span class="p">}</span>
+</span><span id="StarRocks-38"><a href="#StarRocks-38"><span class="linenos">38</span></a>
+</span><span id="StarRocks-39"><a href="#StarRocks-39"><span class="linenos">39</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StarRocks-40"><a href="#StarRocks-40"><span class="linenos">40</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="StarRocks-41"><a href="#StarRocks-41"><span class="linenos">41</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="StarRocks-42"><a href="#StarRocks-42"><span class="linenos">42</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="StarRocks-43"><a href="#StarRocks-43"><span class="linenos">43</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">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="StarRocks-44"><a href="#StarRocks-44"><span class="linenos">44</span></a> <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">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="StarRocks-46"><a href="#StarRocks-46"><span class="linenos">46</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-47"><a href="#StarRocks-47"><span class="linenos">47</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-48"><a href="#StarRocks-48"><span class="linenos">48</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-49"><a href="#StarRocks-49"><span class="linenos">49</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-50"><a href="#StarRocks-50"><span class="linenos">50</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-51"><a href="#StarRocks-51"><span class="linenos">51</span></a> <span class="p">),</span>
+</span><span id="StarRocks-52"><a href="#StarRocks-52"><span class="linenos">52</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-53"><a href="#StarRocks-53"><span class="linenos">53</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-54"><a href="#StarRocks-54"><span class="linenos">54</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-55"><a href="#StarRocks-55"><span class="linenos">55</span></a> <span class="p">}</span>
+</span><span id="StarRocks-56"><a href="#StarRocks-56"><span class="linenos">56</span></a>
+</span><span id="StarRocks-57"><a href="#StarRocks-57"><span class="linenos">57</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>
@@ -356,7 +353,7 @@
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="StarRocks.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -369,7 +366,7 @@
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="StarRocks.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -382,7 +379,7 @@
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="StarRocks.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -528,7 +525,9 @@
<h5>Inherited Members</h5>
<dl>
<div><dt><a href="mysql.html#MySQL">sqlglot.dialects.mysql.MySQL</a></dt>
- <dd id="StarRocks.TIME_FORMAT" class="variable"><a href="mysql.html#MySQL.TIME_FORMAT">TIME_FORMAT</a></dd>
+ <dd id="StarRocks.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="mysql.html#MySQL.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="StarRocks.TIME_FORMAT" class="variable"><a href="mysql.html#MySQL.TIME_FORMAT">TIME_FORMAT</a></dd>
+ <dd id="StarRocks.DPIPE_IS_STRING_CONCAT" class="variable"><a href="mysql.html#MySQL.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="StarRocks.TIME_MAPPING" class="variable"><a href="mysql.html#MySQL.TIME_MAPPING">TIME_MAPPING</a></dd>
<dd id="StarRocks.Tokenizer" class="class"><a href="mysql.html#MySQL.Tokenizer">Tokenizer</a></dd>
@@ -538,7 +537,6 @@
<dd id="StarRocks.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="StarRocks.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="StarRocks.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
- <dd id="StarRocks.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="StarRocks.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="StarRocks.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="StarRocks.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -576,20 +574,18 @@
</div>
<a class="headerlink" href="#StarRocks.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Parser-15"><a href="#StarRocks.Parser-15"><span class="linenos">15</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="StarRocks.Parser-16"><a href="#StarRocks.Parser-16"><span class="linenos">16</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StarRocks.Parser-17"><a href="#StarRocks.Parser-17"><span class="linenos">17</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="StarRocks.Parser-18"><a href="#StarRocks.Parser-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="StarRocks.Parser-19"><a href="#StarRocks.Parser-19"><span class="linenos">19</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="StarRocks.Parser-20"><a href="#StarRocks.Parser-20"><span class="linenos">20</span></a> <span class="p">),</span>
-</span><span id="StarRocks.Parser-21"><a href="#StarRocks.Parser-21"><span class="linenos">21</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="StarRocks.Parser-22"><a href="#StarRocks.Parser-22"><span class="linenos">22</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">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">exp</span><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="StarRocks.Parser-23"><a href="#StarRocks.Parser-23"><span class="linenos">23</span></a> <span class="p">),</span>
-</span><span id="StarRocks.Parser-24"><a href="#StarRocks.Parser-24"><span class="linenos">24</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="StarRocks.Parser-25"><a href="#StarRocks.Parser-25"><span class="linenos">25</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">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">2</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="StarRocks.Parser-26"><a href="#StarRocks.Parser-26"><span class="linenos">26</span></a> <span class="p">),</span>
-</span><span id="StarRocks.Parser-27"><a href="#StarRocks.Parser-27"><span class="linenos">27</span></a> <span class="s2">&quot;REGEXP&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="StarRocks.Parser-28"><a href="#StarRocks.Parser-28"><span class="linenos">28</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Parser-16"><a href="#StarRocks.Parser-16"><span class="linenos">16</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="StarRocks.Parser-17"><a href="#StarRocks.Parser-17"><span class="linenos">17</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StarRocks.Parser-18"><a href="#StarRocks.Parser-18"><span class="linenos">18</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="StarRocks.Parser-19"><a href="#StarRocks.Parser-19"><span class="linenos">19</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="StarRocks.Parser-20"><a href="#StarRocks.Parser-20"><span class="linenos">20</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="StarRocks.Parser-21"><a href="#StarRocks.Parser-21"><span class="linenos">21</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">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">exp</span><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="StarRocks.Parser-22"><a href="#StarRocks.Parser-22"><span class="linenos">22</span></a> <span class="p">),</span>
+</span><span id="StarRocks.Parser-23"><a href="#StarRocks.Parser-23"><span class="linenos">23</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="StarRocks.Parser-24"><a href="#StarRocks.Parser-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">1</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">2</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="StarRocks.Parser-25"><a href="#StarRocks.Parser-25"><span class="linenos">25</span></a> <span class="p">),</span>
+</span><span id="StarRocks.Parser-26"><a href="#StarRocks.Parser-26"><span class="linenos">26</span></a> <span class="s2">&quot;REGEXP&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="StarRocks.Parser-27"><a href="#StarRocks.Parser-27"><span class="linenos">27</span></a> <span class="p">}</span>
</span></pre></div>
@@ -614,7 +610,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="StarRocks.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#StarRocks.Parser">StarRocks.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#StarRocks.Parser">StarRocks.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function <a href="#StarRocks.Parser">StarRocks.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;function _str_to_date&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;INSTR&#39;: &lt;function MySQL.Parser.&lt;lambda&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;REGEXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#StarRocks.Parser">StarRocks.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#StarRocks.Parser">StarRocks.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;function parse_date_delta_with_interval.&lt;locals&gt;.func&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;function parse_timestamp_trunc&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;function _str_to_date&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;DATE_FORMAT&#39;: &lt;function format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;INSTR&#39;: &lt;function MySQL.Parser.&lt;lambda&gt;&gt;, &#39;LOCATE&#39;: &lt;function locate_to_strposition&gt;, &#39;REGEXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;}</span>
</div>
@@ -623,6 +619,18 @@ Default: 3</li>
</div>
+ <div id="StarRocks.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="mysql.html#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#StarRocks.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="StarRocks.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -653,7 +661,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="StarRocks.Parser.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -666,7 +674,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="StarRocks.Parser.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -681,6 +689,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="StarRocks.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="StarRocks.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="StarRocks.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="StarRocks.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="StarRocks.Parser.SUBQUERY_PREDICATES" class="variable"><a href="../parser.html#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a></dd>
<dd id="StarRocks.Parser.RESERVED_KEYWORDS" class="variable"><a href="../parser.html#Parser.RESERVED_KEYWORDS">RESERVED_KEYWORDS</a></dd>
@@ -693,9 +702,9 @@ Default: 3</li>
<dd id="StarRocks.Parser.TRIM_TYPES" class="variable"><a href="../parser.html#Parser.TRIM_TYPES">TRIM_TYPES</a></dd>
<dd id="StarRocks.Parser.EQUALITY" class="variable"><a href="../parser.html#Parser.EQUALITY">EQUALITY</a></dd>
<dd id="StarRocks.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
- <dd id="StarRocks.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="StarRocks.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="StarRocks.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="StarRocks.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="StarRocks.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="StarRocks.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="StarRocks.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -711,6 +720,7 @@ Default: 3</li>
<dd id="StarRocks.Parser.PROPERTY_PARSERS" class="variable"><a href="../parser.html#Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
<dd id="StarRocks.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="StarRocks.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="StarRocks.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="StarRocks.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="StarRocks.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="StarRocks.Parser.TYPE_LITERAL_PARSERS" class="variable"><a href="../parser.html#Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a></dd>
@@ -726,11 +736,13 @@ Default: 3</li>
<dd id="StarRocks.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="StarRocks.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="StarRocks.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="StarRocks.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="StarRocks.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="StarRocks.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="StarRocks.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="StarRocks.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="StarRocks.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="StarRocks.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="StarRocks.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="StarRocks.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="StarRocks.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -753,8 +765,10 @@ Default: 3</li>
</div>
<div><dt><a href="mysql.html#MySQL.Parser">sqlglot.dialects.mysql.MySQL.Parser</a></dt>
- <dd id="StarRocks.Parser.FUNC_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.FUNC_TOKENS">FUNC_TOKENS</a></dd>
+ <dd id="StarRocks.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="mysql.html#MySQL.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="StarRocks.Parser.FUNC_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.FUNC_TOKENS">FUNC_TOKENS</a></dd>
<dd id="StarRocks.Parser.CONJUNCTION" class="variable"><a href="mysql.html#MySQL.Parser.CONJUNCTION">CONJUNCTION</a></dd>
+ <dd id="StarRocks.Parser.BITWISE" class="variable"><a href="mysql.html#MySQL.Parser.BITWISE">BITWISE</a></dd>
<dd id="StarRocks.Parser.TABLE_ALIAS_TOKENS" class="variable"><a href="mysql.html#MySQL.Parser.TABLE_ALIAS_TOKENS">TABLE_ALIAS_TOKENS</a></dd>
<dd id="StarRocks.Parser.RANGE_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.RANGE_PARSERS">RANGE_PARSERS</a></dd>
<dd id="StarRocks.Parser.FUNCTION_PARSERS" class="variable"><a href="mysql.html#MySQL.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
@@ -784,35 +798,35 @@ Default: 3</li>
</div>
<a class="headerlink" href="#StarRocks.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Generator-30"><a href="#StarRocks.Generator-30"><span class="linenos">30</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="StarRocks.Generator-31"><a href="#StarRocks.Generator-31"><span class="linenos">31</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="StarRocks.Generator-32"><a href="#StarRocks.Generator-32"><span class="linenos">32</span></a>
-</span><span id="StarRocks.Generator-33"><a href="#StarRocks.Generator-33"><span class="linenos">33</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StarRocks.Generator-34"><a href="#StarRocks.Generator-34"><span class="linenos">34</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
-</span><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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
-</span><span id="StarRocks.Generator-36"><a href="#StarRocks.Generator-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="StarRocks.Generator-37"><a href="#StarRocks.Generator-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="StarRocks.Generator-38"><a href="#StarRocks.Generator-38"><span class="linenos">38</span></a> <span class="p">}</span>
-</span><span id="StarRocks.Generator-39"><a href="#StarRocks.Generator-39"><span class="linenos">39</span></a>
-</span><span id="StarRocks.Generator-40"><a href="#StarRocks.Generator-40"><span class="linenos">40</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StarRocks.Generator-41"><a href="#StarRocks.Generator-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</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">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="StarRocks.Generator-44"><a href="#StarRocks.Generator-44"><span class="linenos">44</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">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</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">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-47"><a href="#StarRocks.Generator-47"><span class="linenos">47</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-48"><a href="#StarRocks.Generator-48"><span class="linenos">48</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-49"><a href="#StarRocks.Generator-49"><span class="linenos">49</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-50"><a href="#StarRocks.Generator-50"><span class="linenos">50</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-51"><a href="#StarRocks.Generator-51"><span class="linenos">51</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-52"><a href="#StarRocks.Generator-52"><span class="linenos">52</span></a> <span class="p">),</span>
-</span><span id="StarRocks.Generator-53"><a href="#StarRocks.Generator-53"><span class="linenos">53</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-54"><a href="#StarRocks.Generator-54"><span class="linenos">54</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-55"><a href="#StarRocks.Generator-55"><span class="linenos">55</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-56"><a href="#StarRocks.Generator-56"><span class="linenos">56</span></a> <span class="p">}</span>
-</span><span id="StarRocks.Generator-57"><a href="#StarRocks.Generator-57"><span class="linenos">57</span></a>
-</span><span id="StarRocks.Generator-58"><a href="#StarRocks.Generator-58"><span class="linenos">58</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Generator-29"><a href="#StarRocks.Generator-29"><span class="linenos">29</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="StarRocks.Generator-30"><a href="#StarRocks.Generator-30"><span class="linenos">30</span></a> <span class="n">CAST_MAPPING</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="StarRocks.Generator-31"><a href="#StarRocks.Generator-31"><span class="linenos">31</span></a>
+</span><span id="StarRocks.Generator-32"><a href="#StarRocks.Generator-32"><span class="linenos">32</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StarRocks.Generator-33"><a href="#StarRocks.Generator-33"><span class="linenos">33</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-34"><a href="#StarRocks.Generator-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-35"><a href="#StarRocks.Generator-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-36"><a href="#StarRocks.Generator-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-37"><a href="#StarRocks.Generator-37"><span class="linenos">37</span></a> <span class="p">}</span>
+</span><span id="StarRocks.Generator-38"><a href="#StarRocks.Generator-38"><span class="linenos">38</span></a>
+</span><span id="StarRocks.Generator-39"><a href="#StarRocks.Generator-39"><span class="linenos">39</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StarRocks.Generator-40"><a href="#StarRocks.Generator-40"><span class="linenos">40</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-41"><a href="#StarRocks.Generator-41"><span class="linenos">41</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-42"><a href="#StarRocks.Generator-42"><span class="linenos">42</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="StarRocks.Generator-43"><a href="#StarRocks.Generator-43"><span class="linenos">43</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">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="StarRocks.Generator-44"><a href="#StarRocks.Generator-44"><span class="linenos">44</span></a> <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">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-46"><a href="#StarRocks.Generator-46"><span class="linenos">46</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-47"><a href="#StarRocks.Generator-47"><span class="linenos">47</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-48"><a href="#StarRocks.Generator-48"><span class="linenos">48</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-49"><a href="#StarRocks.Generator-49"><span class="linenos">49</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-50"><a href="#StarRocks.Generator-50"><span class="linenos">50</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-51"><a href="#StarRocks.Generator-51"><span class="linenos">51</span></a> <span class="p">),</span>
+</span><span id="StarRocks.Generator-52"><a href="#StarRocks.Generator-52"><span class="linenos">52</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-53"><a href="#StarRocks.Generator-53"><span class="linenos">53</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-54"><a href="#StarRocks.Generator-54"><span class="linenos">54</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-55"><a href="#StarRocks.Generator-55"><span class="linenos">55</span></a> <span class="p">}</span>
+</span><span id="StarRocks.Generator-56"><a href="#StarRocks.Generator-56"><span class="linenos">56</span></a>
+</span><span id="StarRocks.Generator-57"><a href="#StarRocks.Generator-57"><span class="linenos">57</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>
@@ -884,7 +898,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="StarRocks.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONKeyValue">sqlglot.expressions.JSONKeyValue</a>&#39;&gt;: &lt;function json_keyvalue_comma_sql&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function strposition_to_locate_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function MySQL.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function approx_count_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function arrow_json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function <a href="#StarRocks.Generator">StarRocks.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
</div>
@@ -909,7 +923,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="StarRocks.Generator.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -943,26 +957,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#StarRocks.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Generator.can_identify-253"><a href="#StarRocks.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="StarRocks.Generator.can_identify-254"><a href="#StarRocks.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="StarRocks.Generator.can_identify-255"><a href="#StarRocks.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="StarRocks.Generator.can_identify-256"><a href="#StarRocks.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="StarRocks.Generator.can_identify-257"><a href="#StarRocks.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="StarRocks.Generator.can_identify-258"><a href="#StarRocks.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="StarRocks.Generator.can_identify-259"><a href="#StarRocks.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="StarRocks.Generator.can_identify-260"><a href="#StarRocks.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="StarRocks.Generator.can_identify-261"><a href="#StarRocks.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="StarRocks.Generator.can_identify-262"><a href="#StarRocks.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="StarRocks.Generator.can_identify-263"><a href="#StarRocks.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="StarRocks.Generator.can_identify-264"><a href="#StarRocks.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="StarRocks.Generator.can_identify-265"><a href="#StarRocks.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="StarRocks.Generator.can_identify-266"><a href="#StarRocks.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="StarRocks.Generator.can_identify-267"><a href="#StarRocks.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="StarRocks.Generator.can_identify-268"><a href="#StarRocks.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="StarRocks.Generator.can_identify-269"><a href="#StarRocks.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="StarRocks.Generator.can_identify-270"><a href="#StarRocks.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Generator.can_identify-256"><a href="#StarRocks.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="StarRocks.Generator.can_identify-257"><a href="#StarRocks.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="StarRocks.Generator.can_identify-258"><a href="#StarRocks.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="StarRocks.Generator.can_identify-259"><a href="#StarRocks.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="StarRocks.Generator.can_identify-260"><a href="#StarRocks.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="StarRocks.Generator.can_identify-261"><a href="#StarRocks.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="StarRocks.Generator.can_identify-262"><a href="#StarRocks.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="StarRocks.Generator.can_identify-263"><a href="#StarRocks.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="StarRocks.Generator.can_identify-264"><a href="#StarRocks.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="StarRocks.Generator.can_identify-265"><a href="#StarRocks.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="StarRocks.Generator.can_identify-266"><a href="#StarRocks.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="StarRocks.Generator.can_identify-267"><a href="#StarRocks.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="StarRocks.Generator.can_identify-268"><a href="#StarRocks.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="StarRocks.Generator.can_identify-269"><a href="#StarRocks.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="StarRocks.Generator.can_identify-270"><a href="#StarRocks.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="StarRocks.Generator.can_identify-271"><a href="#StarRocks.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="StarRocks.Generator.can_identify-272"><a href="#StarRocks.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="StarRocks.Generator.can_identify-272"><a href="#StarRocks.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="StarRocks.Generator.can_identify-273"><a href="#StarRocks.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="StarRocks.Generator.can_identify-274"><a href="#StarRocks.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="StarRocks.Generator.can_identify-275"><a href="#StarRocks.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1033,26 +1047,14 @@ Default: True</li>
</div>
- <div id="StarRocks.Generator.STRING_ESCAPE" class="classattr">
+ <div id="StarRocks.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#StarRocks.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="StarRocks.Generator.IDENTIFIER_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="mysql.html#MySQL.Tokenizer">sqlglot.dialects.mysql.MySQL.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#StarRocks.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#StarRocks.Generator.TOKENIZER_CLASS"></a>
@@ -1151,6 +1153,8 @@ Default: True</li>
<dd id="StarRocks.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="StarRocks.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="StarRocks.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="StarRocks.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="StarRocks.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="StarRocks.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="StarRocks.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="StarRocks.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -1163,7 +1167,6 @@ Default: True</li>
<dd id="StarRocks.Generator.INDEX_OFFSET" class="variable"><a href="../generator.html#Generator.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="StarRocks.Generator.UNNEST_COLUMN_ONLY" class="variable"><a href="../generator.html#Generator.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="StarRocks.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../generator.html#Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
- <dd id="StarRocks.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../generator.html#Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
<dd id="StarRocks.Generator.STRICT_STRING_CONCAT" class="variable"><a href="../generator.html#Generator.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="StarRocks.Generator.NORMALIZE_FUNCTIONS" class="variable"><a href="../generator.html#Generator.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="StarRocks.Generator.NULL_ORDERING" class="variable"><a href="../generator.html#Generator.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -1197,6 +1200,7 @@ Default: True</li>
<dd id="StarRocks.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="StarRocks.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="StarRocks.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="StarRocks.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="StarRocks.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="StarRocks.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="StarRocks.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1215,7 +1219,7 @@ Default: True</li>
<dd id="StarRocks.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="StarRocks.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="StarRocks.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="StarRocks.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="StarRocks.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="StarRocks.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="StarRocks.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="StarRocks.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -1260,6 +1264,7 @@ Default: True</li>
<dd id="StarRocks.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="StarRocks.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="StarRocks.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="StarRocks.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="StarRocks.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="StarRocks.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="StarRocks.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -1268,6 +1273,8 @@ Default: True</li>
<dd id="StarRocks.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="StarRocks.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="StarRocks.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="StarRocks.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="StarRocks.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="StarRocks.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="StarRocks.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="StarRocks.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1423,6 +1430,8 @@ Default: True</li>
<dd id="StarRocks.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="StarRocks.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="StarRocks.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="StarRocks.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="StarRocks.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
<div><dt><a href="mysql.html#MySQL.Generator">sqlglot.dialects.mysql.MySQL.Generator</a></dt>
@@ -1433,6 +1442,7 @@ Default: True</li>
<dd id="StarRocks.Generator.DUPLICATE_KEY_UPDATE_WITH_SET" class="variable"><a href="mysql.html#MySQL.Generator.DUPLICATE_KEY_UPDATE_WITH_SET">DUPLICATE_KEY_UPDATE_WITH_SET</a></dd>
<dd id="StarRocks.Generator.QUERY_HINT_SEP" class="variable"><a href="mysql.html#MySQL.Generator.QUERY_HINT_SEP">QUERY_HINT_SEP</a></dd>
<dd id="StarRocks.Generator.VALUES_AS_TABLE" class="variable"><a href="mysql.html#MySQL.Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="StarRocks.Generator.NVL2_SUPPORTED" class="variable"><a href="mysql.html#MySQL.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="StarRocks.Generator.PROPERTIES_LOCATION" class="variable"><a href="mysql.html#MySQL.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
<dd id="StarRocks.Generator.LIMIT_FETCH" class="variable"><a href="mysql.html#MySQL.Generator.LIMIT_FETCH">LIMIT_FETCH</a></dd>
<dd id="StarRocks.Generator.limit_sql" class="function"><a href="mysql.html#MySQL.Generator.limit_sql">limit_sql</a></dd>
@@ -1441,6 +1451,7 @@ Default: True</li>
<dd id="StarRocks.Generator.jsonarraycontains_sql" class="function"><a href="mysql.html#MySQL.Generator.jsonarraycontains_sql">jsonarraycontains_sql</a></dd>
<dd id="StarRocks.Generator.cast_sql" class="function"><a href="mysql.html#MySQL.Generator.cast_sql">cast_sql</a></dd>
<dd id="StarRocks.Generator.show_sql" class="function"><a href="mysql.html#MySQL.Generator.show_sql">show_sql</a></dd>
+ <dd id="StarRocks.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="mysql.html#MySQL.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/tableau.html b/docs/sqlglot/dialects/tableau.html
index e2b9440..c9b8db6 100644
--- a/docs/sqlglot/dialects/tableau.html
+++ b/docs/sqlglot/dialects/tableau.html
@@ -82,10 +82,7 @@
<a class="variable" href="#Tableau.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Tableau.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Tableau.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Tableau.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Tableau.Generator.BIT_START">BIT_START</a>
@@ -115,6 +112,9 @@
<a class="variable" href="#Tableau.Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
+ <a class="variable" href="#Tableau.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Tableau.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -513,6 +513,7 @@
<dd id="Tableau.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Tableau.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
<dd id="Tableau.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Tableau.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Tableau.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Tableau.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Tableau.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -661,7 +662,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Tableau.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Tableau.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Tableau.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;}</span>
</div>
@@ -674,7 +675,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Tableau.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Tableau.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Tableau.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -775,26 +776,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Tableau.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Generator.can_identify-253"><a href="#Tableau.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Tableau.Generator.can_identify-254"><a href="#Tableau.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Tableau.Generator.can_identify-255"><a href="#Tableau.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Tableau.Generator.can_identify-256"><a href="#Tableau.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Tableau.Generator.can_identify-257"><a href="#Tableau.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Tableau.Generator.can_identify-258"><a href="#Tableau.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Tableau.Generator.can_identify-259"><a href="#Tableau.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Tableau.Generator.can_identify-260"><a href="#Tableau.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Tableau.Generator.can_identify-261"><a href="#Tableau.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Tableau.Generator.can_identify-262"><a href="#Tableau.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Tableau.Generator.can_identify-263"><a href="#Tableau.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Tableau.Generator.can_identify-264"><a href="#Tableau.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Tableau.Generator.can_identify-265"><a href="#Tableau.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Tableau.Generator.can_identify-266"><a href="#Tableau.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Tableau.Generator.can_identify-267"><a href="#Tableau.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Tableau.Generator.can_identify-268"><a href="#Tableau.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Tableau.Generator.can_identify-269"><a href="#Tableau.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Tableau.Generator.can_identify-270"><a href="#Tableau.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Generator.can_identify-256"><a href="#Tableau.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Tableau.Generator.can_identify-257"><a href="#Tableau.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Tableau.Generator.can_identify-258"><a href="#Tableau.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Tableau.Generator.can_identify-259"><a href="#Tableau.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Tableau.Generator.can_identify-260"><a href="#Tableau.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Tableau.Generator.can_identify-261"><a href="#Tableau.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Tableau.Generator.can_identify-262"><a href="#Tableau.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Tableau.Generator.can_identify-263"><a href="#Tableau.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Tableau.Generator.can_identify-264"><a href="#Tableau.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Tableau.Generator.can_identify-265"><a href="#Tableau.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Tableau.Generator.can_identify-266"><a href="#Tableau.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Tableau.Generator.can_identify-267"><a href="#Tableau.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Tableau.Generator.can_identify-268"><a href="#Tableau.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Tableau.Generator.can_identify-269"><a href="#Tableau.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Tableau.Generator.can_identify-270"><a href="#Tableau.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Tableau.Generator.can_identify-271"><a href="#Tableau.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Tableau.Generator.can_identify-272"><a href="#Tableau.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Tableau.Generator.can_identify-272"><a href="#Tableau.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Tableau.Generator.can_identify-273"><a href="#Tableau.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Tableau.Generator.can_identify-274"><a href="#Tableau.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Tableau.Generator.can_identify-275"><a href="#Tableau.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -865,26 +866,14 @@ Default: True</li>
</div>
- <div id="Tableau.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Tableau.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Tableau.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Tableau.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Tableau.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Tableau.Generator.TOKENIZER_CLASS"></a>
@@ -987,7 +976,10 @@ Default: True</li>
<dd id="Tableau.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Tableau.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Tableau.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Tableau.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Tableau.Generator.NVL2_SUPPORTED" class="variable"><a href="../generator.html#Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Tableau.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Tableau.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Tableau.Generator.TYPE_MAPPING" class="variable"><a href="../generator.html#Generator.TYPE_MAPPING">TYPE_MAPPING</a></dd>
<dd id="Tableau.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Tableau.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
@@ -1035,6 +1027,7 @@ Default: True</li>
<dd id="Tableau.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Tableau.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Tableau.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Tableau.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Tableau.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Tableau.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Tableau.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -1053,7 +1046,7 @@ Default: True</li>
<dd id="Tableau.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Tableau.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Tableau.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Tableau.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Tableau.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Tableau.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Tableau.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Tableau.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -1098,6 +1091,7 @@ Default: True</li>
<dd id="Tableau.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Tableau.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Tableau.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Tableau.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Tableau.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Tableau.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Tableau.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -1106,6 +1100,8 @@ Default: True</li>
<dd id="Tableau.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Tableau.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Tableau.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Tableau.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Tableau.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Tableau.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Tableau.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Tableau.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1264,6 +1260,8 @@ Default: True</li>
<dd id="Tableau.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Tableau.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Tableau.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Tableau.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Tableau.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
@@ -1309,7 +1307,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="Tableau.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Tableau.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;COUNTD&#39;: &lt;function <a href="#Tableau.Parser">Tableau.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Tableau.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;COUNTD&#39;: &lt;function <a href="#Tableau.Parser">Tableau.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1318,6 +1316,18 @@ Default: 3</li>
</div>
+ <div id="Tableau.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Tableau.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Tableau.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -1372,6 +1382,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="Tableau.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Tableau.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Tableau.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Tableau.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Tableau.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Tableau.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1392,6 +1403,7 @@ Default: 3</li>
<dd id="Tableau.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Tableau.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Tableau.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Tableau.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Tableau.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Tableau.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Tableau.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1411,6 +1423,7 @@ Default: 3</li>
<dd id="Tableau.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Tableau.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Tableau.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Tableau.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Tableau.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Tableau.Parser.FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
<dd id="Tableau.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
@@ -1429,12 +1442,15 @@ Default: 3</li>
<dd id="Tableau.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Tableau.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Tableau.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Tableau.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Tableau.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="Tableau.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Tableau.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Tableau.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Tableau.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Tableau.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Tableau.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="Tableau.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Tableau.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Tableau.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Tableau.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
diff --git a/docs/sqlglot/dialects/teradata.html b/docs/sqlglot/dialects/teradata.html
index 4cacb51..91928b6 100644
--- a/docs/sqlglot/dialects/teradata.html
+++ b/docs/sqlglot/dialects/teradata.html
@@ -64,6 +64,9 @@
<a class="variable" href="#Teradata.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Teradata.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Teradata.Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
@@ -145,10 +148,7 @@
<a class="variable" href="#Teradata.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Teradata.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Teradata.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Teradata.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Teradata.Generator.BIT_START">BIT_START</a>
@@ -911,6 +911,7 @@
<dd id="Teradata.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Teradata.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
<dd id="Teradata.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Teradata.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Teradata.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Teradata.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Teradata.NULL_ORDERING" class="variable"><a href="dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -982,7 +983,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="Teradata.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;^=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;BYTEINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;COLLECT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GE&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;GT&#39;: &lt;TokenType.GT: &#39;GT&#39;&gt;, &#39;HELP&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;INS&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;LE&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;LT&#39;: &lt;TokenType.LT: &#39;LT&#39;&gt;, &#39;MOD&#39;: &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &#39;NE&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;NOT=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;SEL&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;ST_GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;^=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;BYTEINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;COLLECT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GE&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;GT&#39;: &lt;TokenType.GT: &#39;GT&#39;&gt;, &#39;HELP&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;INS&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;LE&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;LT&#39;: &lt;TokenType.LT: &#39;LT&#39;&gt;, &#39;MOD&#39;: &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &#39;NE&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;NOT=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;SEL&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;ST_GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;}</span>
</div>
@@ -1156,7 +1157,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CHARSET_TRANSLATORS</span> =
<input id="Teradata.Parser.CHARSET_TRANSLATORS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Parser.CHARSET_TRANSLATORS-view-value"></label><span class="default_value">{&#39;UNICODE_TO_KANJISJIS&#39;, &#39;UNICODE_TO_UNICODE_NFC&#39;, &#39;UNICODE_TO_LATIN&#39;, &#39;UNICODE_TO_LOCALE&#39;, &#39;LATIN_TO_KANJISJIS&#39;, &#39;LOCALE_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC_PadGraphic&#39;, &#39;KANJISJIS_TO_LATIN&#39;, &#39;UNICODE_TO_UNICODE_Halfwidth&#39;, &#39;UNICODE_TO_KANJI1_KANJISJIS&#39;, &#39;GRAPHIC_TO_LATIN&#39;, &#39;UNICODE_TO_KANJI1_SBC&#39;, &#39;GRAPHIC_TO_UNICODE_PadSpace&#39;, &#39;KANJI1_KanjiEBCDIC_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_FoldSpace&#39;, &#39;KANJI1_SBC_TO_UNICODE&#39;, &#39;KANJISJIS_TO_UNICODE&#39;, &#39;UNICODE_TO_KANJI1_KanjiEUC&#39;, &#39;UNICODE_TO_KANJI1_KanjiEBCDIC&#39;, &#39;GRAPHIC_TO_KANJISJIS&#39;, &#39;KANJI1_KANJISJIS_TO_UNICODE&#39;, &#39;KANJISJIS_TO_GRAPHIC&#39;, &#39;UNICODE_TO_UNICODE_Fullwidth&#39;, &#39;UNICODE_TO_GRAPHIC_VarGraphic&#39;, &#39;GRAPHIC_TO_UNICODE&#39;, &#39;LATIN_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC&#39;, &#39;KANJI1_KanjiEUC_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_NFKC&#39;, &#39;LATIN_TO_GRAPHIC&#39;, &#39;UNICODE_TO_UNICODE_NFD&#39;, &#39;UNICODE_TO_UNICODE_NFKD&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Parser.CHARSET_TRANSLATORS-view-value"></label><span class="default_value">{&#39;KANJISJIS_TO_UNICODE&#39;, &#39;LATIN_TO_GRAPHIC&#39;, &#39;GRAPHIC_TO_KANJISJIS&#39;, &#39;UNICODE_TO_LATIN&#39;, &#39;LOCALE_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_Fullwidth&#39;, &#39;LATIN_TO_KANJISJIS&#39;, &#39;UNICODE_TO_KANJI1_SBC&#39;, &#39;UNICODE_TO_UNICODE_FoldSpace&#39;, &#39;UNICODE_TO_UNICODE_NFKD&#39;, &#39;UNICODE_TO_UNICODE_Halfwidth&#39;, &#39;UNICODE_TO_KANJI1_KanjiEBCDIC&#39;, &#39;KANJISJIS_TO_LATIN&#39;, &#39;KANJI1_SBC_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC_PadGraphic&#39;, &#39;UNICODE_TO_GRAPHIC&#39;, &#39;UNICODE_TO_UNICODE_NFC&#39;, &#39;UNICODE_TO_UNICODE_NFKC&#39;, &#39;UNICODE_TO_LOCALE&#39;, &#39;GRAPHIC_TO_UNICODE_PadSpace&#39;, &#39;KANJI1_KanjiEBCDIC_TO_UNICODE&#39;, &#39;KANJI1_KanjiEUC_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC_VarGraphic&#39;, &#39;GRAPHIC_TO_UNICODE&#39;, &#39;LATIN_TO_UNICODE&#39;, &#39;GRAPHIC_TO_LATIN&#39;, &#39;KANJI1_KANJISJIS_TO_UNICODE&#39;, &#39;KANJISJIS_TO_GRAPHIC&#39;, &#39;UNICODE_TO_KANJI1_KANJISJIS&#39;, &#39;UNICODE_TO_KANJISJIS&#39;, &#39;UNICODE_TO_KANJI1_KanjiEUC&#39;, &#39;UNICODE_TO_UNICODE_NFD&#39;}</span>
</div>
@@ -1169,7 +1170,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="Teradata.Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;}</span>
</div>
@@ -1182,7 +1183,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">STATEMENT_PARSERS</span> =
<input id="Teradata.Parser.STATEMENT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FROM: &#39;FROM&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;: &lt;function <a href="#Teradata.Parser">Teradata.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;: &lt;function <a href="#Teradata.Parser">Teradata.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1204,6 +1205,18 @@ Default: 3</li>
</div>
+ <div id="Teradata.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Teradata.Tokenizer">sqlglot.dialects.teradata.Teradata.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Teradata.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Teradata.Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
@@ -1274,6 +1287,7 @@ Default: 3</li>
<dd id="Teradata.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="Teradata.Parser.FUNCTIONS" class="variable"><a href="../parser.html#Parser.FUNCTIONS">FUNCTIONS</a></dd>
<dd id="Teradata.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Teradata.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="Teradata.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="Teradata.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="Teradata.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -1293,6 +1307,7 @@ Default: 3</li>
<dd id="Teradata.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="Teradata.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="Teradata.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Teradata.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="Teradata.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="Teradata.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="Teradata.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -1311,6 +1326,7 @@ Default: 3</li>
<dd id="Teradata.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="Teradata.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="Teradata.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Teradata.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="Teradata.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="Teradata.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
<dd id="Teradata.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
@@ -1328,12 +1344,15 @@ Default: 3</li>
<dd id="Teradata.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="Teradata.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="Teradata.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Teradata.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="Teradata.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="Teradata.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
<dd id="Teradata.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="Teradata.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
<dd id="Teradata.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
<dd id="Teradata.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Teradata.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
+ <dd id="Teradata.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Teradata.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="Teradata.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Teradata.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -1532,7 +1551,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Teradata.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_INDEX: &#39;POST_INDEX&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_INDEX: &#39;POST_INDEX&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -1545,7 +1564,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Teradata.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#Teradata.Generator">Teradata.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Teradata.Generator">Teradata.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function <a href="#Teradata.Generator">Teradata.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Teradata.Generator">Teradata.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1741,26 +1760,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Teradata.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.can_identify-253"><a href="#Teradata.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Teradata.Generator.can_identify-254"><a href="#Teradata.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Teradata.Generator.can_identify-255"><a href="#Teradata.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Teradata.Generator.can_identify-256"><a href="#Teradata.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Teradata.Generator.can_identify-257"><a href="#Teradata.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Teradata.Generator.can_identify-258"><a href="#Teradata.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Teradata.Generator.can_identify-259"><a href="#Teradata.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Teradata.Generator.can_identify-260"><a href="#Teradata.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Teradata.Generator.can_identify-261"><a href="#Teradata.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Teradata.Generator.can_identify-262"><a href="#Teradata.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Teradata.Generator.can_identify-263"><a href="#Teradata.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Teradata.Generator.can_identify-264"><a href="#Teradata.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Teradata.Generator.can_identify-265"><a href="#Teradata.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Teradata.Generator.can_identify-266"><a href="#Teradata.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Teradata.Generator.can_identify-267"><a href="#Teradata.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Teradata.Generator.can_identify-268"><a href="#Teradata.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Teradata.Generator.can_identify-269"><a href="#Teradata.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Teradata.Generator.can_identify-270"><a href="#Teradata.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.can_identify-256"><a href="#Teradata.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Teradata.Generator.can_identify-257"><a href="#Teradata.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Teradata.Generator.can_identify-258"><a href="#Teradata.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Teradata.Generator.can_identify-259"><a href="#Teradata.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Teradata.Generator.can_identify-260"><a href="#Teradata.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Teradata.Generator.can_identify-261"><a href="#Teradata.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Teradata.Generator.can_identify-262"><a href="#Teradata.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Teradata.Generator.can_identify-263"><a href="#Teradata.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Teradata.Generator.can_identify-264"><a href="#Teradata.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Teradata.Generator.can_identify-265"><a href="#Teradata.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Teradata.Generator.can_identify-266"><a href="#Teradata.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Teradata.Generator.can_identify-267"><a href="#Teradata.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Teradata.Generator.can_identify-268"><a href="#Teradata.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Teradata.Generator.can_identify-269"><a href="#Teradata.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Teradata.Generator.can_identify-270"><a href="#Teradata.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Teradata.Generator.can_identify-271"><a href="#Teradata.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Teradata.Generator.can_identify-272"><a href="#Teradata.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Teradata.Generator.can_identify-272"><a href="#Teradata.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Teradata.Generator.can_identify-273"><a href="#Teradata.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Teradata.Generator.can_identify-274"><a href="#Teradata.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Teradata.Generator.can_identify-275"><a href="#Teradata.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -1831,26 +1850,14 @@ Default: True</li>
</div>
- <div id="Teradata.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Teradata.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Teradata.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Teradata.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Teradata.Tokenizer">sqlglot.dialects.teradata.Teradata.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Teradata.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Teradata.Generator.TOKENIZER_CLASS"></a>
@@ -1953,7 +1960,10 @@ Default: True</li>
<dd id="Teradata.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Teradata.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Teradata.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Teradata.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Teradata.Generator.NVL2_SUPPORTED" class="variable"><a href="../generator.html#Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Teradata.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Teradata.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Teradata.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Teradata.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Teradata.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -2000,6 +2010,7 @@ Default: True</li>
<dd id="Teradata.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Teradata.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Teradata.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Teradata.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Teradata.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Teradata.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Teradata.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2017,7 +2028,7 @@ Default: True</li>
<dd id="Teradata.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Teradata.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Teradata.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Teradata.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Teradata.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Teradata.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Teradata.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="Teradata.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@@ -2061,6 +2072,7 @@ Default: True</li>
<dd id="Teradata.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Teradata.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Teradata.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Teradata.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Teradata.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Teradata.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
<dd id="Teradata.Generator.var_sql" class="function"><a href="../generator.html#Generator.var_sql">var_sql</a></dd>
@@ -2068,6 +2080,8 @@ Default: True</li>
<dd id="Teradata.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Teradata.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Teradata.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Teradata.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Teradata.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Teradata.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Teradata.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Teradata.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2226,6 +2240,8 @@ Default: True</li>
<dd id="Teradata.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Teradata.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Teradata.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Teradata.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Teradata.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/dialects/trino.html b/docs/sqlglot/dialects/trino.html
index 5f0ebe1..fdf11c4 100644
--- a/docs/sqlglot/dialects/trino.html
+++ b/docs/sqlglot/dialects/trino.html
@@ -64,10 +64,7 @@
<a class="variable" href="#Trino.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Trino.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Trino.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Trino.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Trino.Generator.BIT_START">BIT_START</a>
@@ -100,6 +97,30 @@
</li>
<li>
+ <a class="class" href="#Trino.Parser">Trino.Parser</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Trino.Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
+ <a class="variable" href="#Trino.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
+ <a class="variable" href="#Trino.Parser.SHOW_TRIE">SHOW_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Trino.Parser.SET_TRIE">SET_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Trino.Parser.FORMAT_TRIE">FORMAT_TRIE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Trino.Parser.TIME_TRIE">TIME_TRIE</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="variable" href="#Trino.tokenizer_class">tokenizer_class</a>
</li>
<li>
@@ -191,6 +212,9 @@
</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="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Presto</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</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><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a>
+</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Presto</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
</span></pre></div>
@@ -215,6 +239,9 @@
</span><span id="Trino-14"><a href="#Trino-14"><span class="linenos">14</span></a>
</span><span id="Trino-15"><a href="#Trino-15"><span class="linenos">15</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Presto</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Trino-16"><a href="#Trino-16"><span class="linenos">16</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><span id="Trino-17"><a href="#Trino-17"><span class="linenos">17</span></a>
+</span><span id="Trino-18"><a href="#Trino-18"><span class="linenos">18</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Presto</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Trino-19"><a href="#Trino-19"><span class="linenos">19</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
</span></pre></div>
@@ -235,7 +262,7 @@
<div id="Trino.parser_class" class="classattr">
<div class="attr variable">
<span class="name">parser_class</span> =
-<span class="default_value">&lt;class &#39;<a href="presto.html#Presto.Parser">sqlglot.dialects.presto.Presto.Parser</a>&#39;&gt;</span>
+<span class="default_value">&lt;class &#39;<a href="#Trino.Parser">sqlglot.dialects.trino.Trino.Parser</a>&#39;&gt;</span>
</div>
@@ -260,7 +287,7 @@
<div class="attr variable">
<span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
<input id="Trino.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Trino.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="Trino.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -273,7 +300,7 @@
<div class="attr variable">
<span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
<input id="Trino.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Trino.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;S&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+ <label class="view-value-button pdoc-button" for="Trino.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
</div>
@@ -286,7 +313,7 @@
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="Trino.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Trino.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Trino.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -438,13 +465,13 @@
<dd id="Trino.TIME_MAPPING" class="variable"><a href="presto.html#Presto.TIME_MAPPING">TIME_MAPPING</a></dd>
<dd id="Trino.STRICT_STRING_CONCAT" class="variable"><a href="presto.html#Presto.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Trino.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="presto.html#Presto.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
- <dd id="Trino.Parser" class="class"><a href="presto.html#Presto.Parser">Parser</a></dd>
</div>
<div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
<dd id="Trino.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="Trino.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Trino.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Trino.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Trino.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Trino.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
<dd id="Trino.DATEINT_FORMAT" class="variable"><a href="dialect.html#Dialect.DATEINT_FORMAT">DATEINT_FORMAT</a></dd>
@@ -531,7 +558,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Trino.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Trino.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _ts_or_ds_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _approx_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _initcap_sql&gt;, &lt;class &#39;<a href="../expressions.html#Lateral">sqlglot.expressions.Lateral</a>&#39;&gt;: &lt;function _explode_to_unnest_sql&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function left_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _quantile_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function right_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeBracket">sqlglot.expressions.SafeBracket</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#Schema">sqlglot.expressions.Schema</a>&#39;&gt;: &lt;function _schema_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _no_sort_array&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function <a href="#Trino.Generator">Trino.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Trino.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _ts_or_ds_add_sql&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _approx_distinct_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;: &lt;function _first_last_sql&gt;, &lt;class &#39;<a href="../expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function if_sql&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function no_ilike_sql&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _initcap_sql&gt;, &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;: &lt;function _first_last_sql&gt;, &lt;class &#39;<a href="../expressions.html#Lateral">sqlglot.expressions.Lateral</a>&#39;&gt;: &lt;function _explode_to_unnest_sql&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function left_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _quantile_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function regexp_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function right_to_substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#SafeBracket">sqlglot.expressions.SafeBracket</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function no_safe_divide_sql&gt;, &lt;class &#39;<a href="../expressions.html#Schema">sqlglot.expressions.Schema</a>&#39;&gt;: &lt;function _schema_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _no_sort_array&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _str_to_time_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _ts_or_ds_to_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function Presto.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#WithinGroup">sqlglot.expressions.WithinGroup</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function <a href="#Trino.Generator">Trino.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -556,7 +583,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">INVERSE_TIME_MAPPING</span><span class="annotation">: Dict[str, str]</span> =
<input id="Trino.Generator.INVERSE_TIME_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Trino.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%S&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Trino.Generator.INVERSE_TIME_MAPPING-view-value"></label><span class="default_value">{&#39;%B&#39;: &#39;%M&#39;, &#39;%-m&#39;: &#39;%c&#39;, &#39;%-d&#39;: &#39;%e&#39;, &#39;%I&#39;: &#39;%h&#39;, &#39;%M&#39;: &#39;%i&#39;, &#39;%S&#39;: &#39;%s&#39;, &#39;%W&#39;: &#39;%u&#39;, &#39;%-H&#39;: &#39;%k&#39;, &#39;%-I&#39;: &#39;%l&#39;, &#39;%H:%M:%S&#39;: &#39;%T&#39;, &#39;%a&#39;: &#39;%W&#39;}</span>
</div>
@@ -590,26 +617,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Trino.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Trino.Generator.can_identify-253"><a href="#Trino.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Trino.Generator.can_identify-254"><a href="#Trino.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Trino.Generator.can_identify-255"><a href="#Trino.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Trino.Generator.can_identify-256"><a href="#Trino.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Trino.Generator.can_identify-257"><a href="#Trino.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Trino.Generator.can_identify-258"><a href="#Trino.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Trino.Generator.can_identify-259"><a href="#Trino.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Trino.Generator.can_identify-260"><a href="#Trino.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Trino.Generator.can_identify-261"><a href="#Trino.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Trino.Generator.can_identify-262"><a href="#Trino.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Trino.Generator.can_identify-263"><a href="#Trino.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Trino.Generator.can_identify-264"><a href="#Trino.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Trino.Generator.can_identify-265"><a href="#Trino.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Trino.Generator.can_identify-266"><a href="#Trino.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Trino.Generator.can_identify-267"><a href="#Trino.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Trino.Generator.can_identify-268"><a href="#Trino.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Trino.Generator.can_identify-269"><a href="#Trino.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Trino.Generator.can_identify-270"><a href="#Trino.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Trino.Generator.can_identify-256"><a href="#Trino.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Trino.Generator.can_identify-257"><a href="#Trino.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Trino.Generator.can_identify-258"><a href="#Trino.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Trino.Generator.can_identify-259"><a href="#Trino.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Trino.Generator.can_identify-260"><a href="#Trino.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Trino.Generator.can_identify-261"><a href="#Trino.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Trino.Generator.can_identify-262"><a href="#Trino.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Trino.Generator.can_identify-263"><a href="#Trino.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Trino.Generator.can_identify-264"><a href="#Trino.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Trino.Generator.can_identify-265"><a href="#Trino.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Trino.Generator.can_identify-266"><a href="#Trino.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Trino.Generator.can_identify-267"><a href="#Trino.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Trino.Generator.can_identify-268"><a href="#Trino.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Trino.Generator.can_identify-269"><a href="#Trino.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Trino.Generator.can_identify-270"><a href="#Trino.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Trino.Generator.can_identify-271"><a href="#Trino.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Trino.Generator.can_identify-272"><a href="#Trino.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Trino.Generator.can_identify-272"><a href="#Trino.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Trino.Generator.can_identify-273"><a href="#Trino.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Trino.Generator.can_identify-274"><a href="#Trino.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Trino.Generator.can_identify-275"><a href="#Trino.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -680,26 +707,14 @@ Default: True</li>
</div>
- <div id="Trino.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Trino.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Trino.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Trino.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Trino.Tokenizer">sqlglot.dialects.trino.Trino.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Trino.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Trino.Generator.TOKENIZER_CLASS"></a>
@@ -801,6 +816,7 @@ Default: True</li>
<dd id="Trino.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Trino.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
<dd id="Trino.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Trino.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Trino.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Trino.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="Trino.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
@@ -843,6 +859,7 @@ Default: True</li>
<dd id="Trino.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Trino.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Trino.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Trino.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Trino.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Trino.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Trino.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -861,7 +878,7 @@ Default: True</li>
<dd id="Trino.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Trino.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Trino.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Trino.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Trino.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Trino.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Trino.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Trino.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -906,6 +923,7 @@ Default: True</li>
<dd id="Trino.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Trino.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Trino.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Trino.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Trino.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Trino.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Trino.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -914,6 +932,8 @@ Default: True</li>
<dd id="Trino.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Trino.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Trino.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Trino.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Trino.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Trino.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Trino.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Trino.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -1070,6 +1090,8 @@ Default: True</li>
<dd id="Trino.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Trino.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Trino.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Trino.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Trino.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
<div><dt><a href="presto.html#Presto.Generator">sqlglot.dialects.presto.Presto.Generator</a></dt>
@@ -1078,6 +1100,8 @@ Default: True</li>
<dd id="Trino.Generator.TABLE_HINTS" class="variable"><a href="presto.html#Presto.Generator.TABLE_HINTS">TABLE_HINTS</a></dd>
<dd id="Trino.Generator.QUERY_HINTS" class="variable"><a href="presto.html#Presto.Generator.QUERY_HINTS">QUERY_HINTS</a></dd>
<dd id="Trino.Generator.IS_BOOL_ALLOWED" class="variable"><a href="presto.html#Presto.Generator.IS_BOOL_ALLOWED">IS_BOOL_ALLOWED</a></dd>
+ <dd id="Trino.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="presto.html#Presto.Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Trino.Generator.NVL2_SUPPORTED" class="variable"><a href="presto.html#Presto.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Trino.Generator.STRUCT_DELIMITER" class="variable"><a href="presto.html#Presto.Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a></dd>
<dd id="Trino.Generator.PROPERTIES_LOCATION" class="variable"><a href="presto.html#Presto.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
<dd id="Trino.Generator.TYPE_MAPPING" class="variable"><a href="presto.html#Presto.Generator.TYPE_MAPPING">TYPE_MAPPING</a></dd>
@@ -1158,6 +1182,216 @@ Default: True</li>
</dl>
</div>
</section>
+ <section id="Trino.Parser">
+ <input id="Trino.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">Trino.Parser</span><wbr>(<span class="base"><a href="presto.html#Presto.Parser">sqlglot.dialects.presto.Presto.Parser</a></span>):
+
+ <label class="view-source-button" for="Trino.Parser-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Trino.Parser-18"><a href="#Trino.Parser-18"><span class="linenos">18</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Presto</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Trino.Parser-19"><a href="#Trino.Parser-19"><span class="linenos">19</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>error_level:</strong> The desired error level.
+Default: ErrorLevel.IMMEDIATE</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: 100</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>
+</ul>
+</div>
+
+
+ <div id="Trino.Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
+ <div id="Trino.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#Trino.Tokenizer">sqlglot.dialects.trino.Trino.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
+ <div id="Trino.Parser.SHOW_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
+<span class="default_value">{}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser.SHOW_TRIE"></a>
+
+
+
+ </div>
+ <div id="Trino.Parser.SET_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">SET_TRIE</span><span class="annotation">: Dict</span> =
+<span class="default_value">{&#39;GLOBAL&#39;: {0: True}, &#39;LOCAL&#39;: {0: True}, &#39;SESSION&#39;: {0: True}, &#39;TRANSACTION&#39;: {0: True}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser.SET_TRIE"></a>
+
+
+
+ </div>
+ <div id="Trino.Parser.FORMAT_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">FORMAT_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Trino.Parser.FORMAT_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Trino.Parser.FORMAT_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser.FORMAT_TRIE"></a>
+
+
+
+ </div>
+ <div id="Trino.Parser.TIME_TRIE" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIME_TRIE</span><span class="annotation">: Dict</span> =
+<input id="Trino.Parser.TIME_TRIE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="Trino.Parser.TIME_TRIE-view-value"></label><span class="default_value">{&#39;%&#39;: {&#39;M&#39;: {0: True}, &#39;c&#39;: {0: True}, &#39;e&#39;: {0: True}, &#39;h&#39;: {0: True}, &#39;i&#39;: {0: True}, &#39;s&#39;: {0: True}, &#39;u&#39;: {0: True}, &#39;k&#39;: {0: True}, &#39;l&#39;: {0: True}, &#39;T&#39;: {0: True}, &#39;W&#39;: {0: True}}}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Trino.Parser.TIME_TRIE"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
+ <dd id="Trino.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
+ <dd id="Trino.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="Trino.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
+ <dd id="Trino.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
+ <dd id="Trino.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
+ <dd id="Trino.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
+ <dd id="Trino.Parser.SUBQUERY_PREDICATES" class="variable"><a href="../parser.html#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a></dd>
+ <dd id="Trino.Parser.RESERVED_KEYWORDS" class="variable"><a href="../parser.html#Parser.RESERVED_KEYWORDS">RESERVED_KEYWORDS</a></dd>
+ <dd id="Trino.Parser.DB_CREATABLES" class="variable"><a href="../parser.html#Parser.DB_CREATABLES">DB_CREATABLES</a></dd>
+ <dd id="Trino.Parser.CREATABLES" class="variable"><a href="../parser.html#Parser.CREATABLES">CREATABLES</a></dd>
+ <dd id="Trino.Parser.ID_VAR_TOKENS" class="variable"><a href="../parser.html#Parser.ID_VAR_TOKENS">ID_VAR_TOKENS</a></dd>
+ <dd id="Trino.Parser.INTERVAL_VARS" class="variable"><a href="../parser.html#Parser.INTERVAL_VARS">INTERVAL_VARS</a></dd>
+ <dd id="Trino.Parser.TABLE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.TABLE_ALIAS_TOKENS">TABLE_ALIAS_TOKENS</a></dd>
+ <dd id="Trino.Parser.COMMENT_TABLE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.COMMENT_TABLE_ALIAS_TOKENS">COMMENT_TABLE_ALIAS_TOKENS</a></dd>
+ <dd id="Trino.Parser.UPDATE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.UPDATE_ALIAS_TOKENS">UPDATE_ALIAS_TOKENS</a></dd>
+ <dd id="Trino.Parser.TRIM_TYPES" class="variable"><a href="../parser.html#Parser.TRIM_TYPES">TRIM_TYPES</a></dd>
+ <dd id="Trino.Parser.FUNC_TOKENS" class="variable"><a href="../parser.html#Parser.FUNC_TOKENS">FUNC_TOKENS</a></dd>
+ <dd id="Trino.Parser.CONJUNCTION" class="variable"><a href="../parser.html#Parser.CONJUNCTION">CONJUNCTION</a></dd>
+ <dd id="Trino.Parser.EQUALITY" class="variable"><a href="../parser.html#Parser.EQUALITY">EQUALITY</a></dd>
+ <dd id="Trino.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
+ <dd id="Trino.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
+ <dd id="Trino.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
+ <dd id="Trino.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="Trino.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
+ <dd id="Trino.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
+ <dd id="Trino.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
+ <dd id="Trino.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
+ <dd id="Trino.Parser.JOIN_SIDES" class="variable"><a href="../parser.html#Parser.JOIN_SIDES">JOIN_SIDES</a></dd>
+ <dd id="Trino.Parser.JOIN_KINDS" class="variable"><a href="../parser.html#Parser.JOIN_KINDS">JOIN_KINDS</a></dd>
+ <dd id="Trino.Parser.JOIN_HINTS" class="variable"><a href="../parser.html#Parser.JOIN_HINTS">JOIN_HINTS</a></dd>
+ <dd id="Trino.Parser.LAMBDAS" class="variable"><a href="../parser.html#Parser.LAMBDAS">LAMBDAS</a></dd>
+ <dd id="Trino.Parser.COLUMN_OPERATORS" class="variable"><a href="../parser.html#Parser.COLUMN_OPERATORS">COLUMN_OPERATORS</a></dd>
+ <dd id="Trino.Parser.EXPRESSION_PARSERS" class="variable"><a href="../parser.html#Parser.EXPRESSION_PARSERS">EXPRESSION_PARSERS</a></dd>
+ <dd id="Trino.Parser.STATEMENT_PARSERS" class="variable"><a href="../parser.html#Parser.STATEMENT_PARSERS">STATEMENT_PARSERS</a></dd>
+ <dd id="Trino.Parser.UNARY_PARSERS" class="variable"><a href="../parser.html#Parser.UNARY_PARSERS">UNARY_PARSERS</a></dd>
+ <dd id="Trino.Parser.PRIMARY_PARSERS" class="variable"><a href="../parser.html#Parser.PRIMARY_PARSERS">PRIMARY_PARSERS</a></dd>
+ <dd id="Trino.Parser.PLACEHOLDER_PARSERS" class="variable"><a href="../parser.html#Parser.PLACEHOLDER_PARSERS">PLACEHOLDER_PARSERS</a></dd>
+ <dd id="Trino.Parser.RANGE_PARSERS" class="variable"><a href="../parser.html#Parser.RANGE_PARSERS">RANGE_PARSERS</a></dd>
+ <dd id="Trino.Parser.PROPERTY_PARSERS" class="variable"><a href="../parser.html#Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a></dd>
+ <dd id="Trino.Parser.CONSTRAINT_PARSERS" class="variable"><a href="../parser.html#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a></dd>
+ <dd id="Trino.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
+ <dd id="Trino.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
+ <dd id="Trino.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="Trino.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
+ <dd id="Trino.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
+ <dd id="Trino.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
+ <dd id="Trino.Parser.SET_PARSERS" class="variable"><a href="../parser.html#Parser.SET_PARSERS">SET_PARSERS</a></dd>
+ <dd id="Trino.Parser.SHOW_PARSERS" class="variable"><a href="../parser.html#Parser.SHOW_PARSERS">SHOW_PARSERS</a></dd>
+ <dd id="Trino.Parser.TYPE_LITERAL_PARSERS" class="variable"><a href="../parser.html#Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a></dd>
+ <dd id="Trino.Parser.MODIFIABLES" class="variable"><a href="../parser.html#Parser.MODIFIABLES">MODIFIABLES</a></dd>
+ <dd id="Trino.Parser.DDL_SELECT_TOKENS" class="variable"><a href="../parser.html#Parser.DDL_SELECT_TOKENS">DDL_SELECT_TOKENS</a></dd>
+ <dd id="Trino.Parser.PRE_VOLATILE_TOKENS" class="variable"><a href="../parser.html#Parser.PRE_VOLATILE_TOKENS">PRE_VOLATILE_TOKENS</a></dd>
+ <dd id="Trino.Parser.TRANSACTION_KIND" class="variable"><a href="../parser.html#Parser.TRANSACTION_KIND">TRANSACTION_KIND</a></dd>
+ <dd id="Trino.Parser.TRANSACTION_CHARACTERISTICS" class="variable"><a href="../parser.html#Parser.TRANSACTION_CHARACTERISTICS">TRANSACTION_CHARACTERISTICS</a></dd>
+ <dd id="Trino.Parser.INSERT_ALTERNATIVES" class="variable"><a href="../parser.html#Parser.INSERT_ALTERNATIVES">INSERT_ALTERNATIVES</a></dd>
+ <dd id="Trino.Parser.CLONE_KINDS" class="variable"><a href="../parser.html#Parser.CLONE_KINDS">CLONE_KINDS</a></dd>
+ <dd id="Trino.Parser.TABLE_INDEX_HINT_TOKENS" class="variable"><a href="../parser.html#Parser.TABLE_INDEX_HINT_TOKENS">TABLE_INDEX_HINT_TOKENS</a></dd>
+ <dd id="Trino.Parser.WINDOW_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_ALIAS_TOKENS">WINDOW_ALIAS_TOKENS</a></dd>
+ <dd id="Trino.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
+ <dd id="Trino.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
+ <dd id="Trino.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="Trino.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
+ <dd id="Trino.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
+ <dd id="Trino.Parser.CONCAT_NULL_OUTPUTS_STRING" class="variable"><a href="../parser.html#Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a></dd>
+ <dd id="Trino.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
+ <dd id="Trino.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
+ <dd id="Trino.Parser.LOG_BASE_FIRST" class="variable"><a href="../parser.html#Parser.LOG_BASE_FIRST">LOG_BASE_FIRST</a></dd>
+ <dd id="Trino.Parser.LOG_DEFAULTS_TO_LN" class="variable"><a href="../parser.html#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a></dd>
+ <dd id="Trino.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../parser.html#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
+ <dd id="Trino.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
+ <dd id="Trino.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
+ <dd id="Trino.Parser.NORMALIZE_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
+ <dd id="Trino.Parser.FORMAT_MAPPING" class="variable"><a href="../parser.html#Parser.FORMAT_MAPPING">FORMAT_MAPPING</a></dd>
+ <dd id="Trino.Parser.error_level" class="variable"><a href="../parser.html#Parser.error_level">error_level</a></dd>
+ <dd id="Trino.Parser.error_message_context" class="variable"><a href="../parser.html#Parser.error_message_context">error_message_context</a></dd>
+ <dd id="Trino.Parser.max_errors" class="variable"><a href="../parser.html#Parser.max_errors">max_errors</a></dd>
+ <dd id="Trino.Parser.reset" class="function"><a href="../parser.html#Parser.reset">reset</a></dd>
+ <dd id="Trino.Parser.parse" class="function"><a href="../parser.html#Parser.parse">parse</a></dd>
+ <dd id="Trino.Parser.parse_into" class="function"><a href="../parser.html#Parser.parse_into">parse_into</a></dd>
+ <dd id="Trino.Parser.check_errors" class="function"><a href="../parser.html#Parser.check_errors">check_errors</a></dd>
+ <dd id="Trino.Parser.raise_error" class="function"><a href="../parser.html#Parser.raise_error">raise_error</a></dd>
+ <dd id="Trino.Parser.expression" class="function"><a href="../parser.html#Parser.expression">expression</a></dd>
+ <dd id="Trino.Parser.validate_expression" class="function"><a href="../parser.html#Parser.validate_expression">validate_expression</a></dd>
+ <dd id="Trino.Parser.errors" class="variable"><a href="../parser.html#Parser.errors">errors</a></dd>
+ <dd id="Trino.Parser.sql" class="variable"><a href="../parser.html#Parser.sql">sql</a></dd>
+
+ </div>
+ <div><dt><a href="presto.html#Presto.Parser">sqlglot.dialects.presto.Presto.Parser</a></dt>
+ <dd id="Trino.Parser.FUNCTIONS" class="variable"><a href="presto.html#Presto.Parser.FUNCTIONS">FUNCTIONS</a></dd>
+ <dd id="Trino.Parser.FUNCTION_PARSERS" class="variable"><a href="presto.html#Presto.Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
+ <dd id="Trino.Parser.INDEX_OFFSET" class="variable"><a href="presto.html#Presto.Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
+ <dd id="Trino.Parser.STRICT_STRING_CONCAT" class="variable"><a href="presto.html#Presto.Parser.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
+ <dd id="Trino.Parser.NULL_ORDERING" class="variable"><a href="presto.html#Presto.Parser.NULL_ORDERING">NULL_ORDERING</a></dd>
+ <dd id="Trino.Parser.TIME_MAPPING" class="variable"><a href="presto.html#Presto.Parser.TIME_MAPPING">TIME_MAPPING</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
</main>
<script>
function escapeHTML(html) {
diff --git a/docs/sqlglot/dialects/tsql.html b/docs/sqlglot/dialects/tsql.html
index f942b34..ca659c7 100644
--- a/docs/sqlglot/dialects/tsql.html
+++ b/docs/sqlglot/dialects/tsql.html
@@ -115,6 +115,12 @@
<a class="variable" href="#TSQL.Parser.CONCAT_NULL_OUTPUTS_STRING">CONCAT_NULL_OUTPUTS_STRING</a>
</li>
<li>
+ <a class="variable" href="#TSQL.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a>
+ </li>
+ <li>
+ <a class="variable" href="#TSQL.Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#TSQL.Parser.NULL_ORDERING">NULL_ORDERING</a>
</li>
<li>
@@ -151,6 +157,12 @@
<a class="variable" href="#TSQL.Generator.RETURNING_END">RETURNING_END</a>
</li>
<li>
+ <a class="variable" href="#TSQL.Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
+ <a class="variable" href="#TSQL.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a>
+ </li>
+ <li>
<a class="variable" href="#TSQL.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -166,10 +178,13 @@
<a class="function" href="#TSQL.Generator.createable_sql">createable_sql</a>
</li>
<li>
+ <a class="function" href="#TSQL.Generator.create_sql">create_sql</a>
+ </li>
+ <li>
<a class="function" href="#TSQL.Generator.offset_sql">offset_sql</a>
</li>
<li>
- <a class="function" href="#TSQL.Generator.systemtime_sql">systemtime_sql</a>
+ <a class="function" href="#TSQL.Generator.version_sql">version_sql</a>
</li>
<li>
<a class="function" href="#TSQL.Generator.returnsproperty_sql">returnsproperty_sql</a>
@@ -190,6 +205,12 @@
<a class="function" href="#TSQL.Generator.identifier_sql">identifier_sql</a>
</li>
<li>
+ <a class="function" href="#TSQL.Generator.constraint_sql">constraint_sql</a>
+ </li>
+ <li>
+ <a class="function" href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a>
+ </li>
+ <li>
<a class="variable" href="#TSQL.Generator.SELECT_KINDS">SELECT_KINDS</a>
</li>
<li>
@@ -217,10 +238,7 @@
<a class="variable" href="#TSQL.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#TSQL.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#TSQL.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#TSQL.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#TSQL.Generator.BIT_START">BIT_START</a>
@@ -329,712 +347,736 @@
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</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-8"><a href="#L-8"><span class="linenos"> 8</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-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">Dialect</span><span class="p">,</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">parse_date_delta</span><span class="p">,</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="p">)</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span> <span class="nn">sqlglot.expressions</span> <span class="kn">import</span> <span class="n">DataType</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.time</span> <span class="kn">import</span> <span class="n">format_time</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="kn">from</span> <span class="nn">sqlglot._typing</span> <span class="kn">import</span> <span class="n">E</span>
-</span><span id="L-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">FULL_FORMAT_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&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;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&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;w&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&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;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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 class="n">DATE_DELTA_INTERVAL</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;ww&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="p">}</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>
+</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">parse_date_delta</span><span class="p">,</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="p">)</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">sqlglot.expressions</span> <span class="kn">import</span> <span class="n">DataType</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span> <span class="nn">sqlglot.time</span> <span class="kn">import</span> <span class="n">format_time</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.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</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._typing</span> <span class="kn">import</span> <span class="n">E</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">FULL_FORMAT_TIME_MAPPING</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;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&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;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&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;w&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&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;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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-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">DATE_DELTA_INTERVAL</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="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;ww&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</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;day&quot;</span><span class="p">,</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;day&quot;</span><span class="p">,</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;day&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><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="n">DATE_FMT_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="s2">&quot;([dD]{1,2})|([mM]{1,2})|([yY]{1,4})|([hH]{1,2})|([sS]{1,2})&quot;</span><span class="p">)</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="c1"># N = Numeric, C=Currency</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="n">TRANSPILE_SAFE_NUMBER_FMT</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;N&quot;</span><span class="p">,</span> <span class="s2">&quot;C&quot;</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">DEFAULT_START_DATE</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">1900</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</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="n">DATE_FMT_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="s2">&quot;([dD]{1,2})|([mM]{1,2})|([yY]{1,4})|([hH]{1,2})|([sS]{1,2})&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="c1"># N = Numeric, C=Currency</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="n">TRANSPILE_SAFE_NUMBER_FMT</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;N&quot;</span><span class="p">,</span> <span class="s2">&quot;C&quot;</span><span class="p">}</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="n">DEFAULT_START_DATE</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">1900</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</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">def</span> <span class="nf">_format_time_lambda</span><span class="p">(</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</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">full_format_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="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">assert</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><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="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">this</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">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;datetime&quot;</span><span class="p">),</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="p">{</span><span class="o">**</span><span class="n">TSQL</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="o">**</span><span class="n">FULL_FORMAT_TIME_MAPPING</span><span class="p">}</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">if</span> <span class="n">full_format_mapping</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">else</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">TIME_MAPPING</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="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="k">return</span> <span class="n">_format_time</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="k">def</span> <span class="nf">_format_time_lambda</span><span class="p">(</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</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">full_format_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="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">assert</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><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">return</span> <span class="n">exp_class</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">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;datetime&quot;</span><span class="p">),</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="p">{</span><span class="o">**</span><span class="n">TSQL</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="o">**</span><span class="n">FULL_FORMAT_TIME_MAPPING</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">full_format_mapping</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">else</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</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="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 class="k">return</span> <span class="n">_format_time</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="k">def</span> <span class="nf">_parse_format</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">assert</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><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">fmt</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">number_fmt</span> <span class="o">=</span> <span class="n">fmt</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">TRANSPILE_SAFE_NUMBER_FMT</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">DATE_FMT_RE</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</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">def</span> <span class="nf">_parse_format</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">fmt</span> <span class="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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">culture</span> <span class="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-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="n">number_fmt</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">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</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">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">(</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">FORMAT_TIME_MAPPING</span><span class="p">)</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">else</span> <span class="n">format_time</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">)</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="p">),</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="p">)</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">number_fmt</span> <span class="o">=</span> <span class="n">fmt</span> <span class="ow">and</span> <span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">TRANSPILE_SAFE_NUMBER_FMT</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">DATE_FMT_RE</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="n">number_fmt</span><span class="p">:</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">culture</span><span class="o">=</span><span class="n">culture</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">fmt</span><span class="p">:</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">FORMAT_TIME_MAPPING</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="nb">len</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">else</span> <span class="n">format_time</span><span class="p">(</span><span class="n">fmt</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">TIME_MAPPING</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><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">def</span> <span class="nf">_parse_eomonth</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">date</span> <span class="o">=</span> <span class="n">seq_get</span><span 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="n">month_lag</span> <span class="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-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">DATE_DELTA_INTERVAL</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">)</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="n">month_lag</span> <span class="ow">is</span> <span class="kc">None</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="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date</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="c1"># Remove month lag argument in parser as its compared with the number of arguments of the resulting class</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">args</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">month_lag</span><span class="p">)</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">month_lag</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">culture</span><span class="o">=</span><span class="n">culture</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><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="k">def</span> <span class="nf">_parse_eomonth</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">date</span> <span class="o">=</span> <span class="n">seq_get</span><span 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="n">month_lag</span> <span class="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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">DATE_DELTA_INTERVAL</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">)</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="n">month_lag</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date</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 class="c1"># Remove month lag argument in parser as its compared with the number of arguments of the resulting class</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">args</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">month_lag</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><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="k">def</span> <span class="nf">_parse_hashbytes</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">kind</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">args</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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="s2">&quot;MD5&quot;</span><span class="p">:</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">):</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="L-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">SHA</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SHA2_256&quot;</span><span class="p">:</span>
-</span><span id="L-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">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">256</span><span class="p">))</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SHA2_512&quot;</span><span class="p">:</span>
-</span><span id="L-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">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">512</span><span class="p">))</span>
-</span><span id="L-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">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">month_lag</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="k">def</span> <span class="nf">_parse_hashbytes</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">kind</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">args</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">):</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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">SHA</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SHA2_256&quot;</span><span class="p">:</span>
+</span><span id="L-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">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">256</span><span class="p">))</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SHA2_512&quot;</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">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">length</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">512</span><span class="p">))</span>
</span><span id="L-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><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_sql</span><span class="p">(</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><span class="p">)</span> <span class="o">-&gt;</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="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="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><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><span class="k">def</span> <span class="nf">_format_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">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">NumberToStr</span> <span class="o">|</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-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">fmt</span> <span class="o">=</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;format&quot;</span><span class="p">]</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="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">NumberToStr</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="n">exp</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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">),</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <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">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="n">TSQL</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">),</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <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="p">)</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">func</span><span class="p">(</span><span class="s2">&quot;FORMAT&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">fmt</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">_string_agg_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">GroupConcat</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">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-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">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span 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-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="c1"># exp.Distinct can appear below an exp.Order or an exp.GroupConcat expression</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;T-SQL STRING_AGG doesn&#39;t support DISTINCT.&quot;</span><span class="p">)</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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="p">:</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</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 class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITHIN GROUP (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="c1"># Order has a leading space</span>
-</span><span id="L-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">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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRING_AGG(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a><span class="k">def</span> <span class="nf">_parse_date_delta</span><span class="p">(</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit_mapping</span><span class="p">:</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</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">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="o">.</span><span class="n">name</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">start_date</span> <span class="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-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="n">start_date</span> <span class="ow">and</span> <span class="n">start_date</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="c1"># Numeric types are valid DATETIME values</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">if</span> <span class="n">start_date</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">adds</span> <span class="o">=</span> <span class="n">DEFAULT_START_DATE</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">start_date</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">start_date</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">adds</span><span class="o">.</span><span class="n">strftime</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-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="c1"># We currently don&#39;t handle float values, i.e. they&#39;re not converted to equivalent DATETIMEs.</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="c1"># This is not a problem when generating T-SQL code, it is when transpiling to other dialects.</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">start_date</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-191"><a href="#L-191"><span class="linenos">191</span></a>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">this</span><span class="o">=</span><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">2</span><span class="p">)),</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">expression</span><span class="o">=</span><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">start_date</span><span class="p">),</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">unit</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="k">return</span> <span class="n">inner_func</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-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><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_sql</span><span class="p">(</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</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">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a><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">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">func</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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="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><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a><span class="k">def</span> <span class="nf">_format_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">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">NumberToStr</span> <span class="o">|</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-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;format&quot;</span><span class="p">]</span>
+</span><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="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">)</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</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><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="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">),</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <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">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="n">TSQL</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">),</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="p">)</span>
+</span><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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">fmt</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;culture&quot;</span><span class="p">))</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="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">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">GroupConcat</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">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-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">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="c1"># exp.Distinct can appear below an exp.Order or an exp.GroupConcat expression</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;T-SQL STRING_AGG doesn&#39;t support DISTINCT.&quot;</span><span class="p">)</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-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">order</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 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-167"><a href="#L-167"><span class="linenos">167</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="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">expression</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-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITHIN GROUP (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="c1"># Order has a leading space</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">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-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRING_AGG(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">_parse_date_delta</span><span class="p">(</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</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-177"><a href="#L-177"><span class="linenos">177</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</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">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit_mapping</span><span class="p">:</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</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">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="o">.</span><span class="n">name</span><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">start_date</span> <span class="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="k">if</span> <span class="n">start_date</span> <span class="ow">and</span> <span class="n">start_date</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="c1"># Numeric types are valid DATETIME values</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">if</span> <span class="n">start_date</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">adds</span> <span class="o">=</span> <span class="n">DEFAULT_START_DATE</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">start_date</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">start_date</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">adds</span><span class="o">.</span><span class="n">strftime</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-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="c1"># We currently don&#39;t handle float values, i.e. they&#39;re not converted to equivalent DATETIMEs.</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="c1"># This is not a problem when generating T-SQL code, it is when transpiling to other dialects.</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">start_date</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-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">return</span> <span class="n">exp_class</span><span class="p">(</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">this</span><span class="o">=</span><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">2</span><span class="p">)),</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">expression</span><span class="o">=</span><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">start_date</span><span class="p">),</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="p">)</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><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</span></a>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;ww&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</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-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">CONVERT_FORMAT_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-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">FORMAT_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="p">}</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">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-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)]</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</span></a>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="s2">&quot;OUTPUT&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-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
-</span><span id="L-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">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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</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-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="p">),</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</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-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-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><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="p">}</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="p">}</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">RETURNS_TABLE_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</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-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">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <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="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="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-399"><a href="#L-399"><span class="linenos">399</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a><span class="sd"> T-SQL supports the syntax alias = expression in the SELECT&#39;s projection list,</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a><span class="sd"> so we transform all parsed Selects to convert their EQ projections into Aliases.</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="sd"> See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">return</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">alias_</span><span class="p">(</span><span class="n">projection</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">projection</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</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">EQ</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</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">Column</span><span class="p">)</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">else</span> <span class="n">projection</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">for</span> <span class="n">projection</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="p">]</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a><span class="sd"> COMMIT [ { TRAN | TRANSACTION }</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a><span class="sd"> [ transaction_name | @tran_name_variable ] ]</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a><span class="sd"> [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">inner_func</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><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-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">TIME_MAPPING</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="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;ww&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;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-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</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-245"><a href="#L-245"><span class="linenos">245</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-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</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-249"><a href="#L-249"><span class="linenos">249</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-250"><a href="#L-250"><span class="linenos">250</span></a> <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="n">CONVERT_FORMAT_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-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">FORMAT_TIME_MAPPING</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="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="p">}</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="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-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)]</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</span></a>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="o">**</span><span class="n">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-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</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-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</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-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="s2">&quot;UPDATE STATISTICS&quot;</span><span 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-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="s2">&quot;OUTPUT&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-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="s2">&quot;FOR SYSTEM_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="p">}</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">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-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</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-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</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-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="p">),</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</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-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="p">}</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="s2">&quot;REMOTE&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><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="p">}</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">RETURNS_TABLE_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><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">TABLE</span><span class="p">,</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</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-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="p">}</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="p">}</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</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="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a><span class="sd"> T-SQL supports the syntax alias = expression in the SELECT&#39;s projection list,</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a><span class="sd"> so we transform all parsed Selects to convert their EQ projections into Aliases.</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"> See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="k">return</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">alias_</span><span class="p">(</span><span class="n">projection</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">projection</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</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">EQ</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</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">Column</span><span class="p">)</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">else</span> <span class="n">projection</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">for</span> <span class="n">projection</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_projections</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="sd"> ROLLBACK { TRAN | TRANSACTION }</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="sd"> [ transaction_name | @tran_name_variable</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a><span class="sd"> | savepoint_name | @savepoint_variable ]</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">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-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a><span class="sd"> COMMIT [ { TRAN | TRANSACTION }</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a><span class="sd"> [ transaction_name | @tran_name_variable ] ]</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a><span class="sd"> [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]</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="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">})</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</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-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">if</span> <span class="n">rollback</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">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">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="sd"> ROLLBACK { TRAN | TRANSACTION }</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a><span class="sd"> [ transaction_name | @tran_name_variable</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a><span class="sd"> | savepoint_name | @savepoint_variable ]</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">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-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">durability</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</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-432"><a href="#L-432"><span class="linenos">432</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;DELAYED_DURABILITY&quot;</span><span class="p">)</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="bp">self</span><span 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-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="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-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">})</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</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-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">if</span> <span class="n">rollback</span><span class="p">:</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</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-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">durability</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</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-438"><a href="#L-438"><span class="linenos">438</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;DELAYED_DURABILITY&quot;</span><span class="p">)</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">durability</span><span class="o">=</span><span class="n">durability</span><span class="p">)</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a><span class="sd"> BEGIN { TRAN | TRANSACTION }</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="sd"> [ { transaction_name | @tran_name_variable }</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a><span class="sd"> [ WITH MARK [ &#39;description&#39; ] ]</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a><span class="sd"> ]</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)):</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">transaction</span> <span class="o">=</span> <span class="bp">self</span><span 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="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="k">if</span> <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;MARK&quot;</span><span class="p">):</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">transaction</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="n">transaction</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">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-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">_parse_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">if</span> <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-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">durability</span><span class="o">=</span><span class="n">durability</span><span class="p">)</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a><span class="sd"> BEGIN { TRAN | TRANSACTION }</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a><span class="sd"> [ { transaction_name | @tran_name_variable }</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a><span class="sd"> [ WITH MARK [ &#39;description&#39; ] ]</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a><span class="sd"> ]</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a><span class="sd"> &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="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)):</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">transaction</span> <span class="o">=</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="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;MARK&quot;</span><span class="p">):</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">transaction</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">transaction</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="p">)</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</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-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</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-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span>
-</span><span id="L-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="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</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-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</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-482"><a href="#L-482"><span class="linenos">482</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-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
-</span><span id="L-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 class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="n">system_time</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">def</span> <span class="nf">_parse_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">Table</span><span class="p">:</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">_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">ReturnsProperty</span><span class="p">:</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="n">returns</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">def</span> <span class="nf">_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-505"><a href="#L-505"><span class="linenos">505</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-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="bp">self</span><span 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-507"><a href="#L-507"><span class="linenos">507</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-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">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-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">_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-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">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">ReturnsProperty</span><span class="p">:</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="n">returns</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">_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-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="bp">self</span><span 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-476"><a href="#L-476"><span class="linenos">476</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-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">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="kc">None</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"># Retrieve length of datatype and override to default if not specified</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-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="c1"># Check whether a conversion with format is applicable</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-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">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">:</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <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">format_norm</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="L-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="c1"># Check whether the convert entails a string to date format</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="p">)</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="L-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="c1"># Entails a simple cast without any format requirement</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-515"><a href="#L-515"><span class="linenos">515</span></a>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="bp">self</span><span class="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-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">:</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="p">)</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">format_norm</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="p">):</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="k">return</span> <span class="n">this</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="c1"># Check whether the convert entails a string to date format</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
-</span><span id="L-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 class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-546"><a href="#L-546"><span class="linenos">546</span></a>
-</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</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-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="p">):</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</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-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</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-534"><a href="#L-534"><span class="linenos">534</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-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">is_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">HASH</span><span class="p">)</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="n">is_temporary</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">HASH</span><span class="p">)</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</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-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">if</span> <span class="n">is_global</span><span class="p">:</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="k">elif</span> <span class="n">is_temporary</span><span class="p">:</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="k">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">exp</span><span class="o">.</span><span class="n">Create</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-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">create</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">()</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a>
+</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">create</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">):</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">create</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">create</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 class="k">else</span> <span class="n">create</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <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;temporary&quot;</span><span class="p">):</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create</span><span class="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-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="n">create</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;properties&quot;</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="p">[]))</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="n">create</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;properties&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="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">())</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="n">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-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos">564</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-565"><a href="#L-565"><span class="linenos">565</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-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="n">is_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">HASH</span><span class="p">)</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="n">is_temporary</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">HASH</span><span class="p">)</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">return</span> <span class="n">create</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="k">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-562"><a href="#L-562"><span class="linenos">562</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-563"><a href="#L-563"><span class="linenos">563</span></a>
+</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OBJECT_ID&quot;</span><span class="p">):</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">)</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IS&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">):</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</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-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="k">if</span> <span class="n">is_global</span><span class="p">:</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="k">elif</span> <span class="n">is_temporary</span><span class="p">:</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a>
-</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="k">def</span> <span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">create</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">()</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a>
-</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">create</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">):</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">create</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">create</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 class="k">else</span> <span class="n">create</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <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;temporary&quot;</span><span class="p">):</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create</span><span class="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-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="n">create</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;properties&quot;</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="p">[]))</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">()</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="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-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="n">this</span><span class="o">=</span><span class="kc">None</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos">576</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="p">{</span><span class="s2">&quot;CLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">}</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
+</span><span id="L-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><span id="L-580"><a href="#L-580"><span class="linenos">580</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-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a>
-</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">create</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;properties&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="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">())</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a>
-</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="k">return</span> <span class="n">create</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a>
-</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="k">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-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="o">**</span><span class="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-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="n">exp</span><span 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-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="n">exp</span><span 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-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;DATETIMEOFFSET&quot;</span><span class="p">,</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="p">}</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a>
-</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span 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-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">exp</span><span 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-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">exp</span><span 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-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="n">exp</span><span 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;DATETIMEOFFSET&quot;</span><span class="p">,</span>
-</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
-</span><span id="L-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><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span 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-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</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-613"><a href="#L-613"><span class="linenos">613</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-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEPART&quot;</span><span class="p">),</span>
-</span><span id="L-615"><a href="#L-615"><span class="linenos">615</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-616"><a href="#L-616"><span class="linenos">616</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-617"><a href="#L-617"><span class="linenos">617</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-618"><a href="#L-618"><span class="linenos">618</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-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</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-621"><a href="#L-621"><span class="linenos">621</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-622"><a href="#L-622"><span class="linenos">622</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-623"><a href="#L-623"><span class="linenos">623</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-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos">625</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="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><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="p">),</span>
-</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span 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;&quot;</span><span class="p">,</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos">629</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-630"><a href="#L-630"><span class="linenos">630</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-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="p">}</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a>
-</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="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-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">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos">637</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-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="p">}</span>
-</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a>
-</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a>
-</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span 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-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</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;IDENTITY&quot;</span><span class="p">,</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos">604</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-605"><a href="#L-605"><span class="linenos">605</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-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEPART&quot;</span><span class="p">),</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos">607</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-608"><a href="#L-608"><span class="linenos">608</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-609"><a href="#L-609"><span class="linenos">609</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-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</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-613"><a href="#L-613"><span class="linenos">613</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-614"><a href="#L-614"><span class="linenos">614</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-615"><a href="#L-615"><span class="linenos">615</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-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos">617</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="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><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a> <span class="p">),</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span 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;&quot;</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">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</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">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</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><span id="L-625"><a href="#L-625"><span class="linenos">625</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-626"><a href="#L-626"><span class="linenos">626</span></a>
+</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos">629</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-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="p">}</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a>
+</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a>
+</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a>
+</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="L-639"><a href="#L-639"><span class="linenos">639</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-640"><a href="#L-640"><span class="linenos">640</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-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="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a>
+</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a>
-</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="L-647"><a href="#L-647"><span class="linenos">647</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-648"><a href="#L-648"><span class="linenos">648</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-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="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos">647</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-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-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">return</span> <span class="n">sql</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a>
-</span><span id="L-654"><a href="#L-654"><span class="linenos">654</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-655"><a href="#L-655"><span class="linenos">655</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-656"><a href="#L-656"><span class="linenos">656</span></a>
-</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="k">def</span> <span class="nf">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-658"><a href="#L-658"><span class="linenos">658</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-659"><a href="#L-659"><span class="linenos">659</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-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a>
-</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="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-663"><a href="#L-663"><span class="linenos">663</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-664"><a href="#L-664"><span class="linenos">664</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-665"><a href="#L-665"><span class="linenos">665</span></a>
-</span><span id="L-666"><a href="#L-666"><span class="linenos">666</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-667"><a href="#L-667"><span class="linenos">667</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-668"><a href="#L-668"><span class="linenos">668</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-669"><a href="#L-669"><span class="linenos">669</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-670"><a href="#L-670"><span class="linenos">670</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-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">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-673"><a href="#L-673"><span class="linenos">673</span></a>
-</span><span id="L-674"><a href="#L-674"><span class="linenos">674</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-675"><a href="#L-675"><span class="linenos">675</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-676"><a href="#L-676"><span class="linenos">676</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-677"><a href="#L-677"><span class="linenos">677</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-678"><a href="#L-678"><span class="linenos">678</span></a>
-</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a>
-</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a> <span class="k">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-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos">686</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-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&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="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</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">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-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos">693</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-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="p">)</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="k">if</span> <span class="n">exists</span><span class="p">:</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="n">table</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">Table</span><span class="p">)</span>
+</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><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">this</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-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) AND name = </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">):</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;CREATE OR REPLACE &quot;</span><span class="p">,</span> <span class="s2">&quot;CREATE OR ALTER &quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a>
+</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a>
+</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="k">def</span> <span class="nf">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-668"><a href="#L-668"><span class="linenos">668</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-669"><a href="#L-669"><span class="linenos">669</span></a>
+</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span> <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;TIMESTAMP&quot;</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos">674</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-675"><a href="#L-675"><span class="linenos">675</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;FROM&quot;</span><span class="p">,</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">):</span>
+</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;TO&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span> <span class="k">else</span> <span class="s2">&quot;AND&quot;</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="n">expr_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">sql</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="w"> </span><span class="mi">0</span><span class="p">))</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">expr_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">expr</span><span class="p">)</span>
+</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a>
+</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="n">expr_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expr_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a>
+</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="k">def</span> <span class="nf">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-686"><a href="#L-686"><span class="linenos">686</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-687"><a href="#L-687"><span class="linenos">687</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-688"><a href="#L-688"><span class="linenos">688</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-689"><a href="#L-689"><span class="linenos">689</span></a>
+</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a>
+</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="k">def</span> <span class="nf">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-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos">697</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-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a>
-</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a> <span class="k">def</span> <span class="nf">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-702"><a href="#L-702"><span class="linenos">702</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-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a> <span class="n">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-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a>
-</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a>
-</span><span id="L-710"><a href="#L-710"><span class="linenos">710</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;global&quot;</span><span class="p">):</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
-</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a>
-</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="p">)</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a>
+</span><span id="L-713"><a href="#L-713"><span class="linenos">713</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-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos">715</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-716"><a href="#L-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a>
+</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a>
+</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a>
+</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a>
+</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="k">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-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos">730</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos">731</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-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="c1"># https://learn.microsoft.com/en-us/answers/questions/448821/create-table-in-sql-server</span>
+</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a> <span class="bp">self</span><span class="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-736"><a href="#L-736"><span class="linenos">736</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos">737</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 class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="L-738"><a href="#L-738"><span class="linenos">738</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;increment&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos">739</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IDENTITY(</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">increment</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -1111,11 +1153,11 @@
</div>
<a class="headerlink" href="#generate_date_delta_with_unit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="generate_date_delta_with_unit_sql-133"><a href="#generate_date_delta_with_unit_sql-133"><span class="linenos">133</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_sql</span><span class="p">(</span>
-</span><span id="generate_date_delta_with_unit_sql-134"><a href="#generate_date_delta_with_unit_sql-134"><span class="linenos">134</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">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span>
-</span><span id="generate_date_delta_with_unit_sql-135"><a href="#generate_date_delta_with_unit_sql-135"><span class="linenos">135</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="generate_date_delta_with_unit_sql-136"><a href="#generate_date_delta_with_unit_sql-136"><span class="linenos">136</span></a> <span class="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
-</span><span id="generate_date_delta_with_unit_sql-137"><a href="#generate_date_delta_with_unit_sql-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="generate_date_delta_with_unit_sql-135"><a href="#generate_date_delta_with_unit_sql-135"><span class="linenos">135</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_sql</span><span class="p">(</span>
+</span><span id="generate_date_delta_with_unit_sql-136"><a href="#generate_date_delta_with_unit_sql-136"><span class="linenos">136</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">DateAdd</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span>
+</span><span id="generate_date_delta_with_unit_sql-137"><a href="#generate_date_delta_with_unit_sql-137"><span class="linenos">137</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="generate_date_delta_with_unit_sql-138"><a href="#generate_date_delta_with_unit_sql-138"><span class="linenos">138</span></a> <span class="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
+</span><span id="generate_date_delta_with_unit_sql-139"><a href="#generate_date_delta_with_unit_sql-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -1133,521 +1175,543 @@
</div>
<a class="headerlink" href="#TSQL"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL-202"><a href="#TSQL-202"><span class="linenos">202</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="TSQL-203"><a href="#TSQL-203"><span class="linenos">203</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL-204"><a href="#TSQL-204"><span class="linenos">204</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="TSQL-205"><a href="#TSQL-205"><span class="linenos">205</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-mm-dd hh:mm:ss&#39;&quot;</span>
-</span><span id="TSQL-206"><a href="#TSQL-206"><span class="linenos">206</span></a>
-</span><span id="TSQL-207"><a href="#TSQL-207"><span class="linenos">207</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-208"><a href="#TSQL-208"><span class="linenos">208</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-209"><a href="#TSQL-209"><span class="linenos">209</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="TSQL-210"><a href="#TSQL-210"><span class="linenos">210</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="TSQL-211"><a href="#TSQL-211"><span class="linenos">211</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="TSQL-212"><a href="#TSQL-212"><span class="linenos">212</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
-</span><span id="TSQL-213"><a href="#TSQL-213"><span class="linenos">213</span></a> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-214"><a href="#TSQL-214"><span class="linenos">214</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-215"><a href="#TSQL-215"><span class="linenos">215</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-216"><a href="#TSQL-216"><span class="linenos">216</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-217"><a href="#TSQL-217"><span class="linenos">217</span></a> <span class="s2">&quot;ww&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-218"><a href="#TSQL-218"><span class="linenos">218</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-219"><a href="#TSQL-219"><span class="linenos">219</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
-</span><span id="TSQL-220"><a href="#TSQL-220"><span class="linenos">220</span></a> <span class="s2">&quot;hh&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span>
-</span><span id="TSQL-221"><a href="#TSQL-221"><span class="linenos">221</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-222"><a href="#TSQL-222"><span class="linenos">222</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-223"><a href="#TSQL-223"><span class="linenos">223</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-224"><a href="#TSQL-224"><span class="linenos">224</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-225"><a href="#TSQL-225"><span class="linenos">225</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-226"><a href="#TSQL-226"><span class="linenos">226</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-227"><a href="#TSQL-227"><span class="linenos">227</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-228"><a href="#TSQL-228"><span class="linenos">228</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-229"><a href="#TSQL-229"><span class="linenos">229</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-230"><a href="#TSQL-230"><span class="linenos">230</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-231"><a href="#TSQL-231"><span class="linenos">231</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="TSQL-232"><a href="#TSQL-232"><span class="linenos">232</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-233"><a href="#TSQL-233"><span class="linenos">233</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-234"><a href="#TSQL-234"><span class="linenos">234</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-235"><a href="#TSQL-235"><span class="linenos">235</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-236"><a href="#TSQL-236"><span class="linenos">236</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-237"><a href="#TSQL-237"><span class="linenos">237</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="TSQL-238"><a href="#TSQL-238"><span class="linenos">238</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="TSQL-239"><a href="#TSQL-239"><span class="linenos">239</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="TSQL-240"><a href="#TSQL-240"><span class="linenos">240</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="TSQL-241"><a href="#TSQL-241"><span class="linenos">241</span></a> <span class="s2">&quot;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-242"><a href="#TSQL-242"><span class="linenos">242</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-243"><a href="#TSQL-243"><span class="linenos">243</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
-</span><span id="TSQL-244"><a href="#TSQL-244"><span class="linenos">244</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="TSQL-245"><a href="#TSQL-245"><span class="linenos">245</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="TSQL-246"><a href="#TSQL-246"><span class="linenos">246</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-247"><a href="#TSQL-247"><span class="linenos">247</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-248"><a href="#TSQL-248"><span class="linenos">248</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-249"><a href="#TSQL-249"><span class="linenos">249</span></a> <span class="p">}</span>
-</span><span id="TSQL-250"><a href="#TSQL-250"><span class="linenos">250</span></a>
-</span><span id="TSQL-251"><a href="#TSQL-251"><span class="linenos">251</span></a> <span class="n">CONVERT_FORMAT_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-252"><a href="#TSQL-252"><span class="linenos">252</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-253"><a href="#TSQL-253"><span class="linenos">253</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-254"><a href="#TSQL-254"><span class="linenos">254</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-255"><a href="#TSQL-255"><span class="linenos">255</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-256"><a href="#TSQL-256"><span class="linenos">256</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-257"><a href="#TSQL-257"><span class="linenos">257</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-258"><a href="#TSQL-258"><span class="linenos">258</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-259"><a href="#TSQL-259"><span class="linenos">259</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-260"><a href="#TSQL-260"><span class="linenos">260</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-261"><a href="#TSQL-261"><span class="linenos">261</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-262"><a href="#TSQL-262"><span class="linenos">262</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
-</span><span id="TSQL-263"><a href="#TSQL-263"><span class="linenos">263</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
-</span><span id="TSQL-264"><a href="#TSQL-264"><span class="linenos">264</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
-</span><span id="TSQL-265"><a href="#TSQL-265"><span class="linenos">265</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-266"><a href="#TSQL-266"><span class="linenos">266</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-267"><a href="#TSQL-267"><span class="linenos">267</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-268"><a href="#TSQL-268"><span class="linenos">268</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-269"><a href="#TSQL-269"><span class="linenos">269</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-270"><a href="#TSQL-270"><span class="linenos">270</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-271"><a href="#TSQL-271"><span class="linenos">271</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-272"><a href="#TSQL-272"><span class="linenos">272</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-273"><a href="#TSQL-273"><span class="linenos">273</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-274"><a href="#TSQL-274"><span class="linenos">274</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-275"><a href="#TSQL-275"><span class="linenos">275</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-276"><a href="#TSQL-276"><span class="linenos">276</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-277"><a href="#TSQL-277"><span class="linenos">277</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-278"><a href="#TSQL-278"><span class="linenos">278</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-279"><a href="#TSQL-279"><span class="linenos">279</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-280"><a href="#TSQL-280"><span class="linenos">280</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-281"><a href="#TSQL-281"><span class="linenos">281</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-282"><a href="#TSQL-282"><span class="linenos">282</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-283"><a href="#TSQL-283"><span class="linenos">283</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-284"><a href="#TSQL-284"><span class="linenos">284</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-285"><a href="#TSQL-285"><span class="linenos">285</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-286"><a href="#TSQL-286"><span class="linenos">286</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-287"><a href="#TSQL-287"><span class="linenos">287</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-288"><a href="#TSQL-288"><span class="linenos">288</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-289"><a href="#TSQL-289"><span class="linenos">289</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-290"><a href="#TSQL-290"><span class="linenos">290</span></a> <span class="p">}</span>
-</span><span id="TSQL-291"><a href="#TSQL-291"><span class="linenos">291</span></a>
-</span><span id="TSQL-292"><a href="#TSQL-292"><span class="linenos">292</span></a> <span class="n">FORMAT_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-293"><a href="#TSQL-293"><span class="linenos">293</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-294"><a href="#TSQL-294"><span class="linenos">294</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-295"><a href="#TSQL-295"><span class="linenos">295</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="TSQL-296"><a href="#TSQL-296"><span class="linenos">296</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="TSQL-297"><a href="#TSQL-297"><span class="linenos">297</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-298"><a href="#TSQL-298"><span class="linenos">298</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-299"><a href="#TSQL-299"><span class="linenos">299</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-300"><a href="#TSQL-300"><span class="linenos">300</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-301"><a href="#TSQL-301"><span class="linenos">301</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-302"><a href="#TSQL-302"><span class="linenos">302</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-303"><a href="#TSQL-303"><span class="linenos">303</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-304"><a href="#TSQL-304"><span class="linenos">304</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-305"><a href="#TSQL-305"><span class="linenos">305</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-306"><a href="#TSQL-306"><span class="linenos">306</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="TSQL-307"><a href="#TSQL-307"><span class="linenos">307</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="TSQL-308"><a href="#TSQL-308"><span class="linenos">308</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-309"><a href="#TSQL-309"><span class="linenos">309</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-310"><a href="#TSQL-310"><span class="linenos">310</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-311"><a href="#TSQL-311"><span class="linenos">311</span></a> <span class="p">}</span>
-</span><span id="TSQL-312"><a href="#TSQL-312"><span class="linenos">312</span></a>
-</span><span id="TSQL-313"><a href="#TSQL-313"><span class="linenos">313</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="TSQL-314"><a href="#TSQL-314"><span class="linenos">314</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)]</span>
-</span><span id="TSQL-315"><a href="#TSQL-315"><span class="linenos">315</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="TSQL-316"><a href="#TSQL-316"><span class="linenos">316</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="TSQL-317"><a href="#TSQL-317"><span class="linenos">317</span></a>
-</span><span id="TSQL-318"><a href="#TSQL-318"><span class="linenos">318</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-319"><a href="#TSQL-319"><span class="linenos">319</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="TSQL-320"><a href="#TSQL-320"><span class="linenos">320</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL-321"><a href="#TSQL-321"><span class="linenos">321</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="TSQL-322"><a href="#TSQL-322"><span class="linenos">322</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL-323"><a href="#TSQL-323"><span class="linenos">323</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="TSQL-324"><a href="#TSQL-324"><span class="linenos">324</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="TSQL-325"><a href="#TSQL-325"><span class="linenos">325</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL-326"><a href="#TSQL-326"><span class="linenos">326</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL-327"><a href="#TSQL-327"><span class="linenos">327</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL-328"><a href="#TSQL-328"><span class="linenos">328</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="TSQL-329"><a href="#TSQL-329"><span class="linenos">329</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="TSQL-330"><a href="#TSQL-330"><span class="linenos">330</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="TSQL-331"><a href="#TSQL-331"><span class="linenos">331</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL-332"><a href="#TSQL-332"><span class="linenos">332</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="TSQL-333"><a href="#TSQL-333"><span class="linenos">333</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="TSQL-334"><a href="#TSQL-334"><span class="linenos">334</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="TSQL-335"><a href="#TSQL-335"><span class="linenos">335</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="TSQL-336"><a href="#TSQL-336"><span class="linenos">336</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL-337"><a href="#TSQL-337"><span class="linenos">337</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="TSQL-338"><a href="#TSQL-338"><span class="linenos">338</span></a> <span class="s2">&quot;OUTPUT&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="TSQL-339"><a href="#TSQL-339"><span class="linenos">339</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
-</span><span id="TSQL-340"><a href="#TSQL-340"><span class="linenos">340</span></a> <span class="p">}</span>
-</span><span id="TSQL-341"><a href="#TSQL-341"><span class="linenos">341</span></a>
-</span><span id="TSQL-342"><a href="#TSQL-342"><span class="linenos">342</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="TSQL-343"><a href="#TSQL-343"><span class="linenos">343</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-344"><a href="#TSQL-344"><span class="linenos">344</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="TSQL-345"><a href="#TSQL-345"><span class="linenos">345</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="TSQL-346"><a href="#TSQL-346"><span class="linenos">346</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="TSQL-347"><a href="#TSQL-347"><span class="linenos">347</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="TSQL-348"><a href="#TSQL-348"><span class="linenos">348</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="TSQL-349"><a href="#TSQL-349"><span class="linenos">349</span></a> <span class="p">),</span>
-</span><span id="TSQL-350"><a href="#TSQL-350"><span class="linenos">350</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL-351"><a href="#TSQL-351"><span class="linenos">351</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL-352"><a href="#TSQL-352"><span class="linenos">352</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TSQL-353"><a href="#TSQL-353"><span class="linenos">353</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
-</span><span id="TSQL-354"><a href="#TSQL-354"><span class="linenos">354</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
-</span><span id="TSQL-355"><a href="#TSQL-355"><span class="linenos">355</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
-</span><span id="TSQL-356"><a href="#TSQL-356"><span class="linenos">356</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-357"><a href="#TSQL-357"><span class="linenos">357</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
-</span><span id="TSQL-358"><a href="#TSQL-358"><span class="linenos">358</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-359"><a href="#TSQL-359"><span class="linenos">359</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-360"><a href="#TSQL-360"><span class="linenos">360</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-361"><a href="#TSQL-361"><span class="linenos">361</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-362"><a href="#TSQL-362"><span class="linenos">362</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-363"><a href="#TSQL-363"><span class="linenos">363</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="TSQL-364"><a href="#TSQL-364"><span class="linenos">364</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-365"><a href="#TSQL-365"><span class="linenos">365</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-366"><a href="#TSQL-366"><span class="linenos">366</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-367"><a href="#TSQL-367"><span class="linenos">367</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-368"><a href="#TSQL-368"><span class="linenos">368</span></a> <span class="p">}</span>
-</span><span id="TSQL-369"><a href="#TSQL-369"><span class="linenos">369</span></a>
-</span><span id="TSQL-370"><a href="#TSQL-370"><span class="linenos">370</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-371"><a href="#TSQL-371"><span class="linenos">371</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
-</span><span id="TSQL-372"><a href="#TSQL-372"><span class="linenos">372</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
-</span><span id="TSQL-373"><a href="#TSQL-373"><span class="linenos">373</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
-</span><span id="TSQL-374"><a href="#TSQL-374"><span class="linenos">374</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
-</span><span id="TSQL-375"><a href="#TSQL-375"><span class="linenos">375</span></a> <span class="p">}</span>
-</span><span id="TSQL-376"><a href="#TSQL-376"><span class="linenos">376</span></a>
-</span><span id="TSQL-377"><a href="#TSQL-377"><span class="linenos">377</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-378"><a href="#TSQL-378"><span class="linenos">378</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="TSQL-379"><a href="#TSQL-379"><span class="linenos">379</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="TSQL-380"><a href="#TSQL-380"><span class="linenos">380</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="TSQL-381"><a href="#TSQL-381"><span class="linenos">381</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="TSQL-382"><a href="#TSQL-382"><span class="linenos">382</span></a> <span class="p">}</span>
-</span><span id="TSQL-383"><a href="#TSQL-383"><span class="linenos">383</span></a>
-</span><span id="TSQL-384"><a href="#TSQL-384"><span class="linenos">384</span></a> <span class="n">RETURNS_TABLE_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="TSQL-385"><a href="#TSQL-385"><span class="linenos">385</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="TSQL-386"><a href="#TSQL-386"><span class="linenos">386</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="TSQL-387"><a href="#TSQL-387"><span class="linenos">387</span></a> <span class="p">}</span>
-</span><span id="TSQL-388"><a href="#TSQL-388"><span class="linenos">388</span></a>
-</span><span id="TSQL-389"><a href="#TSQL-389"><span class="linenos">389</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-390"><a href="#TSQL-390"><span class="linenos">390</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="TSQL-391"><a href="#TSQL-391"><span class="linenos">391</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
-</span><span id="TSQL-392"><a href="#TSQL-392"><span class="linenos">392</span></a> <span class="p">}</span>
-</span><span id="TSQL-393"><a href="#TSQL-393"><span class="linenos">393</span></a>
-</span><span id="TSQL-394"><a href="#TSQL-394"><span class="linenos">394</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL-395"><a href="#TSQL-395"><span class="linenos">395</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL-396"><a href="#TSQL-396"><span class="linenos">396</span></a>
-</span><span id="TSQL-397"><a href="#TSQL-397"><span class="linenos">397</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL-398"><a href="#TSQL-398"><span class="linenos">398</span></a>
-</span><span id="TSQL-399"><a href="#TSQL-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="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="TSQL-400"><a href="#TSQL-400"><span class="linenos">400</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="TSQL-401"><a href="#TSQL-401"><span class="linenos">401</span></a><span class="sd"> T-SQL supports the syntax alias = expression in the SELECT&#39;s projection list,</span>
-</span><span id="TSQL-402"><a href="#TSQL-402"><span class="linenos">402</span></a><span class="sd"> so we transform all parsed Selects to convert their EQ projections into Aliases.</span>
-</span><span id="TSQL-403"><a href="#TSQL-403"><span class="linenos">403</span></a>
-</span><span id="TSQL-404"><a href="#TSQL-404"><span class="linenos">404</span></a><span class="sd"> See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax</span>
-</span><span id="TSQL-405"><a href="#TSQL-405"><span class="linenos">405</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL-406"><a href="#TSQL-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="TSQL-407"><a href="#TSQL-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">projection</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">projection</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL-408"><a href="#TSQL-408"><span class="linenos">408</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">EQ</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</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">Column</span><span class="p">)</span>
-</span><span id="TSQL-409"><a href="#TSQL-409"><span class="linenos">409</span></a> <span class="k">else</span> <span class="n">projection</span>
-</span><span id="TSQL-410"><a href="#TSQL-410"><span class="linenos">410</span></a> <span class="k">for</span> <span class="n">projection</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
-</span><span id="TSQL-411"><a href="#TSQL-411"><span class="linenos">411</span></a> <span class="p">]</span>
-</span><span id="TSQL-412"><a href="#TSQL-412"><span class="linenos">412</span></a>
-</span><span id="TSQL-413"><a href="#TSQL-413"><span class="linenos">413</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="TSQL-414"><a href="#TSQL-414"><span class="linenos">414</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
-</span><span id="TSQL-415"><a href="#TSQL-415"><span class="linenos">415</span></a><span class="sd"> COMMIT [ { TRAN | TRANSACTION }</span>
-</span><span id="TSQL-416"><a href="#TSQL-416"><span class="linenos">416</span></a><span class="sd"> [ transaction_name | @tran_name_variable ] ]</span>
-</span><span id="TSQL-417"><a href="#TSQL-417"><span class="linenos">417</span></a><span class="sd"> [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL-204"><a href="#TSQL-204"><span class="linenos">204</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="TSQL-205"><a href="#TSQL-205"><span class="linenos">205</span></a> <span class="n">RESOLVES_IDENTIFIERS_AS_UPPERCASE</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL-206"><a href="#TSQL-206"><span class="linenos">206</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="TSQL-207"><a href="#TSQL-207"><span class="linenos">207</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-mm-dd hh:mm:ss&#39;&quot;</span>
+</span><span id="TSQL-208"><a href="#TSQL-208"><span class="linenos">208</span></a>
+</span><span id="TSQL-209"><a href="#TSQL-209"><span class="linenos">209</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-210"><a href="#TSQL-210"><span class="linenos">210</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-211"><a href="#TSQL-211"><span class="linenos">211</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="TSQL-212"><a href="#TSQL-212"><span class="linenos">212</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="TSQL-213"><a href="#TSQL-213"><span class="linenos">213</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="TSQL-214"><a href="#TSQL-214"><span class="linenos">214</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
+</span><span id="TSQL-215"><a href="#TSQL-215"><span class="linenos">215</span></a> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-216"><a href="#TSQL-216"><span class="linenos">216</span></a> <span class="s2">&quot;dy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-217"><a href="#TSQL-217"><span class="linenos">217</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-218"><a href="#TSQL-218"><span class="linenos">218</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-219"><a href="#TSQL-219"><span class="linenos">219</span></a> <span class="s2">&quot;ww&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-220"><a href="#TSQL-220"><span class="linenos">220</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-221"><a href="#TSQL-221"><span class="linenos">221</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
+</span><span id="TSQL-222"><a href="#TSQL-222"><span class="linenos">222</span></a> <span class="s2">&quot;hh&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span>
+</span><span id="TSQL-223"><a href="#TSQL-223"><span class="linenos">223</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-224"><a href="#TSQL-224"><span class="linenos">224</span></a> <span class="s2">&quot;mi&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-225"><a href="#TSQL-225"><span class="linenos">225</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-226"><a href="#TSQL-226"><span class="linenos">226</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-227"><a href="#TSQL-227"><span class="linenos">227</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-228"><a href="#TSQL-228"><span class="linenos">228</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-229"><a href="#TSQL-229"><span class="linenos">229</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-230"><a href="#TSQL-230"><span class="linenos">230</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-231"><a href="#TSQL-231"><span class="linenos">231</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-232"><a href="#TSQL-232"><span class="linenos">232</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-233"><a href="#TSQL-233"><span class="linenos">233</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="TSQL-234"><a href="#TSQL-234"><span class="linenos">234</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-235"><a href="#TSQL-235"><span class="linenos">235</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-236"><a href="#TSQL-236"><span class="linenos">236</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-237"><a href="#TSQL-237"><span class="linenos">237</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-238"><a href="#TSQL-238"><span class="linenos">238</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-239"><a href="#TSQL-239"><span class="linenos">239</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="TSQL-240"><a href="#TSQL-240"><span class="linenos">240</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="TSQL-241"><a href="#TSQL-241"><span class="linenos">241</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="TSQL-242"><a href="#TSQL-242"><span class="linenos">242</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="TSQL-243"><a href="#TSQL-243"><span class="linenos">243</span></a> <span class="s2">&quot;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-244"><a href="#TSQL-244"><span class="linenos">244</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-245"><a href="#TSQL-245"><span class="linenos">245</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
+</span><span id="TSQL-246"><a href="#TSQL-246"><span class="linenos">246</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="TSQL-247"><a href="#TSQL-247"><span class="linenos">247</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="TSQL-248"><a href="#TSQL-248"><span class="linenos">248</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-249"><a href="#TSQL-249"><span class="linenos">249</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-250"><a href="#TSQL-250"><span class="linenos">250</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-251"><a href="#TSQL-251"><span class="linenos">251</span></a> <span class="p">}</span>
+</span><span id="TSQL-252"><a href="#TSQL-252"><span class="linenos">252</span></a>
+</span><span id="TSQL-253"><a href="#TSQL-253"><span class="linenos">253</span></a> <span class="n">CONVERT_FORMAT_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-254"><a href="#TSQL-254"><span class="linenos">254</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-255"><a href="#TSQL-255"><span class="linenos">255</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-256"><a href="#TSQL-256"><span class="linenos">256</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-257"><a href="#TSQL-257"><span class="linenos">257</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-258"><a href="#TSQL-258"><span class="linenos">258</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-259"><a href="#TSQL-259"><span class="linenos">259</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-260"><a href="#TSQL-260"><span class="linenos">260</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-261"><a href="#TSQL-261"><span class="linenos">261</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-262"><a href="#TSQL-262"><span class="linenos">262</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-263"><a href="#TSQL-263"><span class="linenos">263</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-264"><a href="#TSQL-264"><span class="linenos">264</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
+</span><span id="TSQL-265"><a href="#TSQL-265"><span class="linenos">265</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
+</span><span id="TSQL-266"><a href="#TSQL-266"><span class="linenos">266</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
+</span><span id="TSQL-267"><a href="#TSQL-267"><span class="linenos">267</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-268"><a href="#TSQL-268"><span class="linenos">268</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-269"><a href="#TSQL-269"><span class="linenos">269</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-270"><a href="#TSQL-270"><span class="linenos">270</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-271"><a href="#TSQL-271"><span class="linenos">271</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-272"><a href="#TSQL-272"><span class="linenos">272</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-273"><a href="#TSQL-273"><span class="linenos">273</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-274"><a href="#TSQL-274"><span class="linenos">274</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-275"><a href="#TSQL-275"><span class="linenos">275</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-276"><a href="#TSQL-276"><span class="linenos">276</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-277"><a href="#TSQL-277"><span class="linenos">277</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-278"><a href="#TSQL-278"><span class="linenos">278</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-279"><a href="#TSQL-279"><span class="linenos">279</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-280"><a href="#TSQL-280"><span class="linenos">280</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-281"><a href="#TSQL-281"><span class="linenos">281</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-282"><a href="#TSQL-282"><span class="linenos">282</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-283"><a href="#TSQL-283"><span class="linenos">283</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-284"><a href="#TSQL-284"><span class="linenos">284</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-285"><a href="#TSQL-285"><span class="linenos">285</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-286"><a href="#TSQL-286"><span class="linenos">286</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-287"><a href="#TSQL-287"><span class="linenos">287</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-288"><a href="#TSQL-288"><span class="linenos">288</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-289"><a href="#TSQL-289"><span class="linenos">289</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-290"><a href="#TSQL-290"><span class="linenos">290</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-291"><a href="#TSQL-291"><span class="linenos">291</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-292"><a href="#TSQL-292"><span class="linenos">292</span></a> <span class="p">}</span>
+</span><span id="TSQL-293"><a href="#TSQL-293"><span class="linenos">293</span></a>
+</span><span id="TSQL-294"><a href="#TSQL-294"><span class="linenos">294</span></a> <span class="n">FORMAT_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-295"><a href="#TSQL-295"><span class="linenos">295</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-296"><a href="#TSQL-296"><span class="linenos">296</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-297"><a href="#TSQL-297"><span class="linenos">297</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="TSQL-298"><a href="#TSQL-298"><span class="linenos">298</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="TSQL-299"><a href="#TSQL-299"><span class="linenos">299</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-300"><a href="#TSQL-300"><span class="linenos">300</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-301"><a href="#TSQL-301"><span class="linenos">301</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-302"><a href="#TSQL-302"><span class="linenos">302</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-303"><a href="#TSQL-303"><span class="linenos">303</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-304"><a href="#TSQL-304"><span class="linenos">304</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-305"><a href="#TSQL-305"><span class="linenos">305</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-306"><a href="#TSQL-306"><span class="linenos">306</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-307"><a href="#TSQL-307"><span class="linenos">307</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-308"><a href="#TSQL-308"><span class="linenos">308</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="TSQL-309"><a href="#TSQL-309"><span class="linenos">309</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="TSQL-310"><a href="#TSQL-310"><span class="linenos">310</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-311"><a href="#TSQL-311"><span class="linenos">311</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-312"><a href="#TSQL-312"><span class="linenos">312</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-313"><a href="#TSQL-313"><span class="linenos">313</span></a> <span class="p">}</span>
+</span><span id="TSQL-314"><a href="#TSQL-314"><span class="linenos">314</span></a>
+</span><span id="TSQL-315"><a href="#TSQL-315"><span class="linenos">315</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="TSQL-316"><a href="#TSQL-316"><span class="linenos">316</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)]</span>
+</span><span id="TSQL-317"><a href="#TSQL-317"><span class="linenos">317</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="TSQL-318"><a href="#TSQL-318"><span class="linenos">318</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="TSQL-319"><a href="#TSQL-319"><span class="linenos">319</span></a>
+</span><span id="TSQL-320"><a href="#TSQL-320"><span class="linenos">320</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-321"><a href="#TSQL-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="TSQL-322"><a href="#TSQL-322"><span class="linenos">322</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL-323"><a href="#TSQL-323"><span class="linenos">323</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="TSQL-324"><a href="#TSQL-324"><span class="linenos">324</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL-325"><a href="#TSQL-325"><span class="linenos">325</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="TSQL-326"><a href="#TSQL-326"><span class="linenos">326</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="TSQL-327"><a href="#TSQL-327"><span class="linenos">327</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL-328"><a href="#TSQL-328"><span class="linenos">328</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL-329"><a href="#TSQL-329"><span class="linenos">329</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL-330"><a href="#TSQL-330"><span class="linenos">330</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
+</span><span id="TSQL-331"><a href="#TSQL-331"><span class="linenos">331</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="TSQL-332"><a href="#TSQL-332"><span class="linenos">332</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="TSQL-333"><a href="#TSQL-333"><span class="linenos">333</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL-334"><a href="#TSQL-334"><span class="linenos">334</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="TSQL-335"><a href="#TSQL-335"><span class="linenos">335</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="TSQL-336"><a href="#TSQL-336"><span class="linenos">336</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="TSQL-337"><a href="#TSQL-337"><span class="linenos">337</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="TSQL-338"><a href="#TSQL-338"><span class="linenos">338</span></a> <span class="s2">&quot;UPDATE STATISTICS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL-339"><a href="#TSQL-339"><span class="linenos">339</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL-340"><a href="#TSQL-340"><span class="linenos">340</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="TSQL-341"><a href="#TSQL-341"><span class="linenos">341</span></a> <span class="s2">&quot;OUTPUT&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="TSQL-342"><a href="#TSQL-342"><span class="linenos">342</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="TSQL-343"><a href="#TSQL-343"><span class="linenos">343</span></a> <span class="s2">&quot;FOR SYSTEM_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="TSQL-344"><a href="#TSQL-344"><span class="linenos">344</span></a> <span class="p">}</span>
+</span><span id="TSQL-345"><a href="#TSQL-345"><span class="linenos">345</span></a>
+</span><span id="TSQL-346"><a href="#TSQL-346"><span class="linenos">346</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="TSQL-347"><a href="#TSQL-347"><span class="linenos">347</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-348"><a href="#TSQL-348"><span class="linenos">348</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="TSQL-349"><a href="#TSQL-349"><span class="linenos">349</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="TSQL-350"><a href="#TSQL-350"><span class="linenos">350</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="TSQL-351"><a href="#TSQL-351"><span class="linenos">351</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="TSQL-352"><a href="#TSQL-352"><span class="linenos">352</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="TSQL-353"><a href="#TSQL-353"><span class="linenos">353</span></a> <span class="p">),</span>
+</span><span id="TSQL-354"><a href="#TSQL-354"><span class="linenos">354</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL-355"><a href="#TSQL-355"><span class="linenos">355</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL-356"><a href="#TSQL-356"><span class="linenos">356</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TSQL-357"><a href="#TSQL-357"><span class="linenos">357</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
+</span><span id="TSQL-358"><a href="#TSQL-358"><span class="linenos">358</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
+</span><span id="TSQL-359"><a href="#TSQL-359"><span class="linenos">359</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
+</span><span id="TSQL-360"><a href="#TSQL-360"><span class="linenos">360</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-361"><a href="#TSQL-361"><span class="linenos">361</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
+</span><span id="TSQL-362"><a href="#TSQL-362"><span class="linenos">362</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-363"><a href="#TSQL-363"><span class="linenos">363</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-364"><a href="#TSQL-364"><span class="linenos">364</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-365"><a href="#TSQL-365"><span class="linenos">365</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-366"><a href="#TSQL-366"><span class="linenos">366</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-367"><a href="#TSQL-367"><span class="linenos">367</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
+</span><span id="TSQL-368"><a href="#TSQL-368"><span class="linenos">368</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-369"><a href="#TSQL-369"><span class="linenos">369</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-370"><a href="#TSQL-370"><span class="linenos">370</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-371"><a href="#TSQL-371"><span class="linenos">371</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-372"><a href="#TSQL-372"><span class="linenos">372</span></a> <span class="p">}</span>
+</span><span id="TSQL-373"><a href="#TSQL-373"><span class="linenos">373</span></a>
+</span><span id="TSQL-374"><a href="#TSQL-374"><span class="linenos">374</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-375"><a href="#TSQL-375"><span class="linenos">375</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
+</span><span id="TSQL-376"><a href="#TSQL-376"><span class="linenos">376</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
+</span><span id="TSQL-377"><a href="#TSQL-377"><span class="linenos">377</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
+</span><span id="TSQL-378"><a href="#TSQL-378"><span class="linenos">378</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
+</span><span id="TSQL-379"><a href="#TSQL-379"><span class="linenos">379</span></a> <span class="p">}</span>
+</span><span id="TSQL-380"><a href="#TSQL-380"><span class="linenos">380</span></a>
+</span><span id="TSQL-381"><a href="#TSQL-381"><span class="linenos">381</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-382"><a href="#TSQL-382"><span class="linenos">382</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="TSQL-383"><a href="#TSQL-383"><span class="linenos">383</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="TSQL-384"><a href="#TSQL-384"><span class="linenos">384</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="TSQL-385"><a href="#TSQL-385"><span class="linenos">385</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="TSQL-386"><a href="#TSQL-386"><span class="linenos">386</span></a> <span class="p">}</span>
+</span><span id="TSQL-387"><a href="#TSQL-387"><span class="linenos">387</span></a>
+</span><span id="TSQL-388"><a href="#TSQL-388"><span class="linenos">388</span></a> <span class="n">RETURNS_TABLE_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="TSQL-389"><a href="#TSQL-389"><span class="linenos">389</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="TSQL-390"><a href="#TSQL-390"><span class="linenos">390</span></a> <span class="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="TSQL-391"><a href="#TSQL-391"><span class="linenos">391</span></a> <span class="p">}</span>
+</span><span id="TSQL-392"><a href="#TSQL-392"><span class="linenos">392</span></a>
+</span><span id="TSQL-393"><a href="#TSQL-393"><span class="linenos">393</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-394"><a href="#TSQL-394"><span class="linenos">394</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="TSQL-395"><a href="#TSQL-395"><span class="linenos">395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
+</span><span id="TSQL-396"><a href="#TSQL-396"><span class="linenos">396</span></a> <span class="p">}</span>
+</span><span id="TSQL-397"><a href="#TSQL-397"><span class="linenos">397</span></a>
+</span><span id="TSQL-398"><a href="#TSQL-398"><span class="linenos">398</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-399"><a href="#TSQL-399"><span class="linenos">399</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-400"><a href="#TSQL-400"><span class="linenos">400</span></a>
+</span><span id="TSQL-401"><a href="#TSQL-401"><span class="linenos">401</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-402"><a href="#TSQL-402"><span class="linenos">402</span></a>
+</span><span id="TSQL-403"><a href="#TSQL-403"><span class="linenos">403</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-404"><a href="#TSQL-404"><span class="linenos">404</span></a>
+</span><span id="TSQL-405"><a href="#TSQL-405"><span class="linenos">405</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL-406"><a href="#TSQL-406"><span class="linenos">406</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="TSQL-407"><a href="#TSQL-407"><span class="linenos">407</span></a><span class="sd"> T-SQL supports the syntax alias = expression in the SELECT&#39;s projection list,</span>
+</span><span id="TSQL-408"><a href="#TSQL-408"><span class="linenos">408</span></a><span class="sd"> so we transform all parsed Selects to convert their EQ projections into Aliases.</span>
+</span><span id="TSQL-409"><a href="#TSQL-409"><span class="linenos">409</span></a>
+</span><span id="TSQL-410"><a href="#TSQL-410"><span class="linenos">410</span></a><span class="sd"> See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax</span>
+</span><span id="TSQL-411"><a href="#TSQL-411"><span class="linenos">411</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL-412"><a href="#TSQL-412"><span class="linenos">412</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="TSQL-413"><a href="#TSQL-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">projection</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">projection</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL-414"><a href="#TSQL-414"><span class="linenos">414</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">EQ</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</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">Column</span><span class="p">)</span>
+</span><span id="TSQL-415"><a href="#TSQL-415"><span class="linenos">415</span></a> <span class="k">else</span> <span class="n">projection</span>
+</span><span id="TSQL-416"><a href="#TSQL-416"><span class="linenos">416</span></a> <span class="k">for</span> <span class="n">projection</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
+</span><span id="TSQL-417"><a href="#TSQL-417"><span class="linenos">417</span></a> <span class="p">]</span>
</span><span id="TSQL-418"><a href="#TSQL-418"><span class="linenos">418</span></a>
-</span><span id="TSQL-419"><a href="#TSQL-419"><span class="linenos">419</span></a><span class="sd"> ROLLBACK { TRAN | TRANSACTION }</span>
-</span><span id="TSQL-420"><a href="#TSQL-420"><span class="linenos">420</span></a><span class="sd"> [ transaction_name | @tran_name_variable</span>
-</span><span id="TSQL-421"><a href="#TSQL-421"><span class="linenos">421</span></a><span class="sd"> | savepoint_name | @savepoint_variable ]</span>
-</span><span id="TSQL-422"><a href="#TSQL-422"><span class="linenos">422</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL-423"><a href="#TSQL-423"><span class="linenos">423</span></a> <span class="n">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="TSQL-419"><a href="#TSQL-419"><span class="linenos">419</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="TSQL-420"><a href="#TSQL-420"><span class="linenos">420</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
+</span><span id="TSQL-421"><a href="#TSQL-421"><span class="linenos">421</span></a><span class="sd"> COMMIT [ { TRAN | TRANSACTION }</span>
+</span><span id="TSQL-422"><a href="#TSQL-422"><span class="linenos">422</span></a><span class="sd"> [ transaction_name | @tran_name_variable ] ]</span>
+</span><span id="TSQL-423"><a href="#TSQL-423"><span class="linenos">423</span></a><span class="sd"> [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]</span>
</span><span id="TSQL-424"><a href="#TSQL-424"><span class="linenos">424</span></a>
-</span><span id="TSQL-425"><a href="#TSQL-425"><span class="linenos">425</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">})</span>
-</span><span id="TSQL-426"><a href="#TSQL-426"><span class="linenos">426</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="TSQL-427"><a href="#TSQL-427"><span class="linenos">427</span></a>
-</span><span id="TSQL-428"><a href="#TSQL-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="n">rollback</span><span class="p">:</span>
-</span><span id="TSQL-429"><a href="#TSQL-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</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="TSQL-425"><a href="#TSQL-425"><span class="linenos">425</span></a><span class="sd"> ROLLBACK { TRAN | TRANSACTION }</span>
+</span><span id="TSQL-426"><a href="#TSQL-426"><span class="linenos">426</span></a><span class="sd"> [ transaction_name | @tran_name_variable</span>
+</span><span id="TSQL-427"><a href="#TSQL-427"><span class="linenos">427</span></a><span class="sd"> | savepoint_name | @savepoint_variable ]</span>
+</span><span id="TSQL-428"><a href="#TSQL-428"><span class="linenos">428</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL-429"><a href="#TSQL-429"><span class="linenos">429</span></a> <span class="n">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="TSQL-430"><a href="#TSQL-430"><span class="linenos">430</span></a>
-</span><span id="TSQL-431"><a href="#TSQL-431"><span class="linenos">431</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL-432"><a href="#TSQL-432"><span class="linenos">432</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="TSQL-433"><a href="#TSQL-433"><span class="linenos">433</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;DELAYED_DURABILITY&quot;</span><span class="p">)</span>
-</span><span id="TSQL-434"><a href="#TSQL-434"><span class="linenos">434</span></a> <span class="bp">self</span><span 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="TSQL-435"><a href="#TSQL-435"><span class="linenos">435</span></a>
-</span><span id="TSQL-436"><a href="#TSQL-436"><span class="linenos">436</span></a> <span class="k">if</span> <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="TSQL-437"><a href="#TSQL-437"><span class="linenos">437</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL-438"><a href="#TSQL-438"><span class="linenos">438</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TSQL-439"><a href="#TSQL-439"><span class="linenos">439</span></a> <span class="bp">self</span><span 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="TSQL-440"><a href="#TSQL-440"><span class="linenos">440</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-431"><a href="#TSQL-431"><span class="linenos">431</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">})</span>
+</span><span id="TSQL-432"><a href="#TSQL-432"><span class="linenos">432</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="TSQL-433"><a href="#TSQL-433"><span class="linenos">433</span></a>
+</span><span id="TSQL-434"><a href="#TSQL-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="n">rollback</span><span class="p">:</span>
+</span><span id="TSQL-435"><a href="#TSQL-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</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="TSQL-436"><a href="#TSQL-436"><span class="linenos">436</span></a>
+</span><span id="TSQL-437"><a href="#TSQL-437"><span class="linenos">437</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL-438"><a href="#TSQL-438"><span class="linenos">438</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="TSQL-439"><a href="#TSQL-439"><span class="linenos">439</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;DELAYED_DURABILITY&quot;</span><span class="p">)</span>
+</span><span id="TSQL-440"><a href="#TSQL-440"><span class="linenos">440</span></a> <span class="bp">self</span><span 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="TSQL-441"><a href="#TSQL-441"><span class="linenos">441</span></a>
-</span><span id="TSQL-442"><a href="#TSQL-442"><span class="linenos">442</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="TSQL-443"><a href="#TSQL-443"><span class="linenos">443</span></a>
-</span><span id="TSQL-444"><a href="#TSQL-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">durability</span><span class="o">=</span><span class="n">durability</span><span class="p">)</span>
-</span><span id="TSQL-445"><a href="#TSQL-445"><span class="linenos">445</span></a>
-</span><span id="TSQL-446"><a href="#TSQL-446"><span class="linenos">446</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="TSQL-447"><a href="#TSQL-447"><span class="linenos">447</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
-</span><span id="TSQL-448"><a href="#TSQL-448"><span class="linenos">448</span></a><span class="sd"> BEGIN { TRAN | TRANSACTION }</span>
-</span><span id="TSQL-449"><a href="#TSQL-449"><span class="linenos">449</span></a><span class="sd"> [ { transaction_name | @tran_name_variable }</span>
-</span><span id="TSQL-450"><a href="#TSQL-450"><span class="linenos">450</span></a><span class="sd"> [ WITH MARK [ &#39;description&#39; ] ]</span>
-</span><span id="TSQL-451"><a href="#TSQL-451"><span class="linenos">451</span></a><span class="sd"> ]</span>
-</span><span id="TSQL-452"><a href="#TSQL-452"><span class="linenos">452</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL-453"><a href="#TSQL-453"><span class="linenos">453</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)):</span>
-</span><span id="TSQL-454"><a href="#TSQL-454"><span class="linenos">454</span></a> <span class="n">transaction</span> <span class="o">=</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
-</span><span id="TSQL-455"><a href="#TSQL-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="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;MARK&quot;</span><span class="p">):</span>
-</span><span id="TSQL-456"><a href="#TSQL-456"><span class="linenos">456</span></a> <span class="n">transaction</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="TSQL-457"><a href="#TSQL-457"><span class="linenos">457</span></a>
-</span><span id="TSQL-458"><a href="#TSQL-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="n">transaction</span>
-</span><span id="TSQL-459"><a href="#TSQL-459"><span class="linenos">459</span></a>
-</span><span id="TSQL-460"><a href="#TSQL-460"><span class="linenos">460</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="TSQL-461"><a href="#TSQL-461"><span class="linenos">461</span></a>
-</span><span id="TSQL-462"><a href="#TSQL-462"><span class="linenos">462</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL-463"><a href="#TSQL-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
-</span><span id="TSQL-464"><a href="#TSQL-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL-442"><a href="#TSQL-442"><span class="linenos">442</span></a> <span class="k">if</span> <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="TSQL-443"><a href="#TSQL-443"><span class="linenos">443</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-444"><a href="#TSQL-444"><span class="linenos">444</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL-445"><a href="#TSQL-445"><span class="linenos">445</span></a> <span class="bp">self</span><span 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="TSQL-446"><a href="#TSQL-446"><span class="linenos">446</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-447"><a href="#TSQL-447"><span class="linenos">447</span></a>
+</span><span id="TSQL-448"><a href="#TSQL-448"><span class="linenos">448</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="TSQL-449"><a href="#TSQL-449"><span class="linenos">449</span></a>
+</span><span id="TSQL-450"><a href="#TSQL-450"><span class="linenos">450</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">durability</span><span class="o">=</span><span class="n">durability</span><span class="p">)</span>
+</span><span id="TSQL-451"><a href="#TSQL-451"><span class="linenos">451</span></a>
+</span><span id="TSQL-452"><a href="#TSQL-452"><span class="linenos">452</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="TSQL-453"><a href="#TSQL-453"><span class="linenos">453</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
+</span><span id="TSQL-454"><a href="#TSQL-454"><span class="linenos">454</span></a><span class="sd"> BEGIN { TRAN | TRANSACTION }</span>
+</span><span id="TSQL-455"><a href="#TSQL-455"><span class="linenos">455</span></a><span class="sd"> [ { transaction_name | @tran_name_variable }</span>
+</span><span id="TSQL-456"><a href="#TSQL-456"><span class="linenos">456</span></a><span class="sd"> [ WITH MARK [ &#39;description&#39; ] ]</span>
+</span><span id="TSQL-457"><a href="#TSQL-457"><span class="linenos">457</span></a><span class="sd"> ]</span>
+</span><span id="TSQL-458"><a href="#TSQL-458"><span class="linenos">458</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL-459"><a href="#TSQL-459"><span class="linenos">459</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)):</span>
+</span><span id="TSQL-460"><a href="#TSQL-460"><span class="linenos">460</span></a> <span class="n">transaction</span> <span class="o">=</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="TSQL-461"><a href="#TSQL-461"><span class="linenos">461</span></a> <span class="k">if</span> <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;MARK&quot;</span><span class="p">):</span>
+</span><span id="TSQL-462"><a href="#TSQL-462"><span class="linenos">462</span></a> <span class="n">transaction</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="TSQL-463"><a href="#TSQL-463"><span class="linenos">463</span></a>
+</span><span id="TSQL-464"><a href="#TSQL-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">transaction</span>
</span><span id="TSQL-465"><a href="#TSQL-465"><span class="linenos">465</span></a>
-</span><span id="TSQL-466"><a href="#TSQL-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="TSQL-467"><a href="#TSQL-467"><span class="linenos">467</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-468"><a href="#TSQL-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
-</span><span id="TSQL-469"><a href="#TSQL-469"><span class="linenos">469</span></a> <span class="p">)</span>
-</span><span id="TSQL-470"><a href="#TSQL-470"><span class="linenos">470</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="TSQL-471"><a href="#TSQL-471"><span class="linenos">471</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="TSQL-472"><a href="#TSQL-472"><span class="linenos">472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL-473"><a href="#TSQL-473"><span class="linenos">473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="TSQL-474"><a href="#TSQL-474"><span class="linenos">474</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL-475"><a href="#TSQL-475"><span class="linenos">475</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-476"><a href="#TSQL-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span>
-</span><span id="TSQL-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="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="TSQL-479"><a href="#TSQL-479"><span class="linenos">479</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="TSQL-480"><a href="#TSQL-480"><span class="linenos">480</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-481"><a href="#TSQL-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
-</span><span id="TSQL-482"><a href="#TSQL-482"><span class="linenos">482</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="TSQL-483"><a href="#TSQL-483"><span class="linenos">483</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="TSQL-484"><a href="#TSQL-484"><span class="linenos">484</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
-</span><span id="TSQL-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 class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="TSQL-487"><a href="#TSQL-487"><span class="linenos">487</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="TSQL-488"><a href="#TSQL-488"><span class="linenos">488</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TSQL-489"><a href="#TSQL-489"><span class="linenos">489</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL-490"><a href="#TSQL-490"><span class="linenos">490</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
-</span><span id="TSQL-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">return</span> <span class="n">system_time</span>
-</span><span id="TSQL-493"><a href="#TSQL-493"><span class="linenos">493</span></a>
-</span><span id="TSQL-494"><a href="#TSQL-494"><span class="linenos">494</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">Table</span><span class="p">:</span>
-</span><span id="TSQL-495"><a href="#TSQL-495"><span class="linenos">495</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="TSQL-496"><a href="#TSQL-496"><span class="linenos">496</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
-</span><span id="TSQL-497"><a href="#TSQL-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="TSQL-498"><a href="#TSQL-498"><span class="linenos">498</span></a>
-</span><span id="TSQL-499"><a href="#TSQL-499"><span class="linenos">499</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">ReturnsProperty</span><span class="p">:</span>
-</span><span id="TSQL-500"><a href="#TSQL-500"><span class="linenos">500</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
-</span><span id="TSQL-501"><a href="#TSQL-501"><span class="linenos">501</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
-</span><span id="TSQL-502"><a href="#TSQL-502"><span class="linenos">502</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="TSQL-503"><a href="#TSQL-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="n">returns</span>
-</span><span id="TSQL-504"><a href="#TSQL-504"><span class="linenos">504</span></a>
-</span><span id="TSQL-505"><a href="#TSQL-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL-506"><a href="#TSQL-506"><span class="linenos">506</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="TSQL-507"><a href="#TSQL-507"><span class="linenos">507</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="TSQL-508"><a href="#TSQL-508"><span class="linenos">508</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="TSQL-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">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="TSQL-511"><a href="#TSQL-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="TSQL-512"><a href="#TSQL-512"><span class="linenos">512</span></a>
-</span><span id="TSQL-513"><a href="#TSQL-513"><span class="linenos">513</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
-</span><span id="TSQL-514"><a href="#TSQL-514"><span class="linenos">514</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL-515"><a href="#TSQL-515"><span class="linenos">515</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL-466"><a href="#TSQL-466"><span class="linenos">466</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="TSQL-467"><a href="#TSQL-467"><span class="linenos">467</span></a>
+</span><span id="TSQL-468"><a href="#TSQL-468"><span class="linenos">468</span></a> <span class="k">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">ReturnsProperty</span><span class="p">:</span>
+</span><span id="TSQL-469"><a href="#TSQL-469"><span class="linenos">469</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
+</span><span id="TSQL-470"><a href="#TSQL-470"><span class="linenos">470</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
+</span><span id="TSQL-471"><a href="#TSQL-471"><span class="linenos">471</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="TSQL-472"><a href="#TSQL-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">returns</span>
+</span><span id="TSQL-473"><a href="#TSQL-473"><span class="linenos">473</span></a>
+</span><span id="TSQL-474"><a href="#TSQL-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL-475"><a href="#TSQL-475"><span class="linenos">475</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="TSQL-476"><a href="#TSQL-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
+</span><span id="TSQL-477"><a href="#TSQL-477"><span class="linenos">477</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="TSQL-478"><a href="#TSQL-478"><span class="linenos">478</span></a>
+</span><span id="TSQL-479"><a href="#TSQL-479"><span class="linenos">479</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="TSQL-480"><a href="#TSQL-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="kc">None</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="c1"># Retrieve length of datatype and override to default if not specified</span>
+</span><span id="TSQL-483"><a href="#TSQL-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL-484"><a href="#TSQL-484"><span class="linenos">484</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL-485"><a href="#TSQL-485"><span class="linenos">485</span></a>
+</span><span id="TSQL-486"><a href="#TSQL-486"><span class="linenos">486</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
+</span><span id="TSQL-487"><a href="#TSQL-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="TSQL-488"><a href="#TSQL-488"><span class="linenos">488</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="TSQL-489"><a href="#TSQL-489"><span class="linenos">489</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-490"><a href="#TSQL-490"><span class="linenos">490</span></a>
+</span><span id="TSQL-491"><a href="#TSQL-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">:</span>
+</span><span id="TSQL-492"><a href="#TSQL-492"><span class="linenos">492</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="TSQL-493"><a href="#TSQL-493"><span class="linenos">493</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-494"><a href="#TSQL-494"><span class="linenos">494</span></a> <span class="p">)</span>
+</span><span id="TSQL-495"><a href="#TSQL-495"><span class="linenos">495</span></a>
+</span><span id="TSQL-496"><a href="#TSQL-496"><span class="linenos">496</span></a> <span class="n">format_norm</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="TSQL-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="c1"># Check whether the convert entails a string to date format</span>
+</span><span id="TSQL-499"><a href="#TSQL-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="TSQL-500"><a href="#TSQL-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL-501"><a href="#TSQL-501"><span class="linenos">501</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
+</span><span id="TSQL-502"><a href="#TSQL-502"><span class="linenos">502</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span>
+</span><span id="TSQL-503"><a href="#TSQL-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL-504"><a href="#TSQL-504"><span class="linenos">504</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
+</span><span id="TSQL-505"><a href="#TSQL-505"><span class="linenos">505</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL-506"><a href="#TSQL-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL-507"><a href="#TSQL-507"><span class="linenos">507</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="TSQL-508"><a href="#TSQL-508"><span class="linenos">508</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="TSQL-509"><a href="#TSQL-509"><span class="linenos">509</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
+</span><span id="TSQL-510"><a href="#TSQL-510"><span class="linenos">510</span></a> <span class="p">)</span>
+</span><span id="TSQL-511"><a href="#TSQL-511"><span class="linenos">511</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
+</span><span id="TSQL-512"><a href="#TSQL-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL-513"><a href="#TSQL-513"><span class="linenos">513</span></a>
+</span><span id="TSQL-514"><a href="#TSQL-514"><span class="linenos">514</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
+</span><span id="TSQL-515"><a href="#TSQL-515"><span class="linenos">515</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
</span><span id="TSQL-516"><a href="#TSQL-516"><span class="linenos">516</span></a>
-</span><span id="TSQL-517"><a href="#TSQL-517"><span class="linenos">517</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
-</span><span id="TSQL-518"><a href="#TSQL-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="TSQL-519"><a href="#TSQL-519"><span class="linenos">519</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="TSQL-520"><a href="#TSQL-520"><span class="linenos">520</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-517"><a href="#TSQL-517"><span class="linenos">517</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="TSQL-518"><a href="#TSQL-518"><span class="linenos">518</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL-519"><a href="#TSQL-519"><span class="linenos">519</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL-520"><a href="#TSQL-520"><span class="linenos">520</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="TSQL-521"><a href="#TSQL-521"><span class="linenos">521</span></a>
-</span><span id="TSQL-522"><a href="#TSQL-522"><span class="linenos">522</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">:</span>
-</span><span id="TSQL-523"><a href="#TSQL-523"><span class="linenos">523</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="TSQL-524"><a href="#TSQL-524"><span class="linenos">524</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-525"><a href="#TSQL-525"><span class="linenos">525</span></a> <span class="p">)</span>
-</span><span id="TSQL-526"><a href="#TSQL-526"><span class="linenos">526</span></a>
-</span><span id="TSQL-527"><a href="#TSQL-527"><span class="linenos">527</span></a> <span class="n">format_norm</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="TSQL-522"><a href="#TSQL-522"><span class="linenos">522</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="TSQL-523"><a href="#TSQL-523"><span class="linenos">523</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
+</span><span id="TSQL-524"><a href="#TSQL-524"><span class="linenos">524</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="TSQL-525"><a href="#TSQL-525"><span class="linenos">525</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL-526"><a href="#TSQL-526"><span class="linenos">526</span></a> <span class="p">):</span>
+</span><span id="TSQL-527"><a href="#TSQL-527"><span class="linenos">527</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="TSQL-528"><a href="#TSQL-528"><span class="linenos">528</span></a>
-</span><span id="TSQL-529"><a href="#TSQL-529"><span class="linenos">529</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
-</span><span id="TSQL-530"><a href="#TSQL-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="TSQL-531"><a href="#TSQL-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL-532"><a href="#TSQL-532"><span class="linenos">532</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
-</span><span id="TSQL-533"><a href="#TSQL-533"><span class="linenos">533</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span>
-</span><span id="TSQL-534"><a href="#TSQL-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL-535"><a href="#TSQL-535"><span class="linenos">535</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
-</span><span id="TSQL-536"><a href="#TSQL-536"><span class="linenos">536</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL-537"><a href="#TSQL-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-538"><a href="#TSQL-538"><span class="linenos">538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="TSQL-539"><a href="#TSQL-539"><span class="linenos">539</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="TSQL-540"><a href="#TSQL-540"><span class="linenos">540</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
-</span><span id="TSQL-541"><a href="#TSQL-541"><span class="linenos">541</span></a> <span class="p">)</span>
-</span><span id="TSQL-542"><a href="#TSQL-542"><span class="linenos">542</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
-</span><span id="TSQL-543"><a href="#TSQL-543"><span class="linenos">543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL-544"><a href="#TSQL-544"><span class="linenos">544</span></a>
-</span><span id="TSQL-545"><a href="#TSQL-545"><span class="linenos">545</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
-</span><span id="TSQL-546"><a href="#TSQL-546"><span class="linenos">546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
-</span><span id="TSQL-547"><a href="#TSQL-547"><span class="linenos">547</span></a>
-</span><span id="TSQL-548"><a href="#TSQL-548"><span class="linenos">548</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="TSQL-549"><a href="#TSQL-549"><span class="linenos">549</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL-550"><a href="#TSQL-550"><span class="linenos">550</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL-551"><a href="#TSQL-551"><span class="linenos">551</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="TSQL-552"><a href="#TSQL-552"><span class="linenos">552</span></a>
-</span><span id="TSQL-553"><a href="#TSQL-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="TSQL-554"><a href="#TSQL-554"><span class="linenos">554</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
-</span><span id="TSQL-555"><a href="#TSQL-555"><span class="linenos">555</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="TSQL-556"><a href="#TSQL-556"><span class="linenos">556</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL-557"><a href="#TSQL-557"><span class="linenos">557</span></a> <span class="p">):</span>
-</span><span id="TSQL-558"><a href="#TSQL-558"><span class="linenos">558</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="TSQL-529"><a href="#TSQL-529"><span class="linenos">529</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
+</span><span id="TSQL-530"><a href="#TSQL-530"><span class="linenos">530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="TSQL-531"><a href="#TSQL-531"><span class="linenos">531</span></a>
+</span><span id="TSQL-532"><a href="#TSQL-532"><span class="linenos">532</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="TSQL-533"><a href="#TSQL-533"><span class="linenos">533</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TSQL-534"><a href="#TSQL-534"><span class="linenos">534</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="TSQL-535"><a href="#TSQL-535"><span class="linenos">535</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="TSQL-536"><a href="#TSQL-536"><span class="linenos">536</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL-537"><a href="#TSQL-537"><span class="linenos">537</span></a> <span class="n">is_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">HASH</span><span class="p">)</span>
+</span><span id="TSQL-538"><a href="#TSQL-538"><span class="linenos">538</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="n">is_temporary</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">HASH</span><span class="p">)</span>
+</span><span id="TSQL-539"><a href="#TSQL-539"><span class="linenos">539</span></a>
+</span><span id="TSQL-540"><a href="#TSQL-540"><span class="linenos">540</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_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="TSQL-541"><a href="#TSQL-541"><span class="linenos">541</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="TSQL-542"><a href="#TSQL-542"><span class="linenos">542</span></a> <span class="k">if</span> <span class="n">is_global</span><span class="p">:</span>
+</span><span id="TSQL-543"><a href="#TSQL-543"><span class="linenos">543</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="TSQL-544"><a href="#TSQL-544"><span class="linenos">544</span></a> <span class="k">elif</span> <span class="n">is_temporary</span><span class="p">:</span>
+</span><span id="TSQL-545"><a href="#TSQL-545"><span class="linenos">545</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="TSQL-546"><a href="#TSQL-546"><span class="linenos">546</span></a>
+</span><span id="TSQL-547"><a href="#TSQL-547"><span class="linenos">547</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="TSQL-548"><a href="#TSQL-548"><span class="linenos">548</span></a>
+</span><span id="TSQL-549"><a href="#TSQL-549"><span class="linenos">549</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">exp</span><span class="o">.</span><span class="n">Create</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="TSQL-550"><a href="#TSQL-550"><span class="linenos">550</span></a> <span class="n">create</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">()</span>
+</span><span id="TSQL-551"><a href="#TSQL-551"><span class="linenos">551</span></a>
+</span><span id="TSQL-552"><a href="#TSQL-552"><span class="linenos">552</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">create</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">):</span>
+</span><span id="TSQL-553"><a href="#TSQL-553"><span class="linenos">553</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">create</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">create</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 class="k">else</span> <span class="n">create</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TSQL-554"><a href="#TSQL-554"><span class="linenos">554</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <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;temporary&quot;</span><span class="p">):</span>
+</span><span id="TSQL-555"><a href="#TSQL-555"><span class="linenos">555</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create</span><span class="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="TSQL-556"><a href="#TSQL-556"><span class="linenos">556</span></a> <span class="n">create</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;properties&quot;</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="p">[]))</span>
+</span><span id="TSQL-557"><a href="#TSQL-557"><span class="linenos">557</span></a>
+</span><span id="TSQL-558"><a href="#TSQL-558"><span class="linenos">558</span></a> <span class="n">create</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;properties&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="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">())</span>
</span><span id="TSQL-559"><a href="#TSQL-559"><span class="linenos">559</span></a>
-</span><span id="TSQL-560"><a href="#TSQL-560"><span class="linenos">560</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
-</span><span id="TSQL-561"><a href="#TSQL-561"><span class="linenos">561</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="TSQL-562"><a href="#TSQL-562"><span class="linenos">562</span></a>
-</span><span id="TSQL-563"><a href="#TSQL-563"><span class="linenos">563</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="TSQL-564"><a href="#TSQL-564"><span class="linenos">564</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TSQL-565"><a href="#TSQL-565"><span class="linenos">565</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="TSQL-566"><a href="#TSQL-566"><span class="linenos">566</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="TSQL-567"><a href="#TSQL-567"><span class="linenos">567</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL-568"><a href="#TSQL-568"><span class="linenos">568</span></a> <span class="n">is_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">HASH</span><span class="p">)</span>
-</span><span id="TSQL-569"><a href="#TSQL-569"><span class="linenos">569</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="n">is_temporary</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">HASH</span><span class="p">)</span>
+</span><span id="TSQL-560"><a href="#TSQL-560"><span class="linenos">560</span></a> <span class="k">return</span> <span class="n">create</span>
+</span><span id="TSQL-561"><a href="#TSQL-561"><span class="linenos">561</span></a>
+</span><span id="TSQL-562"><a href="#TSQL-562"><span class="linenos">562</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="TSQL-563"><a href="#TSQL-563"><span class="linenos">563</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="TSQL-564"><a href="#TSQL-564"><span class="linenos">564</span></a>
+</span><span id="TSQL-565"><a href="#TSQL-565"><span class="linenos">565</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OBJECT_ID&quot;</span><span class="p">):</span>
+</span><span id="TSQL-566"><a href="#TSQL-566"><span class="linenos">566</span></a> <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_string</span><span class="p">)</span>
+</span><span id="TSQL-567"><a href="#TSQL-567"><span class="linenos">567</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IS&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">):</span>
+</span><span id="TSQL-568"><a href="#TSQL-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="TSQL-569"><a href="#TSQL-569"><span class="linenos">569</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="TSQL-570"><a href="#TSQL-570"><span class="linenos">570</span></a>
-</span><span id="TSQL-571"><a href="#TSQL-571"><span class="linenos">571</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_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="TSQL-572"><a href="#TSQL-572"><span class="linenos">572</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="TSQL-573"><a href="#TSQL-573"><span class="linenos">573</span></a> <span class="k">if</span> <span class="n">is_global</span><span class="p">:</span>
-</span><span id="TSQL-574"><a href="#TSQL-574"><span class="linenos">574</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="TSQL-575"><a href="#TSQL-575"><span class="linenos">575</span></a> <span class="k">elif</span> <span class="n">is_temporary</span><span class="p">:</span>
-</span><span id="TSQL-576"><a href="#TSQL-576"><span class="linenos">576</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="TSQL-577"><a href="#TSQL-577"><span class="linenos">577</span></a>
-</span><span id="TSQL-578"><a href="#TSQL-578"><span class="linenos">578</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="TSQL-579"><a href="#TSQL-579"><span class="linenos">579</span></a>
-</span><span id="TSQL-580"><a href="#TSQL-580"><span class="linenos">580</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">exp</span><span class="o">.</span><span class="n">Create</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="TSQL-581"><a href="#TSQL-581"><span class="linenos">581</span></a> <span class="n">create</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">()</span>
-</span><span id="TSQL-582"><a href="#TSQL-582"><span class="linenos">582</span></a>
-</span><span id="TSQL-583"><a href="#TSQL-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">create</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">):</span>
-</span><span id="TSQL-584"><a href="#TSQL-584"><span class="linenos">584</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">create</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">create</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 class="k">else</span> <span class="n">create</span><span class="o">.</span><span class="n">this</span>
-</span><span id="TSQL-585"><a href="#TSQL-585"><span class="linenos">585</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <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;temporary&quot;</span><span class="p">):</span>
-</span><span id="TSQL-586"><a href="#TSQL-586"><span class="linenos">586</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create</span><span class="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="TSQL-587"><a href="#TSQL-587"><span class="linenos">587</span></a> <span class="n">create</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;properties&quot;</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="p">[]))</span>
+</span><span id="TSQL-571"><a href="#TSQL-571"><span class="linenos">571</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">()</span>
+</span><span id="TSQL-572"><a href="#TSQL-572"><span class="linenos">572</span></a>
+</span><span id="TSQL-573"><a href="#TSQL-573"><span class="linenos">573</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="TSQL-574"><a href="#TSQL-574"><span class="linenos">574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL-575"><a href="#TSQL-575"><span class="linenos">575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="TSQL-576"><a href="#TSQL-576"><span class="linenos">576</span></a> <span class="n">this</span><span class="o">=</span><span class="kc">None</span>
+</span><span id="TSQL-577"><a href="#TSQL-577"><span class="linenos">577</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="p">{</span><span class="s2">&quot;CLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">}</span>
+</span><span id="TSQL-578"><a href="#TSQL-578"><span class="linenos">578</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
+</span><span id="TSQL-579"><a href="#TSQL-579"><span class="linenos">579</span></a> <span class="p">)</span>
+</span><span id="TSQL-580"><a href="#TSQL-580"><span class="linenos">580</span></a>
+</span><span id="TSQL-581"><a href="#TSQL-581"><span class="linenos">581</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="TSQL-582"><a href="#TSQL-582"><span class="linenos">582</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-583"><a href="#TSQL-583"><span class="linenos">583</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-584"><a href="#TSQL-584"><span class="linenos">584</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-585"><a href="#TSQL-585"><span class="linenos">585</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-586"><a href="#TSQL-586"><span class="linenos">586</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-587"><a href="#TSQL-587"><span class="linenos">587</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="TSQL-588"><a href="#TSQL-588"><span class="linenos">588</span></a>
-</span><span id="TSQL-589"><a href="#TSQL-589"><span class="linenos">589</span></a> <span class="n">create</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;properties&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="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">())</span>
-</span><span id="TSQL-590"><a href="#TSQL-590"><span class="linenos">590</span></a>
-</span><span id="TSQL-591"><a href="#TSQL-591"><span class="linenos">591</span></a> <span class="k">return</span> <span class="n">create</span>
-</span><span id="TSQL-592"><a href="#TSQL-592"><span class="linenos">592</span></a>
-</span><span id="TSQL-593"><a href="#TSQL-593"><span class="linenos">593</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="TSQL-594"><a href="#TSQL-594"><span class="linenos">594</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL-595"><a href="#TSQL-595"><span class="linenos">595</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL-596"><a href="#TSQL-596"><span class="linenos">596</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL-597"><a href="#TSQL-597"><span class="linenos">597</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-589"><a href="#TSQL-589"><span class="linenos">589</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-590"><a href="#TSQL-590"><span class="linenos">590</span></a> <span 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="TSQL-591"><a href="#TSQL-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="TSQL-592"><a href="#TSQL-592"><span class="linenos">592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="TSQL-593"><a href="#TSQL-593"><span class="linenos">593</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="TSQL-594"><a href="#TSQL-594"><span class="linenos">594</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="TSQL-595"><a href="#TSQL-595"><span class="linenos">595</span></a> <span class="n">exp</span><span 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;DATETIMEOFFSET&quot;</span><span class="p">,</span>
+</span><span id="TSQL-596"><a href="#TSQL-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
+</span><span id="TSQL-597"><a href="#TSQL-597"><span class="linenos">597</span></a> <span class="p">}</span>
</span><span id="TSQL-598"><a href="#TSQL-598"><span class="linenos">598</span></a>
-</span><span id="TSQL-599"><a href="#TSQL-599"><span class="linenos">599</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-600"><a href="#TSQL-600"><span class="linenos">600</span></a> <span 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="TSQL-601"><a href="#TSQL-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="TSQL-602"><a href="#TSQL-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="TSQL-603"><a href="#TSQL-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="TSQL-604"><a href="#TSQL-604"><span class="linenos">604</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="TSQL-605"><a href="#TSQL-605"><span class="linenos">605</span></a> <span class="n">exp</span><span 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;DATETIMEOFFSET&quot;</span><span class="p">,</span>
-</span><span id="TSQL-606"><a href="#TSQL-606"><span class="linenos">606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
-</span><span id="TSQL-607"><a href="#TSQL-607"><span class="linenos">607</span></a> <span class="p">}</span>
-</span><span id="TSQL-608"><a href="#TSQL-608"><span class="linenos">608</span></a>
-</span><span id="TSQL-609"><a href="#TSQL-609"><span class="linenos">609</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-610"><a href="#TSQL-610"><span class="linenos">610</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="TSQL-611"><a href="#TSQL-611"><span class="linenos">611</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
-</span><span id="TSQL-612"><a href="#TSQL-612"><span class="linenos">612</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-613"><a href="#TSQL-613"><span class="linenos">613</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-614"><a href="#TSQL-614"><span class="linenos">614</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-615"><a href="#TSQL-615"><span class="linenos">615</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEPART&quot;</span><span class="p">),</span>
-</span><span id="TSQL-616"><a href="#TSQL-616"><span class="linenos">616</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-617"><a href="#TSQL-617"><span class="linenos">617</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-618"><a href="#TSQL-618"><span class="linenos">618</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-619"><a href="#TSQL-619"><span class="linenos">619</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-620"><a href="#TSQL-620"><span class="linenos">620</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-621"><a href="#TSQL-621"><span class="linenos">621</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-622"><a href="#TSQL-622"><span class="linenos">622</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-623"><a href="#TSQL-623"><span class="linenos">623</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-624"><a href="#TSQL-624"><span class="linenos">624</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-625"><a href="#TSQL-625"><span class="linenos">625</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span>
-</span><span id="TSQL-626"><a href="#TSQL-626"><span class="linenos">626</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="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><span id="TSQL-627"><a href="#TSQL-627"><span class="linenos">627</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="TSQL-628"><a href="#TSQL-628"><span class="linenos">628</span></a> <span class="p">),</span>
-</span><span id="TSQL-629"><a href="#TSQL-629"><span class="linenos">629</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span 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;&quot;</span><span class="p">,</span>
-</span><span id="TSQL-630"><a href="#TSQL-630"><span class="linenos">630</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="TSQL-631"><a href="#TSQL-631"><span class="linenos">631</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-632"><a href="#TSQL-632"><span class="linenos">632</span></a> <span class="p">}</span>
-</span><span id="TSQL-633"><a href="#TSQL-633"><span class="linenos">633</span></a>
-</span><span id="TSQL-634"><a href="#TSQL-634"><span class="linenos">634</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-635"><a href="#TSQL-635"><span class="linenos">635</span></a>
-</span><span id="TSQL-636"><a href="#TSQL-636"><span class="linenos">636</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-637"><a href="#TSQL-637"><span class="linenos">637</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="TSQL-638"><a href="#TSQL-638"><span class="linenos">638</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-639"><a href="#TSQL-639"><span class="linenos">639</span></a> <span class="p">}</span>
-</span><span id="TSQL-640"><a href="#TSQL-640"><span class="linenos">640</span></a>
-</span><span id="TSQL-641"><a href="#TSQL-641"><span class="linenos">641</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="TSQL-642"><a href="#TSQL-642"><span class="linenos">642</span></a>
-</span><span id="TSQL-643"><a href="#TSQL-643"><span class="linenos">643</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-644"><a href="#TSQL-644"><span class="linenos">644</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="TSQL-645"><a href="#TSQL-645"><span class="linenos">645</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="TSQL-599"><a href="#TSQL-599"><span class="linenos">599</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-600"><a href="#TSQL-600"><span class="linenos">600</span></a> <span 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="TSQL-601"><a href="#TSQL-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="TSQL-602"><a href="#TSQL-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</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;IDENTITY&quot;</span><span class="p">,</span>
+</span><span id="TSQL-603"><a href="#TSQL-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
+</span><span id="TSQL-604"><a href="#TSQL-604"><span class="linenos">604</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-605"><a href="#TSQL-605"><span class="linenos">605</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-606"><a href="#TSQL-606"><span class="linenos">606</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-607"><a href="#TSQL-607"><span class="linenos">607</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEPART&quot;</span><span class="p">),</span>
+</span><span id="TSQL-608"><a href="#TSQL-608"><span class="linenos">608</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-609"><a href="#TSQL-609"><span class="linenos">609</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-610"><a href="#TSQL-610"><span class="linenos">610</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-611"><a href="#TSQL-611"><span class="linenos">611</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-612"><a href="#TSQL-612"><span class="linenos">612</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-613"><a href="#TSQL-613"><span class="linenos">613</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-614"><a href="#TSQL-614"><span class="linenos">614</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-615"><a href="#TSQL-615"><span class="linenos">615</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-616"><a href="#TSQL-616"><span class="linenos">616</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-617"><a href="#TSQL-617"><span class="linenos">617</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span>
+</span><span id="TSQL-618"><a href="#TSQL-618"><span class="linenos">618</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="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><span id="TSQL-619"><a href="#TSQL-619"><span class="linenos">619</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="TSQL-620"><a href="#TSQL-620"><span class="linenos">620</span></a> <span class="p">),</span>
+</span><span id="TSQL-621"><a href="#TSQL-621"><span class="linenos">621</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span 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;&quot;</span><span class="p">,</span>
+</span><span id="TSQL-622"><a href="#TSQL-622"><span class="linenos">622</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="TSQL-623"><a href="#TSQL-623"><span class="linenos">623</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-624"><a href="#TSQL-624"><span class="linenos">624</span></a> <span class="p">}</span>
+</span><span id="TSQL-625"><a href="#TSQL-625"><span class="linenos">625</span></a>
+</span><span id="TSQL-626"><a href="#TSQL-626"><span class="linenos">626</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-627"><a href="#TSQL-627"><span class="linenos">627</span></a>
+</span><span id="TSQL-628"><a href="#TSQL-628"><span class="linenos">628</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-629"><a href="#TSQL-629"><span class="linenos">629</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="TSQL-630"><a href="#TSQL-630"><span class="linenos">630</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-631"><a href="#TSQL-631"><span class="linenos">631</span></a> <span class="p">}</span>
+</span><span id="TSQL-632"><a href="#TSQL-632"><span class="linenos">632</span></a>
+</span><span id="TSQL-633"><a href="#TSQL-633"><span class="linenos">633</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL-634"><a href="#TSQL-634"><span class="linenos">634</span></a>
+</span><span id="TSQL-635"><a href="#TSQL-635"><span class="linenos">635</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-636"><a href="#TSQL-636"><span class="linenos">636</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="TSQL-637"><a href="#TSQL-637"><span class="linenos">637</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="TSQL-638"><a href="#TSQL-638"><span class="linenos">638</span></a>
+</span><span id="TSQL-639"><a href="#TSQL-639"><span class="linenos">639</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="TSQL-640"><a href="#TSQL-640"><span class="linenos">640</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="TSQL-641"><a href="#TSQL-641"><span class="linenos">641</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="TSQL-642"><a href="#TSQL-642"><span class="linenos">642</span></a> <span class="p">):</span>
+</span><span id="TSQL-643"><a href="#TSQL-643"><span class="linenos">643</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-644"><a href="#TSQL-644"><span class="linenos">644</span></a>
+</span><span id="TSQL-645"><a href="#TSQL-645"><span class="linenos">645</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="TSQL-646"><a href="#TSQL-646"><span class="linenos">646</span></a>
-</span><span id="TSQL-647"><a href="#TSQL-647"><span class="linenos">647</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="TSQL-648"><a href="#TSQL-648"><span class="linenos">648</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="TSQL-649"><a href="#TSQL-649"><span class="linenos">649</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="TSQL-650"><a href="#TSQL-650"><span class="linenos">650</span></a> <span class="p">):</span>
-</span><span id="TSQL-651"><a href="#TSQL-651"><span class="linenos">651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-647"><a href="#TSQL-647"><span class="linenos">647</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-648"><a href="#TSQL-648"><span class="linenos">648</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="TSQL-649"><a href="#TSQL-649"><span class="linenos">649</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="TSQL-650"><a href="#TSQL-650"><span class="linenos">650</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="TSQL-651"><a href="#TSQL-651"><span class="linenos">651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="TSQL-652"><a href="#TSQL-652"><span class="linenos">652</span></a>
-</span><span id="TSQL-653"><a href="#TSQL-653"><span class="linenos">653</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="TSQL-654"><a href="#TSQL-654"><span class="linenos">654</span></a>
-</span><span id="TSQL-655"><a href="#TSQL-655"><span class="linenos">655</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-656"><a href="#TSQL-656"><span class="linenos">656</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-657"><a href="#TSQL-657"><span class="linenos">657</span></a>
-</span><span id="TSQL-658"><a href="#TSQL-658"><span class="linenos">658</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-659"><a href="#TSQL-659"><span class="linenos">659</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-660"><a href="#TSQL-660"><span class="linenos">660</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-661"><a href="#TSQL-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL-662"><a href="#TSQL-662"><span class="linenos">662</span></a>
-</span><span id="TSQL-663"><a href="#TSQL-663"><span class="linenos">663</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-664"><a href="#TSQL-664"><span class="linenos">664</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-665"><a href="#TSQL-665"><span class="linenos">665</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-666"><a href="#TSQL-666"><span class="linenos">666</span></a>
-</span><span id="TSQL-667"><a href="#TSQL-667"><span class="linenos">667</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-668"><a href="#TSQL-668"><span class="linenos">668</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-669"><a href="#TSQL-669"><span class="linenos">669</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-670"><a href="#TSQL-670"><span class="linenos">670</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-671"><a href="#TSQL-671"><span class="linenos">671</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-672"><a href="#TSQL-672"><span class="linenos">672</span></a>
-</span><span id="TSQL-673"><a href="#TSQL-673"><span class="linenos">673</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-674"><a href="#TSQL-674"><span class="linenos">674</span></a>
-</span><span id="TSQL-675"><a href="#TSQL-675"><span class="linenos">675</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-676"><a href="#TSQL-676"><span class="linenos">676</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-677"><a href="#TSQL-677"><span class="linenos">677</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-678"><a href="#TSQL-678"><span class="linenos">678</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-679"><a href="#TSQL-679"><span class="linenos">679</span></a>
-</span><span id="TSQL-680"><a href="#TSQL-680"><span class="linenos">680</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-681"><a href="#TSQL-681"><span class="linenos">681</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="TSQL-682"><a href="#TSQL-682"><span class="linenos">682</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL-683"><a href="#TSQL-683"><span class="linenos">683</span></a> <span class="k">return</span> <span class="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;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-684"><a href="#TSQL-684"><span class="linenos">684</span></a>
-</span><span id="TSQL-685"><a href="#TSQL-685"><span class="linenos">685</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="TSQL-686"><a href="#TSQL-686"><span class="linenos">686</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-687"><a href="#TSQL-687"><span class="linenos">687</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="TSQL-688"><a href="#TSQL-688"><span class="linenos">688</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
-</span><span id="TSQL-689"><a href="#TSQL-689"><span class="linenos">689</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL-690"><a href="#TSQL-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-691"><a href="#TSQL-691"><span class="linenos">691</span></a>
-</span><span id="TSQL-692"><a href="#TSQL-692"><span class="linenos">692</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="TSQL-693"><a href="#TSQL-693"><span class="linenos">693</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-694"><a href="#TSQL-694"><span class="linenos">694</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="TSQL-695"><a href="#TSQL-695"><span class="linenos">695</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
-</span><span id="TSQL-696"><a href="#TSQL-696"><span class="linenos">696</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="TSQL-697"><a href="#TSQL-697"><span class="linenos">697</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL-698"><a href="#TSQL-698"><span class="linenos">698</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="TSQL-699"><a href="#TSQL-699"><span class="linenos">699</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL-700"><a href="#TSQL-700"><span class="linenos">700</span></a> <span class="p">)</span>
-</span><span id="TSQL-701"><a href="#TSQL-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-653"><a href="#TSQL-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">exists</span><span class="p">:</span>
+</span><span id="TSQL-654"><a href="#TSQL-654"><span class="linenos">654</span></a> <span class="n">table</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">Table</span><span class="p">)</span>
+</span><span id="TSQL-655"><a href="#TSQL-655"><span class="linenos">655</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="TSQL-656"><a href="#TSQL-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span>
+</span><span id="TSQL-657"><a href="#TSQL-657"><span class="linenos">657</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL-658"><a href="#TSQL-658"><span class="linenos">658</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span>
+</span><span id="TSQL-659"><a href="#TSQL-659"><span class="linenos">659</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL-660"><a href="#TSQL-660"><span class="linenos">660</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span>
+</span><span id="TSQL-661"><a href="#TSQL-661"><span class="linenos">661</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><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">this</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="TSQL-662"><a href="#TSQL-662"><span class="linenos">662</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) AND name = </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL-663"><a href="#TSQL-663"><span class="linenos">663</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">):</span>
+</span><span id="TSQL-664"><a href="#TSQL-664"><span class="linenos">664</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;CREATE OR REPLACE &quot;</span><span class="p">,</span> <span class="s2">&quot;CREATE OR ALTER &quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="TSQL-665"><a href="#TSQL-665"><span class="linenos">665</span></a>
+</span><span id="TSQL-666"><a href="#TSQL-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="TSQL-667"><a href="#TSQL-667"><span class="linenos">667</span></a>
+</span><span id="TSQL-668"><a href="#TSQL-668"><span class="linenos">668</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-669"><a href="#TSQL-669"><span class="linenos">669</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-670"><a href="#TSQL-670"><span class="linenos">670</span></a>
+</span><span id="TSQL-671"><a href="#TSQL-671"><span class="linenos">671</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-672"><a href="#TSQL-672"><span class="linenos">672</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span> <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;TIMESTAMP&quot;</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="TSQL-673"><a href="#TSQL-673"><span class="linenos">673</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-674"><a href="#TSQL-674"><span class="linenos">674</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="TSQL-675"><a href="#TSQL-675"><span class="linenos">675</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="TSQL-676"><a href="#TSQL-676"><span class="linenos">676</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;FROM&quot;</span><span class="p">,</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">):</span>
+</span><span id="TSQL-677"><a href="#TSQL-677"><span class="linenos">677</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="TSQL-678"><a href="#TSQL-678"><span class="linenos">678</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;TO&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span> <span class="k">else</span> <span class="s2">&quot;AND&quot;</span>
+</span><span id="TSQL-679"><a href="#TSQL-679"><span class="linenos">679</span></a> <span class="n">expr_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">sql</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="w"> </span><span class="mi">0</span><span class="p">))</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-680"><a href="#TSQL-680"><span class="linenos">680</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL-681"><a href="#TSQL-681"><span class="linenos">681</span></a> <span class="n">expr_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">expr</span><span class="p">)</span>
+</span><span id="TSQL-682"><a href="#TSQL-682"><span class="linenos">682</span></a>
+</span><span id="TSQL-683"><a href="#TSQL-683"><span class="linenos">683</span></a> <span class="n">expr_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expr_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-684"><a href="#TSQL-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-685"><a href="#TSQL-685"><span class="linenos">685</span></a>
+</span><span id="TSQL-686"><a href="#TSQL-686"><span class="linenos">686</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-687"><a href="#TSQL-687"><span class="linenos">687</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-688"><a href="#TSQL-688"><span class="linenos">688</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-689"><a href="#TSQL-689"><span class="linenos">689</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-690"><a href="#TSQL-690"><span class="linenos">690</span></a>
+</span><span id="TSQL-691"><a href="#TSQL-691"><span class="linenos">691</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-692"><a href="#TSQL-692"><span class="linenos">692</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="TSQL-693"><a href="#TSQL-693"><span class="linenos">693</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-694"><a href="#TSQL-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="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;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-695"><a href="#TSQL-695"><span class="linenos">695</span></a>
+</span><span id="TSQL-696"><a href="#TSQL-696"><span class="linenos">696</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="TSQL-697"><a href="#TSQL-697"><span class="linenos">697</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-698"><a href="#TSQL-698"><span class="linenos">698</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="TSQL-699"><a href="#TSQL-699"><span class="linenos">699</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
+</span><span id="TSQL-700"><a href="#TSQL-700"><span class="linenos">700</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-701"><a href="#TSQL-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="TSQL-702"><a href="#TSQL-702"><span class="linenos">702</span></a>
-</span><span id="TSQL-703"><a href="#TSQL-703"><span class="linenos">703</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="TSQL-703"><a href="#TSQL-703"><span class="linenos">703</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="TSQL-704"><a href="#TSQL-704"><span class="linenos">704</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-705"><a href="#TSQL-705"><span class="linenos">705</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="TSQL-706"><a href="#TSQL-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-707"><a href="#TSQL-707"><span class="linenos">707</span></a>
-</span><span id="TSQL-708"><a href="#TSQL-708"><span class="linenos">708</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-709"><a href="#TSQL-709"><span class="linenos">709</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TSQL-710"><a href="#TSQL-710"><span class="linenos">710</span></a>
-</span><span id="TSQL-711"><a href="#TSQL-711"><span class="linenos">711</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;global&quot;</span><span class="p">):</span>
-</span><span id="TSQL-712"><a href="#TSQL-712"><span class="linenos">712</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-713"><a href="#TSQL-713"><span class="linenos">713</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
-</span><span id="TSQL-714"><a href="#TSQL-714"><span class="linenos">714</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-715"><a href="#TSQL-715"><span class="linenos">715</span></a>
-</span><span id="TSQL-716"><a href="#TSQL-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="TSQL-706"><a href="#TSQL-706"><span class="linenos">706</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
+</span><span id="TSQL-707"><a href="#TSQL-707"><span class="linenos">707</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="TSQL-708"><a href="#TSQL-708"><span class="linenos">708</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL-709"><a href="#TSQL-709"><span class="linenos">709</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="TSQL-710"><a href="#TSQL-710"><span class="linenos">710</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-711"><a href="#TSQL-711"><span class="linenos">711</span></a> <span class="p">)</span>
+</span><span id="TSQL-712"><a href="#TSQL-712"><span class="linenos">712</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-713"><a href="#TSQL-713"><span class="linenos">713</span></a>
+</span><span id="TSQL-714"><a href="#TSQL-714"><span class="linenos">714</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="TSQL-715"><a href="#TSQL-715"><span class="linenos">715</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-716"><a href="#TSQL-716"><span class="linenos">716</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="TSQL-717"><a href="#TSQL-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-718"><a href="#TSQL-718"><span class="linenos">718</span></a>
+</span><span id="TSQL-719"><a href="#TSQL-719"><span class="linenos">719</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-720"><a href="#TSQL-720"><span class="linenos">720</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TSQL-721"><a href="#TSQL-721"><span class="linenos">721</span></a>
+</span><span id="TSQL-722"><a href="#TSQL-722"><span class="linenos">722</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;global&quot;</span><span class="p">):</span>
+</span><span id="TSQL-723"><a href="#TSQL-723"><span class="linenos">723</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-724"><a href="#TSQL-724"><span class="linenos">724</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
+</span><span id="TSQL-725"><a href="#TSQL-725"><span class="linenos">725</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-726"><a href="#TSQL-726"><span class="linenos">726</span></a>
+</span><span id="TSQL-727"><a href="#TSQL-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="TSQL-728"><a href="#TSQL-728"><span class="linenos">728</span></a>
+</span><span id="TSQL-729"><a href="#TSQL-729"><span class="linenos">729</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="TSQL-730"><a href="#TSQL-730"><span class="linenos">730</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-731"><a href="#TSQL-731"><span class="linenos">731</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="TSQL-732"><a href="#TSQL-732"><span class="linenos">732</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="TSQL-733"><a href="#TSQL-733"><span class="linenos">733</span></a>
+</span><span id="TSQL-734"><a href="#TSQL-734"><span class="linenos">734</span></a> <span class="c1"># https://learn.microsoft.com/en-us/answers/questions/448821/create-table-in-sql-server</span>
+</span><span id="TSQL-735"><a href="#TSQL-735"><span class="linenos">735</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="TSQL-736"><a href="#TSQL-736"><span class="linenos">736</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="TSQL-737"><a href="#TSQL-737"><span class="linenos">737</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-738"><a href="#TSQL-738"><span class="linenos">738</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 class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="TSQL-739"><a href="#TSQL-739"><span class="linenos">739</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;increment&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="TSQL-740"><a href="#TSQL-740"><span class="linenos">740</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IDENTITY(</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">increment</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -1944,6 +2008,7 @@
<dd id="TSQL.UNNEST_COLUMN_ONLY" class="variable"><a href="dialect.html#Dialect.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="TSQL.ALIAS_POST_TABLESAMPLE" class="variable"><a href="dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="TSQL.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="TSQL.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="TSQL.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="TSQL.NORMALIZE_FUNCTIONS" class="variable"><a href="dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="TSQL.DATE_FORMAT" class="variable"><a href="dialect.html#Dialect.DATE_FORMAT">DATE_FORMAT</a></dd>
@@ -1980,34 +2045,36 @@
</div>
<a class="headerlink" href="#TSQL.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Tokenizer-313"><a href="#TSQL.Tokenizer-313"><span class="linenos">313</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="TSQL.Tokenizer-314"><a href="#TSQL.Tokenizer-314"><span class="linenos">314</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)]</span>
-</span><span id="TSQL.Tokenizer-315"><a href="#TSQL.Tokenizer-315"><span class="linenos">315</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="TSQL.Tokenizer-316"><a href="#TSQL.Tokenizer-316"><span class="linenos">316</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="TSQL.Tokenizer-317"><a href="#TSQL.Tokenizer-317"><span class="linenos">317</span></a>
-</span><span id="TSQL.Tokenizer-318"><a href="#TSQL.Tokenizer-318"><span class="linenos">318</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Tokenizer-319"><a href="#TSQL.Tokenizer-319"><span class="linenos">319</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-320"><a href="#TSQL.Tokenizer-320"><span class="linenos">320</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-321"><a href="#TSQL.Tokenizer-321"><span class="linenos">321</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-322"><a href="#TSQL.Tokenizer-322"><span class="linenos">322</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-323"><a href="#TSQL.Tokenizer-323"><span class="linenos">323</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-324"><a href="#TSQL.Tokenizer-324"><span class="linenos">324</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-325"><a href="#TSQL.Tokenizer-325"><span class="linenos">325</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-326"><a href="#TSQL.Tokenizer-326"><span class="linenos">326</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-327"><a href="#TSQL.Tokenizer-327"><span class="linenos">327</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-328"><a href="#TSQL.Tokenizer-328"><span class="linenos">328</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-329"><a href="#TSQL.Tokenizer-329"><span class="linenos">329</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-330"><a href="#TSQL.Tokenizer-330"><span class="linenos">330</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-331"><a href="#TSQL.Tokenizer-331"><span class="linenos">331</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-332"><a href="#TSQL.Tokenizer-332"><span class="linenos">332</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-333"><a href="#TSQL.Tokenizer-333"><span class="linenos">333</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-334"><a href="#TSQL.Tokenizer-334"><span class="linenos">334</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-335"><a href="#TSQL.Tokenizer-335"><span class="linenos">335</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-336"><a href="#TSQL.Tokenizer-336"><span class="linenos">336</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-337"><a href="#TSQL.Tokenizer-337"><span class="linenos">337</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-338"><a href="#TSQL.Tokenizer-338"><span class="linenos">338</span></a> <span class="s2">&quot;OUTPUT&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="TSQL.Tokenizer-339"><a href="#TSQL.Tokenizer-339"><span class="linenos">339</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-340"><a href="#TSQL.Tokenizer-340"><span class="linenos">340</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Tokenizer-315"><a href="#TSQL.Tokenizer-315"><span class="linenos">315</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="TSQL.Tokenizer-316"><a href="#TSQL.Tokenizer-316"><span class="linenos">316</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)]</span>
+</span><span id="TSQL.Tokenizer-317"><a href="#TSQL.Tokenizer-317"><span class="linenos">317</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="TSQL.Tokenizer-318"><a href="#TSQL.Tokenizer-318"><span class="linenos">318</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="TSQL.Tokenizer-319"><a href="#TSQL.Tokenizer-319"><span class="linenos">319</span></a>
+</span><span id="TSQL.Tokenizer-320"><a href="#TSQL.Tokenizer-320"><span class="linenos">320</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Tokenizer-321"><a href="#TSQL.Tokenizer-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-322"><a href="#TSQL.Tokenizer-322"><span class="linenos">322</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-323"><a href="#TSQL.Tokenizer-323"><span class="linenos">323</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-324"><a href="#TSQL.Tokenizer-324"><span class="linenos">324</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-325"><a href="#TSQL.Tokenizer-325"><span class="linenos">325</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-326"><a href="#TSQL.Tokenizer-326"><span class="linenos">326</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-327"><a href="#TSQL.Tokenizer-327"><span class="linenos">327</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-328"><a href="#TSQL.Tokenizer-328"><span class="linenos">328</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-329"><a href="#TSQL.Tokenizer-329"><span class="linenos">329</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-330"><a href="#TSQL.Tokenizer-330"><span class="linenos">330</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-331"><a href="#TSQL.Tokenizer-331"><span class="linenos">331</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-332"><a href="#TSQL.Tokenizer-332"><span class="linenos">332</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-333"><a href="#TSQL.Tokenizer-333"><span class="linenos">333</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-334"><a href="#TSQL.Tokenizer-334"><span class="linenos">334</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-335"><a href="#TSQL.Tokenizer-335"><span class="linenos">335</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-336"><a href="#TSQL.Tokenizer-336"><span class="linenos">336</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-337"><a href="#TSQL.Tokenizer-337"><span class="linenos">337</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-338"><a href="#TSQL.Tokenizer-338"><span class="linenos">338</span></a> <span class="s2">&quot;UPDATE STATISTICS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-339"><a href="#TSQL.Tokenizer-339"><span class="linenos">339</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-340"><a href="#TSQL.Tokenizer-340"><span class="linenos">340</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-341"><a href="#TSQL.Tokenizer-341"><span class="linenos">341</span></a> <span class="s2">&quot;OUTPUT&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="TSQL.Tokenizer-342"><a href="#TSQL.Tokenizer-342"><span class="linenos">342</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-343"><a href="#TSQL.Tokenizer-343"><span class="linenos">343</span></a> <span class="s2">&quot;FOR SYSTEM_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-344"><a href="#TSQL.Tokenizer-344"><span class="linenos">344</span></a> <span class="p">}</span>
</span></pre></div>
@@ -2053,7 +2120,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span> =
<input id="TSQL.Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;DATETIME2&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;DATETIMEOFFSET&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;IMAGE&#39;: &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &#39;MONEY&#39;: &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &#39;NTEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;NVARCHAR(MAX)&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;PRINT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PROC&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;ROWVERSION&#39;: &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &#39;SMALLDATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;SMALLMONEY&#39;: &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &#39;SQL_VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &#39;UNIQUEIDENTIFIER&#39;: &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &#39;VARCHAR(MAX)&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;XML&#39;: &lt;TokenType.XML: &#39;XML&#39;&gt;, &#39;OUTPUT&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;SYSTEM_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;TokenType.BLOCK_START: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;TokenType.BLOCK_END: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;TokenType.HINT: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;TokenType.DPIPE: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;TokenType.GTE: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;TokenType.LTE: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;TokenType.DAMP: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;TokenType.DQMARK: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;TokenType.ALWAYS: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;TokenType.AND: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;TokenType.ALIAS: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;TokenType.CHARACTER_SET: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;TokenType.DROP: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;TokenType.ELSE: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;TokenType.END: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;TokenType.FOR: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;TokenType.FROM: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;TokenType.GROUPING_SETS: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;TokenType.IN: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;TokenType.INET: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;TokenType.INTO: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;TokenType.IS: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;TokenType.JOIN: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;TokenType.LATERAL: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;TokenType.NOTNULL: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;TokenType.ON: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;TokenType.OR: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;TokenType.OVER: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;TokenType.PARTITION_BY: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;TokenType.SET: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;TokenType.THEN: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;TokenType.USE: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;TokenType.USING: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;TokenType.WHEN: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;TokenType.WITH: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;TokenType.INT: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;TokenType.ALTER: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;TokenType.VERSION_SNAPSHOT: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;, &#39;DATETIME2&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;DATETIMEOFFSET&#39;: &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &#39;DECLARE&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;IMAGE&#39;: &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &#39;MONEY&#39;: &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &#39;NTEXT&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;NVARCHAR(MAX)&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;PRINT&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;PROC&#39;: &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &#39;ROWVERSION&#39;: &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &#39;SMALLDATETIME&#39;: &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &#39;SMALLMONEY&#39;: &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &#39;SQL_VARIANT&#39;: &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &#39;TOP&#39;: &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &#39;UNIQUEIDENTIFIER&#39;: &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &#39;UPDATE STATISTICS&#39;: &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &#39;VARCHAR(MAX)&#39;: &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &#39;XML&#39;: &lt;TokenType.XML: &#39;XML&#39;&gt;, &#39;OUTPUT&#39;: &lt;TokenType.RETURNING: &#39;RETURNING&#39;&gt;, &#39;SYSTEM_USER&#39;: &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &#39;FOR SYSTEM_TIME&#39;: &lt;TokenType.TIMESTAMP_SNAPSHOT: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;}</span>
</div>
@@ -2102,256 +2169,240 @@
</div>
<a class="headerlink" href="#TSQL.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Parser-342"><a href="#TSQL.Parser-342"><span class="linenos">342</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="TSQL.Parser-343"><a href="#TSQL.Parser-343"><span class="linenos">343</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-344"><a href="#TSQL.Parser-344"><span class="linenos">344</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="TSQL.Parser-345"><a href="#TSQL.Parser-345"><span class="linenos">345</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="TSQL.Parser-346"><a href="#TSQL.Parser-346"><span class="linenos">346</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="TSQL.Parser-347"><a href="#TSQL.Parser-347"><span class="linenos">347</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="TSQL.Parser-348"><a href="#TSQL.Parser-348"><span class="linenos">348</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="TSQL.Parser-349"><a href="#TSQL.Parser-349"><span class="linenos">349</span></a> <span class="p">),</span>
-</span><span id="TSQL.Parser-350"><a href="#TSQL.Parser-350"><span class="linenos">350</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL.Parser-351"><a href="#TSQL.Parser-351"><span class="linenos">351</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL.Parser-352"><a href="#TSQL.Parser-352"><span class="linenos">352</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TSQL.Parser-353"><a href="#TSQL.Parser-353"><span class="linenos">353</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
-</span><span id="TSQL.Parser-354"><a href="#TSQL.Parser-354"><span class="linenos">354</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
-</span><span id="TSQL.Parser-355"><a href="#TSQL.Parser-355"><span class="linenos">355</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
-</span><span id="TSQL.Parser-356"><a href="#TSQL.Parser-356"><span class="linenos">356</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-357"><a href="#TSQL.Parser-357"><span class="linenos">357</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
-</span><span id="TSQL.Parser-358"><a href="#TSQL.Parser-358"><span class="linenos">358</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-359"><a href="#TSQL.Parser-359"><span class="linenos">359</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-360"><a href="#TSQL.Parser-360"><span class="linenos">360</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-361"><a href="#TSQL.Parser-361"><span class="linenos">361</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-362"><a href="#TSQL.Parser-362"><span class="linenos">362</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-363"><a href="#TSQL.Parser-363"><span class="linenos">363</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="TSQL.Parser-364"><a href="#TSQL.Parser-364"><span class="linenos">364</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-365"><a href="#TSQL.Parser-365"><span class="linenos">365</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-366"><a href="#TSQL.Parser-366"><span class="linenos">366</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-367"><a href="#TSQL.Parser-367"><span class="linenos">367</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-368"><a href="#TSQL.Parser-368"><span class="linenos">368</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-369"><a href="#TSQL.Parser-369"><span class="linenos">369</span></a>
-</span><span id="TSQL.Parser-370"><a href="#TSQL.Parser-370"><span class="linenos">370</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-371"><a href="#TSQL.Parser-371"><span class="linenos">371</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Parser-372"><a href="#TSQL.Parser-372"><span class="linenos">372</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Parser-373"><a href="#TSQL.Parser-373"><span class="linenos">373</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Parser-374"><a href="#TSQL.Parser-374"><span class="linenos">374</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Parser-375"><a href="#TSQL.Parser-375"><span class="linenos">375</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-376"><a href="#TSQL.Parser-376"><span class="linenos">376</span></a>
-</span><span id="TSQL.Parser-377"><a href="#TSQL.Parser-377"><span class="linenos">377</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-378"><a href="#TSQL.Parser-378"><span class="linenos">378</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="TSQL.Parser-379"><a href="#TSQL.Parser-379"><span class="linenos">379</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="TSQL.Parser-380"><a href="#TSQL.Parser-380"><span class="linenos">380</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="TSQL.Parser-381"><a href="#TSQL.Parser-381"><span class="linenos">381</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="TSQL.Parser-382"><a href="#TSQL.Parser-382"><span class="linenos">382</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-383"><a href="#TSQL.Parser-383"><span class="linenos">383</span></a>
-</span><span id="TSQL.Parser-384"><a href="#TSQL.Parser-384"><span class="linenos">384</span></a> <span class="n">RETURNS_TABLE_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-385"><a href="#TSQL.Parser-385"><span class="linenos">385</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="TSQL.Parser-386"><a href="#TSQL.Parser-386"><span class="linenos">386</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="TSQL.Parser-387"><a href="#TSQL.Parser-387"><span class="linenos">387</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-388"><a href="#TSQL.Parser-388"><span class="linenos">388</span></a>
-</span><span id="TSQL.Parser-389"><a href="#TSQL.Parser-389"><span class="linenos">389</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-390"><a href="#TSQL.Parser-390"><span class="linenos">390</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
-</span><span id="TSQL.Parser-391"><a href="#TSQL.Parser-391"><span class="linenos">391</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
-</span><span id="TSQL.Parser-392"><a href="#TSQL.Parser-392"><span class="linenos">392</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-393"><a href="#TSQL.Parser-393"><span class="linenos">393</span></a>
-</span><span id="TSQL.Parser-394"><a href="#TSQL.Parser-394"><span class="linenos">394</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL.Parser-395"><a href="#TSQL.Parser-395"><span class="linenos">395</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL.Parser-396"><a href="#TSQL.Parser-396"><span class="linenos">396</span></a>
-</span><span id="TSQL.Parser-397"><a href="#TSQL.Parser-397"><span class="linenos">397</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL.Parser-398"><a href="#TSQL.Parser-398"><span class="linenos">398</span></a>
-</span><span id="TSQL.Parser-399"><a href="#TSQL.Parser-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="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="TSQL.Parser-400"><a href="#TSQL.Parser-400"><span class="linenos">400</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="TSQL.Parser-401"><a href="#TSQL.Parser-401"><span class="linenos">401</span></a><span class="sd"> T-SQL supports the syntax alias = expression in the SELECT&#39;s projection list,</span>
-</span><span id="TSQL.Parser-402"><a href="#TSQL.Parser-402"><span class="linenos">402</span></a><span class="sd"> so we transform all parsed Selects to convert their EQ projections into Aliases.</span>
-</span><span id="TSQL.Parser-403"><a href="#TSQL.Parser-403"><span class="linenos">403</span></a>
-</span><span id="TSQL.Parser-404"><a href="#TSQL.Parser-404"><span class="linenos">404</span></a><span class="sd"> See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax</span>
-</span><span id="TSQL.Parser-405"><a href="#TSQL.Parser-405"><span class="linenos">405</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL.Parser-406"><a href="#TSQL.Parser-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="TSQL.Parser-407"><a href="#TSQL.Parser-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">projection</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">projection</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL.Parser-408"><a href="#TSQL.Parser-408"><span class="linenos">408</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">EQ</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</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">Column</span><span class="p">)</span>
-</span><span id="TSQL.Parser-409"><a href="#TSQL.Parser-409"><span class="linenos">409</span></a> <span class="k">else</span> <span class="n">projection</span>
-</span><span id="TSQL.Parser-410"><a href="#TSQL.Parser-410"><span class="linenos">410</span></a> <span class="k">for</span> <span class="n">projection</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
-</span><span id="TSQL.Parser-411"><a href="#TSQL.Parser-411"><span class="linenos">411</span></a> <span class="p">]</span>
-</span><span id="TSQL.Parser-412"><a href="#TSQL.Parser-412"><span class="linenos">412</span></a>
-</span><span id="TSQL.Parser-413"><a href="#TSQL.Parser-413"><span class="linenos">413</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="TSQL.Parser-414"><a href="#TSQL.Parser-414"><span class="linenos">414</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
-</span><span id="TSQL.Parser-415"><a href="#TSQL.Parser-415"><span class="linenos">415</span></a><span class="sd"> COMMIT [ { TRAN | TRANSACTION }</span>
-</span><span id="TSQL.Parser-416"><a href="#TSQL.Parser-416"><span class="linenos">416</span></a><span class="sd"> [ transaction_name | @tran_name_variable ] ]</span>
-</span><span id="TSQL.Parser-417"><a href="#TSQL.Parser-417"><span class="linenos">417</span></a><span class="sd"> [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Parser-346"><a href="#TSQL.Parser-346"><span class="linenos">346</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="TSQL.Parser-347"><a href="#TSQL.Parser-347"><span class="linenos">347</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-348"><a href="#TSQL.Parser-348"><span class="linenos">348</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="TSQL.Parser-349"><a href="#TSQL.Parser-349"><span class="linenos">349</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="TSQL.Parser-350"><a href="#TSQL.Parser-350"><span class="linenos">350</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="TSQL.Parser-351"><a href="#TSQL.Parser-351"><span class="linenos">351</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="TSQL.Parser-352"><a href="#TSQL.Parser-352"><span class="linenos">352</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="TSQL.Parser-353"><a href="#TSQL.Parser-353"><span class="linenos">353</span></a> <span class="p">),</span>
+</span><span id="TSQL.Parser-354"><a href="#TSQL.Parser-354"><span class="linenos">354</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL.Parser-355"><a href="#TSQL.Parser-355"><span class="linenos">355</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">,</span> <span class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL.Parser-356"><a href="#TSQL.Parser-356"><span class="linenos">356</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TSQL.Parser-357"><a href="#TSQL.Parser-357"><span class="linenos">357</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
+</span><span id="TSQL.Parser-358"><a href="#TSQL.Parser-358"><span class="linenos">358</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
+</span><span id="TSQL.Parser-359"><a href="#TSQL.Parser-359"><span class="linenos">359</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
+</span><span id="TSQL.Parser-360"><a href="#TSQL.Parser-360"><span class="linenos">360</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-361"><a href="#TSQL.Parser-361"><span class="linenos">361</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
+</span><span id="TSQL.Parser-362"><a href="#TSQL.Parser-362"><span class="linenos">362</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-363"><a href="#TSQL.Parser-363"><span class="linenos">363</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-364"><a href="#TSQL.Parser-364"><span class="linenos">364</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-365"><a href="#TSQL.Parser-365"><span class="linenos">365</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-366"><a href="#TSQL.Parser-366"><span class="linenos">366</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-367"><a href="#TSQL.Parser-367"><span class="linenos">367</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
+</span><span id="TSQL.Parser-368"><a href="#TSQL.Parser-368"><span class="linenos">368</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-369"><a href="#TSQL.Parser-369"><span class="linenos">369</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-370"><a href="#TSQL.Parser-370"><span class="linenos">370</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-371"><a href="#TSQL.Parser-371"><span class="linenos">371</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-372"><a href="#TSQL.Parser-372"><span class="linenos">372</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-373"><a href="#TSQL.Parser-373"><span class="linenos">373</span></a>
+</span><span id="TSQL.Parser-374"><a href="#TSQL.Parser-374"><span class="linenos">374</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-375"><a href="#TSQL.Parser-375"><span class="linenos">375</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-376"><a href="#TSQL.Parser-376"><span class="linenos">376</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-377"><a href="#TSQL.Parser-377"><span class="linenos">377</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-378"><a href="#TSQL.Parser-378"><span class="linenos">378</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-379"><a href="#TSQL.Parser-379"><span class="linenos">379</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-380"><a href="#TSQL.Parser-380"><span class="linenos">380</span></a>
+</span><span id="TSQL.Parser-381"><a href="#TSQL.Parser-381"><span class="linenos">381</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-382"><a href="#TSQL.Parser-382"><span class="linenos">382</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="TSQL.Parser-383"><a href="#TSQL.Parser-383"><span class="linenos">383</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="TSQL.Parser-384"><a href="#TSQL.Parser-384"><span class="linenos">384</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="TSQL.Parser-385"><a href="#TSQL.Parser-385"><span class="linenos">385</span></a> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="TSQL.Parser-386"><a href="#TSQL.Parser-386"><span class="linenos">386</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-387"><a href="#TSQL.Parser-387"><span class="linenos">387</span></a>
+</span><span id="TSQL.Parser-388"><a href="#TSQL.Parser-388"><span class="linenos">388</span></a> <span class="n">RETURNS_TABLE_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-389"><a href="#TSQL.Parser-389"><span class="linenos">389</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="TSQL.Parser-390"><a href="#TSQL.Parser-390"><span class="linenos">390</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="TSQL.Parser-391"><a href="#TSQL.Parser-391"><span class="linenos">391</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-392"><a href="#TSQL.Parser-392"><span class="linenos">392</span></a>
+</span><span id="TSQL.Parser-393"><a href="#TSQL.Parser-393"><span class="linenos">393</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-394"><a href="#TSQL.Parser-394"><span class="linenos">394</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span>
+</span><span id="TSQL.Parser-395"><a href="#TSQL.Parser-395"><span class="linenos">395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
+</span><span id="TSQL.Parser-396"><a href="#TSQL.Parser-396"><span class="linenos">396</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-397"><a href="#TSQL.Parser-397"><span class="linenos">397</span></a>
+</span><span id="TSQL.Parser-398"><a href="#TSQL.Parser-398"><span class="linenos">398</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Parser-399"><a href="#TSQL.Parser-399"><span class="linenos">399</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Parser-400"><a href="#TSQL.Parser-400"><span class="linenos">400</span></a>
+</span><span id="TSQL.Parser-401"><a href="#TSQL.Parser-401"><span class="linenos">401</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Parser-402"><a href="#TSQL.Parser-402"><span class="linenos">402</span></a>
+</span><span id="TSQL.Parser-403"><a href="#TSQL.Parser-403"><span class="linenos">403</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Parser-404"><a href="#TSQL.Parser-404"><span class="linenos">404</span></a>
+</span><span id="TSQL.Parser-405"><a href="#TSQL.Parser-405"><span class="linenos">405</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL.Parser-406"><a href="#TSQL.Parser-406"><span class="linenos">406</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="TSQL.Parser-407"><a href="#TSQL.Parser-407"><span class="linenos">407</span></a><span class="sd"> T-SQL supports the syntax alias = expression in the SELECT&#39;s projection list,</span>
+</span><span id="TSQL.Parser-408"><a href="#TSQL.Parser-408"><span class="linenos">408</span></a><span class="sd"> so we transform all parsed Selects to convert their EQ projections into Aliases.</span>
+</span><span id="TSQL.Parser-409"><a href="#TSQL.Parser-409"><span class="linenos">409</span></a>
+</span><span id="TSQL.Parser-410"><a href="#TSQL.Parser-410"><span class="linenos">410</span></a><span class="sd"> See: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-clause-transact-sql?view=sql-server-ver16#syntax</span>
+</span><span id="TSQL.Parser-411"><a href="#TSQL.Parser-411"><span class="linenos">411</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL.Parser-412"><a href="#TSQL.Parser-412"><span class="linenos">412</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="TSQL.Parser-413"><a href="#TSQL.Parser-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">projection</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">projection</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL.Parser-414"><a href="#TSQL.Parser-414"><span class="linenos">414</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">EQ</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</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">Column</span><span class="p">)</span>
+</span><span id="TSQL.Parser-415"><a href="#TSQL.Parser-415"><span class="linenos">415</span></a> <span class="k">else</span> <span class="n">projection</span>
+</span><span id="TSQL.Parser-416"><a href="#TSQL.Parser-416"><span class="linenos">416</span></a> <span class="k">for</span> <span class="n">projection</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
+</span><span id="TSQL.Parser-417"><a href="#TSQL.Parser-417"><span class="linenos">417</span></a> <span class="p">]</span>
</span><span id="TSQL.Parser-418"><a href="#TSQL.Parser-418"><span class="linenos">418</span></a>
-</span><span id="TSQL.Parser-419"><a href="#TSQL.Parser-419"><span class="linenos">419</span></a><span class="sd"> ROLLBACK { TRAN | TRANSACTION }</span>
-</span><span id="TSQL.Parser-420"><a href="#TSQL.Parser-420"><span class="linenos">420</span></a><span class="sd"> [ transaction_name | @tran_name_variable</span>
-</span><span id="TSQL.Parser-421"><a href="#TSQL.Parser-421"><span class="linenos">421</span></a><span class="sd"> | savepoint_name | @savepoint_variable ]</span>
-</span><span id="TSQL.Parser-422"><a href="#TSQL.Parser-422"><span class="linenos">422</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL.Parser-423"><a href="#TSQL.Parser-423"><span class="linenos">423</span></a> <span class="n">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="TSQL.Parser-419"><a href="#TSQL.Parser-419"><span class="linenos">419</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="TSQL.Parser-420"><a href="#TSQL.Parser-420"><span class="linenos">420</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
+</span><span id="TSQL.Parser-421"><a href="#TSQL.Parser-421"><span class="linenos">421</span></a><span class="sd"> COMMIT [ { TRAN | TRANSACTION }</span>
+</span><span id="TSQL.Parser-422"><a href="#TSQL.Parser-422"><span class="linenos">422</span></a><span class="sd"> [ transaction_name | @tran_name_variable ] ]</span>
+</span><span id="TSQL.Parser-423"><a href="#TSQL.Parser-423"><span class="linenos">423</span></a><span class="sd"> [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]</span>
</span><span id="TSQL.Parser-424"><a href="#TSQL.Parser-424"><span class="linenos">424</span></a>
-</span><span id="TSQL.Parser-425"><a href="#TSQL.Parser-425"><span class="linenos">425</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">})</span>
-</span><span id="TSQL.Parser-426"><a href="#TSQL.Parser-426"><span class="linenos">426</span></a> <span class="n">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="TSQL.Parser-427"><a href="#TSQL.Parser-427"><span class="linenos">427</span></a>
-</span><span id="TSQL.Parser-428"><a href="#TSQL.Parser-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="n">rollback</span><span class="p">:</span>
-</span><span id="TSQL.Parser-429"><a href="#TSQL.Parser-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</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="TSQL.Parser-425"><a href="#TSQL.Parser-425"><span class="linenos">425</span></a><span class="sd"> ROLLBACK { TRAN | TRANSACTION }</span>
+</span><span id="TSQL.Parser-426"><a href="#TSQL.Parser-426"><span class="linenos">426</span></a><span class="sd"> [ transaction_name | @tran_name_variable</span>
+</span><span id="TSQL.Parser-427"><a href="#TSQL.Parser-427"><span class="linenos">427</span></a><span class="sd"> | savepoint_name | @savepoint_variable ]</span>
+</span><span id="TSQL.Parser-428"><a href="#TSQL.Parser-428"><span class="linenos">428</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL.Parser-429"><a href="#TSQL.Parser-429"><span class="linenos">429</span></a> <span class="n">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="TSQL.Parser-430"><a href="#TSQL.Parser-430"><span class="linenos">430</span></a>
-</span><span id="TSQL.Parser-431"><a href="#TSQL.Parser-431"><span class="linenos">431</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-432"><a href="#TSQL.Parser-432"><span class="linenos">432</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="TSQL.Parser-433"><a href="#TSQL.Parser-433"><span class="linenos">433</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;DELAYED_DURABILITY&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Parser-434"><a href="#TSQL.Parser-434"><span class="linenos">434</span></a> <span class="bp">self</span><span 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="TSQL.Parser-435"><a href="#TSQL.Parser-435"><span class="linenos">435</span></a>
-</span><span id="TSQL.Parser-436"><a href="#TSQL.Parser-436"><span class="linenos">436</span></a> <span class="k">if</span> <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="TSQL.Parser-437"><a href="#TSQL.Parser-437"><span class="linenos">437</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL.Parser-438"><a href="#TSQL.Parser-438"><span class="linenos">438</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TSQL.Parser-439"><a href="#TSQL.Parser-439"><span class="linenos">439</span></a> <span class="bp">self</span><span 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="TSQL.Parser-440"><a href="#TSQL.Parser-440"><span class="linenos">440</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Parser-431"><a href="#TSQL.Parser-431"><span class="linenos">431</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">})</span>
+</span><span id="TSQL.Parser-432"><a href="#TSQL.Parser-432"><span class="linenos">432</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="TSQL.Parser-433"><a href="#TSQL.Parser-433"><span class="linenos">433</span></a>
+</span><span id="TSQL.Parser-434"><a href="#TSQL.Parser-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="n">rollback</span><span class="p">:</span>
+</span><span id="TSQL.Parser-435"><a href="#TSQL.Parser-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</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="TSQL.Parser-436"><a href="#TSQL.Parser-436"><span class="linenos">436</span></a>
+</span><span id="TSQL.Parser-437"><a href="#TSQL.Parser-437"><span class="linenos">437</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-438"><a href="#TSQL.Parser-438"><span class="linenos">438</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="TSQL.Parser-439"><a href="#TSQL.Parser-439"><span class="linenos">439</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;DELAYED_DURABILITY&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Parser-440"><a href="#TSQL.Parser-440"><span class="linenos">440</span></a> <span class="bp">self</span><span 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="TSQL.Parser-441"><a href="#TSQL.Parser-441"><span class="linenos">441</span></a>
-</span><span id="TSQL.Parser-442"><a href="#TSQL.Parser-442"><span class="linenos">442</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="TSQL.Parser-443"><a href="#TSQL.Parser-443"><span class="linenos">443</span></a>
-</span><span id="TSQL.Parser-444"><a href="#TSQL.Parser-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">durability</span><span class="o">=</span><span class="n">durability</span><span class="p">)</span>
-</span><span id="TSQL.Parser-445"><a href="#TSQL.Parser-445"><span class="linenos">445</span></a>
-</span><span id="TSQL.Parser-446"><a href="#TSQL.Parser-446"><span class="linenos">446</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="TSQL.Parser-447"><a href="#TSQL.Parser-447"><span class="linenos">447</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
-</span><span id="TSQL.Parser-448"><a href="#TSQL.Parser-448"><span class="linenos">448</span></a><span class="sd"> BEGIN { TRAN | TRANSACTION }</span>
-</span><span id="TSQL.Parser-449"><a href="#TSQL.Parser-449"><span class="linenos">449</span></a><span class="sd"> [ { transaction_name | @tran_name_variable }</span>
-</span><span id="TSQL.Parser-450"><a href="#TSQL.Parser-450"><span class="linenos">450</span></a><span class="sd"> [ WITH MARK [ &#39;description&#39; ] ]</span>
-</span><span id="TSQL.Parser-451"><a href="#TSQL.Parser-451"><span class="linenos">451</span></a><span class="sd"> ]</span>
-</span><span id="TSQL.Parser-452"><a href="#TSQL.Parser-452"><span class="linenos">452</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL.Parser-453"><a href="#TSQL.Parser-453"><span class="linenos">453</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)):</span>
-</span><span id="TSQL.Parser-454"><a href="#TSQL.Parser-454"><span class="linenos">454</span></a> <span class="n">transaction</span> <span class="o">=</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
-</span><span id="TSQL.Parser-455"><a href="#TSQL.Parser-455"><span class="linenos">455</span></a> <span class="k">if</span> <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;MARK&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-456"><a href="#TSQL.Parser-456"><span class="linenos">456</span></a> <span class="n">transaction</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="TSQL.Parser-457"><a href="#TSQL.Parser-457"><span class="linenos">457</span></a>
-</span><span id="TSQL.Parser-458"><a href="#TSQL.Parser-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="n">transaction</span>
-</span><span id="TSQL.Parser-459"><a href="#TSQL.Parser-459"><span class="linenos">459</span></a>
-</span><span id="TSQL.Parser-460"><a href="#TSQL.Parser-460"><span class="linenos">460</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="TSQL.Parser-461"><a href="#TSQL.Parser-461"><span class="linenos">461</span></a>
-</span><span id="TSQL.Parser-462"><a href="#TSQL.Parser-462"><span class="linenos">462</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL.Parser-463"><a href="#TSQL.Parser-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-464"><a href="#TSQL.Parser-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-442"><a href="#TSQL.Parser-442"><span class="linenos">442</span></a> <span class="k">if</span> <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="TSQL.Parser-443"><a href="#TSQL.Parser-443"><span class="linenos">443</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Parser-444"><a href="#TSQL.Parser-444"><span class="linenos">444</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL.Parser-445"><a href="#TSQL.Parser-445"><span class="linenos">445</span></a> <span class="bp">self</span><span 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="TSQL.Parser-446"><a href="#TSQL.Parser-446"><span class="linenos">446</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Parser-447"><a href="#TSQL.Parser-447"><span class="linenos">447</span></a>
+</span><span id="TSQL.Parser-448"><a href="#TSQL.Parser-448"><span class="linenos">448</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="TSQL.Parser-449"><a href="#TSQL.Parser-449"><span class="linenos">449</span></a>
+</span><span id="TSQL.Parser-450"><a href="#TSQL.Parser-450"><span class="linenos">450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">durability</span><span class="o">=</span><span class="n">durability</span><span class="p">)</span>
+</span><span id="TSQL.Parser-451"><a href="#TSQL.Parser-451"><span class="linenos">451</span></a>
+</span><span id="TSQL.Parser-452"><a href="#TSQL.Parser-452"><span class="linenos">452</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="TSQL.Parser-453"><a href="#TSQL.Parser-453"><span class="linenos">453</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Applies to SQL Server and Azure SQL Database</span>
+</span><span id="TSQL.Parser-454"><a href="#TSQL.Parser-454"><span class="linenos">454</span></a><span class="sd"> BEGIN { TRAN | TRANSACTION }</span>
+</span><span id="TSQL.Parser-455"><a href="#TSQL.Parser-455"><span class="linenos">455</span></a><span class="sd"> [ { transaction_name | @tran_name_variable }</span>
+</span><span id="TSQL.Parser-456"><a href="#TSQL.Parser-456"><span class="linenos">456</span></a><span class="sd"> [ WITH MARK [ &#39;description&#39; ] ]</span>
+</span><span id="TSQL.Parser-457"><a href="#TSQL.Parser-457"><span class="linenos">457</span></a><span class="sd"> ]</span>
+</span><span id="TSQL.Parser-458"><a href="#TSQL.Parser-458"><span class="linenos">458</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL.Parser-459"><a href="#TSQL.Parser-459"><span class="linenos">459</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;TRAN&quot;</span><span class="p">,</span> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)):</span>
+</span><span id="TSQL.Parser-460"><a href="#TSQL.Parser-460"><span class="linenos">460</span></a> <span class="n">transaction</span> <span class="o">=</span> <span class="bp">self</span><span 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="TSQL.Parser-461"><a href="#TSQL.Parser-461"><span class="linenos">461</span></a> <span class="k">if</span> <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;MARK&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Parser-462"><a href="#TSQL.Parser-462"><span class="linenos">462</span></a> <span class="n">transaction</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="TSQL.Parser-463"><a href="#TSQL.Parser-463"><span class="linenos">463</span></a>
+</span><span id="TSQL.Parser-464"><a href="#TSQL.Parser-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">transaction</span>
</span><span id="TSQL.Parser-465"><a href="#TSQL.Parser-465"><span class="linenos">465</span></a>
-</span><span id="TSQL.Parser-466"><a href="#TSQL.Parser-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-467"><a href="#TSQL.Parser-467"><span class="linenos">467</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-468"><a href="#TSQL.Parser-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
-</span><span id="TSQL.Parser-469"><a href="#TSQL.Parser-469"><span class="linenos">469</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-470"><a href="#TSQL.Parser-470"><span class="linenos">470</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="TSQL.Parser-471"><a href="#TSQL.Parser-471"><span class="linenos">471</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="TSQL.Parser-472"><a href="#TSQL.Parser-472"><span class="linenos">472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL.Parser-473"><a href="#TSQL.Parser-473"><span class="linenos">473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="TSQL.Parser-474"><a href="#TSQL.Parser-474"><span class="linenos">474</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL.Parser-475"><a href="#TSQL.Parser-475"><span class="linenos">475</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-476"><a href="#TSQL.Parser-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span>
-</span><span id="TSQL.Parser-477"><a href="#TSQL.Parser-477"><span class="linenos">477</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-478"><a href="#TSQL.Parser-478"><span class="linenos">478</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-479"><a href="#TSQL.Parser-479"><span class="linenos">479</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="TSQL.Parser-480"><a href="#TSQL.Parser-480"><span class="linenos">480</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-481"><a href="#TSQL.Parser-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
-</span><span id="TSQL.Parser-482"><a href="#TSQL.Parser-482"><span class="linenos">482</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="TSQL.Parser-483"><a href="#TSQL.Parser-483"><span class="linenos">483</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="TSQL.Parser-484"><a href="#TSQL.Parser-484"><span class="linenos">484</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Parser-485"><a href="#TSQL.Parser-485"><span class="linenos">485</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-486"><a href="#TSQL.Parser-486"><span class="linenos">486</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="TSQL.Parser-487"><a href="#TSQL.Parser-487"><span class="linenos">487</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Parser-488"><a href="#TSQL.Parser-488"><span class="linenos">488</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TSQL.Parser-489"><a href="#TSQL.Parser-489"><span class="linenos">489</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-490"><a href="#TSQL.Parser-490"><span class="linenos">490</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Parser-491"><a href="#TSQL.Parser-491"><span class="linenos">491</span></a>
-</span><span id="TSQL.Parser-492"><a href="#TSQL.Parser-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="n">system_time</span>
-</span><span id="TSQL.Parser-493"><a href="#TSQL.Parser-493"><span class="linenos">493</span></a>
-</span><span id="TSQL.Parser-494"><a href="#TSQL.Parser-494"><span class="linenos">494</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">Table</span><span class="p">:</span>
-</span><span id="TSQL.Parser-495"><a href="#TSQL.Parser-495"><span class="linenos">495</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="TSQL.Parser-496"><a href="#TSQL.Parser-496"><span class="linenos">496</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
-</span><span id="TSQL.Parser-497"><a href="#TSQL.Parser-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="TSQL.Parser-498"><a href="#TSQL.Parser-498"><span class="linenos">498</span></a>
-</span><span id="TSQL.Parser-499"><a href="#TSQL.Parser-499"><span class="linenos">499</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">ReturnsProperty</span><span class="p">:</span>
-</span><span id="TSQL.Parser-500"><a href="#TSQL.Parser-500"><span class="linenos">500</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
-</span><span id="TSQL.Parser-501"><a href="#TSQL.Parser-501"><span class="linenos">501</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
-</span><span id="TSQL.Parser-502"><a href="#TSQL.Parser-502"><span class="linenos">502</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="TSQL.Parser-503"><a href="#TSQL.Parser-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="n">returns</span>
-</span><span id="TSQL.Parser-504"><a href="#TSQL.Parser-504"><span class="linenos">504</span></a>
-</span><span id="TSQL.Parser-505"><a href="#TSQL.Parser-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL.Parser-506"><a href="#TSQL.Parser-506"><span class="linenos">506</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="TSQL.Parser-507"><a href="#TSQL.Parser-507"><span class="linenos">507</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="TSQL.Parser-508"><a href="#TSQL.Parser-508"><span class="linenos">508</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="TSQL.Parser-509"><a href="#TSQL.Parser-509"><span class="linenos">509</span></a>
-</span><span id="TSQL.Parser-510"><a href="#TSQL.Parser-510"><span class="linenos">510</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="TSQL.Parser-511"><a href="#TSQL.Parser-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-512"><a href="#TSQL.Parser-512"><span class="linenos">512</span></a>
-</span><span id="TSQL.Parser-513"><a href="#TSQL.Parser-513"><span class="linenos">513</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
-</span><span id="TSQL.Parser-514"><a href="#TSQL.Parser-514"><span class="linenos">514</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL.Parser-515"><a href="#TSQL.Parser-515"><span class="linenos">515</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL.Parser-466"><a href="#TSQL.Parser-466"><span class="linenos">466</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="TSQL.Parser-467"><a href="#TSQL.Parser-467"><span class="linenos">467</span></a>
+</span><span id="TSQL.Parser-468"><a href="#TSQL.Parser-468"><span class="linenos">468</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">ReturnsProperty</span><span class="p">:</span>
+</span><span id="TSQL.Parser-469"><a href="#TSQL.Parser-469"><span class="linenos">469</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
+</span><span id="TSQL.Parser-470"><a href="#TSQL.Parser-470"><span class="linenos">470</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
+</span><span id="TSQL.Parser-471"><a href="#TSQL.Parser-471"><span class="linenos">471</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="TSQL.Parser-472"><a href="#TSQL.Parser-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">returns</span>
+</span><span id="TSQL.Parser-473"><a href="#TSQL.Parser-473"><span class="linenos">473</span></a>
+</span><span id="TSQL.Parser-474"><a href="#TSQL.Parser-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL.Parser-475"><a href="#TSQL.Parser-475"><span class="linenos">475</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="TSQL.Parser-476"><a href="#TSQL.Parser-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
+</span><span id="TSQL.Parser-477"><a href="#TSQL.Parser-477"><span class="linenos">477</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="TSQL.Parser-478"><a href="#TSQL.Parser-478"><span class="linenos">478</span></a>
+</span><span id="TSQL.Parser-479"><a href="#TSQL.Parser-479"><span class="linenos">479</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="TSQL.Parser-480"><a href="#TSQL.Parser-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-481"><a href="#TSQL.Parser-481"><span class="linenos">481</span></a>
+</span><span id="TSQL.Parser-482"><a href="#TSQL.Parser-482"><span class="linenos">482</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
+</span><span id="TSQL.Parser-483"><a href="#TSQL.Parser-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL.Parser-484"><a href="#TSQL.Parser-484"><span class="linenos">484</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL.Parser-485"><a href="#TSQL.Parser-485"><span class="linenos">485</span></a>
+</span><span id="TSQL.Parser-486"><a href="#TSQL.Parser-486"><span class="linenos">486</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
+</span><span id="TSQL.Parser-487"><a href="#TSQL.Parser-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="TSQL.Parser-488"><a href="#TSQL.Parser-488"><span class="linenos">488</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="TSQL.Parser-489"><a href="#TSQL.Parser-489"><span class="linenos">489</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Parser-490"><a href="#TSQL.Parser-490"><span class="linenos">490</span></a>
+</span><span id="TSQL.Parser-491"><a href="#TSQL.Parser-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">:</span>
+</span><span id="TSQL.Parser-492"><a href="#TSQL.Parser-492"><span class="linenos">492</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="TSQL.Parser-493"><a href="#TSQL.Parser-493"><span class="linenos">493</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Parser-494"><a href="#TSQL.Parser-494"><span class="linenos">494</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-495"><a href="#TSQL.Parser-495"><span class="linenos">495</span></a>
+</span><span id="TSQL.Parser-496"><a href="#TSQL.Parser-496"><span class="linenos">496</span></a> <span class="n">format_norm</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="TSQL.Parser-497"><a href="#TSQL.Parser-497"><span class="linenos">497</span></a>
+</span><span id="TSQL.Parser-498"><a href="#TSQL.Parser-498"><span class="linenos">498</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
+</span><span id="TSQL.Parser-499"><a href="#TSQL.Parser-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="TSQL.Parser-500"><a href="#TSQL.Parser-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL.Parser-501"><a href="#TSQL.Parser-501"><span class="linenos">501</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
+</span><span id="TSQL.Parser-502"><a href="#TSQL.Parser-502"><span class="linenos">502</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span>
+</span><span id="TSQL.Parser-503"><a href="#TSQL.Parser-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL.Parser-504"><a href="#TSQL.Parser-504"><span class="linenos">504</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
+</span><span id="TSQL.Parser-505"><a href="#TSQL.Parser-505"><span class="linenos">505</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL.Parser-506"><a href="#TSQL.Parser-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL.Parser-507"><a href="#TSQL.Parser-507"><span class="linenos">507</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="TSQL.Parser-508"><a href="#TSQL.Parser-508"><span class="linenos">508</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="TSQL.Parser-509"><a href="#TSQL.Parser-509"><span class="linenos">509</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
+</span><span id="TSQL.Parser-510"><a href="#TSQL.Parser-510"><span class="linenos">510</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-511"><a href="#TSQL.Parser-511"><span class="linenos">511</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
+</span><span id="TSQL.Parser-512"><a href="#TSQL.Parser-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL.Parser-513"><a href="#TSQL.Parser-513"><span class="linenos">513</span></a>
+</span><span id="TSQL.Parser-514"><a href="#TSQL.Parser-514"><span class="linenos">514</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
+</span><span id="TSQL.Parser-515"><a href="#TSQL.Parser-515"><span class="linenos">515</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
</span><span id="TSQL.Parser-516"><a href="#TSQL.Parser-516"><span class="linenos">516</span></a>
-</span><span id="TSQL.Parser-517"><a href="#TSQL.Parser-517"><span class="linenos">517</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
-</span><span id="TSQL.Parser-518"><a href="#TSQL.Parser-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="TSQL.Parser-519"><a href="#TSQL.Parser-519"><span class="linenos">519</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="TSQL.Parser-520"><a href="#TSQL.Parser-520"><span class="linenos">520</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Parser-517"><a href="#TSQL.Parser-517"><span class="linenos">517</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="TSQL.Parser-518"><a href="#TSQL.Parser-518"><span class="linenos">518</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-519"><a href="#TSQL.Parser-519"><span class="linenos">519</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL.Parser-520"><a href="#TSQL.Parser-520"><span class="linenos">520</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="TSQL.Parser-521"><a href="#TSQL.Parser-521"><span class="linenos">521</span></a>
-</span><span id="TSQL.Parser-522"><a href="#TSQL.Parser-522"><span class="linenos">522</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">:</span>
-</span><span id="TSQL.Parser-523"><a href="#TSQL.Parser-523"><span class="linenos">523</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="TSQL.Parser-524"><a href="#TSQL.Parser-524"><span class="linenos">524</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Parser-525"><a href="#TSQL.Parser-525"><span class="linenos">525</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-526"><a href="#TSQL.Parser-526"><span class="linenos">526</span></a>
-</span><span id="TSQL.Parser-527"><a href="#TSQL.Parser-527"><span class="linenos">527</span></a> <span class="n">format_norm</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">TSQL</span><span class="o">.</span><span class="n">CONVERT_FORMAT_MAPPING</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="TSQL.Parser-522"><a href="#TSQL.Parser-522"><span class="linenos">522</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="TSQL.Parser-523"><a href="#TSQL.Parser-523"><span class="linenos">523</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
+</span><span id="TSQL.Parser-524"><a href="#TSQL.Parser-524"><span class="linenos">524</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="TSQL.Parser-525"><a href="#TSQL.Parser-525"><span class="linenos">525</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL.Parser-526"><a href="#TSQL.Parser-526"><span class="linenos">526</span></a> <span class="p">):</span>
+</span><span id="TSQL.Parser-527"><a href="#TSQL.Parser-527"><span class="linenos">527</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="TSQL.Parser-528"><a href="#TSQL.Parser-528"><span class="linenos">528</span></a>
-</span><span id="TSQL.Parser-529"><a href="#TSQL.Parser-529"><span class="linenos">529</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
-</span><span id="TSQL.Parser-530"><a href="#TSQL.Parser-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="TSQL.Parser-531"><a href="#TSQL.Parser-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL.Parser-532"><a href="#TSQL.Parser-532"><span class="linenos">532</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
-</span><span id="TSQL.Parser-533"><a href="#TSQL.Parser-533"><span class="linenos">533</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span>
-</span><span id="TSQL.Parser-534"><a href="#TSQL.Parser-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL.Parser-535"><a href="#TSQL.Parser-535"><span class="linenos">535</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
-</span><span id="TSQL.Parser-536"><a href="#TSQL.Parser-536"><span class="linenos">536</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL.Parser-537"><a href="#TSQL.Parser-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-538"><a href="#TSQL.Parser-538"><span class="linenos">538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="TSQL.Parser-539"><a href="#TSQL.Parser-539"><span class="linenos">539</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="TSQL.Parser-540"><a href="#TSQL.Parser-540"><span class="linenos">540</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
-</span><span id="TSQL.Parser-541"><a href="#TSQL.Parser-541"><span class="linenos">541</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-542"><a href="#TSQL.Parser-542"><span class="linenos">542</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
-</span><span id="TSQL.Parser-543"><a href="#TSQL.Parser-543"><span class="linenos">543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL.Parser-544"><a href="#TSQL.Parser-544"><span class="linenos">544</span></a>
-</span><span id="TSQL.Parser-545"><a href="#TSQL.Parser-545"><span class="linenos">545</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
-</span><span id="TSQL.Parser-546"><a href="#TSQL.Parser-546"><span class="linenos">546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
-</span><span id="TSQL.Parser-547"><a href="#TSQL.Parser-547"><span class="linenos">547</span></a>
-</span><span id="TSQL.Parser-548"><a href="#TSQL.Parser-548"><span class="linenos">548</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="TSQL.Parser-549"><a href="#TSQL.Parser-549"><span class="linenos">549</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-550"><a href="#TSQL.Parser-550"><span class="linenos">550</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL.Parser-551"><a href="#TSQL.Parser-551"><span class="linenos">551</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="TSQL.Parser-552"><a href="#TSQL.Parser-552"><span class="linenos">552</span></a>
-</span><span id="TSQL.Parser-553"><a href="#TSQL.Parser-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="TSQL.Parser-554"><a href="#TSQL.Parser-554"><span class="linenos">554</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
-</span><span id="TSQL.Parser-555"><a href="#TSQL.Parser-555"><span class="linenos">555</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="TSQL.Parser-556"><a href="#TSQL.Parser-556"><span class="linenos">556</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL.Parser-557"><a href="#TSQL.Parser-557"><span class="linenos">557</span></a> <span class="p">):</span>
-</span><span id="TSQL.Parser-558"><a href="#TSQL.Parser-558"><span class="linenos">558</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="TSQL.Parser-529"><a href="#TSQL.Parser-529"><span class="linenos">529</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
+</span><span id="TSQL.Parser-530"><a href="#TSQL.Parser-530"><span class="linenos">530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="TSQL.Parser-531"><a href="#TSQL.Parser-531"><span class="linenos">531</span></a>
+</span><span id="TSQL.Parser-532"><a href="#TSQL.Parser-532"><span class="linenos">532</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="TSQL.Parser-533"><a href="#TSQL.Parser-533"><span class="linenos">533</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TSQL.Parser-534"><a href="#TSQL.Parser-534"><span class="linenos">534</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="TSQL.Parser-535"><a href="#TSQL.Parser-535"><span class="linenos">535</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="TSQL.Parser-536"><a href="#TSQL.Parser-536"><span class="linenos">536</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="TSQL.Parser-537"><a href="#TSQL.Parser-537"><span class="linenos">537</span></a> <span class="n">is_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">HASH</span><span class="p">)</span>
+</span><span id="TSQL.Parser-538"><a href="#TSQL.Parser-538"><span class="linenos">538</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="n">is_temporary</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">HASH</span><span class="p">)</span>
+</span><span id="TSQL.Parser-539"><a href="#TSQL.Parser-539"><span class="linenos">539</span></a>
+</span><span id="TSQL.Parser-540"><a href="#TSQL.Parser-540"><span class="linenos">540</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_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="TSQL.Parser-541"><a href="#TSQL.Parser-541"><span class="linenos">541</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="TSQL.Parser-542"><a href="#TSQL.Parser-542"><span class="linenos">542</span></a> <span class="k">if</span> <span class="n">is_global</span><span class="p">:</span>
+</span><span id="TSQL.Parser-543"><a href="#TSQL.Parser-543"><span class="linenos">543</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="TSQL.Parser-544"><a href="#TSQL.Parser-544"><span class="linenos">544</span></a> <span class="k">elif</span> <span class="n">is_temporary</span><span class="p">:</span>
+</span><span id="TSQL.Parser-545"><a href="#TSQL.Parser-545"><span class="linenos">545</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="TSQL.Parser-546"><a href="#TSQL.Parser-546"><span class="linenos">546</span></a>
+</span><span id="TSQL.Parser-547"><a href="#TSQL.Parser-547"><span class="linenos">547</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="TSQL.Parser-548"><a href="#TSQL.Parser-548"><span class="linenos">548</span></a>
+</span><span id="TSQL.Parser-549"><a href="#TSQL.Parser-549"><span class="linenos">549</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">exp</span><span class="o">.</span><span class="n">Create</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="TSQL.Parser-550"><a href="#TSQL.Parser-550"><span class="linenos">550</span></a> <span class="n">create</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">()</span>
+</span><span id="TSQL.Parser-551"><a href="#TSQL.Parser-551"><span class="linenos">551</span></a>
+</span><span id="TSQL.Parser-552"><a href="#TSQL.Parser-552"><span class="linenos">552</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">create</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">):</span>
+</span><span id="TSQL.Parser-553"><a href="#TSQL.Parser-553"><span class="linenos">553</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">create</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">create</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 class="k">else</span> <span class="n">create</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TSQL.Parser-554"><a href="#TSQL.Parser-554"><span class="linenos">554</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <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;temporary&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Parser-555"><a href="#TSQL.Parser-555"><span class="linenos">555</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create</span><span class="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="TSQL.Parser-556"><a href="#TSQL.Parser-556"><span class="linenos">556</span></a> <span class="n">create</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;properties&quot;</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="p">[]))</span>
+</span><span id="TSQL.Parser-557"><a href="#TSQL.Parser-557"><span class="linenos">557</span></a>
+</span><span id="TSQL.Parser-558"><a href="#TSQL.Parser-558"><span class="linenos">558</span></a> <span class="n">create</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;properties&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="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">())</span>
</span><span id="TSQL.Parser-559"><a href="#TSQL.Parser-559"><span class="linenos">559</span></a>
-</span><span id="TSQL.Parser-560"><a href="#TSQL.Parser-560"><span class="linenos">560</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
-</span><span id="TSQL.Parser-561"><a href="#TSQL.Parser-561"><span class="linenos">561</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="TSQL.Parser-562"><a href="#TSQL.Parser-562"><span class="linenos">562</span></a>
-</span><span id="TSQL.Parser-563"><a href="#TSQL.Parser-563"><span class="linenos">563</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="TSQL.Parser-564"><a href="#TSQL.Parser-564"><span class="linenos">564</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TSQL.Parser-565"><a href="#TSQL.Parser-565"><span class="linenos">565</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="TSQL.Parser-566"><a href="#TSQL.Parser-566"><span class="linenos">566</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="TSQL.Parser-567"><a href="#TSQL.Parser-567"><span class="linenos">567</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="TSQL.Parser-568"><a href="#TSQL.Parser-568"><span class="linenos">568</span></a> <span class="n">is_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">HASH</span><span class="p">)</span>
-</span><span id="TSQL.Parser-569"><a href="#TSQL.Parser-569"><span class="linenos">569</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="n">is_temporary</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">HASH</span><span class="p">)</span>
+</span><span id="TSQL.Parser-560"><a href="#TSQL.Parser-560"><span class="linenos">560</span></a> <span class="k">return</span> <span class="n">create</span>
+</span><span id="TSQL.Parser-561"><a href="#TSQL.Parser-561"><span class="linenos">561</span></a>
+</span><span id="TSQL.Parser-562"><a href="#TSQL.Parser-562"><span class="linenos">562</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="TSQL.Parser-563"><a href="#TSQL.Parser-563"><span class="linenos">563</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="TSQL.Parser-564"><a href="#TSQL.Parser-564"><span class="linenos">564</span></a>
+</span><span id="TSQL.Parser-565"><a href="#TSQL.Parser-565"><span class="linenos">565</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OBJECT_ID&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Parser-566"><a href="#TSQL.Parser-566"><span class="linenos">566</span></a> <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_string</span><span class="p">)</span>
+</span><span id="TSQL.Parser-567"><a href="#TSQL.Parser-567"><span class="linenos">567</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IS&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">):</span>
+</span><span id="TSQL.Parser-568"><a href="#TSQL.Parser-568"><span class="linenos">568</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="TSQL.Parser-569"><a href="#TSQL.Parser-569"><span class="linenos">569</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="TSQL.Parser-570"><a href="#TSQL.Parser-570"><span class="linenos">570</span></a>
-</span><span id="TSQL.Parser-571"><a href="#TSQL.Parser-571"><span class="linenos">571</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_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="TSQL.Parser-572"><a href="#TSQL.Parser-572"><span class="linenos">572</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="TSQL.Parser-573"><a href="#TSQL.Parser-573"><span class="linenos">573</span></a> <span class="k">if</span> <span class="n">is_global</span><span class="p">:</span>
-</span><span id="TSQL.Parser-574"><a href="#TSQL.Parser-574"><span class="linenos">574</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="TSQL.Parser-575"><a href="#TSQL.Parser-575"><span class="linenos">575</span></a> <span class="k">elif</span> <span class="n">is_temporary</span><span class="p">:</span>
-</span><span id="TSQL.Parser-576"><a href="#TSQL.Parser-576"><span class="linenos">576</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="TSQL.Parser-577"><a href="#TSQL.Parser-577"><span class="linenos">577</span></a>
-</span><span id="TSQL.Parser-578"><a href="#TSQL.Parser-578"><span class="linenos">578</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="TSQL.Parser-579"><a href="#TSQL.Parser-579"><span class="linenos">579</span></a>
-</span><span id="TSQL.Parser-580"><a href="#TSQL.Parser-580"><span class="linenos">580</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">exp</span><span class="o">.</span><span class="n">Create</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="TSQL.Parser-581"><a href="#TSQL.Parser-581"><span class="linenos">581</span></a> <span class="n">create</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">()</span>
-</span><span id="TSQL.Parser-582"><a href="#TSQL.Parser-582"><span class="linenos">582</span></a>
-</span><span id="TSQL.Parser-583"><a href="#TSQL.Parser-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">create</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">):</span>
-</span><span id="TSQL.Parser-584"><a href="#TSQL.Parser-584"><span class="linenos">584</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">create</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">create</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 class="k">else</span> <span class="n">create</span><span class="o">.</span><span class="n">this</span>
-</span><span id="TSQL.Parser-585"><a href="#TSQL.Parser-585"><span class="linenos">585</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <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;temporary&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-586"><a href="#TSQL.Parser-586"><span class="linenos">586</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create</span><span class="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="TSQL.Parser-587"><a href="#TSQL.Parser-587"><span class="linenos">587</span></a> <span class="n">create</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;properties&quot;</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="p">[]))</span>
-</span><span id="TSQL.Parser-588"><a href="#TSQL.Parser-588"><span class="linenos">588</span></a>
-</span><span id="TSQL.Parser-589"><a href="#TSQL.Parser-589"><span class="linenos">589</span></a> <span class="n">create</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;properties&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="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">())</span>
-</span><span id="TSQL.Parser-590"><a href="#TSQL.Parser-590"><span class="linenos">590</span></a>
-</span><span id="TSQL.Parser-591"><a href="#TSQL.Parser-591"><span class="linenos">591</span></a> <span class="k">return</span> <span class="n">create</span>
+</span><span id="TSQL.Parser-571"><a href="#TSQL.Parser-571"><span class="linenos">571</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">()</span>
+</span><span id="TSQL.Parser-572"><a href="#TSQL.Parser-572"><span class="linenos">572</span></a>
+</span><span id="TSQL.Parser-573"><a href="#TSQL.Parser-573"><span class="linenos">573</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="TSQL.Parser-574"><a href="#TSQL.Parser-574"><span class="linenos">574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL.Parser-575"><a href="#TSQL.Parser-575"><span class="linenos">575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="TSQL.Parser-576"><a href="#TSQL.Parser-576"><span class="linenos">576</span></a> <span class="n">this</span><span class="o">=</span><span class="kc">None</span>
+</span><span id="TSQL.Parser-577"><a href="#TSQL.Parser-577"><span class="linenos">577</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="p">{</span><span class="s2">&quot;CLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">}</span>
+</span><span id="TSQL.Parser-578"><a href="#TSQL.Parser-578"><span class="linenos">578</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
+</span><span id="TSQL.Parser-579"><a href="#TSQL.Parser-579"><span class="linenos">579</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2376,7 +2427,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="TSQL.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;CHARINDEX&#39;: &lt;function <a href="#TSQL.Parser">TSQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEADD&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATENAME&#39;: &lt;function _format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;DATEPART&#39;: &lt;function _format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;EOMONTH&#39;: &lt;function _parse_eomonth&gt;, &#39;FORMAT&#39;: &lt;function _parse_format&gt;, &#39;GETDATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;HASHBYTES&#39;: &lt;function _parse_hashbytes&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;ISNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;JSON_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;REPLICATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;SQUARE&#39;: &lt;function <a href="#TSQL.Parser">TSQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;SYSDATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;SUSER_NAME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;SUSER_SNAME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;SYSTEM_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function _parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;CHARINDEX&#39;: &lt;function <a href="#TSQL.Parser">TSQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEADD&#39;: &lt;function parse_date_delta.&lt;locals&gt;.inner_func&gt;, &#39;DATENAME&#39;: &lt;function _format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;DATEPART&#39;: &lt;function _format_time_lambda.&lt;locals&gt;._format_time&gt;, &#39;EOMONTH&#39;: &lt;function _parse_eomonth&gt;, &#39;FORMAT&#39;: &lt;function _parse_format&gt;, &#39;GETDATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;HASHBYTES&#39;: &lt;function _parse_hashbytes&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;ISNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;JSON_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;REPLICATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;SQUARE&#39;: &lt;function <a href="#TSQL.Parser">TSQL.Parser</a>.&lt;lambda&gt;&gt;, &#39;SYSDATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;SUSER_NAME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;SUSER_SNAME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;SYSTEM_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;}</span>
</div>
@@ -2388,7 +2439,7 @@ Default: 3</li>
<div id="TSQL.Parser.JOIN_HINTS" class="classattr">
<div class="attr variable">
<span class="name">JOIN_HINTS</span> =
-<span class="default_value">{&#39;MERGE&#39;, &#39;LOOP&#39;, &#39;REMOTE&#39;, &#39;HASH&#39;}</span>
+<span class="default_value">{&#39;HASH&#39;, &#39;MERGE&#39;, &#39;LOOP&#39;, &#39;REMOTE&#39;}</span>
</div>
@@ -2400,7 +2451,7 @@ Default: 3</li>
<div id="TSQL.Parser.VAR_LENGTH_DATATYPES" class="classattr">
<div class="attr variable">
<span class="name">VAR_LENGTH_DATATYPES</span> =
-<span class="default_value">{&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;}</span>
+<span class="default_value">{&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;}</span>
</div>
@@ -2413,7 +2464,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RETURNS_TABLE_TOKENS</span> =
<input id="TSQL.Parser.RETURNS_TABLE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Parser.RETURNS_TABLE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Parser.RETURNS_TABLE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -2426,7 +2477,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">STATEMENT_PARSERS</span> =
<input id="TSQL.Parser.STATEMENT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FROM: &#39;FROM&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;: &lt;function <a href="#TSQL.Parser">TSQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;: &lt;function <a href="#TSQL.Parser">TSQL.Parser</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2471,6 +2522,30 @@ Default: 3</li>
</div>
+ <div id="TSQL.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="classattr">
+ <div class="attr variable">
+ <span class="name">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#TSQL.Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD"></a>
+
+
+
+ </div>
+ <div id="TSQL.Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="#TSQL.Tokenizer">sqlglot.dialects.tsql.TSQL.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TSQL.Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="TSQL.Parser.NULL_ORDERING" class="classattr">
<div class="attr variable">
<span class="name">NULL_ORDERING</span><span class="annotation">: str</span> =
@@ -2552,6 +2627,7 @@ Default: 3</li>
<div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
<dd id="TSQL.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
<dd id="TSQL.Parser.NO_PAREN_FUNCTIONS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a></dd>
+ <dd id="TSQL.Parser.STRUCT_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a></dd>
<dd id="TSQL.Parser.NESTED_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a></dd>
<dd id="TSQL.Parser.ENUM_TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a></dd>
<dd id="TSQL.Parser.TYPE_TOKENS" class="variable"><a href="../parser.html#Parser.TYPE_TOKENS">TYPE_TOKENS</a></dd>
@@ -2572,6 +2648,7 @@ Default: 3</li>
<dd id="TSQL.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
<dd id="TSQL.Parser.TERM" class="variable"><a href="../parser.html#Parser.TERM">TERM</a></dd>
<dd id="TSQL.Parser.FACTOR" class="variable"><a href="../parser.html#Parser.FACTOR">FACTOR</a></dd>
+ <dd id="TSQL.Parser.TIMES" class="variable"><a href="../parser.html#Parser.TIMES">TIMES</a></dd>
<dd id="TSQL.Parser.TIMESTAMPS" class="variable"><a href="../parser.html#Parser.TIMESTAMPS">TIMESTAMPS</a></dd>
<dd id="TSQL.Parser.SET_OPERATIONS" class="variable"><a href="../parser.html#Parser.SET_OPERATIONS">SET_OPERATIONS</a></dd>
<dd id="TSQL.Parser.JOIN_METHODS" class="variable"><a href="../parser.html#Parser.JOIN_METHODS">JOIN_METHODS</a></dd>
@@ -2589,6 +2666,7 @@ Default: 3</li>
<dd id="TSQL.Parser.ALTER_PARSERS" class="variable"><a href="../parser.html#Parser.ALTER_PARSERS">ALTER_PARSERS</a></dd>
<dd id="TSQL.Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="variable"><a href="../parser.html#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a></dd>
<dd id="TSQL.Parser.NO_PAREN_FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a></dd>
+ <dd id="TSQL.Parser.INVALID_FUNC_NAME_TOKENS" class="variable"><a href="../parser.html#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a></dd>
<dd id="TSQL.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="variable"><a href="../parser.html#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a></dd>
<dd id="TSQL.Parser.FUNCTION_PARSERS" class="variable"><a href="../parser.html#Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a></dd>
<dd id="TSQL.Parser.QUERY_MODIFIER_PARSERS" class="variable"><a href="../parser.html#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a></dd>
@@ -2607,9 +2685,11 @@ Default: 3</li>
<dd id="TSQL.Parser.WINDOW_BEFORE_PAREN_TOKENS" class="variable"><a href="../parser.html#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a></dd>
<dd id="TSQL.Parser.WINDOW_SIDES" class="variable"><a href="../parser.html#Parser.WINDOW_SIDES">WINDOW_SIDES</a></dd>
<dd id="TSQL.Parser.ADD_CONSTRAINT_TOKENS" class="variable"><a href="../parser.html#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a></dd>
+ <dd id="TSQL.Parser.DISTINCT_TOKENS" class="variable"><a href="../parser.html#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a></dd>
<dd id="TSQL.Parser.STRICT_CAST" class="variable"><a href="../parser.html#Parser.STRICT_CAST">STRICT_CAST</a></dd>
<dd id="TSQL.Parser.PREFIXED_PIVOT_COLUMNS" class="variable"><a href="../parser.html#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a></dd>
<dd id="TSQL.Parser.IDENTIFY_PIVOT_STRINGS" class="variable"><a href="../parser.html#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a></dd>
+ <dd id="TSQL.Parser.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="../parser.html#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
<dd id="TSQL.Parser.INDEX_OFFSET" class="variable"><a href="../parser.html#Parser.INDEX_OFFSET">INDEX_OFFSET</a></dd>
<dd id="TSQL.Parser.UNNEST_COLUMN_ONLY" class="variable"><a href="../parser.html#Parser.UNNEST_COLUMN_ONLY">UNNEST_COLUMN_ONLY</a></dd>
<dd id="TSQL.Parser.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../parser.html#Parser.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
@@ -2644,130 +2724,166 @@ Default: 3</li>
</div>
<a class="headerlink" href="#TSQL.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator-593"><a href="#TSQL.Generator-593"><span class="linenos">593</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="TSQL.Generator-594"><a href="#TSQL.Generator-594"><span class="linenos">594</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL.Generator-595"><a href="#TSQL.Generator-595"><span class="linenos">595</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL.Generator-596"><a href="#TSQL.Generator-596"><span class="linenos">596</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL.Generator-597"><a href="#TSQL.Generator-597"><span class="linenos">597</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">False</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator-581"><a href="#TSQL.Generator-581"><span class="linenos">581</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="TSQL.Generator-582"><a href="#TSQL.Generator-582"><span class="linenos">582</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Generator-583"><a href="#TSQL.Generator-583"><span class="linenos">583</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Generator-584"><a href="#TSQL.Generator-584"><span class="linenos">584</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Generator-585"><a href="#TSQL.Generator-585"><span class="linenos">585</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Generator-586"><a href="#TSQL.Generator-586"><span class="linenos">586</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Generator-587"><a href="#TSQL.Generator-587"><span class="linenos">587</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Generator-588"><a href="#TSQL.Generator-588"><span class="linenos">588</span></a>
+</span><span id="TSQL.Generator-589"><a href="#TSQL.Generator-589"><span class="linenos">589</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-590"><a href="#TSQL.Generator-590"><span class="linenos">590</span></a> <span 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="TSQL.Generator-591"><a href="#TSQL.Generator-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-592"><a href="#TSQL.Generator-592"><span class="linenos">592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-593"><a href="#TSQL.Generator-593"><span class="linenos">593</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-594"><a href="#TSQL.Generator-594"><span class="linenos">594</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-595"><a href="#TSQL.Generator-595"><span class="linenos">595</span></a> <span class="n">exp</span><span 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;DATETIMEOFFSET&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-596"><a href="#TSQL.Generator-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-597"><a href="#TSQL.Generator-597"><span class="linenos">597</span></a> <span class="p">}</span>
</span><span id="TSQL.Generator-598"><a href="#TSQL.Generator-598"><span class="linenos">598</span></a>
-</span><span id="TSQL.Generator-599"><a href="#TSQL.Generator-599"><span class="linenos">599</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Generator-600"><a href="#TSQL.Generator-600"><span class="linenos">600</span></a> <span 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="TSQL.Generator-601"><a href="#TSQL.Generator-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-602"><a href="#TSQL.Generator-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-603"><a href="#TSQL.Generator-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-604"><a href="#TSQL.Generator-604"><span class="linenos">604</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-605"><a href="#TSQL.Generator-605"><span class="linenos">605</span></a> <span class="n">exp</span><span 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;DATETIMEOFFSET&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-606"><a href="#TSQL.Generator-606"><span class="linenos">606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-607"><a href="#TSQL.Generator-607"><span class="linenos">607</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-608"><a href="#TSQL.Generator-608"><span class="linenos">608</span></a>
-</span><span id="TSQL.Generator-609"><a href="#TSQL.Generator-609"><span class="linenos">609</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Generator-610"><a href="#TSQL.Generator-610"><span class="linenos">610</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="TSQL.Generator-611"><a href="#TSQL.Generator-611"><span class="linenos">611</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-612"><a href="#TSQL.Generator-612"><span class="linenos">612</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-613"><a href="#TSQL.Generator-613"><span class="linenos">613</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-614"><a href="#TSQL.Generator-614"><span class="linenos">614</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-615"><a href="#TSQL.Generator-615"><span class="linenos">615</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEPART&quot;</span><span class="p">),</span>
-</span><span id="TSQL.Generator-616"><a href="#TSQL.Generator-616"><span class="linenos">616</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-617"><a href="#TSQL.Generator-617"><span class="linenos">617</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-618"><a href="#TSQL.Generator-618"><span class="linenos">618</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-619"><a href="#TSQL.Generator-619"><span class="linenos">619</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-620"><a href="#TSQL.Generator-620"><span class="linenos">620</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-621"><a href="#TSQL.Generator-621"><span class="linenos">621</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-622"><a href="#TSQL.Generator-622"><span class="linenos">622</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-623"><a href="#TSQL.Generator-623"><span class="linenos">623</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-624"><a href="#TSQL.Generator-624"><span class="linenos">624</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-625"><a href="#TSQL.Generator-625"><span class="linenos">625</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-626"><a href="#TSQL.Generator-626"><span class="linenos">626</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="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><span id="TSQL.Generator-627"><a href="#TSQL.Generator-627"><span class="linenos">627</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="TSQL.Generator-628"><a href="#TSQL.Generator-628"><span class="linenos">628</span></a> <span class="p">),</span>
-</span><span id="TSQL.Generator-629"><a href="#TSQL.Generator-629"><span class="linenos">629</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span 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;&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-630"><a href="#TSQL.Generator-630"><span class="linenos">630</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="TSQL.Generator-631"><a href="#TSQL.Generator-631"><span class="linenos">631</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-632"><a href="#TSQL.Generator-632"><span class="linenos">632</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-633"><a href="#TSQL.Generator-633"><span class="linenos">633</span></a>
-</span><span id="TSQL.Generator-634"><a href="#TSQL.Generator-634"><span class="linenos">634</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-635"><a href="#TSQL.Generator-635"><span class="linenos">635</span></a>
-</span><span id="TSQL.Generator-636"><a href="#TSQL.Generator-636"><span class="linenos">636</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Generator-637"><a href="#TSQL.Generator-637"><span class="linenos">637</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
-</span><span id="TSQL.Generator-638"><a href="#TSQL.Generator-638"><span class="linenos">638</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-639"><a href="#TSQL.Generator-639"><span class="linenos">639</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-640"><a href="#TSQL.Generator-640"><span class="linenos">640</span></a>
-</span><span id="TSQL.Generator-641"><a href="#TSQL.Generator-641"><span class="linenos">641</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="TSQL.Generator-642"><a href="#TSQL.Generator-642"><span class="linenos">642</span></a>
-</span><span id="TSQL.Generator-643"><a href="#TSQL.Generator-643"><span class="linenos">643</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-644"><a href="#TSQL.Generator-644"><span class="linenos">644</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-645"><a href="#TSQL.Generator-645"><span class="linenos">645</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-599"><a href="#TSQL.Generator-599"><span class="linenos">599</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-600"><a href="#TSQL.Generator-600"><span class="linenos">600</span></a> <span 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="TSQL.Generator-601"><a href="#TSQL.Generator-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-602"><a href="#TSQL.Generator-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</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;IDENTITY&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-603"><a href="#TSQL.Generator-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-604"><a href="#TSQL.Generator-604"><span class="linenos">604</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-605"><a href="#TSQL.Generator-605"><span class="linenos">605</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-606"><a href="#TSQL.Generator-606"><span class="linenos">606</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-607"><a href="#TSQL.Generator-607"><span class="linenos">607</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEPART&quot;</span><span class="p">),</span>
+</span><span id="TSQL.Generator-608"><a href="#TSQL.Generator-608"><span class="linenos">608</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-609"><a href="#TSQL.Generator-609"><span class="linenos">609</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-610"><a href="#TSQL.Generator-610"><span class="linenos">610</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-611"><a href="#TSQL.Generator-611"><span class="linenos">611</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-612"><a href="#TSQL.Generator-612"><span class="linenos">612</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-613"><a href="#TSQL.Generator-613"><span class="linenos">613</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-614"><a href="#TSQL.Generator-614"><span class="linenos">614</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-615"><a href="#TSQL.Generator-615"><span class="linenos">615</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-616"><a href="#TSQL.Generator-616"><span class="linenos">616</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-617"><a href="#TSQL.Generator-617"><span class="linenos">617</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-618"><a href="#TSQL.Generator-618"><span class="linenos">618</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="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><span id="TSQL.Generator-619"><a href="#TSQL.Generator-619"><span class="linenos">619</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="TSQL.Generator-620"><a href="#TSQL.Generator-620"><span class="linenos">620</span></a> <span class="p">),</span>
+</span><span id="TSQL.Generator-621"><a href="#TSQL.Generator-621"><span class="linenos">621</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span 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;&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-622"><a href="#TSQL.Generator-622"><span class="linenos">622</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="TSQL.Generator-623"><a href="#TSQL.Generator-623"><span class="linenos">623</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-624"><a href="#TSQL.Generator-624"><span class="linenos">624</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-625"><a href="#TSQL.Generator-625"><span class="linenos">625</span></a>
+</span><span id="TSQL.Generator-626"><a href="#TSQL.Generator-626"><span class="linenos">626</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-627"><a href="#TSQL.Generator-627"><span class="linenos">627</span></a>
+</span><span id="TSQL.Generator-628"><a href="#TSQL.Generator-628"><span class="linenos">628</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-629"><a href="#TSQL.Generator-629"><span class="linenos">629</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
+</span><span id="TSQL.Generator-630"><a href="#TSQL.Generator-630"><span class="linenos">630</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-631"><a href="#TSQL.Generator-631"><span class="linenos">631</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-632"><a href="#TSQL.Generator-632"><span class="linenos">632</span></a>
+</span><span id="TSQL.Generator-633"><a href="#TSQL.Generator-633"><span class="linenos">633</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL.Generator-634"><a href="#TSQL.Generator-634"><span class="linenos">634</span></a>
+</span><span id="TSQL.Generator-635"><a href="#TSQL.Generator-635"><span class="linenos">635</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-636"><a href="#TSQL.Generator-636"><span class="linenos">636</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-637"><a href="#TSQL.Generator-637"><span class="linenos">637</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-638"><a href="#TSQL.Generator-638"><span class="linenos">638</span></a>
+</span><span id="TSQL.Generator-639"><a href="#TSQL.Generator-639"><span class="linenos">639</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="TSQL.Generator-640"><a href="#TSQL.Generator-640"><span class="linenos">640</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="TSQL.Generator-641"><a href="#TSQL.Generator-641"><span class="linenos">641</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="TSQL.Generator-642"><a href="#TSQL.Generator-642"><span class="linenos">642</span></a> <span class="p">):</span>
+</span><span id="TSQL.Generator-643"><a href="#TSQL.Generator-643"><span class="linenos">643</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-644"><a href="#TSQL.Generator-644"><span class="linenos">644</span></a>
+</span><span id="TSQL.Generator-645"><a href="#TSQL.Generator-645"><span class="linenos">645</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="TSQL.Generator-646"><a href="#TSQL.Generator-646"><span class="linenos">646</span></a>
-</span><span id="TSQL.Generator-647"><a href="#TSQL.Generator-647"><span class="linenos">647</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="TSQL.Generator-648"><a href="#TSQL.Generator-648"><span class="linenos">648</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="TSQL.Generator-649"><a href="#TSQL.Generator-649"><span class="linenos">649</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="TSQL.Generator-650"><a href="#TSQL.Generator-650"><span class="linenos">650</span></a> <span class="p">):</span>
-</span><span id="TSQL.Generator-651"><a href="#TSQL.Generator-651"><span class="linenos">651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-647"><a href="#TSQL.Generator-647"><span class="linenos">647</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-648"><a href="#TSQL.Generator-648"><span class="linenos">648</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="TSQL.Generator-649"><a href="#TSQL.Generator-649"><span class="linenos">649</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="TSQL.Generator-650"><a href="#TSQL.Generator-650"><span class="linenos">650</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="TSQL.Generator-651"><a href="#TSQL.Generator-651"><span class="linenos">651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="TSQL.Generator-652"><a href="#TSQL.Generator-652"><span class="linenos">652</span></a>
-</span><span id="TSQL.Generator-653"><a href="#TSQL.Generator-653"><span class="linenos">653</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="TSQL.Generator-654"><a href="#TSQL.Generator-654"><span class="linenos">654</span></a>
-</span><span id="TSQL.Generator-655"><a href="#TSQL.Generator-655"><span class="linenos">655</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-656"><a href="#TSQL.Generator-656"><span class="linenos">656</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-657"><a href="#TSQL.Generator-657"><span class="linenos">657</span></a>
-</span><span id="TSQL.Generator-658"><a href="#TSQL.Generator-658"><span class="linenos">658</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-659"><a href="#TSQL.Generator-659"><span class="linenos">659</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-660"><a href="#TSQL.Generator-660"><span class="linenos">660</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-661"><a href="#TSQL.Generator-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL.Generator-662"><a href="#TSQL.Generator-662"><span class="linenos">662</span></a>
-</span><span id="TSQL.Generator-663"><a href="#TSQL.Generator-663"><span class="linenos">663</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-664"><a href="#TSQL.Generator-664"><span class="linenos">664</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-665"><a href="#TSQL.Generator-665"><span class="linenos">665</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-666"><a href="#TSQL.Generator-666"><span class="linenos">666</span></a>
-</span><span id="TSQL.Generator-667"><a href="#TSQL.Generator-667"><span class="linenos">667</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-668"><a href="#TSQL.Generator-668"><span class="linenos">668</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-669"><a href="#TSQL.Generator-669"><span class="linenos">669</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-670"><a href="#TSQL.Generator-670"><span class="linenos">670</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-671"><a href="#TSQL.Generator-671"><span class="linenos">671</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-672"><a href="#TSQL.Generator-672"><span class="linenos">672</span></a>
-</span><span id="TSQL.Generator-673"><a href="#TSQL.Generator-673"><span class="linenos">673</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-674"><a href="#TSQL.Generator-674"><span class="linenos">674</span></a>
-</span><span id="TSQL.Generator-675"><a href="#TSQL.Generator-675"><span class="linenos">675</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-676"><a href="#TSQL.Generator-676"><span class="linenos">676</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-677"><a href="#TSQL.Generator-677"><span class="linenos">677</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-678"><a href="#TSQL.Generator-678"><span class="linenos">678</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-679"><a href="#TSQL.Generator-679"><span class="linenos">679</span></a>
-</span><span id="TSQL.Generator-680"><a href="#TSQL.Generator-680"><span class="linenos">680</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-681"><a href="#TSQL.Generator-681"><span class="linenos">681</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="TSQL.Generator-682"><a href="#TSQL.Generator-682"><span class="linenos">682</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator-683"><a href="#TSQL.Generator-683"><span class="linenos">683</span></a> <span class="k">return</span> <span class="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;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-684"><a href="#TSQL.Generator-684"><span class="linenos">684</span></a>
-</span><span id="TSQL.Generator-685"><a href="#TSQL.Generator-685"><span class="linenos">685</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="TSQL.Generator-686"><a href="#TSQL.Generator-686"><span class="linenos">686</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-687"><a href="#TSQL.Generator-687"><span class="linenos">687</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="TSQL.Generator-688"><a href="#TSQL.Generator-688"><span class="linenos">688</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-689"><a href="#TSQL.Generator-689"><span class="linenos">689</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator-690"><a href="#TSQL.Generator-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-691"><a href="#TSQL.Generator-691"><span class="linenos">691</span></a>
-</span><span id="TSQL.Generator-692"><a href="#TSQL.Generator-692"><span class="linenos">692</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="TSQL.Generator-693"><a href="#TSQL.Generator-693"><span class="linenos">693</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-694"><a href="#TSQL.Generator-694"><span class="linenos">694</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="TSQL.Generator-695"><a href="#TSQL.Generator-695"><span class="linenos">695</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-696"><a href="#TSQL.Generator-696"><span class="linenos">696</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="TSQL.Generator-697"><a href="#TSQL.Generator-697"><span class="linenos">697</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL.Generator-698"><a href="#TSQL.Generator-698"><span class="linenos">698</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="TSQL.Generator-699"><a href="#TSQL.Generator-699"><span class="linenos">699</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator-700"><a href="#TSQL.Generator-700"><span class="linenos">700</span></a> <span class="p">)</span>
-</span><span id="TSQL.Generator-701"><a href="#TSQL.Generator-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-653"><a href="#TSQL.Generator-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">exists</span><span class="p">:</span>
+</span><span id="TSQL.Generator-654"><a href="#TSQL.Generator-654"><span class="linenos">654</span></a> <span class="n">table</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">Table</span><span class="p">)</span>
+</span><span id="TSQL.Generator-655"><a href="#TSQL.Generator-655"><span class="linenos">655</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="TSQL.Generator-656"><a href="#TSQL.Generator-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-657"><a href="#TSQL.Generator-657"><span class="linenos">657</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator-658"><a href="#TSQL.Generator-658"><span class="linenos">658</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-659"><a href="#TSQL.Generator-659"><span class="linenos">659</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator-660"><a href="#TSQL.Generator-660"><span class="linenos">660</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-661"><a href="#TSQL.Generator-661"><span class="linenos">661</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><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">this</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="TSQL.Generator-662"><a href="#TSQL.Generator-662"><span class="linenos">662</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) AND name = </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator-663"><a href="#TSQL.Generator-663"><span class="linenos">663</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator-664"><a href="#TSQL.Generator-664"><span class="linenos">664</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;CREATE OR REPLACE &quot;</span><span class="p">,</span> <span class="s2">&quot;CREATE OR ALTER &quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="TSQL.Generator-665"><a href="#TSQL.Generator-665"><span class="linenos">665</span></a>
+</span><span id="TSQL.Generator-666"><a href="#TSQL.Generator-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="TSQL.Generator-667"><a href="#TSQL.Generator-667"><span class="linenos">667</span></a>
+</span><span id="TSQL.Generator-668"><a href="#TSQL.Generator-668"><span class="linenos">668</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-669"><a href="#TSQL.Generator-669"><span class="linenos">669</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-670"><a href="#TSQL.Generator-670"><span class="linenos">670</span></a>
+</span><span id="TSQL.Generator-671"><a href="#TSQL.Generator-671"><span class="linenos">671</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-672"><a href="#TSQL.Generator-672"><span class="linenos">672</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span> <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;TIMESTAMP&quot;</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="TSQL.Generator-673"><a href="#TSQL.Generator-673"><span class="linenos">673</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-674"><a href="#TSQL.Generator-674"><span class="linenos">674</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="TSQL.Generator-675"><a href="#TSQL.Generator-675"><span class="linenos">675</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="TSQL.Generator-676"><a href="#TSQL.Generator-676"><span class="linenos">676</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;FROM&quot;</span><span class="p">,</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator-677"><a href="#TSQL.Generator-677"><span class="linenos">677</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="TSQL.Generator-678"><a href="#TSQL.Generator-678"><span class="linenos">678</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;TO&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span> <span class="k">else</span> <span class="s2">&quot;AND&quot;</span>
+</span><span id="TSQL.Generator-679"><a href="#TSQL.Generator-679"><span class="linenos">679</span></a> <span class="n">expr_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">sql</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="w"> </span><span class="mi">0</span><span class="p">))</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-680"><a href="#TSQL.Generator-680"><span class="linenos">680</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL.Generator-681"><a href="#TSQL.Generator-681"><span class="linenos">681</span></a> <span class="n">expr_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">expr</span><span class="p">)</span>
+</span><span id="TSQL.Generator-682"><a href="#TSQL.Generator-682"><span class="linenos">682</span></a>
+</span><span id="TSQL.Generator-683"><a href="#TSQL.Generator-683"><span class="linenos">683</span></a> <span class="n">expr_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expr_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator-684"><a href="#TSQL.Generator-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-685"><a href="#TSQL.Generator-685"><span class="linenos">685</span></a>
+</span><span id="TSQL.Generator-686"><a href="#TSQL.Generator-686"><span class="linenos">686</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-687"><a href="#TSQL.Generator-687"><span class="linenos">687</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-688"><a href="#TSQL.Generator-688"><span class="linenos">688</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-689"><a href="#TSQL.Generator-689"><span class="linenos">689</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-690"><a href="#TSQL.Generator-690"><span class="linenos">690</span></a>
+</span><span id="TSQL.Generator-691"><a href="#TSQL.Generator-691"><span class="linenos">691</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-692"><a href="#TSQL.Generator-692"><span class="linenos">692</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="TSQL.Generator-693"><a href="#TSQL.Generator-693"><span class="linenos">693</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator-694"><a href="#TSQL.Generator-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-695"><a href="#TSQL.Generator-695"><span class="linenos">695</span></a>
+</span><span id="TSQL.Generator-696"><a href="#TSQL.Generator-696"><span class="linenos">696</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="TSQL.Generator-697"><a href="#TSQL.Generator-697"><span class="linenos">697</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-698"><a href="#TSQL.Generator-698"><span class="linenos">698</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="TSQL.Generator-699"><a href="#TSQL.Generator-699"><span class="linenos">699</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-700"><a href="#TSQL.Generator-700"><span class="linenos">700</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator-701"><a href="#TSQL.Generator-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="TSQL.Generator-702"><a href="#TSQL.Generator-702"><span class="linenos">702</span></a>
-</span><span id="TSQL.Generator-703"><a href="#TSQL.Generator-703"><span class="linenos">703</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="TSQL.Generator-703"><a href="#TSQL.Generator-703"><span class="linenos">703</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="TSQL.Generator-704"><a href="#TSQL.Generator-704"><span class="linenos">704</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-705"><a href="#TSQL.Generator-705"><span class="linenos">705</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="TSQL.Generator-706"><a href="#TSQL.Generator-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-707"><a href="#TSQL.Generator-707"><span class="linenos">707</span></a>
-</span><span id="TSQL.Generator-708"><a href="#TSQL.Generator-708"><span class="linenos">708</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-709"><a href="#TSQL.Generator-709"><span class="linenos">709</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TSQL.Generator-710"><a href="#TSQL.Generator-710"><span class="linenos">710</span></a>
-</span><span id="TSQL.Generator-711"><a href="#TSQL.Generator-711"><span class="linenos">711</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;global&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Generator-712"><a href="#TSQL.Generator-712"><span class="linenos">712</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-713"><a href="#TSQL.Generator-713"><span class="linenos">713</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Generator-714"><a href="#TSQL.Generator-714"><span class="linenos">714</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-715"><a href="#TSQL.Generator-715"><span class="linenos">715</span></a>
-</span><span id="TSQL.Generator-716"><a href="#TSQL.Generator-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="TSQL.Generator-706"><a href="#TSQL.Generator-706"><span class="linenos">706</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-707"><a href="#TSQL.Generator-707"><span class="linenos">707</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="TSQL.Generator-708"><a href="#TSQL.Generator-708"><span class="linenos">708</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL.Generator-709"><a href="#TSQL.Generator-709"><span class="linenos">709</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="TSQL.Generator-710"><a href="#TSQL.Generator-710"><span class="linenos">710</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator-711"><a href="#TSQL.Generator-711"><span class="linenos">711</span></a> <span class="p">)</span>
+</span><span id="TSQL.Generator-712"><a href="#TSQL.Generator-712"><span class="linenos">712</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-713"><a href="#TSQL.Generator-713"><span class="linenos">713</span></a>
+</span><span id="TSQL.Generator-714"><a href="#TSQL.Generator-714"><span class="linenos">714</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="TSQL.Generator-715"><a href="#TSQL.Generator-715"><span class="linenos">715</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-716"><a href="#TSQL.Generator-716"><span class="linenos">716</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="TSQL.Generator-717"><a href="#TSQL.Generator-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-718"><a href="#TSQL.Generator-718"><span class="linenos">718</span></a>
+</span><span id="TSQL.Generator-719"><a href="#TSQL.Generator-719"><span class="linenos">719</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-720"><a href="#TSQL.Generator-720"><span class="linenos">720</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TSQL.Generator-721"><a href="#TSQL.Generator-721"><span class="linenos">721</span></a>
+</span><span id="TSQL.Generator-722"><a href="#TSQL.Generator-722"><span class="linenos">722</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;global&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator-723"><a href="#TSQL.Generator-723"><span class="linenos">723</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-724"><a href="#TSQL.Generator-724"><span class="linenos">724</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator-725"><a href="#TSQL.Generator-725"><span class="linenos">725</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-726"><a href="#TSQL.Generator-726"><span class="linenos">726</span></a>
+</span><span id="TSQL.Generator-727"><a href="#TSQL.Generator-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="TSQL.Generator-728"><a href="#TSQL.Generator-728"><span class="linenos">728</span></a>
+</span><span id="TSQL.Generator-729"><a href="#TSQL.Generator-729"><span class="linenos">729</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="TSQL.Generator-730"><a href="#TSQL.Generator-730"><span class="linenos">730</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-731"><a href="#TSQL.Generator-731"><span class="linenos">731</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-732"><a href="#TSQL.Generator-732"><span class="linenos">732</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="TSQL.Generator-733"><a href="#TSQL.Generator-733"><span class="linenos">733</span></a>
+</span><span id="TSQL.Generator-734"><a href="#TSQL.Generator-734"><span class="linenos">734</span></a> <span class="c1"># https://learn.microsoft.com/en-us/answers/questions/448821/create-table-in-sql-server</span>
+</span><span id="TSQL.Generator-735"><a href="#TSQL.Generator-735"><span class="linenos">735</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="TSQL.Generator-736"><a href="#TSQL.Generator-736"><span class="linenos">736</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="TSQL.Generator-737"><a href="#TSQL.Generator-737"><span class="linenos">737</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-738"><a href="#TSQL.Generator-738"><span class="linenos">738</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 class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="TSQL.Generator-739"><a href="#TSQL.Generator-739"><span class="linenos">739</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;increment&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="TSQL.Generator-740"><a href="#TSQL.Generator-740"><span class="linenos">740</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IDENTITY(</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">increment</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -2858,6 +2974,30 @@ Default: True</li>
</div>
+ <div id="TSQL.Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#TSQL.Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
+ <div id="TSQL.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="classattr">
+ <div class="attr variable">
+ <span class="name">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#TSQL.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD"></a>
+
+
+
+ </div>
<div id="TSQL.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
@@ -2875,7 +3015,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="TSQL.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function _format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _format_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="../expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function any_value_to_max_sql&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementColumnConstraint">sqlglot.expressions.AutoIncrementColumnConstraint</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function generate_date_delta_with_unit_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function _format_sql&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;: &lt;function <a href="#TSQL.Generator">TSQL.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _format_sql&gt;}</span>
</div>
@@ -2888,7 +3028,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="TSQL.Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="../expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.UNSUPPORTED: &#39;UNSUPPORTED&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -2920,17 +3060,54 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.createable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.createable_sql-643"><a href="#TSQL.Generator.createable_sql-643"><span class="linenos">643</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.createable_sql-644"><a href="#TSQL.Generator.createable_sql-644"><span class="linenos">644</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.createable_sql-645"><a href="#TSQL.Generator.createable_sql-645"><span class="linenos">645</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.createable_sql-646"><a href="#TSQL.Generator.createable_sql-646"><span class="linenos">646</span></a>
-</span><span id="TSQL.Generator.createable_sql-647"><a href="#TSQL.Generator.createable_sql-647"><span class="linenos">647</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="TSQL.Generator.createable_sql-648"><a href="#TSQL.Generator.createable_sql-648"><span class="linenos">648</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="TSQL.Generator.createable_sql-649"><a href="#TSQL.Generator.createable_sql-649"><span class="linenos">649</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="TSQL.Generator.createable_sql-650"><a href="#TSQL.Generator.createable_sql-650"><span class="linenos">650</span></a> <span class="p">):</span>
-</span><span id="TSQL.Generator.createable_sql-651"><a href="#TSQL.Generator.createable_sql-651"><span class="linenos">651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.createable_sql-652"><a href="#TSQL.Generator.createable_sql-652"><span class="linenos">652</span></a>
-</span><span id="TSQL.Generator.createable_sql-653"><a href="#TSQL.Generator.createable_sql-653"><span class="linenos">653</span></a> <span class="k">return</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.createable_sql-635"><a href="#TSQL.Generator.createable_sql-635"><span class="linenos">635</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.createable_sql-636"><a href="#TSQL.Generator.createable_sql-636"><span class="linenos">636</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.createable_sql-637"><a href="#TSQL.Generator.createable_sql-637"><span class="linenos">637</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.createable_sql-638"><a href="#TSQL.Generator.createable_sql-638"><span class="linenos">638</span></a>
+</span><span id="TSQL.Generator.createable_sql-639"><a href="#TSQL.Generator.createable_sql-639"><span class="linenos">639</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;#&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="TSQL.Generator.createable_sql-640"><a href="#TSQL.Generator.createable_sql-640"><span class="linenos">640</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="TSQL.Generator.createable_sql-641"><a href="#TSQL.Generator.createable_sql-641"><span class="linenos">641</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="TSQL.Generator.createable_sql-642"><a href="#TSQL.Generator.createable_sql-642"><span class="linenos">642</span></a> <span class="p">):</span>
+</span><span id="TSQL.Generator.createable_sql-643"><a href="#TSQL.Generator.createable_sql-643"><span class="linenos">643</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.createable_sql-644"><a href="#TSQL.Generator.createable_sql-644"><span class="linenos">644</span></a>
+</span><span id="TSQL.Generator.createable_sql-645"><a href="#TSQL.Generator.createable_sql-645"><span class="linenos">645</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="TSQL.Generator.create_sql" class="classattr">
+ <input id="TSQL.Generator.create_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">create_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#Create">sqlglot.expressions.Create</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="TSQL.Generator.create_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#TSQL.Generator.create_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.create_sql-647"><a href="#TSQL.Generator.create_sql-647"><span class="linenos">647</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.create_sql-648"><a href="#TSQL.Generator.create_sql-648"><span class="linenos">648</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="TSQL.Generator.create_sql-649"><a href="#TSQL.Generator.create_sql-649"><span class="linenos">649</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="TSQL.Generator.create_sql-650"><a href="#TSQL.Generator.create_sql-650"><span class="linenos">650</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="TSQL.Generator.create_sql-651"><a href="#TSQL.Generator.create_sql-651"><span class="linenos">651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TSQL.Generator.create_sql-652"><a href="#TSQL.Generator.create_sql-652"><span class="linenos">652</span></a>
+</span><span id="TSQL.Generator.create_sql-653"><a href="#TSQL.Generator.create_sql-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">exists</span><span class="p">:</span>
+</span><span id="TSQL.Generator.create_sql-654"><a href="#TSQL.Generator.create_sql-654"><span class="linenos">654</span></a> <span class="n">table</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">Table</span><span class="p">)</span>
+</span><span id="TSQL.Generator.create_sql-655"><a href="#TSQL.Generator.create_sql-655"><span class="linenos">655</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="TSQL.Generator.create_sql-656"><a href="#TSQL.Generator.create_sql-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.create_sql-657"><a href="#TSQL.Generator.create_sql-657"><span class="linenos">657</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator.create_sql-658"><a href="#TSQL.Generator.create_sql-658"><span class="linenos">658</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.create_sql-659"><a href="#TSQL.Generator.create_sql-659"><span class="linenos">659</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator.create_sql-660"><a href="#TSQL.Generator.create_sql-660"><span class="linenos">660</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.create_sql-661"><a href="#TSQL.Generator.create_sql-661"><span class="linenos">661</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><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">this</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="TSQL.Generator.create_sql-662"><a href="#TSQL.Generator.create_sql-662"><span class="linenos">662</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">) AND name = </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">) EXEC(&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39;)&quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator.create_sql-663"><a href="#TSQL.Generator.create_sql-663"><span class="linenos">663</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator.create_sql-664"><a href="#TSQL.Generator.create_sql-664"><span class="linenos">664</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;CREATE OR REPLACE &quot;</span><span class="p">,</span> <span class="s2">&quot;CREATE OR ALTER &quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="TSQL.Generator.create_sql-665"><a href="#TSQL.Generator.create_sql-665"><span class="linenos">665</span></a>
+</span><span id="TSQL.Generator.create_sql-666"><a href="#TSQL.Generator.create_sql-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -2948,41 +3125,39 @@ 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-655"><a href="#TSQL.Generator.offset_sql-655"><span class="linenos">655</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-656"><a href="#TSQL.Generator.offset_sql-656"><span class="linenos">656</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-668"><a href="#TSQL.Generator.offset_sql-668"><span class="linenos">668</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-669"><a href="#TSQL.Generator.offset_sql-669"><span class="linenos">669</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>
</div>
- <div id="TSQL.Generator.systemtime_sql" class="classattr">
- <input id="TSQL.Generator.systemtime_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <div id="TSQL.Generator.version_sql" class="classattr">
+ <input id="TSQL.Generator.version_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">systemtime_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#SystemTime">sqlglot.expressions.SystemTime</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
-
- <label class="view-source-button" for="TSQL.Generator.systemtime_sql-view-source"><span>View Source</span></label>
-
- </div>
- <a class="headerlink" href="#TSQL.Generator.systemtime_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.systemtime_sql-658"><a href="#TSQL.Generator.systemtime_sql-658"><span class="linenos">658</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-659"><a href="#TSQL.Generator.systemtime_sql-659"><span class="linenos">659</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-660"><a href="#TSQL.Generator.systemtime_sql-660"><span class="linenos">660</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-661"><a href="#TSQL.Generator.systemtime_sql-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-662"><a href="#TSQL.Generator.systemtime_sql-662"><span class="linenos">662</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-663"><a href="#TSQL.Generator.systemtime_sql-663"><span class="linenos">663</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-664"><a href="#TSQL.Generator.systemtime_sql-664"><span class="linenos">664</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-665"><a href="#TSQL.Generator.systemtime_sql-665"><span class="linenos">665</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-666"><a href="#TSQL.Generator.systemtime_sql-666"><span class="linenos">666</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-667"><a href="#TSQL.Generator.systemtime_sql-667"><span class="linenos">667</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-668"><a href="#TSQL.Generator.systemtime_sql-668"><span class="linenos">668</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-669"><a href="#TSQL.Generator.systemtime_sql-669"><span class="linenos">669</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-670"><a href="#TSQL.Generator.systemtime_sql-670"><span class="linenos">670</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-671"><a href="#TSQL.Generator.systemtime_sql-671"><span class="linenos">671</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-672"><a href="#TSQL.Generator.systemtime_sql-672"><span class="linenos">672</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-673"><a href="#TSQL.Generator.systemtime_sql-673"><span class="linenos">673</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 class="name">version_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#Version">sqlglot.expressions.Version</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="TSQL.Generator.version_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#TSQL.Generator.version_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.version_sql-671"><a href="#TSQL.Generator.version_sql-671"><span class="linenos">671</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.version_sql-672"><a href="#TSQL.Generator.version_sql-672"><span class="linenos">672</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span> <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;TIMESTAMP&quot;</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="TSQL.Generator.version_sql-673"><a href="#TSQL.Generator.version_sql-673"><span class="linenos">673</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.version_sql-674"><a href="#TSQL.Generator.version_sql-674"><span class="linenos">674</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="TSQL.Generator.version_sql-675"><a href="#TSQL.Generator.version_sql-675"><span class="linenos">675</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="TSQL.Generator.version_sql-676"><a href="#TSQL.Generator.version_sql-676"><span class="linenos">676</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;FROM&quot;</span><span class="p">,</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator.version_sql-677"><a href="#TSQL.Generator.version_sql-677"><span class="linenos">677</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="TSQL.Generator.version_sql-678"><a href="#TSQL.Generator.version_sql-678"><span class="linenos">678</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;TO&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span> <span class="k">else</span> <span class="s2">&quot;AND&quot;</span>
+</span><span id="TSQL.Generator.version_sql-679"><a href="#TSQL.Generator.version_sql-679"><span class="linenos">679</span></a> <span class="n">expr_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">sql</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="w"> </span><span class="mi">0</span><span class="p">))</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.version_sql-680"><a href="#TSQL.Generator.version_sql-680"><span class="linenos">680</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL.Generator.version_sql-681"><a href="#TSQL.Generator.version_sql-681"><span class="linenos">681</span></a> <span class="n">expr_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">expr</span><span class="p">)</span>
+</span><span id="TSQL.Generator.version_sql-682"><a href="#TSQL.Generator.version_sql-682"><span class="linenos">682</span></a>
+</span><span id="TSQL.Generator.version_sql-683"><a href="#TSQL.Generator.version_sql-683"><span class="linenos">683</span></a> <span class="n">expr_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expr_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator.version_sql-684"><a href="#TSQL.Generator.version_sql-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expr_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -3000,10 +3175,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-675"><a href="#TSQL.Generator.returnsproperty_sql-675"><span class="linenos">675</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-676"><a href="#TSQL.Generator.returnsproperty_sql-676"><span class="linenos">676</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-677"><a href="#TSQL.Generator.returnsproperty_sql-677"><span class="linenos">677</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-678"><a href="#TSQL.Generator.returnsproperty_sql-678"><span class="linenos">678</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-686"><a href="#TSQL.Generator.returnsproperty_sql-686"><span class="linenos">686</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-687"><a href="#TSQL.Generator.returnsproperty_sql-687"><span class="linenos">687</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-688"><a href="#TSQL.Generator.returnsproperty_sql-688"><span class="linenos">688</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-689"><a href="#TSQL.Generator.returnsproperty_sql-689"><span class="linenos">689</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>
@@ -3021,10 +3196,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.returning_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.returning_sql-680"><a href="#TSQL.Generator.returning_sql-680"><span class="linenos">680</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.returning_sql-681"><a href="#TSQL.Generator.returning_sql-681"><span class="linenos">681</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="TSQL.Generator.returning_sql-682"><a href="#TSQL.Generator.returning_sql-682"><span class="linenos">682</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator.returning_sql-683"><a href="#TSQL.Generator.returning_sql-683"><span class="linenos">683</span></a> <span class="k">return</span> <span class="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;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.returning_sql-691"><a href="#TSQL.Generator.returning_sql-691"><span class="linenos">691</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.returning_sql-692"><a href="#TSQL.Generator.returning_sql-692"><span class="linenos">692</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="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><span id="TSQL.Generator.returning_sql-693"><a href="#TSQL.Generator.returning_sql-693"><span class="linenos">693</span></a> <span class="n">into</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;INTO </span><span class="si">{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator.returning_sql-694"><a href="#TSQL.Generator.returning_sql-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OUTPUT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}{</span><span class="n">into</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -3042,12 +3217,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.transaction_sql-685"><a href="#TSQL.Generator.transaction_sql-685"><span class="linenos">685</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="TSQL.Generator.transaction_sql-686"><a href="#TSQL.Generator.transaction_sql-686"><span class="linenos">686</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.transaction_sql-687"><a href="#TSQL.Generator.transaction_sql-687"><span class="linenos">687</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="TSQL.Generator.transaction_sql-688"><a href="#TSQL.Generator.transaction_sql-688"><span class="linenos">688</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.transaction_sql-689"><a href="#TSQL.Generator.transaction_sql-689"><span class="linenos">689</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator.transaction_sql-690"><a href="#TSQL.Generator.transaction_sql-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.transaction_sql-696"><a href="#TSQL.Generator.transaction_sql-696"><span class="linenos">696</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="TSQL.Generator.transaction_sql-697"><a href="#TSQL.Generator.transaction_sql-697"><span class="linenos">697</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.transaction_sql-698"><a href="#TSQL.Generator.transaction_sql-698"><span class="linenos">698</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="TSQL.Generator.transaction_sql-699"><a href="#TSQL.Generator.transaction_sql-699"><span class="linenos">699</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;mark&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.transaction_sql-700"><a href="#TSQL.Generator.transaction_sql-700"><span class="linenos">700</span></a> <span class="n">mark</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH MARK </span><span class="si">{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">mark</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator.transaction_sql-701"><a href="#TSQL.Generator.transaction_sql-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">mark</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -3065,16 +3240,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.commit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.commit_sql-692"><a href="#TSQL.Generator.commit_sql-692"><span class="linenos">692</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="TSQL.Generator.commit_sql-693"><a href="#TSQL.Generator.commit_sql-693"><span class="linenos">693</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.commit_sql-694"><a href="#TSQL.Generator.commit_sql-694"><span class="linenos">694</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="TSQL.Generator.commit_sql-695"><a href="#TSQL.Generator.commit_sql-695"><span class="linenos">695</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.commit_sql-696"><a href="#TSQL.Generator.commit_sql-696"><span class="linenos">696</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="TSQL.Generator.commit_sql-697"><a href="#TSQL.Generator.commit_sql-697"><span class="linenos">697</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL.Generator.commit_sql-698"><a href="#TSQL.Generator.commit_sql-698"><span class="linenos">698</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="TSQL.Generator.commit_sql-699"><a href="#TSQL.Generator.commit_sql-699"><span class="linenos">699</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator.commit_sql-700"><a href="#TSQL.Generator.commit_sql-700"><span class="linenos">700</span></a> <span class="p">)</span>
-</span><span id="TSQL.Generator.commit_sql-701"><a href="#TSQL.Generator.commit_sql-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.commit_sql-703"><a href="#TSQL.Generator.commit_sql-703"><span class="linenos">703</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="TSQL.Generator.commit_sql-704"><a href="#TSQL.Generator.commit_sql-704"><span class="linenos">704</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.commit_sql-705"><a href="#TSQL.Generator.commit_sql-705"><span class="linenos">705</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="TSQL.Generator.commit_sql-706"><a href="#TSQL.Generator.commit_sql-706"><span class="linenos">706</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;durability&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.commit_sql-707"><a href="#TSQL.Generator.commit_sql-707"><span class="linenos">707</span></a> <span class="n">durability</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="TSQL.Generator.commit_sql-708"><a href="#TSQL.Generator.commit_sql-708"><span class="linenos">708</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (DELAYED_DURABILITY = </span><span class="si">{</span><span class="s1">&#39;ON&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">durability</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;OFF&#39;</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL.Generator.commit_sql-709"><a href="#TSQL.Generator.commit_sql-709"><span class="linenos">709</span></a> <span class="k">if</span> <span class="n">durability</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="TSQL.Generator.commit_sql-710"><a href="#TSQL.Generator.commit_sql-710"><span class="linenos">710</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator.commit_sql-711"><a href="#TSQL.Generator.commit_sql-711"><span class="linenos">711</span></a> <span class="p">)</span>
+</span><span id="TSQL.Generator.commit_sql-712"><a href="#TSQL.Generator.commit_sql-712"><span class="linenos">712</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">durability</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -3092,10 +3267,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.rollback_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.rollback_sql-703"><a href="#TSQL.Generator.rollback_sql-703"><span class="linenos">703</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="TSQL.Generator.rollback_sql-704"><a href="#TSQL.Generator.rollback_sql-704"><span class="linenos">704</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.rollback_sql-705"><a href="#TSQL.Generator.rollback_sql-705"><span class="linenos">705</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="TSQL.Generator.rollback_sql-706"><a href="#TSQL.Generator.rollback_sql-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</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="TSQL.Generator.rollback_sql-714"><a href="#TSQL.Generator.rollback_sql-714"><span class="linenos">714</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="TSQL.Generator.rollback_sql-715"><a href="#TSQL.Generator.rollback_sql-715"><span class="linenos">715</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.rollback_sql-716"><a href="#TSQL.Generator.rollback_sql-716"><span class="linenos">716</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="TSQL.Generator.rollback_sql-717"><a href="#TSQL.Generator.rollback_sql-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK TRANSACTION</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -3113,15 +3288,59 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.identifier_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.identifier_sql-708"><a href="#TSQL.Generator.identifier_sql-708"><span class="linenos">708</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.identifier_sql-709"><a href="#TSQL.Generator.identifier_sql-709"><span class="linenos">709</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TSQL.Generator.identifier_sql-710"><a href="#TSQL.Generator.identifier_sql-710"><span class="linenos">710</span></a>
-</span><span id="TSQL.Generator.identifier_sql-711"><a href="#TSQL.Generator.identifier_sql-711"><span class="linenos">711</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;global&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Generator.identifier_sql-712"><a href="#TSQL.Generator.identifier_sql-712"><span class="linenos">712</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.identifier_sql-713"><a href="#TSQL.Generator.identifier_sql-713"><span class="linenos">713</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Generator.identifier_sql-714"><a href="#TSQL.Generator.identifier_sql-714"><span class="linenos">714</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.identifier_sql-715"><a href="#TSQL.Generator.identifier_sql-715"><span class="linenos">715</span></a>
-</span><span id="TSQL.Generator.identifier_sql-716"><a href="#TSQL.Generator.identifier_sql-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="n">identifier</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.identifier_sql-719"><a href="#TSQL.Generator.identifier_sql-719"><span class="linenos">719</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.identifier_sql-720"><a href="#TSQL.Generator.identifier_sql-720"><span class="linenos">720</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">identifier_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TSQL.Generator.identifier_sql-721"><a href="#TSQL.Generator.identifier_sql-721"><span class="linenos">721</span></a>
+</span><span id="TSQL.Generator.identifier_sql-722"><a href="#TSQL.Generator.identifier_sql-722"><span class="linenos">722</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;global&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator.identifier_sql-723"><a href="#TSQL.Generator.identifier_sql-723"><span class="linenos">723</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;##</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.identifier_sql-724"><a href="#TSQL.Generator.identifier_sql-724"><span class="linenos">724</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Generator.identifier_sql-725"><a href="#TSQL.Generator.identifier_sql-725"><span class="linenos">725</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.identifier_sql-726"><a href="#TSQL.Generator.identifier_sql-726"><span class="linenos">726</span></a>
+</span><span id="TSQL.Generator.identifier_sql-727"><a href="#TSQL.Generator.identifier_sql-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="TSQL.Generator.constraint_sql" class="classattr">
+ <input id="TSQL.Generator.constraint_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+
+ <span class="def">def</span>
+ <span class="name">constraint_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#Constraint">sqlglot.expressions.Constraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="TSQL.Generator.constraint_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#TSQL.Generator.constraint_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.constraint_sql-729"><a href="#TSQL.Generator.constraint_sql-729"><span class="linenos">729</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="TSQL.Generator.constraint_sql-730"><a href="#TSQL.Generator.constraint_sql-730"><span class="linenos">730</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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.constraint_sql-731"><a href="#TSQL.Generator.constraint_sql-731"><span class="linenos">731</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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.constraint_sql-732"><a href="#TSQL.Generator.constraint_sql-732"><span class="linenos">732</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="TSQL.Generator.generatedasidentitycolumnconstraint_sql" class="classattr">
+ <input id="TSQL.Generator.generatedasidentitycolumnconstraint_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">generatedasidentitycolumnconstraint_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#GeneratedAsIdentityColumnConstraint">sqlglot.expressions.GeneratedAsIdentityColumnConstraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="TSQL.Generator.generatedasidentitycolumnconstraint_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.generatedasidentitycolumnconstraint_sql-735"><a href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql-735"><span class="linenos">735</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="TSQL.Generator.generatedasidentitycolumnconstraint_sql-736"><a href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql-736"><span class="linenos">736</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="TSQL.Generator.generatedasidentitycolumnconstraint_sql-737"><a href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql-737"><span class="linenos">737</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.generatedasidentitycolumnconstraint_sql-738"><a href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql-738"><span class="linenos">738</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 class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="TSQL.Generator.generatedasidentitycolumnconstraint_sql-739"><a href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql-739"><span class="linenos">739</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;increment&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;1&quot;</span>
+</span><span id="TSQL.Generator.generatedasidentitycolumnconstraint_sql-740"><a href="#TSQL.Generator.generatedasidentitycolumnconstraint_sql-740"><span class="linenos">740</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IDENTITY(</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">increment</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -3190,26 +3409,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.can_identify-253"><a href="#TSQL.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="TSQL.Generator.can_identify-254"><a href="#TSQL.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="TSQL.Generator.can_identify-255"><a href="#TSQL.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="TSQL.Generator.can_identify-256"><a href="#TSQL.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="TSQL.Generator.can_identify-257"><a href="#TSQL.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="TSQL.Generator.can_identify-258"><a href="#TSQL.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="TSQL.Generator.can_identify-259"><a href="#TSQL.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="TSQL.Generator.can_identify-260"><a href="#TSQL.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="TSQL.Generator.can_identify-261"><a href="#TSQL.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="TSQL.Generator.can_identify-262"><a href="#TSQL.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="TSQL.Generator.can_identify-263"><a href="#TSQL.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="TSQL.Generator.can_identify-264"><a href="#TSQL.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="TSQL.Generator.can_identify-265"><a href="#TSQL.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="TSQL.Generator.can_identify-266"><a href="#TSQL.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.can_identify-267"><a href="#TSQL.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="TSQL.Generator.can_identify-268"><a href="#TSQL.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="TSQL.Generator.can_identify-269"><a href="#TSQL.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.can_identify-270"><a href="#TSQL.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.can_identify-256"><a href="#TSQL.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="TSQL.Generator.can_identify-257"><a href="#TSQL.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="TSQL.Generator.can_identify-258"><a href="#TSQL.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="TSQL.Generator.can_identify-259"><a href="#TSQL.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="TSQL.Generator.can_identify-260"><a href="#TSQL.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="TSQL.Generator.can_identify-261"><a href="#TSQL.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="TSQL.Generator.can_identify-262"><a href="#TSQL.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="TSQL.Generator.can_identify-263"><a href="#TSQL.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="TSQL.Generator.can_identify-264"><a href="#TSQL.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="TSQL.Generator.can_identify-265"><a href="#TSQL.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="TSQL.Generator.can_identify-266"><a href="#TSQL.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="TSQL.Generator.can_identify-267"><a href="#TSQL.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="TSQL.Generator.can_identify-268"><a href="#TSQL.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="TSQL.Generator.can_identify-269"><a href="#TSQL.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.can_identify-270"><a href="#TSQL.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="TSQL.Generator.can_identify-271"><a href="#TSQL.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="TSQL.Generator.can_identify-272"><a href="#TSQL.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="TSQL.Generator.can_identify-272"><a href="#TSQL.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.can_identify-273"><a href="#TSQL.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="TSQL.Generator.can_identify-274"><a href="#TSQL.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="TSQL.Generator.can_identify-275"><a href="#TSQL.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -3280,26 +3499,14 @@ Default: True</li>
</div>
- <div id="TSQL.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#TSQL.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="TSQL.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="TSQL.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#TSQL.Tokenizer">sqlglot.dialects.tsql.TSQL.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#TSQL.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#TSQL.Generator.TOKENIZER_CLASS"></a>
@@ -3400,6 +3607,7 @@ Default: True</li>
<dd id="TSQL.Generator.DUPLICATE_KEY_UPDATE_WITH_SET" class="variable"><a href="../generator.html#Generator.DUPLICATE_KEY_UPDATE_WITH_SET">DUPLICATE_KEY_UPDATE_WITH_SET</a></dd>
<dd id="TSQL.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="TSQL.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="TSQL.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
<dd id="TSQL.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
<dd id="TSQL.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="TSQL.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
@@ -3446,13 +3654,12 @@ Default: True</li>
<dd id="TSQL.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="TSQL.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="TSQL.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="TSQL.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="TSQL.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="TSQL.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
- <dd id="TSQL.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
<dd id="TSQL.Generator.notnullcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.notnullcolumnconstraint_sql">notnullcolumnconstraint_sql</a></dd>
<dd id="TSQL.Generator.primarykeycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.primarykeycolumnconstraint_sql">primarykeycolumnconstraint_sql</a></dd>
<dd id="TSQL.Generator.uniquecolumnconstraint_sql" class="function"><a href="../generator.html#Generator.uniquecolumnconstraint_sql">uniquecolumnconstraint_sql</a></dd>
- <dd id="TSQL.Generator.create_sql" class="function"><a href="../generator.html#Generator.create_sql">create_sql</a></dd>
<dd id="TSQL.Generator.clone_sql" class="function"><a href="../generator.html#Generator.clone_sql">clone_sql</a></dd>
<dd id="TSQL.Generator.describe_sql" class="function"><a href="../generator.html#Generator.describe_sql">describe_sql</a></dd>
<dd id="TSQL.Generator.prepend_ctes" class="function"><a href="../generator.html#Generator.prepend_ctes">prepend_ctes</a></dd>
@@ -3463,7 +3670,7 @@ Default: True</li>
<dd id="TSQL.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="TSQL.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="TSQL.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="TSQL.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="TSQL.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="TSQL.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="TSQL.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="TSQL.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -3514,6 +3721,8 @@ Default: True</li>
<dd id="TSQL.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="TSQL.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="TSQL.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="TSQL.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="TSQL.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="TSQL.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="TSQL.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="TSQL.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -3561,7 +3770,6 @@ Default: True</li>
<dd id="TSQL.Generator.any_sql" class="function"><a href="../generator.html#Generator.any_sql">any_sql</a></dd>
<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>
@@ -3669,6 +3877,8 @@ Default: True</li>
<dd id="TSQL.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="TSQL.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="TSQL.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="TSQL.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="TSQL.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/executor.html b/docs/sqlglot/executor.html
index 22f17f0..64bd241 100644
--- a/docs/sqlglot/executor.html
+++ b/docs/sqlglot/executor.html
@@ -59,6 +59,9 @@
<a class="variable" href="#logger">logger</a>
</li>
<li>
+ <a class="variable" href="#PYTHON_TYPE_TO_SQLGLOT">PYTHON_TYPE_TO_SQLGLOT</a>
+ </li>
+ <li>
<a class="function" href="#execute">execute</a>
</li>
</ul>
@@ -362,62 +365,68 @@
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">Schema</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><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</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">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="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-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">read</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-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">tables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a><span class="sd"> Run a sql query against data.</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="sd"> Args:</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a><span class="sd"> sql: a sql statement.</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a><span class="sd"> schema: database schema.</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a><span class="sd"> This can either be an instance of `Schema` or a mapping in one of the following forms:</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a><span class="sd"> 1. {table: {col: type}}</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. &quot;spark&quot;, &quot;hive&quot;, &quot;presto&quot;, &quot;mysql&quot;).</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a><span class="sd"> tables: additional tables to register.</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="sd"> Returns:</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a><span class="sd"> Simple columnar data structure.</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a> <span class="n">tables_</span> <span class="o">=</span> <span class="n">ensure_tables</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a><span class="n">PYTHON_TYPE_TO_SQLGLOT</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="s2">&quot;dict&quot;</span><span class="p">:</span> <span class="s2">&quot;MAP&quot;</span><span class="p">,</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a><span class="p">}</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Expression</span><span class="p">,</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="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-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">read</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-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="n">tables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a><span class="sd"> Run a sql query against data.</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="sd"> Args:</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a><span class="sd"> sql: a sql statement.</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a><span class="sd"> schema: database schema.</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a><span class="sd"> This can either be an instance of `Schema` or a mapping in one of the following forms:</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a><span class="sd"> 1. {table: {col: type}}</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. &quot;spark&quot;, &quot;hive&quot;, &quot;presto&quot;, &quot;mysql&quot;).</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a><span class="sd"> tables: additional tables to register.</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="ow">not</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> <span class="n">schema</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="n">flattened_tables</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">))</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a>
-</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a> <span class="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_tables</span><span class="p">:</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a> <span class="k">assert</span> <span class="n">table</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</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">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">[</span><span class="o">*</span><span class="n">keys</span><span class="p">,</span> <span class="n">column</span><span class="p">],</span> <span class="nb">type</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a>
-</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a> <span class="n">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 class="n">dialect</span><span class="o">=</span><span class="n">read</span><span class="p">)</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a><span class="sd"> Returns:</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a><span class="sd"> Simple columnar data structure.</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a> <span class="n">tables_</span> <span class="o">=</span> <span class="n">ensure_tables</span><span class="p">(</span><span class="n">tables</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">read</span><span class="p">)</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="ow">not</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a> <span class="n">flattened_tables</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">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="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_tables</span><span class="p">:</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a> <span class="k">assert</span> <span class="n">table</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</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">if</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="ow">and</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="o">!=</span> <span class="n">schema</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">:</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a> <span class="k">raise</span> <span class="n">ExecuteError</span><span class="p">(</span><span class="s2">&quot;Tables must support the same table args as schema&quot;</span><span class="p">)</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</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">optimize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">leave_tables_isolated</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="n">read</span><span class="p">)</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a> <span class="n">py_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="vm">__name__</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">[</span><span class="o">*</span><span class="n">keys</span><span class="p">,</span> <span class="n">column</span><span class="p">],</span> <span class="n">PYTHON_TYPE_TO_SQLGLOT</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">py_type</span><span class="p">)</span> <span class="ow">or</span> <span class="n">py_type</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="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 class="n">dialect</span><span class="o">=</span><span class="n">read</span><span class="p">)</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimization finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimized SQL: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</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">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="ow">and</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="o">!=</span> <span class="n">schema</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">:</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a> <span class="k">raise</span> <span class="n">ExecuteError</span><span class="p">(</span><span class="s2">&quot;Tables must support the same table args as schema&quot;</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="n">plan</span> <span class="o">=</span> <span class="n">Plan</span><span class="p">(</span><span class="n">expression</span><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 class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Logical Plan: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">plan</span><span class="p">)</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">PythonExecutor</span><span class="p">(</span><span class="n">tables</span><span class="o">=</span><span class="n">tables_</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">plan</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">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Query finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</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="n">result</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><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">optimize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">leave_tables_isolated</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="n">read</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="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimization finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimized SQL: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</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">plan</span> <span class="o">=</span> <span class="n">Plan</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="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Logical Plan: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">plan</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="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">PythonExecutor</span><span class="p">(</span><span class="n">tables</span><span class="o">=</span><span class="n">tables_</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">plan</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="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Query finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos">91</span></a>
+</span><span id="L-92"><a href="#L-92"><span class="linenos">92</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -434,6 +443,18 @@
</section>
+ <section id="PYTHON_TYPE_TO_SQLGLOT">
+ <div class="attr variable">
+ <span class="name">PYTHON_TYPE_TO_SQLGLOT</span> =
+<span class="default_value">{&#39;dict&#39;: &#39;MAP&#39;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#PYTHON_TYPE_TO_SQLGLOT"></a>
+
+
+
+ </section>
<section id="execute">
<input id="execute-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -445,62 +466,63 @@
</div>
<a class="headerlink" href="#execute"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="execute-32"><a href="#execute-32"><span class="linenos">32</span></a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span>
-</span><span id="execute-33"><a href="#execute-33"><span class="linenos">33</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Expression</span><span class="p">,</span>
-</span><span id="execute-34"><a href="#execute-34"><span class="linenos">34</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="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="execute-35"><a href="#execute-35"><span class="linenos">35</span></a> <span class="n">read</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="execute-36"><a href="#execute-36"><span class="linenos">36</span></a> <span class="n">tables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="execute-37"><a href="#execute-37"><span class="linenos">37</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
-</span><span id="execute-38"><a href="#execute-38"><span class="linenos">38</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="execute-39"><a href="#execute-39"><span class="linenos">39</span></a><span class="sd"> Run a sql query against data.</span>
-</span><span id="execute-40"><a href="#execute-40"><span class="linenos">40</span></a>
-</span><span id="execute-41"><a href="#execute-41"><span class="linenos">41</span></a><span class="sd"> Args:</span>
-</span><span id="execute-42"><a href="#execute-42"><span class="linenos">42</span></a><span class="sd"> sql: a sql statement.</span>
-</span><span id="execute-43"><a href="#execute-43"><span class="linenos">43</span></a><span class="sd"> schema: database schema.</span>
-</span><span id="execute-44"><a href="#execute-44"><span class="linenos">44</span></a><span class="sd"> This can either be an instance of `Schema` or a mapping in one of the following forms:</span>
-</span><span id="execute-45"><a href="#execute-45"><span class="linenos">45</span></a><span class="sd"> 1. {table: {col: type}}</span>
-</span><span id="execute-46"><a href="#execute-46"><span class="linenos">46</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
-</span><span id="execute-47"><a href="#execute-47"><span class="linenos">47</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
-</span><span id="execute-48"><a href="#execute-48"><span class="linenos">48</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. &quot;spark&quot;, &quot;hive&quot;, &quot;presto&quot;, &quot;mysql&quot;).</span>
-</span><span id="execute-49"><a href="#execute-49"><span class="linenos">49</span></a><span class="sd"> tables: additional tables to register.</span>
-</span><span id="execute-50"><a href="#execute-50"><span class="linenos">50</span></a>
-</span><span id="execute-51"><a href="#execute-51"><span class="linenos">51</span></a><span class="sd"> Returns:</span>
-</span><span id="execute-52"><a href="#execute-52"><span class="linenos">52</span></a><span class="sd"> Simple columnar data structure.</span>
-</span><span id="execute-53"><a href="#execute-53"><span class="linenos">53</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="execute-54"><a href="#execute-54"><span class="linenos">54</span></a> <span class="n">tables_</span> <span class="o">=</span> <span class="n">ensure_tables</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="execute-37"><a href="#execute-37"><span class="linenos">37</span></a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span>
+</span><span id="execute-38"><a href="#execute-38"><span class="linenos">38</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Expression</span><span class="p">,</span>
+</span><span id="execute-39"><a href="#execute-39"><span class="linenos">39</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="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="execute-40"><a href="#execute-40"><span class="linenos">40</span></a> <span class="n">read</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="execute-41"><a href="#execute-41"><span class="linenos">41</span></a> <span class="n">tables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="execute-42"><a href="#execute-42"><span class="linenos">42</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
+</span><span id="execute-43"><a href="#execute-43"><span class="linenos">43</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="execute-44"><a href="#execute-44"><span class="linenos">44</span></a><span class="sd"> Run a sql query against data.</span>
+</span><span id="execute-45"><a href="#execute-45"><span class="linenos">45</span></a>
+</span><span id="execute-46"><a href="#execute-46"><span class="linenos">46</span></a><span class="sd"> Args:</span>
+</span><span id="execute-47"><a href="#execute-47"><span class="linenos">47</span></a><span class="sd"> sql: a sql statement.</span>
+</span><span id="execute-48"><a href="#execute-48"><span class="linenos">48</span></a><span class="sd"> schema: database schema.</span>
+</span><span id="execute-49"><a href="#execute-49"><span class="linenos">49</span></a><span class="sd"> This can either be an instance of `Schema` or a mapping in one of the following forms:</span>
+</span><span id="execute-50"><a href="#execute-50"><span class="linenos">50</span></a><span class="sd"> 1. {table: {col: type}}</span>
+</span><span id="execute-51"><a href="#execute-51"><span class="linenos">51</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
+</span><span id="execute-52"><a href="#execute-52"><span class="linenos">52</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
+</span><span id="execute-53"><a href="#execute-53"><span class="linenos">53</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. &quot;spark&quot;, &quot;hive&quot;, &quot;presto&quot;, &quot;mysql&quot;).</span>
+</span><span id="execute-54"><a href="#execute-54"><span class="linenos">54</span></a><span class="sd"> tables: additional tables to register.</span>
</span><span id="execute-55"><a href="#execute-55"><span class="linenos">55</span></a>
-</span><span id="execute-56"><a href="#execute-56"><span class="linenos">56</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="execute-57"><a href="#execute-57"><span class="linenos">57</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="execute-58"><a href="#execute-58"><span class="linenos">58</span></a> <span class="n">flattened_tables</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">))</span>
-</span><span id="execute-59"><a href="#execute-59"><span class="linenos">59</span></a>
-</span><span id="execute-60"><a href="#execute-60"><span class="linenos">60</span></a> <span class="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_tables</span><span class="p">:</span>
-</span><span id="execute-61"><a href="#execute-61"><span class="linenos">61</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
-</span><span id="execute-62"><a href="#execute-62"><span class="linenos">62</span></a> <span class="k">assert</span> <span class="n">table</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="execute-63"><a href="#execute-63"><span class="linenos">63</span></a>
-</span><span id="execute-64"><a href="#execute-64"><span class="linenos">64</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="execute-65"><a href="#execute-65"><span class="linenos">65</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">[</span><span class="o">*</span><span class="n">keys</span><span class="p">,</span> <span class="n">column</span><span class="p">],</span> <span class="nb">type</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
-</span><span id="execute-66"><a href="#execute-66"><span class="linenos">66</span></a>
-</span><span id="execute-67"><a href="#execute-67"><span class="linenos">67</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 class="n">dialect</span><span class="o">=</span><span class="n">read</span><span class="p">)</span>
+</span><span id="execute-56"><a href="#execute-56"><span class="linenos">56</span></a><span class="sd"> Returns:</span>
+</span><span id="execute-57"><a href="#execute-57"><span class="linenos">57</span></a><span class="sd"> Simple columnar data structure.</span>
+</span><span id="execute-58"><a href="#execute-58"><span class="linenos">58</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="execute-59"><a href="#execute-59"><span class="linenos">59</span></a> <span class="n">tables_</span> <span class="o">=</span> <span class="n">ensure_tables</span><span class="p">(</span><span class="n">tables</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">read</span><span class="p">)</span>
+</span><span id="execute-60"><a href="#execute-60"><span class="linenos">60</span></a>
+</span><span id="execute-61"><a href="#execute-61"><span class="linenos">61</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="execute-62"><a href="#execute-62"><span class="linenos">62</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="execute-63"><a href="#execute-63"><span class="linenos">63</span></a> <span class="n">flattened_tables</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">))</span>
+</span><span id="execute-64"><a href="#execute-64"><span class="linenos">64</span></a>
+</span><span id="execute-65"><a href="#execute-65"><span class="linenos">65</span></a> <span class="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_tables</span><span class="p">:</span>
+</span><span id="execute-66"><a href="#execute-66"><span class="linenos">66</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">tables_</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
+</span><span id="execute-67"><a href="#execute-67"><span class="linenos">67</span></a> <span class="k">assert</span> <span class="n">table</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
</span><span id="execute-68"><a href="#execute-68"><span class="linenos">68</span></a>
-</span><span id="execute-69"><a href="#execute-69"><span class="linenos">69</span></a> <span class="k">if</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="ow">and</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="o">!=</span> <span class="n">schema</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">:</span>
-</span><span id="execute-70"><a href="#execute-70"><span class="linenos">70</span></a> <span class="k">raise</span> <span class="n">ExecuteError</span><span class="p">(</span><span class="s2">&quot;Tables must support the same table args as schema&quot;</span><span class="p">)</span>
-</span><span id="execute-71"><a href="#execute-71"><span class="linenos">71</span></a>
-</span><span id="execute-72"><a href="#execute-72"><span class="linenos">72</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
-</span><span id="execute-73"><a href="#execute-73"><span class="linenos">73</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">optimize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">leave_tables_isolated</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="n">read</span><span class="p">)</span>
+</span><span id="execute-69"><a href="#execute-69"><span class="linenos">69</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="execute-70"><a href="#execute-70"><span class="linenos">70</span></a> <span class="n">py_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="vm">__name__</span>
+</span><span id="execute-71"><a href="#execute-71"><span class="linenos">71</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">[</span><span class="o">*</span><span class="n">keys</span><span class="p">,</span> <span class="n">column</span><span class="p">],</span> <span class="n">PYTHON_TYPE_TO_SQLGLOT</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">py_type</span><span class="p">)</span> <span class="ow">or</span> <span class="n">py_type</span><span class="p">)</span>
+</span><span id="execute-72"><a href="#execute-72"><span class="linenos">72</span></a>
+</span><span id="execute-73"><a href="#execute-73"><span class="linenos">73</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 class="n">dialect</span><span class="o">=</span><span class="n">read</span><span class="p">)</span>
</span><span id="execute-74"><a href="#execute-74"><span class="linenos">74</span></a>
-</span><span id="execute-75"><a href="#execute-75"><span class="linenos">75</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimization finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
-</span><span id="execute-76"><a href="#execute-76"><span class="linenos">76</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimized SQL: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="execute-75"><a href="#execute-75"><span class="linenos">75</span></a> <span class="k">if</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="ow">and</span> <span class="n">tables_</span><span class="o">.</span><span class="n">supported_table_args</span> <span class="o">!=</span> <span class="n">schema</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">:</span>
+</span><span id="execute-76"><a href="#execute-76"><span class="linenos">76</span></a> <span class="k">raise</span> <span class="n">ExecuteError</span><span class="p">(</span><span class="s2">&quot;Tables must support the same table args as schema&quot;</span><span class="p">)</span>
</span><span id="execute-77"><a href="#execute-77"><span class="linenos">77</span></a>
-</span><span id="execute-78"><a href="#execute-78"><span class="linenos">78</span></a> <span class="n">plan</span> <span class="o">=</span> <span class="n">Plan</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="execute-79"><a href="#execute-79"><span class="linenos">79</span></a>
-</span><span id="execute-80"><a href="#execute-80"><span class="linenos">80</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Logical Plan: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">plan</span><span class="p">)</span>
-</span><span id="execute-81"><a href="#execute-81"><span class="linenos">81</span></a>
-</span><span id="execute-82"><a href="#execute-82"><span class="linenos">82</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
-</span><span id="execute-83"><a href="#execute-83"><span class="linenos">83</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">PythonExecutor</span><span class="p">(</span><span class="n">tables</span><span class="o">=</span><span class="n">tables_</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">plan</span><span class="p">)</span>
-</span><span id="execute-84"><a href="#execute-84"><span class="linenos">84</span></a>
-</span><span id="execute-85"><a href="#execute-85"><span class="linenos">85</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Query finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
-</span><span id="execute-86"><a href="#execute-86"><span class="linenos">86</span></a>
-</span><span id="execute-87"><a href="#execute-87"><span class="linenos">87</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="execute-78"><a href="#execute-78"><span class="linenos">78</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
+</span><span id="execute-79"><a href="#execute-79"><span class="linenos">79</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">optimize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">leave_tables_isolated</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="n">read</span><span class="p">)</span>
+</span><span id="execute-80"><a href="#execute-80"><span class="linenos">80</span></a>
+</span><span id="execute-81"><a href="#execute-81"><span class="linenos">81</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimization finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
+</span><span id="execute-82"><a href="#execute-82"><span class="linenos">82</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Optimized SQL: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="execute-83"><a href="#execute-83"><span class="linenos">83</span></a>
+</span><span id="execute-84"><a href="#execute-84"><span class="linenos">84</span></a> <span class="n">plan</span> <span class="o">=</span> <span class="n">Plan</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="execute-85"><a href="#execute-85"><span class="linenos">85</span></a>
+</span><span id="execute-86"><a href="#execute-86"><span class="linenos">86</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Logical Plan: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">plan</span><span class="p">)</span>
+</span><span id="execute-87"><a href="#execute-87"><span class="linenos">87</span></a>
+</span><span id="execute-88"><a href="#execute-88"><span class="linenos">88</span></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
+</span><span id="execute-89"><a href="#execute-89"><span class="linenos">89</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">PythonExecutor</span><span class="p">(</span><span class="n">tables</span><span class="o">=</span><span class="n">tables_</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">plan</span><span class="p">)</span>
+</span><span id="execute-90"><a href="#execute-90"><span class="linenos">90</span></a>
+</span><span id="execute-91"><a href="#execute-91"><span class="linenos">91</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Query finished: </span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">now</span><span class="p">)</span>
+</span><span id="execute-92"><a href="#execute-92"><span class="linenos">92</span></a>
+</span><span id="execute-93"><a href="#execute-93"><span class="linenos">93</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
diff --git a/docs/sqlglot/executor/python.html b/docs/sqlglot/executor/python.html
index 5e064e4..ac26f35 100644
--- a/docs/sqlglot/executor/python.html
+++ b/docs/sqlglot/executor/python.html
@@ -136,10 +136,7 @@
<a class="variable" href="#Python.Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Python.Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Python.Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Python.Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Python.Generator.BIT_START">BIT_START</a>
@@ -1885,6 +1882,7 @@
<dd id="Python.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../dialects/dialect.html#Dialect.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
<dd id="Python.RESOLVES_IDENTIFIERS_AS_UPPERCASE" class="variable"><a href="../dialects/dialect.html#Dialect.RESOLVES_IDENTIFIERS_AS_UPPERCASE">RESOLVES_IDENTIFIERS_AS_UPPERCASE</a></dd>
<dd id="Python.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../dialects/dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
+ <dd id="Python.DPIPE_IS_STRING_CONCAT" class="variable"><a href="../dialects/dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
<dd id="Python.STRICT_STRING_CONCAT" class="variable"><a href="../dialects/dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
<dd id="Python.NORMALIZE_FUNCTIONS" class="variable"><a href="../dialects/dialect.html#Dialect.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
<dd id="Python.NULL_ORDERING" class="variable"><a href="../dialects/dialect.html#Dialect.NULL_ORDERING">NULL_ORDERING</a></dd>
@@ -2058,7 +2056,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Python.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Python.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Binary">sqlglot.expressions.Binary</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Connector">sqlglot.expressions.Connector</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Dot">sqlglot.expressions.Dot</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Escape">sqlglot.expressions.Escape</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Glob">sqlglot.expressions.Glob</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ILikeAny">sqlglot.expressions.ILikeAny</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Kwarg">sqlglot.expressions.Kwarg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Like">sqlglot.expressions.Like</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LikeAny">sqlglot.expressions.LikeAny</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Overlaps">sqlglot.expressions.Overlaps</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SafeDPipe">sqlglot.expressions.SafeDPipe</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SimilarTo">sqlglot.expressions.SimilarTo</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;: &lt;function _case_sql&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Column">sqlglot.expressions.Column</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distinct">sqlglot.expressions.Distinct</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Interval">sqlglot.expressions.Interval</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Lambda">sqlglot.expressions.Lambda</a>&#39;&gt;: &lt;function _lambda_sql&gt;, &lt;class &#39;<a href="../expressions.html#Not">sqlglot.expressions.Not</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ordered">sqlglot.expressions.Ordered</a>&#39;&gt;: &lt;function _ordered_py&gt;, &lt;class &#39;<a href="../expressions.html#Star">sqlglot.expressions.Star</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Python.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Binary">sqlglot.expressions.Binary</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Connector">sqlglot.expressions.Connector</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Dot">sqlglot.expressions.Dot</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Escape">sqlglot.expressions.Escape</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Glob">sqlglot.expressions.Glob</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ILikeAny">sqlglot.expressions.ILikeAny</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Kwarg">sqlglot.expressions.Kwarg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Like">sqlglot.expressions.Like</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LikeAny">sqlglot.expressions.LikeAny</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Overlaps">sqlglot.expressions.Overlaps</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SafeDPipe">sqlglot.expressions.SafeDPipe</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SimilarTo">sqlglot.expressions.SimilarTo</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;: &lt;function _case_sql&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;: &lt;function _rename&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Column">sqlglot.expressions.Column</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distinct">sqlglot.expressions.Distinct</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Interval">sqlglot.expressions.Interval</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Lambda">sqlglot.expressions.Lambda</a>&#39;&gt;: &lt;function _lambda_sql&gt;, &lt;class &#39;<a href="../expressions.html#Not">sqlglot.expressions.Not</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ordered">sqlglot.expressions.Ordered</a>&#39;&gt;: &lt;function _ordered_py&gt;, &lt;class &#39;<a href="../expressions.html#Star">sqlglot.expressions.Star</a>&#39;&gt;: &lt;function <a href="#Python.Generator">Python.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -2115,26 +2113,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Python.Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Python.Generator.can_identify-253"><a href="#Python.Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Python.Generator.can_identify-254"><a href="#Python.Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Python.Generator.can_identify-255"><a href="#Python.Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Python.Generator.can_identify-256"><a href="#Python.Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Python.Generator.can_identify-257"><a href="#Python.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Python.Generator.can_identify-258"><a href="#Python.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Python.Generator.can_identify-259"><a href="#Python.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Python.Generator.can_identify-260"><a href="#Python.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Python.Generator.can_identify-261"><a href="#Python.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Python.Generator.can_identify-262"><a href="#Python.Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Python.Generator.can_identify-263"><a href="#Python.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Python.Generator.can_identify-264"><a href="#Python.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Python.Generator.can_identify-265"><a href="#Python.Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Python.Generator.can_identify-266"><a href="#Python.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Python.Generator.can_identify-267"><a href="#Python.Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Python.Generator.can_identify-268"><a href="#Python.Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Python.Generator.can_identify-269"><a href="#Python.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Python.Generator.can_identify-270"><a href="#Python.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Python.Generator.can_identify-256"><a href="#Python.Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Python.Generator.can_identify-257"><a href="#Python.Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Python.Generator.can_identify-258"><a href="#Python.Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Python.Generator.can_identify-259"><a href="#Python.Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Python.Generator.can_identify-260"><a href="#Python.Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Python.Generator.can_identify-261"><a href="#Python.Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Python.Generator.can_identify-262"><a href="#Python.Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Python.Generator.can_identify-263"><a href="#Python.Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Python.Generator.can_identify-264"><a href="#Python.Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Python.Generator.can_identify-265"><a href="#Python.Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Python.Generator.can_identify-266"><a href="#Python.Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Python.Generator.can_identify-267"><a href="#Python.Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Python.Generator.can_identify-268"><a href="#Python.Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Python.Generator.can_identify-269"><a href="#Python.Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Python.Generator.can_identify-270"><a href="#Python.Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Python.Generator.can_identify-271"><a href="#Python.Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Python.Generator.can_identify-272"><a href="#Python.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Python.Generator.can_identify-272"><a href="#Python.Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Python.Generator.can_identify-273"><a href="#Python.Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Python.Generator.can_identify-274"><a href="#Python.Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Python.Generator.can_identify-275"><a href="#Python.Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -2205,26 +2203,14 @@ Default: True</li>
</div>
- <div id="Python.Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#39;\\&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#Python.Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Python.Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Python.Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="#Python.Tokenizer">sqlglot.executor.python.Python.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Python.Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Python.Generator.TOKENIZER_CLASS"></a>
@@ -2330,7 +2316,10 @@ Default: True</li>
<dd id="Python.Generator.RETURNING_END" class="variable"><a href="../generator.html#Generator.RETURNING_END">RETURNING_END</a></dd>
<dd id="Python.Generator.COLUMN_JOIN_MARKS_SUPPORTED" class="variable"><a href="../generator.html#Generator.COLUMN_JOIN_MARKS_SUPPORTED">COLUMN_JOIN_MARKS_SUPPORTED</a></dd>
<dd id="Python.Generator.EXTRACT_ALLOWS_QUOTES" class="variable"><a href="../generator.html#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a></dd>
+ <dd id="Python.Generator.TZ_TO_WITH_TIME_ZONE" class="variable"><a href="../generator.html#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a></dd>
+ <dd id="Python.Generator.NVL2_SUPPORTED" class="variable"><a href="../generator.html#Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a></dd>
<dd id="Python.Generator.VALUES_AS_TABLE" class="variable"><a href="../generator.html#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a></dd>
+ <dd id="Python.Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="variable"><a href="../generator.html#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a></dd>
<dd id="Python.Generator.TYPE_MAPPING" class="variable"><a href="../generator.html#Generator.TYPE_MAPPING">TYPE_MAPPING</a></dd>
<dd id="Python.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="Python.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
@@ -2379,6 +2368,7 @@ Default: True</li>
<dd id="Python.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
<dd id="Python.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
<dd id="Python.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Python.Generator.computedcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a></dd>
<dd id="Python.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
<dd id="Python.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
<dd id="Python.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
@@ -2397,7 +2387,7 @@ Default: True</li>
<dd id="Python.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Python.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Python.Generator.rawstring_sql" class="function"><a href="../generator.html#Generator.rawstring_sql">rawstring_sql</a></dd>
- <dd id="Python.Generator.datatypesize_sql" class="function"><a href="../generator.html#Generator.datatypesize_sql">datatypesize_sql</a></dd>
+ <dd id="Python.Generator.datatypeparam_sql" class="function"><a href="../generator.html#Generator.datatypeparam_sql">datatypeparam_sql</a></dd>
<dd id="Python.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Python.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Python.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -2442,6 +2432,7 @@ Default: True</li>
<dd id="Python.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
<dd id="Python.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
<dd id="Python.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Python.Generator.version_sql" class="function"><a href="../generator.html#Generator.version_sql">version_sql</a></dd>
<dd id="Python.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
<dd id="Python.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
<dd id="Python.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
@@ -2450,6 +2441,8 @@ Default: True</li>
<dd id="Python.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
<dd id="Python.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
<dd id="Python.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Python.Generator.connect_sql" class="function"><a href="../generator.html#Generator.connect_sql">connect_sql</a></dd>
+ <dd id="Python.Generator.prior_sql" class="function"><a href="../generator.html#Generator.prior_sql">prior_sql</a></dd>
<dd id="Python.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
<dd id="Python.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
<dd id="Python.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
@@ -2609,6 +2602,8 @@ Default: True</li>
<dd id="Python.Generator.querytransform_sql" class="function"><a href="../generator.html#Generator.querytransform_sql">querytransform_sql</a></dd>
<dd id="Python.Generator.indexconstraintoption_sql" class="function"><a href="../generator.html#Generator.indexconstraintoption_sql">indexconstraintoption_sql</a></dd>
<dd id="Python.Generator.indexcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a></dd>
+ <dd id="Python.Generator.nvl2_sql" class="function"><a href="../generator.html#Generator.nvl2_sql">nvl2_sql</a></dd>
+ <dd id="Python.Generator.comprehension_sql" class="function"><a href="../generator.html#Generator.comprehension_sql">comprehension_sql</a></dd>
</div>
</dl>
diff --git a/docs/sqlglot/executor/table.html b/docs/sqlglot/executor/table.html
index 39563f9..1596a62 100644
--- a/docs/sqlglot/executor/table.html
+++ b/docs/sqlglot/executor/table.html
@@ -147,135 +147,147 @@
</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.helper</span> <span class="kn">import</span> <span class="n">dict_depth</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.schema</span> <span class="kn">import</span> <span class="n">AbstractMappingSchema</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</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.dialects.dialect</span> <span class="kn">import</span> <span class="n">DialectType</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">dict_depth</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">AbstractMappingSchema</span><span class="p">,</span> <span class="n">normalize_name</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 class="k">class</span> <span class="nc">Table</span><span class="p">:</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</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">columns</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="n">column_range</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="k">if</span> <span class="n">rows</span><span class="p">:</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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">columns</span><span class="p">)</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_reader</span> <span class="o">=</span> <span class="n">RangeReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</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-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">+=</span> <span class="n">columns</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">:</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">column_range</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="p">)</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</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">columns</span><span class="p">)</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</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">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="nd">@property</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rows</span><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="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">return</span> <span class="n">TableIter</span><span class="p">(</span><span class="bp">self</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="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="n">index</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">self</span><span class="o">.</span><span class="n">reader</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="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">column</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="p">)</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">widths</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="p">:</span> <span class="nb">len</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">columns</span><span class="p">}</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">lines</span> <span class="o">=</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">column</span> <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-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">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</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">i</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">:</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">break</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</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-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="nb">str</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">widths</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="n">widths</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">columns</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="p">)</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</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">class</span> <span class="nc">Table</span><span class="p">:</span>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</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">columns</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="n">column_range</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="k">if</span> <span class="n">rows</span><span class="p">:</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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">columns</span><span class="p">)</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_reader</span> <span class="o">=</span> <span class="n">RangeReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</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-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">+=</span> <span class="n">columns</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">:</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">column_range</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="p">)</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</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">columns</span><span class="p">)</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</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 class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="nd">@property</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</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="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><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">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rows</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">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="k">return</span> <span class="n">TableIter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="n">index</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">self</span><span class="o">.</span><span class="n">reader</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">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">column</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="p">)</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">widths</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="p">:</span> <span class="nb">len</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">columns</span><span class="p">}</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">lines</span> <span class="o">=</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">column</span> <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-57"><a href="#L-57"><span class="linenos"> 57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">:</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">break</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">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</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-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="nb">str</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">widths</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="n">widths</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">columns</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="p">)</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="p">)</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="k">class</span> <span class="nc">TableIter</span><span class="p">:</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</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">table</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">table</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="bp">self</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</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">table</span><span class="p">):</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</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-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">raise</span> <span class="ne">StopIteration</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="k">class</span> <span class="nc">TableIter</span><span class="p">:</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</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">table</span><span class="p">):</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</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-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">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</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="bp">self</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="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <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-80"><a href="#L-80"><span class="linenos"> 80</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">table</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="bp">self</span><span class="o">.</span><span class="n">table</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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">raise</span> <span class="ne">StopIteration</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">class</span> <span class="nc">RangeReader</span><span class="p">:</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</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">table</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">table</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</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><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">range</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">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</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="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">column</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">)</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
+</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">class</span> <span class="nc">RangeReader</span><span class="p">:</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</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">table</span><span class="p">):</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</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">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">)</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</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="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">column</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</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">class</span> <span class="nc">RowReader</span><span class="p">:</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</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">columns</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">column_range</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="bp">self</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="kc">None</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="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</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="bp">self</span><span class="o">.</span><span class="n">row</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</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><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">class</span> <span class="nc">RowReader</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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">columns</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</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">columns</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 class="n">column</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">column_range</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="p">}</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row</span> <span class="o">=</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">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">row</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]]</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">[</span><span class="n">Table</span><span class="p">]):</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">pass</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</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">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">[</span><span class="n">Table</span><span class="p">]):</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">pass</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a><span class="k">def</span> <span class="nf">ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Tables</span><span class="p">:</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="n">Tables</span><span class="p">(</span><span class="n">_ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
+</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">def</span> <span class="nf">ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tables</span><span class="p">:</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="n">Tables</span><span class="p">(</span><span class="n">_ensure_tables</span><span class="p">(</span><span class="n">d</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-114"><a href="#L-114"><span class="linenos">114</span></a>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="k">def</span> <span class="nf">_ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="p">:</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="n">dict_depth</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="k">def</span> <span class="nf">_ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</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="ow">not</span> <span class="n">d</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="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">depth</span> <span class="o">=</span> <span class="n">dict_depth</span><span class="p">(</span><span class="n">d</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">depth</span> <span class="o">&gt;</span> <span class="mi">1</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="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">_ensure_tables</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</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="n">result</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="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</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="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="p">()</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="nb">tuple</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">c</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">]</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</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 class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">)</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">normalize_name</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="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> <span class="n">_ensure_tables</span><span class="p">(</span><span class="n">v</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-124"><a href="#L-124"><span class="linenos">124</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">d</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="p">}</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">for</span> <span class="n">table_name</span><span class="p">,</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">normalize_name</span><span class="p">(</span><span class="n">table_name</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-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="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">result</span><span class="p">[</span><span class="n">table_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">table</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="p">{</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">normalize_name</span><span class="p">(</span><span class="n">column_name</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">value</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_name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="p">}</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="p">]</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">column_name</span> <span class="k">for</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">table</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">rows</span> <span class="o">=</span> <span class="p">[</span><span class="nb">tuple</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">column_names</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">]</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">result</span><span class="p">[</span><span class="n">table_name</span><span class="p">]</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">column_names</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">)</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -291,64 +303,64 @@
</div>
<a class="headerlink" href="#Table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table-10"><a href="#Table-10"><span class="linenos">10</span></a><span class="k">class</span> <span class="nc">Table</span><span class="p">:</span>
-</span><span id="Table-11"><a href="#Table-11"><span class="linenos">11</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">columns</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Table-12"><a href="#Table-12"><span class="linenos">12</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Table-13"><a href="#Table-13"><span class="linenos">13</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="n">column_range</span>
-</span><span id="Table-14"><a href="#Table-14"><span class="linenos">14</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
-</span><span id="Table-15"><a href="#Table-15"><span class="linenos">15</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Table-16"><a href="#Table-16"><span class="linenos">16</span></a> <span class="k">if</span> <span class="n">rows</span><span class="p">:</span>
-</span><span id="Table-17"><a href="#Table-17"><span class="linenos">17</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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">columns</span><span class="p">)</span>
-</span><span id="Table-18"><a href="#Table-18"><span class="linenos">18</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_reader</span> <span class="o">=</span> <span class="n">RangeReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Table-19"><a href="#Table-19"><span class="linenos">19</span></a>
-</span><span id="Table-20"><a href="#Table-20"><span class="linenos">20</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</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="Table-21"><a href="#Table-21"><span class="linenos">21</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">+=</span> <span class="n">columns</span>
-</span><span id="Table-22"><a href="#Table-22"><span class="linenos">22</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">:</span>
-</span><span id="Table-23"><a href="#Table-23"><span class="linenos">23</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span>
-</span><span id="Table-24"><a href="#Table-24"><span class="linenos">24</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">column_range</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Table-25"><a href="#Table-25"><span class="linenos">25</span></a> <span class="p">)</span>
-</span><span id="Table-26"><a href="#Table-26"><span class="linenos">26</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
-</span><span id="Table-27"><a href="#Table-27"><span class="linenos">27</span></a>
-</span><span id="Table-28"><a href="#Table-28"><span class="linenos">28</span></a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
-</span><span id="Table-29"><a href="#Table-29"><span class="linenos">29</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</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">columns</span><span class="p">)</span>
-</span><span id="Table-30"><a href="#Table-30"><span class="linenos">30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
-</span><span id="Table-31"><a href="#Table-31"><span class="linenos">31</span></a>
-</span><span id="Table-32"><a href="#Table-32"><span class="linenos">32</span></a> <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Table-33"><a href="#Table-33"><span class="linenos">33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Table-34"><a href="#Table-34"><span class="linenos">34</span></a>
-</span><span id="Table-35"><a href="#Table-35"><span class="linenos">35</span></a> <span class="nd">@property</span>
-</span><span id="Table-36"><a href="#Table-36"><span class="linenos">36</span></a> <span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Table-37"><a href="#Table-37"><span class="linenos">37</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Table-38"><a href="#Table-38"><span class="linenos">38</span></a>
-</span><span id="Table-39"><a href="#Table-39"><span class="linenos">39</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Table-40"><a href="#Table-40"><span class="linenos">40</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="p">)</span>
-</span><span id="Table-41"><a href="#Table-41"><span class="linenos">41</span></a>
-</span><span id="Table-42"><a href="#Table-42"><span class="linenos">42</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Table-43"><a href="#Table-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="n">TableIter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Table-44"><a href="#Table-44"><span class="linenos">44</span></a>
-</span><span id="Table-45"><a href="#Table-45"><span class="linenos">45</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">index</span><span class="p">):</span>
-</span><span id="Table-46"><a href="#Table-46"><span class="linenos">46</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
-</span><span id="Table-47"><a href="#Table-47"><span class="linenos">47</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span>
-</span><span id="Table-48"><a href="#Table-48"><span class="linenos">48</span></a>
-</span><span id="Table-49"><a href="#Table-49"><span class="linenos">49</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><span id="Table-50"><a href="#Table-50"><span class="linenos">50</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Table-51"><a href="#Table-51"><span class="linenos">51</span></a> <span class="n">column</span>
-</span><span id="Table-52"><a href="#Table-52"><span class="linenos">52</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Table-53"><a href="#Table-53"><span class="linenos">53</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span>
-</span><span id="Table-54"><a href="#Table-54"><span class="linenos">54</span></a> <span class="p">)</span>
-</span><span id="Table-55"><a href="#Table-55"><span class="linenos">55</span></a> <span class="n">widths</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="p">:</span> <span class="nb">len</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">columns</span><span class="p">}</span>
-</span><span id="Table-56"><a href="#Table-56"><span class="linenos">56</span></a> <span class="n">lines</span> <span class="o">=</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">column</span> <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="Table-57"><a href="#Table-57"><span class="linenos">57</span></a>
-</span><span id="Table-58"><a href="#Table-58"><span class="linenos">58</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Table-59"><a href="#Table-59"><span class="linenos">59</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">:</span>
-</span><span id="Table-60"><a href="#Table-60"><span class="linenos">60</span></a> <span class="k">break</span>
-</span><span id="Table-61"><a href="#Table-61"><span class="linenos">61</span></a>
-</span><span id="Table-62"><a href="#Table-62"><span class="linenos">62</span></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Table-63"><a href="#Table-63"><span class="linenos">63</span></a> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Table-64"><a href="#Table-64"><span class="linenos">64</span></a> <span class="nb">str</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">widths</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="n">widths</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">columns</span>
-</span><span id="Table-65"><a href="#Table-65"><span class="linenos">65</span></a> <span class="p">)</span>
-</span><span id="Table-66"><a href="#Table-66"><span class="linenos">66</span></a> <span class="p">)</span>
-</span><span id="Table-67"><a href="#Table-67"><span class="linenos">67</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table-11"><a href="#Table-11"><span class="linenos">11</span></a><span class="k">class</span> <span class="nc">Table</span><span class="p">:</span>
+</span><span id="Table-12"><a href="#Table-12"><span class="linenos">12</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">columns</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Table-13"><a href="#Table-13"><span class="linenos">13</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Table-14"><a href="#Table-14"><span class="linenos">14</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="n">column_range</span>
+</span><span id="Table-15"><a href="#Table-15"><span class="linenos">15</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
+</span><span id="Table-16"><a href="#Table-16"><span class="linenos">16</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Table-17"><a href="#Table-17"><span class="linenos">17</span></a> <span class="k">if</span> <span class="n">rows</span><span class="p">:</span>
+</span><span id="Table-18"><a href="#Table-18"><span class="linenos">18</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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">columns</span><span class="p">)</span>
+</span><span id="Table-19"><a href="#Table-19"><span class="linenos">19</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_reader</span> <span class="o">=</span> <span class="n">RangeReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Table-20"><a href="#Table-20"><span class="linenos">20</span></a>
+</span><span id="Table-21"><a href="#Table-21"><span class="linenos">21</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</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="Table-22"><a href="#Table-22"><span class="linenos">22</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">+=</span> <span class="n">columns</span>
+</span><span id="Table-23"><a href="#Table-23"><span class="linenos">23</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">:</span>
+</span><span id="Table-24"><a href="#Table-24"><span class="linenos">24</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span>
+</span><span id="Table-25"><a href="#Table-25"><span class="linenos">25</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">column_range</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Table-26"><a href="#Table-26"><span class="linenos">26</span></a> <span class="p">)</span>
+</span><span id="Table-27"><a href="#Table-27"><span class="linenos">27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
+</span><span id="Table-28"><a href="#Table-28"><span class="linenos">28</span></a>
+</span><span id="Table-29"><a href="#Table-29"><span class="linenos">29</span></a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
+</span><span id="Table-30"><a href="#Table-30"><span class="linenos">30</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</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">columns</span><span class="p">)</span>
+</span><span id="Table-31"><a href="#Table-31"><span class="linenos">31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
+</span><span id="Table-32"><a href="#Table-32"><span class="linenos">32</span></a>
+</span><span id="Table-33"><a href="#Table-33"><span class="linenos">33</span></a> <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Table-34"><a href="#Table-34"><span class="linenos">34</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="Table-35"><a href="#Table-35"><span class="linenos">35</span></a>
+</span><span id="Table-36"><a href="#Table-36"><span class="linenos">36</span></a> <span class="nd">@property</span>
+</span><span id="Table-37"><a href="#Table-37"><span class="linenos">37</span></a> <span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Table-38"><a href="#Table-38"><span class="linenos">38</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Table-39"><a href="#Table-39"><span class="linenos">39</span></a>
+</span><span id="Table-40"><a href="#Table-40"><span class="linenos">40</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Table-41"><a href="#Table-41"><span class="linenos">41</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="p">)</span>
+</span><span id="Table-42"><a href="#Table-42"><span class="linenos">42</span></a>
+</span><span id="Table-43"><a href="#Table-43"><span class="linenos">43</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Table-44"><a href="#Table-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="n">TableIter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Table-45"><a href="#Table-45"><span class="linenos">45</span></a>
+</span><span id="Table-46"><a href="#Table-46"><span class="linenos">46</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">index</span><span class="p">):</span>
+</span><span id="Table-47"><a href="#Table-47"><span class="linenos">47</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
+</span><span id="Table-48"><a href="#Table-48"><span class="linenos">48</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span>
+</span><span id="Table-49"><a href="#Table-49"><span class="linenos">49</span></a>
+</span><span id="Table-50"><a href="#Table-50"><span class="linenos">50</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><span id="Table-51"><a href="#Table-51"><span class="linenos">51</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Table-52"><a href="#Table-52"><span class="linenos">52</span></a> <span class="n">column</span>
+</span><span id="Table-53"><a href="#Table-53"><span class="linenos">53</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Table-54"><a href="#Table-54"><span class="linenos">54</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span>
+</span><span id="Table-55"><a href="#Table-55"><span class="linenos">55</span></a> <span class="p">)</span>
+</span><span id="Table-56"><a href="#Table-56"><span class="linenos">56</span></a> <span class="n">widths</span> <span class="o">=</span> <span class="p">{</span><span class="n">column</span><span class="p">:</span> <span class="nb">len</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">columns</span><span class="p">}</span>
+</span><span id="Table-57"><a href="#Table-57"><span class="linenos">57</span></a> <span class="n">lines</span> <span class="o">=</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">column</span> <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="Table-58"><a href="#Table-58"><span class="linenos">58</span></a>
+</span><span id="Table-59"><a href="#Table-59"><span class="linenos">59</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Table-60"><a href="#Table-60"><span class="linenos">60</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">:</span>
+</span><span id="Table-61"><a href="#Table-61"><span class="linenos">61</span></a> <span class="k">break</span>
+</span><span id="Table-62"><a href="#Table-62"><span class="linenos">62</span></a>
+</span><span id="Table-63"><a href="#Table-63"><span class="linenos">63</span></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Table-64"><a href="#Table-64"><span class="linenos">64</span></a> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Table-65"><a href="#Table-65"><span class="linenos">65</span></a> <span class="nb">str</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">column</span><span class="p">])</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">widths</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="n">widths</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">columns</span>
+</span><span id="Table-66"><a href="#Table-66"><span class="linenos">66</span></a> <span class="p">)</span>
+</span><span id="Table-67"><a href="#Table-67"><span class="linenos">67</span></a> <span class="p">)</span>
+</span><span id="Table-68"><a href="#Table-68"><span class="linenos">68</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
</span></pre></div>
@@ -364,14 +376,14 @@
</div>
<a class="headerlink" href="#Table.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table.__init__-11"><a href="#Table.__init__-11"><span class="linenos">11</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">columns</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Table.__init__-12"><a href="#Table.__init__-12"><span class="linenos">12</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Table.__init__-13"><a href="#Table.__init__-13"><span class="linenos">13</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="n">column_range</span>
-</span><span id="Table.__init__-14"><a href="#Table.__init__-14"><span class="linenos">14</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
-</span><span id="Table.__init__-15"><a href="#Table.__init__-15"><span class="linenos">15</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Table.__init__-16"><a href="#Table.__init__-16"><span class="linenos">16</span></a> <span class="k">if</span> <span class="n">rows</span><span class="p">:</span>
-</span><span id="Table.__init__-17"><a href="#Table.__init__-17"><span class="linenos">17</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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">columns</span><span class="p">)</span>
-</span><span id="Table.__init__-18"><a href="#Table.__init__-18"><span class="linenos">18</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_reader</span> <span class="o">=</span> <span class="n">RangeReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table.__init__-12"><a href="#Table.__init__-12"><span class="linenos">12</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">columns</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Table.__init__-13"><a href="#Table.__init__-13"><span class="linenos">13</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Table.__init__-14"><a href="#Table.__init__-14"><span class="linenos">14</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="n">column_range</span>
+</span><span id="Table.__init__-15"><a href="#Table.__init__-15"><span class="linenos">15</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
+</span><span id="Table.__init__-16"><a href="#Table.__init__-16"><span class="linenos">16</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Table.__init__-17"><a href="#Table.__init__-17"><span class="linenos">17</span></a> <span class="k">if</span> <span class="n">rows</span><span class="p">:</span>
+</span><span id="Table.__init__-18"><a href="#Table.__init__-18"><span class="linenos">18</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">])</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">columns</span><span class="p">)</span>
+</span><span id="Table.__init__-19"><a href="#Table.__init__-19"><span class="linenos">19</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_reader</span> <span class="o">=</span> <span class="n">RangeReader</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span></pre></div>
@@ -444,13 +456,13 @@
</div>
<a class="headerlink" href="#Table.add_columns"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table.add_columns-20"><a href="#Table.add_columns-20"><span class="linenos">20</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</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="Table.add_columns-21"><a href="#Table.add_columns-21"><span class="linenos">21</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">+=</span> <span class="n">columns</span>
-</span><span id="Table.add_columns-22"><a href="#Table.add_columns-22"><span class="linenos">22</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">:</span>
-</span><span id="Table.add_columns-23"><a href="#Table.add_columns-23"><span class="linenos">23</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span>
-</span><span id="Table.add_columns-24"><a href="#Table.add_columns-24"><span class="linenos">24</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">column_range</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Table.add_columns-25"><a href="#Table.add_columns-25"><span class="linenos">25</span></a> <span class="p">)</span>
-</span><span id="Table.add_columns-26"><a href="#Table.add_columns-26"><span class="linenos">26</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table.add_columns-21"><a href="#Table.add_columns-21"><span class="linenos">21</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</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="Table.add_columns-22"><a href="#Table.add_columns-22"><span class="linenos">22</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">+=</span> <span class="n">columns</span>
+</span><span id="Table.add_columns-23"><a href="#Table.add_columns-23"><span class="linenos">23</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">:</span>
+</span><span id="Table.add_columns-24"><a href="#Table.add_columns-24"><span class="linenos">24</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span>
+</span><span id="Table.add_columns-25"><a href="#Table.add_columns-25"><span class="linenos">25</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</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">column_range</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Table.add_columns-26"><a href="#Table.add_columns-26"><span class="linenos">26</span></a> <span class="p">)</span>
+</span><span id="Table.add_columns-27"><a href="#Table.add_columns-27"><span class="linenos">27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">RowReader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_range</span><span class="p">)</span>
</span></pre></div>
@@ -468,9 +480,9 @@
</div>
<a class="headerlink" href="#Table.append"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table.append-28"><a href="#Table.append-28"><span class="linenos">28</span></a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
-</span><span id="Table.append-29"><a href="#Table.append-29"><span class="linenos">29</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</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">columns</span><span class="p">)</span>
-</span><span id="Table.append-30"><a href="#Table.append-30"><span class="linenos">30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table.append-29"><a href="#Table.append-29"><span class="linenos">29</span></a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">):</span>
+</span><span id="Table.append-30"><a href="#Table.append-30"><span class="linenos">30</span></a> <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</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">columns</span><span class="p">)</span>
+</span><span id="Table.append-31"><a href="#Table.append-31"><span class="linenos">31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
</span></pre></div>
@@ -488,8 +500,8 @@
</div>
<a class="headerlink" href="#Table.pop"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table.pop-32"><a href="#Table.pop-32"><span class="linenos">32</span></a> <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Table.pop-33"><a href="#Table.pop-33"><span class="linenos">33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table.pop-33"><a href="#Table.pop-33"><span class="linenos">33</span></a> <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Table.pop-34"><a href="#Table.pop-34"><span class="linenos">34</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span></pre></div>
@@ -519,19 +531,19 @@
</div>
<a class="headerlink" href="#TableIter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TableIter-70"><a href="#TableIter-70"><span class="linenos">70</span></a><span class="k">class</span> <span class="nc">TableIter</span><span class="p">:</span>
-</span><span id="TableIter-71"><a href="#TableIter-71"><span class="linenos">71</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">table</span><span class="p">):</span>
-</span><span id="TableIter-72"><a href="#TableIter-72"><span class="linenos">72</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="TableIter-73"><a href="#TableIter-73"><span class="linenos">73</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="TableIter-74"><a href="#TableIter-74"><span class="linenos">74</span></a>
-</span><span id="TableIter-75"><a href="#TableIter-75"><span class="linenos">75</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="TableIter-76"><a href="#TableIter-76"><span class="linenos">76</span></a> <span class="k">return</span> <span class="bp">self</span>
-</span><span id="TableIter-77"><a href="#TableIter-77"><span class="linenos">77</span></a>
-</span><span id="TableIter-78"><a href="#TableIter-78"><span class="linenos">78</span></a> <span class="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="TableIter-79"><a href="#TableIter-79"><span class="linenos">79</span></a> <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="TableIter-80"><a href="#TableIter-80"><span class="linenos">80</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">table</span><span class="p">):</span>
-</span><span id="TableIter-81"><a href="#TableIter-81"><span class="linenos">81</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</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="TableIter-82"><a href="#TableIter-82"><span class="linenos">82</span></a> <span class="k">raise</span> <span class="ne">StopIteration</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TableIter-71"><a href="#TableIter-71"><span class="linenos">71</span></a><span class="k">class</span> <span class="nc">TableIter</span><span class="p">:</span>
+</span><span id="TableIter-72"><a href="#TableIter-72"><span class="linenos">72</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">table</span><span class="p">):</span>
+</span><span id="TableIter-73"><a href="#TableIter-73"><span class="linenos">73</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="TableIter-74"><a href="#TableIter-74"><span class="linenos">74</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="TableIter-75"><a href="#TableIter-75"><span class="linenos">75</span></a>
+</span><span id="TableIter-76"><a href="#TableIter-76"><span class="linenos">76</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="TableIter-77"><a href="#TableIter-77"><span class="linenos">77</span></a> <span class="k">return</span> <span class="bp">self</span>
+</span><span id="TableIter-78"><a href="#TableIter-78"><span class="linenos">78</span></a>
+</span><span id="TableIter-79"><a href="#TableIter-79"><span class="linenos">79</span></a> <span class="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="TableIter-80"><a href="#TableIter-80"><span class="linenos">80</span></a> <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="TableIter-81"><a href="#TableIter-81"><span class="linenos">81</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">table</span><span class="p">):</span>
+</span><span id="TableIter-82"><a href="#TableIter-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</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="TableIter-83"><a href="#TableIter-83"><span class="linenos">83</span></a> <span class="k">raise</span> <span class="ne">StopIteration</span>
</span></pre></div>
@@ -547,9 +559,9 @@
</div>
<a class="headerlink" href="#TableIter.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TableIter.__init__-71"><a href="#TableIter.__init__-71"><span class="linenos">71</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">table</span><span class="p">):</span>
-</span><span id="TableIter.__init__-72"><a href="#TableIter.__init__-72"><span class="linenos">72</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="TableIter.__init__-73"><a href="#TableIter.__init__-73"><span class="linenos">73</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TableIter.__init__-72"><a href="#TableIter.__init__-72"><span class="linenos">72</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">table</span><span class="p">):</span>
+</span><span id="TableIter.__init__-73"><a href="#TableIter.__init__-73"><span class="linenos">73</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="TableIter.__init__-74"><a href="#TableIter.__init__-74"><span class="linenos">74</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></pre></div>
@@ -590,16 +602,16 @@
</div>
<a class="headerlink" href="#RangeReader"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RangeReader-85"><a href="#RangeReader-85"><span class="linenos">85</span></a><span class="k">class</span> <span class="nc">RangeReader</span><span class="p">:</span>
-</span><span id="RangeReader-86"><a href="#RangeReader-86"><span class="linenos">86</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">table</span><span class="p">):</span>
-</span><span id="RangeReader-87"><a href="#RangeReader-87"><span class="linenos">87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="RangeReader-88"><a href="#RangeReader-88"><span class="linenos">88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="RangeReader-89"><a href="#RangeReader-89"><span class="linenos">89</span></a>
-</span><span id="RangeReader-90"><a href="#RangeReader-90"><span class="linenos">90</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="RangeReader-91"><a href="#RangeReader-91"><span class="linenos">91</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">)</span>
-</span><span id="RangeReader-92"><a href="#RangeReader-92"><span class="linenos">92</span></a>
-</span><span id="RangeReader-93"><a href="#RangeReader-93"><span class="linenos">93</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">column</span><span class="p">):</span>
-</span><span id="RangeReader-94"><a href="#RangeReader-94"><span class="linenos">94</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">column</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RangeReader-86"><a href="#RangeReader-86"><span class="linenos">86</span></a><span class="k">class</span> <span class="nc">RangeReader</span><span class="p">:</span>
+</span><span id="RangeReader-87"><a href="#RangeReader-87"><span class="linenos">87</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">table</span><span class="p">):</span>
+</span><span id="RangeReader-88"><a href="#RangeReader-88"><span class="linenos">88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="RangeReader-89"><a href="#RangeReader-89"><span class="linenos">89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="RangeReader-90"><a href="#RangeReader-90"><span class="linenos">90</span></a>
+</span><span id="RangeReader-91"><a href="#RangeReader-91"><span class="linenos">91</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="RangeReader-92"><a href="#RangeReader-92"><span class="linenos">92</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">)</span>
+</span><span id="RangeReader-93"><a href="#RangeReader-93"><span class="linenos">93</span></a>
+</span><span id="RangeReader-94"><a href="#RangeReader-94"><span class="linenos">94</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">column</span><span class="p">):</span>
+</span><span id="RangeReader-95"><a href="#RangeReader-95"><span class="linenos">95</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">column</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">)</span>
</span></pre></div>
@@ -615,9 +627,9 @@
</div>
<a class="headerlink" href="#RangeReader.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RangeReader.__init__-86"><a href="#RangeReader.__init__-86"><span class="linenos">86</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">table</span><span class="p">):</span>
-</span><span id="RangeReader.__init__-87"><a href="#RangeReader.__init__-87"><span class="linenos">87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="RangeReader.__init__-88"><a href="#RangeReader.__init__-88"><span class="linenos">88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RangeReader.__init__-87"><a href="#RangeReader.__init__-87"><span class="linenos">87</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">table</span><span class="p">):</span>
+</span><span id="RangeReader.__init__-88"><a href="#RangeReader.__init__-88"><span class="linenos">88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="RangeReader.__init__-89"><a href="#RangeReader.__init__-89"><span class="linenos">89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></pre></div>
@@ -658,15 +670,15 @@
</div>
<a class="headerlink" href="#RowReader"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RowReader-97"><a href="#RowReader-97"><span class="linenos"> 97</span></a><span class="k">class</span> <span class="nc">RowReader</span><span class="p">:</span>
-</span><span id="RowReader-98"><a href="#RowReader-98"><span class="linenos"> 98</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">columns</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="RowReader-99"><a href="#RowReader-99"><span class="linenos"> 99</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RowReader-100"><a href="#RowReader-100"><span class="linenos">100</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">column_range</span>
-</span><span id="RowReader-101"><a href="#RowReader-101"><span class="linenos">101</span></a> <span class="p">}</span>
-</span><span id="RowReader-102"><a href="#RowReader-102"><span class="linenos">102</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="RowReader-103"><a href="#RowReader-103"><span class="linenos">103</span></a>
-</span><span id="RowReader-104"><a href="#RowReader-104"><span class="linenos">104</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">column</span><span class="p">):</span>
-</span><span id="RowReader-105"><a href="#RowReader-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">row</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowReader-98"><a href="#RowReader-98"><span class="linenos"> 98</span></a><span class="k">class</span> <span class="nc">RowReader</span><span class="p">:</span>
+</span><span id="RowReader-99"><a href="#RowReader-99"><span class="linenos"> 99</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">columns</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="RowReader-100"><a href="#RowReader-100"><span class="linenos">100</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RowReader-101"><a href="#RowReader-101"><span class="linenos">101</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">column_range</span>
+</span><span id="RowReader-102"><a href="#RowReader-102"><span class="linenos">102</span></a> <span class="p">}</span>
+</span><span id="RowReader-103"><a href="#RowReader-103"><span class="linenos">103</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="RowReader-104"><a href="#RowReader-104"><span class="linenos">104</span></a>
+</span><span id="RowReader-105"><a href="#RowReader-105"><span class="linenos">105</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">column</span><span class="p">):</span>
+</span><span id="RowReader-106"><a href="#RowReader-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">row</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]]</span>
</span></pre></div>
@@ -682,11 +694,11 @@
</div>
<a class="headerlink" href="#RowReader.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RowReader.__init__-98"><a href="#RowReader.__init__-98"><span class="linenos"> 98</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">columns</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="RowReader.__init__-99"><a href="#RowReader.__init__-99"><span class="linenos"> 99</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RowReader.__init__-100"><a href="#RowReader.__init__-100"><span class="linenos">100</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">column_range</span>
-</span><span id="RowReader.__init__-101"><a href="#RowReader.__init__-101"><span class="linenos">101</span></a> <span class="p">}</span>
-</span><span id="RowReader.__init__-102"><a href="#RowReader.__init__-102"><span class="linenos">102</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowReader.__init__-99"><a href="#RowReader.__init__-99"><span class="linenos"> 99</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">columns</span><span class="p">,</span> <span class="n">column_range</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="RowReader.__init__-100"><a href="#RowReader.__init__-100"><span class="linenos">100</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RowReader.__init__-101"><a href="#RowReader.__init__-101"><span class="linenos">101</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">column_range</span> <span class="ow">or</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">column_range</span>
+</span><span id="RowReader.__init__-102"><a href="#RowReader.__init__-102"><span class="linenos">102</span></a> <span class="p">}</span>
+</span><span id="RowReader.__init__-103"><a href="#RowReader.__init__-103"><span class="linenos">103</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
@@ -727,8 +739,8 @@
</div>
<a class="headerlink" href="#Tables"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tables-108"><a href="#Tables-108"><span class="linenos">108</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">[</span><span class="n">Table</span><span class="p">]):</span>
-</span><span id="Tables-109"><a href="#Tables-109"><span class="linenos">109</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tables-109"><a href="#Tables-109"><span class="linenos">109</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">[</span><span class="n">Table</span><span class="p">]):</span>
+</span><span id="Tables-110"><a href="#Tables-110"><span class="linenos">110</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -776,14 +788,14 @@ For example, a generic mapping type might be defined as::</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">ensure_tables</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">d</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Tables">sqlglot.executor.table.Tables</a></span>:</span></span>
+ <span class="name">ensure_tables</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</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="#Tables">sqlglot.executor.table.Tables</a></span>:</span></span>
<label class="view-source-button" for="ensure_tables-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ensure_tables"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_tables-112"><a href="#ensure_tables-112"><span class="linenos">112</span></a><span class="k">def</span> <span class="nf">ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Tables</span><span class="p">:</span>
-</span><span id="ensure_tables-113"><a href="#ensure_tables-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="n">Tables</span><span class="p">(</span><span class="n">_ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_tables-113"><a href="#ensure_tables-113"><span class="linenos">113</span></a><span class="k">def</span> <span class="nf">ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tables</span><span class="p">:</span>
+</span><span id="ensure_tables-114"><a href="#ensure_tables-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="n">Tables</span><span class="p">(</span><span class="n">_ensure_tables</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">))</span>
</span></pre></div>
diff --git a/docs/sqlglot/expressions.html b/docs/sqlglot/expressions.html
index a936505..d362c4c 100644
--- a/docs/sqlglot/expressions.html
+++ b/docs/sqlglot/expressions.html
@@ -624,6 +624,18 @@
</li>
<li>
+ <a class="class" href="#Comprehension">Comprehension</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Comprehension.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#Comprehension.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#MergeTreeTTLAction">MergeTreeTTLAction</a>
<ul class="memberlist">
<li>
@@ -726,6 +738,15 @@
</li>
<li>
+ <a class="class" href="#ClusteredColumnConstraint">ClusteredColumnConstraint</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#ClusteredColumnConstraint.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#CollateColumnConstraint">CollateColumnConstraint</a>
<ul class="memberlist">
<li>
@@ -816,6 +837,27 @@
</li>
<li>
+ <a class="class" href="#NonClusteredColumnConstraint">NonClusteredColumnConstraint</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#NonClusteredColumnConstraint.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#NotForReplicationColumnConstraint">NotForReplicationColumnConstraint</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#NotForReplicationColumnConstraint.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#NotForReplicationColumnConstraint.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#NotNullColumnConstraint">NotNullColumnConstraint</a>
<ul class="memberlist">
<li>
@@ -891,6 +933,18 @@
</li>
<li>
+ <a class="class" href="#ComputedColumnConstraint">ComputedColumnConstraint</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#ComputedColumnConstraint.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#ComputedColumnConstraint.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#Constraint">Constraint</a>
<ul class="memberlist">
<li>
@@ -957,6 +1011,27 @@
</li>
<li>
+ <a class="class" href="#Connect">Connect</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Connect.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#Connect.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#Prior">Prior</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Prior.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#Directory">Directory</a>
<ul class="memberlist">
<li>
@@ -1800,10 +1875,22 @@
</li>
<li>
+ <a class="class" href="#OnProperty">OnProperty</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#OnProperty.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#OnProperty.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#OnCommitProperty">OnCommitProperty</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#OnCommitProperty.arg_type">arg_type</a>
+ <a class="variable" href="#OnCommitProperty.arg_types">arg_types</a>
</li>
<li>
<a class="variable" href="#OnCommitProperty.key">key</a>
@@ -2142,6 +2229,9 @@
<a class="variable" href="#Subqueryable.named_selects">named_selects</a>
</li>
<li>
+ <a class="function" href="#Subqueryable.select">select</a>
+ </li>
+ <li>
<a class="function" href="#Subqueryable.with_">with_</a>
</li>
<li>
@@ -2208,18 +2298,6 @@
</li>
<li>
- <a class="class" href="#SystemTime">SystemTime</a>
- <ul class="memberlist">
- <li>
- <a class="variable" href="#SystemTime.arg_types">arg_types</a>
- </li>
- <li>
- <a class="variable" href="#SystemTime.key">key</a>
- </li>
- </ul>
-
- </li>
- <li>
<a class="class" href="#Union">Union</a>
<ul class="memberlist">
<li>
@@ -2316,6 +2394,18 @@
</li>
<li>
+ <a class="class" href="#Version">Version</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Version.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#Version.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#Schema">Schema</a>
<ul class="memberlist">
<li>
@@ -2424,6 +2514,12 @@
<a class="function" href="#Subquery.unnest">unnest</a>
</li>
<li>
+ <a class="function" href="#Subquery.unwrap">unwrap</a>
+ </li>
+ <li>
+ <a class="variable" href="#Subquery.is_wrapper">is_wrapper</a>
+ </li>
+ <li>
<a class="variable" href="#Subquery.is_star">is_star</a>
</li>
<li>
@@ -2583,13 +2679,13 @@
</li>
<li>
- <a class="class" href="#DataTypeSize">DataTypeSize</a>
+ <a class="class" href="#DataTypeParam">DataTypeParam</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#DataTypeSize.arg_types">arg_types</a>
+ <a class="variable" href="#DataTypeParam.arg_types">arg_types</a>
</li>
<li>
- <a class="variable" href="#DataTypeSize.key">key</a>
+ <a class="variable" href="#DataTypeParam.key">key</a>
</li>
</ul>
@@ -2631,55 +2727,34 @@
<a class="variable" href="#DataType.Type.DATE">DATE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.DATETIME">DATETIME</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.DATETIME64">DATETIME64</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.ENUM">ENUM</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.INT4RANGE">INT4RANGE</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.INT4MULTIRANGE">INT4MULTIRANGE</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.INT8RANGE">INT8RANGE</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.INT8MULTIRANGE">INT8MULTIRANGE</a>
- </li>
- <li>
- <a class="variable" href="#DataType.Type.NUMRANGE">NUMRANGE</a>
+ <a class="variable" href="#DataType.Type.DATEMULTIRANGE">DATEMULTIRANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.NUMMULTIRANGE">NUMMULTIRANGE</a>
+ <a class="variable" href="#DataType.Type.DATERANGE">DATERANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.TSRANGE">TSRANGE</a>
+ <a class="variable" href="#DataType.Type.DATETIME">DATETIME</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.TSMULTIRANGE">TSMULTIRANGE</a>
+ <a class="variable" href="#DataType.Type.DATETIME64">DATETIME64</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.TSTZRANGE">TSTZRANGE</a>
+ <a class="variable" href="#DataType.Type.DECIMAL">DECIMAL</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.TSTZMULTIRANGE">TSTZMULTIRANGE</a>
+ <a class="variable" href="#DataType.Type.DOUBLE">DOUBLE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.DATERANGE">DATERANGE</a>
+ <a class="variable" href="#DataType.Type.ENUM">ENUM</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.DATEMULTIRANGE">DATEMULTIRANGE</a>
+ <a class="variable" href="#DataType.Type.ENUM8">ENUM8</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.DECIMAL">DECIMAL</a>
+ <a class="variable" href="#DataType.Type.ENUM16">ENUM16</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.DOUBLE">DOUBLE</a>
+ <a class="variable" href="#DataType.Type.FIXEDSTRING">FIXEDSTRING</a>
</li>
<li>
<a class="variable" href="#DataType.Type.FLOAT">FLOAT</a>
@@ -2703,24 +2778,36 @@
<a class="variable" href="#DataType.Type.INET">INET</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.IPADDRESS">IPADDRESS</a>
+ <a class="variable" href="#DataType.Type.INT">INT</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.IPPREFIX">IPPREFIX</a>
+ <a class="variable" href="#DataType.Type.INT128">INT128</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.INT">INT</a>
+ <a class="variable" href="#DataType.Type.INT256">INT256</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.INT128">INT128</a>
+ <a class="variable" href="#DataType.Type.INT4MULTIRANGE">INT4MULTIRANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.INT256">INT256</a>
+ <a class="variable" href="#DataType.Type.INT4RANGE">INT4RANGE</a>
+ </li>
+ <li>
+ <a class="variable" href="#DataType.Type.INT8MULTIRANGE">INT8MULTIRANGE</a>
+ </li>
+ <li>
+ <a class="variable" href="#DataType.Type.INT8RANGE">INT8RANGE</a>
</li>
<li>
<a class="variable" href="#DataType.Type.INTERVAL">INTERVAL</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.IPADDRESS">IPADDRESS</a>
+ </li>
+ <li>
+ <a class="variable" href="#DataType.Type.IPPREFIX">IPPREFIX</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.JSON">JSON</a>
</li>
<li>
@@ -2733,12 +2820,18 @@
<a class="variable" href="#DataType.Type.LONGTEXT">LONGTEXT</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.LOWCARDINALITY">LOWCARDINALITY</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.MAP">MAP</a>
</li>
<li>
<a class="variable" href="#DataType.Type.MEDIUMBLOB">MEDIUMBLOB</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.MEDIUMINT">MEDIUMINT</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.MEDIUMTEXT">MEDIUMTEXT</a>
</li>
<li>
@@ -2748,12 +2841,21 @@
<a class="variable" href="#DataType.Type.NCHAR">NCHAR</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.NESTED">NESTED</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.NULL">NULL</a>
</li>
<li>
<a class="variable" href="#DataType.Type.NULLABLE">NULLABLE</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.NUMMULTIRANGE">NUMMULTIRANGE</a>
+ </li>
+ <li>
+ <a class="variable" href="#DataType.Type.NUMRANGE">NUMRANGE</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.NVARCHAR">NVARCHAR</a>
</li>
<li>
@@ -2790,31 +2892,37 @@
<a class="variable" href="#DataType.Type.TIME">TIME</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.TIMESTAMP">TIMESTAMP</a>
+ <a class="variable" href="#DataType.Type.TIMETZ">TIMETZ</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.TIMESTAMPTZ">TIMESTAMPTZ</a>
+ <a class="variable" href="#DataType.Type.TIMESTAMP">TIMESTAMP</a>
</li>
<li>
<a class="variable" href="#DataType.Type.TIMESTAMPLTZ">TIMESTAMPLTZ</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.TIMESTAMPTZ">TIMESTAMPTZ</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.TINYINT">TINYINT</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.UBIGINT">UBIGINT</a>
+ <a class="variable" href="#DataType.Type.TSMULTIRANGE">TSMULTIRANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.UINT">UINT</a>
+ <a class="variable" href="#DataType.Type.TSRANGE">TSRANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.USMALLINT">USMALLINT</a>
+ <a class="variable" href="#DataType.Type.TSTZMULTIRANGE">TSTZMULTIRANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.UTINYINT">UTINYINT</a>
+ <a class="variable" href="#DataType.Type.TSTZRANGE">TSTZRANGE</a>
</li>
<li>
- <a class="variable" href="#DataType.Type.UNKNOWN">UNKNOWN</a>
+ <a class="variable" href="#DataType.Type.UBIGINT">UBIGINT</a>
+ </li>
+ <li>
+ <a class="variable" href="#DataType.Type.UINT">UINT</a>
</li>
<li>
<a class="variable" href="#DataType.Type.UINT128">UINT128</a>
@@ -2826,9 +2934,18 @@
<a class="variable" href="#DataType.Type.UNIQUEIDENTIFIER">UNIQUEIDENTIFIER</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.UNKNOWN">UNKNOWN</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.USERDEFINED">USERDEFINED</a>
</li>
<li>
+ <a class="variable" href="#DataType.Type.USMALLINT">USMALLINT</a>
+ </li>
+ <li>
+ <a class="variable" href="#DataType.Type.UTINYINT">UTINYINT</a>
+ </li>
+ <li>
<a class="variable" href="#DataType.Type.UUID">UUID</a>
</li>
<li>
@@ -2843,6 +2960,9 @@
<li>
<a class="variable" href="#DataType.Type.XML">XML</a>
</li>
+ <li>
+ <a class="variable" href="#DataType.Type.YEAR">YEAR</a>
+ </li>
</ul>
</li>
@@ -2862,9 +2982,6 @@
<a class="variable" href="#DataType.TEMPORAL_TYPES">TEMPORAL_TYPES</a>
</li>
<li>
- <a class="variable" href="#DataType.META_TYPES">META_TYPES</a>
- </li>
- <li>
<a class="function" href="#DataType.build">build</a>
</li>
<li>
@@ -3543,6 +3660,30 @@
</li>
<li>
+ <a class="class" href="#IntervalYearToMonthSpan">IntervalYearToMonthSpan</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#IntervalYearToMonthSpan.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#IntervalYearToMonthSpan.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#IntervalDayToSecondSpan">IntervalDayToSecondSpan</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#IntervalDayToSecondSpan.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#IntervalDayToSecondSpan.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#Interval">Interval</a>
<ul class="memberlist">
<li>
@@ -3876,6 +4017,30 @@
</li>
<li>
+ <a class="class" href="#First">First</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#First.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#First.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#Last">Last</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Last.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#Last.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#Case">Case</a>
<ul class="memberlist">
<li>
@@ -3918,31 +4083,31 @@
</li>
<li>
- <a class="class" href="#CastToStrType">CastToStrType</a>
+ <a class="class" href="#TryCast">TryCast</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#CastToStrType.arg_types">arg_types</a>
- </li>
- <li>
- <a class="variable" href="#CastToStrType.key">key</a>
+ <a class="variable" href="#TryCast.key">key</a>
</li>
</ul>
</li>
<li>
- <a class="class" href="#Collate">Collate</a>
+ <a class="class" href="#CastToStrType">CastToStrType</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Collate.key">key</a>
+ <a class="variable" href="#CastToStrType.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#CastToStrType.key">key</a>
</li>
</ul>
</li>
<li>
- <a class="class" href="#TryCast">TryCast</a>
+ <a class="class" href="#Collate">Collate</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#TryCast.key">key</a>
+ <a class="variable" href="#Collate.key">key</a>
</li>
</ul>
@@ -5298,6 +5463,18 @@
</li>
<li>
+ <a class="class" href="#StrToMap">StrToMap</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#StrToMap.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#StrToMap.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#NumberToStr">NumberToStr</a>
<ul class="memberlist">
<li>
@@ -5349,6 +5526,18 @@
</li>
<li>
+ <a class="class" href="#Stuff">Stuff</a>
+ <ul class="memberlist">
+ <li>
+ <a class="variable" href="#Stuff.arg_types">arg_types</a>
+ </li>
+ <li>
+ <a class="variable" href="#Stuff.key">key</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
<a class="class" href="#Sum">Sum</a>
<ul class="memberlist">
<li>
@@ -6863,5048 +7052,5225 @@ SQL expressions, such as <code><a href="#select">sqlglot.expressions.select</a><
</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</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-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="s2">&quot;when&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</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-1038"><a href="#L-1038"><span class="linenos">1038</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-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="p">}</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="s2">&quot;shallow&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;expression&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="p">}</span>
</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a><span class="k">class</span> <span class="nc">Describe</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1044"><a href="#L-1044"><span class="linenos">1044</span></a>
+</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">class</span> <span class="nc">Describe</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="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-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="k">pass</span>
-</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a>
+</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">Pragma</span><span class="p">(</span><span class="n">Expression</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-1050"><a href="#L-1050"><span class="linenos">1050</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-1051"><a href="#L-1051"><span class="linenos">1051</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;unset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;tag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a>
+</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">Set</span><span class="p">(</span><span class="n">Expression</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</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 class="s2">&quot;tag&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-1054"><a href="#L-1054"><span class="linenos">1054</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-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</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-1057"><a href="#L-1057"><span class="linenos">1057</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-1058"><a href="#L-1058"><span class="linenos">1058</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-1059"><a href="#L-1059"><span class="linenos">1059</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-1060"><a href="#L-1060"><span class="linenos">1060</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-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="p">}</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a>
+</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="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-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</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-1058"><a href="#L-1058"><span class="linenos">1058</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-1059"><a href="#L-1059"><span class="linenos">1059</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-1060"><a href="#L-1060"><span class="linenos">1060</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-1061"><a href="#L-1061"><span class="linenos">1061</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-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="p">}</span>
</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a><span class="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-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</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-1067"><a href="#L-1067"><span class="linenos">1067</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-1068"><a href="#L-1068"><span class="linenos">1068</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-1069"><a href="#L-1069"><span class="linenos">1069</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-1070"><a href="#L-1070"><span class="linenos">1070</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-1071"><a href="#L-1071"><span class="linenos">1071</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-1072"><a href="#L-1072"><span class="linenos">1072</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-1073"><a href="#L-1073"><span class="linenos">1073</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-1074"><a href="#L-1074"><span class="linenos">1074</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-1075"><a href="#L-1075"><span class="linenos">1075</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-1076"><a href="#L-1076"><span class="linenos">1076</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-1077"><a href="#L-1077"><span class="linenos">1077</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-1078"><a href="#L-1078"><span class="linenos">1078</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-1079"><a href="#L-1079"><span class="linenos">1079</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-1080"><a href="#L-1080"><span class="linenos">1080</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-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="p">}</span>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a>
+</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">class</span> <span class="nc">Show</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</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-1068"><a href="#L-1068"><span class="linenos">1068</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-1069"><a href="#L-1069"><span class="linenos">1069</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-1070"><a href="#L-1070"><span class="linenos">1070</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-1071"><a href="#L-1071"><span class="linenos">1071</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-1072"><a href="#L-1072"><span class="linenos">1072</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-1073"><a href="#L-1073"><span class="linenos">1073</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-1074"><a href="#L-1074"><span class="linenos">1074</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-1075"><a href="#L-1075"><span class="linenos">1075</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-1076"><a href="#L-1076"><span class="linenos">1076</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-1077"><a href="#L-1077"><span class="linenos">1077</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-1078"><a href="#L-1078"><span class="linenos">1078</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-1079"><a href="#L-1079"><span class="linenos">1079</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-1080"><a href="#L-1080"><span class="linenos">1080</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-1081"><a href="#L-1081"><span class="linenos">1081</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-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="p">}</span>
</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">UserDefinedFunction</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;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-1086"><a href="#L-1086"><span class="linenos">1086</span></a>
+</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">class</span> <span class="nc">UserDefinedFunction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1086"><a href="#L-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;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-1087"><a href="#L-1087"><span class="linenos">1087</span></a>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</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-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1090"><a href="#L-1090"><span class="linenos">1090</span></a>
+</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">class</span> <span class="nc">CharacterSet</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="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-1093"><a href="#L-1093"><span class="linenos">1093</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-1094"><a href="#L-1094"><span class="linenos">1094</span></a>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="nd">@property</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</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-1097"><a href="#L-1097"><span class="linenos">1097</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-1098"><a href="#L-1098"><span class="linenos">1098</span></a>
+</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a><span class="k">class</span> <span class="nc">With</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</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-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="nd">@property</span>
+</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</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-1098"><a href="#L-1098"><span class="linenos">1098</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-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">class</span> <span class="nc">WithinGroup</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1102"><a href="#L-1102"><span class="linenos">1102</span></a>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a>
+</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a><span class="k">class</span> <span class="nc">WithinGroup</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1103"><a href="#L-1103"><span class="linenos">1103</span></a>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</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-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1106"><a href="#L-1106"><span class="linenos">1106</span></a>
+</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 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-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1107"><a href="#L-1107"><span class="linenos">1107</span></a>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a><span class="k">class</span> <span class="nc">TableAlias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="n">arg_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-1110"><a href="#L-1110"><span class="linenos">1110</span></a>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="nd">@property</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</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-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-1114"><a href="#L-1114"><span class="linenos">1114</span></a>
+</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 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-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="n">arg_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-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="nd">@property</span>
+</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</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-1114"><a href="#L-1114"><span class="linenos">1114</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-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">class</span> <span class="nc">BitString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="k">pass</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a><span class="k">class</span> <span class="nc">BitString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="k">pass</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">class</span> <span class="nc">HexString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">pass</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a><span class="k">class</span> <span class="nc">HexString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="k">pass</span>
</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</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-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="k">pass</span>
-</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a><span class="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-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="k">pass</span>
</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a>
-</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a><span class="k">class</span> <span class="nc">RawString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">pass</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a><span class="k">class</span> <span class="nc">RawString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="k">pass</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">class</span> <span class="nc">Column</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="nd">@property</span>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</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-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="nd">@property</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</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-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="nd">@property</span>
-</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</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-1145"><a href="#L-1145"><span class="linenos">1145</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-1146"><a href="#L-1146"><span class="linenos">1146</span></a>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="nd">@property</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</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-1149"><a href="#L-1149"><span class="linenos">1149</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-1150"><a href="#L-1150"><span class="linenos">1150</span></a>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="nd">@property</span>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</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-1153"><a href="#L-1153"><span class="linenos">1153</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-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Identifier</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">part</span><span class="p">])</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">if</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="n">part</span><span class="p">)</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <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">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-1161"><a href="#L-1161"><span class="linenos">1161</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-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</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-1164"><a href="#L-1164"><span class="linenos">1164</span></a>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
-</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</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-1167"><a href="#L-1167"><span class="linenos">1167</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-1168"><a href="#L-1168"><span class="linenos">1168</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-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">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-1171"><a href="#L-1171"><span class="linenos">1171</span></a>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a><span class="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-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="nd">@property</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</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-1138"><a href="#L-1138"><span class="linenos">1138</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-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="nd">@property</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</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-1142"><a href="#L-1142"><span class="linenos">1142</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-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="nd">@property</span>
+</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</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-1146"><a href="#L-1146"><span class="linenos">1146</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-1147"><a href="#L-1147"><span class="linenos">1147</span></a>
+</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="nd">@property</span>
+</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</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-1150"><a href="#L-1150"><span class="linenos">1150</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-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="nd">@property</span>
+</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</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-1154"><a href="#L-1154"><span class="linenos">1154</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-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Identifier</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">part</span><span class="p">])</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="k">if</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="n">part</span><span class="p">)</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="p">]</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</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-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</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-1164"><a href="#L-1164"><span class="linenos">1164</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-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">while</span> <span class="n">parent</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="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-1168"><a href="#L-1168"><span class="linenos">1168</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-1169"><a href="#L-1169"><span class="linenos">1169</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-1170"><a href="#L-1170"><span class="linenos">1170</span></a>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">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-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="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-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="n">arg_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-1175"><a href="#L-1175"><span class="linenos">1175</span></a>
+</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">ColumnPosition</span><span class="p">(</span><span class="n">Expression</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;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-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">class</span> <span class="nc">ColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</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-1180"><a href="#L-1180"><span class="linenos">1180</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-1181"><a href="#L-1181"><span class="linenos">1181</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-1182"><a href="#L-1182"><span class="linenos">1182</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-1183"><a href="#L-1183"><span class="linenos">1183</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-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <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 class="nd">@property</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="k">def</span> <span class="nf">constraints</span><span class="p">(</span><span class="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">ColumnConstraint</span><span class="p">]:</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</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;constraints&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</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="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-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</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-1181"><a href="#L-1181"><span class="linenos">1181</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-1182"><a href="#L-1182"><span class="linenos">1182</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-1183"><a href="#L-1183"><span class="linenos">1183</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-1184"><a href="#L-1184"><span class="linenos">1184</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-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="p">}</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="nd">@property</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="k">def</span> <span class="nf">constraints</span><span class="p">(</span><span class="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">ColumnConstraint</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="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;constraints&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</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">class</span> <span class="nc">AlterColumn</span><span class="p">(</span><span class="n">Expression</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="o">=</span> <span class="p">{</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</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-1194"><a href="#L-1194"><span class="linenos">1194</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-1195"><a href="#L-1195"><span class="linenos">1195</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-1196"><a href="#L-1196"><span class="linenos">1196</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-1197"><a href="#L-1197"><span class="linenos">1197</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-1198"><a href="#L-1198"><span class="linenos">1198</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-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-1191"><a href="#L-1191"><span class="linenos">1191</span></a>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a><span class="k">class</span> <span class="nc">AlterColumn</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">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</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-1195"><a href="#L-1195"><span class="linenos">1195</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-1196"><a href="#L-1196"><span class="linenos">1196</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-1197"><a href="#L-1197"><span class="linenos">1197</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-1198"><a href="#L-1198"><span class="linenos">1198</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-1199"><a href="#L-1199"><span class="linenos">1199</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-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <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">class</span> <span class="nc">RenameTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="k">pass</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</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">RenameTable</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="k">pass</span>
</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a><span class="k">class</span> <span class="nc">Comment</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1208"><a href="#L-1208"><span class="linenos">1208</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 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-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;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-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="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
-</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a><span class="k">class</span> <span class="nc">MergeTreeTTLAction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</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-1214"><a href="#L-1214"><span class="linenos">1214</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-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="s2">&quot;recompress&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="s2">&quot;to_disk&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="s2">&quot;to_volume&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <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><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a><span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a><span class="k">class</span> <span class="nc">MergeTreeTTL</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1224"><a href="#L-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="L-1225"><a href="#L-1225"><span class="linenos">1225</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-1226"><a href="#L-1226"><span class="linenos">1226</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-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="s2">&quot;aggregates&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="p">}</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><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-table.html</span>
-</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a><span class="k">class</span> <span class="nc">IndexConstraintOption</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="s2">&quot;key_block_size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</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-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="s2">&quot;parser&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="s2">&quot;comment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="s2">&quot;engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</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">ColumnConstraint</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;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-1246"><a href="#L-1246"><span class="linenos">1246</span></a>
-</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="nd">@property</span>
-</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</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 class="o">-&gt;</span> <span class="n">ColumnConstraintKind</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">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a>
+</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">class</span> <span class="nc">Comprehension</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;iterator&quot;</span><span class="p">:</span> <span class="kc">True</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><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><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a><span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
+</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a><span class="k">class</span> <span class="nc">MergeTreeTTLAction</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</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-1219"><a href="#L-1219"><span class="linenos">1219</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-1220"><a href="#L-1220"><span class="linenos">1220</span></a> <span class="s2">&quot;recompress&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="s2">&quot;to_disk&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="s2">&quot;to_volume&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="p">}</span>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a><span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a><span class="k">class</span> <span class="nc">MergeTreeTTL</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</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-1230"><a href="#L-1230"><span class="linenos">1230</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-1231"><a href="#L-1231"><span class="linenos">1231</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-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="s2">&quot;aggregates&quot;</span><span class="p">:</span> <span class="kc">False</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><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="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-table.html</span>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a><span class="k">class</span> <span class="nc">IndexConstraintOption</span><span class="p">(</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">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="s2">&quot;key_block_size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</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-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="s2">&quot;parser&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="s2">&quot;comment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="s2">&quot;engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="p">}</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</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-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="n">arg_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-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">ColumnConstraintKind</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="k">pass</span>
-</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a>
+</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="nd">@property</span>
+</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</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 class="o">-&gt;</span> <span class="n">ColumnConstraintKind</span><span class="p">:</span>
+</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</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;kind&quot;</span><span class="p">]</span>
</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">AutoIncrementColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="k">pass</span>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a>
+</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">class</span> <span class="nc">ColumnConstraintKind</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="k">pass</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">class</span> <span class="nc">CaseSpecificColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</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;not_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a>
+</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">class</span> <span class="nc">AutoIncrementColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="k">pass</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">class</span> <span class="nc">CharacterSetColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1266"><a href="#L-1266"><span class="linenos">1266</span></a>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a>
+</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a><span class="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-1266"><a href="#L-1266"><span class="linenos">1266</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-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">class</span> <span class="nc">CheckColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="k">pass</span>
-</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a>
+</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a>
+</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a><span class="k">class</span> <span class="nc">CharacterSetColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1271"><a href="#L-1271"><span class="linenos">1271</span></a>
-</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a><span class="k">class</span> <span class="nc">CollateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="k">pass</span>
-</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a>
+</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">class</span> <span class="nc">CheckColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="k">pass</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">class</span> <span class="nc">CommentColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="k">pass</span>
-</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>
+</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a><span class="k">class</span> <span class="nc">ClusteredColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="k">pass</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">class</span> <span class="nc">CompressColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="k">pass</span>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a>
+</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a><span class="k">class</span> <span class="nc">CollateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="k">pass</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">class</span> <span class="nc">DateFormatColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1286"><a href="#L-1286"><span class="linenos">1286</span></a>
+</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">class</span> <span class="nc">CommentColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="k">pass</span>
</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a>
-</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</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-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="k">pass</span>
-</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a>
+</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a><span class="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-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="k">pass</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">class</span> <span class="nc">EncodeColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="k">pass</span>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a>
+</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</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-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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">class</span> <span class="nc">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</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-1300"><a href="#L-1300"><span class="linenos">1300</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-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="s2">&quot;on_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</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-1303"><a href="#L-1303"><span class="linenos">1303</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-1304"><a href="#L-1304"><span class="linenos">1304</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-1305"><a href="#L-1305"><span class="linenos">1305</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-1306"><a href="#L-1306"><span class="linenos">1306</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-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <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><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-table.html</span>
-</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a><span class="k">class</span> <span class="nc">IndexColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="n">arg_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;schema&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 class="s2">&quot;type&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-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><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</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-1316"><a href="#L-1316"><span class="linenos">1316</span></a> <span class="k">pass</span>
+</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a><span class="k">class</span> <span class="nc">DefaultColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="k">pass</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><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</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-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="k">pass</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><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</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-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
+</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</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-1309"><a href="#L-1309"><span class="linenos">1309</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-1310"><a href="#L-1310"><span class="linenos">1310</span></a> <span class="s2">&quot;on_null&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="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</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-1313"><a href="#L-1313"><span class="linenos">1313</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-1314"><a href="#L-1314"><span class="linenos">1314</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-1315"><a href="#L-1315"><span class="linenos">1315</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-1316"><a href="#L-1316"><span class="linenos">1316</span></a> <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><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</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-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;allow_null&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><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-table.html</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a><span class="k">class</span> <span class="nc">IndexColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1321"><a href="#L-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">False</span><span class="p">,</span> <span class="s2">&quot;schema&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 class="s2">&quot;type&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-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"># https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html</span>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</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-1323"><a href="#L-1323"><span class="linenos">1323</span></a>
+</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</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-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">PrimaryKeyColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</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 class="s2">&quot;desc&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="k">class</span> <span class="nc">NonClusteredColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="k">pass</span>
</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a>
</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</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-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="k">pass</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a><span class="k">class</span> <span class="nc">NotForReplicationColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a>
</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</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-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="n">arg_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-1336"><a href="#L-1336"><span class="linenos">1336</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-1337"><a href="#L-1337"><span class="linenos">1337</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-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">UppercaseColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</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="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-1342"><a href="#L-1342"><span class="linenos">1342</span></a>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a><span class="c1"># https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</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-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="k">pass</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">class</span> <span class="nc">PathColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="k">pass</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</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-1346"><a href="#L-1346"><span class="linenos">1346</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-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">class</span> <span class="nc">Constraint</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 class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1350"><a href="#L-1350"><span class="linenos">1350</span></a>
+</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">class</span> <span class="nc">TitleColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a> <span class="k">pass</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">class</span> <span class="nc">Delete</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</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-1355"><a href="#L-1355"><span class="linenos">1355</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-1356"><a href="#L-1356"><span class="linenos">1356</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-1357"><a href="#L-1357"><span class="linenos">1357</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-1358"><a href="#L-1358"><span class="linenos">1358</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-1359"><a href="#L-1359"><span class="linenos">1359</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-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="s2">&quot;tables&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># Multiple-Table Syntax (MySQL)</span>
-</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="p">}</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="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</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-1367"><a href="#L-1367"><span class="linenos">1367</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-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="o">**</span><span class="n">opts</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 class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</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="sd"> Example:</span>
-</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
-</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</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="sd"> Args:</span>
-</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a><span class="sd"> table: the table from which to delete.</span>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a>
-</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</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-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <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">class</span> <span class="nc">UniqueColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</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;this&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">UppercaseColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</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="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-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 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-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="k">pass</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><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a><span class="c1"># computed column expression</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a><span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a><span class="k">class</span> <span class="nc">ComputedColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</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;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;persisted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;not_null&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</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-1372"><a href="#L-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a>
+</span><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">Delete</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><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</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-1378"><a href="#L-1378"><span class="linenos">1378</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-1379"><a href="#L-1379"><span class="linenos">1379</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-1380"><a href="#L-1380"><span class="linenos">1380</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-1381"><a href="#L-1381"><span class="linenos">1381</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-1382"><a href="#L-1382"><span class="linenos">1382</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-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="s2">&quot;tables&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># Multiple-Table Syntax (MySQL)</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">delete</span><span class="p">(</span>
+</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <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="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</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-1390"><a href="#L-1390"><span class="linenos">1390</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-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a>
-</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <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="o">*</span><span class="n">expressions</span><span 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><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</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-1400"><a href="#L-1400"><span class="linenos">1400</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-1401"><a href="#L-1401"><span class="linenos">1401</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-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a><span class="sd"> Example:</span>
-</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</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-1409"><a href="#L-1409"><span class="linenos">1409</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-1410"><a href="#L-1410"><span class="linenos">1410</span></a>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a><span class="sd"> Args:</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a><span class="sd"> opts: other options to use to parse the input 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"> Returns:</span>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</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-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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="n">opts</span><span class="p">,</span>
-</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a> <span class="p">)</span>
-</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a>
-</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="k">def</span> <span class="nf">returning</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="p">,</span>
-</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</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-1439"><a href="#L-1439"><span class="linenos">1439</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-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</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 class="sd"> Example:</span>
-</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</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-1447"><a href="#L-1447"><span class="linenos">1447</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</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="sd"> Args:</span>
-</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a>
-</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="k">return</span> <span class="n">_apply_builder</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="o">=</span><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="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</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-1463"><a href="#L-1463"><span class="linenos">1463</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-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
-</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="p">)</span>
-</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a>
-</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">class</span> <span class="nc">Drop</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</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-1474"><a href="#L-1474"><span class="linenos">1474</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-1475"><a href="#L-1475"><span class="linenos">1475</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-1476"><a href="#L-1476"><span class="linenos">1476</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-1477"><a href="#L-1477"><span class="linenos">1477</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-1478"><a href="#L-1478"><span class="linenos">1478</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-1479"><a href="#L-1479"><span class="linenos">1479</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-1480"><a href="#L-1480"><span class="linenos">1480</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-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="p">}</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><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</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-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</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-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="k">pass</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><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</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-1493"><a href="#L-1493"><span class="linenos">1493</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-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;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-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><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</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-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</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-1500"><a href="#L-1500"><span class="linenos">1500</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-1501"><a href="#L-1501"><span class="linenos">1501</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-1502"><a href="#L-1502"><span class="linenos">1502</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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="p">}</span>
-</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a>
+</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a><span class="sd"> Example:</span>
+</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
+</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a>
+</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a><span class="sd"> Args:</span>
+</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a><span class="sd"> table: the table from which to delete.</span>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</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-1413"><a href="#L-1413"><span class="linenos">1413</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <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">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</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-1423"><a href="#L-1423"><span class="linenos">1423</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-1424"><a href="#L-1424"><span class="linenos">1424</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-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a>
+</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a><span class="sd"> Example:</span>
+</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</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-1432"><a href="#L-1432"><span class="linenos">1432</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-1433"><a href="#L-1433"><span class="linenos">1433</span></a>
+</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a><span class="sd"> Args:</span>
+</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a>
+</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</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-1451"><a href="#L-1451"><span class="linenos">1451</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="p">)</span>
+</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a>
+</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
+</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="bp">self</span><span class="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 class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</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-1462"><a href="#L-1462"><span class="linenos">1462</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-1463"><a href="#L-1463"><span class="linenos">1463</span></a> <span class="o">**</span><span class="n">opts</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 class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
+</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a>
+</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a><span class="sd"> Example:</span>
+</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</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-1470"><a href="#L-1470"><span class="linenos">1470</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</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"> Args:</span>
+</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a>
+</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</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-1486"><a href="#L-1486"><span class="linenos">1486</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-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="L-1490"><a href="#L-1490"><span class="linenos">1490</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="p">)</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><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</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-1495"><a href="#L-1495"><span class="linenos">1495</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</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-1497"><a href="#L-1497"><span class="linenos">1497</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-1498"><a href="#L-1498"><span class="linenos">1498</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-1499"><a href="#L-1499"><span class="linenos">1499</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-1500"><a href="#L-1500"><span class="linenos">1500</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-1501"><a href="#L-1501"><span class="linenos">1501</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-1502"><a href="#L-1502"><span class="linenos">1502</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-1503"><a href="#L-1503"><span class="linenos">1503</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-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="p">}</span>
</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a>
-</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</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-1507"><a href="#L-1507"><span class="linenos">1507</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-1508"><a href="#L-1508"><span class="linenos">1508</span></a>
+</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">class</span> <span class="nc">Filter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="c1"># https://www.postgresql.org/docs/9.1/sql-selectinto.html</span>
-</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</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-1512"><a href="#L-1512"><span class="linenos">1512</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-1513"><a href="#L-1513"><span class="linenos">1513</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">class</span> <span class="nc">Check</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a> <span class="k">pass</span>
+</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><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a>
-</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a><span class="k">class</span> <span class="nc">From</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="nd">@property</span>
-</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</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-1519"><a href="#L-1519"><span class="linenos">1519</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-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="nd">@property</span>
-</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1523"><a href="#L-1523"><span class="linenos">1523</span></a> <span class="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-1524"><a href="#L-1524"><span class="linenos">1524</span></a>
-</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">class</span> <span class="nc">Having</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1527"><a href="#L-1527"><span class="linenos">1527</span></a> <span class="k">pass</span>
+</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/constructs/connect-by</span>
+</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a><span class="k">class</span> <span class="nc">Connect</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="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">False</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">:</span> <span class="kc">True</span><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><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a><span class="k">class</span> <span class="nc">Prior</span><span class="p">(</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="k">pass</span>
+</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</span></a>
+</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">class</span> <span class="nc">Directory</span><span class="p">(</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="c1"># https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html</span>
+</span><span id="L-1526"><a href="#L-1526"><span class="linenos">1526</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a>
-</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</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-1531"><a href="#L-1531"><span class="linenos">1531</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-1532"><a href="#L-1532"><span class="linenos">1532</span></a>
-</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="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-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1529"><a href="#L-1529"><span class="linenos">1529</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-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</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-1532"><a href="#L-1532"><span class="linenos">1532</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-1533"><a href="#L-1533"><span class="linenos">1533</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-1534"><a href="#L-1534"><span class="linenos">1534</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-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="p">}</span>
</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a>
</span><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">class</span> <span class="nc">Identifier</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</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-1539"><a href="#L-1539"><span class="linenos">1539</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-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="nd">@property</span>
-</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</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 class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</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-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="nd">@property</span>
-</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</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-1547"><a href="#L-1547"><span class="linenos">1547</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-1548"><a href="#L-1548"><span class="linenos">1548</span></a>
+</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="c1"># https://www.postgresql.org/docs/9.1/sql-selectinto.html</span>
+</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</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-1544"><a href="#L-1544"><span class="linenos">1544</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-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;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-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">From</span><span class="p">(</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="nd">@property</span>
-</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</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-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">name</span>
+</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</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-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">this</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</span></a>
-</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">class</span> <span class="nc">Index</span><span class="p">(</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">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1556"><a href="#L-1556"><span class="linenos">1556</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-1557"><a href="#L-1557"><span class="linenos">1557</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-1558"><a href="#L-1558"><span class="linenos">1558</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-1559"><a href="#L-1559"><span class="linenos">1559</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-1560"><a href="#L-1560"><span class="linenos">1560</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-1561"><a href="#L-1561"><span class="linenos">1561</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-1562"><a href="#L-1562"><span class="linenos">1562</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-1563"><a href="#L-1563"><span class="linenos">1563</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-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
-</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <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">Insert</span><span class="p">(</span><span class="n">DDL</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><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</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-1571"><a href="#L-1571"><span class="linenos">1571</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-1572"><a href="#L-1572"><span class="linenos">1572</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-1573"><a href="#L-1573"><span class="linenos">1573</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-1574"><a href="#L-1574"><span class="linenos">1574</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-1575"><a href="#L-1575"><span class="linenos">1575</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-1576"><a href="#L-1576"><span class="linenos">1576</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-1577"><a href="#L-1577"><span class="linenos">1577</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-1578"><a href="#L-1578"><span class="linenos">1578</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-1579"><a href="#L-1579"><span class="linenos">1579</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-1580"><a href="#L-1580"><span class="linenos">1580</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a> <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 class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="n">recursive</span><span 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-1588"><a href="#L-1588"><span class="linenos">1588</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-1589"><a href="#L-1589"><span class="linenos">1589</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-1590"><a href="#L-1590"><span class="linenos">1590</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-1591"><a href="#L-1591"><span class="linenos">1591</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
-</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a><span class="sd"> Append to or set the common table expressions.</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="sd"> Example:</span>
-</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;SELECT x FROM cte&quot;, &quot;t&quot;).with_(&quot;cte&quot;, as_=&quot;SELECT * FROM tbl&quot;).sql()</span>
-</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a><span class="sd"> &#39;WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte&#39;</span>
+</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="nd">@property</span>
+</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</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-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><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</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-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="k">pass</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><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</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-1563"><a href="#L-1563"><span class="linenos">1563</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-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><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</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-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</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-1571"><a href="#L-1571"><span class="linenos">1571</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</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><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="nd">@property</span>
+</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</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 class="o">-&gt;</span> <span class="nb">bool</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="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-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="nd">@property</span>
+</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</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-1579"><a href="#L-1579"><span class="linenos">1579</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-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="nd">@property</span>
+</span><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</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-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">name</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><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</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-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1588"><a href="#L-1588"><span class="linenos">1588</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-1589"><a href="#L-1589"><span class="linenos">1589</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-1590"><a href="#L-1590"><span class="linenos">1590</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-1591"><a href="#L-1591"><span class="linenos">1591</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-1592"><a href="#L-1592"><span class="linenos">1592</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-1593"><a href="#L-1593"><span class="linenos">1593</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-1594"><a href="#L-1594"><span class="linenos">1594</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-1595"><a href="#L-1595"><span class="linenos">1595</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-1596"><a href="#L-1596"><span class="linenos">1596</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
+</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a> <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="sd"> Args:</span>
-</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
-</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
-</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-1607"><a href="#L-1607"><span class="linenos">1607</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-1608"><a href="#L-1608"><span class="linenos">1608</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1610"><a href="#L-1610"><span class="linenos">1610</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a><span class="sd"> The modified expression.</span>
-</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
-</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <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><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</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-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</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-1623"><a href="#L-1623"><span class="linenos">1623</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-1624"><a href="#L-1624"><span class="linenos">1624</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-1625"><a href="#L-1625"><span class="linenos">1625</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-1626"><a href="#L-1626"><span class="linenos">1626</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-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="p">}</span>
+</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">DDL</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><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</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-1603"><a href="#L-1603"><span class="linenos">1603</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-1604"><a href="#L-1604"><span class="linenos">1604</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-1605"><a href="#L-1605"><span class="linenos">1605</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-1606"><a href="#L-1606"><span class="linenos">1606</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-1607"><a href="#L-1607"><span class="linenos">1607</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-1608"><a href="#L-1608"><span class="linenos">1608</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-1609"><a href="#L-1609"><span class="linenos">1609</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-1610"><a href="#L-1610"><span class="linenos">1610</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-1611"><a href="#L-1611"><span class="linenos">1611</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-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="s2">&quot;by_name&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 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">with_</span><span class="p">(</span>
+</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="n">recursive</span><span 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-1621"><a href="#L-1621"><span class="linenos">1621</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-1622"><a href="#L-1622"><span class="linenos">1622</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-1623"><a href="#L-1623"><span class="linenos">1623</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-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
+</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a><span class="sd"> Append to or set the common table expressions.</span>
</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a>
-</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a>
-</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</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-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a><span class="sd"> Example:</span>
+</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;SELECT x FROM cte&quot;, &quot;t&quot;).with_(&quot;cte&quot;, as_=&quot;SELECT * FROM tbl&quot;).sql()</span>
+</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</span></a><span class="sd"> &#39;WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte&#39;</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="c1"># https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html</span>
-</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</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-1636"><a href="#L-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;expression&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><span id="L-1638"><a href="#L-1638"><span class="linenos">1638</span></a>
-</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a><span class="c1"># national char, like n&#39;utf8&#39;</span>
-</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</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-1641"><a href="#L-1641"><span class="linenos">1641</span></a> <span class="k">pass</span>
-</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a>
-</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 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-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</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-1647"><a href="#L-1647"><span class="linenos">1647</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-1648"><a href="#L-1648"><span class="linenos">1648</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-1649"><a href="#L-1649"><span class="linenos">1649</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-1650"><a href="#L-1650"><span class="linenos">1650</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-1651"><a href="#L-1651"><span class="linenos">1651</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-1652"><a href="#L-1652"><span class="linenos">1652</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-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="p">}</span>
-</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">Partition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</span></a> <span class="n">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-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">Fetch</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</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-1663"><a href="#L-1663"><span class="linenos">1663</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-1664"><a href="#L-1664"><span class="linenos">1664</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-1665"><a href="#L-1665"><span class="linenos">1665</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-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <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><span id="L-1669"><a href="#L-1669"><span class="linenos">1669</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-1670"><a href="#L-1670"><span class="linenos">1670</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1671"><a href="#L-1671"><span class="linenos">1671</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</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-1673"><a href="#L-1673"><span class="linenos">1673</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-1674"><a href="#L-1674"><span class="linenos">1674</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-1675"><a href="#L-1675"><span class="linenos">1675</span></a> <span class="s2">&quot;totals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1676"><a href="#L-1676"><span class="linenos">1676</span></a> <span class="s2">&quot;all&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a> <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><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</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-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 class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</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">Limit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1685"><a href="#L-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">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a>
+</span><span id="L-1633"><a href="#L-1633"><span class="linenos">1633</span></a><span class="sd"> Args:</span>
+</span><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
+</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
+</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1638"><a href="#L-1638"><span class="linenos">1638</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a><span class="sd"> The modified expression.</span>
+</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a> <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><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</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-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</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-1656"><a href="#L-1656"><span class="linenos">1656</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-1657"><a href="#L-1657"><span class="linenos">1657</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-1658"><a href="#L-1658"><span class="linenos">1658</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-1659"><a href="#L-1659"><span class="linenos">1659</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-1660"><a href="#L-1660"><span class="linenos">1660</span></a> <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 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-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</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 class="c1"># https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html</span>
+</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</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-1669"><a href="#L-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;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-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="c1"># national char, like n&#39;utf8&#39;</span>
+</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</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-1674"><a href="#L-1674"><span class="linenos">1674</span></a> <span class="k">pass</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><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</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-1678"><a href="#L-1678"><span class="linenos">1678</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</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-1680"><a href="#L-1680"><span class="linenos">1680</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-1681"><a href="#L-1681"><span class="linenos">1681</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-1682"><a href="#L-1682"><span class="linenos">1682</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-1683"><a href="#L-1683"><span class="linenos">1683</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-1684"><a href="#L-1684"><span class="linenos">1684</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-1685"><a href="#L-1685"><span class="linenos">1685</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-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="p">}</span>
</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a>
-</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</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-1689"><a href="#L-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;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-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="nd">@property</span>
-</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</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-1693"><a href="#L-1693"><span class="linenos">1693</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-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="nd">@classmethod</span>
-</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</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-1697"><a href="#L-1697"><span class="linenos">1697</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-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="nd">@classmethod</span>
-</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</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-1701"><a href="#L-1701"><span class="linenos">1701</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-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="nd">@property</span>
-</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</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-1705"><a href="#L-1705"><span class="linenos">1705</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-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><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</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-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</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-1711"><a href="#L-1711"><span class="linenos">1711</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-1712"><a href="#L-1712"><span class="linenos">1712</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-1713"><a href="#L-1713"><span class="linenos">1713</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-1714"><a href="#L-1714"><span class="linenos">1714</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-1715"><a href="#L-1715"><span class="linenos">1715</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-1716"><a href="#L-1716"><span class="linenos">1716</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-1717"><a href="#L-1717"><span class="linenos">1717</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-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="p">}</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">class</span> <span class="nc">Partition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</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-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><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</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-1694"><a href="#L-1694"><span class="linenos">1694</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1695"><a href="#L-1695"><span class="linenos">1695</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-1696"><a href="#L-1696"><span class="linenos">1696</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-1697"><a href="#L-1697"><span class="linenos">1697</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-1698"><a href="#L-1698"><span class="linenos">1698</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-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <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><span id="L-1702"><a href="#L-1702"><span class="linenos">1702</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-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</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-1705"><a href="#L-1705"><span class="linenos">1705</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-1706"><a href="#L-1706"><span class="linenos">1706</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-1707"><a href="#L-1707"><span class="linenos">1707</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-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <span class="s2">&quot;totals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="s2">&quot;all&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</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-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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">Limit</span><span class="p">(</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">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-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="nd">@property</span>
-</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="k">def</span> <span class="nf">method</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-1722"><a href="#L-1722"><span class="linenos">1722</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;method&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</span></a>
+</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a><span class="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-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 class="s2">&quot;is_string&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 class="nd">@property</span>
-</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</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 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="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-1725"><a href="#L-1725"><span class="linenos">1725</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-1726"><a href="#L-1726"><span class="linenos">1726</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-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="nd">@property</span>
-</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="k">return</span> <span class="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-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</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-1730"><a href="#L-1730"><span class="linenos">1730</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-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="nd">@property</span>
-</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</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-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</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-1734"><a href="#L-1734"><span class="linenos">1734</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-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 class="nd">@property</span>
-</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</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-1737"><a href="#L-1737"><span class="linenos">1737</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-1738"><a href="#L-1738"><span class="linenos">1738</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-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">def</span> <span class="nf">on</span><span class="p">(</span>
-</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-1743"><a href="#L-1743"><span class="linenos">1743</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-1744"><a href="#L-1744"><span class="linenos">1744</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-1745"><a href="#L-1745"><span class="linenos">1745</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-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
-</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a><span class="sd"> Append to or set the ON expressions.</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="sd"> Example:</span>
-</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</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-1754"><a href="#L-1754"><span class="linenos">1754</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</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="sd"> Args:</span>
-</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a><span class="sd"> The modified Join expression.</span>
-</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</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-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</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-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <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">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-1780"><a href="#L-1780"><span class="linenos">1780</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-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">return</span> <span class="n">join</span>
+</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">Join</span><span class="p">(</span><span class="n">Expression</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><span id="L-1743"><a href="#L-1743"><span class="linenos">1743</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-1744"><a href="#L-1744"><span class="linenos">1744</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-1745"><a href="#L-1745"><span class="linenos">1745</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-1746"><a href="#L-1746"><span class="linenos">1746</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-1747"><a href="#L-1747"><span class="linenos">1747</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-1748"><a href="#L-1748"><span class="linenos">1748</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-1749"><a href="#L-1749"><span class="linenos">1749</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-1750"><a href="#L-1750"><span class="linenos">1750</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-1751"><a href="#L-1751"><span class="linenos">1751</span></a> <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="nd">@property</span>
+</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</span></a> <span class="k">def</span> <span class="nf">method</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-1755"><a href="#L-1755"><span class="linenos">1755</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;method&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</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="nd">@property</span>
+</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="k">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-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="nd">@property</span>
+</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="k">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-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="nd">@property</span>
+</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</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 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">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-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="nd">@property</span>
+</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</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-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="k">def</span> <span class="nf">on</span><span class="p">(</span>
+</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</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-1777"><a href="#L-1777"><span class="linenos">1777</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-1778"><a href="#L-1778"><span class="linenos">1778</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-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
+</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a><span class="sd"> Append to or set the ON expressions.</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">using</span><span class="p">(</span>
-</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</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-1788"><a href="#L-1788"><span class="linenos">1788</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-1789"><a href="#L-1789"><span class="linenos">1789</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-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
-</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a><span class="sd"> Append to or set the USING expressions.</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="sd"> Example:</span>
-</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</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-1798"><a href="#L-1798"><span class="linenos">1798</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</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="sd"> Args:</span>
-</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a><span class="sd"> append: if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
-</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a>
-</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a><span class="sd"> The modified Join expression.</span>
-</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</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-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</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-1816"><a href="#L-1816"><span class="linenos">1816</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1819"><a href="#L-1819"><span class="linenos">1819</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="p">)</span>
-</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a>
-</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a> <span class="k">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-1823"><a href="#L-1823"><span class="linenos">1823</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-1824"><a href="#L-1824"><span class="linenos">1824</span></a>
-</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="k">return</span> <span class="n">join</span>
-</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a>
+</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a><span class="sd"> Example:</span>
+</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</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-1787"><a href="#L-1787"><span class="linenos">1787</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a>
+</span><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a><span class="sd"> Args:</span>
+</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a><span class="sd"> The modified Join expression.</span>
+</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</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-1803"><a href="#L-1803"><span class="linenos">1803</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</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-1806"><a href="#L-1806"><span class="linenos">1806</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="p">)</span>
+</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a>
+</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="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-1813"><a href="#L-1813"><span class="linenos">1813</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-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="k">return</span> <span class="n">join</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">using</span><span class="p">(</span>
+</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1819"><a href="#L-1819"><span class="linenos">1819</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</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-1821"><a href="#L-1821"><span class="linenos">1821</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-1822"><a href="#L-1822"><span class="linenos">1822</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-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
+</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a><span class="sd"> Append to or set the USING expressions.</span>
</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">Lateral</span><span class="p">(</span><span class="n">UDTF</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;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-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">MatchRecognize</span><span class="p">(</span><span class="n">Expression</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><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</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-1835"><a href="#L-1835"><span class="linenos">1835</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-1836"><a href="#L-1836"><span class="linenos">1836</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-1837"><a href="#L-1837"><span class="linenos">1837</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-1838"><a href="#L-1838"><span class="linenos">1838</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-1839"><a href="#L-1839"><span class="linenos">1839</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-1840"><a href="#L-1840"><span class="linenos">1840</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-1841"><a href="#L-1841"><span class="linenos">1841</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-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <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><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</span></a><span class="c1"># Clickhouse FROM FINAL modifier</span>
-</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/from/#final-modifier</span>
-</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</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-1848"><a href="#L-1848"><span class="linenos">1848</span></a> <span class="k">pass</span>
-</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</span></a>
-</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">class</span> <span class="nc">Offset</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a> <span class="n">arg_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-1853"><a href="#L-1853"><span class="linenos">1853</span></a>
+</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a><span class="sd"> Example:</span>
+</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</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-1831"><a href="#L-1831"><span class="linenos">1831</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</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"> Args:</span>
+</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1836"><a href="#L-1836"><span class="linenos">1836</span></a><span class="sd"> append: if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
+</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1840"><a href="#L-1840"><span class="linenos">1840</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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"> The modified Join expression.</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">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</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-1849"><a href="#L-1849"><span class="linenos">1849</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a> <span class="o">**</span><span class="n">opts</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><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</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-1856"><a href="#L-1856"><span class="linenos">1856</span></a> <span class="n">arg_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-1855"><a href="#L-1855"><span class="linenos">1855</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-1856"><a href="#L-1856"><span class="linenos">1856</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-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><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a><span class="c1"># hive specific sorts</span>
-</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</span></a><span class="c1"># https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy</span>
-</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</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-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="k">pass</span>
+</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a> <span class="k">return</span> <span class="n">join</span>
+</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><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</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-1862"><a href="#L-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">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-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><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</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-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="k">pass</span>
-</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><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</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-1870"><a href="#L-1870"><span class="linenos">1870</span></a> <span class="k">pass</span>
-</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><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</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-1874"><a href="#L-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;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-1875"><a href="#L-1875"><span class="linenos">1875</span></a>
+</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</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-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="n">arg_types</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="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</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-1869"><a href="#L-1869"><span class="linenos">1869</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-1870"><a href="#L-1870"><span class="linenos">1870</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-1871"><a href="#L-1871"><span class="linenos">1871</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-1872"><a href="#L-1872"><span class="linenos">1872</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-1873"><a href="#L-1873"><span class="linenos">1873</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-1874"><a href="#L-1874"><span class="linenos">1874</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-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <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">class</span> <span class="nc">Property</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1879"><a href="#L-1879"><span class="linenos">1879</span></a>
-</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</span></a>
-</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a><span class="k">class</span> <span class="nc">AlgorithmProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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="c1"># Clickhouse FROM FINAL modifier</span>
+</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/from/#final-modifier</span>
+</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</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-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="k">pass</span>
+</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a>
</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><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</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-1886"><a href="#L-1886"><span class="linenos">1886</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1884"><a href="#L-1884"><span class="linenos">1884</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-1885"><a href="#L-1885"><span class="linenos">1885</span></a> <span class="n">arg_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-1886"><a href="#L-1886"><span class="linenos">1886</span></a>
</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a>
-</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">class</span> <span class="nc">BlockCompressionProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</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-1888"><a href="#L-1888"><span class="linenos">1888</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-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="n">arg_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-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><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">class</span> <span class="nc">CharacterSetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1895"><a href="#L-1895"><span class="linenos">1895</span></a>
+</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a><span class="c1"># hive specific sorts</span>
+</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a><span class="c1"># https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy</span>
+</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</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-1895"><a href="#L-1895"><span class="linenos">1895</span></a> <span class="k">pass</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">class</span> <span class="nc">ChecksumProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</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-1899"><a href="#L-1899"><span class="linenos">1899</span></a>
+</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">class</span> <span class="nc">Distribute</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="k">pass</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="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-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1903"><a href="#L-1903"><span class="linenos">1903</span></a>
+</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">class</span> <span class="nc">Sort</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="k">pass</span>
</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a>
-</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a><span class="k">class</span> <span class="nc">CopyGrantsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a>
+</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a>
+</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a><span class="k">class</span> <span class="nc">Ordered</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1908"><a href="#L-1908"><span class="linenos">1908</span></a>
-</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</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-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</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-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</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-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="p">}</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">class</span> <span class="nc">Property</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</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-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a>
-</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a><span class="k">class</span> <span class="nc">DefinerProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1918"><a href="#L-1918"><span class="linenos">1918</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-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><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">class</span> <span class="nc">DistKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1922"><a href="#L-1922"><span class="linenos">1922</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-1923"><a href="#L-1923"><span class="linenos">1923</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-1924"><a href="#L-1924"><span class="linenos">1924</span></a>
</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a>
-</span><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">class</span> <span class="nc">DistStyleProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1926"><a href="#L-1926"><span class="linenos">1926</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-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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">class</span> <span class="nc">EngineProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1930"><a href="#L-1930"><span class="linenos">1930</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-1931"><a href="#L-1931"><span class="linenos">1931</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-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><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a><span class="k">class</span> <span class="nc">HeapProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</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-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a><span class="k">class</span> <span class="nc">ToTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1938"><a href="#L-1938"><span class="linenos">1938</span></a><span class="k">class</span> <span class="nc">CopyGrantsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a> <span class="n">arg_types</span> <span class="o">=</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><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">ExecuteAsProperty</span><span class="p">(</span><span class="n">Property</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><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 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-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;this&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-1942"><a href="#L-1942"><span class="linenos">1942</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-1943"><a href="#L-1943"><span class="linenos">1943</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</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-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1946"><a href="#L-1946"><span class="linenos">1946</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1948"><a href="#L-1948"><span class="linenos">1948</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-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <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">class</span> <span class="nc">FallbackProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</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-1953"><a href="#L-1953"><span class="linenos">1953</span></a>
+</span><span id="L-1951"><a href="#L-1951"><span class="linenos">1951</span></a>
+</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</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-1953"><a href="#L-1953"><span class="linenos">1953</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1954"><a href="#L-1954"><span class="linenos">1954</span></a>
-</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a><span class="k">class</span> <span class="nc">FileFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1957"><a href="#L-1957"><span class="linenos">1957</span></a>
+</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">class</span> <span class="nc">DistKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1957"><a href="#L-1957"><span class="linenos">1957</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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">class</span> <span class="nc">FreespaceProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1960"><a href="#L-1960"><span class="linenos">1960</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1961"><a href="#L-1961"><span class="linenos">1961</span></a>
+</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">class</span> <span class="nc">DistStyleProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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">class</span> <span class="nc">InputOutputFormat</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</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-1965"><a href="#L-1965"><span class="linenos">1965</span></a>
+</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</span></a>
+</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</span></a><span class="k">class</span> <span class="nc">EngineProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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">class</span> <span class="nc">IsolatedLoadingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</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-1970"><a href="#L-1970"><span class="linenos">1970</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-1971"><a href="#L-1971"><span class="linenos">1971</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-1972"><a href="#L-1972"><span class="linenos">1972</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-1973"><a href="#L-1973"><span class="linenos">1973</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-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <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">class</span> <span class="nc">HeapProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</span></a> <span class="n">arg_types</span> <span class="o">=</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><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a><span class="k">class</span> <span class="nc">ToTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</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><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">class</span> <span class="nc">JournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="s2">&quot;before&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;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</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-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="p">}</span>
-</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a>
+</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</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-1977"><a href="#L-1977"><span class="linenos">1977</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</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-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="n">arg_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-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><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</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-1985"><a href="#L-1985"><span class="linenos">1985</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-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">class</span> <span class="nc">LanguageProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1989"><a href="#L-1989"><span class="linenos">1989</span></a>
+</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">class</span> <span class="nc">FileFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-1990"><a href="#L-1990"><span class="linenos">1990</span></a>
-</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</span></a><span class="c1"># spark ddl</span>
-</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a><span class="k">class</span> <span class="nc">ClusteredByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</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;sorted_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">:</span> <span class="kc">True</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">class</span> <span class="nc">FreespaceProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</span></a><span class="k">class</span> <span class="nc">DictProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;settings&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</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-1997"><a href="#L-1997"><span class="linenos">1997</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-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><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a><span class="k">class</span> <span class="nc">DictSubProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="k">pass</span>
-</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</span></a>
-</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a>
-</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</span></a><span class="k">class</span> <span class="nc">DictRange</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</span></a><span class="c1"># Clickhouse CREATE ... ON CLUSTER modifier</span>
-</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/distributed-ddl</span>
-</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a><span class="k">class</span> <span class="nc">OnCluster</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2011"><a href="#L-2011"><span class="linenos">2011</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</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-2015"><a href="#L-2015"><span class="linenos">2015</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</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-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</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-2023"><a href="#L-2023"><span class="linenos">2023</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</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-2026"><a href="#L-2026"><span class="linenos">2026</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-2027"><a href="#L-2027"><span class="linenos">2027</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-2028"><a href="#L-2028"><span class="linenos">2028</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-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><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</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-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</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-2003"><a href="#L-2003"><span class="linenos">2003</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-2004"><a href="#L-2004"><span class="linenos">2004</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-2005"><a href="#L-2005"><span class="linenos">2005</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-2006"><a href="#L-2006"><span class="linenos">2006</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-2007"><a href="#L-2007"><span class="linenos">2007</span></a> <span class="p">}</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><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</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-2011"><a href="#L-2011"><span class="linenos">2011</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</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-2016"><a href="#L-2016"><span class="linenos">2016</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-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="p">}</span>
+</span><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</span></a>
+</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">class</span> <span class="nc">LanguageProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a><span class="c1"># spark ddl</span>
+</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</span></a><span class="k">class</span> <span class="nc">ClusteredByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</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;sorted_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a><span class="k">class</span> <span class="nc">DictProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;settings&quot;</span><span class="p">:</span> <span class="kc">False</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">class</span> <span class="nc">LogProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</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-2034"><a href="#L-2034"><span class="linenos">2034</span></a>
+</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</span></a>
+</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</span></a><span class="k">class</span> <span class="nc">DictSubProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a> <span class="k">pass</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">class</span> <span class="nc">MaterializedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="n">arg_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-2038"><a href="#L-2038"><span class="linenos">2038</span></a>
+</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a>
+</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a><span class="k">class</span> <span class="nc">DictRange</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a>
-</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a><span class="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-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="n">arg_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-2042"><a href="#L-2042"><span class="linenos">2042</span></a>
-</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a>
-</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</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-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</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="c1"># Clickhouse CREATE ... ON CLUSTER modifier</span>
+</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/distributed-ddl</span>
+</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a><span class="k">class</span> <span class="nc">OnCluster</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-2045"><a href="#L-2045"><span class="linenos">2045</span></a>
</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><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</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-2049"><a href="#L-2049"><span class="linenos">2049</span></a> <span class="n">arg_type</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;delete&quot;</span><span class="p">:</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="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-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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="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-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-2051"><a href="#L-2051"><span class="linenos">2051</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-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a>
-</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a><span class="k">class</span> <span class="nc">ReturnsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-2058"><a href="#L-2058"><span class="linenos">2058</span></a>
-</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">class</span> <span class="nc">RowFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-2062"><a href="#L-2062"><span class="linenos">2062</span></a>
+</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</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-2056"><a href="#L-2056"><span class="linenos">2056</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</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-2058"><a href="#L-2058"><span class="linenos">2058</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-2059"><a href="#L-2059"><span class="linenos">2059</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-2060"><a href="#L-2060"><span class="linenos">2060</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-2061"><a href="#L-2061"><span class="linenos">2061</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-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="p">}</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="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-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
-</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</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-2068"><a href="#L-2068"><span class="linenos">2068</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-2069"><a href="#L-2069"><span class="linenos">2069</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-2070"><a href="#L-2070"><span class="linenos">2070</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-2071"><a href="#L-2071"><span class="linenos">2071</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-2072"><a href="#L-2072"><span class="linenos">2072</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-2073"><a href="#L-2073"><span class="linenos">2073</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-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <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">class</span> <span class="nc">LogProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</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-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">MaterializedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <span class="n">arg_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-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">MergeBlockRatioProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <span class="n">arg_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-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">RowFormatSerdeProperty</span><span class="p">(</span><span class="n">Property</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 class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;serde_properties&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="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-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><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="c1"># https://spark.apache.org/docs/3.1.2/sql-ref-syntax-qry-select-transform.html</span>
-</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a><span class="k">class</span> <span class="nc">QueryTransform</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</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-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="s2">&quot;command_script&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</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="s2">&quot;row_format_before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="s2">&quot;record_writer&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;row_format_after&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;record_reader&quot;</span><span class="p">:</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-2081"><a href="#L-2081"><span class="linenos">2081</span></a><span class="k">class</span> <span class="nc">OnProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</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-2086"><a href="#L-2086"><span class="linenos">2086</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;delete&quot;</span><span class="p">:</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><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a>
+</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</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-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</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-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 class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</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-2094"><a href="#L-2094"><span class="linenos">2094</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</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-2099"><a href="#L-2099"><span class="linenos">2099</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-2097"><a href="#L-2097"><span class="linenos">2097</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-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 class="s2">&quot;this&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><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">SetProperty</span><span class="p">(</span><span class="n">Property</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 class="s2">&quot;multi&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a><span class="k">class</span> <span class="nc">SettingsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</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-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><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</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-2111"><a href="#L-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">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-2101"><a href="#L-2101"><span class="linenos">2101</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-2102"><a href="#L-2102"><span class="linenos">2102</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</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;fields&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;escaped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</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-2107"><a href="#L-2107"><span class="linenos">2107</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-2108"><a href="#L-2108"><span class="linenos">2108</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-2109"><a href="#L-2109"><span class="linenos">2109</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-2110"><a href="#L-2110"><span class="linenos">2110</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-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="p">}</span>
</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><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</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-2115"><a href="#L-2115"><span class="linenos">2115</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-2114"><a href="#L-2114"><span class="linenos">2114</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-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;serde_properties&quot;</span><span class="p">:</span> <span class="kc">False</span><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><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</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-2119"><a href="#L-2119"><span class="linenos">2119</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</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-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a>
-</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a>
-</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</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-2127"><a href="#L-2127"><span class="linenos">2127</span></a> <span class="n">arg_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-2128"><a href="#L-2128"><span class="linenos">2128</span></a>
+</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</span></a><span class="c1"># https://spark.apache.org/docs/3.1.2/sql-ref-syntax-qry-select-transform.html</span>
+</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a><span class="k">class</span> <span class="nc">QueryTransform</span><span class="p">(</span><span class="n">Expression</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="s2">&quot;command_script&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="s2">&quot;schema&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;row_format_before&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;record_writer&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;row_format_after&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;record_reader&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="p">}</span>
</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</span></a>
-</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</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-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="n">arg_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-2132"><a href="#L-2132"><span class="linenos">2132</span></a>
+</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">class</span> <span class="nc">SchemaCommentProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-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">class</span> <span class="nc">WithDataProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</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-2136"><a href="#L-2136"><span class="linenos">2136</span></a>
+</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="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-2136"><a href="#L-2136"><span class="linenos">2136</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-2137"><a href="#L-2137"><span class="linenos">2137</span></a>
-</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</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-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-2140"><a href="#L-2140"><span class="linenos">2140</span></a>
+</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">class</span> <span class="nc">SetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</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-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">class</span> <span class="nc">Properties</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <span class="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-2144"><a href="#L-2144"><span class="linenos">2144</span></a>
-</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</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-2147"><a href="#L-2147"><span class="linenos">2147</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-2148"><a href="#L-2148"><span class="linenos">2148</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-2149"><a href="#L-2149"><span class="linenos">2149</span></a> <span class="s2">&quot;CLUSTERED_BY&quot;</span><span class="p">:</span> <span class="n">ClusteredByProperty</span><span class="p">,</span>
-</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</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-2151"><a href="#L-2151"><span class="linenos">2151</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-2152"><a href="#L-2152"><span class="linenos">2152</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-2153"><a href="#L-2153"><span class="linenos">2153</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-2154"><a href="#L-2154"><span class="linenos">2154</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-2155"><a href="#L-2155"><span class="linenos">2155</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-2156"><a href="#L-2156"><span class="linenos">2156</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-2157"><a href="#L-2157"><span class="linenos">2157</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-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</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-2160"><a href="#L-2160"><span class="linenos">2160</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-2161"><a href="#L-2161"><span class="linenos">2161</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-2162"><a href="#L-2162"><span class="linenos">2162</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-2163"><a href="#L-2163"><span class="linenos">2163</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-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <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">class</span> <span class="nc">SettingsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</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-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><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</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-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</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-2152"><a href="#L-2152"><span class="linenos">2152</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-2153"><a href="#L-2153"><span class="linenos">2153</span></a>
+</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">class</span> <span class="nc">StabilityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-2157"><a href="#L-2157"><span class="linenos">2157</span></a>
+</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</span></a>
+</span><span id="L-2159"><a href="#L-2159"><span class="linenos">2159</span></a><span class="k">class</span> <span class="nc">TemporaryProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</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><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</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-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="n">arg_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-2165"><a href="#L-2165"><span class="linenos">2165</span></a>
-</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="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-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="c1"># CREATE property locations</span>
-</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a> <span class="c1"># Form: schema specified</span>
-</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
-</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="c1"># with ([POST_WITH])</span>
-</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
-</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a> <span class="c1">#</span>
-</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a> <span class="c1"># Form: alias selection</span>
-</span><span id="L-2177"><a href="#L-2177"><span class="linenos">2177</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
-</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
-</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</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-2182"><a href="#L-2182"><span class="linenos">2182</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-2183"><a href="#L-2183"><span class="linenos">2183</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-2184"><a href="#L-2184"><span class="linenos">2184</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-2185"><a href="#L-2185"><span class="linenos">2185</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-2186"><a href="#L-2186"><span class="linenos">2186</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-2187"><a href="#L-2187"><span class="linenos">2187</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-2188"><a href="#L-2188"><span class="linenos">2188</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-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</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 class="nd">@classmethod</span>
-</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
-</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</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-2195"><a href="#L-2195"><span class="linenos">2195</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-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
-</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</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-2198"><a href="#L-2198"><span class="linenos">2198</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</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-2200"><a href="#L-2200"><span class="linenos">2200</span></a>
-</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</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-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">class</span> <span class="nc">VolatileProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="n">arg_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-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><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</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-2172"><a href="#L-2172"><span class="linenos">2172</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-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><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</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-2176"><a href="#L-2176"><span class="linenos">2176</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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-2177"><a href="#L-2177"><span class="linenos">2177</span></a>
+</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a>
+</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</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-2180"><a href="#L-2180"><span class="linenos">2180</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-2181"><a href="#L-2181"><span class="linenos">2181</span></a>
+</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</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-2184"><a href="#L-2184"><span class="linenos">2184</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-2185"><a href="#L-2185"><span class="linenos">2185</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-2186"><a href="#L-2186"><span class="linenos">2186</span></a> <span class="s2">&quot;CLUSTERED_BY&quot;</span><span class="p">:</span> <span class="n">ClusteredByProperty</span><span class="p">,</span>
+</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</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-2188"><a href="#L-2188"><span class="linenos">2188</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-2189"><a href="#L-2189"><span class="linenos">2189</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-2190"><a href="#L-2190"><span class="linenos">2190</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-2191"><a href="#L-2191"><span class="linenos">2191</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-2192"><a href="#L-2192"><span class="linenos">2192</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-2193"><a href="#L-2193"><span class="linenos">2193</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-2194"><a href="#L-2194"><span class="linenos">2194</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-2195"><a href="#L-2195"><span class="linenos">2195</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-2196"><a href="#L-2196"><span class="linenos">2196</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-2197"><a href="#L-2197"><span class="linenos">2197</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-2198"><a href="#L-2198"><span class="linenos">2198</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-2199"><a href="#L-2199"><span class="linenos">2199</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-2200"><a href="#L-2200"><span class="linenos">2200</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-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><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</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-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="k">pass</span>
-</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a>
-</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="c1"># https://www.ibm.com/docs/en/ias?topic=procedures-return-statement-in-sql</span>
-</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</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-2210"><a href="#L-2210"><span class="linenos">2210</span></a> <span class="k">pass</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><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</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-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-2215"><a href="#L-2215"><span class="linenos">2215</span></a>
-</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a>
-</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</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-2218"><a href="#L-2218"><span class="linenos">2218</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-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">def</span> <span class="nf">isin</span><span class="p">(</span>
-</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="bp">self</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 class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
-</span><span id="L-2223"><a href="#L-2223"><span class="linenos">2223</span></a> <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><span id="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="n">unnest</span><span 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="n">t</span><span class="o">.</span><span class="n">Collection</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-2225"><a href="#L-2225"><span class="linenos">2225</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-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
-</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
-</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</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-2230"><a href="#L-2230"><span class="linenos">2230</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-2231"><a href="#L-2231"><span class="linenos">2231</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-2232"><a href="#L-2232"><span class="linenos">2232</span></a> <span class="n">unnest</span><span class="o">=</span><span class="n">Unnest</span><span class="p">(</span>
-</span><span id="L-2233"><a href="#L-2233"><span class="linenos">2233</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a> <span class="n">maybe_parse</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">ExpOrStr</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="o">**</span><span class="n">opts</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">unnest</span><span class="p">)</span>
-</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="p">]</span>
-</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a> <span class="p">)</span>
-</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a> <span class="k">if</span> <span class="n">unnest</span>
-</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2239"><a href="#L-2239"><span class="linenos">2239</span></a> <span class="p">)</span>
+</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</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-2204"><a href="#L-2204"><span class="linenos">2204</span></a>
+</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="c1"># CREATE property locations</span>
+</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="c1"># Form: schema specified</span>
+</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
+</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</span></a> <span class="c1"># with ([POST_WITH])</span>
+</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
+</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="c1">#</span>
+</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="c1"># Form: alias selection</span>
+</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
+</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
+</span><span id="L-2218"><a href="#L-2218"><span class="linenos">2218</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-2219"><a href="#L-2219"><span class="linenos">2219</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-2220"><a href="#L-2220"><span class="linenos">2220</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-2221"><a href="#L-2221"><span class="linenos">2221</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-2222"><a href="#L-2222"><span class="linenos">2222</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-2223"><a href="#L-2223"><span class="linenos">2223</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-2224"><a href="#L-2224"><span class="linenos">2224</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-2225"><a href="#L-2225"><span class="linenos">2225</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-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a>
+</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
+</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</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-2232"><a href="#L-2232"><span class="linenos">2232</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-2233"><a href="#L-2233"><span class="linenos">2233</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
+</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</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-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</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-2237"><a href="#L-2237"><span class="linenos">2237</span></a>
+</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</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-2239"><a href="#L-2239"><span class="linenos">2239</span></a>
</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><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</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-2243"><a href="#L-2243"><span class="linenos">2243</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="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="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">Subquery</span><span class="p">:</span>
-</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
-</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a>
-</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</span></a><span class="sd"> Example:</span>
-</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
-</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
-</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</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="sd"> Args:</span>
-</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
-</span><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</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="sd"> Returns:</span>
-</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a><span class="sd"> Alias: the subquery</span>
-</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</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-2260"><a href="#L-2260"><span class="linenos">2260</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="n">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><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a>
-</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">instance</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-2264"><a href="#L-2264"><span class="linenos">2264</span></a>
-</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</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="nd">@property</span>
-</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</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-2272"><a href="#L-2272"><span class="linenos">2272</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-2273"><a href="#L-2273"><span class="linenos">2273</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-2274"><a href="#L-2274"><span class="linenos">2274</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</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-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="nd">@property</span>
-</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</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-2279"><a href="#L-2279"><span class="linenos">2279</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-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="nd">@property</span>
-</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</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-2283"><a href="#L-2283"><span class="linenos">2283</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-2284"><a href="#L-2284"><span class="linenos">2284</span></a>
-</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="k">def</span> <span class="nf">with_</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="p">,</span>
-</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="n">recursive</span><span 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-2290"><a href="#L-2290"><span class="linenos">2290</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-2291"><a href="#L-2291"><span class="linenos">2291</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-2292"><a href="#L-2292"><span class="linenos">2292</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-2293"><a href="#L-2293"><span class="linenos">2293</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
-</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a>
-</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</span></a><span class="sd"> Example:</span>
-</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</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-2300"><a href="#L-2300"><span class="linenos">2300</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+</span><span id="L-2241"><a href="#L-2241"><span class="linenos">2241</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-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="k">pass</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><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a><span class="c1"># https://www.ibm.com/docs/en/ias?topic=procedures-return-statement-in-sql</span>
+</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</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-2247"><a href="#L-2247"><span class="linenos">2247</span></a> <span class="k">pass</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><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</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-2251"><a href="#L-2251"><span class="linenos">2251</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</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-2255"><a href="#L-2255"><span class="linenos">2255</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-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">def</span> <span class="nf">isin</span><span class="p">(</span>
+</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</span></a> <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><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</span></a> <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><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="n">unnest</span><span 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="n">t</span><span class="o">.</span><span class="n">Collection</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-2262"><a href="#L-2262"><span class="linenos">2262</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-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 class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
+</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
+</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</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-2267"><a href="#L-2267"><span class="linenos">2267</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-2268"><a href="#L-2268"><span class="linenos">2268</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-2269"><a href="#L-2269"><span class="linenos">2269</span></a> <span class="n">unnest</span><span class="o">=</span><span class="n">Unnest</span><span class="p">(</span>
+</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="n">maybe_parse</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">ExpOrStr</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="o">**</span><span class="n">opts</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">unnest</span><span class="p">)</span>
+</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a> <span class="p">]</span>
+</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</span></a> <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="n">unnest</span>
+</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <span class="p">)</span>
+</span><span id="L-2277"><a href="#L-2277"><span class="linenos">2277</span></a>
+</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a>
+</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</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-2280"><a href="#L-2280"><span class="linenos">2280</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="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="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">Subquery</span><span class="p">:</span>
+</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</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"> Example:</span>
+</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
+</span><span id="L-2286"><a href="#L-2286"><span class="linenos">2286</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
+</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
+</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a>
+</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a><span class="sd"> Args:</span>
+</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
+</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a>
+</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a><span class="sd"> Alias: the subquery</span>
+</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</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-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</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><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</span></a>
+</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">instance</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-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="sd"> Args:</span>
-</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
-</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
-</span><span id="L-2306"><a href="#L-2306"><span class="linenos">2306</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</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="nd">@property</span>
+</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</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-2309"><a href="#L-2309"><span class="linenos">2309</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-2310"><a href="#L-2310"><span class="linenos">2310</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-2311"><a href="#L-2311"><span class="linenos">2311</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a> <span class="k">return</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a>
-</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</span></a><span class="sd"> The modified expression.</span>
-</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</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="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="p">)</span>
-</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a>
+</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="nd">@property</span>
+</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</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-2316"><a href="#L-2316"><span class="linenos">2316</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-2317"><a href="#L-2317"><span class="linenos">2317</span></a>
+</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="nd">@property</span>
+</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</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-2320"><a href="#L-2320"><span class="linenos">2320</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-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="n">QUERY_MODIFIERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</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-2324"><a href="#L-2324"><span class="linenos">2324</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-2325"><a href="#L-2325"><span class="linenos">2325</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-2326"><a href="#L-2326"><span class="linenos">2326</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-2327"><a href="#L-2327"><span class="linenos">2327</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-2328"><a href="#L-2328"><span class="linenos">2328</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-2329"><a href="#L-2329"><span class="linenos">2329</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-2330"><a href="#L-2330"><span class="linenos">2330</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-2331"><a href="#L-2331"><span class="linenos">2331</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-2332"><a href="#L-2332"><span class="linenos">2332</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-2333"><a href="#L-2333"><span class="linenos">2333</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-2334"><a href="#L-2334"><span class="linenos">2334</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-2335"><a href="#L-2335"><span class="linenos">2335</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-2336"><a href="#L-2336"><span class="linenos">2336</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-2337"><a href="#L-2337"><span class="linenos">2337</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-2338"><a href="#L-2338"><span class="linenos">2338</span></a> <span class="s2">&quot;locks&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</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-2340"><a href="#L-2340"><span class="linenos">2340</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="s2">&quot;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a><span class="p">}</span>
-</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</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">select</span><span class="p">(</span>
+</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</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-2326"><a href="#L-2326"><span class="linenos">2326</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-2327"><a href="#L-2327"><span class="linenos">2327</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-2328"><a href="#L-2328"><span class="linenos">2328</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2329"><a href="#L-2329"><span class="linenos">2329</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
+</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `select`&quot;</span><span class="p">)</span>
+</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a>
+</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="L-2333"><a href="#L-2333"><span class="linenos">2333</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a> <span class="n">recursive</span><span 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-2337"><a href="#L-2337"><span class="linenos">2337</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-2338"><a href="#L-2338"><span class="linenos">2338</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-2339"><a href="#L-2339"><span class="linenos">2339</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-2340"><a href="#L-2340"><span class="linenos">2340</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
+</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</span></a><span class="sd"> Append to or set the common table expressions.</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="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a><span class="k">class</span> <span class="nc">WithTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</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-2345"><a href="#L-2345"><span class="linenos">2345</span></a><span class="sd"> Example:</span>
+</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</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-2347"><a href="#L-2347"><span class="linenos">2347</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</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><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a><span class="k">class</span> <span class="nc">IndexTableHint</span><span class="p">(</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">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;target&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a>
-</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a>
-</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</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-2356"><a href="#L-2356"><span class="linenos">2356</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</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-2358"><a href="#L-2358"><span class="linenos">2358</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-2359"><a href="#L-2359"><span class="linenos">2359</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-2360"><a href="#L-2360"><span class="linenos">2360</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-2361"><a href="#L-2361"><span class="linenos">2361</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-2362"><a href="#L-2362"><span class="linenos">2362</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-2363"><a href="#L-2363"><span class="linenos">2363</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-2364"><a href="#L-2364"><span class="linenos">2364</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-2365"><a href="#L-2365"><span class="linenos">2365</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-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="p">}</span>
+</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a><span class="sd"> Args:</span>
+</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
+</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
+</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2358"><a href="#L-2358"><span class="linenos">2358</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a><span class="sd"> The modified expression.</span>
+</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="p">)</span>
</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a>
-</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="nd">@property</span>
-</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</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-2370"><a href="#L-2370"><span class="linenos">2370</span></a> <span class="k">if</span> <span class="nb">isinstance</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="n">Func</span><span class="p">):</span>
-</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2372"><a href="#L-2372"><span class="linenos">2372</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-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="nd">@property</span>
-</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</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-2376"><a href="#L-2376"><span class="linenos">2376</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-2377"><a href="#L-2377"><span class="linenos">2377</span></a>
-</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="nd">@property</span>
-</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</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-2380"><a href="#L-2380"><span class="linenos">2380</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-2381"><a href="#L-2381"><span class="linenos">2381</span></a>
-</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="nd">@property</span>
-</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</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-2384"><a href="#L-2384"><span class="linenos">2384</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a>
-</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a> <span class="nd">@property</span>
-</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</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-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a>
-</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a> <span class="nd">@property</span>
-</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</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-2392"><a href="#L-2392"><span class="linenos">2392</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a table in order catalog, db, table.&quot;&quot;&quot;</span>
-</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="n">parts</span><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">Identifier</span><span class="p">]</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><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">):</span>
-</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</span></a> <span class="n">part</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="n">arg</span><span class="p">)</span>
+</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a>
+</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a><span class="n">QUERY_MODIFIERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</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-2371"><a href="#L-2371"><span class="linenos">2371</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-2372"><a href="#L-2372"><span class="linenos">2372</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-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="s2">&quot;connect&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</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-2375"><a href="#L-2375"><span class="linenos">2375</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-2376"><a href="#L-2376"><span class="linenos">2376</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-2377"><a href="#L-2377"><span class="linenos">2377</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-2378"><a href="#L-2378"><span class="linenos">2378</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-2379"><a href="#L-2379"><span class="linenos">2379</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-2380"><a href="#L-2380"><span class="linenos">2380</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-2381"><a href="#L-2381"><span class="linenos">2381</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-2382"><a href="#L-2382"><span class="linenos">2382</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-2383"><a href="#L-2383"><span class="linenos">2383</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-2384"><a href="#L-2384"><span class="linenos">2384</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-2385"><a href="#L-2385"><span class="linenos">2385</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-2386"><a href="#L-2386"><span class="linenos">2386</span></a> <span class="s2">&quot;locks&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</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-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="s2">&quot;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a><span class="p">}</span>
+</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a>
+</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="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a><span class="k">class</span> <span class="nc">WithTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</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-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><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
+</span><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a><span class="k">class</span> <span class="nc">IndexTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;target&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="k">return</span> <span class="n">parts</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><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a><span class="c1"># See the TSQL &quot;Querying data in a system-versioned temporal table&quot; page</span>
-</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</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-2408"><a href="#L-2408"><span class="linenos">2408</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</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-2410"><a href="#L-2410"><span class="linenos">2410</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-2411"><a href="#L-2411"><span class="linenos">2411</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-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="p">}</span>
-</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a>
-</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a>
-</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</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-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</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-2418"><a href="#L-2418"><span class="linenos">2418</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-2419"><a href="#L-2419"><span class="linenos">2419</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-2420"><a href="#L-2420"><span class="linenos">2420</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-2421"><a href="#L-2421"><span class="linenos">2421</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="p">}</span>
-</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a>
-</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2426"><a href="#L-2426"><span class="linenos">2426</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a><span class="sd"> Set the LIMIT expression.</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="sd"> Example:</span>
-</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</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-2432"><a href="#L-2432"><span class="linenos">2432</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
-</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a>
-</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a><span class="sd"> Args:</span>
-</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="L-2438"><a href="#L-2438"><span class="linenos">2438</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="L-2439"><a href="#L-2439"><span class="linenos">2439</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a>
-</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2444"><a href="#L-2444"><span class="linenos">2444</span></a><span class="sd"> The limited subqueryable.</span>
-</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</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-2448"><a href="#L-2448"><span class="linenos">2448</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-2449"><a href="#L-2449"><span class="linenos">2449</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-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="p">)</span>
+</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</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-2404"><a href="#L-2404"><span class="linenos">2404</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</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-2406"><a href="#L-2406"><span class="linenos">2406</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-2407"><a href="#L-2407"><span class="linenos">2407</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-2408"><a href="#L-2408"><span class="linenos">2408</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-2409"><a href="#L-2409"><span class="linenos">2409</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-2410"><a href="#L-2410"><span class="linenos">2410</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-2411"><a href="#L-2411"><span class="linenos">2411</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-2412"><a href="#L-2412"><span class="linenos">2412</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-2413"><a href="#L-2413"><span class="linenos">2413</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-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</span></a> <span class="p">}</span>
+</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a>
+</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a> <span class="nd">@property</span>
+</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</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-2419"><a href="#L-2419"><span class="linenos">2419</span></a> <span class="k">if</span> <span class="nb">isinstance</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="n">Func</span><span class="p">):</span>
+</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</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-2422"><a href="#L-2422"><span class="linenos">2422</span></a>
+</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="nd">@property</span>
+</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</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-2425"><a href="#L-2425"><span class="linenos">2425</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-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="nd">@property</span>
+</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</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-2429"><a href="#L-2429"><span class="linenos">2429</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-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="nd">@property</span>
+</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</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-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a>
+</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="nd">@property</span>
+</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</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-2437"><a href="#L-2437"><span class="linenos">2437</span></a> <span class="k">return</span> <span class="p">[]</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="nd">@property</span>
+</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</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-2441"><a href="#L-2441"><span class="linenos">2441</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a table in order catalog, db, table.&quot;&quot;&quot;</span>
+</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a> <span class="n">parts</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <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">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">):</span>
+</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="n">part</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="n">arg</span><span class="p">)</span>
+</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a>
+</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a>
-</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</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-2456"><a href="#L-2456"><span class="linenos">2456</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-2457"><a href="#L-2457"><span class="linenos">2457</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-2458"><a href="#L-2458"><span class="linenos">2458</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</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-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="sd"> Example:</span>
-</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</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-2465"><a href="#L-2465"><span class="linenos">2465</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-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="sd"> Args:</span>
-</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a><span class="sd"> Union: the modified expression.</span>
-</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</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-2480"><a href="#L-2480"><span class="linenos">2480</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-2481"><a href="#L-2481"><span class="linenos">2481</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-2482"><a href="#L-2482"><span class="linenos">2482</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-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="p">)</span>
-</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="k">return</span> <span class="n">this</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="nd">@property</span>
-</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</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-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">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-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="nd">@property</span>
-</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</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-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2493"><a href="#L-2493"><span class="linenos">2493</span></a>
-</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="nd">@property</span>
-</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</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-2496"><a href="#L-2496"><span class="linenos">2496</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-2497"><a href="#L-2497"><span class="linenos">2497</span></a>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="nd">@property</span>
-</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</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-2500"><a href="#L-2500"><span class="linenos">2500</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-2501"><a href="#L-2501"><span class="linenos">2501</span></a>
-</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="nd">@property</span>
-</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</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-2504"><a href="#L-2504"><span class="linenos">2504</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-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><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</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-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="k">pass</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><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</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-2512"><a href="#L-2512"><span class="linenos">2512</span></a> <span class="k">pass</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><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</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-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</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-2518"><a href="#L-2518"><span class="linenos">2518</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-2519"><a href="#L-2519"><span class="linenos">2519</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-2520"><a href="#L-2520"><span class="linenos">2520</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-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="p">}</span>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a>
-</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</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-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</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-2527"><a href="#L-2527"><span class="linenos">2527</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-2528"><a href="#L-2528"><span class="linenos">2528</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-2529"><a href="#L-2529"><span class="linenos">2529</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-2530"><a href="#L-2530"><span class="linenos">2530</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-2531"><a href="#L-2531"><span class="linenos">2531</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-2532"><a href="#L-2532"><span class="linenos">2532</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-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="p">}</span>
+</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="k">return</span> <span class="n">parts</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><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</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-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</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-2458"><a href="#L-2458"><span class="linenos">2458</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-2459"><a href="#L-2459"><span class="linenos">2459</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-2460"><a href="#L-2460"><span class="linenos">2460</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-2461"><a href="#L-2461"><span class="linenos">2461</span></a> <span class="s2">&quot;by_name&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="p">}</span>
+</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a>
+</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a><span class="sd"> Set the LIMIT expression.</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"> Example:</span>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</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-2473"><a href="#L-2473"><span class="linenos">2473</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
+</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a><span class="sd"> Args:</span>
+</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a><span class="sd"> The limited subqueryable.</span>
+</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</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-2489"><a href="#L-2489"><span class="linenos">2489</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-2490"><a href="#L-2490"><span class="linenos">2490</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-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="p">)</span>
+</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a>
+</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="k">def</span> <span class="nf">select</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="p">,</span>
+</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</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-2497"><a href="#L-2497"><span class="linenos">2497</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-2498"><a href="#L-2498"><span class="linenos">2498</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-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</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-2502"><a href="#L-2502"><span class="linenos">2502</span></a>
+</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a><span class="sd"> Example:</span>
+</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</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-2506"><a href="#L-2506"><span class="linenos">2506</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-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"> Args:</span>
+</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a><span class="sd"> Union: the modified expression.</span>
+</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</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-2521"><a href="#L-2521"><span class="linenos">2521</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-2522"><a href="#L-2522"><span class="linenos">2522</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-2523"><a href="#L-2523"><span class="linenos">2523</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-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="p">)</span>
+</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a>
+</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="nd">@property</span>
+</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</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-2529"><a href="#L-2529"><span class="linenos">2529</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-2530"><a href="#L-2530"><span class="linenos">2530</span></a>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="nd">@property</span>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</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-2533"><a href="#L-2533"><span class="linenos">2533</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-2534"><a href="#L-2534"><span class="linenos">2534</span></a>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</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-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</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-2539"><a href="#L-2539"><span class="linenos">2539</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-2540"><a href="#L-2540"><span class="linenos">2540</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-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="p">}</span>
+</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="nd">@property</span>
+</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</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-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">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-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="nd">@property</span>
+</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</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-2541"><a href="#L-2541"><span class="linenos">2541</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-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><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</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-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="k">pass</span>
+</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="nd">@property</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</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-2545"><a href="#L-2545"><span class="linenos">2545</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-2546"><a href="#L-2546"><span class="linenos">2546</span></a>
</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</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-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">arg_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-2548"><a href="#L-2548"><span class="linenos">2548</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-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="k">pass</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><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/select.html</span>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a><span class="c1"># https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/SELECT.html</span>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</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-2555"><a href="#L-2555"><span class="linenos">2555</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 class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wait&quot;</span><span class="p">:</span> <span class="kc">False</span><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><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</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-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</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-2561"><a href="#L-2561"><span class="linenos">2561</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-2562"><a href="#L-2562"><span class="linenos">2562</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-2563"><a href="#L-2563"><span class="linenos">2563</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-2564"><a href="#L-2564"><span class="linenos">2564</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-2565"><a href="#L-2565"><span class="linenos">2565</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-2566"><a href="#L-2566"><span class="linenos">2566</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-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="p">}</span>
-</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="bp">self</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">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="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><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a><span class="sd"> Set the FROM expression.</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="sd"> Example:</span>
-</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
-</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a><span class="sd"> &#39;SELECT x FROM tbl&#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 : the SQL code strings to parse.</span>
-</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
-</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
-</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a>
-</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2593"><a href="#L-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="L-2594"><a href="#L-2594"><span class="linenos">2594</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-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</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-2597"><a href="#L-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="L-2598"><a href="#L-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="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="p">)</span>
-</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span>
-</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</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-2606"><a href="#L-2606"><span class="linenos">2606</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-2607"><a href="#L-2607"><span class="linenos">2607</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-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a><span class="sd"> Set the GROUP BY expression.</span>
+</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</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-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="k">pass</span>
+</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a>
+</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a>
+</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a><span class="k">class</span> <span class="nc">Unnest</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</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-2559"><a href="#L-2559"><span class="linenos">2559</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-2560"><a href="#L-2560"><span class="linenos">2560</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-2561"><a href="#L-2561"><span class="linenos">2561</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-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="p">}</span>
+</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a>
+</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a>
+</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</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-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</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-2568"><a href="#L-2568"><span class="linenos">2568</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-2569"><a href="#L-2569"><span class="linenos">2569</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-2570"><a href="#L-2570"><span class="linenos">2570</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-2571"><a href="#L-2571"><span class="linenos">2571</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-2572"><a href="#L-2572"><span class="linenos">2572</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-2573"><a href="#L-2573"><span class="linenos">2573</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-2574"><a href="#L-2574"><span class="linenos">2574</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-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <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><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</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-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</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-2581"><a href="#L-2581"><span class="linenos">2581</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-2582"><a href="#L-2582"><span class="linenos">2582</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-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><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</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-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="k">pass</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><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a><span class="k">class</span> <span class="nc">Version</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a><span class="sd"> Time travel, iceberg, bigquery etc</span>
+</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a><span class="sd"> https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots</span>
+</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a><span class="sd"> https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a><span class="sd"> https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of</span>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a><span class="sd"> https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a><span class="sd"> this is either TIMESTAMP or VERSION</span>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a><span class="sd"> kind is (&quot;AS OF&quot;, &quot;BETWEEN&quot;)</span>
+</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a><span class="sd"> &quot;&quot;&quot;</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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">False</span><span class="p">}</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><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</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-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">arg_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-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><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/select.html</span>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a><span class="c1"># https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/SELECT.html</span>
+</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</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-2611"><a href="#L-2611"><span class="linenos">2611</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 class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wait&quot;</span><span class="p">:</span> <span class="kc">False</span><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="sd"> Example:</span>
-</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</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-2615"><a href="#L-2615"><span class="linenos">2615</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</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"> Args:</span>
-</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
-</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</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-2622"><a href="#L-2622"><span class="linenos">2622</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
-</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a>
-</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</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-2632"><a href="#L-2632"><span class="linenos">2632</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-2633"><a href="#L-2633"><span class="linenos">2633</span></a>
-</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</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-2638"><a href="#L-2638"><span class="linenos">2638</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</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-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
-</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="p">)</span>
-</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a>
-</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span>
-</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</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-2650"><a href="#L-2650"><span class="linenos">2650</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-2651"><a href="#L-2651"><span class="linenos">2651</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-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a><span class="sd"> Set the ORDER BY expression.</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="sd"> Example:</span>
-</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</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-2659"><a href="#L-2659"><span class="linenos">2659</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
-</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a>
-</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a><span class="sd"> Args:</span>
-</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
-</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</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-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</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-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="p">)</span>
-</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a>
-</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span>
-</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</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-2690"><a href="#L-2690"><span class="linenos">2690</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-2691"><a href="#L-2691"><span class="linenos">2691</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-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a><span class="sd"> Set the SORT BY expression.</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="sd"> Example:</span>
-</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
-</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</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="sd"> Args:</span>
-</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
-</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2716"><a href="#L-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="L-2717"><a href="#L-2717"><span class="linenos">2717</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-2718"><a href="#L-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="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</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-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="p">)</span>
-</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span>
-</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <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="o">*</span><span class="n">expressions</span><span 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><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</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-2730"><a href="#L-2730"><span class="linenos">2730</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-2731"><a href="#L-2731"><span class="linenos">2731</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-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
-</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a>
-</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a><span class="sd"> Example:</span>
-</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
-</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</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="sd"> Args:</span>
-</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
-</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a>
-</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</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-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</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-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
-</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="p">)</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="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a><span class="sd"> Set the LIMIT expression.</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="sd"> Example:</span>
-</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</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-2774"><a href="#L-2774"><span class="linenos">2774</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
-</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a>
-</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a><span class="sd"> Args:</span>
-</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a>
-</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</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-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
-</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</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-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="p">)</span>
-</span><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="k">def</span> <span class="nf">offset</span><span class="p">(</span>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a><span class="sd"> Set the OFFSET expression.</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"> Example:</span>
-</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</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-2807"><a href="#L-2807"><span class="linenos">2807</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</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"> Args:</span>
-</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
-</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
-</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</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-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
-</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</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-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</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">class</span> <span class="nc">Select</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</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-2618"><a href="#L-2618"><span class="linenos">2618</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-2619"><a href="#L-2619"><span class="linenos">2619</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-2620"><a href="#L-2620"><span class="linenos">2620</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-2621"><a href="#L-2621"><span class="linenos">2621</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-2622"><a href="#L-2622"><span class="linenos">2622</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-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <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">from_</span><span class="p">(</span>
+</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="bp">self</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">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="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><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a><span class="sd"> Set the FROM expression.</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="sd"> Example:</span>
+</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</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"> Args:</span>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a><span class="sd"> expression : the SQL code strings to parse.</span>
+</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
+</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
+</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
+</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</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-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a> <span class="p">)</span>
+</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span>
+</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</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-2662"><a href="#L-2662"><span class="linenos">2662</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-2663"><a href="#L-2663"><span class="linenos">2663</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-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a><span class="sd"> Set the GROUP BY expression.</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="sd"> Example:</span>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</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-2671"><a href="#L-2671"><span class="linenos">2671</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</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"> Args:</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</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-2678"><a href="#L-2678"><span class="linenos">2678</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a><span class="sd"> opts: other options to use to parse the input 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 Select 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-2687"><a href="#L-2687"><span class="linenos">2687</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-2688"><a href="#L-2688"><span class="linenos">2688</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-2689"><a href="#L-2689"><span class="linenos">2689</span></a>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</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-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</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-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="p">)</span>
+</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a>
+</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span>
+</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <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="o">*</span><span class="n">expressions</span><span 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><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</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-2706"><a href="#L-2706"><span class="linenos">2706</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-2707"><a href="#L-2707"><span class="linenos">2707</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-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a><span class="sd"> Set the ORDER BY expression.</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="sd"> Example:</span>
+</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</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-2715"><a href="#L-2715"><span class="linenos">2715</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a><span class="sd"> Args:</span>
+</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
+</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</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-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</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-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a> <span class="o">**</span><span class="n">opts</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><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span>
+</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</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-2746"><a href="#L-2746"><span class="linenos">2746</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-2747"><a href="#L-2747"><span class="linenos">2747</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-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a><span class="sd"> Set the SORT BY expression.</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="sd"> Example:</span>
+</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
+</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</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="sd"> Args:</span>
+</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
+</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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 class="sd"> Returns:</span>
+</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</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-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</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-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
+</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="p">)</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="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span>
+</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</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-2786"><a href="#L-2786"><span class="linenos">2786</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-2787"><a href="#L-2787"><span class="linenos">2787</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-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a><span class="sd"> Set the CLUSTER BY expression.</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="sd"> Example:</span>
+</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
+</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a>
+</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a><span class="sd"> Args:</span>
+</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
+</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</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-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</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-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
+</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="o">**</span><span class="n">opts</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">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a><span class="sd"> Set the LIMIT expression.</span>
+</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="sd"> Example:</span>
+</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</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-2830"><a href="#L-2830"><span class="linenos">2830</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</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-2836"><a href="#L-2836"><span class="linenos">2836</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-2837"><a href="#L-2837"><span class="linenos">2837</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-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</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"> Append to or set the SELECT expressions.</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a>
-</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a><span class="sd"> Example:</span>
-</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
-</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
-</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a><span class="sd"> Args:</span>
-</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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 class="sd"> Returns:</span>
-</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</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-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="p">)</span>
-</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a>
-</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span>
-</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</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-2873"><a href="#L-2873"><span class="linenos">2873</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-2874"><a href="#L-2874"><span class="linenos">2874</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-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a><span class="sd"> Append to or set the LATERAL expressions.</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="sd"> Example:</span>
-</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</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-2882"><a href="#L-2882"><span class="linenos">2882</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
-</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a>
-</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a><span class="sd"> Args:</span>
-</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a>
-</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</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-2900"><a href="#L-2900"><span class="linenos">2900</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</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-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="p">)</span>
-</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a>
-</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="n">on</span><span 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-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="n">using</span><span 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="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</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-2913"><a href="#L-2913"><span class="linenos">2913</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-2914"><a href="#L-2914"><span class="linenos">2914</span></a> <span class="n">join_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="n">join_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">Identifier</span> <span class="o">|</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-2916"><a href="#L-2916"><span class="linenos">2916</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-2917"><a href="#L-2917"><span class="linenos">2917</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-2918"><a href="#L-2918"><span class="linenos">2918</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
-</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a>
-</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a><span class="sd"> Example:</span>
-</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</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-2925"><a href="#L-2925"><span class="linenos">2925</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</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="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-2928"><a href="#L-2928"><span class="linenos">2928</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a>
-</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
-</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a>
-</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</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-2933"><a href="#L-2933"><span class="linenos">2933</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a>
-</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a><span class="sd"> Args:</span>
-</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a><span class="sd"> on: optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
-</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a><span class="sd"> using: optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
-</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a><span class="sd"> join_type: if set, alter the parsed join type.</span>
-</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a><span class="sd"> join_alias: an optional alias for the joined source.</span>
-</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a>
-</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="n">parse_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;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-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">try</span><span class="p">:</span>
-</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</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-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</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-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 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-2961"><a href="#L-2961"><span class="linenos">2961</span></a>
-</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a> <span class="k">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-2963"><a href="#L-2963"><span class="linenos">2963</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-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">if</span> <span class="n">join_type</span><span class="p">:</span>
-</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span>
-</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</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-2968"><a href="#L-2968"><span class="linenos">2968</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-2969"><a href="#L-2969"><span class="linenos">2969</span></a>
-</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="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-2971"><a href="#L-2971"><span class="linenos">2971</span></a>
-</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="n">method</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="n">side</span><span class="p">:</span>
-</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</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-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</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-2832"><a href="#L-2832"><span class="linenos">2832</span></a><span class="sd"> Args:</span>
+</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="k">return</span> <span class="n">_apply_builder</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="p">,</span>
+</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</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-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</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-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <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="k">def</span> <span class="nf">offset</span><span class="p">(</span>
+</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a><span class="sd"> Example:</span>
+</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</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-2863"><a href="#L-2863"><span class="linenos">2863</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</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="sd"> Args:</span>
+</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
+</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
+</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a>
+</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</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-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
+</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</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-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="o">**</span><span class="n">opts</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-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">select</span><span class="p">(</span>
+</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</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-2892"><a href="#L-2892"><span class="linenos">2892</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-2893"><a href="#L-2893"><span class="linenos">2893</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-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a><span class="sd"> Append to or set the SELECT expressions.</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="sd"> Example:</span>
+</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
+</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a>
+</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a><span class="sd"> Args:</span>
+</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</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-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="p">)</span>
+</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a>
+</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span>
+</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</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-2929"><a href="#L-2929"><span class="linenos">2929</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-2930"><a href="#L-2930"><span class="linenos">2930</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-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
+</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a>
+</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a><span class="sd"> Example:</span>
+</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</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-2938"><a href="#L-2938"><span class="linenos">2938</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
+</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a><span class="sd"> Args:</span>
+</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</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-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</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-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="o">**</span><span class="n">opts</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">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="n">on</span><span 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-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="n">using</span><span 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="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</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-2969"><a href="#L-2969"><span class="linenos">2969</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-2970"><a href="#L-2970"><span class="linenos">2970</span></a> <span class="n">join_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="n">join_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">Identifier</span> <span class="o">|</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-2972"><a href="#L-2972"><span class="linenos">2972</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-2973"><a href="#L-2973"><span class="linenos">2973</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-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a>
-</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
-</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</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_list</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-2981"><a href="#L-2981"><span class="linenos">2981</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-2979"><a href="#L-2979"><span class="linenos">2979</span></a><span class="sd"> Example:</span>
+</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</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-2981"><a href="#L-2981"><span class="linenos">2981</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</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="n">using</span><span class="p">:</span>
-</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</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-2985"><a href="#L-2985"><span class="linenos">2985</span></a> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
-</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
-</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</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-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="p">)</span>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a>
-</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
-</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</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-2996"><a href="#L-2996"><span class="linenos">2996</span></a>
-</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a> <span class="n">join</span><span class="p">,</span>
-</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</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-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="p">)</span>
+</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</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-2984"><a href="#L-2984"><span class="linenos">2984</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
+</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a>
+</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
+</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a><span class="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-2989"><a href="#L-2989"><span class="linenos">2989</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a>
+</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a><span class="sd"> Args:</span>
+</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a><span class="sd"> on: optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a><span class="sd"> using: optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
+</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a><span class="sd"> join_type: if set, alter the parsed join type.</span>
+</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a><span class="sd"> join_alias: an optional alias for the joined source.</span>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a>
-</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</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-3010"><a href="#L-3010"><span class="linenos">3010</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-3011"><a href="#L-3011"><span class="linenos">3011</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-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a>
-</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a><span class="sd"> Example:</span>
-</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</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-3019"><a href="#L-3019"><span class="linenos">3019</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-3006"><a href="#L-3006"><span class="linenos">3006</span></a><span class="sd"> Returns:</span>
+</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="n">parse_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;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-3010"><a href="#L-3010"><span class="linenos">3010</span></a>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</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-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</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-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="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-3017"><a href="#L-3017"><span class="linenos">3017</span></a>
+</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</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-3019"><a href="#L-3019"><span class="linenos">3019</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-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="sd"> Args:</span>
-</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</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-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="p">)</span>
-</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a>
-</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span>
-</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</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-3049"><a href="#L-3049"><span class="linenos">3049</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-3050"><a href="#L-3050"><span class="linenos">3050</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-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="o">**</span><span class="n">opts</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 class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a><span class="sd"> Append to or set the HAVING expressions.</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="sd"> Example:</span>
-</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</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-3058"><a href="#L-3058"><span class="linenos">3058</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-3059"><a href="#L-3059"><span class="linenos">3059</span></a>
-</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a><span class="sd"> Args:</span>
-</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</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-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
-</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a> <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="k">def</span> <span class="nf">window</span><span class="p">(</span>
-</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</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-3088"><a href="#L-3088"><span class="linenos">3088</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-3089"><a href="#L-3089"><span class="linenos">3089</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-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</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-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="p">)</span>
-</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a>
-</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span>
-</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</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-3107"><a href="#L-3107"><span class="linenos">3107</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-3108"><a href="#L-3108"><span class="linenos">3108</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-3109"><a href="#L-3109"><span class="linenos">3109</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</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-3115"><a href="#L-3115"><span class="linenos">3115</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
-</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a> <span class="p">)</span>
-</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a>
-</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span>
-</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">ons</span><span 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="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><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a><span class="sd"> Set the OFFSET expression.</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 class="sd"> Example:</span>
-</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
-</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</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 class="sd"> Args:</span>
-</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a><span class="sd"> ons: the expressions to distinct on</span>
-</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
-</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a>
-</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a><span class="sd"> Returns:</span>
-</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</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-3141"><a href="#L-3141"><span class="linenos">3141</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="k">if</span> <span class="n">on</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-3142"><a href="#L-3142"><span class="linenos">3142</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-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="k">return</span> <span class="n">instance</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">def</span> <span class="nf">ctas</span><span class="p">(</span>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</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-3150"><a href="#L-3150"><span class="linenos">3150</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-3151"><a href="#L-3151"><span class="linenos">3151</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Create</span><span class="p">:</span>
-</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
-</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a>
-</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a><span class="sd"> Example:</span>
-</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</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-3158"><a href="#L-3158"><span class="linenos">3158</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
-</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 class="sd"> Args:</span>
-</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a><span class="sd"> table: the SQL code string to parse as the table name.</span>
-</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a><span class="sd"> properties: an optional mapping of table properties</span>
-</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a><span class="sd"> dialect: the dialect used to parse the input table.</span>
-</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a><span class="sd"> opts: other options to use to parse the input table.</span>
-</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 class="sd"> Returns:</span>
-</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a><span class="sd"> The new Create expression.</span>
-</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</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-3172"><a href="#L-3172"><span class="linenos">3172</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-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="n">table</span><span class="p">,</span>
-</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="p">)</span>
-</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</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-3181"><a href="#L-3181"><span class="linenos">3181</span></a>
-</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
-</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</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-3184"><a href="#L-3184"><span class="linenos">3184</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-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</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-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="p">)</span>
-</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a>
-</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="k">def</span> <span class="nf">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-3190"><a href="#L-3190"><span class="linenos">3190</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
+</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="n">method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span>
+</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</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-3024"><a href="#L-3024"><span class="linenos">3024</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-3025"><a href="#L-3025"><span class="linenos">3025</span></a>
+</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="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-3027"><a href="#L-3027"><span class="linenos">3027</span></a>
+</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="n">method</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="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</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-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</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-3034"><a href="#L-3034"><span class="linenos">3034</span></a>
+</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
+</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</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_list</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-3037"><a href="#L-3037"><span class="linenos">3037</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-3038"><a href="#L-3038"><span class="linenos">3038</span></a>
+</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</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-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
+</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
+</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</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-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <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">join_alias</span><span class="p">:</span>
+</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</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-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">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="n">join</span><span class="p">,</span>
+</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</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-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="p">)</span>
+</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a>
+</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</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-3066"><a href="#L-3066"><span class="linenos">3066</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-3067"><a href="#L-3067"><span class="linenos">3067</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-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a>
+</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a><span class="sd"> Example:</span>
+</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</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-3075"><a href="#L-3075"><span class="linenos">3075</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-3076"><a href="#L-3076"><span class="linenos">3076</span></a>
+</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a><span class="sd"> Args:</span>
+</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</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-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="p">)</span>
+</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a>
+</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="k">def</span> <span class="nf">having</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="p">,</span>
+</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</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-3105"><a href="#L-3105"><span class="linenos">3105</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-3106"><a href="#L-3106"><span class="linenos">3106</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-3107"><a href="#L-3107"><span class="linenos">3107</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a><span class="sd"> Append to or set the HAVING expressions.</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="sd"> Example:</span>
+</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</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-3114"><a href="#L-3114"><span class="linenos">3114</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-3115"><a href="#L-3115"><span class="linenos">3115</span></a>
+</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a><span class="sd"> Args:</span>
+</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</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-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
+</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <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">def</span> <span class="nf">window</span><span class="p">(</span>
+</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</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-3144"><a href="#L-3144"><span class="linenos">3144</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-3145"><a href="#L-3145"><span class="linenos">3145</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-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3151"><a href="#L-3151"><span class="linenos">3151</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-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <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">qualify</span><span class="p">(</span>
+</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</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-3163"><a href="#L-3163"><span class="linenos">3163</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-3164"><a href="#L-3164"><span class="linenos">3164</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-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</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-3171"><a href="#L-3171"><span class="linenos">3171</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
+</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="o">**</span><span class="n">opts</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><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span>
+</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <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">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="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><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a><span class="sd"> Set the OFFSET expression.</span>
+</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 class="sd"> Example:</span>
+</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
+</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
+</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="sd"> Args:</span>
+</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a><span class="sd"> ons: the expressions to distinct on</span>
+</span><span id="L-3190"><a href="#L-3190"><span class="linenos">3190</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
+</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</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="sd"> Examples:</span>
-</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</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-3195"><a href="#L-3195"><span class="linenos">3195</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</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="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-3198"><a href="#L-3198"><span class="linenos">3198</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
-</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a>
-</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a><span class="sd"> Args:</span>
-</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</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-3202"><a href="#L-3202"><span class="linenos">3202</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</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="sd"> Returns:</span>
-</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a><span class="sd"> The modified expression.</span>
-</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</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-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</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-3209"><a href="#L-3209"><span class="linenos">3209</span></a>
-</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a><span class="sd"> Returns:</span>
+</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</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-3197"><a href="#L-3197"><span class="linenos">3197</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="k">if</span> <span class="n">on</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-3198"><a href="#L-3198"><span class="linenos">3198</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-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a>
+</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="k">def</span> <span class="nf">ctas</span><span class="p">(</span>
+</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</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-3206"><a href="#L-3206"><span class="linenos">3206</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-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Create</span><span class="p">:</span>
+</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</span></a>
-</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="k">def</span> <span class="nf">hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">hints</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="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-3213"><a href="#L-3213"><span class="linenos">3213</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a><span class="sd"> Set hints for this expression.</span>
+</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a><span class="sd"> Example:</span>
+</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</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-3214"><a href="#L-3214"><span class="linenos">3214</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</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="sd"> Examples:</span>
-</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).hint(&quot;BROADCAST(y)&quot;).sql(dialect=&quot;spark&quot;)</span>
-</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a><span class="sd"> &#39;SELECT /*+ BROADCAST(y) */ x FROM tbl&#39;</span>
-</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a>
-</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a><span class="sd"> Args:</span>
-</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a><span class="sd"> hints: The SQL code strings to parse as the hints.</span>
-</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a><span class="sd"> dialect: The dialect used to parse the hints.</span>
-</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a><span class="sd"> copy: If `False`, modify this expression instance in-place.</span>
-</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a>
-</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a><span class="sd"> Returns:</span>
-</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a><span class="sd"> The modified expression.</span>
-</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</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-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">,</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="n">maybe_parse</span><span class="p">(</span><span class="n">h</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="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span>
-</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="p">)</span>
-</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a>
-</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="k">return</span> <span class="n">inst</span>
-</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a>
-</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="nd">@property</span>
-</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</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-3238"><a href="#L-3238"><span class="linenos">3238</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-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="nd">@property</span>
-</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</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-3242"><a href="#L-3242"><span class="linenos">3242</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-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="nd">@property</span>
-</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</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-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">expressions</span>
-</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a>
+</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a><span class="sd"> Args:</span>
+</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a><span class="sd"> table: the SQL code string to parse as the table name.</span>
+</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a><span class="sd"> properties: an optional mapping of table properties</span>
+</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a><span class="sd"> dialect: the dialect used to parse the input table.</span>
+</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a><span class="sd"> opts: other options to use to parse the input table.</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="sd"> Returns:</span>
+</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a><span class="sd"> The new Create expression.</span>
+</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</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-3228"><a href="#L-3228"><span class="linenos">3228</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-3229"><a href="#L-3229"><span class="linenos">3229</span></a> <span class="n">table</span><span class="p">,</span>
+</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="p">)</span>
+</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</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-3237"><a href="#L-3237"><span class="linenos">3237</span></a>
+</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
+</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</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-3240"><a href="#L-3240"><span class="linenos">3240</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-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</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-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="p">)</span>
+</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a>
+</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="k">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-3246"><a href="#L-3246"><span class="linenos">3246</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a><span class="sd"> Set the locking read mode for this expression.</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">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-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</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-3252"><a href="#L-3252"><span class="linenos">3252</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-3253"><a href="#L-3253"><span class="linenos">3253</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-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="p">}</span>
-</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a>
-</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a><span class="sd"> Returns the first non subquery.</span>
-</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
-</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</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-3263"><a href="#L-3263"><span class="linenos">3263</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-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a><span class="sd"> Examples:</span>
+</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</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-3251"><a href="#L-3251"><span class="linenos">3251</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&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="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-3254"><a href="#L-3254"><span class="linenos">3254</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</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="sd"> Args:</span>
+</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</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-3258"><a href="#L-3258"><span class="linenos">3258</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</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="sd"> Returns:</span>
+</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a><span class="sd"> The modified expression.</span>
+</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</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-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</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-3265"><a href="#L-3265"><span class="linenos">3265</span></a>
-</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="nd">@property</span>
-</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</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-3268"><a href="#L-3268"><span class="linenos">3268</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-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="nd">@property</span>
-</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</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-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">alias</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><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</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-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</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-3278"><a href="#L-3278"><span class="linenos">3278</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-3279"><a href="#L-3279"><span class="linenos">3279</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-3280"><a href="#L-3280"><span class="linenos">3280</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-3281"><a href="#L-3281"><span class="linenos">3281</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-3282"><a href="#L-3282"><span class="linenos">3282</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-3283"><a href="#L-3283"><span class="linenos">3283</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-3284"><a href="#L-3284"><span class="linenos">3284</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-3285"><a href="#L-3285"><span class="linenos">3285</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-3286"><a href="#L-3286"><span class="linenos">3286</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-3287"><a href="#L-3287"><span class="linenos">3287</span></a> <span class="p">}</span>
-</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a>
+</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a>
+</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">def</span> <span class="nf">hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">hints</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="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-3269"><a href="#L-3269"><span class="linenos">3269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a><span class="sd"> Set hints for this expression.</span>
+</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a>
+</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a><span class="sd"> Examples:</span>
+</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).hint(&quot;BROADCAST(y)&quot;).sql(dialect=&quot;spark&quot;)</span>
+</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a><span class="sd"> &#39;SELECT /*+ BROADCAST(y) */ x FROM tbl&#39;</span>
+</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a>
+</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a><span class="sd"> Args:</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a><span class="sd"> hints: The SQL code strings to parse as the hints.</span>
+</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a><span class="sd"> dialect: The dialect used to parse the hints.</span>
+</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a><span class="sd"> copy: If `False`, modify this expression instance in-place.</span>
+</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a>
+</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a><span class="sd"> Returns:</span>
+</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a><span class="sd"> The modified expression.</span>
+</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</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-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">,</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="n">maybe_parse</span><span class="p">(</span><span class="n">h</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="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span>
+</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <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">class</span> <span class="nc">Tag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</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-3292"><a href="#L-3292"><span class="linenos">3292</span></a>
-</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</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-3295"><a href="#L-3295"><span class="linenos">3295</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-3296"><a href="#L-3296"><span class="linenos">3296</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-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="p">}</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a>
+</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a> <span class="k">return</span> <span class="n">inst</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="nd">@property</span>
+</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</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-3294"><a href="#L-3294"><span class="linenos">3294</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-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="nd">@property</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</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-3298"><a href="#L-3298"><span class="linenos">3298</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-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="c1"># Represents both the standard SQL PIVOT operator and DuckDB&#39;s &quot;simplified&quot; PIVOT syntax</span>
-</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a><span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</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-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="n">arg_types</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="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</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-3306"><a href="#L-3306"><span class="linenos">3306</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-3307"><a href="#L-3307"><span class="linenos">3307</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-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</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-3310"><a href="#L-3310"><span class="linenos">3310</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-3311"><a href="#L-3311"><span class="linenos">3311</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-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><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">class</span> <span class="nc">Window</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</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-3318"><a href="#L-3318"><span class="linenos">3318</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-3319"><a href="#L-3319"><span class="linenos">3319</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-3320"><a href="#L-3320"><span class="linenos">3320</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-3321"><a href="#L-3321"><span class="linenos">3321</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-3322"><a href="#L-3322"><span class="linenos">3322</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-3323"><a href="#L-3323"><span class="linenos">3323</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-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="p">}</span>
-</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><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</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-3328"><a href="#L-3328"><span class="linenos">3328</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</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-3330"><a href="#L-3330"><span class="linenos">3330</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-3331"><a href="#L-3331"><span class="linenos">3331</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-3332"><a href="#L-3332"><span class="linenos">3332</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-3333"><a href="#L-3333"><span class="linenos">3333</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-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="p">}</span>
-</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a>
-</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a>
-</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</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-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="k">pass</span>
-</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a>
-</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 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-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;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-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="nd">@property</span>
-</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</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-3346"><a href="#L-3346"><span class="linenos">3346</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
+</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="nd">@property</span>
+</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</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-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">expressions</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><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</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-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</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-3308"><a href="#L-3308"><span class="linenos">3308</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-3309"><a href="#L-3309"><span class="linenos">3309</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-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="p">}</span>
+</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a>
+</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a><span class="sd"> Returns the first non subquery.</span>
+</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</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-3319"><a href="#L-3319"><span class="linenos">3319</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-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="k">return</span> <span class="n">expression</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">def</span> <span class="nf">unwrap</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="k">while</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_wrapper</span><span class="p">:</span>
+</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</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">Subquery</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span>
+</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a>
+</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a> <span class="nd">@property</span>
+</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="k">def</span> <span class="nf">is_wrapper</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-3330"><a href="#L-3330"><span class="linenos">3330</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a><span class="sd"> Whether this Subquery acts as a simple wrapper around another expression.</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 class="sd"> SELECT * FROM (((SELECT * FROM t)))</span>
+</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a><span class="sd"> ^</span>
+</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a><span class="sd"> This corresponds to a &quot;wrapper&quot; Subquery node</span>
+</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a> <span class="k">return</span> <span class="nb">all</span><span class="p">(</span><span class="n">v</span> <span class="ow">is</span> <span class="kc">None</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="bp">self</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="o">!=</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a>
+</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="nd">@property</span>
+</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</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-3341"><a href="#L-3341"><span class="linenos">3341</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-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="nd">@property</span>
+</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</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-3345"><a href="#L-3345"><span class="linenos">3345</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-3346"><a href="#L-3346"><span class="linenos">3346</span></a>
</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a>
-</span><span id="L-3348"><a href="#L-3348"><span class="linenos">3348</span></a> <span class="nd">@property</span>
-</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</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-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">name</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><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a><span class="k">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3358"><a href="#L-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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a>
-</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a>
-</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3362"><a href="#L-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;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">False</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><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</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-3366"><a href="#L-3366"><span class="linenos">3366</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-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="nd">@property</span>
-</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</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-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="L-3348"><a href="#L-3348"><span class="linenos">3348</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-3349"><a href="#L-3349"><span class="linenos">3349</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</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-3351"><a href="#L-3351"><span class="linenos">3351</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-3352"><a href="#L-3352"><span class="linenos">3352</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-3353"><a href="#L-3353"><span class="linenos">3353</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-3354"><a href="#L-3354"><span class="linenos">3354</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-3355"><a href="#L-3355"><span class="linenos">3355</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-3356"><a href="#L-3356"><span class="linenos">3356</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-3357"><a href="#L-3357"><span class="linenos">3357</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-3358"><a href="#L-3358"><span class="linenos">3358</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-3359"><a href="#L-3359"><span class="linenos">3359</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-3360"><a href="#L-3360"><span class="linenos">3360</span></a> <span class="p">}</span>
+</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a>
+</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a>
+</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</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-3364"><a href="#L-3364"><span class="linenos">3364</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-3365"><a href="#L-3365"><span class="linenos">3365</span></a>
+</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</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-3368"><a href="#L-3368"><span class="linenos">3368</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-3369"><a href="#L-3369"><span class="linenos">3369</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-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <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><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</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-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="k">pass</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><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a><span class="k">class</span> <span class="nc">DataTypeSize</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">DataType</span><span class="p">(</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">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</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-3384"><a href="#L-3384"><span class="linenos">3384</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-3385"><a href="#L-3385"><span class="linenos">3385</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-3386"><a href="#L-3386"><span class="linenos">3386</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-3387"><a href="#L-3387"><span class="linenos">3387</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-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <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 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-3391"><a href="#L-3391"><span class="linenos">3391</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3422"><a href="#L-3422"><span class="linenos">3422</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3453"><a href="#L-3453"><span class="linenos">3453</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3456"><a href="#L-3456"><span class="linenos">3456</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</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-3462"><a href="#L-3462"><span class="linenos">3462</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="s2">&quot;USER-DEFINED&quot;</span>
-</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</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="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <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">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="p">}</span>
-</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a>
-</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a> <span class="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="p">}</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 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-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="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
-</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <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="n">META_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;UNKNOWN&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">}</span>
-</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a>
-</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
-</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</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-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</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-3513"><a href="#L-3513"><span class="linenos">3513</span></a>
-</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</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-3515"><a href="#L-3515"><span class="linenos">3515</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="k">if</span> <span class="n">upper</span> <span class="ow">in</span> <span class="n">DataType</span><span class="o">.</span><span class="n">META_TYPES</span><span class="p">:</span>
-</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</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">upper</span><span class="p">])</span>
-</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</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-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">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-3522"><a href="#L-3522"><span class="linenos">3522</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-3523"><a href="#L-3523"><span class="linenos">3523</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-3524"><a href="#L-3524"><span class="linenos">3524</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-3525"><a href="#L-3525"><span class="linenos">3525</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-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="k">return</span> <span class="n">dtype</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="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-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="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-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">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="n">dtypes</span><span class="p">)</span>
-</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a>
-</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="c1"># https://www.postgresql.org/docs/15/datatype-pseudo.html</span>
-</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</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-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="c1"># WHERE x &lt;OP&gt; EXISTS|ALL|ANY|SOME(SELECT ...)</span>
-</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</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-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="k">pass</span>
-</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><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</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-3547"><a href="#L-3547"><span class="linenos">3547</span></a> <span class="k">pass</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><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</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-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="k">pass</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><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</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-3555"><a href="#L-3555"><span class="linenos">3555</span></a> <span class="k">pass</span>
-</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><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a><span class="c1"># Commands to interact with the databases or engines. For most of the command</span>
-</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a><span class="c1"># expressions we parse whatever comes after the command&#39;s name as a string.</span>
-</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</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-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3373"><a href="#L-3373"><span class="linenos">3373</span></a><span class="c1"># Represents both the standard SQL PIVOT operator and DuckDB&#39;s &quot;simplified&quot; PIVOT syntax</span>
+</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a><span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</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-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</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-3378"><a href="#L-3378"><span class="linenos">3378</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-3379"><a href="#L-3379"><span class="linenos">3379</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-3380"><a href="#L-3380"><span class="linenos">3380</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-3381"><a href="#L-3381"><span class="linenos">3381</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</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-3383"><a href="#L-3383"><span class="linenos">3383</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-3384"><a href="#L-3384"><span class="linenos">3384</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-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="s2">&quot;include_nulls&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="p">}</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">Window</span><span class="p">(</span><span class="n">Condition</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><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</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-3392"><a href="#L-3392"><span class="linenos">3392</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-3393"><a href="#L-3393"><span class="linenos">3393</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-3394"><a href="#L-3394"><span class="linenos">3394</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-3395"><a href="#L-3395"><span class="linenos">3395</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-3396"><a href="#L-3396"><span class="linenos">3396</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-3397"><a href="#L-3397"><span class="linenos">3397</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-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="p">}</span>
+</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a>
+</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a>
+</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</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-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</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-3404"><a href="#L-3404"><span class="linenos">3404</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-3405"><a href="#L-3405"><span class="linenos">3405</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-3406"><a href="#L-3406"><span class="linenos">3406</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-3407"><a href="#L-3407"><span class="linenos">3407</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-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="p">}</span>
+</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a>
+</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a>
+</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</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-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="k">pass</span>
+</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><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</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-3416"><a href="#L-3416"><span class="linenos">3416</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-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="nd">@property</span>
+</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</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-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
+</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="nd">@property</span>
+</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</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-3424"><a href="#L-3424"><span class="linenos">3424</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-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><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3428"><a href="#L-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;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a>
+</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">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="n">arg_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">False</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><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</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-3440"><a href="#L-3440"><span class="linenos">3440</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-3441"><a href="#L-3441"><span class="linenos">3441</span></a>
+</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="nd">@property</span>
+</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</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-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a>
+</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a>
+</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</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-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="k">pass</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><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a><span class="k">class</span> <span class="nc">DataTypeParam</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</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-3456"><a href="#L-3456"><span class="linenos">3456</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</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-3458"><a href="#L-3458"><span class="linenos">3458</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-3459"><a href="#L-3459"><span class="linenos">3459</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-3460"><a href="#L-3460"><span class="linenos">3460</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-3461"><a href="#L-3461"><span class="linenos">3461</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-3462"><a href="#L-3462"><span class="linenos">3462</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-3463"><a href="#L-3463"><span class="linenos">3463</span></a> <span class="p">}</span>
+</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a>
+</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="k">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3472"><a href="#L-3472"><span class="linenos">3472</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="n">ENUM8</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="n">ENUM16</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a> <span class="n">FIXEDSTRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</span></a> <span class="n">LOWCARDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="n">MEDIUMINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="n">NESTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3515"><a href="#L-3515"><span class="linenos">3515</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3524"><a href="#L-3524"><span class="linenos">3524</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</span></a> <span class="n">TIMETZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3535"><a href="#L-3535"><span class="linenos">3535</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3539"><a href="#L-3539"><span class="linenos">3539</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</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-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="s2">&quot;USER-DEFINED&quot;</span>
+</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="n">YEAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a>
+</span><span id="L-3555"><a href="#L-3555"><span class="linenos">3555</span></a> <span class="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="p">}</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><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</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-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <span class="n">arg_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 class="s2">&quot;mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a>
-</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a>
-</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a><span class="k">class</span> <span class="nc">Commit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</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 class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;durability&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a>
+</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <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 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-3573"><a href="#L-3573"><span class="linenos">3573</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 class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a>
-</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 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-3577"><a href="#L-3577"><span class="linenos">3577</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</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-3581"><a href="#L-3581"><span class="linenos">3581</span></a> <span class="n">arg_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-3582"><a href="#L-3582"><span class="linenos">3582</span></a>
-</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 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-3585"><a href="#L-3585"><span class="linenos">3585</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-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 class="c1"># Binary expressions like (ADD a b)</span>
-</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</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-3590"><a href="#L-3590"><span class="linenos">3590</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="nd">@property</span>
-</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</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-3594"><a href="#L-3594"><span class="linenos">3594</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</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="nd">@property</span>
-</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</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-3598"><a href="#L-3598"><span class="linenos">3598</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-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 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-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="k">pass</span>
+</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</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><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a> <span class="n">NUMERIC_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a> <span class="o">*</span><span class="n">INTEGER_TYPES</span><span class="p">,</span>
+</span><span id="L-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="o">*</span><span class="n">FLOAT_TYPES</span><span class="p">,</span>
+</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="p">}</span>
+</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a>
+</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</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><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
+</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a> <span class="bp">cls</span><span class="p">,</span>
+</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a> <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><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</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-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="n">udt</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-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a><span class="sd"> Constructs a DataType object.</span>
</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a>
-</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 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-3606"><a href="#L-3606"><span class="linenos">3606</span></a> <span class="k">pass</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><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</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-3610"><a href="#L-3610"><span class="linenos">3610</span></a> <span class="k">pass</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><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</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-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="k">pass</span>
+</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a><span class="sd"> Args:</span>
+</span><span id="L-3605"><a href="#L-3605"><span class="linenos">3605</span></a><span class="sd"> dtype: the data type of interest.</span>
+</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a><span class="sd"> dialect: the dialect to use for parsing `dtype`, in case it&#39;s a string.</span>
+</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a><span class="sd"> udt: when set to True, `dtype` will be used as-is if it can&#39;t be parsed into a</span>
+</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a><span class="sd"> DataType, thus creating a user-defined type.</span>
+</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a><span class="sd"> kawrgs: additional arguments to pass in the constructor of DataType.</span>
+</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a>
+</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a><span class="sd"> Returns:</span>
+</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a><span class="sd"> The constructed DataType object.</span>
+</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</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-3615"><a href="#L-3615"><span class="linenos">3615</span></a>
-</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a>
-</span><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</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-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="k">pass</span>
+</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</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-3617"><a href="#L-3617"><span class="linenos">3617</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="o">==</span> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span>
+</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="k">return</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="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a>
-</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="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-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="k">pass</span>
-</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a>
-</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a>
-</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</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-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="k">pass</span>
-</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a>
-</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a>
-</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</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-3630"><a href="#L-3630"><span class="linenos">3630</span></a> <span class="k">pass</span>
-</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</span></a>
+</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</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-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="k">if</span> <span class="n">udt</span><span class="p">:</span>
+</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="k">return</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="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">dtype</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</span></a> <span class="k">raise</span>
+</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</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-3627"><a href="#L-3627"><span class="linenos">3627</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-3628"><a href="#L-3628"><span class="linenos">3628</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-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="k">return</span> <span class="n">dtype</span>
+</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</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-3632"><a href="#L-3632"><span class="linenos">3632</span></a>
-</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</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-3634"><a href="#L-3634"><span class="linenos">3634</span></a> <span class="k">pass</span>
-</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</span></a>
-</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">class</span> <span class="nc">Div</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a> <span class="k">pass</span>
+</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</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-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">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a><span class="sd"> Checks whether this DataType matches one of the provided data types. Nested types or precision</span>
+</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a><span class="sd"> will be compared using &quot;structural equivalence&quot; semantics, so e.g. array&lt;int&gt; != array&lt;float&gt;.</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><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</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-3642"><a href="#L-3642"><span class="linenos">3642</span></a> <span class="k">pass</span>
-</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a>
-</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a>
-</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</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-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="nd">@property</span>
-</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</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-3648"><a href="#L-3648"><span class="linenos">3648</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-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="nd">@property</span>
-</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</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-3652"><a href="#L-3652"><span class="linenos">3652</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-3653"><a href="#L-3653"><span class="linenos">3653</span></a>
-</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</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-3656"><a href="#L-3656"><span class="linenos">3656</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-3657"><a href="#L-3657"><span class="linenos">3657</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-3658"><a href="#L-3658"><span class="linenos">3658</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-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="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-3661"><a href="#L-3661"><span class="linenos">3661</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-3640"><a href="#L-3640"><span class="linenos">3640</span></a><span class="sd"> Args:</span>
+</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a><span class="sd"> dtypes: the data types to compare this DataType to.</span>
+</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="sd"> Returns:</span>
+</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a><span class="sd"> True, if and only if there is a type in `dtypes` which is equal to this DataType.</span>
+</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="k">for</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="n">dtypes</span><span class="p">:</span>
+</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a> <span class="n">other</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">dtype</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a>
+</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="n">other</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span>
+</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="ow">or</span> <span class="n">other</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span>
+</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a> <span class="p">):</span>
+</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a> <span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</span></a> <span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a>
+</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a> <span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
+</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</span></a>
</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">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-3664"><a href="#L-3664"><span class="linenos">3664</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-3665"><a href="#L-3665"><span class="linenos">3665</span></a>
-</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</span></a> <span class="k">return</span> <span class="n">dot</span>
+</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a><span class="c1"># https://www.postgresql.org/docs/15/datatype-pseudo.html</span>
+</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</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-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="k">pass</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><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</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-3668"><a href="#L-3668"><span class="linenos">3668</span></a><span class="c1"># WHERE x &lt;OP&gt; EXISTS|ALL|ANY|SOME(SELECT ...)</span>
+</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</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-3670"><a href="#L-3670"><span class="linenos">3670</span></a> <span class="k">pass</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><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</span></a><span class="k">class</span> <span class="nc">SafeDPipe</span><span class="p">(</span><span class="n">DPipe</span><span class="p">):</span>
+</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</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-3674"><a href="#L-3674"><span class="linenos">3674</span></a> <span class="k">pass</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><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</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-3677"><a href="#L-3677"><span class="linenos">3677</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-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="k">pass</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><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</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-3681"><a href="#L-3681"><span class="linenos">3681</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-3682"><a href="#L-3682"><span class="linenos">3682</span></a> <span class="k">pass</span>
</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a>
</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a>
-</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</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-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="k">pass</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><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</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-3690"><a href="#L-3690"><span class="linenos">3690</span></a> <span class="k">pass</span>
-</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><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</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-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="k">pass</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><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</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-3698"><a href="#L-3698"><span class="linenos">3698</span></a> <span class="k">pass</span>
-</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a>
-</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a>
-</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</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-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="k">pass</span>
-</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><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</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-3706"><a href="#L-3706"><span class="linenos">3706</span></a> <span class="k">pass</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><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</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-3710"><a href="#L-3710"><span class="linenos">3710</span></a> <span class="k">pass</span>
-</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><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</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-3714"><a href="#L-3714"><span class="linenos">3714</span></a> <span class="k">pass</span>
-</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a>
-</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a>
-</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</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-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="k">pass</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><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</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-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="k">pass</span>
-</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><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</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-3726"><a href="#L-3726"><span class="linenos">3726</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-3685"><a href="#L-3685"><span class="linenos">3685</span></a><span class="c1"># Commands to interact with the databases or engines. For most of the command</span>
+</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a><span class="c1"># expressions we parse whatever comes after the command&#39;s name as a string.</span>
+</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</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-3688"><a href="#L-3688"><span class="linenos">3688</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3689"><a href="#L-3689"><span class="linenos">3689</span></a>
+</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a>
+</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</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-3692"><a href="#L-3692"><span class="linenos">3692</span></a> <span class="n">arg_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 class="s2">&quot;mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a>
+</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">Commit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="n">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 class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;durability&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</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-3700"><a href="#L-3700"><span class="linenos">3700</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 class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</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-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3705"><a href="#L-3705"><span class="linenos">3705</span></a>
+</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">AddConstraint</span><span class="p">(</span><span class="n">Expression</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;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-3709"><a href="#L-3709"><span class="linenos">3709</span></a>
+</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a>
+</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</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-3712"><a href="#L-3712"><span class="linenos">3712</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-3713"><a href="#L-3713"><span class="linenos">3713</span></a>
+</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="c1"># Binary expressions like (ADD a b)</span>
+</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</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-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><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 class="nd">@property</span>
+</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</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-3721"><a href="#L-3721"><span class="linenos">3721</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-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="nd">@property</span>
+</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</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-3725"><a href="#L-3725"><span class="linenos">3725</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-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><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</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-3730"><a href="#L-3730"><span class="linenos">3730</span></a> <span class="k">pass</span>
+</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</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-3729"><a href="#L-3729"><span class="linenos">3729</span></a> <span class="k">pass</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><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">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-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="k">pass</span>
+</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</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-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="k">pass</span>
+</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><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">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-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="k">pass</span>
+</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</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-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="k">pass</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><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">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-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="k">pass</span>
+</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</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-3741"><a href="#L-3741"><span class="linenos">3741</span></a> <span class="k">pass</span>
+</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><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">Mod</span><span class="p">(</span><span class="n">Binary</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-3744"><a href="#L-3744"><span class="linenos">3744</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-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="k">pass</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><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">Mul</span><span class="p">(</span><span class="n">Binary</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-3748"><a href="#L-3748"><span class="linenos">3748</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-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="k">pass</span>
+</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><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">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-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="k">pass</span>
+</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</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-3753"><a href="#L-3753"><span class="linenos">3753</span></a> <span class="k">pass</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><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">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-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="k">pass</span>
+</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</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-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">pass</span>
+</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><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">Slice</span><span class="p">(</span><span class="n">Binary</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">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-3760"><a href="#L-3760"><span class="linenos">3760</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-3761"><a href="#L-3761"><span class="linenos">3761</span></a> <span class="k">pass</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><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">Sub</span><span class="p">(</span><span class="n">Binary</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-3764"><a href="#L-3764"><span class="linenos">3764</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-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="k">pass</span>
+</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a>
</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</span></a>
-</span><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">ArrayOverlaps</span><span class="p">(</span><span class="n">Binary</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-3768"><a href="#L-3768"><span class="linenos">3768</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-3769"><a href="#L-3769"><span class="linenos">3769</span></a> <span class="k">pass</span>
+</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a>
</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a>
-</span><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="c1"># Unary Expressions</span>
-</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a><span class="c1"># (NOT a)</span>
-</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</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-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="k">pass</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><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</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-3780"><a href="#L-3780"><span class="linenos">3780</span></a> <span class="k">pass</span>
-</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><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</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-3784"><a href="#L-3784"><span class="linenos">3784</span></a> <span class="k">pass</span>
-</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</span></a>
+</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</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-3773"><a href="#L-3773"><span class="linenos">3773</span></a> <span class="nd">@property</span>
+</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</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-3775"><a href="#L-3775"><span class="linenos">3775</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-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="nd">@property</span>
+</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</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-3779"><a href="#L-3779"><span class="linenos">3779</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-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 class="nd">@classmethod</span>
+</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</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-3783"><a href="#L-3783"><span class="linenos">3783</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-3784"><a href="#L-3784"><span class="linenos">3784</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-3785"><a href="#L-3785"><span class="linenos">3785</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-3786"><a href="#L-3786"><span class="linenos">3786</span></a>
-</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a><span class="k">class</span> <span class="nc">Paren</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
-</span><span id="L-3788"><a href="#L-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;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</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-3788"><a href="#L-3788"><span class="linenos">3788</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-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 class="nd">@property</span>
-</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</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-3792"><a href="#L-3792"><span class="linenos">3792</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-3793"><a href="#L-3793"><span class="linenos">3793</span></a>
+</span><span id="L-3790"><a href="#L-3790"><span class="linenos">3790</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-3791"><a href="#L-3791"><span class="linenos">3791</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-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 class="k">return</span> <span class="n">dot</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="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-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="k">pass</span>
-</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a>
+</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a>
+</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a><span class="k">class</span> <span class="nc">DPipe</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <span class="k">pass</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="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-3800"><a href="#L-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;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</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 class="nd">@property</span>
-</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</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-3804"><a href="#L-3804"><span class="linenos">3804</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-3805"><a href="#L-3805"><span class="linenos">3805</span></a>
+</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a>
+</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a><span class="k">class</span> <span class="nc">SafeDPipe</span><span class="p">(</span><span class="n">DPipe</span><span class="p">):</span>
+</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="k">pass</span>
+</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a>
+</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a>
+</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</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-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="k">pass</span>
</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a>
-</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a><span class="k">class</span> <span class="nc">Aliases</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3808"><a href="#L-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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 class="nd">@property</span>
-</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</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-3812"><a href="#L-3812"><span class="linenos">3812</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-3813"><a href="#L-3813"><span class="linenos">3813</span></a>
+</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a>
+</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a><span class="k">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-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="k">pass</span>
+</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a>
+</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a>
+</span><span id="L-3812"><a href="#L-3812"><span class="linenos">3812</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-3813"><a href="#L-3813"><span class="linenos">3813</span></a> <span class="k">pass</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="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-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;zone&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-3815"><a href="#L-3815"><span class="linenos">3815</span></a>
+</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</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-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="k">pass</span>
</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</span></a>
-</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a><span class="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-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 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-3821"><a href="#L-3821"><span class="linenos">3821</span></a>
+</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a>
+</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a><span class="k">class</span> <span class="nc">Escape</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="k">pass</span>
</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a>
-</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</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-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3825"><a href="#L-3825"><span class="linenos">3825</span></a>
+</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a>
+</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a><span class="k">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-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="k">pass</span>
</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a>
-</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a><span class="k">class</span> <span class="nc">SafeBracket</span><span class="p">(</span><span class="n">Bracket</span><span class="p">):</span>
-</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents array lookup where OOB index yields NULL instead of causing a failure.&quot;&quot;&quot;</span>
-</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a>
+</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">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-3829"><a href="#L-3829"><span class="linenos">3829</span></a> <span class="k">pass</span>
</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a>
-</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</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-3832"><a href="#L-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;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-3833"><a href="#L-3833"><span class="linenos">3833</span></a>
+</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</span></a>
+</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a><span class="k">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-3833"><a href="#L-3833"><span class="linenos">3833</span></a> <span class="k">pass</span>
</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a>
-</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</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-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</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-3838"><a href="#L-3838"><span class="linenos">3838</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-3839"><a href="#L-3839"><span class="linenos">3839</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-3840"><a href="#L-3840"><span class="linenos">3840</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-3841"><a href="#L-3841"><span class="linenos">3841</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-3842"><a href="#L-3842"><span class="linenos">3842</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-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <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">TimeUnit</span><span class="p">(</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="w"> </span><span class="sd">&quot;&quot;&quot;Automatically converts unit arg into a var.&quot;&quot;&quot;</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="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-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">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-3837"><a href="#L-3837"><span class="linenos">3837</span></a> <span class="k">pass</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><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</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-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="k">pass</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">IntDiv</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3845"><a href="#L-3845"><span class="linenos">3845</span></a> <span class="k">pass</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">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-3849"><a href="#L-3849"><span class="linenos">3849</span></a> <span class="k">pass</span>
</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a>
-</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="k">def</span> <span class="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-3852"><a href="#L-3852"><span class="linenos">3852</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-3853"><a href="#L-3853"><span class="linenos">3853</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-3854"><a href="#L-3854"><span class="linenos">3854</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-3855"><a href="#L-3855"><span class="linenos">3855</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-3856"><a href="#L-3856"><span class="linenos">3856</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-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="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-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="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-3853"><a href="#L-3853"><span class="linenos">3853</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-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><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</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-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">pass</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><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</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-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="n">arg_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-3860"><a href="#L-3860"><span class="linenos">3860</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-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="nd">@property</span>
-</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Var</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">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-3864"><a href="#L-3864"><span class="linenos">3864</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-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">pass</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><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">class</span> <span class="nc">IgnoreNulls</span><span class="p">(</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">pass</span>
+</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</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-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="k">pass</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><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</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-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="k">pass</span>
+</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</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-3873"><a href="#L-3873"><span class="linenos">3873</span></a> <span class="k">pass</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><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a><span class="c1"># Functions</span>
-</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</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-3879"><a href="#L-3879"><span class="linenos">3879</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a><span class="sd"> The base class for all function expressions.</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="sd"> Attributes:</span>
-</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</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-3884"><a href="#L-3884"><span class="linenos">3884</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-3885"><a href="#L-3885"><span class="linenos">3885</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-3886"><a href="#L-3886"><span class="linenos">3886</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-3887"><a href="#L-3887"><span class="linenos">3887</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-3888"><a href="#L-3888"><span class="linenos">3888</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
-</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</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-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="k">pass</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">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-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="k">pass</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">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-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="k">pass</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">Slice</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="n">arg_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-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="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</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="nd">@classmethod</span>
-</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</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-3895"><a href="#L-3895"><span class="linenos">3895</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-3896"><a href="#L-3896"><span class="linenos">3896</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-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
-</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</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-3899"><a href="#L-3899"><span class="linenos">3899</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-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="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-3902"><a href="#L-3902"><span class="linenos">3902</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-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</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-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">Sub</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="k">pass</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">ArrayOverlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="k">pass</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><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a><span class="c1"># Unary Expressions</span>
+</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a><span class="c1"># (NOT a)</span>
+</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</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-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="k">pass</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><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</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-3907"><a href="#L-3907"><span class="linenos">3907</span></a>
-</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</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-3910"><a href="#L-3910"><span class="linenos">3910</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-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
-</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
-</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="p">)</span>
-</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</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-3915"><a href="#L-3915"><span class="linenos">3915</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-3916"><a href="#L-3916"><span class="linenos">3916</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-3917"><a href="#L-3917"><span class="linenos">3917</span></a>
-</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</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-3920"><a href="#L-3920"><span class="linenos">3920</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-3906"><a href="#L-3906"><span class="linenos">3906</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-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><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</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-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="k">pass</span>
+</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a>
+</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">class</span> <span class="nc">Paren</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3916"><a href="#L-3916"><span class="linenos">3916</span></a>
+</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="nd">@property</span>
+</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</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-3919"><a href="#L-3919"><span class="linenos">3919</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-3920"><a href="#L-3920"><span class="linenos">3920</span></a>
</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a>
-</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</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-3924"><a href="#L-3924"><span class="linenos">3924</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-3922"><a href="#L-3922"><span class="linenos">3922</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-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="k">pass</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><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a>
-</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a><span class="k">class</span> <span class="nc">AggFunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">pass</span>
-</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a>
-</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a>
-</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a><span class="k">class</span> <span class="nc">ParameterizedAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;params&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 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-3927"><a href="#L-3927"><span class="linenos">3927</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="nd">@property</span>
+</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</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-3931"><a href="#L-3931"><span class="linenos">3931</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-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><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</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-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="k">pass</span>
-</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><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a><span class="c1"># https://spark.apache.org/docs/latest/api/sql/index.html#transform</span>
-</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a><span class="k">class</span> <span class="nc">Transform</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3942"><a href="#L-3942"><span class="linenos">3942</span></a>
-</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a>
-</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a><span class="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-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</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">Aliases</span><span class="p">(</span><span class="n">Expression</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">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-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 class="nd">@property</span>
+</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</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-3939"><a href="#L-3939"><span class="linenos">3939</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-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">AtTimeZone</span><span class="p">(</span><span class="n">Expression</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;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-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 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-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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 class="c1"># https://docs.snowflake.com/en/sql-reference/functions/hll</span>
-</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a><span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_HLL_function.html</span>
-</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</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-3952"><a href="#L-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a>
-</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a>
-</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</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-3957"><a href="#L-3957"><span class="linenos">3957</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3958"><a href="#L-3958"><span class="linenos">3958</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">]</span>
-</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</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 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-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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 class="k">class</span> <span class="nc">SafeBracket</span><span class="p">(</span><span class="n">Bracket</span><span class="p">):</span>
+</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents array lookup where OOB index yields NULL instead of causing a failure.&quot;&quot;&quot;</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 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-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;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-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">class</span> <span class="nc">Array</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</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-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a>
-</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="c1"># https://docs.snowflake.com/en/sql-reference/functions/to_char</span>
-</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</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-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">GenerateSeries</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;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-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">ArrayAgg</span><span class="p">(</span><span class="n">AggFunc</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-3961"><a href="#L-3961"><span class="linenos">3961</span></a>
+</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a><span class="k">class</span> <span class="nc">In</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</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-3965"><a href="#L-3965"><span class="linenos">3965</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-3966"><a href="#L-3966"><span class="linenos">3966</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-3967"><a href="#L-3967"><span class="linenos">3967</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-3968"><a href="#L-3968"><span class="linenos">3968</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-3969"><a href="#L-3969"><span class="linenos">3969</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-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <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">TimeUnit</span><span class="p">(</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="w"> </span><span class="sd">&quot;&quot;&quot;Automatically converts unit arg into a var.&quot;&quot;&quot;</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="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-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">ArrayAll</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">ArrayAny</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3985"><a href="#L-3985"><span class="linenos">3985</span></a>
+</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</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-3979"><a href="#L-3979"><span class="linenos">3979</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-3980"><a href="#L-3980"><span class="linenos">3980</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-3981"><a href="#L-3981"><span class="linenos">3981</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-3982"><a href="#L-3982"><span class="linenos">3982</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-3983"><a href="#L-3983"><span class="linenos">3983</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-3984"><a href="#L-3984"><span class="linenos">3984</span></a>
+</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</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-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">ArrayConcat</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;expressions&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 class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</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><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</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-3993"><a href="#L-3993"><span class="linenos">3993</span></a> <span class="k">pass</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><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</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-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="k">pass</span>
+</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a>
+</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a><span class="c1"># https://www.oracletutorial.com/oracle-basics/oracle-interval/</span>
+</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a><span class="c1"># https://trino.io/docs/current/language/types.html#interval-year-to-month</span>
+</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a><span class="k">class</span> <span class="nc">IntervalYearToMonthSpan</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a>
+</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="c1"># https://www.oracletutorial.com/oracle-basics/oracle-interval/</span>
+</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a><span class="c1"># https://trino.io/docs/current/language/types.html#interval-day-to-second</span>
+</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a><span class="k">class</span> <span class="nc">IntervalDayToSecondSpan</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a>
</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a>
-</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</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-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4002"><a href="#L-4002"><span class="linenos">4002</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-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><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</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-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;null&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="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-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="n">arg_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-4002"><a href="#L-4002"><span class="linenos">4002</span></a>
+</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a> <span class="nd">@property</span>
+</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Var</span><span class="p">]:</span>
+</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="k">return</span> <span class="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;unit&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><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">class</span> <span class="nc">ArraySize</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4008"><a href="#L-4008"><span class="linenos">4008</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-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><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</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-4014"><a href="#L-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;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</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-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="k">pass</span>
+</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a>
</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a>
-</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a>
-</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a><span class="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-4018"><a href="#L-4018"><span class="linenos">4018</span></a> <span class="k">pass</span>
-</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a>
+</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a><span class="c1"># Functions</span>
+</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</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-4018"><a href="#L-4018"><span class="linenos">4018</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a><span class="sd"> The base class for all function expressions.</span>
</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a>
-</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</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-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="k">pass</span>
-</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><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</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-4026"><a href="#L-4026"><span class="linenos">4026</span></a> <span class="k">pass</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><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</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-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><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 class="s2">&quot;max&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 class="sd"> Attributes:</span>
+</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</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-4023"><a href="#L-4023"><span class="linenos">4023</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-4024"><a href="#L-4024"><span class="linenos">4024</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-4025"><a href="#L-4025"><span class="linenos">4025</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-4026"><a href="#L-4026"><span class="linenos">4026</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-4027"><a href="#L-4027"><span class="linenos">4027</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
+</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</span></a>
+</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a>
-</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a>
-</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</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-4034"><a href="#L-4034"><span class="linenos">4034</span></a> <span class="n">arg_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-4035"><a href="#L-4035"><span class="linenos">4035</span></a>
-</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</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-4037"><a href="#L-4037"><span class="linenos">4037</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-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
-</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="n">If</span><span class="p">(</span>
-</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</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-4042"><a href="#L-4042"><span class="linenos">4042</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-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <span class="p">),</span>
-</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a> <span class="p">)</span>
-</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</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-4034"><a href="#L-4034"><span class="linenos">4034</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-4035"><a href="#L-4035"><span class="linenos">4035</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-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
+</span><span id="L-4037"><a href="#L-4037"><span class="linenos">4037</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-4038"><a href="#L-4038"><span class="linenos">4038</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-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">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-4041"><a href="#L-4041"><span class="linenos">4041</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-4042"><a href="#L-4042"><span class="linenos">4042</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</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-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 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-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">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-4048"><a href="#L-4048"><span class="linenos">4048</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-4049"><a href="#L-4049"><span class="linenos">4049</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-4050"><a href="#L-4050"><span class="linenos">4050</span></a> <span class="k">return</span> <span class="n">instance</span>
-</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a>
-</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a>
-</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</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-4054"><a href="#L-4054"><span class="linenos">4054</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a>
-</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</span></a> <span class="nd">@property</span>
-</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</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-4058"><a href="#L-4058"><span class="linenos">4058</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-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="nd">@property</span>
-</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</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 class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</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-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="nd">@property</span>
-</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</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-4066"><a href="#L-4066"><span class="linenos">4066</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-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">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</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">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">dtypes</span><span class="p">)</span>
-</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a>
-</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</span></a>
-</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</span></a><span class="k">class</span> <span class="nc">CastToStrType</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4073"><a href="#L-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;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</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-4077"><a href="#L-4077"><span class="linenos">4077</span></a> <span class="k">pass</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><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</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-4081"><a href="#L-4081"><span class="linenos">4081</span></a> <span class="k">pass</span>
+</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</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-4049"><a href="#L-4049"><span class="linenos">4049</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-4050"><a href="#L-4050"><span class="linenos">4050</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
+</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
+</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span class="p">)</span>
+</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</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-4054"><a href="#L-4054"><span class="linenos">4054</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-4055"><a href="#L-4055"><span class="linenos">4055</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-4056"><a href="#L-4056"><span class="linenos">4056</span></a>
+</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</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-4059"><a href="#L-4059"><span class="linenos">4059</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-4060"><a href="#L-4060"><span class="linenos">4060</span></a>
+</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</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-4063"><a href="#L-4063"><span class="linenos">4063</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-4064"><a href="#L-4064"><span class="linenos">4064</span></a>
+</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</span></a>
+</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</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-4067"><a href="#L-4067"><span class="linenos">4067</span></a> <span class="k">pass</span>
+</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a>
+</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</span></a>
+</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a><span class="k">class</span> <span class="nc">ParameterizedAgg</span><span class="p">(</span><span class="n">AggFunc</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;params&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-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">Abs</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="k">pass</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="c1"># https://spark.apache.org/docs/latest/api/sql/index.html#transform</span>
+</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a><span class="k">class</span> <span class="nc">Transform</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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 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-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4086"><a href="#L-4086"><span class="linenos">4086</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-4083"><a href="#L-4083"><span class="linenos">4083</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-4084"><a href="#L-4084"><span class="linenos">4084</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a>
-</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a><span class="k">class</span> <span class="nc">Coalesce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;COALESCE&quot;</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-4088"><a href="#L-4088"><span class="linenos">4088</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/hll</span>
+</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a><span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_HLL_function.html</span>
+</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</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-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</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-4096"><a href="#L-4096"><span class="linenos">4096</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-4097"><a href="#L-4097"><span class="linenos">4097</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</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-4096"><a href="#L-4096"><span class="linenos">4096</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4097"><a href="#L-4097"><span class="linenos">4097</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">]</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><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a><span class="k">class</span> <span class="nc">SafeConcat</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
-</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <span class="k">pass</span>
-</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a>
+</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</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-4101"><a href="#L-4101"><span class="linenos">4101</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-4102"><a href="#L-4102"><span class="linenos">4102</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a>
-</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</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-4105"><a href="#L-4105"><span class="linenos">4105</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-4106"><a href="#L-4106"><span class="linenos">4106</span></a>
-</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</span></a>
-</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a><span class="k">class</span> <span class="nc">Count</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="n">arg_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-4110"><a href="#L-4110"><span class="linenos">4110</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</span></a>
+</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="c1"># https://docs.snowflake.com/en/sql-reference/functions/to_char</span>
+</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</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-4107"><a href="#L-4107"><span class="linenos">4107</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">GenerateSeries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</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-4112"><a href="#L-4112"><span class="linenos">4112</span></a>
-</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a><span class="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-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="k">pass</span>
-</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</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">ArrayAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a> <span class="k">pass</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 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-4118"><a href="#L-4118"><span class="linenos">4118</span></a> <span class="n">arg_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-4119"><a href="#L-4119"><span class="linenos">4119</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">ArrayAll</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4120"><a href="#L-4120"><span class="linenos">4120</span></a>
-</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a><span class="k">class</span> <span class="nc">CurrentDatetime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="n">arg_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-4123"><a href="#L-4123"><span class="linenos">4123</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">ArrayAny</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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 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-4126"><a href="#L-4126"><span class="linenos">4126</span></a> <span class="n">arg_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-4127"><a href="#L-4127"><span class="linenos">4127</span></a>
-</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a>
-</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</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-4130"><a href="#L-4130"><span class="linenos">4130</span></a> <span class="n">arg_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-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">ArrayConcat</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="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;ARRAY_CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">]</span>
+</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4129"><a href="#L-4129"><span class="linenos">4129</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a>
</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><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</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-4134"><a href="#L-4134"><span class="linenos">4134</span></a> <span class="n">arg_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-4132"><a href="#L-4132"><span class="linenos">4132</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-4133"><a href="#L-4133"><span class="linenos">4133</span></a> <span class="k">pass</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><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">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-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4136"><a href="#L-4136"><span class="linenos">4136</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-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="k">pass</span>
+</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a>
</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><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</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-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4140"><a href="#L-4140"><span class="linenos">4140</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-4141"><a href="#L-4141"><span class="linenos">4141</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4142"><a href="#L-4142"><span class="linenos">4142</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-4143"><a href="#L-4143"><span class="linenos">4143</span></a>
</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a>
-</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a><span class="k">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-4146"><a href="#L-4146"><span class="linenos">4146</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-4147"><a href="#L-4147"><span class="linenos">4147</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4145"><a href="#L-4145"><span class="linenos">4145</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-4146"><a href="#L-4146"><span class="linenos">4146</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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">class</span> <span class="nc">DateTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</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-4149"><a href="#L-4149"><span class="linenos">4149</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-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4151"><a href="#L-4151"><span class="linenos">4151</span></a>
</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><span id="L-4154"><a href="#L-4154"><span class="linenos">4154</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-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4153"><a href="#L-4153"><span class="linenos">4153</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-4154"><a href="#L-4154"><span class="linenos">4154</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a>
-</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a><span class="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-4159"><a href="#L-4159"><span class="linenos">4159</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4157"><a href="#L-4157"><span class="linenos">4157</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-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="k">pass</span>
+</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a>
</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a>
-</span><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">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-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4161"><a href="#L-4161"><span class="linenos">4161</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-4162"><a href="#L-4162"><span class="linenos">4162</span></a> <span class="k">pass</span>
+</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><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="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-4167"><a href="#L-4167"><span class="linenos">4167</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4165"><a href="#L-4165"><span class="linenos">4165</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-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="k">pass</span>
+</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a>
</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a>
-</span><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">class</span> <span class="nc">DayOfWeek</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</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-4169"><a href="#L-4169"><span class="linenos">4169</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-4170"><a href="#L-4170"><span class="linenos">4170</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><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 class="s2">&quot;max&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;ignore_nulls&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a>
-</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</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-4175"><a href="#L-4175"><span class="linenos">4175</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-4173"><a href="#L-4173"><span class="linenos">4173</span></a><span class="k">class</span> <span class="nc">First</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;ignore_nulls&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><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a>
-</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</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-4179"><a href="#L-4179"><span class="linenos">4179</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-4177"><a href="#L-4177"><span class="linenos">4177</span></a><span class="k">class</span> <span class="nc">Last</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;ignore_nulls&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</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-4183"><a href="#L-4183"><span class="linenos">4183</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-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><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a><span class="k">class</span> <span class="nc">MonthsBetween</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;roundoff&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</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><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</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-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <span class="k">pass</span>
-</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><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</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-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</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-4199"><a href="#L-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;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-4181"><a href="#L-4181"><span class="linenos">4181</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-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="n">arg_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-4183"><a href="#L-4183"><span class="linenos">4183</span></a>
+</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="k">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-4185"><a href="#L-4185"><span class="linenos">4185</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-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
+</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="n">If</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">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-4190"><a href="#L-4190"><span class="linenos">4190</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-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <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="n">instance</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">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-4196"><a href="#L-4196"><span class="linenos">4196</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-4197"><a href="#L-4197"><span class="linenos">4197</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-4198"><a href="#L-4198"><span class="linenos">4198</span></a> <span class="k">return</span> <span class="n">instance</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><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</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-4203"><a href="#L-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;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-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><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</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-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</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-4211"><a href="#L-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;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-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><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</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-4215"><a href="#L-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;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-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><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</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-4219"><a href="#L-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;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-4220"><a href="#L-4220"><span class="linenos">4220</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">Cast</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;to&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-4203"><a href="#L-4203"><span class="linenos">4203</span></a>
+</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a> <span class="nd">@property</span>
+</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</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-4206"><a href="#L-4206"><span class="linenos">4206</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-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 class="nd">@property</span>
+</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</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 class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]</span>
+</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a>
+</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="nd">@property</span>
+</span><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</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-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</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="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a><span class="sd"> Checks whether this Cast&#39;s DataType matches one of the provided data types. Nested types</span>
+</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a><span class="sd"> like arrays or structs will be compared using &quot;structural equivalence&quot; semantics, so e.g.</span>
+</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</span></a><span class="sd"> array&lt;int&gt; != array&lt;float&gt;.</span>
</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a>
-</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</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-4223"><a href="#L-4223"><span class="linenos">4223</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4222"><a href="#L-4222"><span class="linenos">4222</span></a><span class="sd"> Args:</span>
+</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a><span class="sd"> dtypes: the data types to compare this Cast&#39;s DataType to.</span>
</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a>
-</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a>
-</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</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-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4228"><a href="#L-4228"><span class="linenos">4228</span></a>
+</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a><span class="sd"> True, if and only if there is a type in `dtypes` which is equal to this Cast&#39;s DataType.</span>
+</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</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="o">*</span><span class="n">dtypes</span><span class="p">)</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 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-4231"><a href="#L-4231"><span class="linenos">4231</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-4232"><a href="#L-4232"><span class="linenos">4232</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-4230"><a href="#L-4230"><span class="linenos">4230</span></a>
+</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a><span class="k">class</span> <span class="nc">TryCast</span><span class="p">(</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="k">pass</span>
</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><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</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-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="k">pass</span>
+</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a><span class="k">class</span> <span class="nc">CastToStrType</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</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-4239"><a href="#L-4239"><span class="linenos">4239</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-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="k">pass</span>
</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a>
</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="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-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="k">pass</span>
-</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a>
+</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</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-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4245"><a href="#L-4245"><span class="linenos">4245</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-4246"><a href="#L-4246"><span class="linenos">4246</span></a>
-</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a><span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date</span>
-</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a><span class="k">class</span> <span class="nc">Date</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4250"><a href="#L-4250"><span class="linenos">4250</span></a>
-</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a>
-</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</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-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="k">pass</span>
-</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a>
-</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">class</span> <span class="nc">Decode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="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-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4250"><a href="#L-4250"><span class="linenos">4250</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;COALESCE&quot;</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-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><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</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-4255"><a href="#L-4255"><span class="linenos">4255</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-4256"><a href="#L-4256"><span class="linenos">4256</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a>
</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a>
-</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a>
-</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a><span class="k">class</span> <span class="nc">DiToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a> <span class="k">pass</span>
+</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a><span class="k">class</span> <span class="nc">SafeConcat</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
+</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <span class="k">pass</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><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a>
-</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</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-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4263"><a href="#L-4263"><span class="linenos">4263</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-4264"><a href="#L-4264"><span class="linenos">4264</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-4265"><a href="#L-4265"><span class="linenos">4265</span></a>
</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a>
-</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">class</span> <span class="nc">Exp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="k">pass</span>
+</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</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-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="n">arg_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-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</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-4272"><a href="#L-4272"><span class="linenos">4272</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-4273"><a href="#L-4273"><span class="linenos">4273</span></a> <span class="k">pass</span>
</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a>
</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a>
-</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</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-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4276"><a href="#L-4276"><span class="linenos">4276</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-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="n">arg_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-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><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a><span class="k">class</span> <span class="nc">FromBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</span></a> <span class="k">pass</span>
+</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</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-4281"><a href="#L-4281"><span class="linenos">4281</span></a> <span class="n">arg_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-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><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a><span class="k">class</span> <span class="nc">ToBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <span class="k">pass</span>
+</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</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-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <span class="n">arg_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-4286"><a href="#L-4286"><span class="linenos">4286</span></a>
</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">class</span> <span class="nc">Greatest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</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-4289"><a href="#L-4289"><span class="linenos">4289</span></a> <span class="n">arg_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-4290"><a href="#L-4290"><span class="linenos">4290</span></a>
</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">class</span> <span class="nc">GroupConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4292"><a href="#L-4292"><span class="linenos">4292</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-4293"><a href="#L-4293"><span class="linenos">4293</span></a> <span class="n">arg_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-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><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="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-4298"><a href="#L-4298"><span class="linenos">4298</span></a> <span class="k">pass</span>
+</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</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-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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">class</span> <span class="nc">Xor</span><span class="p">(</span><span class="n">Connector</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a> <span class="n">arg_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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</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-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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">class</span> <span class="nc">If</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4306"><a href="#L-4306"><span class="linenos">4306</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4304"><a href="#L-4304"><span class="linenos">4304</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-4305"><a href="#L-4305"><span class="linenos">4305</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-4306"><a href="#L-4306"><span class="linenos">4306</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">class</span> <span class="nc">Initcap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4309"><a href="#L-4309"><span class="linenos">4309</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-4310"><a href="#L-4310"><span class="linenos">4310</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-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">class</span> <span class="nc">IsNan</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IS_NAN&quot;</span><span class="p">,</span> <span class="s2">&quot;ISNAN&quot;</span><span class="p">]</span>
+</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</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-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4315"><a href="#L-4315"><span class="linenos">4315</span></a>
</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a>
-</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</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-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4317"><a href="#L-4317"><span class="linenos">4317</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-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4319"><a href="#L-4319"><span class="linenos">4319</span></a>
</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a>
-</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</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-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</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-4324"><a href="#L-4324"><span class="linenos">4324</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-4325"><a href="#L-4325"><span class="linenos">4325</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-4326"><a href="#L-4326"><span class="linenos">4326</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-4327"><a href="#L-4327"><span class="linenos">4327</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-4328"><a href="#L-4328"><span class="linenos">4328</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-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="p">}</span>
-</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a>
+</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</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-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</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-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</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-4330"><a href="#L-4330"><span class="linenos">4330</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-4331"><a href="#L-4331"><span class="linenos">4331</span></a>
-</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a><span class="k">class</span> <span class="nc">OpenJSONColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;path&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;as_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a>
+</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">class</span> <span class="nc">DayOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</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-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 class="k">class</span> <span class="nc">OpenJSON</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;path&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-4338"><a href="#L-4338"><span class="linenos">4338</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">class</span> <span class="nc">DayOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</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-4339"><a href="#L-4339"><span class="linenos">4339</span></a>
-</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a><span class="k">class</span> <span class="nc">JSONBContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</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-4342"><a href="#L-4342"><span class="linenos">4342</span></a>
+</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a>
+</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</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-4342"><a href="#L-4342"><span class="linenos">4342</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-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">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-4345"><a href="#L-4345"><span class="linenos">4345</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-4346"><a href="#L-4346"><span class="linenos">4346</span></a>
+</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a>
+</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a><span class="k">class</span> <span class="nc">MonthsBetween</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;roundoff&quot;</span><span class="p">:</span> <span class="kc">False</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 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-4349"><a href="#L-4349"><span class="linenos">4349</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-4350"><a href="#L-4350"><span class="linenos">4350</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">class</span> <span class="nc">LastDateOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="k">pass</span>
</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a>
-</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</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-4353"><a href="#L-4353"><span class="linenos">4353</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-4354"><a href="#L-4354"><span class="linenos">4354</span></a>
+</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a>
+</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a><span class="k">class</span> <span class="nc">Extract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4355"><a href="#L-4355"><span class="linenos">4355</span></a>
-</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</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-4357"><a href="#L-4357"><span class="linenos">4357</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-4358"><a href="#L-4358"><span class="linenos">4358</span></a>
+</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">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-4358"><a href="#L-4358"><span class="linenos">4358</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4359"><a href="#L-4359"><span class="linenos">4359</span></a>
-</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</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-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="n">arg_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-4362"><a href="#L-4362"><span class="linenos">4362</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-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">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-4362"><a href="#L-4362"><span class="linenos">4362</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4363"><a href="#L-4363"><span class="linenos">4363</span></a>
</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a>
-</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of</span>
-</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a><span class="k">class</span> <span class="nc">JSONArrayContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_ARRAY_CONTAINS&quot;</span><span class="p">]</span>
+</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</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-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a>
-</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</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-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4372"><a href="#L-4372"><span class="linenos">4372</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</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><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a><span class="k">class</span> <span class="nc">Left</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a><span class="k">class</span> <span class="nc">Right</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</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-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="s2">&quot;LEN&quot;</span><span class="p">]</span>
-</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a>
-</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="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-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</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-4390"><a href="#L-4390"><span class="linenos">4390</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-4391"><a href="#L-4391"><span class="linenos">4391</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-4392"><a href="#L-4392"><span class="linenos">4392</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-4393"><a href="#L-4393"><span class="linenos">4393</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-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><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</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-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</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-4374"><a href="#L-4374"><span class="linenos">4374</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</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-4378"><a href="#L-4378"><span class="linenos">4378</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4379"><a href="#L-4379"><span class="linenos">4379</span></a>
+</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a>
+</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</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-4382"><a href="#L-4382"><span class="linenos">4382</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4383"><a href="#L-4383"><span class="linenos">4383</span></a>
+</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">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-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</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-4390"><a href="#L-4390"><span class="linenos">4390</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-4391"><a href="#L-4391"><span class="linenos">4391</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-4392"><a href="#L-4392"><span class="linenos">4392</span></a>
+</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a>
+</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</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-4395"><a href="#L-4395"><span class="linenos">4395</span></a> <span class="k">pass</span>
</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a>
-</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a><span class="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-4398"><a href="#L-4398"><span class="linenos">4398</span></a> <span class="k">pass</span>
-</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a>
+</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="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-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">pass</span>
</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a>
-</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a><span class="k">class</span> <span class="nc">Log</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4403"><a href="#L-4403"><span class="linenos">4403</span></a>
+</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">class</span> <span class="nc">DateToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="k">pass</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">class</span> <span class="nc">Log2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="k">pass</span>
-</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a>
-</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a>
-</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</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-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="k">pass</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><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</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-4414"><a href="#L-4414"><span class="linenos">4414</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-4415"><a href="#L-4415"><span class="linenos">4415</span></a>
-</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a>
-</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a><span class="k">class</span> <span class="nc">LogicalAnd</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</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-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><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</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-4422"><a href="#L-4422"><span class="linenos">4422</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-4423"><a href="#L-4423"><span class="linenos">4423</span></a>
-</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a>
-</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a><span class="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-4426"><a href="#L-4426"><span class="linenos">4426</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-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><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a><span class="k">class</span> <span class="nc">MapFromEntries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a> <span class="k">pass</span>
-</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a>
-</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a>
-</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</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-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="k">pass</span>
-</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a>
-</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a>
-</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</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-4438"><a href="#L-4438"><span class="linenos">4438</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-4439"><a href="#L-4439"><span class="linenos">4439</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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="nd">@property</span>
-</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a> <span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="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-4443"><a href="#L-4443"><span class="linenos">4443</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;keys&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a>
-</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="nd">@property</span>
-</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="k">def</span> <span class="nf">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">List</span><span class="p">[</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="bp">self</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 class="o">.</span><span class="n">expressions</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="c1"># https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html</span>
-</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</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-4452"><a href="#L-4452"><span class="linenos">4452</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4453"><a href="#L-4453"><span class="linenos">4453</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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date</span>
+</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a><span class="k">class</span> <span class="nc">Date</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4409"><a href="#L-4409"><span class="linenos">4409</span></a>
+</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a>
+</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</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-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="k">pass</span>
+</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a>
+</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a>
+</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</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-4416"><a href="#L-4416"><span class="linenos">4416</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</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-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <span class="k">pass</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><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</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-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</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-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="k">pass</span>
+</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a>
+</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a>
+</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</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-4432"><a href="#L-4432"><span class="linenos">4432</span></a> <span class="k">pass</span>
+</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a>
+</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a>
+</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</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-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a><span class="k">class</span> <span class="nc">FromBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="k">pass</span>
+</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</span></a>
+</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a>
+</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a><span class="k">class</span> <span class="nc">ToBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a> <span class="k">pass</span>
+</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a>
+</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a>
+</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</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-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a>
+</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a>
+</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a><span class="k">class</span> <span class="nc">GroupConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4454"><a href="#L-4454"><span class="linenos">4454</span></a>
-</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</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-4456"><a href="#L-4456"><span class="linenos">4456</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</span></a>
+</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a><span class="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-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="k">pass</span>
</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a>
</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a>
-</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</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-4461"><a href="#L-4461"><span class="linenos">4461</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-4460"><a href="#L-4460"><span class="linenos">4460</span></a><span class="k">class</span> <span class="nc">Xor</span><span class="p">(</span><span class="n">Connector</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a> <span class="n">arg_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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a>
</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a>
-</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a><span class="c1"># Represents the variant of the MD5 function that returns a binary value</span>
-</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a><span class="k">class</span> <span class="nc">MD5Digest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5_DIGEST&quot;</span><span class="p">]</span>
+</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</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-4465"><a href="#L-4465"><span class="linenos">4465</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a>
-</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a><span class="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-4470"><a href="#L-4470"><span class="linenos">4470</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a>
-</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a>
-</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a><span class="k">class</span> <span class="nc">Month</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="k">pass</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><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</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-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</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-4483"><a href="#L-4483"><span class="linenos">4483</span></a> <span class="k">pass</span>
-</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a>
-</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a>
-</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</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-4487"><a href="#L-4487"><span class="linenos">4487</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-4488"><a href="#L-4488"><span class="linenos">4488</span></a>
+</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</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-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4470"><a href="#L-4470"><span class="linenos">4470</span></a>
+</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">class</span> <span class="nc">IsNan</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IS_NAN&quot;</span><span class="p">,</span> <span class="s2">&quot;ISNAN&quot;</span><span class="p">]</span>
+</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a>
+</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a>
+</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</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-4477"><a href="#L-4477"><span class="linenos">4477</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</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-4481"><a href="#L-4481"><span class="linenos">4481</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</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-4483"><a href="#L-4483"><span class="linenos">4483</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-4484"><a href="#L-4484"><span class="linenos">4484</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-4485"><a href="#L-4485"><span class="linenos">4485</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-4486"><a href="#L-4486"><span class="linenos">4486</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-4487"><a href="#L-4487"><span class="linenos">4487</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-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="p">}</span>
</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a>
-</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a><span class="k">class</span> <span class="nc">PercentileCont</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4492"><a href="#L-4492"><span class="linenos">4492</span></a>
+</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a>
+</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a><span class="k">class</span> <span class="nc">OpenJSONColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;path&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;as_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a>
-</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</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-4495"><a href="#L-4495"><span class="linenos">4495</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4496"><a href="#L-4496"><span class="linenos">4496</span></a>
+</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a>
+</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a><span class="k">class</span> <span class="nc">OpenJSON</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;path&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-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">class</span> <span class="nc">Quantile</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4500"><a href="#L-4500"><span class="linenos">4500</span></a>
+</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</span></a>
+</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a><span class="k">class</span> <span class="nc">JSONBContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</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-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="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-4503"><a href="#L-4503"><span class="linenos">4503</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4504"><a href="#L-4504"><span class="linenos">4504</span></a>
+</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a>
+</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a><span class="k">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-4504"><a href="#L-4504"><span class="linenos">4504</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-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="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-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4508"><a href="#L-4508"><span class="linenos">4508</span></a>
+</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a>
+</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</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-4508"><a href="#L-4508"><span class="linenos">4508</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-4509"><a href="#L-4509"><span class="linenos">4509</span></a>
-</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</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-4511"><a href="#L-4511"><span class="linenos">4511</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-4512"><a href="#L-4512"><span class="linenos">4512</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4510"><a href="#L-4510"><span class="linenos">4510</span></a>
+</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</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-4512"><a href="#L-4512"><span class="linenos">4512</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-4513"><a href="#L-4513"><span class="linenos">4513</span></a>
</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a>
-</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a>
-</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</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-4517"><a href="#L-4517"><span class="linenos">4517</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4515"><a href="#L-4515"><span class="linenos">4515</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-4516"><a href="#L-4516"><span class="linenos">4516</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-4517"><a href="#L-4517"><span class="linenos">4517</span></a>
</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a>
-</span><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="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-4521"><a href="#L-4521"><span class="linenos">4521</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</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-4523"><a href="#L-4523"><span class="linenos">4523</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-4524"><a href="#L-4524"><span class="linenos">4524</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-4525"><a href="#L-4525"><span class="linenos">4525</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-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</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-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">class</span> <span class="nc">RegexpReplace</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</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-4534"><a href="#L-4534"><span class="linenos">4534</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-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="s2">&quot;replacement&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</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-4537"><a href="#L-4537"><span class="linenos">4537</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-4538"><a href="#L-4538"><span class="linenos">4538</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</span></a> <span class="p">}</span>
+</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</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-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="n">arg_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-4521"><a href="#L-4521"><span class="linenos">4521</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-4522"><a href="#L-4522"><span class="linenos">4522</span></a>
+</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 class="c1"># https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of</span>
+</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a><span class="k">class</span> <span class="nc">JSONArrayContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_ARRAY_CONTAINS&quot;</span><span class="p">]</span>
+</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a>
+</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="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-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4531"><a href="#L-4531"><span class="linenos">4531</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a><span class="k">class</span> <span class="nc">Left</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4536"><a href="#L-4536"><span class="linenos">4536</span></a>
+</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a>
+</span><span id="L-4538"><a href="#L-4538"><span class="linenos">4538</span></a><span class="k">class</span> <span class="nc">Right</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a><span class="k">class</span> <span class="nc">RegexpLike</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-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4542"><a href="#L-4542"><span class="linenos">4542</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-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="s2">&quot;LEN&quot;</span><span class="p">]</span>
</span><span id="L-4544"><a href="#L-4544"><span class="linenos">4544</span></a>
</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a>
-</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</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-4547"><a href="#L-4547"><span class="linenos">4547</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4548"><a href="#L-4548"><span class="linenos">4548</span></a>
-</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a>
-</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</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-4551"><a href="#L-4551"><span class="linenos">4551</span></a><span class="c1"># limit is the number of times a pattern is applied</span>
-</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</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-4553"><a href="#L-4553"><span class="linenos">4553</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4546"><a href="#L-4546"><span class="linenos">4546</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-4547"><a href="#L-4547"><span class="linenos">4547</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</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-4549"><a href="#L-4549"><span class="linenos">4549</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-4550"><a href="#L-4550"><span class="linenos">4550</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-4551"><a href="#L-4551"><span class="linenos">4551</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-4552"><a href="#L-4552"><span class="linenos">4552</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-4553"><a href="#L-4553"><span class="linenos">4553</span></a> <span class="p">}</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><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</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-4557"><a href="#L-4557"><span class="linenos">4557</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4556"><a href="#L-4556"><span class="linenos">4556</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-4557"><a href="#L-4557"><span class="linenos">4557</span></a> <span class="k">pass</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><span id="L-4560"><a href="#L-4560"><span class="linenos">4560</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-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4560"><a href="#L-4560"><span class="linenos">4560</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-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</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-4565"><a href="#L-4565"><span class="linenos">4565</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-4564"><a href="#L-4564"><span class="linenos">4564</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-4565"><a href="#L-4565"><span class="linenos">4565</span></a> <span class="k">pass</span>
</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a>
</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</span></a>
-</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</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-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4568"><a href="#L-4568"><span class="linenos">4568</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-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="k">pass</span>
</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</span></a>
</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</span></a>
-</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</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-4573"><a href="#L-4573"><span class="linenos">4573</span></a> <span class="k">pass</span>
+</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</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-4573"><a href="#L-4573"><span class="linenos">4573</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-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><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</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-4577"><a href="#L-4577"><span class="linenos">4577</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-4576"><a href="#L-4576"><span class="linenos">4576</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-4577"><a href="#L-4577"><span class="linenos">4577</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-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><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</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-4581"><a href="#L-4581"><span class="linenos">4581</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-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4580"><a href="#L-4580"><span class="linenos">4580</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-4581"><a href="#L-4581"><span class="linenos">4581</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-4582"><a href="#L-4582"><span class="linenos">4582</span></a>
</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><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</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-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4584"><a href="#L-4584"><span class="linenos">4584</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-4585"><a href="#L-4585"><span class="linenos">4585</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-4586"><a href="#L-4586"><span class="linenos">4586</span></a>
</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a>
-</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a>
-</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</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-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4588"><a href="#L-4588"><span class="linenos">4588</span></a><span class="k">class</span> <span class="nc">MapFromEntries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a> <span class="k">pass</span>
+</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a>
</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><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a><span class="c1"># Start may be omitted in the case of postgres</span>
-</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a><span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</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-4596"><a href="#L-4596"><span class="linenos">4596</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4597"><a href="#L-4597"><span class="linenos">4597</span></a>
-</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</span></a>
-</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a><span class="k">class</span> <span class="nc">StandardHash</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="k">class</span> <span class="nc">StartsWith</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;STARTS_WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">]</span>
-</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4606"><a href="#L-4606"><span class="linenos">4606</span></a>
+</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</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-4593"><a href="#L-4593"><span class="linenos">4593</span></a> <span class="k">pass</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">class</span> <span class="nc">VarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</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-4598"><a href="#L-4598"><span class="linenos">4598</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</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="nd">@property</span>
+</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="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-4602"><a href="#L-4602"><span class="linenos">4602</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;keys&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a>
+</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="nd">@property</span>
+</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="k">def</span> <span class="nf">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">List</span><span class="p">[</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</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;values&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
</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="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-4609"><a href="#L-4609"><span class="linenos">4609</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</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-4611"><a href="#L-4611"><span class="linenos">4611</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-4612"><a href="#L-4612"><span class="linenos">4612</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-4613"><a href="#L-4613"><span class="linenos">4613</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-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><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 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-4618"><a href="#L-4618"><span class="linenos">4618</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</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-4622"><a href="#L-4622"><span class="linenos">4622</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a><span class="c1"># Spark allows unix_timestamp()</span>
-</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</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-4627"><a href="#L-4627"><span class="linenos">4627</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-4628"><a href="#L-4628"><span class="linenos">4628</span></a> <span class="n">arg_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-4629"><a href="#L-4629"><span class="linenos">4629</span></a>
-</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a>
-</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a><span class="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-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4633"><a href="#L-4633"><span class="linenos">4633</span></a>
-</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</span></a>
-</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a><span class="k">class</span> <span class="nc">FromBase</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="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-4640"><a href="#L-4640"><span class="linenos">4640</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-4641"><a href="#L-4641"><span class="linenos">4641</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a>
+</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a>
+</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html</span>
+</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</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-4611"><a href="#L-4611"><span class="linenos">4611</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</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-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4616"><a href="#L-4616"><span class="linenos">4616</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</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><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</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-4620"><a href="#L-4620"><span class="linenos">4620</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-4621"><a href="#L-4621"><span class="linenos">4621</span></a>
+</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a>
+</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</span></a><span class="c1"># Represents the variant of the MD5 function that returns a binary value</span>
+</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</span></a><span class="k">class</span> <span class="nc">MD5Digest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5_DIGEST&quot;</span><span class="p">]</span>
+</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a>
+</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a>
+</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</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-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4630"><a href="#L-4630"><span class="linenos">4630</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</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-4634"><a href="#L-4634"><span class="linenos">4634</span></a> <span class="k">pass</span>
+</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a>
+</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a>
+</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a><span class="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-4638"><a href="#L-4638"><span class="linenos">4638</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4639"><a href="#L-4639"><span class="linenos">4639</span></a>
+</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 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-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="k">pass</span>
</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a>
-</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a><span class="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-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4646"><a href="#L-4646"><span class="linenos">4646</span></a>
+</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a>
+</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</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-4646"><a href="#L-4646"><span class="linenos">4646</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-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="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-4649"><a href="#L-4649"><span class="linenos">4649</span></a> <span class="k">pass</span>
-</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a>
+</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">class</span> <span class="nc">PercentileCont</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">class</span> <span class="nc">Sqrt</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="k">pass</span>
-</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a>
+</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="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-4654"><a href="#L-4654"><span class="linenos">4654</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4655"><a href="#L-4655"><span class="linenos">4655</span></a>
-</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a><span class="k">class</span> <span class="nc">Stddev</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a> <span class="k">pass</span>
-</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a>
+</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="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-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4659"><a href="#L-4659"><span class="linenos">4659</span></a>
-</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</span></a><span class="k">class</span> <span class="nc">StddevPop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a> <span class="k">pass</span>
-</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</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="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-4662"><a href="#L-4662"><span class="linenos">4662</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4663"><a href="#L-4663"><span class="linenos">4663</span></a>
-</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</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-4665"><a href="#L-4665"><span class="linenos">4665</span></a> <span class="k">pass</span>
-</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a>
+</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</span></a>
+</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</span></a><span class="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-4666"><a href="#L-4666"><span class="linenos">4666</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4667"><a href="#L-4667"><span class="linenos">4667</span></a>
-</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</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-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</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-4673"><a href="#L-4673"><span class="linenos">4673</span></a> <span class="k">pass</span>
+</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a>
+</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a><span class="k">class</span> <span class="nc">ReadCSV</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4670"><a href="#L-4670"><span class="linenos">4670</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-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4673"><a href="#L-4673"><span class="linenos">4673</span></a>
</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a>
-</span><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="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-4677"><a href="#L-4677"><span class="linenos">4677</span></a> <span class="k">pass</span>
+</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</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-4676"><a href="#L-4676"><span class="linenos">4676</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4677"><a href="#L-4677"><span class="linenos">4677</span></a>
</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a>
-</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a>
-</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</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-4681"><a href="#L-4681"><span class="linenos">4681</span></a> <span class="k">pass</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">class</span> <span class="nc">TimeStrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</span></a> <span class="k">pass</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><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</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-4689"><a href="#L-4689"><span class="linenos">4689</span></a> <span class="k">pass</span>
-</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a>
-</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a>
-</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</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-4693"><a href="#L-4693"><span class="linenos">4693</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</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-4695"><a href="#L-4695"><span class="linenos">4695</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-4696"><a href="#L-4696"><span class="linenos">4696</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-4697"><a href="#L-4697"><span class="linenos">4697</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-4679"><a href="#L-4679"><span class="linenos">4679</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-4680"><a href="#L-4680"><span class="linenos">4680</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</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-4682"><a href="#L-4682"><span class="linenos">4682</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-4683"><a href="#L-4683"><span class="linenos">4683</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-4684"><a href="#L-4684"><span class="linenos">4684</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-4685"><a href="#L-4685"><span class="linenos">4685</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4686"><a href="#L-4686"><span class="linenos">4686</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-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="p">}</span>
+</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a>
+</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 class="k">class</span> <span class="nc">RegexpReplace</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</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-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="s2">&quot;replacement&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</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-4696"><a href="#L-4696"><span class="linenos">4696</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-4697"><a href="#L-4697"><span class="linenos">4697</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="p">}</span>
</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a>
</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a>
-</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</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-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4701"><a href="#L-4701"><span class="linenos">4701</span></a><span class="k">class</span> <span class="nc">RegexpLike</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-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">class</span> <span class="nc">TsOrDsToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="k">pass</span>
+</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</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-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4707"><a href="#L-4707"><span class="linenos">4707</span></a>
</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">class</span> <span class="nc">TsOrDsToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4711"><a href="#L-4711"><span class="linenos">4711</span></a>
-</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a>
-</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</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-4714"><a href="#L-4714"><span class="linenos">4714</span></a> <span class="k">pass</span>
-</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</span></a>
-</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a>
-</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</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-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="k">pass</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><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</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-4722"><a href="#L-4722"><span class="linenos">4722</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4723"><a href="#L-4723"><span class="linenos">4723</span></a>
-</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a>
-</span><span id="L-4725"><a href="#L-4725"><span class="linenos">4725</span></a><span class="c1"># https://prestodb.io/docs/current/functions/datetime.html</span>
-</span><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a><span class="c1"># presto has weird zone/hours/minutes</span>
-</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</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-4728"><a href="#L-4728"><span class="linenos">4728</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4709"><a href="#L-4709"><span class="linenos">4709</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-4710"><a href="#L-4710"><span class="linenos">4710</span></a><span class="c1"># limit is the number of times a pattern is applied</span>
+</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</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-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4713"><a href="#L-4713"><span class="linenos">4713</span></a>
+</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a>
+</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</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-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4717"><a href="#L-4717"><span class="linenos">4717</span></a>
+</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a>
+</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</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-4720"><a href="#L-4720"><span class="linenos">4720</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4721"><a href="#L-4721"><span class="linenos">4721</span></a>
+</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a>
+</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</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-4724"><a href="#L-4724"><span class="linenos">4724</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-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><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</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-4728"><a href="#L-4728"><span class="linenos">4728</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="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-4731"><a href="#L-4731"><span class="linenos">4731</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-4732"><a href="#L-4732"><span class="linenos">4732</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-4730"><a href="#L-4730"><span class="linenos">4730</span></a>
+</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</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-4732"><a href="#L-4732"><span class="linenos">4732</span></a> <span class="k">pass</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><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</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-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="k">pass</span>
+</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</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-4736"><a href="#L-4736"><span class="linenos">4736</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-4737"><a href="#L-4737"><span class="linenos">4737</span></a>
</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a>
-</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</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-4740"><a href="#L-4740"><span class="linenos">4740</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-4741"><a href="#L-4741"><span class="linenos">4741</span></a>
+</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</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-4740"><a href="#L-4740"><span class="linenos">4740</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-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4742"><a href="#L-4742"><span class="linenos">4742</span></a>
-</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a><span class="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-4744"><a href="#L-4744"><span class="linenos">4744</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-4745"><a href="#L-4745"><span class="linenos">4745</span></a>
+</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a>
+</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</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-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4746"><a href="#L-4746"><span class="linenos">4746</span></a>
-</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a><span class="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-4748"><a href="#L-4748"><span class="linenos">4748</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-4749"><a href="#L-4749"><span class="linenos">4749</span></a>
+</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">class</span> <span class="nc">Split</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4750"><a href="#L-4750"><span class="linenos">4750</span></a>
-</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a><span class="k">class</span> <span class="nc">Week</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</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-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="c1"># Start may be omitted in the case of postgres</span>
+</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a><span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
+</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</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-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4756"><a href="#L-4756"><span class="linenos">4756</span></a>
</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="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-4760"><a href="#L-4760"><span class="linenos">4760</span></a> <span class="k">pass</span>
+</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a><span class="k">class</span> <span class="nc">StandardHash</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4759"><a href="#L-4759"><span class="linenos">4759</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4760"><a href="#L-4760"><span class="linenos">4760</span></a>
</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a>
-</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 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-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4762"><a href="#L-4762"><span class="linenos">4762</span></a><span class="k">class</span> <span class="nc">StartsWith</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;STARTS_WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">]</span>
+</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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">class</span> <span class="nc">Merge</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4769"><a href="#L-4769"><span class="linenos">4769</span></a>
-</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="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-4772"><a href="#L-4772"><span class="linenos">4772</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-4773"><a href="#L-4773"><span class="linenos">4773</span></a>
+</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</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-4768"><a href="#L-4768"><span class="linenos">4768</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</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-4770"><a href="#L-4770"><span class="linenos">4770</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-4771"><a href="#L-4771"><span class="linenos">4771</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-4772"><a href="#L-4772"><span class="linenos">4772</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-4773"><a href="#L-4773"><span class="linenos">4773</span></a> <span class="p">}</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="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljnextvaluefor.html</span>
-</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</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-4777"><a href="#L-4777"><span class="linenos">4777</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-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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="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-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4778"><a href="#L-4778"><span class="linenos">4778</span></a>
</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><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</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-4782"><a href="#L-4782"><span class="linenos">4782</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-4780"><a href="#L-4780"><span class="linenos">4780</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-4781"><a href="#L-4781"><span class="linenos">4781</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4782"><a href="#L-4782"><span class="linenos">4782</span></a>
</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a>
-</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a>
-</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</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-4786"><a href="#L-4786"><span class="linenos">4786</span></a>
-</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a>
-</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a><span class="c1"># Helpers</span>
-</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</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-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</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-4794"><a href="#L-4794"><span class="linenos">4794</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-4795"><a href="#L-4795"><span class="linenos">4795</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-4796"><a href="#L-4796"><span class="linenos">4796</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-4797"><a href="#L-4797"><span class="linenos">4797</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a> <span class="o">...</span>
+</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a><span class="c1"># Spark allows unix_timestamp()</span>
+</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</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-4786"><a href="#L-4786"><span class="linenos">4786</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-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="n">arg_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-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="c1"># https://prestodb.io/docs/current/functions/string.html</span>
+</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a><span class="c1"># https://spark.apache.org/docs/latest/api/sql/index.html#str_to_map</span>
+</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a><span class="k">class</span> <span class="nc">StrToMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</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-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="s2">&quot;pair_delim&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</span></a> <span class="s2">&quot;key_value_delim&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4797"><a href="#L-4797"><span class="linenos">4797</span></a> <span class="s2">&quot;duplicate_resolution_callback&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a> <span class="p">}</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><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a>
-</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</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-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</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-4807"><a href="#L-4807"><span class="linenos">4807</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-4808"><a href="#L-4808"><span class="linenos">4808</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-4809"><a href="#L-4809"><span class="linenos">4809</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-4810"><a href="#L-4810"><span class="linenos">4810</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4811"><a href="#L-4811"><span class="linenos">4811</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a> <span class="o">...</span>
+</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</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-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;culture&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a><span class="k">class</span> <span class="nc">FromBase</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</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-4810"><a href="#L-4810"><span class="linenos">4810</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-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a>
</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a>
-</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</span></a>
-</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</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-4817"><a href="#L-4817"><span class="linenos">4817</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</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-4819"><a href="#L-4819"><span class="linenos">4819</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-4820"><a href="#L-4820"><span class="linenos">4820</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-4821"><a href="#L-4821"><span class="linenos">4821</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-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Gracefully handle a possible string or expression.</span>
-</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a>
-</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a><span class="sd"> Example:</span>
-</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
-</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
-</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
-</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
+</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</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-4815"><a href="#L-4815"><span class="linenos">4815</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a><span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/insert</span>
+</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</span></a><span class="k">class</span> <span class="nc">Stuff</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;STUFF&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">]</span>
+</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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">True</span><span class="p">,</span> <span class="s2">&quot;length&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-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><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</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-4826"><a href="#L-4826"><span class="linenos">4826</span></a> <span class="k">pass</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><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</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-4830"><a href="#L-4830"><span class="linenos">4830</span></a> <span class="k">pass</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_or_expression: the SQL code string or an expression</span>
-</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
-</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
-</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a><span class="sd"> (automatically includes a space)</span>
-</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a><span class="sd"> that an input expression is a SQL string).</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"> Expression: the parsed or given expression.</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">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-4847"><a href="#L-4847"><span class="linenos">4847</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</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-4849"><a href="#L-4849"><span class="linenos">4849</span></a> <span class="k">return</span> <span class="n">sql_or_expression</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="k">if</span> <span class="n">sql_or_expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SQL cannot be None&quot;</span><span class="p">)</span>
-</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="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a>
+</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a><span class="k">class</span> <span class="nc">Stddev</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a> <span class="k">pass</span>
+</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a>
+</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a>
+</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</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-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="k">pass</span>
+</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a>
+</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a>
+</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</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-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="k">pass</span>
+</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a>
+</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a>
+</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</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-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;culture&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a>
+</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a>
+</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</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-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="k">pass</span>
+</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a>
+</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a>
+</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</span></a><span class="k">class</span> <span class="nc">TimeToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a> <span class="k">pass</span>
</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a>
-</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</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-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
-</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</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-4856"><a href="#L-4856"><span class="linenos">4856</span></a>
+</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a><span class="k">class</span> <span class="nc">TimeStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a> <span class="k">pass</span>
</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a>
-</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a> <span class="k">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-4861"><a href="#L-4861"><span class="linenos">4861</span></a>
-</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a>
-</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4864"><a href="#L-4864"><span class="linenos">4864</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="kc">None</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="kc">None</span><span class="p">:</span>
-</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a> <span class="o">...</span>
-</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a>
+</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="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-4862"><a href="#L-4862"><span class="linenos">4862</span></a> <span class="k">pass</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="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-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="k">pass</span>
</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a>
-</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</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">E</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">E</span><span class="p">:</span>
-</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="o">...</span>
-</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</span></a>
-</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a>
-</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</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-4874"><a href="#L-4874"><span class="linenos">4874</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="ow">and</span> <span class="n">instance</span> <span class="k">else</span> <span class="n">instance</span>
-</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a>
+</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a>
+</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</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-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</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-4872"><a href="#L-4872"><span class="linenos">4872</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-4873"><a href="#L-4873"><span class="linenos">4873</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-4874"><a href="#L-4874"><span class="linenos">4874</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-4875"><a href="#L-4875"><span class="linenos">4875</span></a> <span class="p">}</span>
</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a>
-</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</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-4878"><a href="#L-4878"><span class="linenos">4878</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-4879"><a href="#L-4879"><span class="linenos">4879</span></a>
+</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a>
+</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a><span class="k">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-4879"><a href="#L-4879"><span class="linenos">4879</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4880"><a href="#L-4880"><span class="linenos">4880</span></a>
-</span><span id="L-4881"><a href="#L-4881"><span class="linenos">4881</span></a><span class="k">def</span> <span class="nf">_apply_builder</span><span class="p">(</span>
-</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a><span class="p">):</span>
-</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</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-4892"><a href="#L-4892"><span class="linenos">4892</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-4893"><a href="#L-4893"><span class="linenos">4893</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-4894"><a href="#L-4894"><span class="linenos">4894</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-4895"><a href="#L-4895"><span class="linenos">4895</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-4896"><a href="#L-4896"><span class="linenos">4896</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-4897"><a href="#L-4897"><span class="linenos">4897</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
-</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a> <span class="p">)</span>
-</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</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-4902"><a href="#L-4902"><span class="linenos">4902</span></a> <span class="k">return</span> <span class="n">instance</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><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a><span class="k">def</span> <span class="nf">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-4906"><a href="#L-4906"><span class="linenos">4906</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4910"><a href="#L-4910"><span class="linenos">4910</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4915"><a href="#L-4915"><span class="linenos">4915</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a><span class="p">):</span>
-</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</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-4918"><a href="#L-4918"><span class="linenos">4918</span></a> <span class="n">parsed</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4919"><a href="#L-4919"><span class="linenos">4919</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-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</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-4922"><a href="#L-4922"><span class="linenos">4922</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-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="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-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="k">pass</span>
+</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a>
+</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a>
+</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</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-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4888"><a href="#L-4888"><span class="linenos">4888</span></a>
+</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a>
+</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</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-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="k">pass</span>
+</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a>
+</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a>
+</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</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-4895"><a href="#L-4895"><span class="linenos">4895</span></a> <span class="k">pass</span>
+</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</span></a>
+</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">class</span> <span class="nc">UnixToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</span></a><span class="c1"># https://prestodb.io/docs/current/functions/datetime.html</span>
+</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a><span class="c1"># presto has weird zone/hours/minutes</span>
+</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</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-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4906"><a href="#L-4906"><span class="linenos">4906</span></a>
+</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="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-4908"><a href="#L-4908"><span class="linenos">4908</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-4909"><a href="#L-4909"><span class="linenos">4909</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-4910"><a href="#L-4910"><span class="linenos">4910</span></a>
+</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a>
+</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</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-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="k">pass</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><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</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-4917"><a href="#L-4917"><span class="linenos">4917</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-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">class</span> <span class="nc">Variance</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</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-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><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</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-4925"><a href="#L-4925"><span class="linenos">4925</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
-</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a> <span class="p">)</span>
-</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</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-4932"><a href="#L-4932"><span class="linenos">4932</span></a>
-</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="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-4934"><a href="#L-4934"><span class="linenos">4934</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-4935"><a href="#L-4935"><span class="linenos">4935</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-4936"><a href="#L-4936"><span class="linenos">4936</span></a>
-</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</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-4938"><a href="#L-4938"><span class="linenos">4938</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-4939"><a href="#L-4939"><span class="linenos">4939</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-4940"><a href="#L-4940"><span class="linenos">4940</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-4941"><a href="#L-4941"><span class="linenos">4941</span></a>
-</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</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-4925"><a href="#L-4925"><span class="linenos">4925</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-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><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</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-4929"><a href="#L-4929"><span class="linenos">4929</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</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-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4934"><a href="#L-4934"><span class="linenos">4934</span></a>
+</span><span id="L-4935"><a href="#L-4935"><span class="linenos">4935</span></a>
+</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a><span class="k">class</span> <span class="nc">Year</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <span class="k">pass</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">class</span> <span class="nc">Use</span><span class="p">(</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-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><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="k">def</span> <span class="nf">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a> <span class="n">prefix</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="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="n">dialect</span><span class="o">=</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="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a><span class="p">):</span>
-</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</span></a> <span class="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-4944"><a href="#L-4944"><span class="linenos">4944</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-4945"><a href="#L-4945"><span class="linenos">4945</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4946"><a href="#L-4946"><span class="linenos">4946</span></a>
+</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a>
+</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a><span class="k">class</span> <span class="nc">When</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</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-4950"><a href="#L-4950"><span class="linenos">4950</span></a>
+</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a>
+</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a><span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljnextvaluefor.html</span>
+</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</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-4954"><a href="#L-4954"><span class="linenos">4954</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-4955"><a href="#L-4955"><span class="linenos">4955</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4956"><a href="#L-4956"><span class="linenos">4956</span></a>
</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a>
-</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</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-4961"><a href="#L-4961"><span class="linenos">4961</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
-</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="p">)</span>
-</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</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-4967"><a href="#L-4967"><span class="linenos">4967</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="p">]</span>
-</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a>
-</span><span id="L-4970"><a href="#L-4970"><span class="linenos">4970</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-4971"><a href="#L-4971"><span class="linenos">4971</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-4972"><a href="#L-4972"><span class="linenos">4972</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-4973"><a href="#L-4973"><span class="linenos">4973</span></a>
-</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="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-4975"><a href="#L-4975"><span class="linenos">4975</span></a> <span class="k">return</span> <span class="n">inst</span>
-</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a>
+</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</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-4959"><a href="#L-4959"><span class="linenos">4959</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-4960"><a href="#L-4960"><span class="linenos">4960</span></a>
+</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a>
+</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</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-4963"><a href="#L-4963"><span class="linenos">4963</span></a>
+</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a>
+</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a><span class="c1"># Helpers</span>
+</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</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-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="L-4970"><a href="#L-4970"><span class="linenos">4970</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-4971"><a href="#L-4971"><span class="linenos">4971</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-4972"><a href="#L-4972"><span class="linenos">4972</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-4973"><a href="#L-4973"><span class="linenos">4973</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-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="o">**</span><span class="n">opts</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 class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a> <span class="o">...</span>
</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a>
-</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a><span class="k">def</span> <span class="nf">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4984"><a href="#L-4984"><span class="linenos">4984</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4986"><a href="#L-4986"><span class="linenos">4986</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a><span class="p">):</span>
-</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</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-4989"><a href="#L-4989"><span class="linenos">4989</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-4990"><a href="#L-4990"><span class="linenos">4990</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a>
+</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</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-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</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-4984"><a href="#L-4984"><span class="linenos">4984</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-4985"><a href="#L-4985"><span class="linenos">4985</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-4986"><a href="#L-4986"><span class="linenos">4986</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-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <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="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="o">...</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><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</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-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="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-4995"><a href="#L-4995"><span class="linenos">4995</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-4996"><a href="#L-4996"><span class="linenos">4996</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-4997"><a href="#L-4997"><span class="linenos">4997</span></a>
-</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">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-4999"><a href="#L-4999"><span class="linenos">4999</span></a>
-</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a> <span class="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-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</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-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</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-4996"><a href="#L-4996"><span class="linenos">4996</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-4997"><a href="#L-4997"><span class="linenos">4997</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-4998"><a href="#L-4998"><span class="linenos">4998</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-4999"><a href="#L-4999"><span class="linenos">4999</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Gracefully handle a possible string or expression.</span>
</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a>
-</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a>
-</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a><span class="k">def</span> <span class="nf">_apply_cte_builder</span><span class="p">(</span>
-</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="n">instance</span><span class="p">:</span> <span class="n">E</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="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a> <span class="n">recursive</span><span 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-5009"><a href="#L-5009"><span class="linenos">5009</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-5010"><a href="#L-5010"><span class="linenos">5010</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-5011"><a href="#L-5011"><span class="linenos">5011</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-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">alias</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">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">as_</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-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">)</span>
-</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a> <span class="n">cte</span><span class="p">,</span>
-</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</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-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
-</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</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-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="p">)</span>
-</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a>
+</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a><span class="sd"> Example:</span>
+</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
+</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
+</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
+</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</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"> Args:</span>
+</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
+</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
+</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
+</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
+</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a><span class="sd"> (automatically includes a space)</span>
+</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a>
+</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a><span class="sd"> Expression: the parsed or given expression.</span>
+</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</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-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</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-5026"><a href="#L-5026"><span class="linenos">5026</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span>
</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a>
-</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a><span class="k">def</span> <span class="nf">_combine</span><span class="p">(</span>
-</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <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">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><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="n">operator</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">Connector</span><span class="p">],</span>
-</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</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-5032"><a href="#L-5032"><span class="linenos">5032</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-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="n">conditions</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">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><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</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-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</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><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</span></a> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="n">conditions</span>
-</span><span id="L-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="k">if</span> <span class="n">rest</span><span class="p">:</span>
-</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</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-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">rest</span><span class="p">:</span>
-</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</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-5046"><a href="#L-5046"><span class="linenos">5046</span></a>
-</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a> <span class="k">if</span> <span class="n">sql_or_expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SQL cannot be None&quot;</span><span class="p">)</span>
+</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a>
+</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="kn">import</span> <span class="nn">sqlglot</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="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-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
+</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</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-5036"><a href="#L-5036"><span class="linenos">5036</span></a>
+</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</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-5038"><a href="#L-5038"><span class="linenos">5038</span></a>
+</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="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</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="kc">None</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="kc">None</span><span class="p">:</span>
+</span><span id="L-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="o">...</span>
+</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a>
+</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a>
+</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</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">E</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">E</span><span class="p">:</span>
+</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="o">...</span>
</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a>
</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="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-5051"><a href="#L-5051"><span class="linenos">5051</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 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 class="k">else</span> <span class="n">expression</span>
+</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</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-5051"><a href="#L-5051"><span class="linenos">5051</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="ow">and</span> <span class="n">instance</span> <span class="k">else</span> <span class="n">instance</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">union</span><span class="p">(</span>
-</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</span>
-</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a>
-</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a><span class="sd"> Example:</span>
-</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</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-5062"><a href="#L-5062"><span class="linenos">5062</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
-</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a>
-</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a><span class="sd"> Args:</span>
-</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
-</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
-</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a>
-</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a><span class="sd"> The new Union instance.</span>
-</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</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-5077"><a href="#L-5077"><span class="linenos">5077</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-5078"><a href="#L-5078"><span class="linenos">5078</span></a>
-</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</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-5054"><a href="#L-5054"><span class="linenos">5054</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-5055"><a href="#L-5055"><span class="linenos">5055</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-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><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a><span class="k">def</span> <span class="nf">_apply_builder</span><span class="p">(</span>
+</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a><span class="p">):</span>
+</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</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-5069"><a href="#L-5069"><span class="linenos">5069</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-5070"><a href="#L-5070"><span class="linenos">5070</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-5071"><a href="#L-5071"><span class="linenos">5071</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-5072"><a href="#L-5072"><span class="linenos">5072</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-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
+</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</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="n">opts</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="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-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="k">return</span> <span class="n">instance</span>
</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a>
</span><span id="L-5081"><a href="#L-5081"><span class="linenos">5081</span></a>
-</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span>
-</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Intersect</span><span class="p">:</span>
-</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
-</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a>
-</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a><span class="sd"> Example:</span>
-</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</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-5090"><a href="#L-5090"><span class="linenos">5090</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</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"> left: the SQL code string corresponding to the left-hand side.</span>
-</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
-</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a><span class="k">def</span> <span class="nf">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a><span class="p">):</span>
+</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</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-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="n">parsed</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</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-5097"><a href="#L-5097"><span class="linenos">5097</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</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-5099"><a href="#L-5099"><span class="linenos">5099</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-5100"><a href="#L-5100"><span class="linenos">5100</span></a>
-</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5102"><a href="#L-5102"><span class="linenos">5102</span></a><span class="sd"> The new Intersect instance.</span>
-</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</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-5105"><a href="#L-5105"><span class="linenos">5105</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-5106"><a href="#L-5106"><span class="linenos">5106</span></a>
-</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a> <span class="k">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-5108"><a href="#L-5108"><span class="linenos">5108</span></a>
+</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</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-5102"><a href="#L-5102"><span class="linenos">5102</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
+</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a> <span class="p">)</span>
+</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</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-5109"><a href="#L-5109"><span class="linenos">5109</span></a>
-</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span>
-</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Except</span><span class="p">:</span>
-</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</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="sd"> Example:</span>
-</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</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-5118"><a href="#L-5118"><span class="linenos">5118</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a>
-</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a><span class="sd"> Args:</span>
-</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
-</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
-</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</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"> Returns:</span>
-</span><span id="L-5130"><a href="#L-5130"><span class="linenos">5130</span></a><span class="sd"> The new Except instance.</span>
-</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</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-5133"><a href="#L-5133"><span class="linenos">5133</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-5110"><a href="#L-5110"><span class="linenos">5110</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-5111"><a href="#L-5111"><span class="linenos">5111</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-5112"><a href="#L-5112"><span class="linenos">5112</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-5113"><a href="#L-5113"><span class="linenos">5113</span></a>
+</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</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-5115"><a href="#L-5115"><span class="linenos">5115</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-5116"><a href="#L-5116"><span class="linenos">5116</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-5117"><a href="#L-5117"><span class="linenos">5117</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-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">return</span> <span class="n">instance</span>
+</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a>
+</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a>
+</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a><span class="k">def</span> <span class="nf">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5129"><a href="#L-5129"><span class="linenos">5129</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5130"><a href="#L-5130"><span class="linenos">5130</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a><span class="p">):</span>
+</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</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-5134"><a href="#L-5134"><span class="linenos">5134</span></a>
-</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</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-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><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</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-5139"><a href="#L-5139"><span class="linenos">5139</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
-</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a>
-</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a><span class="sd"> Example:</span>
-</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</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-5144"><a href="#L-5144"><span class="linenos">5144</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a>
-</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a><span class="sd"> Args:</span>
-</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
-</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="L-5150"><a href="#L-5150"><span class="linenos">5150</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-5137"><a href="#L-5137"><span class="linenos">5137</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-5138"><a href="#L-5138"><span class="linenos">5138</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
+</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="p">)</span>
+</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</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-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="p">]</span>
+</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a>
+</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a> <span class="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-5148"><a href="#L-5148"><span class="linenos">5148</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-5149"><a href="#L-5149"><span class="linenos">5149</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-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="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-5152"><a href="#L-5152"><span class="linenos">5152</span></a> <span class="k">return</span> <span class="n">inst</span>
</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="sd"> Returns:</span>
-</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</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-5158"><a href="#L-5158"><span class="linenos">5158</span></a>
-</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a>
-</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a><span class="k">def</span> <span class="nf">from_</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">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-5161"><a href="#L-5161"><span class="linenos">5161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</span>
-</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a>
-</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a><span class="sd"> Example:</span>
-</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</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-5166"><a href="#L-5166"><span class="linenos">5166</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="L-5167"><a href="#L-5167"><span class="linenos">5167</span></a>
-</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a><span class="sd"> Args:</span>
-</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a><span class="sd"> *expression: the SQL code string to parse as the FROM expressions of a</span>
-</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
-</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a><span class="sd"> that the input expression is a SQL string).</span>
-</span><span id="L-5175"><a href="#L-5175"><span class="linenos">5175</span></a>
-</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</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-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="k">def</span> <span class="nf">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a><span class="p">):</span>
+</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</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-5166"><a href="#L-5166"><span class="linenos">5166</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-5167"><a href="#L-5167"><span class="linenos">5167</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a>
+</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a> <span class="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-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="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-5172"><a href="#L-5172"><span class="linenos">5172</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-5173"><a href="#L-5173"><span class="linenos">5173</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-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="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-5176"><a href="#L-5176"><span class="linenos">5176</span></a>
+</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</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-5178"><a href="#L-5178"><span class="linenos">5178</span></a> <span class="k">return</span> <span class="n">inst</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><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a>
-</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
-</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</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-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
-</span><span id="L-5185"><a href="#L-5185"><span class="linenos">5185</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-5186"><a href="#L-5186"><span class="linenos">5186</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-5181"><a href="#L-5181"><span class="linenos">5181</span></a><span class="k">def</span> <span class="nf">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a> <span class="n">instance</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span>
+</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5185"><a href="#L-5185"><span class="linenos">5185</span></a> <span class="n">recursive</span><span 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-5186"><a href="#L-5186"><span class="linenos">5186</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-5187"><a href="#L-5187"><span class="linenos">5187</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-5188"><a href="#L-5188"><span class="linenos">5188</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
-</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a><span class="sd"> Creates an update statement.</span>
-</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a>
-</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a><span class="sd"> Example:</span>
-</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</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-5195"><a href="#L-5195"><span class="linenos">5195</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-5196"><a href="#L-5196"><span class="linenos">5196</span></a>
-</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</span></a><span class="sd"> Args:</span>
-</span><span id="L-5198"><a href="#L-5198"><span class="linenos">5198</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
-</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
-</span><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
-</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5188"><a href="#L-5188"><span class="linenos">5188</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-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">alias</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">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">as_</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-5193"><a href="#L-5193"><span class="linenos">5193</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">)</span>
+</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</span></a> <span class="n">cte</span><span class="p">,</span>
+</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</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-5198"><a href="#L-5198"><span class="linenos">5198</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
+</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</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-5202"><a href="#L-5202"><span class="linenos">5202</span></a> <span class="p">)</span>
+</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a>
</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a>
-</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
-</span><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</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-5209"><a href="#L-5209"><span class="linenos">5209</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-5210"><a href="#L-5210"><span class="linenos">5210</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a> <span class="p">[</span>
-</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</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-5213"><a href="#L-5213"><span class="linenos">5213</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-5214"><a href="#L-5214"><span class="linenos">5214</span></a> <span class="p">],</span>
-</span><span id="L-5215"><a href="#L-5215"><span class="linenos">5215</span></a> <span class="p">)</span>
-</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</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-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</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-5220"><a href="#L-5220"><span class="linenos">5220</span></a> <span class="p">)</span>
-</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a> <span class="k">if</span> <span class="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-5222"><a href="#L-5222"><span class="linenos">5222</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-5223"><a href="#L-5223"><span class="linenos">5223</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</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-5225"><a href="#L-5225"><span class="linenos">5225</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="L-5226"><a href="#L-5226"><span class="linenos">5226</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-5227"><a href="#L-5227"><span class="linenos">5227</span></a> <span class="p">)</span>
-</span><span id="L-5228"><a href="#L-5228"><span class="linenos">5228</span></a> <span class="k">return</span> <span class="n">update_expr</span>
+</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a><span class="k">def</span> <span class="nf">_combine</span><span class="p">(</span>
+</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</span></a> <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">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><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a> <span class="n">operator</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">Connector</span><span class="p">],</span>
+</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</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-5209"><a href="#L-5209"><span class="linenos">5209</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-5210"><a href="#L-5210"><span class="linenos">5210</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a> <span class="n">conditions</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</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><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</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-5215"><a href="#L-5215"><span class="linenos">5215</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a> <span class="p">]</span>
+</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</span></a>
+</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span> <span class="o">=</span> <span class="n">conditions</span>
+</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="k">if</span> <span class="n">rest</span><span class="p">:</span>
+</span><span id="L-5220"><a href="#L-5220"><span class="linenos">5220</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-5221"><a href="#L-5221"><span class="linenos">5221</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">rest</span><span class="p">:</span>
+</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</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-5223"><a href="#L-5223"><span class="linenos">5223</span></a>
+</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a> <span class="k">return</span> <span class="n">this</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><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</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-5228"><a href="#L-5228"><span class="linenos">5228</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 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 class="k">else</span> <span class="n">expression</span>
</span><span id="L-5229"><a href="#L-5229"><span class="linenos">5229</span></a>
</span><span id="L-5230"><a href="#L-5230"><span class="linenos">5230</span></a>
-</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</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-5234"><a href="#L-5234"><span class="linenos">5234</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-5235"><a href="#L-5235"><span class="linenos">5235</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-5236"><a href="#L-5236"><span class="linenos">5236</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5237"><a href="#L-5237"><span class="linenos">5237</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-5238"><a href="#L-5238"><span class="linenos">5238</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a><span class="sd"> Builds a delete statement.</span>
+</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span>
+</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</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"> Example:</span>
+</span><span id="L-5238"><a href="#L-5238"><span class="linenos">5238</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-5239"><a href="#L-5239"><span class="linenos">5239</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a>
-</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a><span class="sd"> Example:</span>
-</span><span id="L-5242"><a href="#L-5242"><span class="linenos">5242</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-5243"><a href="#L-5243"><span class="linenos">5243</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</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"> Args:</span>
-</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
-</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5250"><a href="#L-5250"><span class="linenos">5250</span></a>
-</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
-</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</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-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</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-5257"><a href="#L-5257"><span class="linenos">5257</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
-</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</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-5259"><a href="#L-5259"><span class="linenos">5259</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
-</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a>
-</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">def</span> <span class="nf">insert</span><span class="p">(</span>
-</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5264"><a href="#L-5264"><span class="linenos">5264</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</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">Sequence</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-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="n">overwrite</span><span 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-5267"><a href="#L-5267"><span class="linenos">5267</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-5268"><a href="#L-5268"><span class="linenos">5268</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-5269"><a href="#L-5269"><span class="linenos">5269</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
-</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5272"><a href="#L-5272"><span class="linenos">5272</span></a><span class="sd"> Builds an INSERT statement.</span>
-</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a>
-</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a><span class="sd"> Example:</span>
-</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;VALUES (1, 2, 3)&quot;, &quot;tbl&quot;).sql()</span>
-</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a><span class="sd"> &#39;INSERT INTO tbl VALUES (1, 2, 3)&#39;</span>
+</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a><span class="sd"> Args:</span>
+</span><span id="L-5242"><a href="#L-5242"><span class="linenos">5242</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
+</span><span id="L-5243"><a href="#L-5243"><span class="linenos">5243</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
+</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a>
+</span><span id="L-5250"><a href="#L-5250"><span class="linenos">5250</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a><span class="sd"> The new Union instance.</span>
+</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</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-5254"><a href="#L-5254"><span class="linenos">5254</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-5255"><a href="#L-5255"><span class="linenos">5255</span></a>
+</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</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-5257"><a href="#L-5257"><span class="linenos">5257</span></a>
+</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a>
+</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span>
+</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="L-5261"><a href="#L-5261"><span class="linenos">5261</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Intersect</span><span class="p">:</span>
+</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
+</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="sd"> Example:</span>
+</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</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-5267"><a href="#L-5267"><span class="linenos">5267</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
+</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a>
+</span><span id="L-5269"><a href="#L-5269"><span class="linenos">5269</span></a><span class="sd"> Args:</span>
+</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
+</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-5272"><a href="#L-5272"><span class="linenos">5272</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
+</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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 sql string or expression of the INSERT statement</span>
-</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a><span class="sd"> into: the tbl to insert data to.</span>
-</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</span></a><span class="sd"> columns: optionally the table&#39;s column names.</span>
-</span><span id="L-5282"><a href="#L-5282"><span class="linenos">5282</span></a><span class="sd"> overwrite: whether to INSERT OVERWRITE or not.</span>
-</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="L-5285"><a href="#L-5285"><span class="linenos">5285</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5278"><a href="#L-5278"><span class="linenos">5278</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a><span class="sd"> The new Intersect instance.</span>
+</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</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-5282"><a href="#L-5282"><span class="linenos">5282</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-5283"><a href="#L-5283"><span class="linenos">5283</span></a>
+</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</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-5285"><a href="#L-5285"><span class="linenos">5285</span></a>
</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a>
-</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</span></a><span class="sd"> Insert: the syntax tree for the INSERT statement.</span>
-</span><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5290"><a href="#L-5290"><span class="linenos">5290</span></a> <span class="n">expr</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">Table</span> <span class="o">|</span> <span class="n">Schema</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">into</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 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-5287"><a href="#L-5287"><span class="linenos">5287</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span>
+</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Except</span><span class="p">:</span>
+</span><span id="L-5290"><a href="#L-5290"><span class="linenos">5290</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</span>
</span><span id="L-5292"><a href="#L-5292"><span class="linenos">5292</span></a>
-</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a> <span class="k">if</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="o">*</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a> <span class="n">instance</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><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</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-5298"><a href="#L-5298"><span class="linenos">5298</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a> <span class="p">)</span>
-</span><span id="L-5303"><a href="#L-5303"><span class="linenos">5303</span></a>
-</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</span></a> <span class="k">return</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 class="n">expression</span><span class="o">=</span><span class="n">expr</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span>
+</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a><span class="sd"> Example:</span>
+</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</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-5295"><a href="#L-5295"><span class="linenos">5295</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</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="sd"> Args:</span>
+</span><span id="L-5298"><a href="#L-5298"><span class="linenos">5298</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
+</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
+</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-5303"><a href="#L-5303"><span class="linenos">5303</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a>
-</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a>
-</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a><span class="k">def</span> <span class="nf">condition</span><span class="p">(</span>
-</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a> <span class="n">expression</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="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><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
-</span><span id="L-5310"><a href="#L-5310"><span class="linenos">5310</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5311"><a href="#L-5311"><span class="linenos">5311</span></a><span class="sd"> Initialize a logical condition expression.</span>
-</span><span id="L-5312"><a href="#L-5312"><span class="linenos">5312</span></a>
-</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</span></a><span class="sd"> Example:</span>
-</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
-</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</span></a><span class="sd"> &#39;x = 1&#39;</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"> This is helpful for composing larger logical syntax trees:</span>
-</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
-</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
-</span><span id="L-5320"><a href="#L-5320"><span class="linenos">5320</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
-</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
+</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a><span class="sd"> The new Except instance.</span>
+</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</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-5310"><a href="#L-5310"><span class="linenos">5310</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-5311"><a href="#L-5311"><span class="linenos">5311</span></a>
+</span><span id="L-5312"><a href="#L-5312"><span class="linenos">5312</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-5313"><a href="#L-5313"><span class="linenos">5313</span></a>
+</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a>
+</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</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-5316"><a href="#L-5316"><span class="linenos">5316</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5317"><a href="#L-5317"><span class="linenos">5317</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
+</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a>
+</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a><span class="sd"> Example:</span>
+</span><span id="L-5320"><a href="#L-5320"><span class="linenos">5320</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-5321"><a href="#L-5321"><span class="linenos">5321</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</span></a>
</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a><span class="sd"> Args:</span>
-</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a><span class="sd"> *expression: the SQL code string to parse.</span>
-</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
+</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
+</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</span></a><span class="sd"> copy: Whether or not to copy `expression` (only applies to expressions).</span>
-</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a><span class="sd"> that the input expression is a SQL string).</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="sd"> Returns:</span>
-</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a><span class="sd"> The new Condition instance</span>
-</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-5337"><a href="#L-5337"><span class="linenos">5337</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
-</span><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-5340"><a href="#L-5340"><span class="linenos">5340</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5341"><a href="#L-5341"><span class="linenos">5341</span></a> <span class="p">)</span>
-</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</span></a>
-</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">def</span> <span class="nf">and_</span><span class="p">(</span>
-</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a> <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">Optional</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="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><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
-</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
-</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a>
-</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a><span class="sd"> Example:</span>
-</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</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-5352"><a href="#L-5352"><span class="linenos">5352</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
-</span><span id="L-5353"><a href="#L-5353"><span class="linenos">5353</span></a>
-</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a><span class="sd"> Args:</span>
-</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-5356"><a href="#L-5356"><span class="linenos">5356</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
-</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5360"><a href="#L-5360"><span class="linenos">5360</span></a>
-</span><span id="L-5361"><a href="#L-5361"><span class="linenos">5361</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</span></a><span class="sd"> And: the new condition</span>
-</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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-5365"><a href="#L-5365"><span class="linenos">5365</span></a>
-</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a>
-</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a><span class="k">def</span> <span class="nf">or_</span><span class="p">(</span>
-</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a> <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">Optional</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="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><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
-</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
-</span><span id="L-5372"><a href="#L-5372"><span class="linenos">5372</span></a>
-</span><span id="L-5373"><a href="#L-5373"><span class="linenos">5373</span></a><span class="sd"> Example:</span>
-</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</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-5375"><a href="#L-5375"><span class="linenos">5375</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
-</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a>
-</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a><span class="sd"> Args:</span>
-</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
-</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a>
-</span><span id="L-5384"><a href="#L-5384"><span class="linenos">5384</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</span></a><span class="sd"> Or: the new condition</span>
-</span><span id="L-5386"><a href="#L-5386"><span class="linenos">5386</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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-5388"><a href="#L-5388"><span class="linenos">5388</span></a>
-</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</span></a>
-</span><span id="L-5390"><a href="#L-5390"><span class="linenos">5390</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">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="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">Not</span><span class="p">:</span>
-</span><span id="L-5391"><a href="#L-5391"><span class="linenos">5391</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</span></a><span class="sd"> Wrap a condition with a NOT operator.</span>
-</span><span id="L-5393"><a href="#L-5393"><span class="linenos">5393</span></a>
-</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</span></a><span class="sd"> Example:</span>
-</span><span id="L-5395"><a href="#L-5395"><span class="linenos">5395</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
-</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</span>
-</span><span id="L-5397"><a href="#L-5397"><span class="linenos">5397</span></a>
-</span><span id="L-5398"><a href="#L-5398"><span class="linenos">5398</span></a><span class="sd"> Args:</span>
-</span><span id="L-5399"><a href="#L-5399"><span class="linenos">5399</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="L-5400"><a href="#L-5400"><span class="linenos">5400</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5402"><a href="#L-5402"><span class="linenos">5402</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
-</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5404"><a href="#L-5404"><span class="linenos">5404</span></a>
-</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5406"><a href="#L-5406"><span class="linenos">5406</span></a><span class="sd"> The new condition.</span>
-</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
-</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-5410"><a href="#L-5410"><span class="linenos">5410</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-5411"><a href="#L-5411"><span class="linenos">5411</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-5412"><a href="#L-5412"><span class="linenos">5412</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5413"><a href="#L-5413"><span class="linenos">5413</span></a> <span class="p">)</span>
-</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</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-5415"><a href="#L-5415"><span class="linenos">5415</span></a>
-</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</span></a>
-</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</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">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">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
-</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5419"><a href="#L-5419"><span class="linenos">5419</span></a><span class="sd"> Wrap an expression in parentheses.</span>
-</span><span id="L-5420"><a href="#L-5420"><span class="linenos">5420</span></a>
-</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a><span class="sd"> Example:</span>
-</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</span></a><span class="sd"> &gt;&gt;&gt; paren(&quot;5 + 3&quot;).sql()</span>
-</span><span id="L-5423"><a href="#L-5423"><span class="linenos">5423</span></a><span class="sd"> &#39;(5 + 3)&#39;</span>
-</span><span id="L-5424"><a href="#L-5424"><span class="linenos">5424</span></a>
-</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</span></a><span class="sd"> Args:</span>
-</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
-</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</span></a>
-</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</span></a><span class="sd"> The wrapped expression.</span>
-</span><span id="L-5432"><a href="#L-5432"><span class="linenos">5432</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</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_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">))</span>
-</span><span id="L-5434"><a href="#L-5434"><span class="linenos">5434</span></a>
-</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</span></a>
-</span><span id="L-5436"><a href="#L-5436"><span class="linenos">5436</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-5328"><a href="#L-5328"><span class="linenos">5328</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a>
+</span><span id="L-5331"><a href="#L-5331"><span class="linenos">5331</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5332"><a href="#L-5332"><span class="linenos">5332</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</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-5335"><a href="#L-5335"><span class="linenos">5335</span></a>
+</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a>
+</span><span id="L-5337"><a href="#L-5337"><span class="linenos">5337</span></a><span class="k">def</span> <span class="nf">from_</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">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-5338"><a href="#L-5338"><span class="linenos">5338</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</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="sd"> Example:</span>
+</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</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-5343"><a href="#L-5343"><span class="linenos">5343</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
+</span><span id="L-5344"><a href="#L-5344"><span class="linenos">5344</span></a>
+</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a><span class="sd"> Args:</span>
+</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a><span class="sd"> *expression: the SQL code string to parse as the FROM expressions of a</span>
+</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
+</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a><span class="sd"> that the input expression is a SQL string).</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 class="sd"> Returns:</span>
+</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5356"><a href="#L-5356"><span class="linenos">5356</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-5357"><a href="#L-5357"><span class="linenos">5357</span></a>
+</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a>
+</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
+</span><span id="L-5360"><a href="#L-5360"><span class="linenos">5360</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-5361"><a href="#L-5361"><span class="linenos">5361</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
+</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</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-5363"><a href="#L-5363"><span class="linenos">5363</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-5364"><a href="#L-5364"><span class="linenos">5364</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-5365"><a href="#L-5365"><span class="linenos">5365</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
+</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a><span class="sd"> Creates an update statement.</span>
+</span><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a>
+</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</span></a><span class="sd"> Example:</span>
+</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</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-5372"><a href="#L-5372"><span class="linenos">5372</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-5373"><a href="#L-5373"><span class="linenos">5373</span></a>
+</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</span></a><span class="sd"> Args:</span>
+</span><span id="L-5375"><a href="#L-5375"><span class="linenos">5375</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
+</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
+</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
+</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a>
+</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
+</span><span id="L-5384"><a href="#L-5384"><span class="linenos">5384</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</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-5386"><a href="#L-5386"><span class="linenos">5386</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-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="L-5388"><a href="#L-5388"><span class="linenos">5388</span></a> <span class="p">[</span>
+</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</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-5390"><a href="#L-5390"><span class="linenos">5390</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-5391"><a href="#L-5391"><span class="linenos">5391</span></a> <span class="p">],</span>
+</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</span></a> <span class="p">)</span>
+</span><span id="L-5393"><a href="#L-5393"><span class="linenos">5393</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</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-5395"><a href="#L-5395"><span class="linenos">5395</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</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-5397"><a href="#L-5397"><span class="linenos">5397</span></a> <span class="p">)</span>
+</span><span id="L-5398"><a href="#L-5398"><span class="linenos">5398</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-5399"><a href="#L-5399"><span class="linenos">5399</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-5400"><a href="#L-5400"><span class="linenos">5400</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</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-5402"><a href="#L-5402"><span class="linenos">5402</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</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-5404"><a href="#L-5404"><span class="linenos">5404</span></a> <span class="p">)</span>
+</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</span></a> <span class="k">return</span> <span class="n">update_expr</span>
+</span><span id="L-5406"><a href="#L-5406"><span class="linenos">5406</span></a>
+</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</span></a>
+</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5410"><a href="#L-5410"><span class="linenos">5410</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-5411"><a href="#L-5411"><span class="linenos">5411</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-5412"><a href="#L-5412"><span class="linenos">5412</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-5413"><a href="#L-5413"><span class="linenos">5413</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-5415"><a href="#L-5415"><span class="linenos">5415</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</span></a><span class="sd"> Builds a delete statement.</span>
+</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</span></a>
+</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a><span class="sd"> Example:</span>
+</span><span id="L-5419"><a href="#L-5419"><span class="linenos">5419</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-5420"><a href="#L-5420"><span class="linenos">5420</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
+</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a>
+</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</span></a><span class="sd"> Args:</span>
+</span><span id="L-5423"><a href="#L-5423"><span class="linenos">5423</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="L-5424"><a href="#L-5424"><span class="linenos">5424</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
+</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a>
+</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
+</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</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-5432"><a href="#L-5432"><span class="linenos">5432</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</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-5434"><a href="#L-5434"><span class="linenos">5434</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
+</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</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-5436"><a href="#L-5436"><span class="linenos">5436</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
</span><span id="L-5437"><a href="#L-5437"><span class="linenos">5437</span></a>
</span><span id="L-5438"><a href="#L-5438"><span class="linenos">5438</span></a>
-</span><span id="L-5439"><a href="#L-5439"><span class="linenos">5439</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5440"><a href="#L-5440"><span class="linenos">5440</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="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="kc">None</span><span class="p">:</span>
-</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</span></a> <span class="o">...</span>
-</span><span id="L-5442"><a href="#L-5442"><span class="linenos">5442</span></a>
-</span><span id="L-5443"><a href="#L-5443"><span class="linenos">5443</span></a>
-</span><span id="L-5444"><a href="#L-5444"><span class="linenos">5444</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5445"><a href="#L-5445"><span class="linenos">5445</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span>
-</span><span id="L-5446"><a href="#L-5446"><span class="linenos">5446</span></a> <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="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-5447"><a href="#L-5447"><span class="linenos">5447</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Identifier</span><span class="p">:</span>
-</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</span></a> <span class="o">...</span>
-</span><span id="L-5449"><a href="#L-5449"><span class="linenos">5449</span></a>
+</span><span id="L-5439"><a href="#L-5439"><span class="linenos">5439</span></a><span class="k">def</span> <span class="nf">insert</span><span class="p">(</span>
+</span><span id="L-5440"><a href="#L-5440"><span class="linenos">5440</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5442"><a href="#L-5442"><span class="linenos">5442</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">Sequence</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-5443"><a href="#L-5443"><span class="linenos">5443</span></a> <span class="n">overwrite</span><span 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-5444"><a href="#L-5444"><span class="linenos">5444</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-5445"><a href="#L-5445"><span class="linenos">5445</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-5446"><a href="#L-5446"><span class="linenos">5446</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5447"><a href="#L-5447"><span class="linenos">5447</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
+</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5449"><a href="#L-5449"><span class="linenos">5449</span></a><span class="sd"> Builds an INSERT statement.</span>
</span><span id="L-5450"><a href="#L-5450"><span class="linenos">5450</span></a>
-</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</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 class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
-</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a>
-</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</span></a><span class="sd"> Args:</span>
-</span><span id="L-5455"><a href="#L-5455"><span class="linenos">5455</span></a><span class="sd"> name: The name to turn into an identifier.</span>
-</span><span id="L-5456"><a href="#L-5456"><span class="linenos">5456</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
-</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a><span class="sd"> copy: Whether or not to copy a passed in Identefier node.</span>
-</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a>
-</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a><span class="sd"> The identifier ast node.</span>
-</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5462"><a href="#L-5462"><span class="linenos">5462</span></a>
-</span><span id="L-5463"><a href="#L-5463"><span class="linenos">5463</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-5464"><a href="#L-5464"><span class="linenos">5464</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</span></a>
-</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</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-5467"><a href="#L-5467"><span class="linenos">5467</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">maybe_copy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</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-5469"><a href="#L-5469"><span class="linenos">5469</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">Identifier</span><span class="p">(</span>
-</span><span id="L-5470"><a href="#L-5470"><span class="linenos">5470</span></a> <span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</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-5472"><a href="#L-5472"><span class="linenos">5472</span></a> <span class="p">)</span>
-</span><span id="L-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</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-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="k">return</span> <span class="n">identifier</span>
-</span><span id="L-5476"><a href="#L-5476"><span class="linenos">5476</span></a>
-</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a>
-</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</span></a><span class="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-5479"><a href="#L-5479"><span class="linenos">5479</span></a>
+</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</span></a><span class="sd"> Example:</span>
+</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;VALUES (1, 2, 3)&quot;, &quot;tbl&quot;).sql()</span>
+</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a><span class="sd"> &#39;INSERT INTO tbl VALUES (1, 2, 3)&#39;</span>
+</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</span></a>
+</span><span id="L-5455"><a href="#L-5455"><span class="linenos">5455</span></a><span class="sd"> Args:</span>
+</span><span id="L-5456"><a href="#L-5456"><span class="linenos">5456</span></a><span class="sd"> expression: the sql string or expression of the INSERT statement</span>
+</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a><span class="sd"> into: the tbl to insert data to.</span>
+</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a><span class="sd"> columns: optionally the table&#39;s column names.</span>
+</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</span></a><span class="sd"> overwrite: whether to INSERT OVERWRITE or not.</span>
+</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="L-5462"><a href="#L-5462"><span class="linenos">5462</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5463"><a href="#L-5463"><span class="linenos">5463</span></a>
+</span><span id="L-5464"><a href="#L-5464"><span class="linenos">5464</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</span></a><span class="sd"> Insert: the syntax tree for the INSERT statement.</span>
+</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5467"><a href="#L-5467"><span class="linenos">5467</span></a> <span class="n">expr</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">Table</span> <span class="o">|</span> <span class="n">Schema</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">into</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 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-5469"><a href="#L-5469"><span class="linenos">5469</span></a>
+</span><span id="L-5470"><a href="#L-5470"><span class="linenos">5470</span></a> <span class="k">if</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-5472"><a href="#L-5472"><span class="linenos">5472</span></a> <span class="o">*</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="L-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="n">instance</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><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</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-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-5476"><a href="#L-5476"><span class="linenos">5476</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5479"><a href="#L-5479"><span class="linenos">5479</span></a> <span class="p">)</span>
</span><span id="L-5480"><a href="#L-5480"><span class="linenos">5480</span></a>
-</span><span id="L-5481"><a href="#L-5481"><span class="linenos">5481</span></a><span class="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-5482"><a href="#L-5482"><span class="linenos">5482</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-5483"><a href="#L-5483"><span class="linenos">5483</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-5484"><a href="#L-5484"><span class="linenos">5484</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-5485"><a href="#L-5485"><span class="linenos">5485</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-5486"><a href="#L-5486"><span class="linenos">5486</span></a>
-</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</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-5488"><a href="#L-5488"><span class="linenos">5488</span></a>
-</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</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-5490"><a href="#L-5490"><span class="linenos">5490</span></a>
-</span><span id="L-5491"><a href="#L-5491"><span class="linenos">5491</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-5492"><a href="#L-5492"><span class="linenos">5492</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-5481"><a href="#L-5481"><span class="linenos">5481</span></a> <span class="k">return</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 class="n">expression</span><span class="o">=</span><span class="n">expr</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span>
+</span><span id="L-5482"><a href="#L-5482"><span class="linenos">5482</span></a>
+</span><span id="L-5483"><a href="#L-5483"><span class="linenos">5483</span></a>
+</span><span id="L-5484"><a href="#L-5484"><span class="linenos">5484</span></a><span class="k">def</span> <span class="nf">condition</span><span class="p">(</span>
+</span><span id="L-5485"><a href="#L-5485"><span class="linenos">5485</span></a> <span class="n">expression</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="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><span id="L-5486"><a href="#L-5486"><span class="linenos">5486</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
+</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5488"><a href="#L-5488"><span class="linenos">5488</span></a><span class="sd"> Initialize a logical condition expression.</span>
+</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</span></a>
+</span><span id="L-5490"><a href="#L-5490"><span class="linenos">5490</span></a><span class="sd"> Example:</span>
+</span><span id="L-5491"><a href="#L-5491"><span class="linenos">5491</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
+</span><span id="L-5492"><a href="#L-5492"><span class="linenos">5492</span></a><span class="sd"> &#39;x = 1&#39;</span>
</span><span id="L-5493"><a href="#L-5493"><span class="linenos">5493</span></a>
-</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</span></a> <span class="k">return</span> <span class="n">Interval</span><span class="p">(</span>
-</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a> <span class="n">this</span><span class="o">=</span><span class="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-5496"><a href="#L-5496"><span class="linenos">5496</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-5497"><a href="#L-5497"><span class="linenos">5497</span></a> <span class="p">)</span>
-</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a>
+</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
+</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
+</span><span id="L-5496"><a href="#L-5496"><span class="linenos">5496</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
+</span><span id="L-5497"><a href="#L-5497"><span class="linenos">5497</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
+</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
</span><span id="L-5499"><a href="#L-5499"><span class="linenos">5499</span></a>
-</span><span id="L-5500"><a href="#L-5500"><span class="linenos">5500</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</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-5502"><a href="#L-5502"><span class="linenos">5502</span></a> <span class="o">...</span>
-</span><span id="L-5503"><a href="#L-5503"><span class="linenos">5503</span></a>
-</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</span></a>
-</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</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-5507"><a href="#L-5507"><span class="linenos">5507</span></a> <span class="o">...</span>
+</span><span id="L-5500"><a href="#L-5500"><span class="linenos">5500</span></a><span class="sd"> Args:</span>
+</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</span></a><span class="sd"> *expression: the SQL code string to parse.</span>
+</span><span id="L-5502"><a href="#L-5502"><span class="linenos">5502</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5503"><a href="#L-5503"><span class="linenos">5503</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
+</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</span></a><span class="sd"> copy: Whether or not to copy `expression` (only applies to expressions).</span>
+</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-5507"><a href="#L-5507"><span class="linenos">5507</span></a><span class="sd"> that the input expression is a SQL string).</span>
</span><span id="L-5508"><a href="#L-5508"><span class="linenos">5508</span></a>
-</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a>
-</span><span id="L-5510"><a href="#L-5510"><span class="linenos">5510</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span>
-</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a> <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="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-5512"><a href="#L-5512"><span class="linenos">5512</span></a><span class="p">)</span> <span class="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-5513"><a href="#L-5513"><span class="linenos">5513</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</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-5515"><a href="#L-5515"><span class="linenos">5515</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
-</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a>
-</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</span></a><span class="sd"> Args:</span>
-</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
-</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a><span class="sd"> dialect: the source dialect according to which the table name will be parsed.</span>
-</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a><span class="sd"> kwargs: the kwargs to instantiate the resulting `Table` expression with.</span>
-</span><span id="L-5521"><a href="#L-5521"><span class="linenos">5521</span></a>
-</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5523"><a href="#L-5523"><span class="linenos">5523</span></a><span class="sd"> A table expression.</span>
-</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</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-5526"><a href="#L-5526"><span class="linenos">5526</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</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-5528"><a href="#L-5528"><span class="linenos">5528</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-5529"><a href="#L-5529"><span class="linenos">5529</span></a>
-</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_path</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-5531"><a href="#L-5531"><span class="linenos">5531</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a> <span class="n">table</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-5534"><a href="#L-5534"><span class="linenos">5534</span></a>
-</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a>
+</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5510"><a href="#L-5510"><span class="linenos">5510</span></a><span class="sd"> The new Condition instance</span>
+</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5512"><a href="#L-5512"><span class="linenos">5512</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-5513"><a href="#L-5513"><span class="linenos">5513</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
+</span><span id="L-5515"><a href="#L-5515"><span class="linenos">5515</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a> <span class="p">)</span>
+</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a>
+</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a>
+</span><span id="L-5521"><a href="#L-5521"><span class="linenos">5521</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span>
+</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a> <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">Optional</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="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><span id="L-5523"><a href="#L-5523"><span class="linenos">5523</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
+</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
+</span><span id="L-5526"><a href="#L-5526"><span class="linenos">5526</span></a>
+</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</span></a><span class="sd"> Example:</span>
+</span><span id="L-5528"><a href="#L-5528"><span class="linenos">5528</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-5529"><a href="#L-5529"><span class="linenos">5529</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
+</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a>
+</span><span id="L-5531"><a href="#L-5531"><span class="linenos">5531</span></a><span class="sd"> Args:</span>
+</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5534"><a href="#L-5534"><span class="linenos">5534</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
</span><span id="L-5537"><a href="#L-5537"><span class="linenos">5537</span></a>
-</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</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-5539"><a href="#L-5539"><span class="linenos">5539</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
-</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</span></a>
-</span><span id="L-5542"><a href="#L-5542"><span class="linenos">5542</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
+</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5539"><a href="#L-5539"><span class="linenos">5539</span></a><span class="sd"> And: the new condition</span>
+</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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-5542"><a href="#L-5542"><span class="linenos">5542</span></a>
</span><span id="L-5543"><a href="#L-5543"><span class="linenos">5543</span></a>
-</span><span id="L-5544"><a href="#L-5544"><span class="linenos">5544</span></a><span class="sd"> Args:</span>
-</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
-</span><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a><span class="sd"> Table: A column expression</span>
-</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</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-5550"><a href="#L-5550"><span class="linenos">5550</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</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-5552"><a href="#L-5552"><span class="linenos">5552</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-5553"><a href="#L-5553"><span class="linenos">5553</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-5554"><a href="#L-5554"><span class="linenos">5554</span></a>
-</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a>
-</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
-</span><span id="L-5557"><a href="#L-5557"><span class="linenos">5557</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</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-5559"><a href="#L-5559"><span class="linenos">5559</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-5560"><a href="#L-5560"><span class="linenos">5560</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-5561"><a href="#L-5561"><span class="linenos">5561</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-5562"><a href="#L-5562"><span class="linenos">5562</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-5563"><a href="#L-5563"><span class="linenos">5563</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a><span class="p">):</span>
-</span><span id="L-5565"><a href="#L-5565"><span class="linenos">5565</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
+</span><span id="L-5544"><a href="#L-5544"><span class="linenos">5544</span></a><span class="k">def</span> <span class="nf">or_</span><span class="p">(</span>
+</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a> <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">Optional</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="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><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
+</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
+</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</span></a>
+</span><span id="L-5550"><a href="#L-5550"><span class="linenos">5550</span></a><span class="sd"> Example:</span>
+</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</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-5552"><a href="#L-5552"><span class="linenos">5552</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
+</span><span id="L-5553"><a href="#L-5553"><span class="linenos">5553</span></a>
+</span><span id="L-5554"><a href="#L-5554"><span class="linenos">5554</span></a><span class="sd"> Args:</span>
+</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5557"><a href="#L-5557"><span class="linenos">5557</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="L-5559"><a href="#L-5559"><span class="linenos">5559</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5560"><a href="#L-5560"><span class="linenos">5560</span></a>
+</span><span id="L-5561"><a href="#L-5561"><span class="linenos">5561</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5562"><a href="#L-5562"><span class="linenos">5562</span></a><span class="sd"> Or: the new condition</span>
+</span><span id="L-5563"><a href="#L-5563"><span class="linenos">5563</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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-5565"><a href="#L-5565"><span class="linenos">5565</span></a>
</span><span id="L-5566"><a href="#L-5566"><span class="linenos">5566</span></a>
-</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</span></a><span class="sd"> Example:</span>
-</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
-</span><span id="L-5569"><a href="#L-5569"><span class="linenos">5569</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
+</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</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">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="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">Not</span><span class="p">:</span>
+</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5569"><a href="#L-5569"><span class="linenos">5569</span></a><span class="sd"> Wrap a condition with a NOT operator.</span>
</span><span id="L-5570"><a href="#L-5570"><span class="linenos">5570</span></a>
-</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</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-5572"><a href="#L-5572"><span class="linenos">5572</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
-</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a>
-</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</span></a><span class="sd"> Args:</span>
-</span><span id="L-5575"><a href="#L-5575"><span class="linenos">5575</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
-</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a><span class="sd"> special characters it is quoted.</span>
-</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</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-5580"><a href="#L-5580"><span class="linenos">5580</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
-</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5582"><a href="#L-5582"><span class="linenos">5582</span></a><span class="sd"> copy: Whether or not to copy the expression.</span>
-</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</span></a>
-</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</span></a><span class="sd"> Alias: the aliased expression</span>
-</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</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-5590"><a href="#L-5590"><span class="linenos">5590</span></a>
-</span><span id="L-5591"><a href="#L-5591"><span class="linenos">5591</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-5592"><a href="#L-5592"><span class="linenos">5592</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-5593"><a href="#L-5593"><span class="linenos">5593</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-5594"><a href="#L-5594"><span class="linenos">5594</span></a>
-</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a> <span class="k">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-5596"><a href="#L-5596"><span class="linenos">5596</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-5597"><a href="#L-5597"><span class="linenos">5597</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-5598"><a href="#L-5598"><span class="linenos">5598</span></a>
-</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a>
-</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a> <span class="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-5602"><a href="#L-5602"><span class="linenos">5602</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-5603"><a href="#L-5603"><span class="linenos">5603</span></a> <span class="c1"># for the complete Window expression.</span>
-</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</span></a> <span class="c1">#</span>
-</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
+</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</span></a><span class="sd"> Example:</span>
+</span><span id="L-5572"><a href="#L-5572"><span class="linenos">5572</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
+</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</span>
+</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</span></a>
+</span><span id="L-5575"><a href="#L-5575"><span class="linenos">5575</span></a><span class="sd"> Args:</span>
+</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
+</span><span id="L-5580"><a href="#L-5580"><span class="linenos">5580</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a>
+</span><span id="L-5582"><a href="#L-5582"><span class="linenos">5582</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a><span class="sd"> The new condition.</span>
+</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
+</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5590"><a href="#L-5590"><span class="linenos">5590</span></a> <span class="p">)</span>
+</span><span id="L-5591"><a href="#L-5591"><span class="linenos">5591</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-5592"><a href="#L-5592"><span class="linenos">5592</span></a>
+</span><span id="L-5593"><a href="#L-5593"><span class="linenos">5593</span></a>
+</span><span id="L-5594"><a href="#L-5594"><span class="linenos">5594</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">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">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
+</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5596"><a href="#L-5596"><span class="linenos">5596</span></a><span class="sd"> Wrap an expression in parentheses.</span>
+</span><span id="L-5597"><a href="#L-5597"><span class="linenos">5597</span></a>
+</span><span id="L-5598"><a href="#L-5598"><span class="linenos">5598</span></a><span class="sd"> Example:</span>
+</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</span></a><span class="sd"> &gt;&gt;&gt; paren(&quot;5 + 3&quot;).sql()</span>
+</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a><span class="sd"> &#39;(5 + 3)&#39;</span>
+</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a>
+</span><span id="L-5602"><a href="#L-5602"><span class="linenos">5602</span></a><span class="sd"> Args:</span>
+</span><span id="L-5603"><a href="#L-5603"><span class="linenos">5603</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
</span><span id="L-5606"><a href="#L-5606"><span class="linenos">5606</span></a>
-</span><span id="L-5607"><a href="#L-5607"><span class="linenos">5607</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-5608"><a href="#L-5608"><span class="linenos">5608</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-5609"><a href="#L-5609"><span class="linenos">5609</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</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-5607"><a href="#L-5607"><span class="linenos">5607</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5608"><a href="#L-5608"><span class="linenos">5608</span></a><span class="sd"> The wrapped expression.</span>
+</span><span id="L-5609"><a href="#L-5609"><span class="linenos">5609</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</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_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">))</span>
</span><span id="L-5611"><a href="#L-5611"><span class="linenos">5611</span></a>
</span><span id="L-5612"><a href="#L-5612"><span class="linenos">5612</span></a>
-</span><span id="L-5613"><a href="#L-5613"><span class="linenos">5613</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span>
-</span><span id="L-5614"><a href="#L-5614"><span class="linenos">5614</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</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="n">Identifier</span> <span class="o">|</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-5616"><a href="#L-5616"><span class="linenos">5616</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-5617"><a href="#L-5617"><span class="linenos">5617</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a><span class="sd"> Build a subquery expression.</span>
-</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a>
-</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a><span class="sd"> Example:</span>
-</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</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-5624"><a href="#L-5624"><span class="linenos">5624</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
-</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</span></a>
-</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a><span class="sd"> Args:</span>
-</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</span></a><span class="sd"> alias: the alias name to use.</span>
-</span><span id="L-5630"><a href="#L-5630"><span class="linenos">5630</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a>
-</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</span></a><span class="sd"> A new Select instance with the subquery expression included.</span>
-</span><span id="L-5635"><a href="#L-5635"><span class="linenos">5635</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a>
-</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</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-5638"><a href="#L-5638"><span class="linenos">5638</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-5613"><a href="#L-5613"><span class="linenos">5613</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-5614"><a href="#L-5614"><span class="linenos">5614</span></a>
+</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</span></a>
+</span><span id="L-5616"><a href="#L-5616"><span class="linenos">5616</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5617"><a href="#L-5617"><span class="linenos">5617</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="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="kc">None</span><span class="p">:</span>
+</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a> <span class="o">...</span>
+</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a>
+</span><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a>
+</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span>
+</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</span></a> <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="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-5624"><a href="#L-5624"><span class="linenos">5624</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Identifier</span><span class="p">:</span>
+</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</span></a> <span class="o">...</span>
+</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a>
+</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a>
+</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</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 class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
+</span><span id="L-5630"><a href="#L-5630"><span class="linenos">5630</span></a>
+</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a><span class="sd"> Args:</span>
+</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a><span class="sd"> name: The name to turn into an identifier.</span>
+</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
+</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</span></a><span class="sd"> copy: Whether or not to copy a passed in Identefier node.</span>
+</span><span id="L-5635"><a href="#L-5635"><span class="linenos">5635</span></a>
+</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</span></a><span class="sd"> The identifier ast node.</span>
+</span><span id="L-5638"><a href="#L-5638"><span class="linenos">5638</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-5639"><a href="#L-5639"><span class="linenos">5639</span></a>
-</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</span></a>
-</span><span id="L-5641"><a href="#L-5641"><span class="linenos">5641</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
-</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</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-5643"><a href="#L-5643"><span class="linenos">5643</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-5644"><a href="#L-5644"><span class="linenos">5644</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-5645"><a href="#L-5645"><span class="linenos">5645</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-5646"><a href="#L-5646"><span class="linenos">5646</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-5647"><a href="#L-5647"><span class="linenos">5647</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5649"><a href="#L-5649"><span class="linenos">5649</span></a><span class="sd"> Build a Column.</span>
-</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a>
-</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</span></a><span class="sd"> Args:</span>
-</span><span id="L-5652"><a href="#L-5652"><span class="linenos">5652</span></a><span class="sd"> col: Column name.</span>
-</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a><span class="sd"> table: Table name.</span>
-</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</span></a><span class="sd"> db: Database name.</span>
-</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</span></a><span class="sd"> catalog: Catalog name.</span>
-</span><span id="L-5656"><a href="#L-5656"><span class="linenos">5656</span></a><span class="sd"> quoted: Whether to force quotes on the column&#39;s identifiers.</span>
+</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</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-5641"><a href="#L-5641"><span class="linenos">5641</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</span></a>
+</span><span id="L-5643"><a href="#L-5643"><span class="linenos">5643</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-5644"><a href="#L-5644"><span class="linenos">5644</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">maybe_copy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-5645"><a href="#L-5645"><span class="linenos">5645</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-5646"><a href="#L-5646"><span class="linenos">5646</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">Identifier</span><span class="p">(</span>
+</span><span id="L-5647"><a href="#L-5647"><span class="linenos">5647</span></a> <span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</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-5649"><a href="#L-5649"><span class="linenos">5649</span></a> <span class="p">)</span>
+</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</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-5652"><a href="#L-5652"><span class="linenos">5652</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a>
+</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</span></a>
+</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</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-5656"><a href="#L-5656"><span class="linenos">5656</span></a>
</span><span id="L-5657"><a href="#L-5657"><span class="linenos">5657</span></a>
-</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5659"><a href="#L-5659"><span class="linenos">5659</span></a><span class="sd"> The new Column instance.</span>
-</span><span id="L-5660"><a href="#L-5660"><span class="linenos">5660</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5661"><a href="#L-5661"><span class="linenos">5661</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
-</span><span id="L-5662"><a href="#L-5662"><span class="linenos">5662</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-5663"><a href="#L-5663"><span class="linenos">5663</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-5664"><a href="#L-5664"><span class="linenos">5664</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-5665"><a href="#L-5665"><span class="linenos">5665</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-5666"><a href="#L-5666"><span class="linenos">5666</span></a> <span class="p">)</span>
+</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</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-5659"><a href="#L-5659"><span class="linenos">5659</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-5660"><a href="#L-5660"><span class="linenos">5660</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-5661"><a href="#L-5661"><span class="linenos">5661</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-5662"><a href="#L-5662"><span class="linenos">5662</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-5663"><a href="#L-5663"><span class="linenos">5663</span></a>
+</span><span id="L-5664"><a href="#L-5664"><span class="linenos">5664</span></a> <span class="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-5665"><a href="#L-5665"><span class="linenos">5665</span></a>
+</span><span id="L-5666"><a href="#L-5666"><span class="linenos">5666</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-5667"><a href="#L-5667"><span class="linenos">5667</span></a>
-</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</span></a>
-</span><span id="L-5669"><a href="#L-5669"><span class="linenos">5669</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-5670"><a href="#L-5670"><span class="linenos">5670</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
-</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</span></a>
-</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</span></a><span class="sd"> Example:</span>
-</span><span id="L-5673"><a href="#L-5673"><span class="linenos">5673</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
-</span><span id="L-5674"><a href="#L-5674"><span class="linenos">5674</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
+</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</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-5669"><a href="#L-5669"><span class="linenos">5669</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-5670"><a href="#L-5670"><span class="linenos">5670</span></a>
+</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</span></a> <span class="k">return</span> <span class="n">Interval</span><span class="p">(</span>
+</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</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-5673"><a href="#L-5673"><span class="linenos">5673</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-5674"><a href="#L-5674"><span class="linenos">5674</span></a> <span class="p">)</span>
</span><span id="L-5675"><a href="#L-5675"><span class="linenos">5675</span></a>
-</span><span id="L-5676"><a href="#L-5676"><span class="linenos">5676</span></a><span class="sd"> Args:</span>
-</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a><span class="sd"> expression: The expression to cast.</span>
-</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</span></a><span class="sd"> to: The datatype to cast to.</span>
-</span><span id="L-5679"><a href="#L-5679"><span class="linenos">5679</span></a>
-</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5681"><a href="#L-5681"><span class="linenos">5681</span></a><span class="sd"> The new Cast instance.</span>
-</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</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-5684"><a href="#L-5684"><span class="linenos">5684</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-5676"><a href="#L-5676"><span class="linenos">5676</span></a>
+</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</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-5679"><a href="#L-5679"><span class="linenos">5679</span></a> <span class="o">...</span>
+</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</span></a>
+</span><span id="L-5681"><a href="#L-5681"><span class="linenos">5681</span></a>
+</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</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-5684"><a href="#L-5684"><span class="linenos">5684</span></a> <span class="o">...</span>
</span><span id="L-5685"><a href="#L-5685"><span class="linenos">5685</span></a>
</span><span id="L-5686"><a href="#L-5686"><span class="linenos">5686</span></a>
-</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span>
-</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">Identifier</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-5689"><a href="#L-5689"><span class="linenos">5689</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="n">Identifier</span> <span class="o">|</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-5690"><a href="#L-5690"><span class="linenos">5690</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="n">Identifier</span> <span class="o">|</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-5691"><a href="#L-5691"><span class="linenos">5691</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-5692"><a href="#L-5692"><span class="linenos">5692</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="n">Identifier</span> <span class="o">|</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-5693"><a href="#L-5693"><span class="linenos">5693</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
-</span><span id="L-5694"><a href="#L-5694"><span class="linenos">5694</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
-</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a>
-</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</span></a><span class="sd"> Args:</span>
-</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a><span class="sd"> table: Table name.</span>
-</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a><span class="sd"> db: Database name.</span>
-</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a><span class="sd"> catalog: Catalog name.</span>
-</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a><span class="sd"> quote: Whether to force quotes on the table&#39;s identifiers.</span>
-</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a><span class="sd"> alias: Table&#39;s alias.</span>
-</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</span></a>
-</span><span id="L-5703"><a href="#L-5703"><span class="linenos">5703</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</span></a><span class="sd"> The new Table instance.</span>
-</span><span id="L-5705"><a href="#L-5705"><span class="linenos">5705</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5706"><a href="#L-5706"><span class="linenos">5706</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
-</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</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-5708"><a href="#L-5708"><span class="linenos">5708</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-5709"><a href="#L-5709"><span class="linenos">5709</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-5710"><a href="#L-5710"><span class="linenos">5710</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-5711"><a href="#L-5711"><span class="linenos">5711</span></a> <span class="p">)</span>
-</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a>
+</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span>
+</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</span></a> <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="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-5689"><a href="#L-5689"><span class="linenos">5689</span></a><span class="p">)</span> <span class="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-5690"><a href="#L-5690"><span class="linenos">5690</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5691"><a href="#L-5691"><span class="linenos">5691</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-5692"><a href="#L-5692"><span class="linenos">5692</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
+</span><span id="L-5693"><a href="#L-5693"><span class="linenos">5693</span></a>
+</span><span id="L-5694"><a href="#L-5694"><span class="linenos">5694</span></a><span class="sd"> Args:</span>
+</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
+</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</span></a><span class="sd"> dialect: the source dialect according to which the table name will be parsed.</span>
+</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a><span class="sd"> kwargs: the kwargs to instantiate the resulting `Table` expression with.</span>
+</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a>
+</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a><span class="sd"> A table expression.</span>
+</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</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-5703"><a href="#L-5703"><span class="linenos">5703</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</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-5705"><a href="#L-5705"><span class="linenos">5705</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-5706"><a href="#L-5706"><span class="linenos">5706</span></a>
+</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_path</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-5708"><a href="#L-5708"><span class="linenos">5708</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-5709"><a href="#L-5709"><span class="linenos">5709</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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-5710"><a href="#L-5710"><span class="linenos">5710</span></a> <span class="n">table</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-5711"><a href="#L-5711"><span class="linenos">5711</span></a>
+</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a> <span class="k">return</span> <span class="n">table</span>
</span><span id="L-5713"><a href="#L-5713"><span class="linenos">5713</span></a>
-</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
-</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</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-5716"><a href="#L-5716"><span class="linenos">5716</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-5717"><a href="#L-5717"><span class="linenos">5717</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-5718"><a href="#L-5718"><span class="linenos">5718</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
-</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
+</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a>
+</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</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-5716"><a href="#L-5716"><span class="linenos">5716</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5717"><a href="#L-5717"><span class="linenos">5717</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
+</span><span id="L-5718"><a href="#L-5718"><span class="linenos">5718</span></a>
+</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
</span><span id="L-5720"><a href="#L-5720"><span class="linenos">5720</span></a>
-</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a><span class="sd"> Example:</span>
-</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
-</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
-</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a>
-</span><span id="L-5725"><a href="#L-5725"><span class="linenos">5725</span></a><span class="sd"> Args:</span>
-</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
-</span><span id="L-5727"><a href="#L-5727"><span class="linenos">5727</span></a><span class="sd"> alias: optional alias</span>
-</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</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-5729"><a href="#L-5729"><span class="linenos">5729</span></a><span class="sd"> If either are provided then an alias is also required.</span>
-</span><span id="L-5730"><a href="#L-5730"><span class="linenos">5730</span></a>
-</span><span id="L-5731"><a href="#L-5731"><span class="linenos">5731</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a><span class="sd"> Values: the Values expression object</span>
-</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</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-5735"><a href="#L-5735"><span class="linenos">5735</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-5736"><a href="#L-5736"><span class="linenos">5736</span></a>
-</span><span id="L-5737"><a href="#L-5737"><span class="linenos">5737</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
-</span><span id="L-5738"><a href="#L-5738"><span class="linenos">5738</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-5739"><a href="#L-5739"><span class="linenos">5739</span></a> <span class="n">alias</span><span class="o">=</span><span class="p">(</span>
-</span><span id="L-5740"><a href="#L-5740"><span class="linenos">5740</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-5741"><a href="#L-5741"><span class="linenos">5741</span></a> <span class="k">if</span> <span class="n">columns</span>
-</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</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-5743"><a href="#L-5743"><span class="linenos">5743</span></a> <span class="p">),</span>
-</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a> <span class="p">)</span>
-</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a>
-</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a>
-</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</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-5748"><a href="#L-5748"><span class="linenos">5748</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
-</span><span id="L-5749"><a href="#L-5749"><span class="linenos">5749</span></a>
-</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a><span class="sd"> Example:</span>
-</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
-</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a>
-</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
-</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</span></a>
-</span><span id="L-5757"><a href="#L-5757"><span class="linenos">5757</span></a><span class="sd"> Args:</span>
-</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</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-5759"><a href="#L-5759"><span class="linenos">5759</span></a>
-</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a><span class="sd"> The new variable node.</span>
-</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</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-5764"><a href="#L-5764"><span class="linenos">5764</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-5765"><a href="#L-5765"><span class="linenos">5765</span></a>
-</span><span id="L-5766"><a href="#L-5766"><span class="linenos">5766</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-5767"><a href="#L-5767"><span class="linenos">5767</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-5768"><a href="#L-5768"><span class="linenos">5768</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-5769"><a href="#L-5769"><span class="linenos">5769</span></a>
-</span><span id="L-5770"><a href="#L-5770"><span class="linenos">5770</span></a>
-</span><span id="L-5771"><a href="#L-5771"><span class="linenos">5771</span></a><span class="k">def</span> <span class="nf">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-5772"><a href="#L-5772"><span class="linenos">5772</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
-</span><span id="L-5773"><a href="#L-5773"><span class="linenos">5773</span></a>
-</span><span id="L-5774"><a href="#L-5774"><span class="linenos">5774</span></a><span class="sd"> Args:</span>
-</span><span id="L-5775"><a href="#L-5775"><span class="linenos">5775</span></a><span class="sd"> old_name: The old name of the table</span>
-</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a><span class="sd"> new_name: The new name of the table</span>
+</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a><span class="sd"> Args:</span>
+</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
+</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a><span class="sd"> Table: A column expression</span>
+</span><span id="L-5725"><a href="#L-5725"><span class="linenos">5725</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</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-5727"><a href="#L-5727"><span class="linenos">5727</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</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-5729"><a href="#L-5729"><span class="linenos">5729</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-5730"><a href="#L-5730"><span class="linenos">5730</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-5731"><a href="#L-5731"><span class="linenos">5731</span></a>
+</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a>
+</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
+</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5735"><a href="#L-5735"><span class="linenos">5735</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-5736"><a href="#L-5736"><span class="linenos">5736</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-5737"><a href="#L-5737"><span class="linenos">5737</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-5738"><a href="#L-5738"><span class="linenos">5738</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-5739"><a href="#L-5739"><span class="linenos">5739</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-5740"><a href="#L-5740"><span class="linenos">5740</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5741"><a href="#L-5741"><span class="linenos">5741</span></a><span class="p">):</span>
+</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
+</span><span id="L-5743"><a href="#L-5743"><span class="linenos">5743</span></a>
+</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a><span class="sd"> Example:</span>
+</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
+</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
+</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</span></a>
+</span><span id="L-5748"><a href="#L-5748"><span class="linenos">5748</span></a><span class="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-5749"><a href="#L-5749"><span class="linenos">5749</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
+</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a>
+</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</span></a><span class="sd"> Args:</span>
+</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
+</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</span></a><span class="sd"> special characters it is quoted.</span>
+</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</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-5757"><a href="#L-5757"><span class="linenos">5757</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
+</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5759"><a href="#L-5759"><span class="linenos">5759</span></a><span class="sd"> copy: Whether or not to copy the expression.</span>
+</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a>
+</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</span></a><span class="sd"> Alias: the aliased expression</span>
+</span><span id="L-5764"><a href="#L-5764"><span class="linenos">5764</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5765"><a href="#L-5765"><span class="linenos">5765</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="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-5766"><a href="#L-5766"><span class="linenos">5766</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-5767"><a href="#L-5767"><span class="linenos">5767</span></a>
+</span><span id="L-5768"><a href="#L-5768"><span class="linenos">5768</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-5769"><a href="#L-5769"><span class="linenos">5769</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-5770"><a href="#L-5770"><span class="linenos">5770</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-5771"><a href="#L-5771"><span class="linenos">5771</span></a>
+</span><span id="L-5772"><a href="#L-5772"><span class="linenos">5772</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-5773"><a href="#L-5773"><span class="linenos">5773</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-5774"><a href="#L-5774"><span class="linenos">5774</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-5775"><a href="#L-5775"><span class="linenos">5775</span></a>
+</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a> <span class="k">return</span> <span class="n">exp</span>
</span><span id="L-5777"><a href="#L-5777"><span class="linenos">5777</span></a>
-</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5779"><a href="#L-5779"><span class="linenos">5779</span></a><span class="sd"> Alter table expression</span>
-</span><span id="L-5780"><a href="#L-5780"><span class="linenos">5780</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5781"><a href="#L-5781"><span class="linenos">5781</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-5782"><a href="#L-5782"><span class="linenos">5782</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-5783"><a href="#L-5783"><span class="linenos">5783</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
-</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</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-5785"><a href="#L-5785"><span class="linenos">5785</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-5786"><a href="#L-5786"><span class="linenos">5786</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-5787"><a href="#L-5787"><span class="linenos">5787</span></a> <span class="p">],</span>
-</span><span id="L-5788"><a href="#L-5788"><span class="linenos">5788</span></a> <span class="p">)</span>
+</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</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-5779"><a href="#L-5779"><span class="linenos">5779</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-5780"><a href="#L-5780"><span class="linenos">5780</span></a> <span class="c1"># for the complete Window expression.</span>
+</span><span id="L-5781"><a href="#L-5781"><span class="linenos">5781</span></a> <span class="c1">#</span>
+</span><span id="L-5782"><a href="#L-5782"><span class="linenos">5782</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
+</span><span id="L-5783"><a href="#L-5783"><span class="linenos">5783</span></a>
+</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</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-5785"><a href="#L-5785"><span class="linenos">5785</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-5786"><a href="#L-5786"><span class="linenos">5786</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="L-5787"><a href="#L-5787"><span class="linenos">5787</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-5788"><a href="#L-5788"><span class="linenos">5788</span></a>
</span><span id="L-5789"><a href="#L-5789"><span class="linenos">5789</span></a>
-</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a>
-</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</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-5792"><a href="#L-5792"><span class="linenos">5792</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-5793"><a href="#L-5793"><span class="linenos">5793</span></a>
-</span><span id="L-5794"><a href="#L-5794"><span class="linenos">5794</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
-</span><span id="L-5795"><a href="#L-5795"><span class="linenos">5795</span></a>
-</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a><span class="sd"> Args:</span>
-</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a><span class="sd"> value: A python object.</span>
-</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a><span class="sd"> copy: Whether or not to copy `value` (only applies to Expressions and collections).</span>
-</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</span></a>
-</span><span id="L-5800"><a href="#L-5800"><span class="linenos">5800</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5801"><a href="#L-5801"><span class="linenos">5801</span></a><span class="sd"> Expression: the equivalent expression object.</span>
-</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-5804"><a href="#L-5804"><span class="linenos">5804</span></a> <span class="k">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-5805"><a href="#L-5805"><span class="linenos">5805</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-5806"><a href="#L-5806"><span class="linenos">5806</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-5807"><a href="#L-5807"><span class="linenos">5807</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-5808"><a href="#L-5808"><span class="linenos">5808</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-5809"><a href="#L-5809"><span class="linenos">5809</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-5810"><a href="#L-5810"><span class="linenos">5810</span></a> <span class="k">return</span> <span class="n">NULL</span>
-</span><span id="L-5811"><a href="#L-5811"><span class="linenos">5811</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-5812"><a href="#L-5812"><span class="linenos">5812</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-5813"><a href="#L-5813"><span class="linenos">5813</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-5814"><a href="#L-5814"><span class="linenos">5814</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-5815"><a href="#L-5815"><span class="linenos">5815</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-5816"><a href="#L-5816"><span class="linenos">5816</span></a> <span class="p">)</span>
-</span><span id="L-5817"><a href="#L-5817"><span class="linenos">5817</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-5818"><a href="#L-5818"><span class="linenos">5818</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-5819"><a href="#L-5819"><span class="linenos">5819</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-5820"><a href="#L-5820"><span class="linenos">5820</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-5821"><a href="#L-5821"><span class="linenos">5821</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-5822"><a href="#L-5822"><span class="linenos">5822</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-5823"><a href="#L-5823"><span class="linenos">5823</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-5824"><a href="#L-5824"><span class="linenos">5824</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-5825"><a href="#L-5825"><span class="linenos">5825</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-5826"><a href="#L-5826"><span class="linenos">5826</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
-</span><span id="L-5827"><a href="#L-5827"><span class="linenos">5827</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-5828"><a href="#L-5828"><span class="linenos">5828</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-5829"><a href="#L-5829"><span class="linenos">5829</span></a> <span class="p">)</span>
-</span><span id="L-5830"><a href="#L-5830"><span class="linenos">5830</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-5831"><a href="#L-5831"><span class="linenos">5831</span></a>
-</span><span id="L-5832"><a href="#L-5832"><span class="linenos">5832</span></a>
-</span><span id="L-5833"><a href="#L-5833"><span class="linenos">5833</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">Expression</span><span class="p">,</span> <span class="n">fun</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">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5834"><a href="#L-5834"><span class="linenos">5834</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5835"><a href="#L-5835"><span class="linenos">5835</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-5836"><a href="#L-5836"><span class="linenos">5836</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5837"><a href="#L-5837"><span class="linenos">5837</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-5838"><a href="#L-5838"><span class="linenos">5838</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-5839"><a href="#L-5839"><span class="linenos">5839</span></a>
-</span><span id="L-5840"><a href="#L-5840"><span class="linenos">5840</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-5841"><a href="#L-5841"><span class="linenos">5841</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5842"><a href="#L-5842"><span class="linenos">5842</span></a>
-</span><span id="L-5843"><a href="#L-5843"><span class="linenos">5843</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-5844"><a href="#L-5844"><span class="linenos">5844</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-5845"><a href="#L-5845"><span class="linenos">5845</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-5846"><a href="#L-5846"><span class="linenos">5846</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-5847"><a href="#L-5847"><span class="linenos">5847</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-5848"><a href="#L-5848"><span class="linenos">5848</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-5849"><a href="#L-5849"><span class="linenos">5849</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5850"><a href="#L-5850"><span class="linenos">5850</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-5851"><a href="#L-5851"><span class="linenos">5851</span></a>
-</span><span id="L-5852"><a href="#L-5852"><span class="linenos">5852</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-5853"><a href="#L-5853"><span class="linenos">5853</span></a>
-</span><span id="L-5854"><a href="#L-5854"><span class="linenos">5854</span></a>
-</span><span id="L-5855"><a href="#L-5855"><span class="linenos">5855</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 class="n">Expression</span><span class="p">,</span> <span class="n">exclude</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-5856"><a href="#L-5856"><span class="linenos">5856</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5857"><a href="#L-5857"><span class="linenos">5857</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
-</span><span id="L-5858"><a href="#L-5858"><span class="linenos">5858</span></a>
-</span><span id="L-5859"><a href="#L-5859"><span class="linenos">5859</span></a><span class="sd"> Example:</span>
-</span><span id="L-5860"><a href="#L-5860"><span class="linenos">5860</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-5861"><a href="#L-5861"><span class="linenos">5861</span></a><span class="sd"> &gt;&gt;&gt; sorted(column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;)))</span>
-</span><span id="L-5862"><a href="#L-5862"><span class="linenos">5862</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span>
+</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-5792"><a href="#L-5792"><span class="linenos">5792</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="n">Identifier</span> <span class="o">|</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-5793"><a href="#L-5793"><span class="linenos">5793</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-5794"><a href="#L-5794"><span class="linenos">5794</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-5795"><a href="#L-5795"><span class="linenos">5795</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a><span class="sd"> Build a subquery expression.</span>
+</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a>
+</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</span></a><span class="sd"> Example:</span>
+</span><span id="L-5800"><a href="#L-5800"><span class="linenos">5800</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-5801"><a href="#L-5801"><span class="linenos">5801</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
+</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a>
+</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</span></a><span class="sd"> Args:</span>
+</span><span id="L-5804"><a href="#L-5804"><span class="linenos">5804</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="L-5805"><a href="#L-5805"><span class="linenos">5805</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-5806"><a href="#L-5806"><span class="linenos">5806</span></a><span class="sd"> alias: the alias name to use.</span>
+</span><span id="L-5807"><a href="#L-5807"><span class="linenos">5807</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-5808"><a href="#L-5808"><span class="linenos">5808</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-5809"><a href="#L-5809"><span class="linenos">5809</span></a>
+</span><span id="L-5810"><a href="#L-5810"><span class="linenos">5810</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5811"><a href="#L-5811"><span class="linenos">5811</span></a><span class="sd"> A new Select instance with the subquery expression included.</span>
+</span><span id="L-5812"><a href="#L-5812"><span class="linenos">5812</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5813"><a href="#L-5813"><span class="linenos">5813</span></a>
+</span><span id="L-5814"><a href="#L-5814"><span class="linenos">5814</span></a> <span class="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-5815"><a href="#L-5815"><span class="linenos">5815</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-5816"><a href="#L-5816"><span class="linenos">5816</span></a>
+</span><span id="L-5817"><a href="#L-5817"><span class="linenos">5817</span></a>
+</span><span id="L-5818"><a href="#L-5818"><span class="linenos">5818</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
+</span><span id="L-5819"><a href="#L-5819"><span class="linenos">5819</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-5820"><a href="#L-5820"><span class="linenos">5820</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-5821"><a href="#L-5821"><span class="linenos">5821</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-5822"><a href="#L-5822"><span class="linenos">5822</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-5823"><a href="#L-5823"><span class="linenos">5823</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-5824"><a href="#L-5824"><span class="linenos">5824</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="L-5825"><a href="#L-5825"><span class="linenos">5825</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5826"><a href="#L-5826"><span class="linenos">5826</span></a><span class="sd"> Build a Column.</span>
+</span><span id="L-5827"><a href="#L-5827"><span class="linenos">5827</span></a>
+</span><span id="L-5828"><a href="#L-5828"><span class="linenos">5828</span></a><span class="sd"> Args:</span>
+</span><span id="L-5829"><a href="#L-5829"><span class="linenos">5829</span></a><span class="sd"> col: Column name.</span>
+</span><span id="L-5830"><a href="#L-5830"><span class="linenos">5830</span></a><span class="sd"> table: Table name.</span>
+</span><span id="L-5831"><a href="#L-5831"><span class="linenos">5831</span></a><span class="sd"> db: Database name.</span>
+</span><span id="L-5832"><a href="#L-5832"><span class="linenos">5832</span></a><span class="sd"> catalog: Catalog name.</span>
+</span><span id="L-5833"><a href="#L-5833"><span class="linenos">5833</span></a><span class="sd"> quoted: Whether to force quotes on the column&#39;s identifiers.</span>
+</span><span id="L-5834"><a href="#L-5834"><span class="linenos">5834</span></a>
+</span><span id="L-5835"><a href="#L-5835"><span class="linenos">5835</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5836"><a href="#L-5836"><span class="linenos">5836</span></a><span class="sd"> The new Column instance.</span>
+</span><span id="L-5837"><a href="#L-5837"><span class="linenos">5837</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5838"><a href="#L-5838"><span class="linenos">5838</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
+</span><span id="L-5839"><a href="#L-5839"><span class="linenos">5839</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-5840"><a href="#L-5840"><span class="linenos">5840</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-5841"><a href="#L-5841"><span class="linenos">5841</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-5842"><a href="#L-5842"><span class="linenos">5842</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-5843"><a href="#L-5843"><span class="linenos">5843</span></a> <span class="p">)</span>
+</span><span id="L-5844"><a href="#L-5844"><span class="linenos">5844</span></a>
+</span><span id="L-5845"><a href="#L-5845"><span class="linenos">5845</span></a>
+</span><span id="L-5846"><a href="#L-5846"><span class="linenos">5846</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-5847"><a href="#L-5847"><span class="linenos">5847</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
+</span><span id="L-5848"><a href="#L-5848"><span class="linenos">5848</span></a>
+</span><span id="L-5849"><a href="#L-5849"><span class="linenos">5849</span></a><span class="sd"> Example:</span>
+</span><span id="L-5850"><a href="#L-5850"><span class="linenos">5850</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
+</span><span id="L-5851"><a href="#L-5851"><span class="linenos">5851</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
+</span><span id="L-5852"><a href="#L-5852"><span class="linenos">5852</span></a>
+</span><span id="L-5853"><a href="#L-5853"><span class="linenos">5853</span></a><span class="sd"> Args:</span>
+</span><span id="L-5854"><a href="#L-5854"><span class="linenos">5854</span></a><span class="sd"> expression: The expression to cast.</span>
+</span><span id="L-5855"><a href="#L-5855"><span class="linenos">5855</span></a><span class="sd"> to: The datatype to cast to.</span>
+</span><span id="L-5856"><a href="#L-5856"><span class="linenos">5856</span></a>
+</span><span id="L-5857"><a href="#L-5857"><span class="linenos">5857</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5858"><a href="#L-5858"><span class="linenos">5858</span></a><span class="sd"> The new Cast instance.</span>
+</span><span id="L-5859"><a href="#L-5859"><span class="linenos">5859</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5860"><a href="#L-5860"><span class="linenos">5860</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-5861"><a href="#L-5861"><span class="linenos">5861</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-5862"><a href="#L-5862"><span class="linenos">5862</span></a>
</span><span id="L-5863"><a href="#L-5863"><span class="linenos">5863</span></a>
-</span><span id="L-5864"><a href="#L-5864"><span class="linenos">5864</span></a><span class="sd"> Args:</span>
-</span><span id="L-5865"><a href="#L-5865"><span class="linenos">5865</span></a><span class="sd"> expression: expression to find table names.</span>
-</span><span id="L-5866"><a href="#L-5866"><span class="linenos">5866</span></a><span class="sd"> exclude: a table name to exclude</span>
-</span><span id="L-5867"><a href="#L-5867"><span class="linenos">5867</span></a>
-</span><span id="L-5868"><a href="#L-5868"><span class="linenos">5868</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5869"><a href="#L-5869"><span class="linenos">5869</span></a><span class="sd"> A list of unique names.</span>
-</span><span id="L-5870"><a href="#L-5870"><span class="linenos">5870</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5871"><a href="#L-5871"><span class="linenos">5871</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-5872"><a href="#L-5872"><span class="linenos">5872</span></a> <span class="n">table</span>
-</span><span id="L-5873"><a href="#L-5873"><span class="linenos">5873</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</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-5874"><a href="#L-5874"><span class="linenos">5874</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">and</span> <span class="n">table</span> <span class="o">!=</span> <span class="n">exclude</span>
-</span><span id="L-5875"><a href="#L-5875"><span class="linenos">5875</span></a> <span class="p">}</span>
-</span><span id="L-5876"><a href="#L-5876"><span class="linenos">5876</span></a>
-</span><span id="L-5877"><a href="#L-5877"><span class="linenos">5877</span></a>
-</span><span id="L-5878"><a href="#L-5878"><span class="linenos">5878</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="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-5879"><a href="#L-5879"><span class="linenos">5879</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-5880"><a href="#L-5880"><span class="linenos">5880</span></a>
-</span><span id="L-5881"><a href="#L-5881"><span class="linenos">5881</span></a><span class="sd"> Args:</span>
-</span><span id="L-5882"><a href="#L-5882"><span class="linenos">5882</span></a><span class="sd"> table: Table expression node or string.</span>
-</span><span id="L-5883"><a href="#L-5883"><span class="linenos">5883</span></a><span class="sd"> dialect: The dialect to generate the table name for.</span>
-</span><span id="L-5884"><a href="#L-5884"><span class="linenos">5884</span></a>
-</span><span id="L-5885"><a href="#L-5885"><span class="linenos">5885</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5886"><a href="#L-5886"><span class="linenos">5886</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="L-5887"><a href="#L-5887"><span class="linenos">5887</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-5888"><a href="#L-5888"><span class="linenos">5888</span></a><span class="sd"> &#39;a.b.c&#39;</span>
+</span><span id="L-5864"><a href="#L-5864"><span class="linenos">5864</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span>
+</span><span id="L-5865"><a href="#L-5865"><span class="linenos">5865</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">Identifier</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-5866"><a href="#L-5866"><span class="linenos">5866</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="n">Identifier</span> <span class="o">|</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-5867"><a href="#L-5867"><span class="linenos">5867</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="n">Identifier</span> <span class="o">|</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-5868"><a href="#L-5868"><span class="linenos">5868</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-5869"><a href="#L-5869"><span class="linenos">5869</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="n">Identifier</span> <span class="o">|</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-5870"><a href="#L-5870"><span class="linenos">5870</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
+</span><span id="L-5871"><a href="#L-5871"><span class="linenos">5871</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
+</span><span id="L-5872"><a href="#L-5872"><span class="linenos">5872</span></a>
+</span><span id="L-5873"><a href="#L-5873"><span class="linenos">5873</span></a><span class="sd"> Args:</span>
+</span><span id="L-5874"><a href="#L-5874"><span class="linenos">5874</span></a><span class="sd"> table: Table name.</span>
+</span><span id="L-5875"><a href="#L-5875"><span class="linenos">5875</span></a><span class="sd"> db: Database name.</span>
+</span><span id="L-5876"><a href="#L-5876"><span class="linenos">5876</span></a><span class="sd"> catalog: Catalog name.</span>
+</span><span id="L-5877"><a href="#L-5877"><span class="linenos">5877</span></a><span class="sd"> quote: Whether to force quotes on the table&#39;s identifiers.</span>
+</span><span id="L-5878"><a href="#L-5878"><span class="linenos">5878</span></a><span class="sd"> alias: Table&#39;s alias.</span>
+</span><span id="L-5879"><a href="#L-5879"><span class="linenos">5879</span></a>
+</span><span id="L-5880"><a href="#L-5880"><span class="linenos">5880</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5881"><a href="#L-5881"><span class="linenos">5881</span></a><span class="sd"> The new Table instance.</span>
+</span><span id="L-5882"><a href="#L-5882"><span class="linenos">5882</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5883"><a href="#L-5883"><span class="linenos">5883</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
+</span><span id="L-5884"><a href="#L-5884"><span class="linenos">5884</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 class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5885"><a href="#L-5885"><span class="linenos">5885</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 class="k">if</span> <span class="n">db</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5886"><a href="#L-5886"><span class="linenos">5886</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 class="k">if</span> <span class="n">catalog</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5887"><a href="#L-5887"><span class="linenos">5887</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-5888"><a href="#L-5888"><span class="linenos">5888</span></a> <span class="p">)</span>
</span><span id="L-5889"><a href="#L-5889"><span class="linenos">5889</span></a>
-</span><span id="L-5890"><a href="#L-5890"><span class="linenos">5890</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5891"><a href="#L-5891"><span class="linenos">5891</span></a><span class="sd"> The table name.</span>
-</span><span id="L-5892"><a href="#L-5892"><span class="linenos">5892</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5893"><a href="#L-5893"><span class="linenos">5893</span></a>
-</span><span id="L-5894"><a href="#L-5894"><span class="linenos">5894</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-5895"><a href="#L-5895"><span class="linenos">5895</span></a>
-</span><span id="L-5896"><a href="#L-5896"><span class="linenos">5896</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-5897"><a href="#L-5897"><span class="linenos">5897</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-5898"><a href="#L-5898"><span class="linenos">5898</span></a>
-</span><span id="L-5899"><a href="#L-5899"><span class="linenos">5899</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-5900"><a href="#L-5900"><span class="linenos">5900</span></a> <span class="n">part</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="n">dialect</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5901"><a href="#L-5901"><span class="linenos">5901</span></a> <span class="k">if</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">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-5902"><a href="#L-5902"><span class="linenos">5902</span></a> <span class="k">else</span> <span class="n">part</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-5903"><a href="#L-5903"><span class="linenos">5903</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span>
-</span><span id="L-5904"><a href="#L-5904"><span class="linenos">5904</span></a> <span class="p">)</span>
-</span><span id="L-5905"><a href="#L-5905"><span class="linenos">5905</span></a>
-</span><span id="L-5906"><a href="#L-5906"><span class="linenos">5906</span></a>
-</span><span id="L-5907"><a href="#L-5907"><span class="linenos">5907</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">E</span><span class="p">,</span> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">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="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">E</span><span class="p">:</span>
-</span><span id="L-5908"><a href="#L-5908"><span class="linenos">5908</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-5909"><a href="#L-5909"><span class="linenos">5909</span></a>
-</span><span id="L-5910"><a href="#L-5910"><span class="linenos">5910</span></a><span class="sd"> Args:</span>
-</span><span id="L-5911"><a href="#L-5911"><span class="linenos">5911</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
-</span><span id="L-5912"><a href="#L-5912"><span class="linenos">5912</span></a><span class="sd"> mapping: mapping of table names.</span>
-</span><span id="L-5913"><a href="#L-5913"><span class="linenos">5913</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="L-5914"><a href="#L-5914"><span class="linenos">5914</span></a>
-</span><span id="L-5915"><a href="#L-5915"><span class="linenos">5915</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5916"><a href="#L-5916"><span class="linenos">5916</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="L-5917"><a href="#L-5917"><span class="linenos">5917</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-5918"><a href="#L-5918"><span class="linenos">5918</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
-</span><span id="L-5919"><a href="#L-5919"><span class="linenos">5919</span></a>
-</span><span id="L-5920"><a href="#L-5920"><span class="linenos">5920</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5921"><a href="#L-5921"><span class="linenos">5921</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="L-5922"><a href="#L-5922"><span class="linenos">5922</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5890"><a href="#L-5890"><span class="linenos">5890</span></a>
+</span><span id="L-5891"><a href="#L-5891"><span class="linenos">5891</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
+</span><span id="L-5892"><a href="#L-5892"><span class="linenos">5892</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-5893"><a href="#L-5893"><span class="linenos">5893</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-5894"><a href="#L-5894"><span class="linenos">5894</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-5895"><a href="#L-5895"><span class="linenos">5895</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
+</span><span id="L-5896"><a href="#L-5896"><span class="linenos">5896</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
+</span><span id="L-5897"><a href="#L-5897"><span class="linenos">5897</span></a>
+</span><span id="L-5898"><a href="#L-5898"><span class="linenos">5898</span></a><span class="sd"> Example:</span>
+</span><span id="L-5899"><a href="#L-5899"><span class="linenos">5899</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
+</span><span id="L-5900"><a href="#L-5900"><span class="linenos">5900</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
+</span><span id="L-5901"><a href="#L-5901"><span class="linenos">5901</span></a>
+</span><span id="L-5902"><a href="#L-5902"><span class="linenos">5902</span></a><span class="sd"> Args:</span>
+</span><span id="L-5903"><a href="#L-5903"><span class="linenos">5903</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
+</span><span id="L-5904"><a href="#L-5904"><span class="linenos">5904</span></a><span class="sd"> alias: optional alias</span>
+</span><span id="L-5905"><a href="#L-5905"><span class="linenos">5905</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-5906"><a href="#L-5906"><span class="linenos">5906</span></a><span class="sd"> If either are provided then an alias is also required.</span>
+</span><span id="L-5907"><a href="#L-5907"><span class="linenos">5907</span></a>
+</span><span id="L-5908"><a href="#L-5908"><span class="linenos">5908</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5909"><a href="#L-5909"><span class="linenos">5909</span></a><span class="sd"> Values: the Values expression object</span>
+</span><span id="L-5910"><a href="#L-5910"><span class="linenos">5910</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5911"><a href="#L-5911"><span class="linenos">5911</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-5912"><a href="#L-5912"><span class="linenos">5912</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-5913"><a href="#L-5913"><span class="linenos">5913</span></a>
+</span><span id="L-5914"><a href="#L-5914"><span class="linenos">5914</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
+</span><span id="L-5915"><a href="#L-5915"><span class="linenos">5915</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-5916"><a href="#L-5916"><span class="linenos">5916</span></a> <span class="n">alias</span><span class="o">=</span><span class="p">(</span>
+</span><span id="L-5917"><a href="#L-5917"><span class="linenos">5917</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-5918"><a href="#L-5918"><span class="linenos">5918</span></a> <span class="k">if</span> <span class="n">columns</span>
+</span><span id="L-5919"><a href="#L-5919"><span class="linenos">5919</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-5920"><a href="#L-5920"><span class="linenos">5920</span></a> <span class="p">),</span>
+</span><span id="L-5921"><a href="#L-5921"><span class="linenos">5921</span></a> <span class="p">)</span>
+</span><span id="L-5922"><a href="#L-5922"><span class="linenos">5922</span></a>
</span><span id="L-5923"><a href="#L-5923"><span class="linenos">5923</span></a>
-</span><span id="L-5924"><a href="#L-5924"><span class="linenos">5924</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 class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5925"><a href="#L-5925"><span class="linenos">5925</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-5926"><a href="#L-5926"><span class="linenos">5926</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-5927"><a href="#L-5927"><span class="linenos">5927</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="L-5928"><a href="#L-5928"><span class="linenos">5928</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
-</span><span id="L-5929"><a href="#L-5929"><span class="linenos">5929</span></a> <span class="n">new_name</span><span class="p">,</span>
-</span><span id="L-5930"><a href="#L-5930"><span class="linenos">5930</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-5931"><a href="#L-5931"><span class="linenos">5931</span></a> <span class="p">)</span>
-</span><span id="L-5932"><a href="#L-5932"><span class="linenos">5932</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5924"><a href="#L-5924"><span class="linenos">5924</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-5925"><a href="#L-5925"><span class="linenos">5925</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
+</span><span id="L-5926"><a href="#L-5926"><span class="linenos">5926</span></a>
+</span><span id="L-5927"><a href="#L-5927"><span class="linenos">5927</span></a><span class="sd"> Example:</span>
+</span><span id="L-5928"><a href="#L-5928"><span class="linenos">5928</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
+</span><span id="L-5929"><a href="#L-5929"><span class="linenos">5929</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
+</span><span id="L-5930"><a href="#L-5930"><span class="linenos">5930</span></a>
+</span><span id="L-5931"><a href="#L-5931"><span class="linenos">5931</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
+</span><span id="L-5932"><a href="#L-5932"><span class="linenos">5932</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
</span><span id="L-5933"><a href="#L-5933"><span class="linenos">5933</span></a>
-</span><span id="L-5934"><a href="#L-5934"><span class="linenos">5934</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 class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
-</span><span id="L-5935"><a href="#L-5935"><span class="linenos">5935</span></a>
+</span><span id="L-5934"><a href="#L-5934"><span class="linenos">5934</span></a><span class="sd"> Args:</span>
+</span><span id="L-5935"><a href="#L-5935"><span class="linenos">5935</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-5936"><a href="#L-5936"><span class="linenos">5936</span></a>
-</span><span id="L-5937"><a href="#L-5937"><span class="linenos">5937</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="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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5938"><a href="#L-5938"><span class="linenos">5938</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
-</span><span id="L-5939"><a href="#L-5939"><span class="linenos">5939</span></a>
-</span><span id="L-5940"><a href="#L-5940"><span class="linenos">5940</span></a><span class="sd"> Args:</span>
-</span><span id="L-5941"><a href="#L-5941"><span class="linenos">5941</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
-</span><span id="L-5942"><a href="#L-5942"><span class="linenos">5942</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
-</span><span id="L-5943"><a href="#L-5943"><span class="linenos">5943</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
-</span><span id="L-5944"><a href="#L-5944"><span class="linenos">5944</span></a>
-</span><span id="L-5945"><a href="#L-5945"><span class="linenos">5945</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5946"><a href="#L-5946"><span class="linenos">5946</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="L-5947"><a href="#L-5947"><span class="linenos">5947</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
-</span><span id="L-5948"><a href="#L-5948"><span class="linenos">5948</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
-</span><span id="L-5949"><a href="#L-5949"><span class="linenos">5949</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-5950"><a href="#L-5950"><span class="linenos">5950</span></a><span class="sd"> ... ).sql()</span>
-</span><span id="L-5951"><a href="#L-5951"><span class="linenos">5951</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
-</span><span id="L-5952"><a href="#L-5952"><span class="linenos">5952</span></a>
-</span><span id="L-5953"><a href="#L-5953"><span class="linenos">5953</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5954"><a href="#L-5954"><span class="linenos">5954</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="L-5955"><a href="#L-5955"><span class="linenos">5955</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5956"><a href="#L-5956"><span class="linenos">5956</span></a>
-</span><span id="L-5957"><a href="#L-5957"><span class="linenos">5957</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">Expression</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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5958"><a href="#L-5958"><span class="linenos">5958</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-5959"><a href="#L-5959"><span class="linenos">5959</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-5960"><a href="#L-5960"><span class="linenos">5960</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-5961"><a href="#L-5961"><span class="linenos">5961</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="L-5962"><a href="#L-5962"><span class="linenos">5962</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-5963"><a href="#L-5963"><span class="linenos">5963</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5964"><a href="#L-5964"><span class="linenos">5964</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-5965"><a href="#L-5965"><span class="linenos">5965</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-5966"><a href="#L-5966"><span class="linenos">5966</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="L-5967"><a href="#L-5967"><span class="linenos">5967</span></a> <span class="k">pass</span>
-</span><span id="L-5968"><a href="#L-5968"><span class="linenos">5968</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-5969"><a href="#L-5969"><span class="linenos">5969</span></a>
-</span><span id="L-5970"><a href="#L-5970"><span class="linenos">5970</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-5971"><a href="#L-5971"><span class="linenos">5971</span></a>
+</span><span id="L-5937"><a href="#L-5937"><span class="linenos">5937</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5938"><a href="#L-5938"><span class="linenos">5938</span></a><span class="sd"> The new variable node.</span>
+</span><span id="L-5939"><a href="#L-5939"><span class="linenos">5939</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5940"><a href="#L-5940"><span class="linenos">5940</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-5941"><a href="#L-5941"><span class="linenos">5941</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-5942"><a href="#L-5942"><span class="linenos">5942</span></a>
+</span><span id="L-5943"><a href="#L-5943"><span class="linenos">5943</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-5944"><a href="#L-5944"><span class="linenos">5944</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-5945"><a href="#L-5945"><span class="linenos">5945</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-5946"><a href="#L-5946"><span class="linenos">5946</span></a>
+</span><span id="L-5947"><a href="#L-5947"><span class="linenos">5947</span></a>
+</span><span id="L-5948"><a href="#L-5948"><span class="linenos">5948</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-5949"><a href="#L-5949"><span class="linenos">5949</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
+</span><span id="L-5950"><a href="#L-5950"><span class="linenos">5950</span></a>
+</span><span id="L-5951"><a href="#L-5951"><span class="linenos">5951</span></a><span class="sd"> Args:</span>
+</span><span id="L-5952"><a href="#L-5952"><span class="linenos">5952</span></a><span class="sd"> old_name: The old name of the table</span>
+</span><span id="L-5953"><a href="#L-5953"><span class="linenos">5953</span></a><span class="sd"> new_name: The new name of the table</span>
+</span><span id="L-5954"><a href="#L-5954"><span class="linenos">5954</span></a>
+</span><span id="L-5955"><a href="#L-5955"><span class="linenos">5955</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5956"><a href="#L-5956"><span class="linenos">5956</span></a><span class="sd"> Alter table expression</span>
+</span><span id="L-5957"><a href="#L-5957"><span class="linenos">5957</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5958"><a href="#L-5958"><span class="linenos">5958</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-5959"><a href="#L-5959"><span class="linenos">5959</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-5960"><a href="#L-5960"><span class="linenos">5960</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
+</span><span id="L-5961"><a href="#L-5961"><span class="linenos">5961</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-5962"><a href="#L-5962"><span class="linenos">5962</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-5963"><a href="#L-5963"><span class="linenos">5963</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-5964"><a href="#L-5964"><span class="linenos">5964</span></a> <span class="p">],</span>
+</span><span id="L-5965"><a href="#L-5965"><span class="linenos">5965</span></a> <span class="p">)</span>
+</span><span id="L-5966"><a href="#L-5966"><span class="linenos">5966</span></a>
+</span><span id="L-5967"><a href="#L-5967"><span class="linenos">5967</span></a>
+</span><span id="L-5968"><a href="#L-5968"><span class="linenos">5968</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-5969"><a href="#L-5969"><span class="linenos">5969</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-5970"><a href="#L-5970"><span class="linenos">5970</span></a>
+</span><span id="L-5971"><a href="#L-5971"><span class="linenos">5971</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
</span><span id="L-5972"><a href="#L-5972"><span class="linenos">5972</span></a>
-</span><span id="L-5973"><a href="#L-5973"><span class="linenos">5973</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
-</span><span id="L-5974"><a href="#L-5974"><span class="linenos">5974</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-5975"><a href="#L-5975"><span class="linenos">5975</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5976"><a href="#L-5976"><span class="linenos">5976</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-5977"><a href="#L-5977"><span class="linenos">5977</span></a>
-</span><span id="L-5978"><a href="#L-5978"><span class="linenos">5978</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5979"><a href="#L-5979"><span class="linenos">5979</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="L-5980"><a href="#L-5980"><span class="linenos">5980</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-5981"><a href="#L-5981"><span class="linenos">5981</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
-</span><span id="L-5982"><a href="#L-5982"><span class="linenos">5982</span></a>
-</span><span id="L-5983"><a href="#L-5983"><span class="linenos">5983</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-5984"><a href="#L-5984"><span class="linenos">5984</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-5985"><a href="#L-5985"><span class="linenos">5985</span></a>
-</span><span id="L-5986"><a href="#L-5986"><span class="linenos">5986</span></a><span class="sd"> Args:</span>
-</span><span id="L-5987"><a href="#L-5987"><span class="linenos">5987</span></a><span class="sd"> expression: The expression to expand.</span>
-</span><span id="L-5988"><a href="#L-5988"><span class="linenos">5988</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
-</span><span id="L-5989"><a href="#L-5989"><span class="linenos">5989</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
-</span><span id="L-5990"><a href="#L-5990"><span class="linenos">5990</span></a>
-</span><span id="L-5991"><a href="#L-5991"><span class="linenos">5991</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5992"><a href="#L-5992"><span class="linenos">5992</span></a><span class="sd"> The transformed expression.</span>
-</span><span id="L-5993"><a href="#L-5993"><span class="linenos">5993</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5994"><a href="#L-5994"><span class="linenos">5994</span></a>
-</span><span id="L-5995"><a href="#L-5995"><span class="linenos">5995</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-5996"><a href="#L-5996"><span class="linenos">5996</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-5997"><a href="#L-5997"><span class="linenos">5997</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-5998"><a href="#L-5998"><span class="linenos">5998</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-5999"><a href="#L-5999"><span class="linenos">5999</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
-</span><span id="L-6000"><a href="#L-6000"><span class="linenos">6000</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-6001"><a href="#L-6001"><span class="linenos">6001</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-6002"><a href="#L-6002"><span class="linenos">6002</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-6003"><a href="#L-6003"><span class="linenos">6003</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-6004"><a href="#L-6004"><span class="linenos">6004</span></a>
-</span><span id="L-6005"><a href="#L-6005"><span class="linenos">6005</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-6006"><a href="#L-6006"><span class="linenos">6006</span></a>
-</span><span id="L-6007"><a href="#L-6007"><span class="linenos">6007</span></a>
-</span><span id="L-6008"><a href="#L-6008"><span class="linenos">6008</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-6009"><a href="#L-6009"><span class="linenos">6009</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-6010"><a href="#L-6010"><span class="linenos">6010</span></a><span class="sd"> Returns a Func expression.</span>
-</span><span id="L-6011"><a href="#L-6011"><span class="linenos">6011</span></a>
-</span><span id="L-6012"><a href="#L-6012"><span class="linenos">6012</span></a><span class="sd"> Examples:</span>
-</span><span id="L-6013"><a href="#L-6013"><span class="linenos">6013</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
-</span><span id="L-6014"><a href="#L-6014"><span class="linenos">6014</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
-</span><span id="L-6015"><a href="#L-6015"><span class="linenos">6015</span></a>
-</span><span id="L-6016"><a href="#L-6016"><span class="linenos">6016</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-6017"><a href="#L-6017"><span class="linenos">6017</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
-</span><span id="L-6018"><a href="#L-6018"><span class="linenos">6018</span></a>
-</span><span id="L-6019"><a href="#L-6019"><span class="linenos">6019</span></a><span class="sd"> Args:</span>
-</span><span id="L-6020"><a href="#L-6020"><span class="linenos">6020</span></a><span class="sd"> name: the name of the function to build.</span>
-</span><span id="L-6021"><a href="#L-6021"><span class="linenos">6021</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
-</span><span id="L-6022"><a href="#L-6022"><span class="linenos">6022</span></a><span class="sd"> dialect: the source dialect.</span>
-</span><span id="L-6023"><a href="#L-6023"><span class="linenos">6023</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
-</span><span id="L-6024"><a href="#L-6024"><span class="linenos">6024</span></a>
-</span><span id="L-6025"><a href="#L-6025"><span class="linenos">6025</span></a><span class="sd"> Note:</span>
-</span><span id="L-6026"><a href="#L-6026"><span class="linenos">6026</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
-</span><span id="L-6027"><a href="#L-6027"><span class="linenos">6027</span></a>
-</span><span id="L-6028"><a href="#L-6028"><span class="linenos">6028</span></a><span class="sd"> Returns:</span>
-</span><span id="L-6029"><a href="#L-6029"><span class="linenos">6029</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-6030"><a href="#L-6030"><span class="linenos">6030</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
-</span><span id="L-6031"><a href="#L-6031"><span class="linenos">6031</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-6032"><a href="#L-6032"><span class="linenos">6032</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-6033"><a href="#L-6033"><span class="linenos">6033</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-6034"><a href="#L-6034"><span class="linenos">6034</span></a>
-</span><span id="L-6035"><a href="#L-6035"><span class="linenos">6035</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-6036"><a href="#L-6036"><span class="linenos">6036</span></a>
-</span><span id="L-6037"><a href="#L-6037"><span class="linenos">6037</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-6038"><a href="#L-6038"><span class="linenos">6038</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-6039"><a href="#L-6039"><span class="linenos">6039</span></a>
-</span><span id="L-6040"><a href="#L-6040"><span class="linenos">6040</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-6041"><a href="#L-6041"><span class="linenos">6041</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-6042"><a href="#L-6042"><span class="linenos">6042</span></a>
-</span><span id="L-6043"><a href="#L-6043"><span class="linenos">6043</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
-</span><span id="L-6044"><a href="#L-6044"><span class="linenos">6044</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-6045"><a href="#L-6045"><span class="linenos">6045</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-6046"><a href="#L-6046"><span class="linenos">6046</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-6047"><a href="#L-6047"><span class="linenos">6047</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-6048"><a href="#L-6048"><span class="linenos">6048</span></a>
-</span><span id="L-6049"><a href="#L-6049"><span class="linenos">6049</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-6050"><a href="#L-6050"><span class="linenos">6050</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-6051"><a href="#L-6051"><span class="linenos">6051</span></a>
-</span><span id="L-6052"><a href="#L-6052"><span class="linenos">6052</span></a> <span class="k">return</span> <span class="n">function</span>
+</span><span id="L-5973"><a href="#L-5973"><span class="linenos">5973</span></a><span class="sd"> Args:</span>
+</span><span id="L-5974"><a href="#L-5974"><span class="linenos">5974</span></a><span class="sd"> value: A python object.</span>
+</span><span id="L-5975"><a href="#L-5975"><span class="linenos">5975</span></a><span class="sd"> copy: Whether or not to copy `value` (only applies to Expressions and collections).</span>
+</span><span id="L-5976"><a href="#L-5976"><span class="linenos">5976</span></a>
+</span><span id="L-5977"><a href="#L-5977"><span class="linenos">5977</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5978"><a href="#L-5978"><span class="linenos">5978</span></a><span class="sd"> Expression: the equivalent expression object.</span>
+</span><span id="L-5979"><a href="#L-5979"><span class="linenos">5979</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5980"><a href="#L-5980"><span class="linenos">5980</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-5981"><a href="#L-5981"><span class="linenos">5981</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-5982"><a href="#L-5982"><span class="linenos">5982</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-5983"><a href="#L-5983"><span class="linenos">5983</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-5984"><a href="#L-5984"><span class="linenos">5984</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-5985"><a href="#L-5985"><span class="linenos">5985</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-5986"><a href="#L-5986"><span class="linenos">5986</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-5987"><a href="#L-5987"><span class="linenos">5987</span></a> <span class="k">return</span> <span class="n">NULL</span>
+</span><span id="L-5988"><a href="#L-5988"><span class="linenos">5988</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-5989"><a href="#L-5989"><span class="linenos">5989</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-5990"><a href="#L-5990"><span class="linenos">5990</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-5991"><a href="#L-5991"><span class="linenos">5991</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-5992"><a href="#L-5992"><span class="linenos">5992</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-5993"><a href="#L-5993"><span class="linenos">5993</span></a> <span class="p">)</span>
+</span><span id="L-5994"><a href="#L-5994"><span class="linenos">5994</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-5995"><a href="#L-5995"><span class="linenos">5995</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-5996"><a href="#L-5996"><span class="linenos">5996</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-5997"><a href="#L-5997"><span class="linenos">5997</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-5998"><a href="#L-5998"><span class="linenos">5998</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-5999"><a href="#L-5999"><span class="linenos">5999</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-6000"><a href="#L-6000"><span class="linenos">6000</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-6001"><a href="#L-6001"><span class="linenos">6001</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-6002"><a href="#L-6002"><span class="linenos">6002</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-6003"><a href="#L-6003"><span class="linenos">6003</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
+</span><span id="L-6004"><a href="#L-6004"><span class="linenos">6004</span></a> <span class="n">keys</span><span class="o">=</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">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-6005"><a href="#L-6005"><span class="linenos">6005</span></a> <span class="n">values</span><span class="o">=</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">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-6006"><a href="#L-6006"><span class="linenos">6006</span></a> <span class="p">)</span>
+</span><span id="L-6007"><a href="#L-6007"><span class="linenos">6007</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-6008"><a href="#L-6008"><span class="linenos">6008</span></a>
+</span><span id="L-6009"><a href="#L-6009"><span class="linenos">6009</span></a>
+</span><span id="L-6010"><a href="#L-6010"><span class="linenos">6010</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">Expression</span><span class="p">,</span> <span class="n">fun</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">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-6011"><a href="#L-6011"><span class="linenos">6011</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6012"><a href="#L-6012"><span class="linenos">6012</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-6013"><a href="#L-6013"><span class="linenos">6013</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6014"><a href="#L-6014"><span class="linenos">6014</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-6015"><a href="#L-6015"><span class="linenos">6015</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-6016"><a href="#L-6016"><span class="linenos">6016</span></a>
+</span><span id="L-6017"><a href="#L-6017"><span class="linenos">6017</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-6018"><a href="#L-6018"><span class="linenos">6018</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-6019"><a href="#L-6019"><span class="linenos">6019</span></a>
+</span><span id="L-6020"><a href="#L-6020"><span class="linenos">6020</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-6021"><a href="#L-6021"><span class="linenos">6021</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-6022"><a href="#L-6022"><span class="linenos">6022</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-6023"><a href="#L-6023"><span class="linenos">6023</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-6024"><a href="#L-6024"><span class="linenos">6024</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-6025"><a href="#L-6025"><span class="linenos">6025</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-6026"><a href="#L-6026"><span class="linenos">6026</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-6027"><a href="#L-6027"><span class="linenos">6027</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-6028"><a href="#L-6028"><span class="linenos">6028</span></a>
+</span><span id="L-6029"><a href="#L-6029"><span class="linenos">6029</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-6030"><a href="#L-6030"><span class="linenos">6030</span></a>
+</span><span id="L-6031"><a href="#L-6031"><span class="linenos">6031</span></a>
+</span><span id="L-6032"><a href="#L-6032"><span class="linenos">6032</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 class="n">Expression</span><span class="p">,</span> <span class="n">exclude</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-6033"><a href="#L-6033"><span class="linenos">6033</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6034"><a href="#L-6034"><span class="linenos">6034</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
+</span><span id="L-6035"><a href="#L-6035"><span class="linenos">6035</span></a>
+</span><span id="L-6036"><a href="#L-6036"><span class="linenos">6036</span></a><span class="sd"> Example:</span>
+</span><span id="L-6037"><a href="#L-6037"><span class="linenos">6037</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-6038"><a href="#L-6038"><span class="linenos">6038</span></a><span class="sd"> &gt;&gt;&gt; sorted(column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;)))</span>
+</span><span id="L-6039"><a href="#L-6039"><span class="linenos">6039</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</span><span id="L-6040"><a href="#L-6040"><span class="linenos">6040</span></a>
+</span><span id="L-6041"><a href="#L-6041"><span class="linenos">6041</span></a><span class="sd"> Args:</span>
+</span><span id="L-6042"><a href="#L-6042"><span class="linenos">6042</span></a><span class="sd"> expression: expression to find table names.</span>
+</span><span id="L-6043"><a href="#L-6043"><span class="linenos">6043</span></a><span class="sd"> exclude: a table name to exclude</span>
+</span><span id="L-6044"><a href="#L-6044"><span class="linenos">6044</span></a>
+</span><span id="L-6045"><a href="#L-6045"><span class="linenos">6045</span></a><span class="sd"> Returns:</span>
+</span><span id="L-6046"><a href="#L-6046"><span class="linenos">6046</span></a><span class="sd"> A list of unique names.</span>
+</span><span id="L-6047"><a href="#L-6047"><span class="linenos">6047</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6048"><a href="#L-6048"><span class="linenos">6048</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-6049"><a href="#L-6049"><span class="linenos">6049</span></a> <span class="n">table</span>
+</span><span id="L-6050"><a href="#L-6050"><span class="linenos">6050</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</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-6051"><a href="#L-6051"><span class="linenos">6051</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">and</span> <span class="n">table</span> <span class="o">!=</span> <span class="n">exclude</span>
+</span><span id="L-6052"><a href="#L-6052"><span class="linenos">6052</span></a> <span class="p">}</span>
</span><span id="L-6053"><a href="#L-6053"><span class="linenos">6053</span></a>
</span><span id="L-6054"><a href="#L-6054"><span class="linenos">6054</span></a>
-</span><span id="L-6055"><a href="#L-6055"><span class="linenos">6055</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
-</span><span id="L-6056"><a href="#L-6056"><span class="linenos">6056</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-6057"><a href="#L-6057"><span class="linenos">6057</span></a><span class="sd"> Returns a true Boolean expression.</span>
-</span><span id="L-6058"><a href="#L-6058"><span class="linenos">6058</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-6059"><a href="#L-6059"><span class="linenos">6059</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-6060"><a href="#L-6060"><span class="linenos">6060</span></a>
+</span><span id="L-6055"><a href="#L-6055"><span class="linenos">6055</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="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-6056"><a href="#L-6056"><span class="linenos">6056</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-6057"><a href="#L-6057"><span class="linenos">6057</span></a>
+</span><span id="L-6058"><a href="#L-6058"><span class="linenos">6058</span></a><span class="sd"> Args:</span>
+</span><span id="L-6059"><a href="#L-6059"><span class="linenos">6059</span></a><span class="sd"> table: Table expression node or string.</span>
+</span><span id="L-6060"><a href="#L-6060"><span class="linenos">6060</span></a><span class="sd"> dialect: The dialect to generate the table name for.</span>
</span><span id="L-6061"><a href="#L-6061"><span class="linenos">6061</span></a>
-</span><span id="L-6062"><a href="#L-6062"><span class="linenos">6062</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
-</span><span id="L-6063"><a href="#L-6063"><span class="linenos">6063</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-6064"><a href="#L-6064"><span class="linenos">6064</span></a><span class="sd"> Returns a false Boolean expression.</span>
-</span><span id="L-6065"><a href="#L-6065"><span class="linenos">6065</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-6066"><a href="#L-6066"><span class="linenos">6066</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-6067"><a href="#L-6067"><span class="linenos">6067</span></a>
-</span><span id="L-6068"><a href="#L-6068"><span class="linenos">6068</span></a>
-</span><span id="L-6069"><a href="#L-6069"><span class="linenos">6069</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Null</span><span class="p">:</span>
-</span><span id="L-6070"><a href="#L-6070"><span class="linenos">6070</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-6071"><a href="#L-6071"><span class="linenos">6071</span></a><span class="sd"> Returns a Null expression.</span>
-</span><span id="L-6072"><a href="#L-6072"><span class="linenos">6072</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-6073"><a href="#L-6073"><span class="linenos">6073</span></a> <span class="k">return</span> <span class="n">Null</span><span class="p">()</span>
-</span><span id="L-6074"><a href="#L-6074"><span class="linenos">6074</span></a>
+</span><span id="L-6062"><a href="#L-6062"><span class="linenos">6062</span></a><span class="sd"> Examples:</span>
+</span><span id="L-6063"><a href="#L-6063"><span class="linenos">6063</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="L-6064"><a href="#L-6064"><span class="linenos">6064</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-6065"><a href="#L-6065"><span class="linenos">6065</span></a><span class="sd"> &#39;a.b.c&#39;</span>
+</span><span id="L-6066"><a href="#L-6066"><span class="linenos">6066</span></a>
+</span><span id="L-6067"><a href="#L-6067"><span class="linenos">6067</span></a><span class="sd"> Returns:</span>
+</span><span id="L-6068"><a href="#L-6068"><span class="linenos">6068</span></a><span class="sd"> The table name.</span>
+</span><span id="L-6069"><a href="#L-6069"><span class="linenos">6069</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6070"><a href="#L-6070"><span class="linenos">6070</span></a>
+</span><span id="L-6071"><a href="#L-6071"><span class="linenos">6071</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-6072"><a href="#L-6072"><span class="linenos">6072</span></a>
+</span><span id="L-6073"><a href="#L-6073"><span class="linenos">6073</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-6074"><a href="#L-6074"><span class="linenos">6074</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-6075"><a href="#L-6075"><span class="linenos">6075</span></a>
-</span><span id="L-6076"><a href="#L-6076"><span class="linenos">6076</span></a><span class="c1"># TODO: deprecate this</span>
-</span><span id="L-6077"><a href="#L-6077"><span class="linenos">6077</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-6078"><a href="#L-6078"><span class="linenos">6078</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-6079"><a href="#L-6079"><span class="linenos">6079</span></a><span class="n">NULL</span> <span class="o">=</span> <span class="n">Null</span><span class="p">()</span>
+</span><span id="L-6076"><a href="#L-6076"><span class="linenos">6076</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-6077"><a href="#L-6077"><span class="linenos">6077</span></a> <span class="n">part</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="n">dialect</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-6078"><a href="#L-6078"><span class="linenos">6078</span></a> <span class="k">if</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">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-6079"><a href="#L-6079"><span class="linenos">6079</span></a> <span class="k">else</span> <span class="n">part</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-6080"><a href="#L-6080"><span class="linenos">6080</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span>
+</span><span id="L-6081"><a href="#L-6081"><span class="linenos">6081</span></a> <span class="p">)</span>
+</span><span id="L-6082"><a href="#L-6082"><span class="linenos">6082</span></a>
+</span><span id="L-6083"><a href="#L-6083"><span class="linenos">6083</span></a>
+</span><span id="L-6084"><a href="#L-6084"><span class="linenos">6084</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">E</span><span class="p">,</span> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">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="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">E</span><span class="p">:</span>
+</span><span id="L-6085"><a href="#L-6085"><span class="linenos">6085</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-6086"><a href="#L-6086"><span class="linenos">6086</span></a>
+</span><span id="L-6087"><a href="#L-6087"><span class="linenos">6087</span></a><span class="sd"> Args:</span>
+</span><span id="L-6088"><a href="#L-6088"><span class="linenos">6088</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
+</span><span id="L-6089"><a href="#L-6089"><span class="linenos">6089</span></a><span class="sd"> mapping: mapping of table names.</span>
+</span><span id="L-6090"><a href="#L-6090"><span class="linenos">6090</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="L-6091"><a href="#L-6091"><span class="linenos">6091</span></a>
+</span><span id="L-6092"><a href="#L-6092"><span class="linenos">6092</span></a><span class="sd"> Examples:</span>
+</span><span id="L-6093"><a href="#L-6093"><span class="linenos">6093</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="L-6094"><a href="#L-6094"><span class="linenos">6094</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-6095"><a href="#L-6095"><span class="linenos">6095</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
+</span><span id="L-6096"><a href="#L-6096"><span class="linenos">6096</span></a>
+</span><span id="L-6097"><a href="#L-6097"><span class="linenos">6097</span></a><span class="sd"> Returns:</span>
+</span><span id="L-6098"><a href="#L-6098"><span class="linenos">6098</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="L-6099"><a href="#L-6099"><span class="linenos">6099</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6100"><a href="#L-6100"><span class="linenos">6100</span></a>
+</span><span id="L-6101"><a href="#L-6101"><span class="linenos">6101</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 class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-6102"><a href="#L-6102"><span class="linenos">6102</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-6103"><a href="#L-6103"><span class="linenos">6103</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-6104"><a href="#L-6104"><span class="linenos">6104</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
+</span><span id="L-6105"><a href="#L-6105"><span class="linenos">6105</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
+</span><span id="L-6106"><a href="#L-6106"><span class="linenos">6106</span></a> <span class="n">new_name</span><span class="p">,</span>
+</span><span id="L-6107"><a href="#L-6107"><span class="linenos">6107</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-6108"><a href="#L-6108"><span class="linenos">6108</span></a> <span class="p">)</span>
+</span><span id="L-6109"><a href="#L-6109"><span class="linenos">6109</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-6110"><a href="#L-6110"><span class="linenos">6110</span></a>
+</span><span id="L-6111"><a href="#L-6111"><span class="linenos">6111</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 class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
+</span><span id="L-6112"><a href="#L-6112"><span class="linenos">6112</span></a>
+</span><span id="L-6113"><a href="#L-6113"><span class="linenos">6113</span></a>
+</span><span id="L-6114"><a href="#L-6114"><span class="linenos">6114</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="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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-6115"><a href="#L-6115"><span class="linenos">6115</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
+</span><span id="L-6116"><a href="#L-6116"><span class="linenos">6116</span></a>
+</span><span id="L-6117"><a href="#L-6117"><span class="linenos">6117</span></a><span class="sd"> Args:</span>
+</span><span id="L-6118"><a href="#L-6118"><span class="linenos">6118</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
+</span><span id="L-6119"><a href="#L-6119"><span class="linenos">6119</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
+</span><span id="L-6120"><a href="#L-6120"><span class="linenos">6120</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
+</span><span id="L-6121"><a href="#L-6121"><span class="linenos">6121</span></a>
+</span><span id="L-6122"><a href="#L-6122"><span class="linenos">6122</span></a><span class="sd"> Examples:</span>
+</span><span id="L-6123"><a href="#L-6123"><span class="linenos">6123</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="L-6124"><a href="#L-6124"><span class="linenos">6124</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
+</span><span id="L-6125"><a href="#L-6125"><span class="linenos">6125</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
+</span><span id="L-6126"><a href="#L-6126"><span class="linenos">6126</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-6127"><a href="#L-6127"><span class="linenos">6127</span></a><span class="sd"> ... ).sql()</span>
+</span><span id="L-6128"><a href="#L-6128"><span class="linenos">6128</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
+</span><span id="L-6129"><a href="#L-6129"><span class="linenos">6129</span></a>
+</span><span id="L-6130"><a href="#L-6130"><span class="linenos">6130</span></a><span class="sd"> Returns:</span>
+</span><span id="L-6131"><a href="#L-6131"><span class="linenos">6131</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="L-6132"><a href="#L-6132"><span class="linenos">6132</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6133"><a href="#L-6133"><span class="linenos">6133</span></a>
+</span><span id="L-6134"><a href="#L-6134"><span class="linenos">6134</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">Expression</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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-6135"><a href="#L-6135"><span class="linenos">6135</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-6136"><a href="#L-6136"><span class="linenos">6136</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-6137"><a href="#L-6137"><span class="linenos">6137</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-6138"><a href="#L-6138"><span class="linenos">6138</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
+</span><span id="L-6139"><a href="#L-6139"><span class="linenos">6139</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-6140"><a href="#L-6140"><span class="linenos">6140</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-6141"><a href="#L-6141"><span class="linenos">6141</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-6142"><a href="#L-6142"><span class="linenos">6142</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-6143"><a href="#L-6143"><span class="linenos">6143</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="L-6144"><a href="#L-6144"><span class="linenos">6144</span></a> <span class="k">pass</span>
+</span><span id="L-6145"><a href="#L-6145"><span class="linenos">6145</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-6146"><a href="#L-6146"><span class="linenos">6146</span></a>
+</span><span id="L-6147"><a href="#L-6147"><span class="linenos">6147</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-6148"><a href="#L-6148"><span class="linenos">6148</span></a>
+</span><span id="L-6149"><a href="#L-6149"><span class="linenos">6149</span></a>
+</span><span id="L-6150"><a href="#L-6150"><span class="linenos">6150</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
+</span><span id="L-6151"><a href="#L-6151"><span class="linenos">6151</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-6152"><a href="#L-6152"><span class="linenos">6152</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-6153"><a href="#L-6153"><span class="linenos">6153</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-6154"><a href="#L-6154"><span class="linenos">6154</span></a>
+</span><span id="L-6155"><a href="#L-6155"><span class="linenos">6155</span></a><span class="sd"> Examples:</span>
+</span><span id="L-6156"><a href="#L-6156"><span class="linenos">6156</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="L-6157"><a href="#L-6157"><span class="linenos">6157</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-6158"><a href="#L-6158"><span class="linenos">6158</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
+</span><span id="L-6159"><a href="#L-6159"><span class="linenos">6159</span></a>
+</span><span id="L-6160"><a href="#L-6160"><span class="linenos">6160</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-6161"><a href="#L-6161"><span class="linenos">6161</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-6162"><a href="#L-6162"><span class="linenos">6162</span></a>
+</span><span id="L-6163"><a href="#L-6163"><span class="linenos">6163</span></a><span class="sd"> Args:</span>
+</span><span id="L-6164"><a href="#L-6164"><span class="linenos">6164</span></a><span class="sd"> expression: The expression to expand.</span>
+</span><span id="L-6165"><a href="#L-6165"><span class="linenos">6165</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
+</span><span id="L-6166"><a href="#L-6166"><span class="linenos">6166</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
+</span><span id="L-6167"><a href="#L-6167"><span class="linenos">6167</span></a>
+</span><span id="L-6168"><a href="#L-6168"><span class="linenos">6168</span></a><span class="sd"> Returns:</span>
+</span><span id="L-6169"><a href="#L-6169"><span class="linenos">6169</span></a><span class="sd"> The transformed expression.</span>
+</span><span id="L-6170"><a href="#L-6170"><span class="linenos">6170</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6171"><a href="#L-6171"><span class="linenos">6171</span></a>
+</span><span id="L-6172"><a href="#L-6172"><span class="linenos">6172</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-6173"><a href="#L-6173"><span class="linenos">6173</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-6174"><a href="#L-6174"><span class="linenos">6174</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-6175"><a href="#L-6175"><span class="linenos">6175</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-6176"><a href="#L-6176"><span class="linenos">6176</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
+</span><span id="L-6177"><a href="#L-6177"><span class="linenos">6177</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-6178"><a href="#L-6178"><span class="linenos">6178</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-6179"><a href="#L-6179"><span class="linenos">6179</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-6180"><a href="#L-6180"><span class="linenos">6180</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-6181"><a href="#L-6181"><span class="linenos">6181</span></a>
+</span><span id="L-6182"><a href="#L-6182"><span class="linenos">6182</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-6183"><a href="#L-6183"><span class="linenos">6183</span></a>
+</span><span id="L-6184"><a href="#L-6184"><span class="linenos">6184</span></a>
+</span><span id="L-6185"><a href="#L-6185"><span class="linenos">6185</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-6186"><a href="#L-6186"><span class="linenos">6186</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6187"><a href="#L-6187"><span class="linenos">6187</span></a><span class="sd"> Returns a Func expression.</span>
+</span><span id="L-6188"><a href="#L-6188"><span class="linenos">6188</span></a>
+</span><span id="L-6189"><a href="#L-6189"><span class="linenos">6189</span></a><span class="sd"> Examples:</span>
+</span><span id="L-6190"><a href="#L-6190"><span class="linenos">6190</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
+</span><span id="L-6191"><a href="#L-6191"><span class="linenos">6191</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
+</span><span id="L-6192"><a href="#L-6192"><span class="linenos">6192</span></a>
+</span><span id="L-6193"><a href="#L-6193"><span class="linenos">6193</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-6194"><a href="#L-6194"><span class="linenos">6194</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
+</span><span id="L-6195"><a href="#L-6195"><span class="linenos">6195</span></a>
+</span><span id="L-6196"><a href="#L-6196"><span class="linenos">6196</span></a><span class="sd"> Args:</span>
+</span><span id="L-6197"><a href="#L-6197"><span class="linenos">6197</span></a><span class="sd"> name: the name of the function to build.</span>
+</span><span id="L-6198"><a href="#L-6198"><span class="linenos">6198</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
+</span><span id="L-6199"><a href="#L-6199"><span class="linenos">6199</span></a><span class="sd"> dialect: the source dialect.</span>
+</span><span id="L-6200"><a href="#L-6200"><span class="linenos">6200</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
+</span><span id="L-6201"><a href="#L-6201"><span class="linenos">6201</span></a>
+</span><span id="L-6202"><a href="#L-6202"><span class="linenos">6202</span></a><span class="sd"> Note:</span>
+</span><span id="L-6203"><a href="#L-6203"><span class="linenos">6203</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
+</span><span id="L-6204"><a href="#L-6204"><span class="linenos">6204</span></a>
+</span><span id="L-6205"><a href="#L-6205"><span class="linenos">6205</span></a><span class="sd"> Returns:</span>
+</span><span id="L-6206"><a href="#L-6206"><span class="linenos">6206</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-6207"><a href="#L-6207"><span class="linenos">6207</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
+</span><span id="L-6208"><a href="#L-6208"><span class="linenos">6208</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6209"><a href="#L-6209"><span class="linenos">6209</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-6210"><a href="#L-6210"><span class="linenos">6210</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-6211"><a href="#L-6211"><span class="linenos">6211</span></a>
+</span><span id="L-6212"><a href="#L-6212"><span class="linenos">6212</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-6213"><a href="#L-6213"><span class="linenos">6213</span></a>
+</span><span id="L-6214"><a href="#L-6214"><span class="linenos">6214</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-6215"><a href="#L-6215"><span class="linenos">6215</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-6216"><a href="#L-6216"><span class="linenos">6216</span></a>
+</span><span id="L-6217"><a href="#L-6217"><span class="linenos">6217</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-6218"><a href="#L-6218"><span class="linenos">6218</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-6219"><a href="#L-6219"><span class="linenos">6219</span></a>
+</span><span id="L-6220"><a href="#L-6220"><span class="linenos">6220</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
+</span><span id="L-6221"><a href="#L-6221"><span class="linenos">6221</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-6222"><a href="#L-6222"><span class="linenos">6222</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-6223"><a href="#L-6223"><span class="linenos">6223</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-6224"><a href="#L-6224"><span class="linenos">6224</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-6225"><a href="#L-6225"><span class="linenos">6225</span></a>
+</span><span id="L-6226"><a href="#L-6226"><span class="linenos">6226</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-6227"><a href="#L-6227"><span class="linenos">6227</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-6228"><a href="#L-6228"><span class="linenos">6228</span></a>
+</span><span id="L-6229"><a href="#L-6229"><span class="linenos">6229</span></a> <span class="k">return</span> <span class="n">function</span>
+</span><span id="L-6230"><a href="#L-6230"><span class="linenos">6230</span></a>
+</span><span id="L-6231"><a href="#L-6231"><span class="linenos">6231</span></a>
+</span><span id="L-6232"><a href="#L-6232"><span class="linenos">6232</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
+</span><span id="L-6233"><a href="#L-6233"><span class="linenos">6233</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6234"><a href="#L-6234"><span class="linenos">6234</span></a><span class="sd"> Returns a true Boolean expression.</span>
+</span><span id="L-6235"><a href="#L-6235"><span class="linenos">6235</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6236"><a href="#L-6236"><span class="linenos">6236</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-6237"><a href="#L-6237"><span class="linenos">6237</span></a>
+</span><span id="L-6238"><a href="#L-6238"><span class="linenos">6238</span></a>
+</span><span id="L-6239"><a href="#L-6239"><span class="linenos">6239</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
+</span><span id="L-6240"><a href="#L-6240"><span class="linenos">6240</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6241"><a href="#L-6241"><span class="linenos">6241</span></a><span class="sd"> Returns a false Boolean expression.</span>
+</span><span id="L-6242"><a href="#L-6242"><span class="linenos">6242</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6243"><a href="#L-6243"><span class="linenos">6243</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-6244"><a href="#L-6244"><span class="linenos">6244</span></a>
+</span><span id="L-6245"><a href="#L-6245"><span class="linenos">6245</span></a>
+</span><span id="L-6246"><a href="#L-6246"><span class="linenos">6246</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Null</span><span class="p">:</span>
+</span><span id="L-6247"><a href="#L-6247"><span class="linenos">6247</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6248"><a href="#L-6248"><span class="linenos">6248</span></a><span class="sd"> Returns a Null expression.</span>
+</span><span id="L-6249"><a href="#L-6249"><span class="linenos">6249</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-6250"><a href="#L-6250"><span class="linenos">6250</span></a> <span class="k">return</span> <span class="n">Null</span><span class="p">()</span>
+</span><span id="L-6251"><a href="#L-6251"><span class="linenos">6251</span></a>
+</span><span id="L-6252"><a href="#L-6252"><span class="linenos">6252</span></a>
+</span><span id="L-6253"><a href="#L-6253"><span class="linenos">6253</span></a><span class="c1"># TODO: deprecate this</span>
+</span><span id="L-6254"><a href="#L-6254"><span class="linenos">6254</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-6255"><a href="#L-6255"><span class="linenos">6255</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-6256"><a href="#L-6256"><span class="linenos">6256</span></a><span class="n">NULL</span> <span class="o">=</span> <span class="n">Null</span><span class="p">()</span>
</span></pre></div>
@@ -15774,8 +16140,9 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</span><span id="Clone-1036"><a href="#Clone-1036"><span class="linenos">1036</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="Clone-1037"><a href="#Clone-1037"><span class="linenos">1037</span></a> <span class="s2">&quot;when&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Clone-1038"><a href="#Clone-1038"><span class="linenos">1038</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="Clone-1039"><a href="#Clone-1039"><span class="linenos">1039</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="Clone-1040"><a href="#Clone-1040"><span class="linenos">1040</span></a> <span class="p">}</span>
+</span><span id="Clone-1039"><a href="#Clone-1039"><span class="linenos">1039</span></a> <span class="s2">&quot;shallow&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Clone-1040"><a href="#Clone-1040"><span class="linenos">1040</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="Clone-1041"><a href="#Clone-1041"><span class="linenos">1041</span></a> <span class="p">}</span>
</span></pre></div>
@@ -15784,7 +16151,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div id="Clone.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;when&#39;: False, &#39;kind&#39;: False, &#39;expression&#39;: False}</span>
+<span class="default_value">{&#39;this&#39;: True, &#39;when&#39;: False, &#39;kind&#39;: False, &#39;shallow&#39;: False, &#39;expression&#39;: False}</span>
</div>
@@ -15873,8 +16240,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-1043"><a href="#Describe-1043"><span class="linenos">1043</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-1044"><a href="#Describe-1044"><span class="linenos">1044</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1044"><a href="#Describe-1044"><span class="linenos">1044</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-1045"><a href="#Describe-1045"><span class="linenos">1045</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -15972,8 +16339,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-1047"><a href="#Pragma-1047"><span class="linenos">1047</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-1048"><a href="#Pragma-1048"><span class="linenos">1048</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Pragma-1048"><a href="#Pragma-1048"><span class="linenos">1048</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-1049"><a href="#Pragma-1049"><span class="linenos">1049</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -16060,8 +16427,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-1051"><a href="#Set-1051"><span class="linenos">1051</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-1052"><a href="#Set-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</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 class="s2">&quot;tag&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-1052"><a href="#Set-1052"><span class="linenos">1052</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-1053"><a href="#Set-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</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 class="s2">&quot;tag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -16159,14 +16526,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-1055"><a href="#SetItem-1055"><span class="linenos">1055</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-1056"><a href="#SetItem-1056"><span class="linenos">1056</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SetItem-1057"><a href="#SetItem-1057"><span class="linenos">1057</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-1058"><a href="#SetItem-1058"><span class="linenos">1058</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-1059"><a href="#SetItem-1059"><span class="linenos">1059</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-1060"><a href="#SetItem-1060"><span class="linenos">1060</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-1061"><a href="#SetItem-1061"><span class="linenos">1061</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-1062"><a href="#SetItem-1062"><span class="linenos">1062</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SetItem-1056"><a href="#SetItem-1056"><span class="linenos">1056</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-1057"><a href="#SetItem-1057"><span class="linenos">1057</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SetItem-1058"><a href="#SetItem-1058"><span class="linenos">1058</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-1059"><a href="#SetItem-1059"><span class="linenos">1059</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-1060"><a href="#SetItem-1060"><span class="linenos">1060</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-1061"><a href="#SetItem-1061"><span class="linenos">1061</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-1062"><a href="#SetItem-1062"><span class="linenos">1062</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-1063"><a href="#SetItem-1063"><span class="linenos">1063</span></a> <span class="p">}</span>
</span></pre></div>
@@ -16264,24 +16631,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-1065"><a href="#Show-1065"><span class="linenos">1065</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-1066"><a href="#Show-1066"><span class="linenos">1066</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Show-1067"><a href="#Show-1067"><span class="linenos">1067</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-1068"><a href="#Show-1068"><span class="linenos">1068</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-1069"><a href="#Show-1069"><span class="linenos">1069</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-1070"><a href="#Show-1070"><span class="linenos">1070</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-1071"><a href="#Show-1071"><span class="linenos">1071</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-1072"><a href="#Show-1072"><span class="linenos">1072</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-1073"><a href="#Show-1073"><span class="linenos">1073</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-1074"><a href="#Show-1074"><span class="linenos">1074</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-1075"><a href="#Show-1075"><span class="linenos">1075</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-1076"><a href="#Show-1076"><span class="linenos">1076</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-1077"><a href="#Show-1077"><span class="linenos">1077</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-1078"><a href="#Show-1078"><span class="linenos">1078</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-1079"><a href="#Show-1079"><span class="linenos">1079</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-1080"><a href="#Show-1080"><span class="linenos">1080</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-1081"><a href="#Show-1081"><span class="linenos">1081</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-1082"><a href="#Show-1082"><span class="linenos">1082</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Show-1066"><a href="#Show-1066"><span class="linenos">1066</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-1067"><a href="#Show-1067"><span class="linenos">1067</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Show-1068"><a href="#Show-1068"><span class="linenos">1068</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-1069"><a href="#Show-1069"><span class="linenos">1069</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-1070"><a href="#Show-1070"><span class="linenos">1070</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-1071"><a href="#Show-1071"><span class="linenos">1071</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-1072"><a href="#Show-1072"><span class="linenos">1072</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-1073"><a href="#Show-1073"><span class="linenos">1073</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-1074"><a href="#Show-1074"><span class="linenos">1074</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-1075"><a href="#Show-1075"><span class="linenos">1075</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-1076"><a href="#Show-1076"><span class="linenos">1076</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-1077"><a href="#Show-1077"><span class="linenos">1077</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-1078"><a href="#Show-1078"><span class="linenos">1078</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-1079"><a href="#Show-1079"><span class="linenos">1079</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-1080"><a href="#Show-1080"><span class="linenos">1080</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-1081"><a href="#Show-1081"><span class="linenos">1081</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-1082"><a href="#Show-1082"><span class="linenos">1082</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-1083"><a href="#Show-1083"><span class="linenos">1083</span></a> <span class="p">}</span>
</span></pre></div>
@@ -16380,8 +16747,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-1085"><a href="#UserDefinedFunction-1085"><span class="linenos">1085</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-1086"><a href="#UserDefinedFunction-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;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-1086"><a href="#UserDefinedFunction-1086"><span class="linenos">1086</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-1087"><a href="#UserDefinedFunction-1087"><span class="linenos">1087</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -16479,8 +16846,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-1089"><a href="#CharacterSet-1089"><span class="linenos">1089</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-1090"><a href="#CharacterSet-1090"><span class="linenos">1090</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1090"><a href="#CharacterSet-1090"><span class="linenos">1090</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-1091"><a href="#CharacterSet-1091"><span class="linenos">1091</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -16578,12 +16945,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-1093"><a href="#With-1093"><span class="linenos">1093</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-1094"><a href="#With-1094"><span class="linenos">1094</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-1095"><a href="#With-1095"><span class="linenos">1095</span></a>
-</span><span id="With-1096"><a href="#With-1096"><span class="linenos">1096</span></a> <span class="nd">@property</span>
-</span><span id="With-1097"><a href="#With-1097"><span class="linenos">1097</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-1098"><a href="#With-1098"><span class="linenos">1098</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-1094"><a href="#With-1094"><span class="linenos">1094</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-1095"><a href="#With-1095"><span class="linenos">1095</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-1096"><a href="#With-1096"><span class="linenos">1096</span></a>
+</span><span id="With-1097"><a href="#With-1097"><span class="linenos">1097</span></a> <span class="nd">@property</span>
+</span><span id="With-1098"><a href="#With-1098"><span class="linenos">1098</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-1099"><a href="#With-1099"><span class="linenos">1099</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>
@@ -16692,8 +17059,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-1101"><a href="#WithinGroup-1101"><span class="linenos">1101</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-1102"><a href="#WithinGroup-1102"><span class="linenos">1102</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1102"><a href="#WithinGroup-1102"><span class="linenos">1102</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-1103"><a href="#WithinGroup-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;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>
@@ -16791,8 +17158,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-1105"><a href="#CTE-1105"><span class="linenos">1105</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-1106"><a href="#CTE-1106"><span class="linenos">1106</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1106"><a href="#CTE-1106"><span class="linenos">1106</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-1107"><a href="#CTE-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;alias&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -16895,12 +17262,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-1109"><a href="#TableAlias-1109"><span class="linenos">1109</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-1110"><a href="#TableAlias-1110"><span class="linenos">1110</span></a> <span class="n">arg_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-1111"><a href="#TableAlias-1111"><span class="linenos">1111</span></a>
-</span><span id="TableAlias-1112"><a href="#TableAlias-1112"><span class="linenos">1112</span></a> <span class="nd">@property</span>
-</span><span id="TableAlias-1113"><a href="#TableAlias-1113"><span class="linenos">1113</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-1114"><a href="#TableAlias-1114"><span class="linenos">1114</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-1110"><a href="#TableAlias-1110"><span class="linenos">1110</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-1111"><a href="#TableAlias-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;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="TableAlias-1112"><a href="#TableAlias-1112"><span class="linenos">1112</span></a>
+</span><span id="TableAlias-1113"><a href="#TableAlias-1113"><span class="linenos">1113</span></a> <span class="nd">@property</span>
+</span><span id="TableAlias-1114"><a href="#TableAlias-1114"><span class="linenos">1114</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-1115"><a href="#TableAlias-1115"><span class="linenos">1115</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>
@@ -17009,8 +17376,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-1117"><a href="#BitString-1117"><span class="linenos">1117</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-1118"><a href="#BitString-1118"><span class="linenos">1118</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitString-1118"><a href="#BitString-1118"><span class="linenos">1118</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-1119"><a href="#BitString-1119"><span class="linenos">1119</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17112,8 +17479,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-1121"><a href="#HexString-1121"><span class="linenos">1121</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-1122"><a href="#HexString-1122"><span class="linenos">1122</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="HexString-1122"><a href="#HexString-1122"><span class="linenos">1122</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-1123"><a href="#HexString-1123"><span class="linenos">1123</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17215,8 +17582,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-1125"><a href="#ByteString-1125"><span class="linenos">1125</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-1126"><a href="#ByteString-1126"><span class="linenos">1126</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ByteString-1126"><a href="#ByteString-1126"><span class="linenos">1126</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-1127"><a href="#ByteString-1127"><span class="linenos">1127</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17318,8 +17685,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#RawString"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RawString-1129"><a href="#RawString-1129"><span class="linenos">1129</span></a><span class="k">class</span> <span class="nc">RawString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="RawString-1130"><a href="#RawString-1130"><span class="linenos">1130</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RawString-1130"><a href="#RawString-1130"><span class="linenos">1130</span></a><span class="k">class</span> <span class="nc">RawString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="RawString-1131"><a href="#RawString-1131"><span class="linenos">1131</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17421,45 +17788,45 @@ 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-1133"><a href="#Column-1133"><span class="linenos">1133</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-1134"><a href="#Column-1134"><span class="linenos">1134</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1135"><a href="#Column-1135"><span class="linenos">1135</span></a>
-</span><span id="Column-1136"><a href="#Column-1136"><span class="linenos">1136</span></a> <span class="nd">@property</span>
-</span><span id="Column-1137"><a href="#Column-1137"><span class="linenos">1137</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-1138"><a href="#Column-1138"><span class="linenos">1138</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-1139"><a href="#Column-1139"><span class="linenos">1139</span></a>
-</span><span id="Column-1140"><a href="#Column-1140"><span class="linenos">1140</span></a> <span class="nd">@property</span>
-</span><span id="Column-1141"><a href="#Column-1141"><span class="linenos">1141</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-1142"><a href="#Column-1142"><span class="linenos">1142</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-1143"><a href="#Column-1143"><span class="linenos">1143</span></a>
-</span><span id="Column-1144"><a href="#Column-1144"><span class="linenos">1144</span></a> <span class="nd">@property</span>
-</span><span id="Column-1145"><a href="#Column-1145"><span class="linenos">1145</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-1146"><a href="#Column-1146"><span class="linenos">1146</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-1147"><a href="#Column-1147"><span class="linenos">1147</span></a>
-</span><span id="Column-1148"><a href="#Column-1148"><span class="linenos">1148</span></a> <span class="nd">@property</span>
-</span><span id="Column-1149"><a href="#Column-1149"><span class="linenos">1149</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-1150"><a href="#Column-1150"><span class="linenos">1150</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-1151"><a href="#Column-1151"><span class="linenos">1151</span></a>
-</span><span id="Column-1152"><a href="#Column-1152"><span class="linenos">1152</span></a> <span class="nd">@property</span>
-</span><span id="Column-1153"><a href="#Column-1153"><span class="linenos">1153</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-1154"><a href="#Column-1154"><span class="linenos">1154</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-1155"><a href="#Column-1155"><span class="linenos">1155</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Column-1156"><a href="#Column-1156"><span class="linenos">1156</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Identifier</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">part</span><span class="p">])</span>
-</span><span id="Column-1157"><a href="#Column-1157"><span class="linenos">1157</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Column-1158"><a href="#Column-1158"><span class="linenos">1158</span></a> <span class="k">if</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="n">part</span><span class="p">)</span>
-</span><span id="Column-1159"><a href="#Column-1159"><span class="linenos">1159</span></a> <span class="p">]</span>
-</span><span id="Column-1160"><a href="#Column-1160"><span class="linenos">1160</span></a>
-</span><span id="Column-1161"><a href="#Column-1161"><span class="linenos">1161</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-1162"><a href="#Column-1162"><span class="linenos">1162</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-1163"><a href="#Column-1163"><span class="linenos">1163</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-1164"><a href="#Column-1164"><span class="linenos">1164</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-1165"><a href="#Column-1165"><span class="linenos">1165</span></a>
-</span><span id="Column-1166"><a href="#Column-1166"><span class="linenos">1166</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
-</span><span id="Column-1167"><a href="#Column-1167"><span class="linenos">1167</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-1168"><a href="#Column-1168"><span class="linenos">1168</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-1169"><a href="#Column-1169"><span class="linenos">1169</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-1170"><a href="#Column-1170"><span class="linenos">1170</span></a>
-</span><span id="Column-1171"><a href="#Column-1171"><span class="linenos">1171</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-1134"><a href="#Column-1134"><span class="linenos">1134</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-1135"><a href="#Column-1135"><span class="linenos">1135</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1136"><a href="#Column-1136"><span class="linenos">1136</span></a>
+</span><span id="Column-1137"><a href="#Column-1137"><span class="linenos">1137</span></a> <span class="nd">@property</span>
+</span><span id="Column-1138"><a href="#Column-1138"><span class="linenos">1138</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-1139"><a href="#Column-1139"><span class="linenos">1139</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-1140"><a href="#Column-1140"><span class="linenos">1140</span></a>
+</span><span id="Column-1141"><a href="#Column-1141"><span class="linenos">1141</span></a> <span class="nd">@property</span>
+</span><span id="Column-1142"><a href="#Column-1142"><span class="linenos">1142</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-1143"><a href="#Column-1143"><span class="linenos">1143</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-1144"><a href="#Column-1144"><span class="linenos">1144</span></a>
+</span><span id="Column-1145"><a href="#Column-1145"><span class="linenos">1145</span></a> <span class="nd">@property</span>
+</span><span id="Column-1146"><a href="#Column-1146"><span class="linenos">1146</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-1147"><a href="#Column-1147"><span class="linenos">1147</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-1148"><a href="#Column-1148"><span class="linenos">1148</span></a>
+</span><span id="Column-1149"><a href="#Column-1149"><span class="linenos">1149</span></a> <span class="nd">@property</span>
+</span><span id="Column-1150"><a href="#Column-1150"><span class="linenos">1150</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-1151"><a href="#Column-1151"><span class="linenos">1151</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-1152"><a href="#Column-1152"><span class="linenos">1152</span></a>
+</span><span id="Column-1153"><a href="#Column-1153"><span class="linenos">1153</span></a> <span class="nd">@property</span>
+</span><span id="Column-1154"><a href="#Column-1154"><span class="linenos">1154</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-1155"><a href="#Column-1155"><span class="linenos">1155</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-1156"><a href="#Column-1156"><span class="linenos">1156</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Column-1157"><a href="#Column-1157"><span class="linenos">1157</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Identifier</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">part</span><span class="p">])</span>
+</span><span id="Column-1158"><a href="#Column-1158"><span class="linenos">1158</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Column-1159"><a href="#Column-1159"><span class="linenos">1159</span></a> <span class="k">if</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="n">part</span><span class="p">)</span>
+</span><span id="Column-1160"><a href="#Column-1160"><span class="linenos">1160</span></a> <span class="p">]</span>
+</span><span id="Column-1161"><a href="#Column-1161"><span class="linenos">1161</span></a>
+</span><span id="Column-1162"><a href="#Column-1162"><span class="linenos">1162</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-1163"><a href="#Column-1163"><span class="linenos">1163</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-1164"><a href="#Column-1164"><span class="linenos">1164</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-1165"><a href="#Column-1165"><span class="linenos">1165</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-1166"><a href="#Column-1166"><span class="linenos">1166</span></a>
+</span><span id="Column-1167"><a href="#Column-1167"><span class="linenos">1167</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
+</span><span id="Column-1168"><a href="#Column-1168"><span class="linenos">1168</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-1169"><a href="#Column-1169"><span class="linenos">1169</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-1170"><a href="#Column-1170"><span class="linenos">1170</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-1171"><a href="#Column-1171"><span class="linenos">1171</span></a>
+</span><span id="Column-1172"><a href="#Column-1172"><span class="linenos">1172</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>
@@ -17564,17 +17931,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-1161"><a href="#Column.to_dot-1161"><span class="linenos">1161</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-1162"><a href="#Column.to_dot-1162"><span class="linenos">1162</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-1163"><a href="#Column.to_dot-1163"><span class="linenos">1163</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-1164"><a href="#Column.to_dot-1164"><span class="linenos">1164</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-1165"><a href="#Column.to_dot-1165"><span class="linenos">1165</span></a>
-</span><span id="Column.to_dot-1166"><a href="#Column.to_dot-1166"><span class="linenos">1166</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
-</span><span id="Column.to_dot-1167"><a href="#Column.to_dot-1167"><span class="linenos">1167</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-1168"><a href="#Column.to_dot-1168"><span class="linenos">1168</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-1169"><a href="#Column.to_dot-1169"><span class="linenos">1169</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-1170"><a href="#Column.to_dot-1170"><span class="linenos">1170</span></a>
-</span><span id="Column.to_dot-1171"><a href="#Column.to_dot-1171"><span class="linenos">1171</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-1162"><a href="#Column.to_dot-1162"><span class="linenos">1162</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-1163"><a href="#Column.to_dot-1163"><span class="linenos">1163</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-1164"><a href="#Column.to_dot-1164"><span class="linenos">1164</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-1165"><a href="#Column.to_dot-1165"><span class="linenos">1165</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-1166"><a href="#Column.to_dot-1166"><span class="linenos">1166</span></a>
+</span><span id="Column.to_dot-1167"><a href="#Column.to_dot-1167"><span class="linenos">1167</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
+</span><span id="Column.to_dot-1168"><a href="#Column.to_dot-1168"><span class="linenos">1168</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-1169"><a href="#Column.to_dot-1169"><span class="linenos">1169</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-1170"><a href="#Column.to_dot-1170"><span class="linenos">1170</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-1171"><a href="#Column.to_dot-1171"><span class="linenos">1171</span></a>
+</span><span id="Column.to_dot-1172"><a href="#Column.to_dot-1172"><span class="linenos">1172</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>
@@ -17677,8 +18044,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-1174"><a href="#ColumnPosition-1174"><span class="linenos">1174</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-1175"><a href="#ColumnPosition-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;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-1175"><a href="#ColumnPosition-1175"><span class="linenos">1175</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-1176"><a href="#ColumnPosition-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;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>
@@ -17776,18 +18143,18 @@ 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-1178"><a href="#ColumnDef-1178"><span class="linenos">1178</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-1179"><a href="#ColumnDef-1179"><span class="linenos">1179</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ColumnDef-1180"><a href="#ColumnDef-1180"><span class="linenos">1180</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-1181"><a href="#ColumnDef-1181"><span class="linenos">1181</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-1182"><a href="#ColumnDef-1182"><span class="linenos">1182</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-1183"><a href="#ColumnDef-1183"><span class="linenos">1183</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-1184"><a href="#ColumnDef-1184"><span class="linenos">1184</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-1185"><a href="#ColumnDef-1185"><span class="linenos">1185</span></a> <span class="p">}</span>
-</span><span id="ColumnDef-1186"><a href="#ColumnDef-1186"><span class="linenos">1186</span></a>
-</span><span id="ColumnDef-1187"><a href="#ColumnDef-1187"><span class="linenos">1187</span></a> <span class="nd">@property</span>
-</span><span id="ColumnDef-1188"><a href="#ColumnDef-1188"><span class="linenos">1188</span></a> <span class="k">def</span> <span class="nf">constraints</span><span class="p">(</span><span class="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">ColumnConstraint</span><span class="p">]:</span>
-</span><span id="ColumnDef-1189"><a href="#ColumnDef-1189"><span class="linenos">1189</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;constraints&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="ColumnDef-1179"><a href="#ColumnDef-1179"><span class="linenos">1179</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-1180"><a href="#ColumnDef-1180"><span class="linenos">1180</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ColumnDef-1181"><a href="#ColumnDef-1181"><span class="linenos">1181</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-1182"><a href="#ColumnDef-1182"><span class="linenos">1182</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-1183"><a href="#ColumnDef-1183"><span class="linenos">1183</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-1184"><a href="#ColumnDef-1184"><span class="linenos">1184</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-1185"><a href="#ColumnDef-1185"><span class="linenos">1185</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-1186"><a href="#ColumnDef-1186"><span class="linenos">1186</span></a> <span class="p">}</span>
+</span><span id="ColumnDef-1187"><a href="#ColumnDef-1187"><span class="linenos">1187</span></a>
+</span><span id="ColumnDef-1188"><a href="#ColumnDef-1188"><span class="linenos">1188</span></a> <span class="nd">@property</span>
+</span><span id="ColumnDef-1189"><a href="#ColumnDef-1189"><span class="linenos">1189</span></a> <span class="k">def</span> <span class="nf">constraints</span><span class="p">(</span><span class="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">ColumnConstraint</span><span class="p">]:</span>
+</span><span id="ColumnDef-1190"><a href="#ColumnDef-1190"><span class="linenos">1190</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;constraints&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
</span></pre></div>
@@ -17896,15 +18263,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-1192"><a href="#AlterColumn-1192"><span class="linenos">1192</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-1193"><a href="#AlterColumn-1193"><span class="linenos">1193</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="AlterColumn-1194"><a href="#AlterColumn-1194"><span class="linenos">1194</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-1195"><a href="#AlterColumn-1195"><span class="linenos">1195</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-1196"><a href="#AlterColumn-1196"><span class="linenos">1196</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-1197"><a href="#AlterColumn-1197"><span class="linenos">1197</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-1198"><a href="#AlterColumn-1198"><span class="linenos">1198</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-1199"><a href="#AlterColumn-1199"><span class="linenos">1199</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-1200"><a href="#AlterColumn-1200"><span class="linenos">1200</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AlterColumn-1193"><a href="#AlterColumn-1193"><span class="linenos">1193</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-1194"><a href="#AlterColumn-1194"><span class="linenos">1194</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="AlterColumn-1195"><a href="#AlterColumn-1195"><span class="linenos">1195</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-1196"><a href="#AlterColumn-1196"><span class="linenos">1196</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-1197"><a href="#AlterColumn-1197"><span class="linenos">1197</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-1198"><a href="#AlterColumn-1198"><span class="linenos">1198</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-1199"><a href="#AlterColumn-1199"><span class="linenos">1199</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-1200"><a href="#AlterColumn-1200"><span class="linenos">1200</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-1201"><a href="#AlterColumn-1201"><span class="linenos">1201</span></a> <span class="p">}</span>
</span></pre></div>
@@ -18002,8 +18369,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-1203"><a href="#RenameTable-1203"><span class="linenos">1203</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-1204"><a href="#RenameTable-1204"><span class="linenos">1204</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RenameTable-1204"><a href="#RenameTable-1204"><span class="linenos">1204</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-1205"><a href="#RenameTable-1205"><span class="linenos">1205</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -18090,8 +18457,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-1207"><a href="#Comment-1207"><span class="linenos">1207</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-1208"><a href="#Comment-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;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-1208"><a href="#Comment-1208"><span class="linenos">1208</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-1209"><a href="#Comment-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;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>
@@ -18178,6 +18545,105 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
+ <section id="Comprehension">
+ <input id="Comprehension-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">Comprehension</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+
+ <label class="view-source-button" for="Comprehension-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Comprehension"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Comprehension-1212"><a href="#Comprehension-1212"><span class="linenos">1212</span></a><span class="k">class</span> <span class="nc">Comprehension</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Comprehension-1213"><a href="#Comprehension-1213"><span class="linenos">1213</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;iterator&quot;</span><span class="p">:</span> <span class="kc">True</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></pre></div>
+
+
+
+
+ <div id="Comprehension.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True, &#39;expression&#39;: True, &#39;iterator&#39;: True, &#39;condition&#39;: False}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Comprehension.arg_types"></a>
+
+
+
+ </div>
+ <div id="Comprehension.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;comprehension&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Comprehension.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="Comprehension.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="Comprehension.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="Comprehension.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="Comprehension.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="Comprehension.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="Comprehension.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="Comprehension.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="Comprehension.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="Comprehension.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="Comprehension.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="Comprehension.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="Comprehension.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="Comprehension.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="Comprehension.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="Comprehension.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="Comprehension.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="Comprehension.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="Comprehension.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="Comprehension.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="Comprehension.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="Comprehension.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="Comprehension.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="Comprehension.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="Comprehension.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="Comprehension.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="Comprehension.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="Comprehension.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="Comprehension.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="Comprehension.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="Comprehension.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="Comprehension.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="Comprehension.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="Comprehension.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="Comprehension.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="Comprehension.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="Comprehension.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="Comprehension.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="Comprehension.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="Comprehension.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="Comprehension.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="Comprehension.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="Comprehension.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="Comprehension.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="Comprehension.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="Comprehension.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="Comprehension.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="Comprehension.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="Comprehension.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="MergeTreeTTLAction">
<input id="MergeTreeTTLAction-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -18189,14 +18655,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#MergeTreeTTLAction"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MergeTreeTTLAction-1212"><a href="#MergeTreeTTLAction-1212"><span class="linenos">1212</span></a><span class="k">class</span> <span class="nc">MergeTreeTTLAction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="MergeTreeTTLAction-1213"><a href="#MergeTreeTTLAction-1213"><span class="linenos">1213</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MergeTreeTTLAction-1214"><a href="#MergeTreeTTLAction-1214"><span class="linenos">1214</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="MergeTreeTTLAction-1215"><a href="#MergeTreeTTLAction-1215"><span class="linenos">1215</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="MergeTreeTTLAction-1216"><a href="#MergeTreeTTLAction-1216"><span class="linenos">1216</span></a> <span class="s2">&quot;recompress&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MergeTreeTTLAction-1217"><a href="#MergeTreeTTLAction-1217"><span class="linenos">1217</span></a> <span class="s2">&quot;to_disk&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MergeTreeTTLAction-1218"><a href="#MergeTreeTTLAction-1218"><span class="linenos">1218</span></a> <span class="s2">&quot;to_volume&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MergeTreeTTLAction-1219"><a href="#MergeTreeTTLAction-1219"><span class="linenos">1219</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MergeTreeTTLAction-1217"><a href="#MergeTreeTTLAction-1217"><span class="linenos">1217</span></a><span class="k">class</span> <span class="nc">MergeTreeTTLAction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="MergeTreeTTLAction-1218"><a href="#MergeTreeTTLAction-1218"><span class="linenos">1218</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MergeTreeTTLAction-1219"><a href="#MergeTreeTTLAction-1219"><span class="linenos">1219</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="MergeTreeTTLAction-1220"><a href="#MergeTreeTTLAction-1220"><span class="linenos">1220</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="MergeTreeTTLAction-1221"><a href="#MergeTreeTTLAction-1221"><span class="linenos">1221</span></a> <span class="s2">&quot;recompress&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MergeTreeTTLAction-1222"><a href="#MergeTreeTTLAction-1222"><span class="linenos">1222</span></a> <span class="s2">&quot;to_disk&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MergeTreeTTLAction-1223"><a href="#MergeTreeTTLAction-1223"><span class="linenos">1223</span></a> <span class="s2">&quot;to_volume&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MergeTreeTTLAction-1224"><a href="#MergeTreeTTLAction-1224"><span class="linenos">1224</span></a> <span class="p">}</span>
</span></pre></div>
@@ -18294,13 +18760,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#MergeTreeTTL"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MergeTreeTTL-1223"><a href="#MergeTreeTTL-1223"><span class="linenos">1223</span></a><span class="k">class</span> <span class="nc">MergeTreeTTL</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="MergeTreeTTL-1224"><a href="#MergeTreeTTL-1224"><span class="linenos">1224</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MergeTreeTTL-1225"><a href="#MergeTreeTTL-1225"><span class="linenos">1225</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="MergeTreeTTL-1226"><a href="#MergeTreeTTL-1226"><span class="linenos">1226</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="MergeTreeTTL-1227"><a href="#MergeTreeTTL-1227"><span class="linenos">1227</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="MergeTreeTTL-1228"><a href="#MergeTreeTTL-1228"><span class="linenos">1228</span></a> <span class="s2">&quot;aggregates&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MergeTreeTTL-1229"><a href="#MergeTreeTTL-1229"><span class="linenos">1229</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MergeTreeTTL-1228"><a href="#MergeTreeTTL-1228"><span class="linenos">1228</span></a><span class="k">class</span> <span class="nc">MergeTreeTTL</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="MergeTreeTTL-1229"><a href="#MergeTreeTTL-1229"><span class="linenos">1229</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MergeTreeTTL-1230"><a href="#MergeTreeTTL-1230"><span class="linenos">1230</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="MergeTreeTTL-1231"><a href="#MergeTreeTTL-1231"><span class="linenos">1231</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="MergeTreeTTL-1232"><a href="#MergeTreeTTL-1232"><span class="linenos">1232</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="MergeTreeTTL-1233"><a href="#MergeTreeTTL-1233"><span class="linenos">1233</span></a> <span class="s2">&quot;aggregates&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MergeTreeTTL-1234"><a href="#MergeTreeTTL-1234"><span class="linenos">1234</span></a> <span class="p">}</span>
</span></pre></div>
@@ -18398,16 +18864,16 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#IndexConstraintOption"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IndexConstraintOption-1233"><a href="#IndexConstraintOption-1233"><span class="linenos">1233</span></a><span class="k">class</span> <span class="nc">IndexConstraintOption</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="IndexConstraintOption-1234"><a href="#IndexConstraintOption-1234"><span class="linenos">1234</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="IndexConstraintOption-1235"><a href="#IndexConstraintOption-1235"><span class="linenos">1235</span></a> <span class="s2">&quot;key_block_size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="IndexConstraintOption-1236"><a href="#IndexConstraintOption-1236"><span class="linenos">1236</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="IndexConstraintOption-1237"><a href="#IndexConstraintOption-1237"><span class="linenos">1237</span></a> <span class="s2">&quot;parser&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="IndexConstraintOption-1238"><a href="#IndexConstraintOption-1238"><span class="linenos">1238</span></a> <span class="s2">&quot;comment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="IndexConstraintOption-1239"><a href="#IndexConstraintOption-1239"><span class="linenos">1239</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="IndexConstraintOption-1240"><a href="#IndexConstraintOption-1240"><span class="linenos">1240</span></a> <span class="s2">&quot;engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="IndexConstraintOption-1241"><a href="#IndexConstraintOption-1241"><span class="linenos">1241</span></a> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="IndexConstraintOption-1242"><a href="#IndexConstraintOption-1242"><span class="linenos">1242</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IndexConstraintOption-1238"><a href="#IndexConstraintOption-1238"><span class="linenos">1238</span></a><span class="k">class</span> <span class="nc">IndexConstraintOption</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="IndexConstraintOption-1239"><a href="#IndexConstraintOption-1239"><span class="linenos">1239</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="IndexConstraintOption-1240"><a href="#IndexConstraintOption-1240"><span class="linenos">1240</span></a> <span class="s2">&quot;key_block_size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="IndexConstraintOption-1241"><a href="#IndexConstraintOption-1241"><span class="linenos">1241</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="IndexConstraintOption-1242"><a href="#IndexConstraintOption-1242"><span class="linenos">1242</span></a> <span class="s2">&quot;parser&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="IndexConstraintOption-1243"><a href="#IndexConstraintOption-1243"><span class="linenos">1243</span></a> <span class="s2">&quot;comment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="IndexConstraintOption-1244"><a href="#IndexConstraintOption-1244"><span class="linenos">1244</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="IndexConstraintOption-1245"><a href="#IndexConstraintOption-1245"><span class="linenos">1245</span></a> <span class="s2">&quot;engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="IndexConstraintOption-1246"><a href="#IndexConstraintOption-1246"><span class="linenos">1246</span></a> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="IndexConstraintOption-1247"><a href="#IndexConstraintOption-1247"><span class="linenos">1247</span></a> <span class="p">}</span>
</span></pre></div>
@@ -18506,12 +18972,12 @@ 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-1245"><a href="#ColumnConstraint-1245"><span class="linenos">1245</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-1246"><a href="#ColumnConstraint-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;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="ColumnConstraint-1247"><a href="#ColumnConstraint-1247"><span class="linenos">1247</span></a>
-</span><span id="ColumnConstraint-1248"><a href="#ColumnConstraint-1248"><span class="linenos">1248</span></a> <span class="nd">@property</span>
-</span><span id="ColumnConstraint-1249"><a href="#ColumnConstraint-1249"><span class="linenos">1249</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 class="o">-&gt;</span> <span class="n">ColumnConstraintKind</span><span class="p">:</span>
-</span><span id="ColumnConstraint-1250"><a href="#ColumnConstraint-1250"><span class="linenos">1250</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;kind&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnConstraint-1250"><a href="#ColumnConstraint-1250"><span class="linenos">1250</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-1251"><a href="#ColumnConstraint-1251"><span class="linenos">1251</span></a> <span class="n">arg_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="ColumnConstraint-1252"><a href="#ColumnConstraint-1252"><span class="linenos">1252</span></a>
+</span><span id="ColumnConstraint-1253"><a href="#ColumnConstraint-1253"><span class="linenos">1253</span></a> <span class="nd">@property</span>
+</span><span id="ColumnConstraint-1254"><a href="#ColumnConstraint-1254"><span class="linenos">1254</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 class="o">-&gt;</span> <span class="n">ColumnConstraintKind</span><span class="p">:</span>
+</span><span id="ColumnConstraint-1255"><a href="#ColumnConstraint-1255"><span class="linenos">1255</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;kind&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -18620,8 +19086,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-1253"><a href="#ColumnConstraintKind-1253"><span class="linenos">1253</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-1254"><a href="#ColumnConstraintKind-1254"><span class="linenos">1254</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnConstraintKind-1258"><a href="#ColumnConstraintKind-1258"><span class="linenos">1258</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-1259"><a href="#ColumnConstraintKind-1259"><span class="linenos">1259</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -18708,8 +19174,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-1257"><a href="#AutoIncrementColumnConstraint-1257"><span class="linenos">1257</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-1258"><a href="#AutoIncrementColumnConstraint-1258"><span class="linenos">1258</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AutoIncrementColumnConstraint-1262"><a href="#AutoIncrementColumnConstraint-1262"><span class="linenos">1262</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-1263"><a href="#AutoIncrementColumnConstraint-1263"><span class="linenos">1263</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -18796,8 +19262,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-1261"><a href="#CaseSpecificColumnConstraint-1261"><span class="linenos">1261</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-1262"><a href="#CaseSpecificColumnConstraint-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;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-1266"><a href="#CaseSpecificColumnConstraint-1266"><span class="linenos">1266</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-1267"><a href="#CaseSpecificColumnConstraint-1267"><span class="linenos">1267</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>
@@ -18895,8 +19361,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-1265"><a href="#CharacterSetColumnConstraint-1265"><span class="linenos">1265</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-1266"><a href="#CharacterSetColumnConstraint-1266"><span class="linenos">1266</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1270"><a href="#CharacterSetColumnConstraint-1270"><span class="linenos">1270</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-1271"><a href="#CharacterSetColumnConstraint-1271"><span class="linenos">1271</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -18994,8 +19460,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-1269"><a href="#CheckColumnConstraint-1269"><span class="linenos">1269</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-1270"><a href="#CheckColumnConstraint-1270"><span class="linenos">1270</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CheckColumnConstraint-1274"><a href="#CheckColumnConstraint-1274"><span class="linenos">1274</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-1275"><a href="#CheckColumnConstraint-1275"><span class="linenos">1275</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19071,6 +19537,94 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
+ <section id="ClusteredColumnConstraint">
+ <input id="ClusteredColumnConstraint-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">ClusteredColumnConstraint</span><wbr>(<span class="base"><a href="#ColumnConstraintKind">ColumnConstraintKind</a></span>):
+
+ <label class="view-source-button" for="ClusteredColumnConstraint-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#ClusteredColumnConstraint"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClusteredColumnConstraint-1278"><a href="#ClusteredColumnConstraint-1278"><span class="linenos">1278</span></a><span class="k">class</span> <span class="nc">ClusteredColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="ClusteredColumnConstraint-1279"><a href="#ClusteredColumnConstraint-1279"><span class="linenos">1279</span></a> <span class="k">pass</span>
+</span></pre></div>
+
+
+
+
+ <div id="ClusteredColumnConstraint.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;clusteredcolumnconstraint&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#ClusteredColumnConstraint.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="ClusteredColumnConstraint.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="ClusteredColumnConstraint.arg_types" class="variable"><a href="#Expression.arg_types">arg_types</a></dd>
+ <dd id="ClusteredColumnConstraint.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="ClusteredColumnConstraint.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="ClusteredColumnConstraint.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="ClusteredColumnConstraint.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="ClusteredColumnConstraint.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="ClusteredColumnConstraint.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="ClusteredColumnConstraint.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="ClusteredColumnConstraint.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="ClusteredColumnConstraint.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="ClusteredColumnConstraint.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="ClusteredColumnConstraint.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="ClusteredColumnConstraint.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="ClusteredColumnConstraint.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="ClusteredColumnConstraint.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="ClusteredColumnConstraint.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="ClusteredColumnConstraint.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="ClusteredColumnConstraint.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="ClusteredColumnConstraint.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="ClusteredColumnConstraint.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="ClusteredColumnConstraint.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="ClusteredColumnConstraint.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="ClusteredColumnConstraint.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="ClusteredColumnConstraint.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="ClusteredColumnConstraint.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="ClusteredColumnConstraint.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="ClusteredColumnConstraint.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="ClusteredColumnConstraint.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="ClusteredColumnConstraint.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="ClusteredColumnConstraint.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="ClusteredColumnConstraint.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="ClusteredColumnConstraint.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="ClusteredColumnConstraint.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="ClusteredColumnConstraint.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="ClusteredColumnConstraint.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="ClusteredColumnConstraint.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="ClusteredColumnConstraint.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="ClusteredColumnConstraint.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="ClusteredColumnConstraint.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="ClusteredColumnConstraint.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="ClusteredColumnConstraint.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="ClusteredColumnConstraint.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="ClusteredColumnConstraint.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="ClusteredColumnConstraint.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="ClusteredColumnConstraint.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="ClusteredColumnConstraint.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="ClusteredColumnConstraint.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="ClusteredColumnConstraint.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="CollateColumnConstraint">
<input id="CollateColumnConstraint-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -19082,8 +19636,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-1273"><a href="#CollateColumnConstraint-1273"><span class="linenos">1273</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-1274"><a href="#CollateColumnConstraint-1274"><span class="linenos">1274</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CollateColumnConstraint-1282"><a href="#CollateColumnConstraint-1282"><span class="linenos">1282</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-1283"><a href="#CollateColumnConstraint-1283"><span class="linenos">1283</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19170,8 +19724,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-1277"><a href="#CommentColumnConstraint-1277"><span class="linenos">1277</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-1278"><a href="#CommentColumnConstraint-1278"><span class="linenos">1278</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CommentColumnConstraint-1286"><a href="#CommentColumnConstraint-1286"><span class="linenos">1286</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-1287"><a href="#CommentColumnConstraint-1287"><span class="linenos">1287</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19258,8 +19812,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-1281"><a href="#CompressColumnConstraint-1281"><span class="linenos">1281</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-1282"><a href="#CompressColumnConstraint-1282"><span class="linenos">1282</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CompressColumnConstraint-1290"><a href="#CompressColumnConstraint-1290"><span class="linenos">1290</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-1291"><a href="#CompressColumnConstraint-1291"><span class="linenos">1291</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19346,8 +19900,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-1285"><a href="#DateFormatColumnConstraint-1285"><span class="linenos">1285</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-1286"><a href="#DateFormatColumnConstraint-1286"><span class="linenos">1286</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1294"><a href="#DateFormatColumnConstraint-1294"><span class="linenos">1294</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-1295"><a href="#DateFormatColumnConstraint-1295"><span class="linenos">1295</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -19445,8 +19999,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-1289"><a href="#DefaultColumnConstraint-1289"><span class="linenos">1289</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-1290"><a href="#DefaultColumnConstraint-1290"><span class="linenos">1290</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DefaultColumnConstraint-1298"><a href="#DefaultColumnConstraint-1298"><span class="linenos">1298</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-1299"><a href="#DefaultColumnConstraint-1299"><span class="linenos">1299</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19533,8 +20087,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-1293"><a href="#EncodeColumnConstraint-1293"><span class="linenos">1293</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-1294"><a href="#EncodeColumnConstraint-1294"><span class="linenos">1294</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="EncodeColumnConstraint-1302"><a href="#EncodeColumnConstraint-1302"><span class="linenos">1302</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-1303"><a href="#EncodeColumnConstraint-1303"><span class="linenos">1303</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19621,18 +20175,18 @@ 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-1297"><a href="#GeneratedAsIdentityColumnConstraint-1297"><span class="linenos">1297</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-1298"><a href="#GeneratedAsIdentityColumnConstraint-1298"><span class="linenos">1298</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1299"><a href="#GeneratedAsIdentityColumnConstraint-1299"><span class="linenos">1299</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1300"><a href="#GeneratedAsIdentityColumnConstraint-1300"><span class="linenos">1300</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-1301"><a href="#GeneratedAsIdentityColumnConstraint-1301"><span class="linenos">1301</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="GeneratedAsIdentityColumnConstraint-1302"><a href="#GeneratedAsIdentityColumnConstraint-1302"><span class="linenos">1302</span></a> <span class="s2">&quot;on_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1303"><a href="#GeneratedAsIdentityColumnConstraint-1303"><span class="linenos">1303</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-1304"><a href="#GeneratedAsIdentityColumnConstraint-1304"><span class="linenos">1304</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-1305"><a href="#GeneratedAsIdentityColumnConstraint-1305"><span class="linenos">1305</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-1306"><a href="#GeneratedAsIdentityColumnConstraint-1306"><span class="linenos">1306</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-1307"><a href="#GeneratedAsIdentityColumnConstraint-1307"><span class="linenos">1307</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-1308"><a href="#GeneratedAsIdentityColumnConstraint-1308"><span class="linenos">1308</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GeneratedAsIdentityColumnConstraint-1306"><a href="#GeneratedAsIdentityColumnConstraint-1306"><span class="linenos">1306</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-1307"><a href="#GeneratedAsIdentityColumnConstraint-1307"><span class="linenos">1307</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1308"><a href="#GeneratedAsIdentityColumnConstraint-1308"><span class="linenos">1308</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1309"><a href="#GeneratedAsIdentityColumnConstraint-1309"><span class="linenos">1309</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-1310"><a href="#GeneratedAsIdentityColumnConstraint-1310"><span class="linenos">1310</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="GeneratedAsIdentityColumnConstraint-1311"><a href="#GeneratedAsIdentityColumnConstraint-1311"><span class="linenos">1311</span></a> <span class="s2">&quot;on_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1312"><a href="#GeneratedAsIdentityColumnConstraint-1312"><span class="linenos">1312</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-1313"><a href="#GeneratedAsIdentityColumnConstraint-1313"><span class="linenos">1313</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-1314"><a href="#GeneratedAsIdentityColumnConstraint-1314"><span class="linenos">1314</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-1315"><a href="#GeneratedAsIdentityColumnConstraint-1315"><span class="linenos">1315</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-1316"><a href="#GeneratedAsIdentityColumnConstraint-1316"><span class="linenos">1316</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-1317"><a href="#GeneratedAsIdentityColumnConstraint-1317"><span class="linenos">1317</span></a> <span class="p">}</span>
</span></pre></div>
@@ -19731,8 +20285,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#IndexColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IndexColumnConstraint-1312"><a href="#IndexColumnConstraint-1312"><span class="linenos">1312</span></a><span class="k">class</span> <span class="nc">IndexColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="IndexColumnConstraint-1313"><a href="#IndexColumnConstraint-1313"><span class="linenos">1313</span></a> <span class="n">arg_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;schema&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 class="s2">&quot;type&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="IndexColumnConstraint-1321"><a href="#IndexColumnConstraint-1321"><span class="linenos">1321</span></a><span class="k">class</span> <span class="nc">IndexColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="IndexColumnConstraint-1322"><a href="#IndexColumnConstraint-1322"><span class="linenos">1322</span></a> <span class="n">arg_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;schema&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 class="s2">&quot;type&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>
@@ -19830,8 +20384,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-1316"><a href="#InlineLengthColumnConstraint-1316"><span class="linenos">1316</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-1317"><a href="#InlineLengthColumnConstraint-1317"><span class="linenos">1317</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="InlineLengthColumnConstraint-1325"><a href="#InlineLengthColumnConstraint-1325"><span class="linenos">1325</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-1326"><a href="#InlineLengthColumnConstraint-1326"><span class="linenos">1326</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -19907,6 +20461,193 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
+ <section id="NonClusteredColumnConstraint">
+ <input id="NonClusteredColumnConstraint-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">NonClusteredColumnConstraint</span><wbr>(<span class="base"><a href="#ColumnConstraintKind">ColumnConstraintKind</a></span>):
+
+ <label class="view-source-button" for="NonClusteredColumnConstraint-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#NonClusteredColumnConstraint"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NonClusteredColumnConstraint-1329"><a href="#NonClusteredColumnConstraint-1329"><span class="linenos">1329</span></a><span class="k">class</span> <span class="nc">NonClusteredColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="NonClusteredColumnConstraint-1330"><a href="#NonClusteredColumnConstraint-1330"><span class="linenos">1330</span></a> <span class="k">pass</span>
+</span></pre></div>
+
+
+
+
+ <div id="NonClusteredColumnConstraint.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;nonclusteredcolumnconstraint&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#NonClusteredColumnConstraint.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="NonClusteredColumnConstraint.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="NonClusteredColumnConstraint.arg_types" class="variable"><a href="#Expression.arg_types">arg_types</a></dd>
+ <dd id="NonClusteredColumnConstraint.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="NonClusteredColumnConstraint.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="NonClusteredColumnConstraint.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="NonClusteredColumnConstraint.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="NonClusteredColumnConstraint.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="NonClusteredColumnConstraint.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="NonClusteredColumnConstraint.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="NonClusteredColumnConstraint.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="NonClusteredColumnConstraint.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="NonClusteredColumnConstraint.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="NonClusteredColumnConstraint.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="NonClusteredColumnConstraint.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="NonClusteredColumnConstraint.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="NonClusteredColumnConstraint.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="NonClusteredColumnConstraint.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="NonClusteredColumnConstraint.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="NonClusteredColumnConstraint.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="NonClusteredColumnConstraint.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="NonClusteredColumnConstraint.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="NonClusteredColumnConstraint.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="NonClusteredColumnConstraint.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="NonClusteredColumnConstraint.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="NonClusteredColumnConstraint.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="NonClusteredColumnConstraint.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="NonClusteredColumnConstraint.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="NonClusteredColumnConstraint.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="NonClusteredColumnConstraint.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="NonClusteredColumnConstraint.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="NonClusteredColumnConstraint.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="NonClusteredColumnConstraint.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="NonClusteredColumnConstraint.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="NonClusteredColumnConstraint.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="NonClusteredColumnConstraint.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="NonClusteredColumnConstraint.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="NonClusteredColumnConstraint.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="NonClusteredColumnConstraint.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="NonClusteredColumnConstraint.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="NonClusteredColumnConstraint.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="NonClusteredColumnConstraint.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="NonClusteredColumnConstraint.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="NonClusteredColumnConstraint.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="NonClusteredColumnConstraint.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="NonClusteredColumnConstraint.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="NonClusteredColumnConstraint.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="NonClusteredColumnConstraint.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="NonClusteredColumnConstraint.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="NonClusteredColumnConstraint.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="NotForReplicationColumnConstraint">
+ <input id="NotForReplicationColumnConstraint-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">NotForReplicationColumnConstraint</span><wbr>(<span class="base"><a href="#ColumnConstraintKind">ColumnConstraintKind</a></span>):
+
+ <label class="view-source-button" for="NotForReplicationColumnConstraint-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#NotForReplicationColumnConstraint"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NotForReplicationColumnConstraint-1333"><a href="#NotForReplicationColumnConstraint-1333"><span class="linenos">1333</span></a><span class="k">class</span> <span class="nc">NotForReplicationColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="NotForReplicationColumnConstraint-1334"><a href="#NotForReplicationColumnConstraint-1334"><span class="linenos">1334</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+</span></pre></div>
+
+
+
+
+ <div id="NotForReplicationColumnConstraint.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{}</span>
+
+
+ </div>
+ <a class="headerlink" href="#NotForReplicationColumnConstraint.arg_types"></a>
+
+
+
+ </div>
+ <div id="NotForReplicationColumnConstraint.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;notforreplicationcolumnconstraint&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#NotForReplicationColumnConstraint.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="NotForReplicationColumnConstraint.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="NotForReplicationColumnConstraint.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="NotForReplicationColumnConstraint.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="NotForReplicationColumnConstraint.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="NotForReplicationColumnConstraint.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="NotForReplicationColumnConstraint.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="NotForReplicationColumnConstraint.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="NotForReplicationColumnConstraint.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="NotForReplicationColumnConstraint.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="NotForReplicationColumnConstraint.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="NotForReplicationColumnConstraint.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="NotForReplicationColumnConstraint.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="NotForReplicationColumnConstraint.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="NotForReplicationColumnConstraint.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="NotForReplicationColumnConstraint.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="NotForReplicationColumnConstraint.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="NotForReplicationColumnConstraint.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="NotForReplicationColumnConstraint.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="NotForReplicationColumnConstraint.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="NotForReplicationColumnConstraint.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="NotForReplicationColumnConstraint.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="NotForReplicationColumnConstraint.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="NotForReplicationColumnConstraint.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="NotForReplicationColumnConstraint.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="NotForReplicationColumnConstraint.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="NotForReplicationColumnConstraint.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="NotForReplicationColumnConstraint.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="NotForReplicationColumnConstraint.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="NotForReplicationColumnConstraint.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="NotForReplicationColumnConstraint.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="NotForReplicationColumnConstraint.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="NotForReplicationColumnConstraint.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="NotForReplicationColumnConstraint.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="NotForReplicationColumnConstraint.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="NotForReplicationColumnConstraint.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="NotForReplicationColumnConstraint.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="NotForReplicationColumnConstraint.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="NotForReplicationColumnConstraint.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="NotForReplicationColumnConstraint.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="NotForReplicationColumnConstraint.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="NotForReplicationColumnConstraint.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="NotForReplicationColumnConstraint.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="NotForReplicationColumnConstraint.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="NotForReplicationColumnConstraint.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="NotForReplicationColumnConstraint.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="NotForReplicationColumnConstraint.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="NotForReplicationColumnConstraint.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="NotForReplicationColumnConstraint.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="NotNullColumnConstraint">
<input id="NotNullColumnConstraint-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -19918,8 +20659,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-1320"><a href="#NotNullColumnConstraint-1320"><span class="linenos">1320</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-1321"><a href="#NotNullColumnConstraint-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;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-1337"><a href="#NotNullColumnConstraint-1337"><span class="linenos">1337</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-1338"><a href="#NotNullColumnConstraint-1338"><span class="linenos">1338</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>
@@ -20017,8 +20758,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-1325"><a href="#OnUpdateColumnConstraint-1325"><span class="linenos">1325</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-1326"><a href="#OnUpdateColumnConstraint-1326"><span class="linenos">1326</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="OnUpdateColumnConstraint-1342"><a href="#OnUpdateColumnConstraint-1342"><span class="linenos">1342</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-1343"><a href="#OnUpdateColumnConstraint-1343"><span class="linenos">1343</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -20105,8 +20846,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-1329"><a href="#PrimaryKeyColumnConstraint-1329"><span class="linenos">1329</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-1330"><a href="#PrimaryKeyColumnConstraint-1330"><span class="linenos">1330</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-1346"><a href="#PrimaryKeyColumnConstraint-1346"><span class="linenos">1346</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-1347"><a href="#PrimaryKeyColumnConstraint-1347"><span class="linenos">1347</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>
@@ -20204,8 +20945,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-1333"><a href="#TitleColumnConstraint-1333"><span class="linenos">1333</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-1334"><a href="#TitleColumnConstraint-1334"><span class="linenos">1334</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TitleColumnConstraint-1350"><a href="#TitleColumnConstraint-1350"><span class="linenos">1350</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-1351"><a href="#TitleColumnConstraint-1351"><span class="linenos">1351</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -20292,8 +21033,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-1337"><a href="#UniqueColumnConstraint-1337"><span class="linenos">1337</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-1338"><a href="#UniqueColumnConstraint-1338"><span class="linenos">1338</span></a> <span class="n">arg_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="UniqueColumnConstraint-1354"><a href="#UniqueColumnConstraint-1354"><span class="linenos">1354</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-1355"><a href="#UniqueColumnConstraint-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;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -20391,8 +21132,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-1341"><a href="#UppercaseColumnConstraint-1341"><span class="linenos">1341</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-1342"><a href="#UppercaseColumnConstraint-1342"><span class="linenos">1342</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-1358"><a href="#UppercaseColumnConstraint-1358"><span class="linenos">1358</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-1359"><a href="#UppercaseColumnConstraint-1359"><span class="linenos">1359</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>
@@ -20490,8 +21231,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-1345"><a href="#PathColumnConstraint-1345"><span class="linenos">1345</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-1346"><a href="#PathColumnConstraint-1346"><span class="linenos">1346</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PathColumnConstraint-1362"><a href="#PathColumnConstraint-1362"><span class="linenos">1362</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-1363"><a href="#PathColumnConstraint-1363"><span class="linenos">1363</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -20567,6 +21308,105 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
+ <section id="ComputedColumnConstraint">
+ <input id="ComputedColumnConstraint-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">ComputedColumnConstraint</span><wbr>(<span class="base"><a href="#ColumnConstraintKind">ColumnConstraintKind</a></span>):
+
+ <label class="view-source-button" for="ComputedColumnConstraint-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#ComputedColumnConstraint"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ComputedColumnConstraint-1368"><a href="#ComputedColumnConstraint-1368"><span class="linenos">1368</span></a><span class="k">class</span> <span class="nc">ComputedColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="ComputedColumnConstraint-1369"><a href="#ComputedColumnConstraint-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;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;persisted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;not_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div id="ComputedColumnConstraint.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True, &#39;persisted&#39;: False, &#39;not_null&#39;: False}</span>
+
+
+ </div>
+ <a class="headerlink" href="#ComputedColumnConstraint.arg_types"></a>
+
+
+
+ </div>
+ <div id="ComputedColumnConstraint.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;computedcolumnconstraint&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#ComputedColumnConstraint.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="ComputedColumnConstraint.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="ComputedColumnConstraint.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="ComputedColumnConstraint.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="ComputedColumnConstraint.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="ComputedColumnConstraint.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="ComputedColumnConstraint.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="ComputedColumnConstraint.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="ComputedColumnConstraint.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="ComputedColumnConstraint.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="ComputedColumnConstraint.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="ComputedColumnConstraint.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="ComputedColumnConstraint.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="ComputedColumnConstraint.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="ComputedColumnConstraint.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="ComputedColumnConstraint.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="ComputedColumnConstraint.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="ComputedColumnConstraint.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="ComputedColumnConstraint.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="ComputedColumnConstraint.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="ComputedColumnConstraint.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="ComputedColumnConstraint.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="ComputedColumnConstraint.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="ComputedColumnConstraint.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="ComputedColumnConstraint.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="ComputedColumnConstraint.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="ComputedColumnConstraint.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="ComputedColumnConstraint.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="ComputedColumnConstraint.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="ComputedColumnConstraint.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="ComputedColumnConstraint.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="ComputedColumnConstraint.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="ComputedColumnConstraint.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="ComputedColumnConstraint.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="ComputedColumnConstraint.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="ComputedColumnConstraint.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="ComputedColumnConstraint.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="ComputedColumnConstraint.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="ComputedColumnConstraint.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="ComputedColumnConstraint.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="ComputedColumnConstraint.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="ComputedColumnConstraint.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="ComputedColumnConstraint.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="ComputedColumnConstraint.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="ComputedColumnConstraint.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="ComputedColumnConstraint.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="ComputedColumnConstraint.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="ComputedColumnConstraint.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="ComputedColumnConstraint.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="Constraint">
<input id="Constraint-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -20578,8 +21418,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-1349"><a href="#Constraint-1349"><span class="linenos">1349</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-1350"><a href="#Constraint-1350"><span class="linenos">1350</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1372"><a href="#Constraint-1372"><span class="linenos">1372</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-1373"><a href="#Constraint-1373"><span class="linenos">1373</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -20677,123 +21517,123 @@ 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-1353"><a href="#Delete-1353"><span class="linenos">1353</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-1354"><a href="#Delete-1354"><span class="linenos">1354</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Delete-1355"><a href="#Delete-1355"><span class="linenos">1355</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="Delete-1356"><a href="#Delete-1356"><span class="linenos">1356</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="Delete-1357"><a href="#Delete-1357"><span class="linenos">1357</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="Delete-1358"><a href="#Delete-1358"><span class="linenos">1358</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="Delete-1359"><a href="#Delete-1359"><span class="linenos">1359</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="Delete-1360"><a href="#Delete-1360"><span class="linenos">1360</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="Delete-1361"><a href="#Delete-1361"><span class="linenos">1361</span></a> <span class="s2">&quot;tables&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># Multiple-Table Syntax (MySQL)</span>
-</span><span id="Delete-1362"><a href="#Delete-1362"><span class="linenos">1362</span></a> <span class="p">}</span>
-</span><span id="Delete-1363"><a href="#Delete-1363"><span class="linenos">1363</span></a>
-</span><span id="Delete-1364"><a href="#Delete-1364"><span class="linenos">1364</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="Delete-1365"><a href="#Delete-1365"><span class="linenos">1365</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1366"><a href="#Delete-1366"><span class="linenos">1366</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete-1367"><a href="#Delete-1367"><span class="linenos">1367</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-1368"><a href="#Delete-1368"><span class="linenos">1368</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-1369"><a href="#Delete-1369"><span class="linenos">1369</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1370"><a href="#Delete-1370"><span class="linenos">1370</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete-1371"><a href="#Delete-1371"><span class="linenos">1371</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete-1372"><a href="#Delete-1372"><span class="linenos">1372</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
-</span><span id="Delete-1373"><a href="#Delete-1373"><span class="linenos">1373</span></a>
-</span><span id="Delete-1374"><a href="#Delete-1374"><span class="linenos">1374</span></a><span class="sd"> Example:</span>
-</span><span id="Delete-1375"><a href="#Delete-1375"><span class="linenos">1375</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
-</span><span id="Delete-1376"><a href="#Delete-1376"><span class="linenos">1376</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
-</span><span id="Delete-1377"><a href="#Delete-1377"><span class="linenos">1377</span></a>
-</span><span id="Delete-1378"><a href="#Delete-1378"><span class="linenos">1378</span></a><span class="sd"> Args:</span>
-</span><span id="Delete-1379"><a href="#Delete-1379"><span class="linenos">1379</span></a><span class="sd"> table: the table from which to delete.</span>
-</span><span id="Delete-1380"><a href="#Delete-1380"><span class="linenos">1380</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Delete-1381"><a href="#Delete-1381"><span class="linenos">1381</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete-1382"><a href="#Delete-1382"><span class="linenos">1382</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete-1383"><a href="#Delete-1383"><span class="linenos">1383</span></a>
-</span><span id="Delete-1384"><a href="#Delete-1384"><span class="linenos">1384</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete-1385"><a href="#Delete-1385"><span class="linenos">1385</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete-1386"><a href="#Delete-1386"><span class="linenos">1386</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete-1387"><a href="#Delete-1387"><span class="linenos">1387</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete-1388"><a href="#Delete-1388"><span class="linenos">1388</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Delete-1389"><a href="#Delete-1389"><span class="linenos">1389</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1390"><a href="#Delete-1390"><span class="linenos">1390</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-1391"><a href="#Delete-1391"><span class="linenos">1391</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete-1392"><a href="#Delete-1392"><span class="linenos">1392</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="Delete-1393"><a href="#Delete-1393"><span class="linenos">1393</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete-1394"><a href="#Delete-1394"><span class="linenos">1394</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1395"><a href="#Delete-1395"><span class="linenos">1395</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete-1376"><a href="#Delete-1376"><span class="linenos">1376</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-1377"><a href="#Delete-1377"><span class="linenos">1377</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Delete-1378"><a href="#Delete-1378"><span class="linenos">1378</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="Delete-1379"><a href="#Delete-1379"><span class="linenos">1379</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="Delete-1380"><a href="#Delete-1380"><span class="linenos">1380</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="Delete-1381"><a href="#Delete-1381"><span class="linenos">1381</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="Delete-1382"><a href="#Delete-1382"><span class="linenos">1382</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="Delete-1383"><a href="#Delete-1383"><span class="linenos">1383</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="Delete-1384"><a href="#Delete-1384"><span class="linenos">1384</span></a> <span class="s2">&quot;tables&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># Multiple-Table Syntax (MySQL)</span>
+</span><span id="Delete-1385"><a href="#Delete-1385"><span class="linenos">1385</span></a> <span class="p">}</span>
+</span><span id="Delete-1386"><a href="#Delete-1386"><span class="linenos">1386</span></a>
+</span><span id="Delete-1387"><a href="#Delete-1387"><span class="linenos">1387</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="Delete-1388"><a href="#Delete-1388"><span class="linenos">1388</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1389"><a href="#Delete-1389"><span class="linenos">1389</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete-1390"><a href="#Delete-1390"><span class="linenos">1390</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-1391"><a href="#Delete-1391"><span class="linenos">1391</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-1392"><a href="#Delete-1392"><span class="linenos">1392</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1393"><a href="#Delete-1393"><span class="linenos">1393</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete-1394"><a href="#Delete-1394"><span class="linenos">1394</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete-1395"><a href="#Delete-1395"><span class="linenos">1395</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
</span><span id="Delete-1396"><a href="#Delete-1396"><span class="linenos">1396</span></a>
-</span><span id="Delete-1397"><a href="#Delete-1397"><span class="linenos">1397</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="Delete-1398"><a href="#Delete-1398"><span class="linenos">1398</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1399"><a href="#Delete-1399"><span class="linenos">1399</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Delete-1400"><a href="#Delete-1400"><span class="linenos">1400</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-1401"><a href="#Delete-1401"><span class="linenos">1401</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-1402"><a href="#Delete-1402"><span class="linenos">1402</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-1403"><a href="#Delete-1403"><span class="linenos">1403</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1404"><a href="#Delete-1404"><span class="linenos">1404</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete-1405"><a href="#Delete-1405"><span class="linenos">1405</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete-1406"><a href="#Delete-1406"><span class="linenos">1406</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Delete-1407"><a href="#Delete-1407"><span class="linenos">1407</span></a>
-</span><span id="Delete-1408"><a href="#Delete-1408"><span class="linenos">1408</span></a><span class="sd"> Example:</span>
-</span><span id="Delete-1409"><a href="#Delete-1409"><span class="linenos">1409</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-1410"><a href="#Delete-1410"><span class="linenos">1410</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-1411"><a href="#Delete-1411"><span class="linenos">1411</span></a>
-</span><span id="Delete-1412"><a href="#Delete-1412"><span class="linenos">1412</span></a><span class="sd"> Args:</span>
-</span><span id="Delete-1413"><a href="#Delete-1413"><span class="linenos">1413</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Delete-1414"><a href="#Delete-1414"><span class="linenos">1414</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete-1415"><a href="#Delete-1415"><span class="linenos">1415</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Delete-1416"><a href="#Delete-1416"><span class="linenos">1416</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Delete-1417"><a href="#Delete-1417"><span class="linenos">1417</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Delete-1418"><a href="#Delete-1418"><span class="linenos">1418</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete-1419"><a href="#Delete-1419"><span class="linenos">1419</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete-1420"><a href="#Delete-1420"><span class="linenos">1420</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete-1421"><a href="#Delete-1421"><span class="linenos">1421</span></a>
-</span><span id="Delete-1422"><a href="#Delete-1422"><span class="linenos">1422</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete-1423"><a href="#Delete-1423"><span class="linenos">1423</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete-1424"><a href="#Delete-1424"><span class="linenos">1424</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete-1425"><a href="#Delete-1425"><span class="linenos">1425</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Delete-1426"><a href="#Delete-1426"><span class="linenos">1426</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Delete-1427"><a href="#Delete-1427"><span class="linenos">1427</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1428"><a href="#Delete-1428"><span class="linenos">1428</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-1429"><a href="#Delete-1429"><span class="linenos">1429</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Delete-1430"><a href="#Delete-1430"><span class="linenos">1430</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Delete-1431"><a href="#Delete-1431"><span class="linenos">1431</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete-1432"><a href="#Delete-1432"><span class="linenos">1432</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete-1433"><a href="#Delete-1433"><span class="linenos">1433</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1434"><a href="#Delete-1434"><span class="linenos">1434</span></a> <span class="p">)</span>
-</span><span id="Delete-1435"><a href="#Delete-1435"><span class="linenos">1435</span></a>
-</span><span id="Delete-1436"><a href="#Delete-1436"><span class="linenos">1436</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
-</span><span id="Delete-1437"><a href="#Delete-1437"><span class="linenos">1437</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1438"><a href="#Delete-1438"><span class="linenos">1438</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete-1439"><a href="#Delete-1439"><span class="linenos">1439</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-1440"><a href="#Delete-1440"><span class="linenos">1440</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-1441"><a href="#Delete-1441"><span class="linenos">1441</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1442"><a href="#Delete-1442"><span class="linenos">1442</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete-1443"><a href="#Delete-1443"><span class="linenos">1443</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete-1444"><a href="#Delete-1444"><span class="linenos">1444</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
-</span><span id="Delete-1445"><a href="#Delete-1445"><span class="linenos">1445</span></a>
-</span><span id="Delete-1446"><a href="#Delete-1446"><span class="linenos">1446</span></a><span class="sd"> Example:</span>
-</span><span id="Delete-1447"><a href="#Delete-1447"><span class="linenos">1447</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-1448"><a href="#Delete-1448"><span class="linenos">1448</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
-</span><span id="Delete-1449"><a href="#Delete-1449"><span class="linenos">1449</span></a>
-</span><span id="Delete-1450"><a href="#Delete-1450"><span class="linenos">1450</span></a><span class="sd"> Args:</span>
-</span><span id="Delete-1451"><a href="#Delete-1451"><span class="linenos">1451</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="Delete-1452"><a href="#Delete-1452"><span class="linenos">1452</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete-1453"><a href="#Delete-1453"><span class="linenos">1453</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete-1454"><a href="#Delete-1454"><span class="linenos">1454</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete-1455"><a href="#Delete-1455"><span class="linenos">1455</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete-1456"><a href="#Delete-1456"><span class="linenos">1456</span></a>
-</span><span id="Delete-1457"><a href="#Delete-1457"><span class="linenos">1457</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete-1458"><a href="#Delete-1458"><span class="linenos">1458</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete-1459"><a href="#Delete-1459"><span class="linenos">1459</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete-1460"><a href="#Delete-1460"><span class="linenos">1460</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete-1461"><a href="#Delete-1461"><span class="linenos">1461</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Delete-1462"><a href="#Delete-1462"><span class="linenos">1462</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1463"><a href="#Delete-1463"><span class="linenos">1463</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-1464"><a href="#Delete-1464"><span class="linenos">1464</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-1465"><a href="#Delete-1465"><span class="linenos">1465</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete-1466"><a href="#Delete-1466"><span class="linenos">1466</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete-1467"><a href="#Delete-1467"><span class="linenos">1467</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
-</span><span id="Delete-1468"><a href="#Delete-1468"><span class="linenos">1468</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1469"><a href="#Delete-1469"><span class="linenos">1469</span></a> <span class="p">)</span>
+</span><span id="Delete-1397"><a href="#Delete-1397"><span class="linenos">1397</span></a><span class="sd"> Example:</span>
+</span><span id="Delete-1398"><a href="#Delete-1398"><span class="linenos">1398</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
+</span><span id="Delete-1399"><a href="#Delete-1399"><span class="linenos">1399</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
+</span><span id="Delete-1400"><a href="#Delete-1400"><span class="linenos">1400</span></a>
+</span><span id="Delete-1401"><a href="#Delete-1401"><span class="linenos">1401</span></a><span class="sd"> Args:</span>
+</span><span id="Delete-1402"><a href="#Delete-1402"><span class="linenos">1402</span></a><span class="sd"> table: the table from which to delete.</span>
+</span><span id="Delete-1403"><a href="#Delete-1403"><span class="linenos">1403</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Delete-1404"><a href="#Delete-1404"><span class="linenos">1404</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete-1405"><a href="#Delete-1405"><span class="linenos">1405</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete-1406"><a href="#Delete-1406"><span class="linenos">1406</span></a>
+</span><span id="Delete-1407"><a href="#Delete-1407"><span class="linenos">1407</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete-1408"><a href="#Delete-1408"><span class="linenos">1408</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete-1409"><a href="#Delete-1409"><span class="linenos">1409</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete-1410"><a href="#Delete-1410"><span class="linenos">1410</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete-1411"><a href="#Delete-1411"><span class="linenos">1411</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Delete-1412"><a href="#Delete-1412"><span class="linenos">1412</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1413"><a href="#Delete-1413"><span class="linenos">1413</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-1414"><a href="#Delete-1414"><span class="linenos">1414</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete-1415"><a href="#Delete-1415"><span class="linenos">1415</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="Delete-1416"><a href="#Delete-1416"><span class="linenos">1416</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete-1417"><a href="#Delete-1417"><span class="linenos">1417</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1418"><a href="#Delete-1418"><span class="linenos">1418</span></a> <span class="p">)</span>
+</span><span id="Delete-1419"><a href="#Delete-1419"><span class="linenos">1419</span></a>
+</span><span id="Delete-1420"><a href="#Delete-1420"><span class="linenos">1420</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="Delete-1421"><a href="#Delete-1421"><span class="linenos">1421</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1422"><a href="#Delete-1422"><span class="linenos">1422</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Delete-1423"><a href="#Delete-1423"><span class="linenos">1423</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-1424"><a href="#Delete-1424"><span class="linenos">1424</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-1425"><a href="#Delete-1425"><span class="linenos">1425</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-1426"><a href="#Delete-1426"><span class="linenos">1426</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1427"><a href="#Delete-1427"><span class="linenos">1427</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete-1428"><a href="#Delete-1428"><span class="linenos">1428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete-1429"><a href="#Delete-1429"><span class="linenos">1429</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Delete-1430"><a href="#Delete-1430"><span class="linenos">1430</span></a>
+</span><span id="Delete-1431"><a href="#Delete-1431"><span class="linenos">1431</span></a><span class="sd"> Example:</span>
+</span><span id="Delete-1432"><a href="#Delete-1432"><span class="linenos">1432</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-1433"><a href="#Delete-1433"><span class="linenos">1433</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-1434"><a href="#Delete-1434"><span class="linenos">1434</span></a>
+</span><span id="Delete-1435"><a href="#Delete-1435"><span class="linenos">1435</span></a><span class="sd"> Args:</span>
+</span><span id="Delete-1436"><a href="#Delete-1436"><span class="linenos">1436</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Delete-1437"><a href="#Delete-1437"><span class="linenos">1437</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete-1438"><a href="#Delete-1438"><span class="linenos">1438</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Delete-1439"><a href="#Delete-1439"><span class="linenos">1439</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Delete-1440"><a href="#Delete-1440"><span class="linenos">1440</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Delete-1441"><a href="#Delete-1441"><span class="linenos">1441</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete-1442"><a href="#Delete-1442"><span class="linenos">1442</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete-1443"><a href="#Delete-1443"><span class="linenos">1443</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete-1444"><a href="#Delete-1444"><span class="linenos">1444</span></a>
+</span><span id="Delete-1445"><a href="#Delete-1445"><span class="linenos">1445</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete-1446"><a href="#Delete-1446"><span class="linenos">1446</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete-1447"><a href="#Delete-1447"><span class="linenos">1447</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete-1448"><a href="#Delete-1448"><span class="linenos">1448</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Delete-1449"><a href="#Delete-1449"><span class="linenos">1449</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Delete-1450"><a href="#Delete-1450"><span class="linenos">1450</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1451"><a href="#Delete-1451"><span class="linenos">1451</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-1452"><a href="#Delete-1452"><span class="linenos">1452</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Delete-1453"><a href="#Delete-1453"><span class="linenos">1453</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Delete-1454"><a href="#Delete-1454"><span class="linenos">1454</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete-1455"><a href="#Delete-1455"><span class="linenos">1455</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete-1456"><a href="#Delete-1456"><span class="linenos">1456</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1457"><a href="#Delete-1457"><span class="linenos">1457</span></a> <span class="p">)</span>
+</span><span id="Delete-1458"><a href="#Delete-1458"><span class="linenos">1458</span></a>
+</span><span id="Delete-1459"><a href="#Delete-1459"><span class="linenos">1459</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
+</span><span id="Delete-1460"><a href="#Delete-1460"><span class="linenos">1460</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1461"><a href="#Delete-1461"><span class="linenos">1461</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete-1462"><a href="#Delete-1462"><span class="linenos">1462</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-1463"><a href="#Delete-1463"><span class="linenos">1463</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-1464"><a href="#Delete-1464"><span class="linenos">1464</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1465"><a href="#Delete-1465"><span class="linenos">1465</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete-1466"><a href="#Delete-1466"><span class="linenos">1466</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete-1467"><a href="#Delete-1467"><span class="linenos">1467</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
+</span><span id="Delete-1468"><a href="#Delete-1468"><span class="linenos">1468</span></a>
+</span><span id="Delete-1469"><a href="#Delete-1469"><span class="linenos">1469</span></a><span class="sd"> Example:</span>
+</span><span id="Delete-1470"><a href="#Delete-1470"><span class="linenos">1470</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-1471"><a href="#Delete-1471"><span class="linenos">1471</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
+</span><span id="Delete-1472"><a href="#Delete-1472"><span class="linenos">1472</span></a>
+</span><span id="Delete-1473"><a href="#Delete-1473"><span class="linenos">1473</span></a><span class="sd"> Args:</span>
+</span><span id="Delete-1474"><a href="#Delete-1474"><span class="linenos">1474</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="Delete-1475"><a href="#Delete-1475"><span class="linenos">1475</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete-1476"><a href="#Delete-1476"><span class="linenos">1476</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete-1477"><a href="#Delete-1477"><span class="linenos">1477</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete-1478"><a href="#Delete-1478"><span class="linenos">1478</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete-1479"><a href="#Delete-1479"><span class="linenos">1479</span></a>
+</span><span id="Delete-1480"><a href="#Delete-1480"><span class="linenos">1480</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete-1481"><a href="#Delete-1481"><span class="linenos">1481</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete-1482"><a href="#Delete-1482"><span class="linenos">1482</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete-1483"><a href="#Delete-1483"><span class="linenos">1483</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete-1484"><a href="#Delete-1484"><span class="linenos">1484</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Delete-1485"><a href="#Delete-1485"><span class="linenos">1485</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1486"><a href="#Delete-1486"><span class="linenos">1486</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-1487"><a href="#Delete-1487"><span class="linenos">1487</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-1488"><a href="#Delete-1488"><span class="linenos">1488</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete-1489"><a href="#Delete-1489"><span class="linenos">1489</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete-1490"><a href="#Delete-1490"><span class="linenos">1490</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="Delete-1491"><a href="#Delete-1491"><span class="linenos">1491</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1492"><a href="#Delete-1492"><span class="linenos">1492</span></a> <span class="p">)</span>
</span></pre></div>
@@ -20823,38 +21663,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-1364"><a href="#Delete.delete-1364"><span class="linenos">1364</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="Delete.delete-1365"><a href="#Delete.delete-1365"><span class="linenos">1365</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.delete-1366"><a href="#Delete.delete-1366"><span class="linenos">1366</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-1367"><a href="#Delete.delete-1367"><span class="linenos">1367</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-1368"><a href="#Delete.delete-1368"><span class="linenos">1368</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-1369"><a href="#Delete.delete-1369"><span class="linenos">1369</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.delete-1370"><a href="#Delete.delete-1370"><span class="linenos">1370</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-1371"><a href="#Delete.delete-1371"><span class="linenos">1371</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete.delete-1372"><a href="#Delete.delete-1372"><span class="linenos">1372</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
-</span><span id="Delete.delete-1373"><a href="#Delete.delete-1373"><span class="linenos">1373</span></a>
-</span><span id="Delete.delete-1374"><a href="#Delete.delete-1374"><span class="linenos">1374</span></a><span class="sd"> Example:</span>
-</span><span id="Delete.delete-1375"><a href="#Delete.delete-1375"><span class="linenos">1375</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
-</span><span id="Delete.delete-1376"><a href="#Delete.delete-1376"><span class="linenos">1376</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
-</span><span id="Delete.delete-1377"><a href="#Delete.delete-1377"><span class="linenos">1377</span></a>
-</span><span id="Delete.delete-1378"><a href="#Delete.delete-1378"><span class="linenos">1378</span></a><span class="sd"> Args:</span>
-</span><span id="Delete.delete-1379"><a href="#Delete.delete-1379"><span class="linenos">1379</span></a><span class="sd"> table: the table from which to delete.</span>
-</span><span id="Delete.delete-1380"><a href="#Delete.delete-1380"><span class="linenos">1380</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Delete.delete-1381"><a href="#Delete.delete-1381"><span class="linenos">1381</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete.delete-1382"><a href="#Delete.delete-1382"><span class="linenos">1382</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete.delete-1383"><a href="#Delete.delete-1383"><span class="linenos">1383</span></a>
-</span><span id="Delete.delete-1384"><a href="#Delete.delete-1384"><span class="linenos">1384</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete.delete-1385"><a href="#Delete.delete-1385"><span class="linenos">1385</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete.delete-1386"><a href="#Delete.delete-1386"><span class="linenos">1386</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete.delete-1387"><a href="#Delete.delete-1387"><span class="linenos">1387</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete.delete-1388"><a href="#Delete.delete-1388"><span class="linenos">1388</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-1389"><a href="#Delete.delete-1389"><span class="linenos">1389</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-1390"><a href="#Delete.delete-1390"><span class="linenos">1390</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-1391"><a href="#Delete.delete-1391"><span class="linenos">1391</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-1392"><a href="#Delete.delete-1392"><span class="linenos">1392</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-1393"><a href="#Delete.delete-1393"><span class="linenos">1393</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-1394"><a href="#Delete.delete-1394"><span class="linenos">1394</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.delete-1395"><a href="#Delete.delete-1395"><span class="linenos">1395</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.delete-1387"><a href="#Delete.delete-1387"><span class="linenos">1387</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="Delete.delete-1388"><a href="#Delete.delete-1388"><span class="linenos">1388</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.delete-1389"><a href="#Delete.delete-1389"><span class="linenos">1389</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-1390"><a href="#Delete.delete-1390"><span class="linenos">1390</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-1391"><a href="#Delete.delete-1391"><span class="linenos">1391</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-1392"><a href="#Delete.delete-1392"><span class="linenos">1392</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.delete-1393"><a href="#Delete.delete-1393"><span class="linenos">1393</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-1394"><a href="#Delete.delete-1394"><span class="linenos">1394</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete.delete-1395"><a href="#Delete.delete-1395"><span class="linenos">1395</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
+</span><span id="Delete.delete-1396"><a href="#Delete.delete-1396"><span class="linenos">1396</span></a>
+</span><span id="Delete.delete-1397"><a href="#Delete.delete-1397"><span class="linenos">1397</span></a><span class="sd"> Example:</span>
+</span><span id="Delete.delete-1398"><a href="#Delete.delete-1398"><span class="linenos">1398</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
+</span><span id="Delete.delete-1399"><a href="#Delete.delete-1399"><span class="linenos">1399</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
+</span><span id="Delete.delete-1400"><a href="#Delete.delete-1400"><span class="linenos">1400</span></a>
+</span><span id="Delete.delete-1401"><a href="#Delete.delete-1401"><span class="linenos">1401</span></a><span class="sd"> Args:</span>
+</span><span id="Delete.delete-1402"><a href="#Delete.delete-1402"><span class="linenos">1402</span></a><span class="sd"> table: the table from which to delete.</span>
+</span><span id="Delete.delete-1403"><a href="#Delete.delete-1403"><span class="linenos">1403</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Delete.delete-1404"><a href="#Delete.delete-1404"><span class="linenos">1404</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete.delete-1405"><a href="#Delete.delete-1405"><span class="linenos">1405</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete.delete-1406"><a href="#Delete.delete-1406"><span class="linenos">1406</span></a>
+</span><span id="Delete.delete-1407"><a href="#Delete.delete-1407"><span class="linenos">1407</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete.delete-1408"><a href="#Delete.delete-1408"><span class="linenos">1408</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete.delete-1409"><a href="#Delete.delete-1409"><span class="linenos">1409</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete.delete-1410"><a href="#Delete.delete-1410"><span class="linenos">1410</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete.delete-1411"><a href="#Delete.delete-1411"><span class="linenos">1411</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-1412"><a href="#Delete.delete-1412"><span class="linenos">1412</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-1413"><a href="#Delete.delete-1413"><span class="linenos">1413</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-1414"><a href="#Delete.delete-1414"><span class="linenos">1414</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-1415"><a href="#Delete.delete-1415"><span class="linenos">1415</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-1416"><a href="#Delete.delete-1416"><span class="linenos">1416</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-1417"><a href="#Delete.delete-1417"><span class="linenos">1417</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.delete-1418"><a href="#Delete.delete-1418"><span class="linenos">1418</span></a> <span class="p">)</span>
</span></pre></div>
@@ -20899,44 +21739,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-1397"><a href="#Delete.where-1397"><span class="linenos">1397</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="Delete.where-1398"><a href="#Delete.where-1398"><span class="linenos">1398</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.where-1399"><a href="#Delete.where-1399"><span class="linenos">1399</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Delete.where-1400"><a href="#Delete.where-1400"><span class="linenos">1400</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-1401"><a href="#Delete.where-1401"><span class="linenos">1401</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-1402"><a href="#Delete.where-1402"><span class="linenos">1402</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-1403"><a href="#Delete.where-1403"><span class="linenos">1403</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.where-1404"><a href="#Delete.where-1404"><span class="linenos">1404</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-1405"><a href="#Delete.where-1405"><span class="linenos">1405</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete.where-1406"><a href="#Delete.where-1406"><span class="linenos">1406</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Delete.where-1407"><a href="#Delete.where-1407"><span class="linenos">1407</span></a>
-</span><span id="Delete.where-1408"><a href="#Delete.where-1408"><span class="linenos">1408</span></a><span class="sd"> Example:</span>
-</span><span id="Delete.where-1409"><a href="#Delete.where-1409"><span class="linenos">1409</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-1410"><a href="#Delete.where-1410"><span class="linenos">1410</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-1411"><a href="#Delete.where-1411"><span class="linenos">1411</span></a>
-</span><span id="Delete.where-1412"><a href="#Delete.where-1412"><span class="linenos">1412</span></a><span class="sd"> Args:</span>
-</span><span id="Delete.where-1413"><a href="#Delete.where-1413"><span class="linenos">1413</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Delete.where-1414"><a href="#Delete.where-1414"><span class="linenos">1414</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete.where-1415"><a href="#Delete.where-1415"><span class="linenos">1415</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Delete.where-1416"><a href="#Delete.where-1416"><span class="linenos">1416</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Delete.where-1417"><a href="#Delete.where-1417"><span class="linenos">1417</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Delete.where-1418"><a href="#Delete.where-1418"><span class="linenos">1418</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete.where-1419"><a href="#Delete.where-1419"><span class="linenos">1419</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete.where-1420"><a href="#Delete.where-1420"><span class="linenos">1420</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete.where-1421"><a href="#Delete.where-1421"><span class="linenos">1421</span></a>
-</span><span id="Delete.where-1422"><a href="#Delete.where-1422"><span class="linenos">1422</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete.where-1423"><a href="#Delete.where-1423"><span class="linenos">1423</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete.where-1424"><a href="#Delete.where-1424"><span class="linenos">1424</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete.where-1425"><a href="#Delete.where-1425"><span class="linenos">1425</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Delete.where-1426"><a href="#Delete.where-1426"><span class="linenos">1426</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Delete.where-1427"><a href="#Delete.where-1427"><span class="linenos">1427</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-1428"><a href="#Delete.where-1428"><span class="linenos">1428</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-1429"><a href="#Delete.where-1429"><span class="linenos">1429</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-1430"><a href="#Delete.where-1430"><span class="linenos">1430</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-1431"><a href="#Delete.where-1431"><span class="linenos">1431</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-1432"><a href="#Delete.where-1432"><span class="linenos">1432</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-1433"><a href="#Delete.where-1433"><span class="linenos">1433</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.where-1434"><a href="#Delete.where-1434"><span class="linenos">1434</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.where-1420"><a href="#Delete.where-1420"><span class="linenos">1420</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="Delete.where-1421"><a href="#Delete.where-1421"><span class="linenos">1421</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.where-1422"><a href="#Delete.where-1422"><span class="linenos">1422</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Delete.where-1423"><a href="#Delete.where-1423"><span class="linenos">1423</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-1424"><a href="#Delete.where-1424"><span class="linenos">1424</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-1425"><a href="#Delete.where-1425"><span class="linenos">1425</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-1426"><a href="#Delete.where-1426"><span class="linenos">1426</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.where-1427"><a href="#Delete.where-1427"><span class="linenos">1427</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-1428"><a href="#Delete.where-1428"><span class="linenos">1428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete.where-1429"><a href="#Delete.where-1429"><span class="linenos">1429</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Delete.where-1430"><a href="#Delete.where-1430"><span class="linenos">1430</span></a>
+</span><span id="Delete.where-1431"><a href="#Delete.where-1431"><span class="linenos">1431</span></a><span class="sd"> Example:</span>
+</span><span id="Delete.where-1432"><a href="#Delete.where-1432"><span class="linenos">1432</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-1433"><a href="#Delete.where-1433"><span class="linenos">1433</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-1434"><a href="#Delete.where-1434"><span class="linenos">1434</span></a>
+</span><span id="Delete.where-1435"><a href="#Delete.where-1435"><span class="linenos">1435</span></a><span class="sd"> Args:</span>
+</span><span id="Delete.where-1436"><a href="#Delete.where-1436"><span class="linenos">1436</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Delete.where-1437"><a href="#Delete.where-1437"><span class="linenos">1437</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete.where-1438"><a href="#Delete.where-1438"><span class="linenos">1438</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Delete.where-1439"><a href="#Delete.where-1439"><span class="linenos">1439</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Delete.where-1440"><a href="#Delete.where-1440"><span class="linenos">1440</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Delete.where-1441"><a href="#Delete.where-1441"><span class="linenos">1441</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete.where-1442"><a href="#Delete.where-1442"><span class="linenos">1442</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete.where-1443"><a href="#Delete.where-1443"><span class="linenos">1443</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete.where-1444"><a href="#Delete.where-1444"><span class="linenos">1444</span></a>
+</span><span id="Delete.where-1445"><a href="#Delete.where-1445"><span class="linenos">1445</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete.where-1446"><a href="#Delete.where-1446"><span class="linenos">1446</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete.where-1447"><a href="#Delete.where-1447"><span class="linenos">1447</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete.where-1448"><a href="#Delete.where-1448"><span class="linenos">1448</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Delete.where-1449"><a href="#Delete.where-1449"><span class="linenos">1449</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Delete.where-1450"><a href="#Delete.where-1450"><span class="linenos">1450</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-1451"><a href="#Delete.where-1451"><span class="linenos">1451</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-1452"><a href="#Delete.where-1452"><span class="linenos">1452</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-1453"><a href="#Delete.where-1453"><span class="linenos">1453</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-1454"><a href="#Delete.where-1454"><span class="linenos">1454</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-1455"><a href="#Delete.where-1455"><span class="linenos">1455</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-1456"><a href="#Delete.where-1456"><span class="linenos">1456</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.where-1457"><a href="#Delete.where-1457"><span class="linenos">1457</span></a> <span class="p">)</span>
</span></pre></div>
@@ -20985,40 +21825,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-1436"><a href="#Delete.returning-1436"><span class="linenos">1436</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
-</span><span id="Delete.returning-1437"><a href="#Delete.returning-1437"><span class="linenos">1437</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.returning-1438"><a href="#Delete.returning-1438"><span class="linenos">1438</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-1439"><a href="#Delete.returning-1439"><span class="linenos">1439</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-1440"><a href="#Delete.returning-1440"><span class="linenos">1440</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-1441"><a href="#Delete.returning-1441"><span class="linenos">1441</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.returning-1442"><a href="#Delete.returning-1442"><span class="linenos">1442</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-1443"><a href="#Delete.returning-1443"><span class="linenos">1443</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete.returning-1444"><a href="#Delete.returning-1444"><span class="linenos">1444</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
-</span><span id="Delete.returning-1445"><a href="#Delete.returning-1445"><span class="linenos">1445</span></a>
-</span><span id="Delete.returning-1446"><a href="#Delete.returning-1446"><span class="linenos">1446</span></a><span class="sd"> Example:</span>
-</span><span id="Delete.returning-1447"><a href="#Delete.returning-1447"><span class="linenos">1447</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-1448"><a href="#Delete.returning-1448"><span class="linenos">1448</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
-</span><span id="Delete.returning-1449"><a href="#Delete.returning-1449"><span class="linenos">1449</span></a>
-</span><span id="Delete.returning-1450"><a href="#Delete.returning-1450"><span class="linenos">1450</span></a><span class="sd"> Args:</span>
-</span><span id="Delete.returning-1451"><a href="#Delete.returning-1451"><span class="linenos">1451</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="Delete.returning-1452"><a href="#Delete.returning-1452"><span class="linenos">1452</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete.returning-1453"><a href="#Delete.returning-1453"><span class="linenos">1453</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete.returning-1454"><a href="#Delete.returning-1454"><span class="linenos">1454</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete.returning-1455"><a href="#Delete.returning-1455"><span class="linenos">1455</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete.returning-1456"><a href="#Delete.returning-1456"><span class="linenos">1456</span></a>
-</span><span id="Delete.returning-1457"><a href="#Delete.returning-1457"><span class="linenos">1457</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete.returning-1458"><a href="#Delete.returning-1458"><span class="linenos">1458</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete.returning-1459"><a href="#Delete.returning-1459"><span class="linenos">1459</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete.returning-1460"><a href="#Delete.returning-1460"><span class="linenos">1460</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete.returning-1461"><a href="#Delete.returning-1461"><span class="linenos">1461</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-1462"><a href="#Delete.returning-1462"><span class="linenos">1462</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-1463"><a href="#Delete.returning-1463"><span class="linenos">1463</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-1464"><a href="#Delete.returning-1464"><span class="linenos">1464</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-1465"><a href="#Delete.returning-1465"><span class="linenos">1465</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-1466"><a href="#Delete.returning-1466"><span class="linenos">1466</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-1467"><a href="#Delete.returning-1467"><span class="linenos">1467</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-1468"><a href="#Delete.returning-1468"><span class="linenos">1468</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.returning-1469"><a href="#Delete.returning-1469"><span class="linenos">1469</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.returning-1459"><a href="#Delete.returning-1459"><span class="linenos">1459</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
+</span><span id="Delete.returning-1460"><a href="#Delete.returning-1460"><span class="linenos">1460</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.returning-1461"><a href="#Delete.returning-1461"><span class="linenos">1461</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-1462"><a href="#Delete.returning-1462"><span class="linenos">1462</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-1463"><a href="#Delete.returning-1463"><span class="linenos">1463</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-1464"><a href="#Delete.returning-1464"><span class="linenos">1464</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.returning-1465"><a href="#Delete.returning-1465"><span class="linenos">1465</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-1466"><a href="#Delete.returning-1466"><span class="linenos">1466</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete.returning-1467"><a href="#Delete.returning-1467"><span class="linenos">1467</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
+</span><span id="Delete.returning-1468"><a href="#Delete.returning-1468"><span class="linenos">1468</span></a>
+</span><span id="Delete.returning-1469"><a href="#Delete.returning-1469"><span class="linenos">1469</span></a><span class="sd"> Example:</span>
+</span><span id="Delete.returning-1470"><a href="#Delete.returning-1470"><span class="linenos">1470</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-1471"><a href="#Delete.returning-1471"><span class="linenos">1471</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
+</span><span id="Delete.returning-1472"><a href="#Delete.returning-1472"><span class="linenos">1472</span></a>
+</span><span id="Delete.returning-1473"><a href="#Delete.returning-1473"><span class="linenos">1473</span></a><span class="sd"> Args:</span>
+</span><span id="Delete.returning-1474"><a href="#Delete.returning-1474"><span class="linenos">1474</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="Delete.returning-1475"><a href="#Delete.returning-1475"><span class="linenos">1475</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete.returning-1476"><a href="#Delete.returning-1476"><span class="linenos">1476</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete.returning-1477"><a href="#Delete.returning-1477"><span class="linenos">1477</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete.returning-1478"><a href="#Delete.returning-1478"><span class="linenos">1478</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete.returning-1479"><a href="#Delete.returning-1479"><span class="linenos">1479</span></a>
+</span><span id="Delete.returning-1480"><a href="#Delete.returning-1480"><span class="linenos">1480</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete.returning-1481"><a href="#Delete.returning-1481"><span class="linenos">1481</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete.returning-1482"><a href="#Delete.returning-1482"><span class="linenos">1482</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete.returning-1483"><a href="#Delete.returning-1483"><span class="linenos">1483</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete.returning-1484"><a href="#Delete.returning-1484"><span class="linenos">1484</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-1485"><a href="#Delete.returning-1485"><span class="linenos">1485</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-1486"><a href="#Delete.returning-1486"><span class="linenos">1486</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-1487"><a href="#Delete.returning-1487"><span class="linenos">1487</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-1488"><a href="#Delete.returning-1488"><span class="linenos">1488</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-1489"><a href="#Delete.returning-1489"><span class="linenos">1489</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-1490"><a href="#Delete.returning-1490"><span class="linenos">1490</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-1491"><a href="#Delete.returning-1491"><span class="linenos">1491</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.returning-1492"><a href="#Delete.returning-1492"><span class="linenos">1492</span></a> <span class="p">)</span>
</span></pre></div>
@@ -21133,17 +21973,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-1472"><a href="#Drop-1472"><span class="linenos">1472</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-1473"><a href="#Drop-1473"><span class="linenos">1473</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drop-1474"><a href="#Drop-1474"><span class="linenos">1474</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-1475"><a href="#Drop-1475"><span class="linenos">1475</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-1476"><a href="#Drop-1476"><span class="linenos">1476</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-1477"><a href="#Drop-1477"><span class="linenos">1477</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-1478"><a href="#Drop-1478"><span class="linenos">1478</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-1479"><a href="#Drop-1479"><span class="linenos">1479</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-1480"><a href="#Drop-1480"><span class="linenos">1480</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-1481"><a href="#Drop-1481"><span class="linenos">1481</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-1482"><a href="#Drop-1482"><span class="linenos">1482</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Drop-1495"><a href="#Drop-1495"><span class="linenos">1495</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-1496"><a href="#Drop-1496"><span class="linenos">1496</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drop-1497"><a href="#Drop-1497"><span class="linenos">1497</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-1498"><a href="#Drop-1498"><span class="linenos">1498</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-1499"><a href="#Drop-1499"><span class="linenos">1499</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-1500"><a href="#Drop-1500"><span class="linenos">1500</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-1501"><a href="#Drop-1501"><span class="linenos">1501</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-1502"><a href="#Drop-1502"><span class="linenos">1502</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-1503"><a href="#Drop-1503"><span class="linenos">1503</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-1504"><a href="#Drop-1504"><span class="linenos">1504</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-1505"><a href="#Drop-1505"><span class="linenos">1505</span></a> <span class="p">}</span>
</span></pre></div>
@@ -21242,8 +22082,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-1485"><a href="#Filter-1485"><span class="linenos">1485</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-1486"><a href="#Filter-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;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-1508"><a href="#Filter-1508"><span class="linenos">1508</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-1509"><a href="#Filter-1509"><span class="linenos">1509</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -21341,8 +22181,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-1489"><a href="#Check-1489"><span class="linenos">1489</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-1490"><a href="#Check-1490"><span class="linenos">1490</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Check-1512"><a href="#Check-1512"><span class="linenos">1512</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-1513"><a href="#Check-1513"><span class="linenos">1513</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -21418,6 +22258,193 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
+ <section id="Connect">
+ <input id="Connect-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">Connect</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+
+ <label class="view-source-button" for="Connect-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Connect"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Connect-1517"><a href="#Connect-1517"><span class="linenos">1517</span></a><span class="k">class</span> <span class="nc">Connect</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Connect-1518"><a href="#Connect-1518"><span class="linenos">1518</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">False</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div id="Connect.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;start&#39;: False, &#39;connect&#39;: True}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Connect.arg_types"></a>
+
+
+
+ </div>
+ <div id="Connect.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;connect&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Connect.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="Connect.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="Connect.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="Connect.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="Connect.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="Connect.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="Connect.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="Connect.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="Connect.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="Connect.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="Connect.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="Connect.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="Connect.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="Connect.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="Connect.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="Connect.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="Connect.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="Connect.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="Connect.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="Connect.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="Connect.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="Connect.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="Connect.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="Connect.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="Connect.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="Connect.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="Connect.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="Connect.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="Connect.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="Connect.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="Connect.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="Connect.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="Connect.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="Connect.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="Connect.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="Connect.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="Connect.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="Connect.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="Connect.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="Connect.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="Connect.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="Connect.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="Connect.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="Connect.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="Connect.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="Connect.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="Connect.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="Connect.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="Connect.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Prior">
+ <input id="Prior-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">Prior</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+
+ <label class="view-source-button" for="Prior-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Prior"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Prior-1521"><a href="#Prior-1521"><span class="linenos">1521</span></a><span class="k">class</span> <span class="nc">Prior</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Prior-1522"><a href="#Prior-1522"><span class="linenos">1522</span></a> <span class="k">pass</span>
+</span></pre></div>
+
+
+
+
+ <div id="Prior.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;prior&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Prior.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="Prior.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="Prior.arg_types" class="variable"><a href="#Expression.arg_types">arg_types</a></dd>
+ <dd id="Prior.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="Prior.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="Prior.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="Prior.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="Prior.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="Prior.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="Prior.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="Prior.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="Prior.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="Prior.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="Prior.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="Prior.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="Prior.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="Prior.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="Prior.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="Prior.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="Prior.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="Prior.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="Prior.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="Prior.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="Prior.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="Prior.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="Prior.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="Prior.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="Prior.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="Prior.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="Prior.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="Prior.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="Prior.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="Prior.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="Prior.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="Prior.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="Prior.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="Prior.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="Prior.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="Prior.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="Prior.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="Prior.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="Prior.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="Prior.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="Prior.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="Prior.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="Prior.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="Prior.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="Prior.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="Prior.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="Prior.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="Directory">
<input id="Directory-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -21429,9 +22456,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-1493"><a href="#Directory-1493"><span class="linenos">1493</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-1494"><a href="#Directory-1494"><span class="linenos">1494</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-1495"><a href="#Directory-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;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-1525"><a href="#Directory-1525"><span class="linenos">1525</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-1526"><a href="#Directory-1526"><span class="linenos">1526</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-1527"><a href="#Directory-1527"><span class="linenos">1527</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -21529,13 +22556,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-1498"><a href="#ForeignKey-1498"><span class="linenos">1498</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-1499"><a href="#ForeignKey-1499"><span class="linenos">1499</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ForeignKey-1500"><a href="#ForeignKey-1500"><span class="linenos">1500</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-1501"><a href="#ForeignKey-1501"><span class="linenos">1501</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-1502"><a href="#ForeignKey-1502"><span class="linenos">1502</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-1503"><a href="#ForeignKey-1503"><span class="linenos">1503</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-1504"><a href="#ForeignKey-1504"><span class="linenos">1504</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ForeignKey-1530"><a href="#ForeignKey-1530"><span class="linenos">1530</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-1531"><a href="#ForeignKey-1531"><span class="linenos">1531</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ForeignKey-1532"><a href="#ForeignKey-1532"><span class="linenos">1532</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-1533"><a href="#ForeignKey-1533"><span class="linenos">1533</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-1534"><a href="#ForeignKey-1534"><span class="linenos">1534</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-1535"><a href="#ForeignKey-1535"><span class="linenos">1535</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-1536"><a href="#ForeignKey-1536"><span class="linenos">1536</span></a> <span class="p">}</span>
</span></pre></div>
@@ -21633,8 +22660,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-1507"><a href="#PrimaryKey-1507"><span class="linenos">1507</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-1508"><a href="#PrimaryKey-1508"><span class="linenos">1508</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-1539"><a href="#PrimaryKey-1539"><span class="linenos">1539</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-1540"><a href="#PrimaryKey-1540"><span class="linenos">1540</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>
@@ -21732,8 +22759,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-1513"><a href="#Into-1513"><span class="linenos">1513</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-1514"><a href="#Into-1514"><span class="linenos">1514</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1545"><a href="#Into-1545"><span class="linenos">1545</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-1546"><a href="#Into-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;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>
@@ -21831,14 +22858,14 @@ 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-1517"><a href="#From-1517"><span class="linenos">1517</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-1518"><a href="#From-1518"><span class="linenos">1518</span></a> <span class="nd">@property</span>
-</span><span id="From-1519"><a href="#From-1519"><span class="linenos">1519</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="From-1520"><a href="#From-1520"><span class="linenos">1520</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="From-1521"><a href="#From-1521"><span class="linenos">1521</span></a>
-</span><span id="From-1522"><a href="#From-1522"><span class="linenos">1522</span></a> <span class="nd">@property</span>
-</span><span id="From-1523"><a href="#From-1523"><span class="linenos">1523</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="From-1524"><a href="#From-1524"><span class="linenos">1524</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="From-1549"><a href="#From-1549"><span class="linenos">1549</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-1550"><a href="#From-1550"><span class="linenos">1550</span></a> <span class="nd">@property</span>
+</span><span id="From-1551"><a href="#From-1551"><span class="linenos">1551</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="From-1552"><a href="#From-1552"><span class="linenos">1552</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="From-1553"><a href="#From-1553"><span class="linenos">1553</span></a>
+</span><span id="From-1554"><a href="#From-1554"><span class="linenos">1554</span></a> <span class="nd">@property</span>
+</span><span id="From-1555"><a href="#From-1555"><span class="linenos">1555</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="From-1556"><a href="#From-1556"><span class="linenos">1556</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></pre></div>
@@ -21945,8 +22972,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-1527"><a href="#Having-1527"><span class="linenos">1527</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-1528"><a href="#Having-1528"><span class="linenos">1528</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Having-1559"><a href="#Having-1559"><span class="linenos">1559</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-1560"><a href="#Having-1560"><span class="linenos">1560</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -22033,8 +23060,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-1531"><a href="#Hint-1531"><span class="linenos">1531</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-1532"><a href="#Hint-1532"><span class="linenos">1532</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-1563"><a href="#Hint-1563"><span class="linenos">1563</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-1564"><a href="#Hint-1564"><span class="linenos">1564</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>
@@ -22132,8 +23159,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-1535"><a href="#JoinHint-1535"><span class="linenos">1535</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-1536"><a href="#JoinHint-1536"><span class="linenos">1536</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1567"><a href="#JoinHint-1567"><span class="linenos">1567</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-1568"><a href="#JoinHint-1568"><span class="linenos">1568</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -22231,20 +23258,20 @@ 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-1539"><a href="#Identifier-1539"><span class="linenos">1539</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-1540"><a href="#Identifier-1540"><span class="linenos">1540</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="Identifier-1541"><a href="#Identifier-1541"><span class="linenos">1541</span></a>
-</span><span id="Identifier-1542"><a href="#Identifier-1542"><span class="linenos">1542</span></a> <span class="nd">@property</span>
-</span><span id="Identifier-1543"><a href="#Identifier-1543"><span class="linenos">1543</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 class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Identifier-1544"><a href="#Identifier-1544"><span class="linenos">1544</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-1545"><a href="#Identifier-1545"><span class="linenos">1545</span></a>
-</span><span id="Identifier-1546"><a href="#Identifier-1546"><span class="linenos">1546</span></a> <span class="nd">@property</span>
-</span><span id="Identifier-1547"><a href="#Identifier-1547"><span class="linenos">1547</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-1548"><a href="#Identifier-1548"><span class="linenos">1548</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-1549"><a href="#Identifier-1549"><span class="linenos">1549</span></a>
-</span><span id="Identifier-1550"><a href="#Identifier-1550"><span class="linenos">1550</span></a> <span class="nd">@property</span>
-</span><span id="Identifier-1551"><a href="#Identifier-1551"><span class="linenos">1551</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="Identifier-1552"><a href="#Identifier-1552"><span class="linenos">1552</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-1571"><a href="#Identifier-1571"><span class="linenos">1571</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-1572"><a href="#Identifier-1572"><span class="linenos">1572</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="Identifier-1573"><a href="#Identifier-1573"><span class="linenos">1573</span></a>
+</span><span id="Identifier-1574"><a href="#Identifier-1574"><span class="linenos">1574</span></a> <span class="nd">@property</span>
+</span><span id="Identifier-1575"><a href="#Identifier-1575"><span class="linenos">1575</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 class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Identifier-1576"><a href="#Identifier-1576"><span class="linenos">1576</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-1577"><a href="#Identifier-1577"><span class="linenos">1577</span></a>
+</span><span id="Identifier-1578"><a href="#Identifier-1578"><span class="linenos">1578</span></a> <span class="nd">@property</span>
+</span><span id="Identifier-1579"><a href="#Identifier-1579"><span class="linenos">1579</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-1580"><a href="#Identifier-1580"><span class="linenos">1580</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-1581"><a href="#Identifier-1581"><span class="linenos">1581</span></a>
+</span><span id="Identifier-1582"><a href="#Identifier-1582"><span class="linenos">1582</span></a> <span class="nd">@property</span>
+</span><span id="Identifier-1583"><a href="#Identifier-1583"><span class="linenos">1583</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="Identifier-1584"><a href="#Identifier-1584"><span class="linenos">1584</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -22392,18 +23419,18 @@ 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-1555"><a href="#Index-1555"><span class="linenos">1555</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-1556"><a href="#Index-1556"><span class="linenos">1556</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Index-1557"><a href="#Index-1557"><span class="linenos">1557</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-1558"><a href="#Index-1558"><span class="linenos">1558</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-1559"><a href="#Index-1559"><span class="linenos">1559</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="Index-1560"><a href="#Index-1560"><span class="linenos">1560</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-1561"><a href="#Index-1561"><span class="linenos">1561</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-1562"><a href="#Index-1562"><span class="linenos">1562</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-1563"><a href="#Index-1563"><span class="linenos">1563</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-1564"><a href="#Index-1564"><span class="linenos">1564</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-1565"><a href="#Index-1565"><span class="linenos">1565</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
-</span><span id="Index-1566"><a href="#Index-1566"><span class="linenos">1566</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Index-1587"><a href="#Index-1587"><span class="linenos">1587</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-1588"><a href="#Index-1588"><span class="linenos">1588</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Index-1589"><a href="#Index-1589"><span class="linenos">1589</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-1590"><a href="#Index-1590"><span class="linenos">1590</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-1591"><a href="#Index-1591"><span class="linenos">1591</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="Index-1592"><a href="#Index-1592"><span class="linenos">1592</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-1593"><a href="#Index-1593"><span class="linenos">1593</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-1594"><a href="#Index-1594"><span class="linenos">1594</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-1595"><a href="#Index-1595"><span class="linenos">1595</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-1596"><a href="#Index-1596"><span class="linenos">1596</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-1597"><a href="#Index-1597"><span class="linenos">1597</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
+</span><span id="Index-1598"><a href="#Index-1598"><span class="linenos">1598</span></a> <span class="p">}</span>
</span></pre></div>
@@ -22502,56 +23529,57 @@ 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-1569"><a href="#Insert-1569"><span class="linenos">1569</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">DDL</span><span class="p">):</span>
-</span><span id="Insert-1570"><a href="#Insert-1570"><span class="linenos">1570</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Insert-1571"><a href="#Insert-1571"><span class="linenos">1571</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-1572"><a href="#Insert-1572"><span class="linenos">1572</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-1573"><a href="#Insert-1573"><span class="linenos">1573</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-1574"><a href="#Insert-1574"><span class="linenos">1574</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-1575"><a href="#Insert-1575"><span class="linenos">1575</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-1576"><a href="#Insert-1576"><span class="linenos">1576</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-1577"><a href="#Insert-1577"><span class="linenos">1577</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-1578"><a href="#Insert-1578"><span class="linenos">1578</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-1579"><a href="#Insert-1579"><span class="linenos">1579</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-1580"><a href="#Insert-1580"><span class="linenos">1580</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="Insert-1581"><a href="#Insert-1581"><span class="linenos">1581</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1582"><a href="#Insert-1582"><span class="linenos">1582</span></a> <span class="p">}</span>
-</span><span id="Insert-1583"><a href="#Insert-1583"><span class="linenos">1583</span></a>
-</span><span id="Insert-1584"><a href="#Insert-1584"><span class="linenos">1584</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="Insert-1585"><a href="#Insert-1585"><span class="linenos">1585</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Insert-1586"><a href="#Insert-1586"><span class="linenos">1586</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Insert-1587"><a href="#Insert-1587"><span class="linenos">1587</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Insert-1588"><a href="#Insert-1588"><span class="linenos">1588</span></a> <span class="n">recursive</span><span 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="Insert-1589"><a href="#Insert-1589"><span class="linenos">1589</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="Insert-1590"><a href="#Insert-1590"><span class="linenos">1590</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="Insert-1591"><a href="#Insert-1591"><span class="linenos">1591</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="Insert-1592"><a href="#Insert-1592"><span class="linenos">1592</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Insert-1593"><a href="#Insert-1593"><span class="linenos">1593</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
-</span><span id="Insert-1594"><a href="#Insert-1594"><span class="linenos">1594</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Insert-1595"><a href="#Insert-1595"><span class="linenos">1595</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="Insert-1596"><a href="#Insert-1596"><span class="linenos">1596</span></a>
-</span><span id="Insert-1597"><a href="#Insert-1597"><span class="linenos">1597</span></a><span class="sd"> Example:</span>
-</span><span id="Insert-1598"><a href="#Insert-1598"><span class="linenos">1598</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;SELECT x FROM cte&quot;, &quot;t&quot;).with_(&quot;cte&quot;, as_=&quot;SELECT * FROM tbl&quot;).sql()</span>
-</span><span id="Insert-1599"><a href="#Insert-1599"><span class="linenos">1599</span></a><span class="sd"> &#39;WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte&#39;</span>
-</span><span id="Insert-1600"><a href="#Insert-1600"><span class="linenos">1600</span></a>
-</span><span id="Insert-1601"><a href="#Insert-1601"><span class="linenos">1601</span></a><span class="sd"> Args:</span>
-</span><span id="Insert-1602"><a href="#Insert-1602"><span class="linenos">1602</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
-</span><span id="Insert-1603"><a href="#Insert-1603"><span class="linenos">1603</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="Insert-1604"><a href="#Insert-1604"><span class="linenos">1604</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
-</span><span id="Insert-1605"><a href="#Insert-1605"><span class="linenos">1605</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Insert-1606"><a href="#Insert-1606"><span class="linenos">1606</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="Insert-1607"><a href="#Insert-1607"><span class="linenos">1607</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Insert-1608"><a href="#Insert-1608"><span class="linenos">1608</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Insert-1609"><a href="#Insert-1609"><span class="linenos">1609</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Insert-1610"><a href="#Insert-1610"><span class="linenos">1610</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Insert-1611"><a href="#Insert-1611"><span class="linenos">1611</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Insert-1612"><a href="#Insert-1612"><span class="linenos">1612</span></a>
-</span><span id="Insert-1613"><a href="#Insert-1613"><span class="linenos">1613</span></a><span class="sd"> Returns:</span>
-</span><span id="Insert-1614"><a href="#Insert-1614"><span class="linenos">1614</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Insert-1615"><a href="#Insert-1615"><span class="linenos">1615</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Insert-1616"><a href="#Insert-1616"><span class="linenos">1616</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
-</span><span id="Insert-1617"><a href="#Insert-1617"><span class="linenos">1617</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Insert-1618"><a href="#Insert-1618"><span class="linenos">1618</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Insert-1601"><a href="#Insert-1601"><span class="linenos">1601</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">DDL</span><span class="p">):</span>
+</span><span id="Insert-1602"><a href="#Insert-1602"><span class="linenos">1602</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Insert-1603"><a href="#Insert-1603"><span class="linenos">1603</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-1604"><a href="#Insert-1604"><span class="linenos">1604</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-1605"><a href="#Insert-1605"><span class="linenos">1605</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-1606"><a href="#Insert-1606"><span class="linenos">1606</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-1607"><a href="#Insert-1607"><span class="linenos">1607</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-1608"><a href="#Insert-1608"><span class="linenos">1608</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-1609"><a href="#Insert-1609"><span class="linenos">1609</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-1610"><a href="#Insert-1610"><span class="linenos">1610</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-1611"><a href="#Insert-1611"><span class="linenos">1611</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-1612"><a href="#Insert-1612"><span class="linenos">1612</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="Insert-1613"><a href="#Insert-1613"><span class="linenos">1613</span></a> <span class="s2">&quot;ignore&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1614"><a href="#Insert-1614"><span class="linenos">1614</span></a> <span class="s2">&quot;by_name&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1615"><a href="#Insert-1615"><span class="linenos">1615</span></a> <span class="p">}</span>
+</span><span id="Insert-1616"><a href="#Insert-1616"><span class="linenos">1616</span></a>
+</span><span id="Insert-1617"><a href="#Insert-1617"><span class="linenos">1617</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="Insert-1618"><a href="#Insert-1618"><span class="linenos">1618</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Insert-1619"><a href="#Insert-1619"><span class="linenos">1619</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Insert-1620"><a href="#Insert-1620"><span class="linenos">1620</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Insert-1621"><a href="#Insert-1621"><span class="linenos">1621</span></a> <span class="n">recursive</span><span 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="Insert-1622"><a href="#Insert-1622"><span class="linenos">1622</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="Insert-1623"><a href="#Insert-1623"><span class="linenos">1623</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="Insert-1624"><a href="#Insert-1624"><span class="linenos">1624</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="Insert-1625"><a href="#Insert-1625"><span class="linenos">1625</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Insert-1626"><a href="#Insert-1626"><span class="linenos">1626</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
+</span><span id="Insert-1627"><a href="#Insert-1627"><span class="linenos">1627</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Insert-1628"><a href="#Insert-1628"><span class="linenos">1628</span></a><span class="sd"> Append to or set the common table expressions.</span>
+</span><span id="Insert-1629"><a href="#Insert-1629"><span class="linenos">1629</span></a>
+</span><span id="Insert-1630"><a href="#Insert-1630"><span class="linenos">1630</span></a><span class="sd"> Example:</span>
+</span><span id="Insert-1631"><a href="#Insert-1631"><span class="linenos">1631</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;SELECT x FROM cte&quot;, &quot;t&quot;).with_(&quot;cte&quot;, as_=&quot;SELECT * FROM tbl&quot;).sql()</span>
+</span><span id="Insert-1632"><a href="#Insert-1632"><span class="linenos">1632</span></a><span class="sd"> &#39;WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte&#39;</span>
+</span><span id="Insert-1633"><a href="#Insert-1633"><span class="linenos">1633</span></a>
+</span><span id="Insert-1634"><a href="#Insert-1634"><span class="linenos">1634</span></a><span class="sd"> Args:</span>
+</span><span id="Insert-1635"><a href="#Insert-1635"><span class="linenos">1635</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
+</span><span id="Insert-1636"><a href="#Insert-1636"><span class="linenos">1636</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="Insert-1637"><a href="#Insert-1637"><span class="linenos">1637</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
+</span><span id="Insert-1638"><a href="#Insert-1638"><span class="linenos">1638</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Insert-1639"><a href="#Insert-1639"><span class="linenos">1639</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="Insert-1640"><a href="#Insert-1640"><span class="linenos">1640</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Insert-1641"><a href="#Insert-1641"><span class="linenos">1641</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Insert-1642"><a href="#Insert-1642"><span class="linenos">1642</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Insert-1643"><a href="#Insert-1643"><span class="linenos">1643</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Insert-1644"><a href="#Insert-1644"><span class="linenos">1644</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Insert-1645"><a href="#Insert-1645"><span class="linenos">1645</span></a>
+</span><span id="Insert-1646"><a href="#Insert-1646"><span class="linenos">1646</span></a><span class="sd"> Returns:</span>
+</span><span id="Insert-1647"><a href="#Insert-1647"><span class="linenos">1647</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Insert-1648"><a href="#Insert-1648"><span class="linenos">1648</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Insert-1649"><a href="#Insert-1649"><span class="linenos">1649</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="Insert-1650"><a href="#Insert-1650"><span class="linenos">1650</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Insert-1651"><a href="#Insert-1651"><span class="linenos">1651</span></a> <span class="p">)</span>
</span></pre></div>
@@ -22561,7 +23589,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Insert.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Insert.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;this&#39;: True, &#39;expression&#39;: False, &#39;conflict&#39;: False, &#39;returning&#39;: False, &#39;overwrite&#39;: False, &#39;exists&#39;: False, &#39;partition&#39;: False, &#39;alternative&#39;: False, &#39;where&#39;: False, &#39;ignore&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Insert.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;this&#39;: True, &#39;expression&#39;: False, &#39;conflict&#39;: False, &#39;returning&#39;: False, &#39;overwrite&#39;: False, &#39;exists&#39;: False, &#39;partition&#39;: False, &#39;alternative&#39;: False, &#39;where&#39;: False, &#39;ignore&#39;: False, &#39;by_name&#39;: False}</span>
</div>
@@ -22581,41 +23609,41 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Insert.with_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Insert.with_-1584"><a href="#Insert.with_-1584"><span class="linenos">1584</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="Insert.with_-1585"><a href="#Insert.with_-1585"><span class="linenos">1585</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Insert.with_-1586"><a href="#Insert.with_-1586"><span class="linenos">1586</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Insert.with_-1587"><a href="#Insert.with_-1587"><span class="linenos">1587</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Insert.with_-1588"><a href="#Insert.with_-1588"><span class="linenos">1588</span></a> <span class="n">recursive</span><span 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="Insert.with_-1589"><a href="#Insert.with_-1589"><span class="linenos">1589</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="Insert.with_-1590"><a href="#Insert.with_-1590"><span class="linenos">1590</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="Insert.with_-1591"><a href="#Insert.with_-1591"><span class="linenos">1591</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="Insert.with_-1592"><a href="#Insert.with_-1592"><span class="linenos">1592</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Insert.with_-1593"><a href="#Insert.with_-1593"><span class="linenos">1593</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
-</span><span id="Insert.with_-1594"><a href="#Insert.with_-1594"><span class="linenos">1594</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Insert.with_-1595"><a href="#Insert.with_-1595"><span class="linenos">1595</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="Insert.with_-1596"><a href="#Insert.with_-1596"><span class="linenos">1596</span></a>
-</span><span id="Insert.with_-1597"><a href="#Insert.with_-1597"><span class="linenos">1597</span></a><span class="sd"> Example:</span>
-</span><span id="Insert.with_-1598"><a href="#Insert.with_-1598"><span class="linenos">1598</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;SELECT x FROM cte&quot;, &quot;t&quot;).with_(&quot;cte&quot;, as_=&quot;SELECT * FROM tbl&quot;).sql()</span>
-</span><span id="Insert.with_-1599"><a href="#Insert.with_-1599"><span class="linenos">1599</span></a><span class="sd"> &#39;WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte&#39;</span>
-</span><span id="Insert.with_-1600"><a href="#Insert.with_-1600"><span class="linenos">1600</span></a>
-</span><span id="Insert.with_-1601"><a href="#Insert.with_-1601"><span class="linenos">1601</span></a><span class="sd"> Args:</span>
-</span><span id="Insert.with_-1602"><a href="#Insert.with_-1602"><span class="linenos">1602</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
-</span><span id="Insert.with_-1603"><a href="#Insert.with_-1603"><span class="linenos">1603</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="Insert.with_-1604"><a href="#Insert.with_-1604"><span class="linenos">1604</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
-</span><span id="Insert.with_-1605"><a href="#Insert.with_-1605"><span class="linenos">1605</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Insert.with_-1606"><a href="#Insert.with_-1606"><span class="linenos">1606</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="Insert.with_-1607"><a href="#Insert.with_-1607"><span class="linenos">1607</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Insert.with_-1608"><a href="#Insert.with_-1608"><span class="linenos">1608</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Insert.with_-1609"><a href="#Insert.with_-1609"><span class="linenos">1609</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Insert.with_-1610"><a href="#Insert.with_-1610"><span class="linenos">1610</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Insert.with_-1611"><a href="#Insert.with_-1611"><span class="linenos">1611</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Insert.with_-1612"><a href="#Insert.with_-1612"><span class="linenos">1612</span></a>
-</span><span id="Insert.with_-1613"><a href="#Insert.with_-1613"><span class="linenos">1613</span></a><span class="sd"> Returns:</span>
-</span><span id="Insert.with_-1614"><a href="#Insert.with_-1614"><span class="linenos">1614</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Insert.with_-1615"><a href="#Insert.with_-1615"><span class="linenos">1615</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Insert.with_-1616"><a href="#Insert.with_-1616"><span class="linenos">1616</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
-</span><span id="Insert.with_-1617"><a href="#Insert.with_-1617"><span class="linenos">1617</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Insert.with_-1618"><a href="#Insert.with_-1618"><span class="linenos">1618</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Insert.with_-1617"><a href="#Insert.with_-1617"><span class="linenos">1617</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="Insert.with_-1618"><a href="#Insert.with_-1618"><span class="linenos">1618</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Insert.with_-1619"><a href="#Insert.with_-1619"><span class="linenos">1619</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Insert.with_-1620"><a href="#Insert.with_-1620"><span class="linenos">1620</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Insert.with_-1621"><a href="#Insert.with_-1621"><span class="linenos">1621</span></a> <span class="n">recursive</span><span 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="Insert.with_-1622"><a href="#Insert.with_-1622"><span class="linenos">1622</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="Insert.with_-1623"><a href="#Insert.with_-1623"><span class="linenos">1623</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="Insert.with_-1624"><a href="#Insert.with_-1624"><span class="linenos">1624</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="Insert.with_-1625"><a href="#Insert.with_-1625"><span class="linenos">1625</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Insert.with_-1626"><a href="#Insert.with_-1626"><span class="linenos">1626</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
+</span><span id="Insert.with_-1627"><a href="#Insert.with_-1627"><span class="linenos">1627</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Insert.with_-1628"><a href="#Insert.with_-1628"><span class="linenos">1628</span></a><span class="sd"> Append to or set the common table expressions.</span>
+</span><span id="Insert.with_-1629"><a href="#Insert.with_-1629"><span class="linenos">1629</span></a>
+</span><span id="Insert.with_-1630"><a href="#Insert.with_-1630"><span class="linenos">1630</span></a><span class="sd"> Example:</span>
+</span><span id="Insert.with_-1631"><a href="#Insert.with_-1631"><span class="linenos">1631</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;SELECT x FROM cte&quot;, &quot;t&quot;).with_(&quot;cte&quot;, as_=&quot;SELECT * FROM tbl&quot;).sql()</span>
+</span><span id="Insert.with_-1632"><a href="#Insert.with_-1632"><span class="linenos">1632</span></a><span class="sd"> &#39;WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte&#39;</span>
+</span><span id="Insert.with_-1633"><a href="#Insert.with_-1633"><span class="linenos">1633</span></a>
+</span><span id="Insert.with_-1634"><a href="#Insert.with_-1634"><span class="linenos">1634</span></a><span class="sd"> Args:</span>
+</span><span id="Insert.with_-1635"><a href="#Insert.with_-1635"><span class="linenos">1635</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
+</span><span id="Insert.with_-1636"><a href="#Insert.with_-1636"><span class="linenos">1636</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="Insert.with_-1637"><a href="#Insert.with_-1637"><span class="linenos">1637</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
+</span><span id="Insert.with_-1638"><a href="#Insert.with_-1638"><span class="linenos">1638</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Insert.with_-1639"><a href="#Insert.with_-1639"><span class="linenos">1639</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="Insert.with_-1640"><a href="#Insert.with_-1640"><span class="linenos">1640</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Insert.with_-1641"><a href="#Insert.with_-1641"><span class="linenos">1641</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Insert.with_-1642"><a href="#Insert.with_-1642"><span class="linenos">1642</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Insert.with_-1643"><a href="#Insert.with_-1643"><span class="linenos">1643</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Insert.with_-1644"><a href="#Insert.with_-1644"><span class="linenos">1644</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Insert.with_-1645"><a href="#Insert.with_-1645"><span class="linenos">1645</span></a>
+</span><span id="Insert.with_-1646"><a href="#Insert.with_-1646"><span class="linenos">1646</span></a><span class="sd"> Returns:</span>
+</span><span id="Insert.with_-1647"><a href="#Insert.with_-1647"><span class="linenos">1647</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Insert.with_-1648"><a href="#Insert.with_-1648"><span class="linenos">1648</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Insert.with_-1649"><a href="#Insert.with_-1649"><span class="linenos">1649</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="Insert.with_-1650"><a href="#Insert.with_-1650"><span class="linenos">1650</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Insert.with_-1651"><a href="#Insert.with_-1651"><span class="linenos">1651</span></a> <span class="p">)</span>
</span></pre></div>
@@ -22741,14 +23769,14 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#OnConflict"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OnConflict-1621"><a href="#OnConflict-1621"><span class="linenos">1621</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-1622"><a href="#OnConflict-1622"><span class="linenos">1622</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="OnConflict-1623"><a href="#OnConflict-1623"><span class="linenos">1623</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-1624"><a href="#OnConflict-1624"><span class="linenos">1624</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-1625"><a href="#OnConflict-1625"><span class="linenos">1625</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-1626"><a href="#OnConflict-1626"><span class="linenos">1626</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-1627"><a href="#OnConflict-1627"><span class="linenos">1627</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-1628"><a href="#OnConflict-1628"><span class="linenos">1628</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="OnConflict-1654"><a href="#OnConflict-1654"><span class="linenos">1654</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-1655"><a href="#OnConflict-1655"><span class="linenos">1655</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="OnConflict-1656"><a href="#OnConflict-1656"><span class="linenos">1656</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-1657"><a href="#OnConflict-1657"><span class="linenos">1657</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-1658"><a href="#OnConflict-1658"><span class="linenos">1658</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-1659"><a href="#OnConflict-1659"><span class="linenos">1659</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-1660"><a href="#OnConflict-1660"><span class="linenos">1660</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-1661"><a href="#OnConflict-1661"><span class="linenos">1661</span></a> <span class="p">}</span>
</span></pre></div>
@@ -22846,8 +23874,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Returning"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Returning-1631"><a href="#Returning-1631"><span class="linenos">1631</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-1632"><a href="#Returning-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;into&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="Returning-1664"><a href="#Returning-1664"><span class="linenos">1664</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-1665"><a href="#Returning-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -22945,8 +23973,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Introducer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Introducer-1636"><a href="#Introducer-1636"><span class="linenos">1636</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-1637"><a href="#Introducer-1637"><span class="linenos">1637</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1669"><a href="#Introducer-1669"><span class="linenos">1669</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-1670"><a href="#Introducer-1670"><span class="linenos">1670</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -23044,8 +24072,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#National"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="National-1641"><a href="#National-1641"><span class="linenos">1641</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-1642"><a href="#National-1642"><span class="linenos">1642</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="National-1674"><a href="#National-1674"><span class="linenos">1674</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-1675"><a href="#National-1675"><span class="linenos">1675</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -23132,16 +24160,16 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#LoadData"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LoadData-1645"><a href="#LoadData-1645"><span class="linenos">1645</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-1646"><a href="#LoadData-1646"><span class="linenos">1646</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="LoadData-1647"><a href="#LoadData-1647"><span class="linenos">1647</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-1648"><a href="#LoadData-1648"><span class="linenos">1648</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-1649"><a href="#LoadData-1649"><span class="linenos">1649</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-1650"><a href="#LoadData-1650"><span class="linenos">1650</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-1651"><a href="#LoadData-1651"><span class="linenos">1651</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-1652"><a href="#LoadData-1652"><span class="linenos">1652</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-1653"><a href="#LoadData-1653"><span class="linenos">1653</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-1654"><a href="#LoadData-1654"><span class="linenos">1654</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LoadData-1678"><a href="#LoadData-1678"><span class="linenos">1678</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-1679"><a href="#LoadData-1679"><span class="linenos">1679</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="LoadData-1680"><a href="#LoadData-1680"><span class="linenos">1680</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-1681"><a href="#LoadData-1681"><span class="linenos">1681</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-1682"><a href="#LoadData-1682"><span class="linenos">1682</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-1683"><a href="#LoadData-1683"><span class="linenos">1683</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-1684"><a href="#LoadData-1684"><span class="linenos">1684</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-1685"><a href="#LoadData-1685"><span class="linenos">1685</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-1686"><a href="#LoadData-1686"><span class="linenos">1686</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-1687"><a href="#LoadData-1687"><span class="linenos">1687</span></a> <span class="p">}</span>
</span></pre></div>
@@ -23240,8 +24268,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Partition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Partition-1657"><a href="#Partition-1657"><span class="linenos">1657</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-1658"><a href="#Partition-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;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-1690"><a href="#Partition-1690"><span class="linenos">1690</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-1691"><a href="#Partition-1691"><span class="linenos">1691</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>
@@ -23339,13 +24367,13 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Fetch"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Fetch-1661"><a href="#Fetch-1661"><span class="linenos">1661</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-1662"><a href="#Fetch-1662"><span class="linenos">1662</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Fetch-1663"><a href="#Fetch-1663"><span class="linenos">1663</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-1664"><a href="#Fetch-1664"><span class="linenos">1664</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-1665"><a href="#Fetch-1665"><span class="linenos">1665</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-1666"><a href="#Fetch-1666"><span class="linenos">1666</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-1667"><a href="#Fetch-1667"><span class="linenos">1667</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Fetch-1694"><a href="#Fetch-1694"><span class="linenos">1694</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-1695"><a href="#Fetch-1695"><span class="linenos">1695</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Fetch-1696"><a href="#Fetch-1696"><span class="linenos">1696</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-1697"><a href="#Fetch-1697"><span class="linenos">1697</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-1698"><a href="#Fetch-1698"><span class="linenos">1698</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-1699"><a href="#Fetch-1699"><span class="linenos">1699</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-1700"><a href="#Fetch-1700"><span class="linenos">1700</span></a> <span class="p">}</span>
</span></pre></div>
@@ -23443,15 +24471,15 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Group"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Group-1670"><a href="#Group-1670"><span class="linenos">1670</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-1671"><a href="#Group-1671"><span class="linenos">1671</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Group-1672"><a href="#Group-1672"><span class="linenos">1672</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-1673"><a href="#Group-1673"><span class="linenos">1673</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-1674"><a href="#Group-1674"><span class="linenos">1674</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-1675"><a href="#Group-1675"><span class="linenos">1675</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-1676"><a href="#Group-1676"><span class="linenos">1676</span></a> <span class="s2">&quot;totals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Group-1677"><a href="#Group-1677"><span class="linenos">1677</span></a> <span class="s2">&quot;all&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Group-1678"><a href="#Group-1678"><span class="linenos">1678</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Group-1703"><a href="#Group-1703"><span class="linenos">1703</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-1704"><a href="#Group-1704"><span class="linenos">1704</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Group-1705"><a href="#Group-1705"><span class="linenos">1705</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-1706"><a href="#Group-1706"><span class="linenos">1706</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-1707"><a href="#Group-1707"><span class="linenos">1707</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-1708"><a href="#Group-1708"><span class="linenos">1708</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-1709"><a href="#Group-1709"><span class="linenos">1709</span></a> <span class="s2">&quot;totals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Group-1710"><a href="#Group-1710"><span class="linenos">1710</span></a> <span class="s2">&quot;all&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Group-1711"><a href="#Group-1711"><span class="linenos">1711</span></a> <span class="p">}</span>
</span></pre></div>
@@ -23550,8 +24578,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Lambda"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Lambda-1681"><a href="#Lambda-1681"><span class="linenos">1681</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-1682"><a href="#Lambda-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> <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-1714"><a href="#Lambda-1714"><span class="linenos">1714</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-1715"><a href="#Lambda-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -23649,8 +24677,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Limit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Limit-1685"><a href="#Limit-1685"><span class="linenos">1685</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-1686"><a href="#Limit-1686"><span class="linenos">1686</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Limit-1718"><a href="#Limit-1718"><span class="linenos">1718</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-1719"><a href="#Limit-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;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -23748,24 +24776,24 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Literal-1689"><a href="#Literal-1689"><span class="linenos">1689</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-1690"><a href="#Literal-1690"><span class="linenos">1690</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1691"><a href="#Literal-1691"><span class="linenos">1691</span></a>
-</span><span id="Literal-1692"><a href="#Literal-1692"><span class="linenos">1692</span></a> <span class="nd">@property</span>
-</span><span id="Literal-1693"><a href="#Literal-1693"><span class="linenos">1693</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-1694"><a href="#Literal-1694"><span class="linenos">1694</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-1695"><a href="#Literal-1695"><span class="linenos">1695</span></a>
-</span><span id="Literal-1696"><a href="#Literal-1696"><span class="linenos">1696</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal-1697"><a href="#Literal-1697"><span class="linenos">1697</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-1698"><a href="#Literal-1698"><span class="linenos">1698</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-1699"><a href="#Literal-1699"><span class="linenos">1699</span></a>
-</span><span id="Literal-1700"><a href="#Literal-1700"><span class="linenos">1700</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal-1701"><a href="#Literal-1701"><span class="linenos">1701</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-1702"><a href="#Literal-1702"><span class="linenos">1702</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-1703"><a href="#Literal-1703"><span class="linenos">1703</span></a>
-</span><span id="Literal-1704"><a href="#Literal-1704"><span class="linenos">1704</span></a> <span class="nd">@property</span>
-</span><span id="Literal-1705"><a href="#Literal-1705"><span class="linenos">1705</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="Literal-1706"><a href="#Literal-1706"><span class="linenos">1706</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-1722"><a href="#Literal-1722"><span class="linenos">1722</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-1723"><a href="#Literal-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> <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-1724"><a href="#Literal-1724"><span class="linenos">1724</span></a>
+</span><span id="Literal-1725"><a href="#Literal-1725"><span class="linenos">1725</span></a> <span class="nd">@property</span>
+</span><span id="Literal-1726"><a href="#Literal-1726"><span class="linenos">1726</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-1727"><a href="#Literal-1727"><span class="linenos">1727</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-1728"><a href="#Literal-1728"><span class="linenos">1728</span></a>
+</span><span id="Literal-1729"><a href="#Literal-1729"><span class="linenos">1729</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal-1730"><a href="#Literal-1730"><span class="linenos">1730</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-1731"><a href="#Literal-1731"><span class="linenos">1731</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-1732"><a href="#Literal-1732"><span class="linenos">1732</span></a>
+</span><span id="Literal-1733"><a href="#Literal-1733"><span class="linenos">1733</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal-1734"><a href="#Literal-1734"><span class="linenos">1734</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-1735"><a href="#Literal-1735"><span class="linenos">1735</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-1736"><a href="#Literal-1736"><span class="linenos">1736</span></a>
+</span><span id="Literal-1737"><a href="#Literal-1737"><span class="linenos">1737</span></a> <span class="nd">@property</span>
+</span><span id="Literal-1738"><a href="#Literal-1738"><span class="linenos">1738</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="Literal-1739"><a href="#Literal-1739"><span class="linenos">1739</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -23806,9 +24834,9 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Literal.number"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Literal.number-1696"><a href="#Literal.number-1696"><span class="linenos">1696</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal.number-1697"><a href="#Literal.number-1697"><span class="linenos">1697</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-1698"><a href="#Literal.number-1698"><span class="linenos">1698</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-1729"><a href="#Literal.number-1729"><span class="linenos">1729</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal.number-1730"><a href="#Literal.number-1730"><span class="linenos">1730</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-1731"><a href="#Literal.number-1731"><span class="linenos">1731</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>
@@ -23827,9 +24855,9 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Literal.string"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Literal.string-1700"><a href="#Literal.string-1700"><span class="linenos">1700</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal.string-1701"><a href="#Literal.string-1701"><span class="linenos">1701</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-1702"><a href="#Literal.string-1702"><span class="linenos">1702</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-1733"><a href="#Literal.string-1733"><span class="linenos">1733</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal.string-1734"><a href="#Literal.string-1734"><span class="linenos">1734</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-1735"><a href="#Literal.string-1735"><span class="linenos">1735</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>
@@ -23959,124 +24987,124 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Join"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Join-1709"><a href="#Join-1709"><span class="linenos">1709</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-1710"><a href="#Join-1710"><span class="linenos">1710</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Join-1711"><a href="#Join-1711"><span class="linenos">1711</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-1712"><a href="#Join-1712"><span class="linenos">1712</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-1713"><a href="#Join-1713"><span class="linenos">1713</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-1714"><a href="#Join-1714"><span class="linenos">1714</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-1715"><a href="#Join-1715"><span class="linenos">1715</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-1716"><a href="#Join-1716"><span class="linenos">1716</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="Join-1717"><a href="#Join-1717"><span class="linenos">1717</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="Join-1718"><a href="#Join-1718"><span class="linenos">1718</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-1719"><a href="#Join-1719"><span class="linenos">1719</span></a> <span class="p">}</span>
-</span><span id="Join-1720"><a href="#Join-1720"><span class="linenos">1720</span></a>
-</span><span id="Join-1721"><a href="#Join-1721"><span class="linenos">1721</span></a> <span class="nd">@property</span>
-</span><span id="Join-1722"><a href="#Join-1722"><span class="linenos">1722</span></a> <span class="k">def</span> <span class="nf">method</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="Join-1723"><a href="#Join-1723"><span class="linenos">1723</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;method&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Join-1724"><a href="#Join-1724"><span class="linenos">1724</span></a>
-</span><span id="Join-1725"><a href="#Join-1725"><span class="linenos">1725</span></a> <span class="nd">@property</span>
-</span><span id="Join-1726"><a href="#Join-1726"><span class="linenos">1726</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Join-1727"><a href="#Join-1727"><span class="linenos">1727</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-1728"><a href="#Join-1728"><span class="linenos">1728</span></a>
-</span><span id="Join-1729"><a href="#Join-1729"><span class="linenos">1729</span></a> <span class="nd">@property</span>
-</span><span id="Join-1730"><a href="#Join-1730"><span class="linenos">1730</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Join-1731"><a href="#Join-1731"><span class="linenos">1731</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-1732"><a href="#Join-1732"><span class="linenos">1732</span></a>
-</span><span id="Join-1733"><a href="#Join-1733"><span class="linenos">1733</span></a> <span class="nd">@property</span>
-</span><span id="Join-1734"><a href="#Join-1734"><span class="linenos">1734</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Join-1735"><a href="#Join-1735"><span class="linenos">1735</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-1736"><a href="#Join-1736"><span class="linenos">1736</span></a>
-</span><span id="Join-1737"><a href="#Join-1737"><span class="linenos">1737</span></a> <span class="nd">@property</span>
-</span><span id="Join-1738"><a href="#Join-1738"><span class="linenos">1738</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Join-1739"><a href="#Join-1739"><span class="linenos">1739</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-1740"><a href="#Join-1740"><span class="linenos">1740</span></a>
-</span><span id="Join-1741"><a href="#Join-1741"><span class="linenos">1741</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span>
-</span><span id="Join-1742"><a href="#Join-1742"><span class="linenos">1742</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Join-1743"><a href="#Join-1743"><span class="linenos">1743</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Join-1744"><a href="#Join-1744"><span class="linenos">1744</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="Join-1745"><a href="#Join-1745"><span class="linenos">1745</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="Join-1746"><a href="#Join-1746"><span class="linenos">1746</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="Join-1747"><a href="#Join-1747"><span class="linenos">1747</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join-1748"><a href="#Join-1748"><span class="linenos">1748</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
-</span><span id="Join-1749"><a href="#Join-1749"><span class="linenos">1749</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join-1750"><a href="#Join-1750"><span class="linenos">1750</span></a><span class="sd"> Append to or set the ON expressions.</span>
-</span><span id="Join-1751"><a href="#Join-1751"><span class="linenos">1751</span></a>
-</span><span id="Join-1752"><a href="#Join-1752"><span class="linenos">1752</span></a><span class="sd"> Example:</span>
-</span><span id="Join-1753"><a href="#Join-1753"><span class="linenos">1753</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join-1754"><a href="#Join-1754"><span class="linenos">1754</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-1755"><a href="#Join-1755"><span class="linenos">1755</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
-</span><span id="Join-1756"><a href="#Join-1756"><span class="linenos">1756</span></a>
-</span><span id="Join-1757"><a href="#Join-1757"><span class="linenos">1757</span></a><span class="sd"> Args:</span>
-</span><span id="Join-1758"><a href="#Join-1758"><span class="linenos">1758</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Join-1759"><a href="#Join-1759"><span class="linenos">1759</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join-1760"><a href="#Join-1760"><span class="linenos">1760</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Join-1761"><a href="#Join-1761"><span class="linenos">1761</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Join-1762"><a href="#Join-1762"><span class="linenos">1762</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join-1763"><a href="#Join-1763"><span class="linenos">1763</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Join-1764"><a href="#Join-1764"><span class="linenos">1764</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Join-1765"><a href="#Join-1765"><span class="linenos">1765</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Join-1766"><a href="#Join-1766"><span class="linenos">1766</span></a>
-</span><span id="Join-1767"><a href="#Join-1767"><span class="linenos">1767</span></a><span class="sd"> Returns:</span>
-</span><span id="Join-1768"><a href="#Join-1768"><span class="linenos">1768</span></a><span class="sd"> The modified Join expression.</span>
-</span><span id="Join-1769"><a href="#Join-1769"><span class="linenos">1769</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join-1770"><a href="#Join-1770"><span class="linenos">1770</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-1771"><a href="#Join-1771"><span class="linenos">1771</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join-1772"><a href="#Join-1772"><span class="linenos">1772</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Join-1773"><a href="#Join-1773"><span class="linenos">1773</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-1774"><a href="#Join-1774"><span class="linenos">1774</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Join-1775"><a href="#Join-1775"><span class="linenos">1775</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Join-1776"><a href="#Join-1776"><span class="linenos">1776</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Join-1777"><a href="#Join-1777"><span class="linenos">1777</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join-1778"><a href="#Join-1778"><span class="linenos">1778</span></a> <span class="p">)</span>
-</span><span id="Join-1779"><a href="#Join-1779"><span class="linenos">1779</span></a>
-</span><span id="Join-1780"><a href="#Join-1780"><span class="linenos">1780</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-1781"><a href="#Join-1781"><span class="linenos">1781</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-1782"><a href="#Join-1782"><span class="linenos">1782</span></a>
-</span><span id="Join-1783"><a href="#Join-1783"><span class="linenos">1783</span></a> <span class="k">return</span> <span class="n">join</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Join-1742"><a href="#Join-1742"><span class="linenos">1742</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-1743"><a href="#Join-1743"><span class="linenos">1743</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Join-1744"><a href="#Join-1744"><span class="linenos">1744</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-1745"><a href="#Join-1745"><span class="linenos">1745</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-1746"><a href="#Join-1746"><span class="linenos">1746</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-1747"><a href="#Join-1747"><span class="linenos">1747</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-1748"><a href="#Join-1748"><span class="linenos">1748</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-1749"><a href="#Join-1749"><span class="linenos">1749</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="Join-1750"><a href="#Join-1750"><span class="linenos">1750</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="Join-1751"><a href="#Join-1751"><span class="linenos">1751</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-1752"><a href="#Join-1752"><span class="linenos">1752</span></a> <span class="p">}</span>
+</span><span id="Join-1753"><a href="#Join-1753"><span class="linenos">1753</span></a>
+</span><span id="Join-1754"><a href="#Join-1754"><span class="linenos">1754</span></a> <span class="nd">@property</span>
+</span><span id="Join-1755"><a href="#Join-1755"><span class="linenos">1755</span></a> <span class="k">def</span> <span class="nf">method</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="Join-1756"><a href="#Join-1756"><span class="linenos">1756</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;method&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Join-1757"><a href="#Join-1757"><span class="linenos">1757</span></a>
+</span><span id="Join-1758"><a href="#Join-1758"><span class="linenos">1758</span></a> <span class="nd">@property</span>
+</span><span id="Join-1759"><a href="#Join-1759"><span class="linenos">1759</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Join-1760"><a href="#Join-1760"><span class="linenos">1760</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-1761"><a href="#Join-1761"><span class="linenos">1761</span></a>
+</span><span id="Join-1762"><a href="#Join-1762"><span class="linenos">1762</span></a> <span class="nd">@property</span>
+</span><span id="Join-1763"><a href="#Join-1763"><span class="linenos">1763</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Join-1764"><a href="#Join-1764"><span class="linenos">1764</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-1765"><a href="#Join-1765"><span class="linenos">1765</span></a>
+</span><span id="Join-1766"><a href="#Join-1766"><span class="linenos">1766</span></a> <span class="nd">@property</span>
+</span><span id="Join-1767"><a href="#Join-1767"><span class="linenos">1767</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Join-1768"><a href="#Join-1768"><span class="linenos">1768</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-1769"><a href="#Join-1769"><span class="linenos">1769</span></a>
+</span><span id="Join-1770"><a href="#Join-1770"><span class="linenos">1770</span></a> <span class="nd">@property</span>
+</span><span id="Join-1771"><a href="#Join-1771"><span class="linenos">1771</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Join-1772"><a href="#Join-1772"><span class="linenos">1772</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-1773"><a href="#Join-1773"><span class="linenos">1773</span></a>
+</span><span id="Join-1774"><a href="#Join-1774"><span class="linenos">1774</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span>
+</span><span id="Join-1775"><a href="#Join-1775"><span class="linenos">1775</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Join-1776"><a href="#Join-1776"><span class="linenos">1776</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Join-1777"><a href="#Join-1777"><span class="linenos">1777</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="Join-1778"><a href="#Join-1778"><span class="linenos">1778</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="Join-1779"><a href="#Join-1779"><span class="linenos">1779</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="Join-1780"><a href="#Join-1780"><span class="linenos">1780</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join-1781"><a href="#Join-1781"><span class="linenos">1781</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
+</span><span id="Join-1782"><a href="#Join-1782"><span class="linenos">1782</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join-1783"><a href="#Join-1783"><span class="linenos">1783</span></a><span class="sd"> Append to or set the ON expressions.</span>
</span><span id="Join-1784"><a href="#Join-1784"><span class="linenos">1784</span></a>
-</span><span id="Join-1785"><a href="#Join-1785"><span class="linenos">1785</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span>
-</span><span id="Join-1786"><a href="#Join-1786"><span class="linenos">1786</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Join-1787"><a href="#Join-1787"><span class="linenos">1787</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Join-1788"><a href="#Join-1788"><span class="linenos">1788</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="Join-1789"><a href="#Join-1789"><span class="linenos">1789</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="Join-1790"><a href="#Join-1790"><span class="linenos">1790</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="Join-1791"><a href="#Join-1791"><span class="linenos">1791</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join-1792"><a href="#Join-1792"><span class="linenos">1792</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
-</span><span id="Join-1793"><a href="#Join-1793"><span class="linenos">1793</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join-1794"><a href="#Join-1794"><span class="linenos">1794</span></a><span class="sd"> Append to or set the USING expressions.</span>
-</span><span id="Join-1795"><a href="#Join-1795"><span class="linenos">1795</span></a>
-</span><span id="Join-1796"><a href="#Join-1796"><span class="linenos">1796</span></a><span class="sd"> Example:</span>
-</span><span id="Join-1797"><a href="#Join-1797"><span class="linenos">1797</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join-1798"><a href="#Join-1798"><span class="linenos">1798</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-1799"><a href="#Join-1799"><span class="linenos">1799</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
-</span><span id="Join-1800"><a href="#Join-1800"><span class="linenos">1800</span></a>
-</span><span id="Join-1801"><a href="#Join-1801"><span class="linenos">1801</span></a><span class="sd"> Args:</span>
-</span><span id="Join-1802"><a href="#Join-1802"><span class="linenos">1802</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Join-1803"><a href="#Join-1803"><span class="linenos">1803</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join-1804"><a href="#Join-1804"><span class="linenos">1804</span></a><span class="sd"> append: if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
-</span><span id="Join-1805"><a href="#Join-1805"><span class="linenos">1805</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join-1806"><a href="#Join-1806"><span class="linenos">1806</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Join-1807"><a href="#Join-1807"><span class="linenos">1807</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Join-1808"><a href="#Join-1808"><span class="linenos">1808</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Join-1809"><a href="#Join-1809"><span class="linenos">1809</span></a>
-</span><span id="Join-1810"><a href="#Join-1810"><span class="linenos">1810</span></a><span class="sd"> Returns:</span>
-</span><span id="Join-1811"><a href="#Join-1811"><span class="linenos">1811</span></a><span class="sd"> The modified Join expression.</span>
-</span><span id="Join-1812"><a href="#Join-1812"><span class="linenos">1812</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join-1813"><a href="#Join-1813"><span class="linenos">1813</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-1814"><a href="#Join-1814"><span class="linenos">1814</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join-1815"><a href="#Join-1815"><span class="linenos">1815</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Join-1816"><a href="#Join-1816"><span class="linenos">1816</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-1817"><a href="#Join-1817"><span class="linenos">1817</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Join-1818"><a href="#Join-1818"><span class="linenos">1818</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Join-1819"><a href="#Join-1819"><span class="linenos">1819</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Join-1820"><a href="#Join-1820"><span class="linenos">1820</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join-1821"><a href="#Join-1821"><span class="linenos">1821</span></a> <span class="p">)</span>
-</span><span id="Join-1822"><a href="#Join-1822"><span class="linenos">1822</span></a>
-</span><span id="Join-1823"><a href="#Join-1823"><span class="linenos">1823</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-1824"><a href="#Join-1824"><span class="linenos">1824</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-1825"><a href="#Join-1825"><span class="linenos">1825</span></a>
-</span><span id="Join-1826"><a href="#Join-1826"><span class="linenos">1826</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="Join-1785"><a href="#Join-1785"><span class="linenos">1785</span></a><span class="sd"> Example:</span>
+</span><span id="Join-1786"><a href="#Join-1786"><span class="linenos">1786</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join-1787"><a href="#Join-1787"><span class="linenos">1787</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-1788"><a href="#Join-1788"><span class="linenos">1788</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="Join-1789"><a href="#Join-1789"><span class="linenos">1789</span></a>
+</span><span id="Join-1790"><a href="#Join-1790"><span class="linenos">1790</span></a><span class="sd"> Args:</span>
+</span><span id="Join-1791"><a href="#Join-1791"><span class="linenos">1791</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Join-1792"><a href="#Join-1792"><span class="linenos">1792</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join-1793"><a href="#Join-1793"><span class="linenos">1793</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Join-1794"><a href="#Join-1794"><span class="linenos">1794</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Join-1795"><a href="#Join-1795"><span class="linenos">1795</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join-1796"><a href="#Join-1796"><span class="linenos">1796</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Join-1797"><a href="#Join-1797"><span class="linenos">1797</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Join-1798"><a href="#Join-1798"><span class="linenos">1798</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Join-1799"><a href="#Join-1799"><span class="linenos">1799</span></a>
+</span><span id="Join-1800"><a href="#Join-1800"><span class="linenos">1800</span></a><span class="sd"> Returns:</span>
+</span><span id="Join-1801"><a href="#Join-1801"><span class="linenos">1801</span></a><span class="sd"> The modified Join expression.</span>
+</span><span id="Join-1802"><a href="#Join-1802"><span class="linenos">1802</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join-1803"><a href="#Join-1803"><span class="linenos">1803</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-1804"><a href="#Join-1804"><span class="linenos">1804</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join-1805"><a href="#Join-1805"><span class="linenos">1805</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Join-1806"><a href="#Join-1806"><span class="linenos">1806</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-1807"><a href="#Join-1807"><span class="linenos">1807</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Join-1808"><a href="#Join-1808"><span class="linenos">1808</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Join-1809"><a href="#Join-1809"><span class="linenos">1809</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Join-1810"><a href="#Join-1810"><span class="linenos">1810</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join-1811"><a href="#Join-1811"><span class="linenos">1811</span></a> <span class="p">)</span>
+</span><span id="Join-1812"><a href="#Join-1812"><span class="linenos">1812</span></a>
+</span><span id="Join-1813"><a href="#Join-1813"><span class="linenos">1813</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-1814"><a href="#Join-1814"><span class="linenos">1814</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-1815"><a href="#Join-1815"><span class="linenos">1815</span></a>
+</span><span id="Join-1816"><a href="#Join-1816"><span class="linenos">1816</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="Join-1817"><a href="#Join-1817"><span class="linenos">1817</span></a>
+</span><span id="Join-1818"><a href="#Join-1818"><span class="linenos">1818</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span>
+</span><span id="Join-1819"><a href="#Join-1819"><span class="linenos">1819</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Join-1820"><a href="#Join-1820"><span class="linenos">1820</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Join-1821"><a href="#Join-1821"><span class="linenos">1821</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="Join-1822"><a href="#Join-1822"><span class="linenos">1822</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="Join-1823"><a href="#Join-1823"><span class="linenos">1823</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="Join-1824"><a href="#Join-1824"><span class="linenos">1824</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join-1825"><a href="#Join-1825"><span class="linenos">1825</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
+</span><span id="Join-1826"><a href="#Join-1826"><span class="linenos">1826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join-1827"><a href="#Join-1827"><span class="linenos">1827</span></a><span class="sd"> Append to or set the USING expressions.</span>
+</span><span id="Join-1828"><a href="#Join-1828"><span class="linenos">1828</span></a>
+</span><span id="Join-1829"><a href="#Join-1829"><span class="linenos">1829</span></a><span class="sd"> Example:</span>
+</span><span id="Join-1830"><a href="#Join-1830"><span class="linenos">1830</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join-1831"><a href="#Join-1831"><span class="linenos">1831</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-1832"><a href="#Join-1832"><span class="linenos">1832</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
+</span><span id="Join-1833"><a href="#Join-1833"><span class="linenos">1833</span></a>
+</span><span id="Join-1834"><a href="#Join-1834"><span class="linenos">1834</span></a><span class="sd"> Args:</span>
+</span><span id="Join-1835"><a href="#Join-1835"><span class="linenos">1835</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Join-1836"><a href="#Join-1836"><span class="linenos">1836</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join-1837"><a href="#Join-1837"><span class="linenos">1837</span></a><span class="sd"> append: if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
+</span><span id="Join-1838"><a href="#Join-1838"><span class="linenos">1838</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join-1839"><a href="#Join-1839"><span class="linenos">1839</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Join-1840"><a href="#Join-1840"><span class="linenos">1840</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Join-1841"><a href="#Join-1841"><span class="linenos">1841</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Join-1842"><a href="#Join-1842"><span class="linenos">1842</span></a>
+</span><span id="Join-1843"><a href="#Join-1843"><span class="linenos">1843</span></a><span class="sd"> Returns:</span>
+</span><span id="Join-1844"><a href="#Join-1844"><span class="linenos">1844</span></a><span class="sd"> The modified Join expression.</span>
+</span><span id="Join-1845"><a href="#Join-1845"><span class="linenos">1845</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join-1846"><a href="#Join-1846"><span class="linenos">1846</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-1847"><a href="#Join-1847"><span class="linenos">1847</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join-1848"><a href="#Join-1848"><span class="linenos">1848</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Join-1849"><a href="#Join-1849"><span class="linenos">1849</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-1850"><a href="#Join-1850"><span class="linenos">1850</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Join-1851"><a href="#Join-1851"><span class="linenos">1851</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Join-1852"><a href="#Join-1852"><span class="linenos">1852</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Join-1853"><a href="#Join-1853"><span class="linenos">1853</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join-1854"><a href="#Join-1854"><span class="linenos">1854</span></a> <span class="p">)</span>
+</span><span id="Join-1855"><a href="#Join-1855"><span class="linenos">1855</span></a>
+</span><span id="Join-1856"><a href="#Join-1856"><span class="linenos">1856</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-1857"><a href="#Join-1857"><span class="linenos">1857</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-1858"><a href="#Join-1858"><span class="linenos">1858</span></a>
+</span><span id="Join-1859"><a href="#Join-1859"><span class="linenos">1859</span></a> <span class="k">return</span> <span class="n">join</span>
</span></pre></div>
@@ -24161,49 +25189,49 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Join.on"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Join.on-1741"><a href="#Join.on-1741"><span class="linenos">1741</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span>
-</span><span id="Join.on-1742"><a href="#Join.on-1742"><span class="linenos">1742</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Join.on-1743"><a href="#Join.on-1743"><span class="linenos">1743</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Join.on-1744"><a href="#Join.on-1744"><span class="linenos">1744</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="Join.on-1745"><a href="#Join.on-1745"><span class="linenos">1745</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="Join.on-1746"><a href="#Join.on-1746"><span class="linenos">1746</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="Join.on-1747"><a href="#Join.on-1747"><span class="linenos">1747</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join.on-1748"><a href="#Join.on-1748"><span class="linenos">1748</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
-</span><span id="Join.on-1749"><a href="#Join.on-1749"><span class="linenos">1749</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join.on-1750"><a href="#Join.on-1750"><span class="linenos">1750</span></a><span class="sd"> Append to or set the ON expressions.</span>
-</span><span id="Join.on-1751"><a href="#Join.on-1751"><span class="linenos">1751</span></a>
-</span><span id="Join.on-1752"><a href="#Join.on-1752"><span class="linenos">1752</span></a><span class="sd"> Example:</span>
-</span><span id="Join.on-1753"><a href="#Join.on-1753"><span class="linenos">1753</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join.on-1754"><a href="#Join.on-1754"><span class="linenos">1754</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-1755"><a href="#Join.on-1755"><span class="linenos">1755</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
-</span><span id="Join.on-1756"><a href="#Join.on-1756"><span class="linenos">1756</span></a>
-</span><span id="Join.on-1757"><a href="#Join.on-1757"><span class="linenos">1757</span></a><span class="sd"> Args:</span>
-</span><span id="Join.on-1758"><a href="#Join.on-1758"><span class="linenos">1758</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Join.on-1759"><a href="#Join.on-1759"><span class="linenos">1759</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join.on-1760"><a href="#Join.on-1760"><span class="linenos">1760</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Join.on-1761"><a href="#Join.on-1761"><span class="linenos">1761</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Join.on-1762"><a href="#Join.on-1762"><span class="linenos">1762</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join.on-1763"><a href="#Join.on-1763"><span class="linenos">1763</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Join.on-1764"><a href="#Join.on-1764"><span class="linenos">1764</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Join.on-1765"><a href="#Join.on-1765"><span class="linenos">1765</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Join.on-1766"><a href="#Join.on-1766"><span class="linenos">1766</span></a>
-</span><span id="Join.on-1767"><a href="#Join.on-1767"><span class="linenos">1767</span></a><span class="sd"> Returns:</span>
-</span><span id="Join.on-1768"><a href="#Join.on-1768"><span class="linenos">1768</span></a><span class="sd"> The modified Join expression.</span>
-</span><span id="Join.on-1769"><a href="#Join.on-1769"><span class="linenos">1769</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join.on-1770"><a href="#Join.on-1770"><span class="linenos">1770</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-1771"><a href="#Join.on-1771"><span class="linenos">1771</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join.on-1772"><a href="#Join.on-1772"><span class="linenos">1772</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-1773"><a href="#Join.on-1773"><span class="linenos">1773</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-1774"><a href="#Join.on-1774"><span class="linenos">1774</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-1775"><a href="#Join.on-1775"><span class="linenos">1775</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-1776"><a href="#Join.on-1776"><span class="linenos">1776</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-1777"><a href="#Join.on-1777"><span class="linenos">1777</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join.on-1778"><a href="#Join.on-1778"><span class="linenos">1778</span></a> <span class="p">)</span>
-</span><span id="Join.on-1779"><a href="#Join.on-1779"><span class="linenos">1779</span></a>
-</span><span id="Join.on-1780"><a href="#Join.on-1780"><span class="linenos">1780</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-1781"><a href="#Join.on-1781"><span class="linenos">1781</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-1782"><a href="#Join.on-1782"><span class="linenos">1782</span></a>
-</span><span id="Join.on-1783"><a href="#Join.on-1783"><span class="linenos">1783</span></a> <span class="k">return</span> <span class="n">join</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Join.on-1774"><a href="#Join.on-1774"><span class="linenos">1774</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span>
+</span><span id="Join.on-1775"><a href="#Join.on-1775"><span class="linenos">1775</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Join.on-1776"><a href="#Join.on-1776"><span class="linenos">1776</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Join.on-1777"><a href="#Join.on-1777"><span class="linenos">1777</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="Join.on-1778"><a href="#Join.on-1778"><span class="linenos">1778</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="Join.on-1779"><a href="#Join.on-1779"><span class="linenos">1779</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="Join.on-1780"><a href="#Join.on-1780"><span class="linenos">1780</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join.on-1781"><a href="#Join.on-1781"><span class="linenos">1781</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
+</span><span id="Join.on-1782"><a href="#Join.on-1782"><span class="linenos">1782</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join.on-1783"><a href="#Join.on-1783"><span class="linenos">1783</span></a><span class="sd"> Append to or set the ON expressions.</span>
+</span><span id="Join.on-1784"><a href="#Join.on-1784"><span class="linenos">1784</span></a>
+</span><span id="Join.on-1785"><a href="#Join.on-1785"><span class="linenos">1785</span></a><span class="sd"> Example:</span>
+</span><span id="Join.on-1786"><a href="#Join.on-1786"><span class="linenos">1786</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join.on-1787"><a href="#Join.on-1787"><span class="linenos">1787</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-1788"><a href="#Join.on-1788"><span class="linenos">1788</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="Join.on-1789"><a href="#Join.on-1789"><span class="linenos">1789</span></a>
+</span><span id="Join.on-1790"><a href="#Join.on-1790"><span class="linenos">1790</span></a><span class="sd"> Args:</span>
+</span><span id="Join.on-1791"><a href="#Join.on-1791"><span class="linenos">1791</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Join.on-1792"><a href="#Join.on-1792"><span class="linenos">1792</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join.on-1793"><a href="#Join.on-1793"><span class="linenos">1793</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Join.on-1794"><a href="#Join.on-1794"><span class="linenos">1794</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Join.on-1795"><a href="#Join.on-1795"><span class="linenos">1795</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join.on-1796"><a href="#Join.on-1796"><span class="linenos">1796</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Join.on-1797"><a href="#Join.on-1797"><span class="linenos">1797</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Join.on-1798"><a href="#Join.on-1798"><span class="linenos">1798</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Join.on-1799"><a href="#Join.on-1799"><span class="linenos">1799</span></a>
+</span><span id="Join.on-1800"><a href="#Join.on-1800"><span class="linenos">1800</span></a><span class="sd"> Returns:</span>
+</span><span id="Join.on-1801"><a href="#Join.on-1801"><span class="linenos">1801</span></a><span class="sd"> The modified Join expression.</span>
+</span><span id="Join.on-1802"><a href="#Join.on-1802"><span class="linenos">1802</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join.on-1803"><a href="#Join.on-1803"><span class="linenos">1803</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-1804"><a href="#Join.on-1804"><span class="linenos">1804</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join.on-1805"><a href="#Join.on-1805"><span class="linenos">1805</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-1806"><a href="#Join.on-1806"><span class="linenos">1806</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-1807"><a href="#Join.on-1807"><span class="linenos">1807</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-1808"><a href="#Join.on-1808"><span class="linenos">1808</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-1809"><a href="#Join.on-1809"><span class="linenos">1809</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-1810"><a href="#Join.on-1810"><span class="linenos">1810</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join.on-1811"><a href="#Join.on-1811"><span class="linenos">1811</span></a> <span class="p">)</span>
+</span><span id="Join.on-1812"><a href="#Join.on-1812"><span class="linenos">1812</span></a>
+</span><span id="Join.on-1813"><a href="#Join.on-1813"><span class="linenos">1813</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-1814"><a href="#Join.on-1814"><span class="linenos">1814</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-1815"><a href="#Join.on-1815"><span class="linenos">1815</span></a>
+</span><span id="Join.on-1816"><a href="#Join.on-1816"><span class="linenos">1816</span></a> <span class="k">return</span> <span class="n">join</span>
</span></pre></div>
@@ -24253,48 +25281,48 @@ 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-1785"><a href="#Join.using-1785"><span class="linenos">1785</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span>
-</span><span id="Join.using-1786"><a href="#Join.using-1786"><span class="linenos">1786</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Join.using-1787"><a href="#Join.using-1787"><span class="linenos">1787</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Join.using-1788"><a href="#Join.using-1788"><span class="linenos">1788</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="Join.using-1789"><a href="#Join.using-1789"><span class="linenos">1789</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="Join.using-1790"><a href="#Join.using-1790"><span class="linenos">1790</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="Join.using-1791"><a href="#Join.using-1791"><span class="linenos">1791</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join.using-1792"><a href="#Join.using-1792"><span class="linenos">1792</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
-</span><span id="Join.using-1793"><a href="#Join.using-1793"><span class="linenos">1793</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join.using-1794"><a href="#Join.using-1794"><span class="linenos">1794</span></a><span class="sd"> Append to or set the USING expressions.</span>
-</span><span id="Join.using-1795"><a href="#Join.using-1795"><span class="linenos">1795</span></a>
-</span><span id="Join.using-1796"><a href="#Join.using-1796"><span class="linenos">1796</span></a><span class="sd"> Example:</span>
-</span><span id="Join.using-1797"><a href="#Join.using-1797"><span class="linenos">1797</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join.using-1798"><a href="#Join.using-1798"><span class="linenos">1798</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-1799"><a href="#Join.using-1799"><span class="linenos">1799</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
-</span><span id="Join.using-1800"><a href="#Join.using-1800"><span class="linenos">1800</span></a>
-</span><span id="Join.using-1801"><a href="#Join.using-1801"><span class="linenos">1801</span></a><span class="sd"> Args:</span>
-</span><span id="Join.using-1802"><a href="#Join.using-1802"><span class="linenos">1802</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Join.using-1803"><a href="#Join.using-1803"><span class="linenos">1803</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join.using-1804"><a href="#Join.using-1804"><span class="linenos">1804</span></a><span class="sd"> append: if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
-</span><span id="Join.using-1805"><a href="#Join.using-1805"><span class="linenos">1805</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join.using-1806"><a href="#Join.using-1806"><span class="linenos">1806</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Join.using-1807"><a href="#Join.using-1807"><span class="linenos">1807</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Join.using-1808"><a href="#Join.using-1808"><span class="linenos">1808</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Join.using-1809"><a href="#Join.using-1809"><span class="linenos">1809</span></a>
-</span><span id="Join.using-1810"><a href="#Join.using-1810"><span class="linenos">1810</span></a><span class="sd"> Returns:</span>
-</span><span id="Join.using-1811"><a href="#Join.using-1811"><span class="linenos">1811</span></a><span class="sd"> The modified Join expression.</span>
-</span><span id="Join.using-1812"><a href="#Join.using-1812"><span class="linenos">1812</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join.using-1813"><a href="#Join.using-1813"><span class="linenos">1813</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-1814"><a href="#Join.using-1814"><span class="linenos">1814</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join.using-1815"><a href="#Join.using-1815"><span class="linenos">1815</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-1816"><a href="#Join.using-1816"><span class="linenos">1816</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-1817"><a href="#Join.using-1817"><span class="linenos">1817</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-1818"><a href="#Join.using-1818"><span class="linenos">1818</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-1819"><a href="#Join.using-1819"><span class="linenos">1819</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-1820"><a href="#Join.using-1820"><span class="linenos">1820</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join.using-1821"><a href="#Join.using-1821"><span class="linenos">1821</span></a> <span class="p">)</span>
-</span><span id="Join.using-1822"><a href="#Join.using-1822"><span class="linenos">1822</span></a>
-</span><span id="Join.using-1823"><a href="#Join.using-1823"><span class="linenos">1823</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-1824"><a href="#Join.using-1824"><span class="linenos">1824</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-1825"><a href="#Join.using-1825"><span class="linenos">1825</span></a>
-</span><span id="Join.using-1826"><a href="#Join.using-1826"><span class="linenos">1826</span></a> <span class="k">return</span> <span class="n">join</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Join.using-1818"><a href="#Join.using-1818"><span class="linenos">1818</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span>
+</span><span id="Join.using-1819"><a href="#Join.using-1819"><span class="linenos">1819</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Join.using-1820"><a href="#Join.using-1820"><span class="linenos">1820</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Join.using-1821"><a href="#Join.using-1821"><span class="linenos">1821</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="Join.using-1822"><a href="#Join.using-1822"><span class="linenos">1822</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="Join.using-1823"><a href="#Join.using-1823"><span class="linenos">1823</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="Join.using-1824"><a href="#Join.using-1824"><span class="linenos">1824</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join.using-1825"><a href="#Join.using-1825"><span class="linenos">1825</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Join</span><span class="p">:</span>
+</span><span id="Join.using-1826"><a href="#Join.using-1826"><span class="linenos">1826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join.using-1827"><a href="#Join.using-1827"><span class="linenos">1827</span></a><span class="sd"> Append to or set the USING expressions.</span>
+</span><span id="Join.using-1828"><a href="#Join.using-1828"><span class="linenos">1828</span></a>
+</span><span id="Join.using-1829"><a href="#Join.using-1829"><span class="linenos">1829</span></a><span class="sd"> Example:</span>
+</span><span id="Join.using-1830"><a href="#Join.using-1830"><span class="linenos">1830</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join.using-1831"><a href="#Join.using-1831"><span class="linenos">1831</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-1832"><a href="#Join.using-1832"><span class="linenos">1832</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
+</span><span id="Join.using-1833"><a href="#Join.using-1833"><span class="linenos">1833</span></a>
+</span><span id="Join.using-1834"><a href="#Join.using-1834"><span class="linenos">1834</span></a><span class="sd"> Args:</span>
+</span><span id="Join.using-1835"><a href="#Join.using-1835"><span class="linenos">1835</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Join.using-1836"><a href="#Join.using-1836"><span class="linenos">1836</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join.using-1837"><a href="#Join.using-1837"><span class="linenos">1837</span></a><span class="sd"> append: if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
+</span><span id="Join.using-1838"><a href="#Join.using-1838"><span class="linenos">1838</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join.using-1839"><a href="#Join.using-1839"><span class="linenos">1839</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Join.using-1840"><a href="#Join.using-1840"><span class="linenos">1840</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Join.using-1841"><a href="#Join.using-1841"><span class="linenos">1841</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Join.using-1842"><a href="#Join.using-1842"><span class="linenos">1842</span></a>
+</span><span id="Join.using-1843"><a href="#Join.using-1843"><span class="linenos">1843</span></a><span class="sd"> Returns:</span>
+</span><span id="Join.using-1844"><a href="#Join.using-1844"><span class="linenos">1844</span></a><span class="sd"> The modified Join expression.</span>
+</span><span id="Join.using-1845"><a href="#Join.using-1845"><span class="linenos">1845</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join.using-1846"><a href="#Join.using-1846"><span class="linenos">1846</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-1847"><a href="#Join.using-1847"><span class="linenos">1847</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join.using-1848"><a href="#Join.using-1848"><span class="linenos">1848</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-1849"><a href="#Join.using-1849"><span class="linenos">1849</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-1850"><a href="#Join.using-1850"><span class="linenos">1850</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-1851"><a href="#Join.using-1851"><span class="linenos">1851</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-1852"><a href="#Join.using-1852"><span class="linenos">1852</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-1853"><a href="#Join.using-1853"><span class="linenos">1853</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join.using-1854"><a href="#Join.using-1854"><span class="linenos">1854</span></a> <span class="p">)</span>
+</span><span id="Join.using-1855"><a href="#Join.using-1855"><span class="linenos">1855</span></a>
+</span><span id="Join.using-1856"><a href="#Join.using-1856"><span class="linenos">1856</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-1857"><a href="#Join.using-1857"><span class="linenos">1857</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-1858"><a href="#Join.using-1858"><span class="linenos">1858</span></a>
+</span><span id="Join.using-1859"><a href="#Join.using-1859"><span class="linenos">1859</span></a> <span class="k">return</span> <span class="n">join</span>
</span></pre></div>
@@ -24411,8 +25439,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-1829"><a href="#Lateral-1829"><span class="linenos">1829</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-1830"><a href="#Lateral-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;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-1862"><a href="#Lateral-1862"><span class="linenos">1862</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-1863"><a href="#Lateral-1863"><span class="linenos">1863</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -24524,17 +25552,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-1833"><a href="#MatchRecognize-1833"><span class="linenos">1833</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-1834"><a href="#MatchRecognize-1834"><span class="linenos">1834</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MatchRecognize-1835"><a href="#MatchRecognize-1835"><span class="linenos">1835</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-1836"><a href="#MatchRecognize-1836"><span class="linenos">1836</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-1837"><a href="#MatchRecognize-1837"><span class="linenos">1837</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-1838"><a href="#MatchRecognize-1838"><span class="linenos">1838</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-1839"><a href="#MatchRecognize-1839"><span class="linenos">1839</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-1840"><a href="#MatchRecognize-1840"><span class="linenos">1840</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-1841"><a href="#MatchRecognize-1841"><span class="linenos">1841</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-1842"><a href="#MatchRecognize-1842"><span class="linenos">1842</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-1843"><a href="#MatchRecognize-1843"><span class="linenos">1843</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MatchRecognize-1866"><a href="#MatchRecognize-1866"><span class="linenos">1866</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-1867"><a href="#MatchRecognize-1867"><span class="linenos">1867</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MatchRecognize-1868"><a href="#MatchRecognize-1868"><span class="linenos">1868</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-1869"><a href="#MatchRecognize-1869"><span class="linenos">1869</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-1870"><a href="#MatchRecognize-1870"><span class="linenos">1870</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-1871"><a href="#MatchRecognize-1871"><span class="linenos">1871</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-1872"><a href="#MatchRecognize-1872"><span class="linenos">1872</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-1873"><a href="#MatchRecognize-1873"><span class="linenos">1873</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-1874"><a href="#MatchRecognize-1874"><span class="linenos">1874</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-1875"><a href="#MatchRecognize-1875"><span class="linenos">1875</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-1876"><a href="#MatchRecognize-1876"><span class="linenos">1876</span></a> <span class="p">}</span>
</span></pre></div>
@@ -24633,8 +25661,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-1848"><a href="#Final-1848"><span class="linenos">1848</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-1849"><a href="#Final-1849"><span class="linenos">1849</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Final-1881"><a href="#Final-1881"><span class="linenos">1881</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-1882"><a href="#Final-1882"><span class="linenos">1882</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -24721,8 +25749,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-1852"><a href="#Offset-1852"><span class="linenos">1852</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-1853"><a href="#Offset-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;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-1885"><a href="#Offset-1885"><span class="linenos">1885</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-1886"><a href="#Offset-1886"><span class="linenos">1886</span></a> <span class="n">arg_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>
@@ -24820,8 +25848,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-1856"><a href="#Order-1856"><span class="linenos">1856</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-1857"><a href="#Order-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 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-1889"><a href="#Order-1889"><span class="linenos">1889</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-1890"><a href="#Order-1890"><span class="linenos">1890</span></a> <span class="n">arg_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>
@@ -24919,8 +25947,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-1862"><a href="#Cluster-1862"><span class="linenos">1862</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-1863"><a href="#Cluster-1863"><span class="linenos">1863</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cluster-1895"><a href="#Cluster-1895"><span class="linenos">1895</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-1896"><a href="#Cluster-1896"><span class="linenos">1896</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -25010,8 +26038,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-1866"><a href="#Distribute-1866"><span class="linenos">1866</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-1867"><a href="#Distribute-1867"><span class="linenos">1867</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Distribute-1899"><a href="#Distribute-1899"><span class="linenos">1899</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-1900"><a href="#Distribute-1900"><span class="linenos">1900</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -25101,8 +26129,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-1870"><a href="#Sort-1870"><span class="linenos">1870</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-1871"><a href="#Sort-1871"><span class="linenos">1871</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sort-1903"><a href="#Sort-1903"><span class="linenos">1903</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-1904"><a href="#Sort-1904"><span class="linenos">1904</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -25192,8 +26220,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-1874"><a href="#Ordered-1874"><span class="linenos">1874</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-1875"><a href="#Ordered-1875"><span class="linenos">1875</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1907"><a href="#Ordered-1907"><span class="linenos">1907</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-1908"><a href="#Ordered-1908"><span class="linenos">1908</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -25291,8 +26319,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-1878"><a href="#Property-1878"><span class="linenos">1878</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-1879"><a href="#Property-1879"><span class="linenos">1879</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1911"><a href="#Property-1911"><span class="linenos">1911</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-1912"><a href="#Property-1912"><span class="linenos">1912</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -25390,8 +26418,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-1882"><a href="#AlgorithmProperty-1882"><span class="linenos">1882</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-1883"><a href="#AlgorithmProperty-1883"><span class="linenos">1883</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1915"><a href="#AlgorithmProperty-1915"><span class="linenos">1915</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-1916"><a href="#AlgorithmProperty-1916"><span class="linenos">1916</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -25489,8 +26517,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-1886"><a href="#AutoIncrementProperty-1886"><span class="linenos">1886</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-1887"><a href="#AutoIncrementProperty-1887"><span class="linenos">1887</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1919"><a href="#AutoIncrementProperty-1919"><span class="linenos">1919</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-1920"><a href="#AutoIncrementProperty-1920"><span class="linenos">1920</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -25588,8 +26616,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-1890"><a href="#BlockCompressionProperty-1890"><span class="linenos">1890</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-1891"><a href="#BlockCompressionProperty-1891"><span class="linenos">1891</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-1923"><a href="#BlockCompressionProperty-1923"><span class="linenos">1923</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-1924"><a href="#BlockCompressionProperty-1924"><span class="linenos">1924</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>
@@ -25687,8 +26715,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-1894"><a href="#CharacterSetProperty-1894"><span class="linenos">1894</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-1895"><a href="#CharacterSetProperty-1895"><span class="linenos">1895</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1927"><a href="#CharacterSetProperty-1927"><span class="linenos">1927</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-1928"><a href="#CharacterSetProperty-1928"><span class="linenos">1928</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -25786,8 +26814,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-1898"><a href="#ChecksumProperty-1898"><span class="linenos">1898</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-1899"><a href="#ChecksumProperty-1899"><span class="linenos">1899</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-1931"><a href="#ChecksumProperty-1931"><span class="linenos">1931</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-1932"><a href="#ChecksumProperty-1932"><span class="linenos">1932</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>
@@ -25885,8 +26913,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-1902"><a href="#CollateProperty-1902"><span class="linenos">1902</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-1903"><a href="#CollateProperty-1903"><span class="linenos">1903</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1935"><a href="#CollateProperty-1935"><span class="linenos">1935</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-1936"><a href="#CollateProperty-1936"><span class="linenos">1936</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -25984,8 +27012,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#CopyGrantsProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CopyGrantsProperty-1906"><a href="#CopyGrantsProperty-1906"><span class="linenos">1906</span></a><span class="k">class</span> <span class="nc">CopyGrantsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="CopyGrantsProperty-1907"><a href="#CopyGrantsProperty-1907"><span class="linenos">1907</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CopyGrantsProperty-1939"><a href="#CopyGrantsProperty-1939"><span class="linenos">1939</span></a><span class="k">class</span> <span class="nc">CopyGrantsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="CopyGrantsProperty-1940"><a href="#CopyGrantsProperty-1940"><span class="linenos">1940</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
</span></pre></div>
@@ -26083,14 +27111,14 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DataBlocksizeProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataBlocksizeProperty-1910"><a href="#DataBlocksizeProperty-1910"><span class="linenos">1910</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-1911"><a href="#DataBlocksizeProperty-1911"><span class="linenos">1911</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataBlocksizeProperty-1912"><a href="#DataBlocksizeProperty-1912"><span class="linenos">1912</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="DataBlocksizeProperty-1913"><a href="#DataBlocksizeProperty-1913"><span class="linenos">1913</span></a> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataBlocksizeProperty-1914"><a href="#DataBlocksizeProperty-1914"><span class="linenos">1914</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataBlocksizeProperty-1915"><a href="#DataBlocksizeProperty-1915"><span class="linenos">1915</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataBlocksizeProperty-1916"><a href="#DataBlocksizeProperty-1916"><span class="linenos">1916</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="DataBlocksizeProperty-1917"><a href="#DataBlocksizeProperty-1917"><span class="linenos">1917</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataBlocksizeProperty-1943"><a href="#DataBlocksizeProperty-1943"><span class="linenos">1943</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-1944"><a href="#DataBlocksizeProperty-1944"><span class="linenos">1944</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataBlocksizeProperty-1945"><a href="#DataBlocksizeProperty-1945"><span class="linenos">1945</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="DataBlocksizeProperty-1946"><a href="#DataBlocksizeProperty-1946"><span class="linenos">1946</span></a> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataBlocksizeProperty-1947"><a href="#DataBlocksizeProperty-1947"><span class="linenos">1947</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataBlocksizeProperty-1948"><a href="#DataBlocksizeProperty-1948"><span class="linenos">1948</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataBlocksizeProperty-1949"><a href="#DataBlocksizeProperty-1949"><span class="linenos">1949</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="DataBlocksizeProperty-1950"><a href="#DataBlocksizeProperty-1950"><span class="linenos">1950</span></a> <span class="p">}</span>
</span></pre></div>
@@ -26188,8 +27216,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-1920"><a href="#DefinerProperty-1920"><span class="linenos">1920</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-1921"><a href="#DefinerProperty-1921"><span class="linenos">1921</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1953"><a href="#DefinerProperty-1953"><span class="linenos">1953</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-1954"><a href="#DefinerProperty-1954"><span class="linenos">1954</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -26287,8 +27315,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-1924"><a href="#DistKeyProperty-1924"><span class="linenos">1924</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-1925"><a href="#DistKeyProperty-1925"><span class="linenos">1925</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1957"><a href="#DistKeyProperty-1957"><span class="linenos">1957</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-1958"><a href="#DistKeyProperty-1958"><span class="linenos">1958</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -26386,8 +27414,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-1928"><a href="#DistStyleProperty-1928"><span class="linenos">1928</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-1929"><a href="#DistStyleProperty-1929"><span class="linenos">1929</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1961"><a href="#DistStyleProperty-1961"><span class="linenos">1961</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-1962"><a href="#DistStyleProperty-1962"><span class="linenos">1962</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -26485,8 +27513,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-1932"><a href="#EngineProperty-1932"><span class="linenos">1932</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-1933"><a href="#EngineProperty-1933"><span class="linenos">1933</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1965"><a href="#EngineProperty-1965"><span class="linenos">1965</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-1966"><a href="#EngineProperty-1966"><span class="linenos">1966</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -26584,8 +27612,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#HeapProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="HeapProperty-1936"><a href="#HeapProperty-1936"><span class="linenos">1936</span></a><span class="k">class</span> <span class="nc">HeapProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="HeapProperty-1937"><a href="#HeapProperty-1937"><span class="linenos">1937</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="HeapProperty-1969"><a href="#HeapProperty-1969"><span class="linenos">1969</span></a><span class="k">class</span> <span class="nc">HeapProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="HeapProperty-1970"><a href="#HeapProperty-1970"><span class="linenos">1970</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
</span></pre></div>
@@ -26683,8 +27711,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#ToTableProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ToTableProperty-1940"><a href="#ToTableProperty-1940"><span class="linenos">1940</span></a><span class="k">class</span> <span class="nc">ToTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="ToTableProperty-1941"><a href="#ToTableProperty-1941"><span class="linenos">1941</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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="ToTableProperty-1973"><a href="#ToTableProperty-1973"><span class="linenos">1973</span></a><span class="k">class</span> <span class="nc">ToTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="ToTableProperty-1974"><a href="#ToTableProperty-1974"><span class="linenos">1974</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -26782,8 +27810,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-1944"><a href="#ExecuteAsProperty-1944"><span class="linenos">1944</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-1945"><a href="#ExecuteAsProperty-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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ExecuteAsProperty-1977"><a href="#ExecuteAsProperty-1977"><span class="linenos">1977</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-1978"><a href="#ExecuteAsProperty-1978"><span class="linenos">1978</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -26881,8 +27909,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-1948"><a href="#ExternalProperty-1948"><span class="linenos">1948</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-1949"><a href="#ExternalProperty-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;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-1981"><a href="#ExternalProperty-1981"><span class="linenos">1981</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-1982"><a href="#ExternalProperty-1982"><span class="linenos">1982</span></a> <span class="n">arg_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>
@@ -26980,8 +28008,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-1952"><a href="#FallbackProperty-1952"><span class="linenos">1952</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-1953"><a href="#FallbackProperty-1953"><span class="linenos">1953</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-1985"><a href="#FallbackProperty-1985"><span class="linenos">1985</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-1986"><a href="#FallbackProperty-1986"><span class="linenos">1986</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>
@@ -27079,8 +28107,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-1956"><a href="#FileFormatProperty-1956"><span class="linenos">1956</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-1957"><a href="#FileFormatProperty-1957"><span class="linenos">1957</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-1989"><a href="#FileFormatProperty-1989"><span class="linenos">1989</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-1990"><a href="#FileFormatProperty-1990"><span class="linenos">1990</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -27178,8 +28206,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-1960"><a href="#FreespaceProperty-1960"><span class="linenos">1960</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-1961"><a href="#FreespaceProperty-1961"><span class="linenos">1961</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-1993"><a href="#FreespaceProperty-1993"><span class="linenos">1993</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-1994"><a href="#FreespaceProperty-1994"><span class="linenos">1994</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -27277,8 +28305,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-1964"><a href="#InputOutputFormat-1964"><span class="linenos">1964</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-1965"><a href="#InputOutputFormat-1965"><span class="linenos">1965</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-1997"><a href="#InputOutputFormat-1997"><span class="linenos">1997</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-1998"><a href="#InputOutputFormat-1998"><span class="linenos">1998</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>
@@ -27376,14 +28404,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-1968"><a href="#IsolatedLoadingProperty-1968"><span class="linenos">1968</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-1969"><a href="#IsolatedLoadingProperty-1969"><span class="linenos">1969</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="IsolatedLoadingProperty-1970"><a href="#IsolatedLoadingProperty-1970"><span class="linenos">1970</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-1971"><a href="#IsolatedLoadingProperty-1971"><span class="linenos">1971</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-1972"><a href="#IsolatedLoadingProperty-1972"><span class="linenos">1972</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-1973"><a href="#IsolatedLoadingProperty-1973"><span class="linenos">1973</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-1974"><a href="#IsolatedLoadingProperty-1974"><span class="linenos">1974</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-1975"><a href="#IsolatedLoadingProperty-1975"><span class="linenos">1975</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IsolatedLoadingProperty-2001"><a href="#IsolatedLoadingProperty-2001"><span class="linenos">2001</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-2002"><a href="#IsolatedLoadingProperty-2002"><span class="linenos">2002</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="IsolatedLoadingProperty-2003"><a href="#IsolatedLoadingProperty-2003"><span class="linenos">2003</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-2004"><a href="#IsolatedLoadingProperty-2004"><span class="linenos">2004</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-2005"><a href="#IsolatedLoadingProperty-2005"><span class="linenos">2005</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-2006"><a href="#IsolatedLoadingProperty-2006"><span class="linenos">2006</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-2007"><a href="#IsolatedLoadingProperty-2007"><span class="linenos">2007</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-2008"><a href="#IsolatedLoadingProperty-2008"><span class="linenos">2008</span></a> <span class="p">}</span>
</span></pre></div>
@@ -27481,14 +28509,14 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#JournalProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JournalProperty-1978"><a href="#JournalProperty-1978"><span class="linenos">1978</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-1979"><a href="#JournalProperty-1979"><span class="linenos">1979</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="JournalProperty-1980"><a href="#JournalProperty-1980"><span class="linenos">1980</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JournalProperty-1981"><a href="#JournalProperty-1981"><span class="linenos">1981</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JournalProperty-1982"><a href="#JournalProperty-1982"><span class="linenos">1982</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JournalProperty-1983"><a href="#JournalProperty-1983"><span class="linenos">1983</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="JournalProperty-1984"><a href="#JournalProperty-1984"><span class="linenos">1984</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="JournalProperty-1985"><a href="#JournalProperty-1985"><span class="linenos">1985</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JournalProperty-2011"><a href="#JournalProperty-2011"><span class="linenos">2011</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-2012"><a href="#JournalProperty-2012"><span class="linenos">2012</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="JournalProperty-2013"><a href="#JournalProperty-2013"><span class="linenos">2013</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JournalProperty-2014"><a href="#JournalProperty-2014"><span class="linenos">2014</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JournalProperty-2015"><a href="#JournalProperty-2015"><span class="linenos">2015</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JournalProperty-2016"><a href="#JournalProperty-2016"><span class="linenos">2016</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="JournalProperty-2017"><a href="#JournalProperty-2017"><span class="linenos">2017</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="JournalProperty-2018"><a href="#JournalProperty-2018"><span class="linenos">2018</span></a> <span class="p">}</span>
</span></pre></div>
@@ -27586,8 +28614,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-1988"><a href="#LanguageProperty-1988"><span class="linenos">1988</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-1989"><a href="#LanguageProperty-1989"><span class="linenos">1989</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2021"><a href="#LanguageProperty-2021"><span class="linenos">2021</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-2022"><a href="#LanguageProperty-2022"><span class="linenos">2022</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -27685,8 +28713,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#ClusteredByProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClusteredByProperty-1993"><a href="#ClusteredByProperty-1993"><span class="linenos">1993</span></a><span class="k">class</span> <span class="nc">ClusteredByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="ClusteredByProperty-1994"><a href="#ClusteredByProperty-1994"><span class="linenos">1994</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;sorted_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;buckets&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="ClusteredByProperty-2026"><a href="#ClusteredByProperty-2026"><span class="linenos">2026</span></a><span class="k">class</span> <span class="nc">ClusteredByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="ClusteredByProperty-2027"><a href="#ClusteredByProperty-2027"><span class="linenos">2027</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;sorted_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -27784,8 +28812,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DictProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DictProperty-1997"><a href="#DictProperty-1997"><span class="linenos">1997</span></a><span class="k">class</span> <span class="nc">DictProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DictProperty-1998"><a href="#DictProperty-1998"><span class="linenos">1998</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;settings&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="DictProperty-2030"><a href="#DictProperty-2030"><span class="linenos">2030</span></a><span class="k">class</span> <span class="nc">DictProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DictProperty-2031"><a href="#DictProperty-2031"><span class="linenos">2031</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;settings&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -27883,8 +28911,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DictSubProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DictSubProperty-2001"><a href="#DictSubProperty-2001"><span class="linenos">2001</span></a><span class="k">class</span> <span class="nc">DictSubProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DictSubProperty-2002"><a href="#DictSubProperty-2002"><span class="linenos">2002</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DictSubProperty-2034"><a href="#DictSubProperty-2034"><span class="linenos">2034</span></a><span class="k">class</span> <span class="nc">DictSubProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DictSubProperty-2035"><a href="#DictSubProperty-2035"><span class="linenos">2035</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27974,8 +29002,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DictRange"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DictRange-2005"><a href="#DictRange-2005"><span class="linenos">2005</span></a><span class="k">class</span> <span class="nc">DictRange</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DictRange-2006"><a href="#DictRange-2006"><span class="linenos">2006</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;max&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="DictRange-2038"><a href="#DictRange-2038"><span class="linenos">2038</span></a><span class="k">class</span> <span class="nc">DictRange</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DictRange-2039"><a href="#DictRange-2039"><span class="linenos">2039</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -28073,8 +29101,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#OnCluster"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OnCluster-2011"><a href="#OnCluster-2011"><span class="linenos">2011</span></a><span class="k">class</span> <span class="nc">OnCluster</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="OnCluster-2012"><a href="#OnCluster-2012"><span class="linenos">2012</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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="OnCluster-2044"><a href="#OnCluster-2044"><span class="linenos">2044</span></a><span class="k">class</span> <span class="nc">OnCluster</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="OnCluster-2045"><a href="#OnCluster-2045"><span class="linenos">2045</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -28172,8 +29200,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-2015"><a href="#LikeProperty-2015"><span class="linenos">2015</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-2016"><a href="#LikeProperty-2016"><span class="linenos">2016</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-2048"><a href="#LikeProperty-2048"><span class="linenos">2048</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-2049"><a href="#LikeProperty-2049"><span class="linenos">2049</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -28271,8 +29299,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-2019"><a href="#LocationProperty-2019"><span class="linenos">2019</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-2020"><a href="#LocationProperty-2020"><span class="linenos">2020</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2052"><a href="#LocationProperty-2052"><span class="linenos">2052</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-2053"><a href="#LocationProperty-2053"><span class="linenos">2053</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -28370,14 +29398,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-2023"><a href="#LockingProperty-2023"><span class="linenos">2023</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-2024"><a href="#LockingProperty-2024"><span class="linenos">2024</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="LockingProperty-2025"><a href="#LockingProperty-2025"><span class="linenos">2025</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-2026"><a href="#LockingProperty-2026"><span class="linenos">2026</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-2027"><a href="#LockingProperty-2027"><span class="linenos">2027</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-2028"><a href="#LockingProperty-2028"><span class="linenos">2028</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-2029"><a href="#LockingProperty-2029"><span class="linenos">2029</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-2030"><a href="#LockingProperty-2030"><span class="linenos">2030</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LockingProperty-2056"><a href="#LockingProperty-2056"><span class="linenos">2056</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-2057"><a href="#LockingProperty-2057"><span class="linenos">2057</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="LockingProperty-2058"><a href="#LockingProperty-2058"><span class="linenos">2058</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-2059"><a href="#LockingProperty-2059"><span class="linenos">2059</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-2060"><a href="#LockingProperty-2060"><span class="linenos">2060</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-2061"><a href="#LockingProperty-2061"><span class="linenos">2061</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-2062"><a href="#LockingProperty-2062"><span class="linenos">2062</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-2063"><a href="#LockingProperty-2063"><span class="linenos">2063</span></a> <span class="p">}</span>
</span></pre></div>
@@ -28475,8 +29503,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-2033"><a href="#LogProperty-2033"><span class="linenos">2033</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-2034"><a href="#LogProperty-2034"><span class="linenos">2034</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-2066"><a href="#LogProperty-2066"><span class="linenos">2066</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-2067"><a href="#LogProperty-2067"><span class="linenos">2067</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>
@@ -28574,8 +29602,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-2037"><a href="#MaterializedProperty-2037"><span class="linenos">2037</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-2038"><a href="#MaterializedProperty-2038"><span class="linenos">2038</span></a> <span class="n">arg_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-2070"><a href="#MaterializedProperty-2070"><span class="linenos">2070</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-2071"><a href="#MaterializedProperty-2071"><span class="linenos">2071</span></a> <span class="n">arg_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>
@@ -28673,8 +29701,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-2041"><a href="#MergeBlockRatioProperty-2041"><span class="linenos">2041</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-2042"><a href="#MergeBlockRatioProperty-2042"><span class="linenos">2042</span></a> <span class="n">arg_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-2074"><a href="#MergeBlockRatioProperty-2074"><span class="linenos">2074</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-2075"><a href="#MergeBlockRatioProperty-2075"><span class="linenos">2075</span></a> <span class="n">arg_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>
@@ -28772,8 +29800,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-2045"><a href="#NoPrimaryIndexProperty-2045"><span class="linenos">2045</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-2046"><a href="#NoPrimaryIndexProperty-2046"><span class="linenos">2046</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NoPrimaryIndexProperty-2078"><a href="#NoPrimaryIndexProperty-2078"><span class="linenos">2078</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-2079"><a href="#NoPrimaryIndexProperty-2079"><span class="linenos">2079</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
</span></pre></div>
@@ -28860,6 +29888,105 @@ Otherwise, this resets the expression.</li>
</dl>
</div>
</section>
+ <section id="OnProperty">
+ <input id="OnProperty-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">OnProperty</span><wbr>(<span class="base"><a href="#Property">Property</a></span>):
+
+ <label class="view-source-button" for="OnProperty-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#OnProperty"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="OnProperty-2082"><a href="#OnProperty-2082"><span class="linenos">2082</span></a><span class="k">class</span> <span class="nc">OnProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="OnProperty-2083"><a href="#OnProperty-2083"><span class="linenos">2083</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
+
+
+
+
+ <div id="OnProperty.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True}</span>
+
+
+ </div>
+ <a class="headerlink" href="#OnProperty.arg_types"></a>
+
+
+
+ </div>
+ <div id="OnProperty.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;onproperty&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#OnProperty.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="OnProperty.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="OnProperty.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="OnProperty.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="OnProperty.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="OnProperty.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="OnProperty.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="OnProperty.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="OnProperty.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="OnProperty.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="OnProperty.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="OnProperty.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="OnProperty.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="OnProperty.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="OnProperty.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="OnProperty.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="OnProperty.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="OnProperty.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="OnProperty.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="OnProperty.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="OnProperty.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="OnProperty.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="OnProperty.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="OnProperty.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="OnProperty.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="OnProperty.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="OnProperty.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="OnProperty.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="OnProperty.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="OnProperty.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="OnProperty.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="OnProperty.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="OnProperty.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="OnProperty.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="OnProperty.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="OnProperty.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="OnProperty.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="OnProperty.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="OnProperty.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="OnProperty.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="OnProperty.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="OnProperty.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="OnProperty.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="OnProperty.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="OnProperty.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="OnProperty.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="OnProperty.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="OnProperty.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="OnProperty.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="OnCommitProperty">
<input id="OnCommitProperty-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -28871,21 +29998,21 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#OnCommitProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OnCommitProperty-2049"><a href="#OnCommitProperty-2049"><span class="linenos">2049</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-2050"><a href="#OnCommitProperty-2050"><span class="linenos">2050</span></a> <span class="n">arg_type</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;delete&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-2086"><a href="#OnCommitProperty-2086"><span class="linenos">2086</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-2087"><a href="#OnCommitProperty-2087"><span class="linenos">2087</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
- <div id="OnCommitProperty.arg_type" class="classattr">
+ <div id="OnCommitProperty.arg_types" class="classattr">
<div class="attr variable">
- <span class="name">arg_type</span> =
+ <span class="name">arg_types</span> =
<span class="default_value">{&#39;delete&#39;: False}</span>
</div>
- <a class="headerlink" href="#OnCommitProperty.arg_type"></a>
+ <a class="headerlink" href="#OnCommitProperty.arg_types"></a>
@@ -28956,10 +30083,6 @@ Otherwise, this resets the expression.</li>
<dd id="OnCommitProperty.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
- <div><dt><a href="#Property">Property</a></dt>
- <dd id="OnCommitProperty.arg_types" class="variable"><a href="#Property.arg_types">arg_types</a></dd>
-
- </div>
</dl>
</div>
</section>
@@ -28974,8 +30097,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-2053"><a href="#PartitionedByProperty-2053"><span class="linenos">2053</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-2054"><a href="#PartitionedByProperty-2054"><span class="linenos">2054</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2090"><a href="#PartitionedByProperty-2090"><span class="linenos">2090</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-2091"><a href="#PartitionedByProperty-2091"><span class="linenos">2091</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -29073,8 +30196,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-2057"><a href="#ReturnsProperty-2057"><span class="linenos">2057</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-2058"><a href="#ReturnsProperty-2058"><span class="linenos">2058</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-2094"><a href="#ReturnsProperty-2094"><span class="linenos">2094</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-2095"><a href="#ReturnsProperty-2095"><span class="linenos">2095</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -29172,8 +30295,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-2061"><a href="#RowFormatProperty-2061"><span class="linenos">2061</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-2062"><a href="#RowFormatProperty-2062"><span class="linenos">2062</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2098"><a href="#RowFormatProperty-2098"><span class="linenos">2098</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-2099"><a href="#RowFormatProperty-2099"><span class="linenos">2099</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -29271,17 +30394,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-2065"><a href="#RowFormatDelimitedProperty-2065"><span class="linenos">2065</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-2066"><a href="#RowFormatDelimitedProperty-2066"><span class="linenos">2066</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
-</span><span id="RowFormatDelimitedProperty-2067"><a href="#RowFormatDelimitedProperty-2067"><span class="linenos">2067</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RowFormatDelimitedProperty-2068"><a href="#RowFormatDelimitedProperty-2068"><span class="linenos">2068</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-2069"><a href="#RowFormatDelimitedProperty-2069"><span class="linenos">2069</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-2070"><a href="#RowFormatDelimitedProperty-2070"><span class="linenos">2070</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-2071"><a href="#RowFormatDelimitedProperty-2071"><span class="linenos">2071</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-2072"><a href="#RowFormatDelimitedProperty-2072"><span class="linenos">2072</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-2073"><a href="#RowFormatDelimitedProperty-2073"><span class="linenos">2073</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-2074"><a href="#RowFormatDelimitedProperty-2074"><span class="linenos">2074</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-2075"><a href="#RowFormatDelimitedProperty-2075"><span class="linenos">2075</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatDelimitedProperty-2102"><a href="#RowFormatDelimitedProperty-2102"><span class="linenos">2102</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-2103"><a href="#RowFormatDelimitedProperty-2103"><span class="linenos">2103</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
+</span><span id="RowFormatDelimitedProperty-2104"><a href="#RowFormatDelimitedProperty-2104"><span class="linenos">2104</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RowFormatDelimitedProperty-2105"><a href="#RowFormatDelimitedProperty-2105"><span class="linenos">2105</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-2106"><a href="#RowFormatDelimitedProperty-2106"><span class="linenos">2106</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-2107"><a href="#RowFormatDelimitedProperty-2107"><span class="linenos">2107</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-2108"><a href="#RowFormatDelimitedProperty-2108"><span class="linenos">2108</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-2109"><a href="#RowFormatDelimitedProperty-2109"><span class="linenos">2109</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-2110"><a href="#RowFormatDelimitedProperty-2110"><span class="linenos">2110</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-2111"><a href="#RowFormatDelimitedProperty-2111"><span class="linenos">2111</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-2112"><a href="#RowFormatDelimitedProperty-2112"><span class="linenos">2112</span></a> <span class="p">}</span>
</span></pre></div>
@@ -29380,8 +30503,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-2078"><a href="#RowFormatSerdeProperty-2078"><span class="linenos">2078</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-2079"><a href="#RowFormatSerdeProperty-2079"><span class="linenos">2079</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;serde_properties&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="RowFormatSerdeProperty-2115"><a href="#RowFormatSerdeProperty-2115"><span class="linenos">2115</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-2116"><a href="#RowFormatSerdeProperty-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;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;serde_properties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -29479,16 +30602,16 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#QueryTransform"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="QueryTransform-2083"><a href="#QueryTransform-2083"><span class="linenos">2083</span></a><span class="k">class</span> <span class="nc">QueryTransform</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="QueryTransform-2084"><a href="#QueryTransform-2084"><span class="linenos">2084</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="QueryTransform-2085"><a href="#QueryTransform-2085"><span class="linenos">2085</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="QueryTransform-2086"><a href="#QueryTransform-2086"><span class="linenos">2086</span></a> <span class="s2">&quot;command_script&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="QueryTransform-2087"><a href="#QueryTransform-2087"><span class="linenos">2087</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="QueryTransform-2088"><a href="#QueryTransform-2088"><span class="linenos">2088</span></a> <span class="s2">&quot;row_format_before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="QueryTransform-2089"><a href="#QueryTransform-2089"><span class="linenos">2089</span></a> <span class="s2">&quot;record_writer&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="QueryTransform-2090"><a href="#QueryTransform-2090"><span class="linenos">2090</span></a> <span class="s2">&quot;row_format_after&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="QueryTransform-2091"><a href="#QueryTransform-2091"><span class="linenos">2091</span></a> <span class="s2">&quot;record_reader&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="QueryTransform-2092"><a href="#QueryTransform-2092"><span class="linenos">2092</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="QueryTransform-2120"><a href="#QueryTransform-2120"><span class="linenos">2120</span></a><span class="k">class</span> <span class="nc">QueryTransform</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="QueryTransform-2121"><a href="#QueryTransform-2121"><span class="linenos">2121</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="QueryTransform-2122"><a href="#QueryTransform-2122"><span class="linenos">2122</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="QueryTransform-2123"><a href="#QueryTransform-2123"><span class="linenos">2123</span></a> <span class="s2">&quot;command_script&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="QueryTransform-2124"><a href="#QueryTransform-2124"><span class="linenos">2124</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="QueryTransform-2125"><a href="#QueryTransform-2125"><span class="linenos">2125</span></a> <span class="s2">&quot;row_format_before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="QueryTransform-2126"><a href="#QueryTransform-2126"><span class="linenos">2126</span></a> <span class="s2">&quot;record_writer&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="QueryTransform-2127"><a href="#QueryTransform-2127"><span class="linenos">2127</span></a> <span class="s2">&quot;row_format_after&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="QueryTransform-2128"><a href="#QueryTransform-2128"><span class="linenos">2128</span></a> <span class="s2">&quot;record_reader&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="QueryTransform-2129"><a href="#QueryTransform-2129"><span class="linenos">2129</span></a> <span class="p">}</span>
</span></pre></div>
@@ -29587,8 +30710,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-2095"><a href="#SchemaCommentProperty-2095"><span class="linenos">2095</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-2096"><a href="#SchemaCommentProperty-2096"><span class="linenos">2096</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2132"><a href="#SchemaCommentProperty-2132"><span class="linenos">2132</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-2133"><a href="#SchemaCommentProperty-2133"><span class="linenos">2133</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -29686,8 +30809,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-2099"><a href="#SerdeProperties-2099"><span class="linenos">2099</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-2100"><a href="#SerdeProperties-2100"><span class="linenos">2100</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-2136"><a href="#SerdeProperties-2136"><span class="linenos">2136</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-2137"><a href="#SerdeProperties-2137"><span class="linenos">2137</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>
@@ -29785,8 +30908,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-2103"><a href="#SetProperty-2103"><span class="linenos">2103</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-2104"><a href="#SetProperty-2104"><span class="linenos">2104</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-2140"><a href="#SetProperty-2140"><span class="linenos">2140</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-2141"><a href="#SetProperty-2141"><span class="linenos">2141</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>
@@ -29884,8 +31007,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#SettingsProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SettingsProperty-2107"><a href="#SettingsProperty-2107"><span class="linenos">2107</span></a><span class="k">class</span> <span class="nc">SettingsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="SettingsProperty-2108"><a href="#SettingsProperty-2108"><span class="linenos">2108</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="SettingsProperty-2144"><a href="#SettingsProperty-2144"><span class="linenos">2144</span></a><span class="k">class</span> <span class="nc">SettingsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="SettingsProperty-2145"><a href="#SettingsProperty-2145"><span class="linenos">2145</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>
@@ -29983,8 +31106,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-2111"><a href="#SortKeyProperty-2111"><span class="linenos">2111</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-2112"><a href="#SortKeyProperty-2112"><span class="linenos">2112</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-2148"><a href="#SortKeyProperty-2148"><span class="linenos">2148</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-2149"><a href="#SortKeyProperty-2149"><span class="linenos">2149</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -30082,8 +31205,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-2115"><a href="#SqlSecurityProperty-2115"><span class="linenos">2115</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-2116"><a href="#SqlSecurityProperty-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;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-2152"><a href="#SqlSecurityProperty-2152"><span class="linenos">2152</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-2153"><a href="#SqlSecurityProperty-2153"><span class="linenos">2153</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>
@@ -30181,8 +31304,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-2119"><a href="#StabilityProperty-2119"><span class="linenos">2119</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-2120"><a href="#StabilityProperty-2120"><span class="linenos">2120</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2156"><a href="#StabilityProperty-2156"><span class="linenos">2156</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-2157"><a href="#StabilityProperty-2157"><span class="linenos">2157</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -30280,8 +31403,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-2123"><a href="#TemporaryProperty-2123"><span class="linenos">2123</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-2124"><a href="#TemporaryProperty-2124"><span class="linenos">2124</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TemporaryProperty-2160"><a href="#TemporaryProperty-2160"><span class="linenos">2160</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-2161"><a href="#TemporaryProperty-2161"><span class="linenos">2161</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
</span></pre></div>
@@ -30379,8 +31502,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-2127"><a href="#TransientProperty-2127"><span class="linenos">2127</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-2128"><a href="#TransientProperty-2128"><span class="linenos">2128</span></a> <span class="n">arg_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-2164"><a href="#TransientProperty-2164"><span class="linenos">2164</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-2165"><a href="#TransientProperty-2165"><span class="linenos">2165</span></a> <span class="n">arg_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>
@@ -30478,8 +31601,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-2131"><a href="#VolatileProperty-2131"><span class="linenos">2131</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-2132"><a href="#VolatileProperty-2132"><span class="linenos">2132</span></a> <span class="n">arg_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-2168"><a href="#VolatileProperty-2168"><span class="linenos">2168</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-2169"><a href="#VolatileProperty-2169"><span class="linenos">2169</span></a> <span class="n">arg_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>
@@ -30577,8 +31700,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-2135"><a href="#WithDataProperty-2135"><span class="linenos">2135</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-2136"><a href="#WithDataProperty-2136"><span class="linenos">2136</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-2172"><a href="#WithDataProperty-2172"><span class="linenos">2172</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-2173"><a href="#WithDataProperty-2173"><span class="linenos">2173</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>
@@ -30676,8 +31799,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-2139"><a href="#WithJournalTableProperty-2139"><span class="linenos">2139</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-2140"><a href="#WithJournalTableProperty-2140"><span class="linenos">2140</span></a> <span class="n">arg_types</span> <span class="o">=</span> <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-2176"><a href="#WithJournalTableProperty-2176"><span class="linenos">2176</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-2177"><a href="#WithJournalTableProperty-2177"><span class="linenos">2177</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span 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>
@@ -30775,66 +31898,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-2143"><a href="#Properties-2143"><span class="linenos">2143</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-2144"><a href="#Properties-2144"><span class="linenos">2144</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-2145"><a href="#Properties-2145"><span class="linenos">2145</span></a>
-</span><span id="Properties-2146"><a href="#Properties-2146"><span class="linenos">2146</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Properties-2147"><a href="#Properties-2147"><span class="linenos">2147</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-2148"><a href="#Properties-2148"><span class="linenos">2148</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-2149"><a href="#Properties-2149"><span class="linenos">2149</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-2150"><a href="#Properties-2150"><span class="linenos">2150</span></a> <span class="s2">&quot;CLUSTERED_BY&quot;</span><span class="p">:</span> <span class="n">ClusteredByProperty</span><span class="p">,</span>
-</span><span id="Properties-2151"><a href="#Properties-2151"><span class="linenos">2151</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-2152"><a href="#Properties-2152"><span class="linenos">2152</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-2153"><a href="#Properties-2153"><span class="linenos">2153</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-2154"><a href="#Properties-2154"><span class="linenos">2154</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-2155"><a href="#Properties-2155"><span class="linenos">2155</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-2156"><a href="#Properties-2156"><span class="linenos">2156</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-2157"><a href="#Properties-2157"><span class="linenos">2157</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-2158"><a href="#Properties-2158"><span class="linenos">2158</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-2159"><a href="#Properties-2159"><span class="linenos">2159</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-2160"><a href="#Properties-2160"><span class="linenos">2160</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-2161"><a href="#Properties-2161"><span class="linenos">2161</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-2162"><a href="#Properties-2162"><span class="linenos">2162</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-2163"><a href="#Properties-2163"><span class="linenos">2163</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-2164"><a href="#Properties-2164"><span class="linenos">2164</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-2165"><a href="#Properties-2165"><span class="linenos">2165</span></a> <span class="p">}</span>
-</span><span id="Properties-2166"><a href="#Properties-2166"><span class="linenos">2166</span></a>
-</span><span id="Properties-2167"><a href="#Properties-2167"><span class="linenos">2167</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-2168"><a href="#Properties-2168"><span class="linenos">2168</span></a>
-</span><span id="Properties-2169"><a href="#Properties-2169"><span class="linenos">2169</span></a> <span class="c1"># CREATE property locations</span>
-</span><span id="Properties-2170"><a href="#Properties-2170"><span class="linenos">2170</span></a> <span class="c1"># Form: schema specified</span>
-</span><span id="Properties-2171"><a href="#Properties-2171"><span class="linenos">2171</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="Properties-2172"><a href="#Properties-2172"><span class="linenos">2172</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="Properties-2173"><a href="#Properties-2173"><span class="linenos">2173</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
-</span><span id="Properties-2174"><a href="#Properties-2174"><span class="linenos">2174</span></a> <span class="c1"># with ([POST_WITH])</span>
-</span><span id="Properties-2175"><a href="#Properties-2175"><span class="linenos">2175</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
-</span><span id="Properties-2176"><a href="#Properties-2176"><span class="linenos">2176</span></a> <span class="c1">#</span>
-</span><span id="Properties-2177"><a href="#Properties-2177"><span class="linenos">2177</span></a> <span class="c1"># Form: alias selection</span>
-</span><span id="Properties-2178"><a href="#Properties-2178"><span class="linenos">2178</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="Properties-2179"><a href="#Properties-2179"><span class="linenos">2179</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="Properties-2180"><a href="#Properties-2180"><span class="linenos">2180</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
-</span><span id="Properties-2181"><a href="#Properties-2181"><span class="linenos">2181</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
-</span><span id="Properties-2182"><a href="#Properties-2182"><span class="linenos">2182</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-2183"><a href="#Properties-2183"><span class="linenos">2183</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-2184"><a href="#Properties-2184"><span class="linenos">2184</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-2185"><a href="#Properties-2185"><span class="linenos">2185</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-2186"><a href="#Properties-2186"><span class="linenos">2186</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-2187"><a href="#Properties-2187"><span class="linenos">2187</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-2188"><a href="#Properties-2188"><span class="linenos">2188</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-2189"><a href="#Properties-2189"><span class="linenos">2189</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-2190"><a href="#Properties-2190"><span class="linenos">2190</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-2191"><a href="#Properties-2191"><span class="linenos">2191</span></a>
-</span><span id="Properties-2192"><a href="#Properties-2192"><span class="linenos">2192</span></a> <span class="nd">@classmethod</span>
-</span><span id="Properties-2193"><a href="#Properties-2193"><span class="linenos">2193</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
-</span><span id="Properties-2194"><a href="#Properties-2194"><span class="linenos">2194</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Properties-2195"><a href="#Properties-2195"><span class="linenos">2195</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-2196"><a href="#Properties-2196"><span class="linenos">2196</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-2197"><a href="#Properties-2197"><span class="linenos">2197</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
-</span><span id="Properties-2198"><a href="#Properties-2198"><span class="linenos">2198</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-2199"><a href="#Properties-2199"><span class="linenos">2199</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Properties-2200"><a href="#Properties-2200"><span class="linenos">2200</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-2201"><a href="#Properties-2201"><span class="linenos">2201</span></a>
-</span><span id="Properties-2202"><a href="#Properties-2202"><span class="linenos">2202</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-2180"><a href="#Properties-2180"><span class="linenos">2180</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-2181"><a href="#Properties-2181"><span class="linenos">2181</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-2182"><a href="#Properties-2182"><span class="linenos">2182</span></a>
+</span><span id="Properties-2183"><a href="#Properties-2183"><span class="linenos">2183</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Properties-2184"><a href="#Properties-2184"><span class="linenos">2184</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-2185"><a href="#Properties-2185"><span class="linenos">2185</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-2186"><a href="#Properties-2186"><span class="linenos">2186</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-2187"><a href="#Properties-2187"><span class="linenos">2187</span></a> <span class="s2">&quot;CLUSTERED_BY&quot;</span><span class="p">:</span> <span class="n">ClusteredByProperty</span><span class="p">,</span>
+</span><span id="Properties-2188"><a href="#Properties-2188"><span class="linenos">2188</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-2189"><a href="#Properties-2189"><span class="linenos">2189</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-2190"><a href="#Properties-2190"><span class="linenos">2190</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-2191"><a href="#Properties-2191"><span class="linenos">2191</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-2192"><a href="#Properties-2192"><span class="linenos">2192</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-2193"><a href="#Properties-2193"><span class="linenos">2193</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-2194"><a href="#Properties-2194"><span class="linenos">2194</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-2195"><a href="#Properties-2195"><span class="linenos">2195</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-2196"><a href="#Properties-2196"><span class="linenos">2196</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-2197"><a href="#Properties-2197"><span class="linenos">2197</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-2198"><a href="#Properties-2198"><span class="linenos">2198</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-2199"><a href="#Properties-2199"><span class="linenos">2199</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-2200"><a href="#Properties-2200"><span class="linenos">2200</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-2201"><a href="#Properties-2201"><span class="linenos">2201</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-2202"><a href="#Properties-2202"><span class="linenos">2202</span></a> <span class="p">}</span>
+</span><span id="Properties-2203"><a href="#Properties-2203"><span class="linenos">2203</span></a>
+</span><span id="Properties-2204"><a href="#Properties-2204"><span class="linenos">2204</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-2205"><a href="#Properties-2205"><span class="linenos">2205</span></a>
+</span><span id="Properties-2206"><a href="#Properties-2206"><span class="linenos">2206</span></a> <span class="c1"># CREATE property locations</span>
+</span><span id="Properties-2207"><a href="#Properties-2207"><span class="linenos">2207</span></a> <span class="c1"># Form: schema specified</span>
+</span><span id="Properties-2208"><a href="#Properties-2208"><span class="linenos">2208</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="Properties-2209"><a href="#Properties-2209"><span class="linenos">2209</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="Properties-2210"><a href="#Properties-2210"><span class="linenos">2210</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
+</span><span id="Properties-2211"><a href="#Properties-2211"><span class="linenos">2211</span></a> <span class="c1"># with ([POST_WITH])</span>
+</span><span id="Properties-2212"><a href="#Properties-2212"><span class="linenos">2212</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
+</span><span id="Properties-2213"><a href="#Properties-2213"><span class="linenos">2213</span></a> <span class="c1">#</span>
+</span><span id="Properties-2214"><a href="#Properties-2214"><span class="linenos">2214</span></a> <span class="c1"># Form: alias selection</span>
+</span><span id="Properties-2215"><a href="#Properties-2215"><span class="linenos">2215</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="Properties-2216"><a href="#Properties-2216"><span class="linenos">2216</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="Properties-2217"><a href="#Properties-2217"><span class="linenos">2217</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
+</span><span id="Properties-2218"><a href="#Properties-2218"><span class="linenos">2218</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
+</span><span id="Properties-2219"><a href="#Properties-2219"><span class="linenos">2219</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-2220"><a href="#Properties-2220"><span class="linenos">2220</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-2221"><a href="#Properties-2221"><span class="linenos">2221</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-2222"><a href="#Properties-2222"><span class="linenos">2222</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-2223"><a href="#Properties-2223"><span class="linenos">2223</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-2224"><a href="#Properties-2224"><span class="linenos">2224</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-2225"><a href="#Properties-2225"><span class="linenos">2225</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-2226"><a href="#Properties-2226"><span class="linenos">2226</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-2227"><a href="#Properties-2227"><span class="linenos">2227</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-2228"><a href="#Properties-2228"><span class="linenos">2228</span></a>
+</span><span id="Properties-2229"><a href="#Properties-2229"><span class="linenos">2229</span></a> <span class="nd">@classmethod</span>
+</span><span id="Properties-2230"><a href="#Properties-2230"><span class="linenos">2230</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
+</span><span id="Properties-2231"><a href="#Properties-2231"><span class="linenos">2231</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Properties-2232"><a href="#Properties-2232"><span class="linenos">2232</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-2233"><a href="#Properties-2233"><span class="linenos">2233</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-2234"><a href="#Properties-2234"><span class="linenos">2234</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
+</span><span id="Properties-2235"><a href="#Properties-2235"><span class="linenos">2235</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-2236"><a href="#Properties-2236"><span class="linenos">2236</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Properties-2237"><a href="#Properties-2237"><span class="linenos">2237</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-2238"><a href="#Properties-2238"><span class="linenos">2238</span></a>
+</span><span id="Properties-2239"><a href="#Properties-2239"><span class="linenos">2239</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>
@@ -30890,17 +32013,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-2192"><a href="#Properties.from_dict-2192"><span class="linenos">2192</span></a> <span class="nd">@classmethod</span>
-</span><span id="Properties.from_dict-2193"><a href="#Properties.from_dict-2193"><span class="linenos">2193</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="n">t</span><span class="o">.</span><span class="n">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-2194"><a href="#Properties.from_dict-2194"><span class="linenos">2194</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Properties.from_dict-2195"><a href="#Properties.from_dict-2195"><span class="linenos">2195</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-2196"><a href="#Properties.from_dict-2196"><span class="linenos">2196</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-2197"><a href="#Properties.from_dict-2197"><span class="linenos">2197</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
-</span><span id="Properties.from_dict-2198"><a href="#Properties.from_dict-2198"><span class="linenos">2198</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-2199"><a href="#Properties.from_dict-2199"><span class="linenos">2199</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Properties.from_dict-2200"><a href="#Properties.from_dict-2200"><span class="linenos">2200</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-2201"><a href="#Properties.from_dict-2201"><span class="linenos">2201</span></a>
-</span><span id="Properties.from_dict-2202"><a href="#Properties.from_dict-2202"><span class="linenos">2202</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-2229"><a href="#Properties.from_dict-2229"><span class="linenos">2229</span></a> <span class="nd">@classmethod</span>
+</span><span id="Properties.from_dict-2230"><a href="#Properties.from_dict-2230"><span class="linenos">2230</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="n">t</span><span class="o">.</span><span class="n">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-2231"><a href="#Properties.from_dict-2231"><span class="linenos">2231</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Properties.from_dict-2232"><a href="#Properties.from_dict-2232"><span class="linenos">2232</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-2233"><a href="#Properties.from_dict-2233"><span class="linenos">2233</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-2234"><a href="#Properties.from_dict-2234"><span class="linenos">2234</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
+</span><span id="Properties.from_dict-2235"><a href="#Properties.from_dict-2235"><span class="linenos">2235</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-2236"><a href="#Properties.from_dict-2236"><span class="linenos">2236</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Properties.from_dict-2237"><a href="#Properties.from_dict-2237"><span class="linenos">2237</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-2238"><a href="#Properties.from_dict-2238"><span class="linenos">2238</span></a>
+</span><span id="Properties.from_dict-2239"><a href="#Properties.from_dict-2239"><span class="linenos">2239</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>
@@ -30987,15 +32110,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-2182"><a href="#Properties.Location-2182"><span class="linenos">2182</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-2183"><a href="#Properties.Location-2183"><span class="linenos">2183</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-2184"><a href="#Properties.Location-2184"><span class="linenos">2184</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-2185"><a href="#Properties.Location-2185"><span class="linenos">2185</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-2186"><a href="#Properties.Location-2186"><span class="linenos">2186</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-2187"><a href="#Properties.Location-2187"><span class="linenos">2187</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-2188"><a href="#Properties.Location-2188"><span class="linenos">2188</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-2189"><a href="#Properties.Location-2189"><span class="linenos">2189</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-2190"><a href="#Properties.Location-2190"><span class="linenos">2190</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-2219"><a href="#Properties.Location-2219"><span class="linenos">2219</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-2220"><a href="#Properties.Location-2220"><span class="linenos">2220</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-2221"><a href="#Properties.Location-2221"><span class="linenos">2221</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-2222"><a href="#Properties.Location-2222"><span class="linenos">2222</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-2223"><a href="#Properties.Location-2223"><span class="linenos">2223</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-2224"><a href="#Properties.Location-2224"><span class="linenos">2224</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-2225"><a href="#Properties.Location-2225"><span class="linenos">2225</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-2226"><a href="#Properties.Location-2226"><span class="linenos">2226</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-2227"><a href="#Properties.Location-2227"><span class="linenos">2227</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span></pre></div>
@@ -31121,8 +32244,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-2205"><a href="#Qualify-2205"><span class="linenos">2205</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-2206"><a href="#Qualify-2206"><span class="linenos">2206</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Qualify-2242"><a href="#Qualify-2242"><span class="linenos">2242</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-2243"><a href="#Qualify-2243"><span class="linenos">2243</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -31209,8 +32332,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-2210"><a href="#Return-2210"><span class="linenos">2210</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-2211"><a href="#Return-2211"><span class="linenos">2211</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Return-2247"><a href="#Return-2247"><span class="linenos">2247</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-2248"><a href="#Return-2248"><span class="linenos">2248</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -31297,8 +32420,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-2214"><a href="#Reference-2214"><span class="linenos">2214</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-2215"><a href="#Reference-2215"><span class="linenos">2215</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-2251"><a href="#Reference-2251"><span class="linenos">2251</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-2252"><a href="#Reference-2252"><span class="linenos">2252</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -31396,29 +32519,29 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Tuple"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tuple-2218"><a href="#Tuple-2218"><span class="linenos">2218</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-2219"><a href="#Tuple-2219"><span class="linenos">2219</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="Tuple-2220"><a href="#Tuple-2220"><span class="linenos">2220</span></a>
-</span><span id="Tuple-2221"><a href="#Tuple-2221"><span class="linenos">2221</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
-</span><span id="Tuple-2222"><a href="#Tuple-2222"><span class="linenos">2222</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Tuple-2223"><a href="#Tuple-2223"><span class="linenos">2223</span></a> <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><span id="Tuple-2224"><a href="#Tuple-2224"><span class="linenos">2224</span></a> <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><span id="Tuple-2225"><a href="#Tuple-2225"><span class="linenos">2225</span></a> <span class="n">unnest</span><span 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="n">t</span><span class="o">.</span><span class="n">Collection</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="Tuple-2226"><a href="#Tuple-2226"><span class="linenos">2226</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="Tuple-2227"><a href="#Tuple-2227"><span class="linenos">2227</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Tuple-2228"><a href="#Tuple-2228"><span class="linenos">2228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
-</span><span id="Tuple-2229"><a href="#Tuple-2229"><span class="linenos">2229</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
-</span><span id="Tuple-2230"><a href="#Tuple-2230"><span class="linenos">2230</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="Tuple-2231"><a href="#Tuple-2231"><span class="linenos">2231</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="Tuple-2232"><a href="#Tuple-2232"><span class="linenos">2232</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="Tuple-2233"><a href="#Tuple-2233"><span class="linenos">2233</span></a> <span class="n">unnest</span><span class="o">=</span><span class="n">Unnest</span><span class="p">(</span>
-</span><span id="Tuple-2234"><a href="#Tuple-2234"><span class="linenos">2234</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Tuple-2235"><a href="#Tuple-2235"><span class="linenos">2235</span></a> <span class="n">maybe_parse</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">ExpOrStr</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="o">**</span><span class="n">opts</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">unnest</span><span class="p">)</span>
-</span><span id="Tuple-2236"><a href="#Tuple-2236"><span class="linenos">2236</span></a> <span class="p">]</span>
-</span><span id="Tuple-2237"><a href="#Tuple-2237"><span class="linenos">2237</span></a> <span class="p">)</span>
-</span><span id="Tuple-2238"><a href="#Tuple-2238"><span class="linenos">2238</span></a> <span class="k">if</span> <span class="n">unnest</span>
-</span><span id="Tuple-2239"><a href="#Tuple-2239"><span class="linenos">2239</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Tuple-2240"><a href="#Tuple-2240"><span class="linenos">2240</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tuple-2255"><a href="#Tuple-2255"><span class="linenos">2255</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-2256"><a href="#Tuple-2256"><span class="linenos">2256</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="Tuple-2257"><a href="#Tuple-2257"><span class="linenos">2257</span></a>
+</span><span id="Tuple-2258"><a href="#Tuple-2258"><span class="linenos">2258</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
+</span><span id="Tuple-2259"><a href="#Tuple-2259"><span class="linenos">2259</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Tuple-2260"><a href="#Tuple-2260"><span class="linenos">2260</span></a> <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><span id="Tuple-2261"><a href="#Tuple-2261"><span class="linenos">2261</span></a> <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><span id="Tuple-2262"><a href="#Tuple-2262"><span class="linenos">2262</span></a> <span class="n">unnest</span><span 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="n">t</span><span class="o">.</span><span class="n">Collection</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="Tuple-2263"><a href="#Tuple-2263"><span class="linenos">2263</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="Tuple-2264"><a href="#Tuple-2264"><span class="linenos">2264</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Tuple-2265"><a href="#Tuple-2265"><span class="linenos">2265</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
+</span><span id="Tuple-2266"><a href="#Tuple-2266"><span class="linenos">2266</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
+</span><span id="Tuple-2267"><a href="#Tuple-2267"><span class="linenos">2267</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="Tuple-2268"><a href="#Tuple-2268"><span class="linenos">2268</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="Tuple-2269"><a href="#Tuple-2269"><span class="linenos">2269</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="Tuple-2270"><a href="#Tuple-2270"><span class="linenos">2270</span></a> <span class="n">unnest</span><span class="o">=</span><span class="n">Unnest</span><span class="p">(</span>
+</span><span id="Tuple-2271"><a href="#Tuple-2271"><span class="linenos">2271</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Tuple-2272"><a href="#Tuple-2272"><span class="linenos">2272</span></a> <span class="n">maybe_parse</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">ExpOrStr</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="o">**</span><span class="n">opts</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">unnest</span><span class="p">)</span>
+</span><span id="Tuple-2273"><a href="#Tuple-2273"><span class="linenos">2273</span></a> <span class="p">]</span>
+</span><span id="Tuple-2274"><a href="#Tuple-2274"><span class="linenos">2274</span></a> <span class="p">)</span>
+</span><span id="Tuple-2275"><a href="#Tuple-2275"><span class="linenos">2275</span></a> <span class="k">if</span> <span class="n">unnest</span>
+</span><span id="Tuple-2276"><a href="#Tuple-2276"><span class="linenos">2276</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Tuple-2277"><a href="#Tuple-2277"><span class="linenos">2277</span></a> <span class="p">)</span>
</span></pre></div>
@@ -31447,26 +32570,26 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Tuple.isin"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tuple.isin-2221"><a href="#Tuple.isin-2221"><span class="linenos">2221</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
-</span><span id="Tuple.isin-2222"><a href="#Tuple.isin-2222"><span class="linenos">2222</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Tuple.isin-2223"><a href="#Tuple.isin-2223"><span class="linenos">2223</span></a> <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><span id="Tuple.isin-2224"><a href="#Tuple.isin-2224"><span class="linenos">2224</span></a> <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><span id="Tuple.isin-2225"><a href="#Tuple.isin-2225"><span class="linenos">2225</span></a> <span class="n">unnest</span><span 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="n">t</span><span class="o">.</span><span class="n">Collection</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="Tuple.isin-2226"><a href="#Tuple.isin-2226"><span class="linenos">2226</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="Tuple.isin-2227"><a href="#Tuple.isin-2227"><span class="linenos">2227</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Tuple.isin-2228"><a href="#Tuple.isin-2228"><span class="linenos">2228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
-</span><span id="Tuple.isin-2229"><a href="#Tuple.isin-2229"><span class="linenos">2229</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
-</span><span id="Tuple.isin-2230"><a href="#Tuple.isin-2230"><span class="linenos">2230</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="Tuple.isin-2231"><a href="#Tuple.isin-2231"><span class="linenos">2231</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="Tuple.isin-2232"><a href="#Tuple.isin-2232"><span class="linenos">2232</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="Tuple.isin-2233"><a href="#Tuple.isin-2233"><span class="linenos">2233</span></a> <span class="n">unnest</span><span class="o">=</span><span class="n">Unnest</span><span class="p">(</span>
-</span><span id="Tuple.isin-2234"><a href="#Tuple.isin-2234"><span class="linenos">2234</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Tuple.isin-2235"><a href="#Tuple.isin-2235"><span class="linenos">2235</span></a> <span class="n">maybe_parse</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">ExpOrStr</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="o">**</span><span class="n">opts</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">unnest</span><span class="p">)</span>
-</span><span id="Tuple.isin-2236"><a href="#Tuple.isin-2236"><span class="linenos">2236</span></a> <span class="p">]</span>
-</span><span id="Tuple.isin-2237"><a href="#Tuple.isin-2237"><span class="linenos">2237</span></a> <span class="p">)</span>
-</span><span id="Tuple.isin-2238"><a href="#Tuple.isin-2238"><span class="linenos">2238</span></a> <span class="k">if</span> <span class="n">unnest</span>
-</span><span id="Tuple.isin-2239"><a href="#Tuple.isin-2239"><span class="linenos">2239</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Tuple.isin-2240"><a href="#Tuple.isin-2240"><span class="linenos">2240</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tuple.isin-2258"><a href="#Tuple.isin-2258"><span class="linenos">2258</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
+</span><span id="Tuple.isin-2259"><a href="#Tuple.isin-2259"><span class="linenos">2259</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Tuple.isin-2260"><a href="#Tuple.isin-2260"><span class="linenos">2260</span></a> <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><span id="Tuple.isin-2261"><a href="#Tuple.isin-2261"><span class="linenos">2261</span></a> <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><span id="Tuple.isin-2262"><a href="#Tuple.isin-2262"><span class="linenos">2262</span></a> <span class="n">unnest</span><span 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="n">t</span><span class="o">.</span><span class="n">Collection</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="Tuple.isin-2263"><a href="#Tuple.isin-2263"><span class="linenos">2263</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="Tuple.isin-2264"><a href="#Tuple.isin-2264"><span class="linenos">2264</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Tuple.isin-2265"><a href="#Tuple.isin-2265"><span class="linenos">2265</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
+</span><span id="Tuple.isin-2266"><a href="#Tuple.isin-2266"><span class="linenos">2266</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
+</span><span id="Tuple.isin-2267"><a href="#Tuple.isin-2267"><span class="linenos">2267</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="Tuple.isin-2268"><a href="#Tuple.isin-2268"><span class="linenos">2268</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="Tuple.isin-2269"><a href="#Tuple.isin-2269"><span class="linenos">2269</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="Tuple.isin-2270"><a href="#Tuple.isin-2270"><span class="linenos">2270</span></a> <span class="n">unnest</span><span class="o">=</span><span class="n">Unnest</span><span class="p">(</span>
+</span><span id="Tuple.isin-2271"><a href="#Tuple.isin-2271"><span class="linenos">2271</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Tuple.isin-2272"><a href="#Tuple.isin-2272"><span class="linenos">2272</span></a> <span class="n">maybe_parse</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">ExpOrStr</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="o">**</span><span class="n">opts</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">unnest</span><span class="p">)</span>
+</span><span id="Tuple.isin-2273"><a href="#Tuple.isin-2273"><span class="linenos">2273</span></a> <span class="p">]</span>
+</span><span id="Tuple.isin-2274"><a href="#Tuple.isin-2274"><span class="linenos">2274</span></a> <span class="p">)</span>
+</span><span id="Tuple.isin-2275"><a href="#Tuple.isin-2275"><span class="linenos">2275</span></a> <span class="k">if</span> <span class="n">unnest</span>
+</span><span id="Tuple.isin-2276"><a href="#Tuple.isin-2276"><span class="linenos">2276</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Tuple.isin-2277"><a href="#Tuple.isin-2277"><span class="linenos">2277</span></a> <span class="p">)</span>
</span></pre></div>
@@ -31553,84 +32676,94 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Subqueryable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable-2243"><a href="#Subqueryable-2243"><span class="linenos">2243</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-2244"><a href="#Subqueryable-2244"><span class="linenos">2244</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="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="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">Subquery</span><span class="p">:</span>
-</span><span id="Subqueryable-2245"><a href="#Subqueryable-2245"><span class="linenos">2245</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable-2246"><a href="#Subqueryable-2246"><span class="linenos">2246</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
-</span><span id="Subqueryable-2247"><a href="#Subqueryable-2247"><span class="linenos">2247</span></a>
-</span><span id="Subqueryable-2248"><a href="#Subqueryable-2248"><span class="linenos">2248</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable-2249"><a href="#Subqueryable-2249"><span class="linenos">2249</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
-</span><span id="Subqueryable-2250"><a href="#Subqueryable-2250"><span class="linenos">2250</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
-</span><span id="Subqueryable-2251"><a href="#Subqueryable-2251"><span class="linenos">2251</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
-</span><span id="Subqueryable-2252"><a href="#Subqueryable-2252"><span class="linenos">2252</span></a>
-</span><span id="Subqueryable-2253"><a href="#Subqueryable-2253"><span class="linenos">2253</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable-2254"><a href="#Subqueryable-2254"><span class="linenos">2254</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
-</span><span id="Subqueryable-2255"><a href="#Subqueryable-2255"><span class="linenos">2255</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable-2256"><a href="#Subqueryable-2256"><span class="linenos">2256</span></a>
-</span><span id="Subqueryable-2257"><a href="#Subqueryable-2257"><span class="linenos">2257</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable-2258"><a href="#Subqueryable-2258"><span class="linenos">2258</span></a><span class="sd"> Alias: the subquery</span>
-</span><span id="Subqueryable-2259"><a href="#Subqueryable-2259"><span class="linenos">2259</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable-2260"><a href="#Subqueryable-2260"><span class="linenos">2260</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-2261"><a href="#Subqueryable-2261"><span class="linenos">2261</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="Subqueryable-2262"><a href="#Subqueryable-2262"><span class="linenos">2262</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><span id="Subqueryable-2263"><a href="#Subqueryable-2263"><span class="linenos">2263</span></a>
-</span><span id="Subqueryable-2264"><a href="#Subqueryable-2264"><span class="linenos">2264</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">instance</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="Subqueryable-2265"><a href="#Subqueryable-2265"><span class="linenos">2265</span></a>
-</span><span id="Subqueryable-2266"><a href="#Subqueryable-2266"><span class="linenos">2266</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="Subqueryable-2267"><a href="#Subqueryable-2267"><span class="linenos">2267</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Subqueryable-2268"><a href="#Subqueryable-2268"><span class="linenos">2268</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Subqueryable-2269"><a href="#Subqueryable-2269"><span class="linenos">2269</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
-</span><span id="Subqueryable-2270"><a href="#Subqueryable-2270"><span class="linenos">2270</span></a>
-</span><span id="Subqueryable-2271"><a href="#Subqueryable-2271"><span class="linenos">2271</span></a> <span class="nd">@property</span>
-</span><span id="Subqueryable-2272"><a href="#Subqueryable-2272"><span class="linenos">2272</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-2273"><a href="#Subqueryable-2273"><span class="linenos">2273</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-2274"><a href="#Subqueryable-2274"><span class="linenos">2274</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-2275"><a href="#Subqueryable-2275"><span class="linenos">2275</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Subqueryable-2276"><a href="#Subqueryable-2276"><span class="linenos">2276</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-2277"><a href="#Subqueryable-2277"><span class="linenos">2277</span></a>
-</span><span id="Subqueryable-2278"><a href="#Subqueryable-2278"><span class="linenos">2278</span></a> <span class="nd">@property</span>
-</span><span id="Subqueryable-2279"><a href="#Subqueryable-2279"><span class="linenos">2279</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="Subqueryable-2280"><a href="#Subqueryable-2280"><span class="linenos">2280</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-2281"><a href="#Subqueryable-2281"><span class="linenos">2281</span></a>
-</span><span id="Subqueryable-2282"><a href="#Subqueryable-2282"><span class="linenos">2282</span></a> <span class="nd">@property</span>
-</span><span id="Subqueryable-2283"><a href="#Subqueryable-2283"><span class="linenos">2283</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="Subqueryable-2284"><a href="#Subqueryable-2284"><span class="linenos">2284</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-2285"><a href="#Subqueryable-2285"><span class="linenos">2285</span></a>
-</span><span id="Subqueryable-2286"><a href="#Subqueryable-2286"><span class="linenos">2286</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="Subqueryable-2287"><a href="#Subqueryable-2287"><span class="linenos">2287</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Subqueryable-2288"><a href="#Subqueryable-2288"><span class="linenos">2288</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Subqueryable-2289"><a href="#Subqueryable-2289"><span class="linenos">2289</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Subqueryable-2290"><a href="#Subqueryable-2290"><span class="linenos">2290</span></a> <span class="n">recursive</span><span 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="Subqueryable-2291"><a href="#Subqueryable-2291"><span class="linenos">2291</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="Subqueryable-2292"><a href="#Subqueryable-2292"><span class="linenos">2292</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="Subqueryable-2293"><a href="#Subqueryable-2293"><span class="linenos">2293</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="Subqueryable-2294"><a href="#Subqueryable-2294"><span class="linenos">2294</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable-2295"><a href="#Subqueryable-2295"><span class="linenos">2295</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
-</span><span id="Subqueryable-2296"><a href="#Subqueryable-2296"><span class="linenos">2296</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable-2297"><a href="#Subqueryable-2297"><span class="linenos">2297</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="Subqueryable-2298"><a href="#Subqueryable-2298"><span class="linenos">2298</span></a>
-</span><span id="Subqueryable-2299"><a href="#Subqueryable-2299"><span class="linenos">2299</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable-2300"><a href="#Subqueryable-2300"><span class="linenos">2300</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-2301"><a href="#Subqueryable-2301"><span class="linenos">2301</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable-2280"><a href="#Subqueryable-2280"><span class="linenos">2280</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-2281"><a href="#Subqueryable-2281"><span class="linenos">2281</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="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="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">Subquery</span><span class="p">:</span>
+</span><span id="Subqueryable-2282"><a href="#Subqueryable-2282"><span class="linenos">2282</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable-2283"><a href="#Subqueryable-2283"><span class="linenos">2283</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
+</span><span id="Subqueryable-2284"><a href="#Subqueryable-2284"><span class="linenos">2284</span></a>
+</span><span id="Subqueryable-2285"><a href="#Subqueryable-2285"><span class="linenos">2285</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable-2286"><a href="#Subqueryable-2286"><span class="linenos">2286</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
+</span><span id="Subqueryable-2287"><a href="#Subqueryable-2287"><span class="linenos">2287</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
+</span><span id="Subqueryable-2288"><a href="#Subqueryable-2288"><span class="linenos">2288</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
+</span><span id="Subqueryable-2289"><a href="#Subqueryable-2289"><span class="linenos">2289</span></a>
+</span><span id="Subqueryable-2290"><a href="#Subqueryable-2290"><span class="linenos">2290</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable-2291"><a href="#Subqueryable-2291"><span class="linenos">2291</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
+</span><span id="Subqueryable-2292"><a href="#Subqueryable-2292"><span class="linenos">2292</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable-2293"><a href="#Subqueryable-2293"><span class="linenos">2293</span></a>
+</span><span id="Subqueryable-2294"><a href="#Subqueryable-2294"><span class="linenos">2294</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable-2295"><a href="#Subqueryable-2295"><span class="linenos">2295</span></a><span class="sd"> Alias: the subquery</span>
+</span><span id="Subqueryable-2296"><a href="#Subqueryable-2296"><span class="linenos">2296</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable-2297"><a href="#Subqueryable-2297"><span class="linenos">2297</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-2298"><a href="#Subqueryable-2298"><span class="linenos">2298</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="Subqueryable-2299"><a href="#Subqueryable-2299"><span class="linenos">2299</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><span id="Subqueryable-2300"><a href="#Subqueryable-2300"><span class="linenos">2300</span></a>
+</span><span id="Subqueryable-2301"><a href="#Subqueryable-2301"><span class="linenos">2301</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">instance</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="Subqueryable-2302"><a href="#Subqueryable-2302"><span class="linenos">2302</span></a>
-</span><span id="Subqueryable-2303"><a href="#Subqueryable-2303"><span class="linenos">2303</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable-2304"><a href="#Subqueryable-2304"><span class="linenos">2304</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
-</span><span id="Subqueryable-2305"><a href="#Subqueryable-2305"><span class="linenos">2305</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="Subqueryable-2306"><a href="#Subqueryable-2306"><span class="linenos">2306</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
-</span><span id="Subqueryable-2307"><a href="#Subqueryable-2307"><span class="linenos">2307</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Subqueryable-2308"><a href="#Subqueryable-2308"><span class="linenos">2308</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="Subqueryable-2309"><a href="#Subqueryable-2309"><span class="linenos">2309</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Subqueryable-2310"><a href="#Subqueryable-2310"><span class="linenos">2310</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Subqueryable-2311"><a href="#Subqueryable-2311"><span class="linenos">2311</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Subqueryable-2312"><a href="#Subqueryable-2312"><span class="linenos">2312</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable-2313"><a href="#Subqueryable-2313"><span class="linenos">2313</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Subqueryable-2303"><a href="#Subqueryable-2303"><span class="linenos">2303</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="Subqueryable-2304"><a href="#Subqueryable-2304"><span class="linenos">2304</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Subqueryable-2305"><a href="#Subqueryable-2305"><span class="linenos">2305</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Subqueryable-2306"><a href="#Subqueryable-2306"><span class="linenos">2306</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</span><span id="Subqueryable-2307"><a href="#Subqueryable-2307"><span class="linenos">2307</span></a>
+</span><span id="Subqueryable-2308"><a href="#Subqueryable-2308"><span class="linenos">2308</span></a> <span class="nd">@property</span>
+</span><span id="Subqueryable-2309"><a href="#Subqueryable-2309"><span class="linenos">2309</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-2310"><a href="#Subqueryable-2310"><span class="linenos">2310</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-2311"><a href="#Subqueryable-2311"><span class="linenos">2311</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-2312"><a href="#Subqueryable-2312"><span class="linenos">2312</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="Subqueryable-2313"><a href="#Subqueryable-2313"><span class="linenos">2313</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-2314"><a href="#Subqueryable-2314"><span class="linenos">2314</span></a>
-</span><span id="Subqueryable-2315"><a href="#Subqueryable-2315"><span class="linenos">2315</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable-2316"><a href="#Subqueryable-2316"><span class="linenos">2316</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Subqueryable-2317"><a href="#Subqueryable-2317"><span class="linenos">2317</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable-2318"><a href="#Subqueryable-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
-</span><span id="Subqueryable-2319"><a href="#Subqueryable-2319"><span class="linenos">2319</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Subqueryable-2320"><a href="#Subqueryable-2320"><span class="linenos">2320</span></a> <span class="p">)</span>
+</span><span id="Subqueryable-2315"><a href="#Subqueryable-2315"><span class="linenos">2315</span></a> <span class="nd">@property</span>
+</span><span id="Subqueryable-2316"><a href="#Subqueryable-2316"><span class="linenos">2316</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="Subqueryable-2317"><a href="#Subqueryable-2317"><span class="linenos">2317</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-2318"><a href="#Subqueryable-2318"><span class="linenos">2318</span></a>
+</span><span id="Subqueryable-2319"><a href="#Subqueryable-2319"><span class="linenos">2319</span></a> <span class="nd">@property</span>
+</span><span id="Subqueryable-2320"><a href="#Subqueryable-2320"><span class="linenos">2320</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="Subqueryable-2321"><a href="#Subqueryable-2321"><span class="linenos">2321</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-2322"><a href="#Subqueryable-2322"><span class="linenos">2322</span></a>
+</span><span id="Subqueryable-2323"><a href="#Subqueryable-2323"><span class="linenos">2323</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Subqueryable-2324"><a href="#Subqueryable-2324"><span class="linenos">2324</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable-2325"><a href="#Subqueryable-2325"><span class="linenos">2325</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Subqueryable-2326"><a href="#Subqueryable-2326"><span class="linenos">2326</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="Subqueryable-2327"><a href="#Subqueryable-2327"><span class="linenos">2327</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="Subqueryable-2328"><a href="#Subqueryable-2328"><span class="linenos">2328</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="Subqueryable-2329"><a href="#Subqueryable-2329"><span class="linenos">2329</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable-2330"><a href="#Subqueryable-2330"><span class="linenos">2330</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
+</span><span id="Subqueryable-2331"><a href="#Subqueryable-2331"><span class="linenos">2331</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `select`&quot;</span><span class="p">)</span>
+</span><span id="Subqueryable-2332"><a href="#Subqueryable-2332"><span class="linenos">2332</span></a>
+</span><span id="Subqueryable-2333"><a href="#Subqueryable-2333"><span class="linenos">2333</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="Subqueryable-2334"><a href="#Subqueryable-2334"><span class="linenos">2334</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable-2335"><a href="#Subqueryable-2335"><span class="linenos">2335</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Subqueryable-2336"><a href="#Subqueryable-2336"><span class="linenos">2336</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Subqueryable-2337"><a href="#Subqueryable-2337"><span class="linenos">2337</span></a> <span class="n">recursive</span><span 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="Subqueryable-2338"><a href="#Subqueryable-2338"><span class="linenos">2338</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="Subqueryable-2339"><a href="#Subqueryable-2339"><span class="linenos">2339</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="Subqueryable-2340"><a href="#Subqueryable-2340"><span class="linenos">2340</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="Subqueryable-2341"><a href="#Subqueryable-2341"><span class="linenos">2341</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable-2342"><a href="#Subqueryable-2342"><span class="linenos">2342</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
+</span><span id="Subqueryable-2343"><a href="#Subqueryable-2343"><span class="linenos">2343</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable-2344"><a href="#Subqueryable-2344"><span class="linenos">2344</span></a><span class="sd"> Append to or set the common table expressions.</span>
+</span><span id="Subqueryable-2345"><a href="#Subqueryable-2345"><span class="linenos">2345</span></a>
+</span><span id="Subqueryable-2346"><a href="#Subqueryable-2346"><span class="linenos">2346</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable-2347"><a href="#Subqueryable-2347"><span class="linenos">2347</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-2348"><a href="#Subqueryable-2348"><span class="linenos">2348</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+</span><span id="Subqueryable-2349"><a href="#Subqueryable-2349"><span class="linenos">2349</span></a>
+</span><span id="Subqueryable-2350"><a href="#Subqueryable-2350"><span class="linenos">2350</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable-2351"><a href="#Subqueryable-2351"><span class="linenos">2351</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
+</span><span id="Subqueryable-2352"><a href="#Subqueryable-2352"><span class="linenos">2352</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="Subqueryable-2353"><a href="#Subqueryable-2353"><span class="linenos">2353</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
+</span><span id="Subqueryable-2354"><a href="#Subqueryable-2354"><span class="linenos">2354</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Subqueryable-2355"><a href="#Subqueryable-2355"><span class="linenos">2355</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="Subqueryable-2356"><a href="#Subqueryable-2356"><span class="linenos">2356</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Subqueryable-2357"><a href="#Subqueryable-2357"><span class="linenos">2357</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Subqueryable-2358"><a href="#Subqueryable-2358"><span class="linenos">2358</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Subqueryable-2359"><a href="#Subqueryable-2359"><span class="linenos">2359</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable-2360"><a href="#Subqueryable-2360"><span class="linenos">2360</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Subqueryable-2361"><a href="#Subqueryable-2361"><span class="linenos">2361</span></a>
+</span><span id="Subqueryable-2362"><a href="#Subqueryable-2362"><span class="linenos">2362</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable-2363"><a href="#Subqueryable-2363"><span class="linenos">2363</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Subqueryable-2364"><a href="#Subqueryable-2364"><span class="linenos">2364</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable-2365"><a href="#Subqueryable-2365"><span class="linenos">2365</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="Subqueryable-2366"><a href="#Subqueryable-2366"><span class="linenos">2366</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Subqueryable-2367"><a href="#Subqueryable-2367"><span class="linenos">2367</span></a> <span class="p">)</span>
</span></pre></div>
@@ -31647,27 +32780,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-2244"><a href="#Subqueryable.subquery-2244"><span class="linenos">2244</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="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="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">Subquery</span><span class="p">:</span>
-</span><span id="Subqueryable.subquery-2245"><a href="#Subqueryable.subquery-2245"><span class="linenos">2245</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable.subquery-2246"><a href="#Subqueryable.subquery-2246"><span class="linenos">2246</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-2247"><a href="#Subqueryable.subquery-2247"><span class="linenos">2247</span></a>
-</span><span id="Subqueryable.subquery-2248"><a href="#Subqueryable.subquery-2248"><span class="linenos">2248</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable.subquery-2249"><a href="#Subqueryable.subquery-2249"><span class="linenos">2249</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-2250"><a href="#Subqueryable.subquery-2250"><span class="linenos">2250</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
-</span><span id="Subqueryable.subquery-2251"><a href="#Subqueryable.subquery-2251"><span class="linenos">2251</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
-</span><span id="Subqueryable.subquery-2252"><a href="#Subqueryable.subquery-2252"><span class="linenos">2252</span></a>
-</span><span id="Subqueryable.subquery-2253"><a href="#Subqueryable.subquery-2253"><span class="linenos">2253</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable.subquery-2254"><a href="#Subqueryable.subquery-2254"><span class="linenos">2254</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
-</span><span id="Subqueryable.subquery-2255"><a href="#Subqueryable.subquery-2255"><span class="linenos">2255</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable.subquery-2256"><a href="#Subqueryable.subquery-2256"><span class="linenos">2256</span></a>
-</span><span id="Subqueryable.subquery-2257"><a href="#Subqueryable.subquery-2257"><span class="linenos">2257</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable.subquery-2258"><a href="#Subqueryable.subquery-2258"><span class="linenos">2258</span></a><span class="sd"> Alias: the subquery</span>
-</span><span id="Subqueryable.subquery-2259"><a href="#Subqueryable.subquery-2259"><span class="linenos">2259</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable.subquery-2260"><a href="#Subqueryable.subquery-2260"><span class="linenos">2260</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-2261"><a href="#Subqueryable.subquery-2261"><span class="linenos">2261</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="Subqueryable.subquery-2262"><a href="#Subqueryable.subquery-2262"><span class="linenos">2262</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><span id="Subqueryable.subquery-2263"><a href="#Subqueryable.subquery-2263"><span class="linenos">2263</span></a>
-</span><span id="Subqueryable.subquery-2264"><a href="#Subqueryable.subquery-2264"><span class="linenos">2264</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">instance</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="Subqueryable.subquery-2281"><a href="#Subqueryable.subquery-2281"><span class="linenos">2281</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="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="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">Subquery</span><span class="p">:</span>
+</span><span id="Subqueryable.subquery-2282"><a href="#Subqueryable.subquery-2282"><span class="linenos">2282</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable.subquery-2283"><a href="#Subqueryable.subquery-2283"><span class="linenos">2283</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-2284"><a href="#Subqueryable.subquery-2284"><span class="linenos">2284</span></a>
+</span><span id="Subqueryable.subquery-2285"><a href="#Subqueryable.subquery-2285"><span class="linenos">2285</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable.subquery-2286"><a href="#Subqueryable.subquery-2286"><span class="linenos">2286</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-2287"><a href="#Subqueryable.subquery-2287"><span class="linenos">2287</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
+</span><span id="Subqueryable.subquery-2288"><a href="#Subqueryable.subquery-2288"><span class="linenos">2288</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
+</span><span id="Subqueryable.subquery-2289"><a href="#Subqueryable.subquery-2289"><span class="linenos">2289</span></a>
+</span><span id="Subqueryable.subquery-2290"><a href="#Subqueryable.subquery-2290"><span class="linenos">2290</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable.subquery-2291"><a href="#Subqueryable.subquery-2291"><span class="linenos">2291</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
+</span><span id="Subqueryable.subquery-2292"><a href="#Subqueryable.subquery-2292"><span class="linenos">2292</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable.subquery-2293"><a href="#Subqueryable.subquery-2293"><span class="linenos">2293</span></a>
+</span><span id="Subqueryable.subquery-2294"><a href="#Subqueryable.subquery-2294"><span class="linenos">2294</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable.subquery-2295"><a href="#Subqueryable.subquery-2295"><span class="linenos">2295</span></a><span class="sd"> Alias: the subquery</span>
+</span><span id="Subqueryable.subquery-2296"><a href="#Subqueryable.subquery-2296"><span class="linenos">2296</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable.subquery-2297"><a href="#Subqueryable.subquery-2297"><span class="linenos">2297</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-2298"><a href="#Subqueryable.subquery-2298"><span class="linenos">2298</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="Subqueryable.subquery-2299"><a href="#Subqueryable.subquery-2299"><span class="linenos">2299</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><span id="Subqueryable.subquery-2300"><a href="#Subqueryable.subquery-2300"><span class="linenos">2300</span></a>
+</span><span id="Subqueryable.subquery-2301"><a href="#Subqueryable.subquery-2301"><span class="linenos">2301</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">instance</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>
@@ -31711,10 +32844,10 @@ 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-2266"><a href="#Subqueryable.limit-2266"><span class="linenos">2266</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="Subqueryable.limit-2267"><a href="#Subqueryable.limit-2267"><span class="linenos">2267</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Subqueryable.limit-2268"><a href="#Subqueryable.limit-2268"><span class="linenos">2268</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Subqueryable.limit-2269"><a href="#Subqueryable.limit-2269"><span class="linenos">2269</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.limit-2303"><a href="#Subqueryable.limit-2303"><span class="linenos">2303</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="Subqueryable.limit-2304"><a href="#Subqueryable.limit-2304"><span class="linenos">2304</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Subqueryable.limit-2305"><a href="#Subqueryable.limit-2305"><span class="linenos">2305</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Subqueryable.limit-2306"><a href="#Subqueryable.limit-2306"><span class="linenos">2306</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
</span></pre></div>
@@ -31754,6 +32887,32 @@ Otherwise, this resets the expression.</li>
</div>
+ <div id="Subqueryable.select" class="classattr">
+ <input id="Subqueryable.select-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">select</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">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><span class="param"> <span class="n">append</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">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">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="#Subqueryable">sqlglot.expressions.Subqueryable</a></span>:</span></span>
+
+ <label class="view-source-button" for="Subqueryable.select-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Subqueryable.select"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.select-2323"><a href="#Subqueryable.select-2323"><span class="linenos">2323</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Subqueryable.select-2324"><a href="#Subqueryable.select-2324"><span class="linenos">2324</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable.select-2325"><a href="#Subqueryable.select-2325"><span class="linenos">2325</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Subqueryable.select-2326"><a href="#Subqueryable.select-2326"><span class="linenos">2326</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="Subqueryable.select-2327"><a href="#Subqueryable.select-2327"><span class="linenos">2327</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="Subqueryable.select-2328"><a href="#Subqueryable.select-2328"><span class="linenos">2328</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="Subqueryable.select-2329"><a href="#Subqueryable.select-2329"><span class="linenos">2329</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable.select-2330"><a href="#Subqueryable.select-2330"><span class="linenos">2330</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
+</span><span id="Subqueryable.select-2331"><a href="#Subqueryable.select-2331"><span class="linenos">2331</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `select`&quot;</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
<div id="Subqueryable.with_" class="classattr">
<input id="Subqueryable.with_-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -31765,41 +32924,41 @@ 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_-2286"><a href="#Subqueryable.with_-2286"><span class="linenos">2286</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-2287"><a href="#Subqueryable.with_-2287"><span class="linenos">2287</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-2288"><a href="#Subqueryable.with_-2288"><span class="linenos">2288</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-2289"><a href="#Subqueryable.with_-2289"><span class="linenos">2289</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-2290"><a href="#Subqueryable.with_-2290"><span class="linenos">2290</span></a> <span class="n">recursive</span><span 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="Subqueryable.with_-2291"><a href="#Subqueryable.with_-2291"><span class="linenos">2291</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="Subqueryable.with_-2292"><a href="#Subqueryable.with_-2292"><span class="linenos">2292</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="Subqueryable.with_-2293"><a href="#Subqueryable.with_-2293"><span class="linenos">2293</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="Subqueryable.with_-2294"><a href="#Subqueryable.with_-2294"><span class="linenos">2294</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-2295"><a href="#Subqueryable.with_-2295"><span class="linenos">2295</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
-</span><span id="Subqueryable.with_-2296"><a href="#Subqueryable.with_-2296"><span class="linenos">2296</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable.with_-2297"><a href="#Subqueryable.with_-2297"><span class="linenos">2297</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="Subqueryable.with_-2298"><a href="#Subqueryable.with_-2298"><span class="linenos">2298</span></a>
-</span><span id="Subqueryable.with_-2299"><a href="#Subqueryable.with_-2299"><span class="linenos">2299</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable.with_-2300"><a href="#Subqueryable.with_-2300"><span class="linenos">2300</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_-2301"><a href="#Subqueryable.with_-2301"><span class="linenos">2301</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
-</span><span id="Subqueryable.with_-2302"><a href="#Subqueryable.with_-2302"><span class="linenos">2302</span></a>
-</span><span id="Subqueryable.with_-2303"><a href="#Subqueryable.with_-2303"><span class="linenos">2303</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable.with_-2304"><a href="#Subqueryable.with_-2304"><span class="linenos">2304</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
-</span><span id="Subqueryable.with_-2305"><a href="#Subqueryable.with_-2305"><span class="linenos">2305</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="Subqueryable.with_-2306"><a href="#Subqueryable.with_-2306"><span class="linenos">2306</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
-</span><span id="Subqueryable.with_-2307"><a href="#Subqueryable.with_-2307"><span class="linenos">2307</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Subqueryable.with_-2308"><a href="#Subqueryable.with_-2308"><span class="linenos">2308</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="Subqueryable.with_-2309"><a href="#Subqueryable.with_-2309"><span class="linenos">2309</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Subqueryable.with_-2310"><a href="#Subqueryable.with_-2310"><span class="linenos">2310</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Subqueryable.with_-2311"><a href="#Subqueryable.with_-2311"><span class="linenos">2311</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Subqueryable.with_-2312"><a href="#Subqueryable.with_-2312"><span class="linenos">2312</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable.with_-2313"><a href="#Subqueryable.with_-2313"><span class="linenos">2313</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Subqueryable.with_-2314"><a href="#Subqueryable.with_-2314"><span class="linenos">2314</span></a>
-</span><span id="Subqueryable.with_-2315"><a href="#Subqueryable.with_-2315"><span class="linenos">2315</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable.with_-2316"><a href="#Subqueryable.with_-2316"><span class="linenos">2316</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Subqueryable.with_-2317"><a href="#Subqueryable.with_-2317"><span class="linenos">2317</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable.with_-2318"><a href="#Subqueryable.with_-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-2319"><a href="#Subqueryable.with_-2319"><span class="linenos">2319</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Subqueryable.with_-2320"><a href="#Subqueryable.with_-2320"><span class="linenos">2320</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.with_-2333"><a href="#Subqueryable.with_-2333"><span class="linenos">2333</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-2334"><a href="#Subqueryable.with_-2334"><span class="linenos">2334</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2335"><a href="#Subqueryable.with_-2335"><span class="linenos">2335</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2336"><a href="#Subqueryable.with_-2336"><span class="linenos">2336</span></a> <span class="n">as_</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2337"><a href="#Subqueryable.with_-2337"><span class="linenos">2337</span></a> <span class="n">recursive</span><span 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="Subqueryable.with_-2338"><a href="#Subqueryable.with_-2338"><span class="linenos">2338</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="Subqueryable.with_-2339"><a href="#Subqueryable.with_-2339"><span class="linenos">2339</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="Subqueryable.with_-2340"><a href="#Subqueryable.with_-2340"><span class="linenos">2340</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="Subqueryable.with_-2341"><a href="#Subqueryable.with_-2341"><span class="linenos">2341</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2342"><a href="#Subqueryable.with_-2342"><span class="linenos">2342</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subqueryable</span><span class="p">:</span>
+</span><span id="Subqueryable.with_-2343"><a href="#Subqueryable.with_-2343"><span class="linenos">2343</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable.with_-2344"><a href="#Subqueryable.with_-2344"><span class="linenos">2344</span></a><span class="sd"> Append to or set the common table expressions.</span>
+</span><span id="Subqueryable.with_-2345"><a href="#Subqueryable.with_-2345"><span class="linenos">2345</span></a>
+</span><span id="Subqueryable.with_-2346"><a href="#Subqueryable.with_-2346"><span class="linenos">2346</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable.with_-2347"><a href="#Subqueryable.with_-2347"><span class="linenos">2347</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_-2348"><a href="#Subqueryable.with_-2348"><span class="linenos">2348</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+</span><span id="Subqueryable.with_-2349"><a href="#Subqueryable.with_-2349"><span class="linenos">2349</span></a>
+</span><span id="Subqueryable.with_-2350"><a href="#Subqueryable.with_-2350"><span class="linenos">2350</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable.with_-2351"><a href="#Subqueryable.with_-2351"><span class="linenos">2351</span></a><span class="sd"> alias: the SQL code string to parse as the table name.</span>
+</span><span id="Subqueryable.with_-2352"><a href="#Subqueryable.with_-2352"><span class="linenos">2352</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="Subqueryable.with_-2353"><a href="#Subqueryable.with_-2353"><span class="linenos">2353</span></a><span class="sd"> as_: the SQL code string to parse as the table expression.</span>
+</span><span id="Subqueryable.with_-2354"><a href="#Subqueryable.with_-2354"><span class="linenos">2354</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Subqueryable.with_-2355"><a href="#Subqueryable.with_-2355"><span class="linenos">2355</span></a><span class="sd"> recursive: set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="Subqueryable.with_-2356"><a href="#Subqueryable.with_-2356"><span class="linenos">2356</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Subqueryable.with_-2357"><a href="#Subqueryable.with_-2357"><span class="linenos">2357</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Subqueryable.with_-2358"><a href="#Subqueryable.with_-2358"><span class="linenos">2358</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Subqueryable.with_-2359"><a href="#Subqueryable.with_-2359"><span class="linenos">2359</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable.with_-2360"><a href="#Subqueryable.with_-2360"><span class="linenos">2360</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Subqueryable.with_-2361"><a href="#Subqueryable.with_-2361"><span class="linenos">2361</span></a>
+</span><span id="Subqueryable.with_-2362"><a href="#Subqueryable.with_-2362"><span class="linenos">2362</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable.with_-2363"><a href="#Subqueryable.with_-2363"><span class="linenos">2363</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Subqueryable.with_-2364"><a href="#Subqueryable.with_-2364"><span class="linenos">2364</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable.with_-2365"><a href="#Subqueryable.with_-2365"><span class="linenos">2365</span></a> <span class="k">return</span> <span class="n">_apply_cte_builder</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-2366"><a href="#Subqueryable.with_-2366"><span class="linenos">2366</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">as_</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Subqueryable.with_-2367"><a href="#Subqueryable.with_-2367"><span class="linenos">2367</span></a> <span class="p">)</span>
</span></pre></div>
@@ -31919,7 +33078,7 @@ Otherwise, this resets the expressions.</li>
<div class="attr variable">
<span class="name">QUERY_MODIFIERS</span> =
<input id="QUERY_MODIFIERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="QUERY_MODIFIERS-view-value"></label><span class="default_value">{&#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="QUERY_MODIFIERS-view-value"></label><span class="default_value">{&#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;connect&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
</div>
@@ -31939,8 +33098,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#WithTableHint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WithTableHint-2347"><a href="#WithTableHint-2347"><span class="linenos">2347</span></a><span class="k">class</span> <span class="nc">WithTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="WithTableHint-2348"><a href="#WithTableHint-2348"><span class="linenos">2348</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="WithTableHint-2395"><a href="#WithTableHint-2395"><span class="linenos">2395</span></a><span class="k">class</span> <span class="nc">WithTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="WithTableHint-2396"><a href="#WithTableHint-2396"><span class="linenos">2396</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>
@@ -32038,8 +33197,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#IndexTableHint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IndexTableHint-2352"><a href="#IndexTableHint-2352"><span class="linenos">2352</span></a><span class="k">class</span> <span class="nc">IndexTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="IndexTableHint-2353"><a href="#IndexTableHint-2353"><span class="linenos">2353</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;target&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="IndexTableHint-2400"><a href="#IndexTableHint-2400"><span class="linenos">2400</span></a><span class="k">class</span> <span class="nc">IndexTableHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="IndexTableHint-2401"><a href="#IndexTableHint-2401"><span class="linenos">2401</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;target&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -32137,55 +33296,56 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table-2356"><a href="#Table-2356"><span class="linenos">2356</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-2357"><a href="#Table-2357"><span class="linenos">2357</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Table-2358"><a href="#Table-2358"><span class="linenos">2358</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-2359"><a href="#Table-2359"><span class="linenos">2359</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-2360"><a href="#Table-2360"><span class="linenos">2360</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-2361"><a href="#Table-2361"><span class="linenos">2361</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-2362"><a href="#Table-2362"><span class="linenos">2362</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-2363"><a href="#Table-2363"><span class="linenos">2363</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-2364"><a href="#Table-2364"><span class="linenos">2364</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-2365"><a href="#Table-2365"><span class="linenos">2365</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-2366"><a href="#Table-2366"><span class="linenos">2366</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-2367"><a href="#Table-2367"><span class="linenos">2367</span></a> <span class="p">}</span>
-</span><span id="Table-2368"><a href="#Table-2368"><span class="linenos">2368</span></a>
-</span><span id="Table-2369"><a href="#Table-2369"><span class="linenos">2369</span></a> <span class="nd">@property</span>
-</span><span id="Table-2370"><a href="#Table-2370"><span class="linenos">2370</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="Table-2371"><a href="#Table-2371"><span class="linenos">2371</span></a> <span class="k">if</span> <span class="nb">isinstance</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="n">Func</span><span class="p">):</span>
-</span><span id="Table-2372"><a href="#Table-2372"><span class="linenos">2372</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Table-2373"><a href="#Table-2373"><span class="linenos">2373</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="Table-2374"><a href="#Table-2374"><span class="linenos">2374</span></a>
-</span><span id="Table-2375"><a href="#Table-2375"><span class="linenos">2375</span></a> <span class="nd">@property</span>
-</span><span id="Table-2376"><a href="#Table-2376"><span class="linenos">2376</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-2377"><a href="#Table-2377"><span class="linenos">2377</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-2378"><a href="#Table-2378"><span class="linenos">2378</span></a>
-</span><span id="Table-2379"><a href="#Table-2379"><span class="linenos">2379</span></a> <span class="nd">@property</span>
-</span><span id="Table-2380"><a href="#Table-2380"><span class="linenos">2380</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-2381"><a href="#Table-2381"><span class="linenos">2381</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="Table-2382"><a href="#Table-2382"><span class="linenos">2382</span></a>
-</span><span id="Table-2383"><a href="#Table-2383"><span class="linenos">2383</span></a> <span class="nd">@property</span>
-</span><span id="Table-2384"><a href="#Table-2384"><span class="linenos">2384</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="Table-2385"><a href="#Table-2385"><span class="linenos">2385</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Table-2386"><a href="#Table-2386"><span class="linenos">2386</span></a>
-</span><span id="Table-2387"><a href="#Table-2387"><span class="linenos">2387</span></a> <span class="nd">@property</span>
-</span><span id="Table-2388"><a href="#Table-2388"><span class="linenos">2388</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="Table-2389"><a href="#Table-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Table-2390"><a href="#Table-2390"><span class="linenos">2390</span></a>
-</span><span id="Table-2391"><a href="#Table-2391"><span class="linenos">2391</span></a> <span class="nd">@property</span>
-</span><span id="Table-2392"><a href="#Table-2392"><span class="linenos">2392</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="Table-2393"><a href="#Table-2393"><span class="linenos">2393</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a table in order catalog, db, table.&quot;&quot;&quot;</span>
-</span><span id="Table-2394"><a href="#Table-2394"><span class="linenos">2394</span></a> <span class="n">parts</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Table-2395"><a href="#Table-2395"><span class="linenos">2395</span></a>
-</span><span id="Table-2396"><a href="#Table-2396"><span class="linenos">2396</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">):</span>
-</span><span id="Table-2397"><a href="#Table-2397"><span class="linenos">2397</span></a> <span class="n">part</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="n">arg</span><span class="p">)</span>
-</span><span id="Table-2398"><a href="#Table-2398"><span class="linenos">2398</span></a>
-</span><span id="Table-2399"><a href="#Table-2399"><span class="linenos">2399</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Table-2400"><a href="#Table-2400"><span class="linenos">2400</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Table-2401"><a href="#Table-2401"><span class="linenos">2401</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
-</span><span id="Table-2402"><a href="#Table-2402"><span class="linenos">2402</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
-</span><span id="Table-2403"><a href="#Table-2403"><span class="linenos">2403</span></a>
-</span><span id="Table-2404"><a href="#Table-2404"><span class="linenos">2404</span></a> <span class="k">return</span> <span class="n">parts</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table-2404"><a href="#Table-2404"><span class="linenos">2404</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-2405"><a href="#Table-2405"><span class="linenos">2405</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Table-2406"><a href="#Table-2406"><span class="linenos">2406</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-2407"><a href="#Table-2407"><span class="linenos">2407</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-2408"><a href="#Table-2408"><span class="linenos">2408</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-2409"><a href="#Table-2409"><span class="linenos">2409</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-2410"><a href="#Table-2410"><span class="linenos">2410</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-2411"><a href="#Table-2411"><span class="linenos">2411</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-2412"><a href="#Table-2412"><span class="linenos">2412</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-2413"><a href="#Table-2413"><span class="linenos">2413</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-2414"><a href="#Table-2414"><span class="linenos">2414</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-2415"><a href="#Table-2415"><span class="linenos">2415</span></a> <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2416"><a href="#Table-2416"><span class="linenos">2416</span></a> <span class="p">}</span>
+</span><span id="Table-2417"><a href="#Table-2417"><span class="linenos">2417</span></a>
+</span><span id="Table-2418"><a href="#Table-2418"><span class="linenos">2418</span></a> <span class="nd">@property</span>
+</span><span id="Table-2419"><a href="#Table-2419"><span class="linenos">2419</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="Table-2420"><a href="#Table-2420"><span class="linenos">2420</span></a> <span class="k">if</span> <span class="nb">isinstance</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="n">Func</span><span class="p">):</span>
+</span><span id="Table-2421"><a href="#Table-2421"><span class="linenos">2421</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Table-2422"><a href="#Table-2422"><span class="linenos">2422</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="Table-2423"><a href="#Table-2423"><span class="linenos">2423</span></a>
+</span><span id="Table-2424"><a href="#Table-2424"><span class="linenos">2424</span></a> <span class="nd">@property</span>
+</span><span id="Table-2425"><a href="#Table-2425"><span class="linenos">2425</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-2426"><a href="#Table-2426"><span class="linenos">2426</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-2427"><a href="#Table-2427"><span class="linenos">2427</span></a>
+</span><span id="Table-2428"><a href="#Table-2428"><span class="linenos">2428</span></a> <span class="nd">@property</span>
+</span><span id="Table-2429"><a href="#Table-2429"><span class="linenos">2429</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-2430"><a href="#Table-2430"><span class="linenos">2430</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="Table-2431"><a href="#Table-2431"><span class="linenos">2431</span></a>
+</span><span id="Table-2432"><a href="#Table-2432"><span class="linenos">2432</span></a> <span class="nd">@property</span>
+</span><span id="Table-2433"><a href="#Table-2433"><span class="linenos">2433</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="Table-2434"><a href="#Table-2434"><span class="linenos">2434</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="Table-2435"><a href="#Table-2435"><span class="linenos">2435</span></a>
+</span><span id="Table-2436"><a href="#Table-2436"><span class="linenos">2436</span></a> <span class="nd">@property</span>
+</span><span id="Table-2437"><a href="#Table-2437"><span class="linenos">2437</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="Table-2438"><a href="#Table-2438"><span class="linenos">2438</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="Table-2439"><a href="#Table-2439"><span class="linenos">2439</span></a>
+</span><span id="Table-2440"><a href="#Table-2440"><span class="linenos">2440</span></a> <span class="nd">@property</span>
+</span><span id="Table-2441"><a href="#Table-2441"><span class="linenos">2441</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="Table-2442"><a href="#Table-2442"><span class="linenos">2442</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a table in order catalog, db, table.&quot;&quot;&quot;</span>
+</span><span id="Table-2443"><a href="#Table-2443"><span class="linenos">2443</span></a> <span class="n">parts</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Table-2444"><a href="#Table-2444"><span class="linenos">2444</span></a>
+</span><span id="Table-2445"><a href="#Table-2445"><span class="linenos">2445</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">):</span>
+</span><span id="Table-2446"><a href="#Table-2446"><span class="linenos">2446</span></a> <span class="n">part</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="n">arg</span><span class="p">)</span>
+</span><span id="Table-2447"><a href="#Table-2447"><span class="linenos">2447</span></a>
+</span><span id="Table-2448"><a href="#Table-2448"><span class="linenos">2448</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Table-2449"><a href="#Table-2449"><span class="linenos">2449</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Table-2450"><a href="#Table-2450"><span class="linenos">2450</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
+</span><span id="Table-2451"><a href="#Table-2451"><span class="linenos">2451</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
+</span><span id="Table-2452"><a href="#Table-2452"><span class="linenos">2452</span></a>
+</span><span id="Table-2453"><a href="#Table-2453"><span class="linenos">2453</span></a> <span class="k">return</span> <span class="n">parts</span>
</span></pre></div>
@@ -32195,7 +33355,7 @@ Otherwise, this resets the expressions.</li>
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Table.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Table.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: True, &#39;alias&#39;: False, &#39;db&#39;: False, &#39;catalog&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;pivots&#39;: False, &#39;hints&#39;: False, &#39;system_time&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Table.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: True, &#39;alias&#39;: False, &#39;db&#39;: False, &#39;catalog&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;pivots&#39;: False, &#39;hints&#39;: False, &#39;system_time&#39;: False, &#39;version&#39;: False}</span>
</div>
@@ -32340,109 +33500,6 @@ Otherwise, this resets the expressions.</li>
</dl>
</div>
</section>
- <section id="SystemTime">
- <input id="SystemTime-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">SystemTime</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
-
- <label class="view-source-button" for="SystemTime-view-source"><span>View Source</span></label>
-
- </div>
- <a class="headerlink" href="#SystemTime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SystemTime-2408"><a href="#SystemTime-2408"><span class="linenos">2408</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-2409"><a href="#SystemTime-2409"><span class="linenos">2409</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SystemTime-2410"><a href="#SystemTime-2410"><span class="linenos">2410</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-2411"><a href="#SystemTime-2411"><span class="linenos">2411</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-2412"><a href="#SystemTime-2412"><span class="linenos">2412</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-2413"><a href="#SystemTime-2413"><span class="linenos">2413</span></a> <span class="p">}</span>
-</span></pre></div>
-
-
-
-
- <div id="SystemTime.arg_types" class="classattr">
- <div class="attr variable">
- <span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: False, &#39;expression&#39;: False, &#39;kind&#39;: True}</span>
-
-
- </div>
- <a class="headerlink" href="#SystemTime.arg_types"></a>
-
-
-
- </div>
- <div id="SystemTime.key" class="classattr">
- <div class="attr variable">
- <span class="name">key</span> =
-<span class="default_value">&#39;systemtime&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#SystemTime.key"></a>
-
-
-
- </div>
- <div class="inherited">
- <h5>Inherited Members</h5>
- <dl>
- <div><dt><a href="#Expression">Expression</a></dt>
- <dd id="SystemTime.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
- <dd id="SystemTime.args" class="variable"><a href="#Expression.args">args</a></dd>
- <dd id="SystemTime.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
- <dd id="SystemTime.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
- <dd id="SystemTime.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
- <dd id="SystemTime.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
- <dd id="SystemTime.this" class="variable"><a href="#Expression.this">this</a></dd>
- <dd id="SystemTime.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
- <dd id="SystemTime.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
- <dd id="SystemTime.text" class="function"><a href="#Expression.text">text</a></dd>
- <dd id="SystemTime.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
- <dd id="SystemTime.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
- <dd id="SystemTime.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
- <dd id="SystemTime.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
- <dd id="SystemTime.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
- <dd id="SystemTime.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
- <dd id="SystemTime.name" class="variable"><a href="#Expression.name">name</a></dd>
- <dd id="SystemTime.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
- <dd id="SystemTime.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
- <dd id="SystemTime.type" class="variable"><a href="#Expression.type">type</a></dd>
- <dd id="SystemTime.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
- <dd id="SystemTime.copy" class="function"><a href="#Expression.copy">copy</a></dd>
- <dd id="SystemTime.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
- <dd id="SystemTime.append" class="function"><a href="#Expression.append">append</a></dd>
- <dd id="SystemTime.set" class="function"><a href="#Expression.set">set</a></dd>
- <dd id="SystemTime.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
- <dd id="SystemTime.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
- <dd id="SystemTime.find" class="function"><a href="#Expression.find">find</a></dd>
- <dd id="SystemTime.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
- <dd id="SystemTime.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
- <dd id="SystemTime.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
- <dd id="SystemTime.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
- <dd id="SystemTime.root" class="function"><a href="#Expression.root">root</a></dd>
- <dd id="SystemTime.walk" class="function"><a href="#Expression.walk">walk</a></dd>
- <dd id="SystemTime.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
- <dd id="SystemTime.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
- <dd id="SystemTime.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
- <dd id="SystemTime.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
- <dd id="SystemTime.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
- <dd id="SystemTime.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
- <dd id="SystemTime.sql" class="function"><a href="#Expression.sql">sql</a></dd>
- <dd id="SystemTime.transform" class="function"><a href="#Expression.transform">transform</a></dd>
- <dd id="SystemTime.replace" class="function"><a href="#Expression.replace">replace</a></dd>
- <dd id="SystemTime.pop" class="function"><a href="#Expression.pop">pop</a></dd>
- <dd id="SystemTime.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
- <dd id="SystemTime.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
- <dd id="SystemTime.dump" class="function"><a href="#Expression.dump">dump</a></dd>
- <dd id="SystemTime.load" class="function"><a href="#Expression.load">load</a></dd>
-
- </div>
- </dl>
- </div>
- </section>
<section id="Union">
<input id="Union-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -32454,96 +33511,97 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Union"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Union-2416"><a href="#Union-2416"><span class="linenos">2416</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-2417"><a href="#Union-2417"><span class="linenos">2417</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Union-2418"><a href="#Union-2418"><span class="linenos">2418</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-2419"><a href="#Union-2419"><span class="linenos">2419</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-2420"><a href="#Union-2420"><span class="linenos">2420</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-2421"><a href="#Union-2421"><span class="linenos">2421</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-2422"><a href="#Union-2422"><span class="linenos">2422</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="Union-2423"><a href="#Union-2423"><span class="linenos">2423</span></a> <span class="p">}</span>
-</span><span id="Union-2424"><a href="#Union-2424"><span class="linenos">2424</span></a>
-</span><span id="Union-2425"><a href="#Union-2425"><span class="linenos">2425</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="Union-2426"><a href="#Union-2426"><span class="linenos">2426</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Union-2427"><a href="#Union-2427"><span class="linenos">2427</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Union-2428"><a href="#Union-2428"><span class="linenos">2428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Union-2429"><a href="#Union-2429"><span class="linenos">2429</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Union-2430"><a href="#Union-2430"><span class="linenos">2430</span></a>
-</span><span id="Union-2431"><a href="#Union-2431"><span class="linenos">2431</span></a><span class="sd"> Example:</span>
-</span><span id="Union-2432"><a href="#Union-2432"><span class="linenos">2432</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-2433"><a href="#Union-2433"><span class="linenos">2433</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
-</span><span id="Union-2434"><a href="#Union-2434"><span class="linenos">2434</span></a>
-</span><span id="Union-2435"><a href="#Union-2435"><span class="linenos">2435</span></a><span class="sd"> Args:</span>
-</span><span id="Union-2436"><a href="#Union-2436"><span class="linenos">2436</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Union-2437"><a href="#Union-2437"><span class="linenos">2437</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Union-2438"><a href="#Union-2438"><span class="linenos">2438</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Union-2439"><a href="#Union-2439"><span class="linenos">2439</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Union-2440"><a href="#Union-2440"><span class="linenos">2440</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Union-2441"><a href="#Union-2441"><span class="linenos">2441</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Union-2442"><a href="#Union-2442"><span class="linenos">2442</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Union-2443"><a href="#Union-2443"><span class="linenos">2443</span></a>
-</span><span id="Union-2444"><a href="#Union-2444"><span class="linenos">2444</span></a><span class="sd"> Returns:</span>
-</span><span id="Union-2445"><a href="#Union-2445"><span class="linenos">2445</span></a><span class="sd"> The limited subqueryable.</span>
-</span><span id="Union-2446"><a href="#Union-2446"><span class="linenos">2446</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union-2447"><a href="#Union-2447"><span class="linenos">2447</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Union-2448"><a href="#Union-2448"><span class="linenos">2448</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-2449"><a href="#Union-2449"><span class="linenos">2449</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-2450"><a href="#Union-2450"><span class="linenos">2450</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-2451"><a href="#Union-2451"><span class="linenos">2451</span></a> <span class="p">)</span>
-</span><span id="Union-2452"><a href="#Union-2452"><span class="linenos">2452</span></a>
-</span><span id="Union-2453"><a href="#Union-2453"><span class="linenos">2453</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Union-2454"><a href="#Union-2454"><span class="linenos">2454</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Union-2455"><a href="#Union-2455"><span class="linenos">2455</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Union-2456"><a href="#Union-2456"><span class="linenos">2456</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-2457"><a href="#Union-2457"><span class="linenos">2457</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-2458"><a href="#Union-2458"><span class="linenos">2458</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-2459"><a href="#Union-2459"><span class="linenos">2459</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Union-2460"><a href="#Union-2460"><span class="linenos">2460</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="Union-2461"><a href="#Union-2461"><span class="linenos">2461</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-2462"><a href="#Union-2462"><span class="linenos">2462</span></a>
-</span><span id="Union-2463"><a href="#Union-2463"><span class="linenos">2463</span></a><span class="sd"> Example:</span>
-</span><span id="Union-2464"><a href="#Union-2464"><span class="linenos">2464</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="Union-2465"><a href="#Union-2465"><span class="linenos">2465</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-2466"><a href="#Union-2466"><span class="linenos">2466</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-2467"><a href="#Union-2467"><span class="linenos">2467</span></a>
-</span><span id="Union-2468"><a href="#Union-2468"><span class="linenos">2468</span></a><span class="sd"> Args:</span>
-</span><span id="Union-2469"><a href="#Union-2469"><span class="linenos">2469</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Union-2470"><a href="#Union-2470"><span class="linenos">2470</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Union-2471"><a href="#Union-2471"><span class="linenos">2471</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Union-2472"><a href="#Union-2472"><span class="linenos">2472</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Union-2473"><a href="#Union-2473"><span class="linenos">2473</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Union-2474"><a href="#Union-2474"><span class="linenos">2474</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Union-2475"><a href="#Union-2475"><span class="linenos">2475</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Union-2476"><a href="#Union-2476"><span class="linenos">2476</span></a>
-</span><span id="Union-2477"><a href="#Union-2477"><span class="linenos">2477</span></a><span class="sd"> Returns:</span>
-</span><span id="Union-2478"><a href="#Union-2478"><span class="linenos">2478</span></a><span class="sd"> Union: the modified expression.</span>
-</span><span id="Union-2479"><a href="#Union-2479"><span class="linenos">2479</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union-2480"><a href="#Union-2480"><span class="linenos">2480</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-2481"><a href="#Union-2481"><span class="linenos">2481</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-2482"><a href="#Union-2482"><span class="linenos">2482</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-2483"><a href="#Union-2483"><span class="linenos">2483</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-2484"><a href="#Union-2484"><span class="linenos">2484</span></a> <span class="p">)</span>
-</span><span id="Union-2485"><a href="#Union-2485"><span class="linenos">2485</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Union-2486"><a href="#Union-2486"><span class="linenos">2486</span></a>
-</span><span id="Union-2487"><a href="#Union-2487"><span class="linenos">2487</span></a> <span class="nd">@property</span>
-</span><span id="Union-2488"><a href="#Union-2488"><span class="linenos">2488</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="Union-2489"><a href="#Union-2489"><span class="linenos">2489</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-2490"><a href="#Union-2490"><span class="linenos">2490</span></a>
-</span><span id="Union-2491"><a href="#Union-2491"><span class="linenos">2491</span></a> <span class="nd">@property</span>
-</span><span id="Union-2492"><a href="#Union-2492"><span class="linenos">2492</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-2493"><a href="#Union-2493"><span class="linenos">2493</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-2494"><a href="#Union-2494"><span class="linenos">2494</span></a>
-</span><span id="Union-2495"><a href="#Union-2495"><span class="linenos">2495</span></a> <span class="nd">@property</span>
-</span><span id="Union-2496"><a href="#Union-2496"><span class="linenos">2496</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="Union-2497"><a href="#Union-2497"><span class="linenos">2497</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-2498"><a href="#Union-2498"><span class="linenos">2498</span></a>
-</span><span id="Union-2499"><a href="#Union-2499"><span class="linenos">2499</span></a> <span class="nd">@property</span>
-</span><span id="Union-2500"><a href="#Union-2500"><span class="linenos">2500</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-2501"><a href="#Union-2501"><span class="linenos">2501</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-2502"><a href="#Union-2502"><span class="linenos">2502</span></a>
-</span><span id="Union-2503"><a href="#Union-2503"><span class="linenos">2503</span></a> <span class="nd">@property</span>
-</span><span id="Union-2504"><a href="#Union-2504"><span class="linenos">2504</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-2505"><a href="#Union-2505"><span class="linenos">2505</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Union-2456"><a href="#Union-2456"><span class="linenos">2456</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-2457"><a href="#Union-2457"><span class="linenos">2457</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Union-2458"><a href="#Union-2458"><span class="linenos">2458</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-2459"><a href="#Union-2459"><span class="linenos">2459</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-2460"><a href="#Union-2460"><span class="linenos">2460</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-2461"><a href="#Union-2461"><span class="linenos">2461</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-2462"><a href="#Union-2462"><span class="linenos">2462</span></a> <span class="s2">&quot;by_name&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Union-2463"><a href="#Union-2463"><span class="linenos">2463</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="Union-2464"><a href="#Union-2464"><span class="linenos">2464</span></a> <span class="p">}</span>
+</span><span id="Union-2465"><a href="#Union-2465"><span class="linenos">2465</span></a>
+</span><span id="Union-2466"><a href="#Union-2466"><span class="linenos">2466</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="Union-2467"><a href="#Union-2467"><span class="linenos">2467</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Union-2468"><a href="#Union-2468"><span class="linenos">2468</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Union-2469"><a href="#Union-2469"><span class="linenos">2469</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Union-2470"><a href="#Union-2470"><span class="linenos">2470</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Union-2471"><a href="#Union-2471"><span class="linenos">2471</span></a>
+</span><span id="Union-2472"><a href="#Union-2472"><span class="linenos">2472</span></a><span class="sd"> Example:</span>
+</span><span id="Union-2473"><a href="#Union-2473"><span class="linenos">2473</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-2474"><a href="#Union-2474"><span class="linenos">2474</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
+</span><span id="Union-2475"><a href="#Union-2475"><span class="linenos">2475</span></a>
+</span><span id="Union-2476"><a href="#Union-2476"><span class="linenos">2476</span></a><span class="sd"> Args:</span>
+</span><span id="Union-2477"><a href="#Union-2477"><span class="linenos">2477</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Union-2478"><a href="#Union-2478"><span class="linenos">2478</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Union-2479"><a href="#Union-2479"><span class="linenos">2479</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Union-2480"><a href="#Union-2480"><span class="linenos">2480</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Union-2481"><a href="#Union-2481"><span class="linenos">2481</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Union-2482"><a href="#Union-2482"><span class="linenos">2482</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Union-2483"><a href="#Union-2483"><span class="linenos">2483</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Union-2484"><a href="#Union-2484"><span class="linenos">2484</span></a>
+</span><span id="Union-2485"><a href="#Union-2485"><span class="linenos">2485</span></a><span class="sd"> Returns:</span>
+</span><span id="Union-2486"><a href="#Union-2486"><span class="linenos">2486</span></a><span class="sd"> The limited subqueryable.</span>
+</span><span id="Union-2487"><a href="#Union-2487"><span class="linenos">2487</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union-2488"><a href="#Union-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Union-2489"><a href="#Union-2489"><span class="linenos">2489</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-2490"><a href="#Union-2490"><span class="linenos">2490</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-2491"><a href="#Union-2491"><span class="linenos">2491</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-2492"><a href="#Union-2492"><span class="linenos">2492</span></a> <span class="p">)</span>
+</span><span id="Union-2493"><a href="#Union-2493"><span class="linenos">2493</span></a>
+</span><span id="Union-2494"><a href="#Union-2494"><span class="linenos">2494</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Union-2495"><a href="#Union-2495"><span class="linenos">2495</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Union-2496"><a href="#Union-2496"><span class="linenos">2496</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Union-2497"><a href="#Union-2497"><span class="linenos">2497</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-2498"><a href="#Union-2498"><span class="linenos">2498</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-2499"><a href="#Union-2499"><span class="linenos">2499</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-2500"><a href="#Union-2500"><span class="linenos">2500</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Union-2501"><a href="#Union-2501"><span class="linenos">2501</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="Union-2502"><a href="#Union-2502"><span class="linenos">2502</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-2503"><a href="#Union-2503"><span class="linenos">2503</span></a>
+</span><span id="Union-2504"><a href="#Union-2504"><span class="linenos">2504</span></a><span class="sd"> Example:</span>
+</span><span id="Union-2505"><a href="#Union-2505"><span class="linenos">2505</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="Union-2506"><a href="#Union-2506"><span class="linenos">2506</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-2507"><a href="#Union-2507"><span class="linenos">2507</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-2508"><a href="#Union-2508"><span class="linenos">2508</span></a>
+</span><span id="Union-2509"><a href="#Union-2509"><span class="linenos">2509</span></a><span class="sd"> Args:</span>
+</span><span id="Union-2510"><a href="#Union-2510"><span class="linenos">2510</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Union-2511"><a href="#Union-2511"><span class="linenos">2511</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Union-2512"><a href="#Union-2512"><span class="linenos">2512</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Union-2513"><a href="#Union-2513"><span class="linenos">2513</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Union-2514"><a href="#Union-2514"><span class="linenos">2514</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Union-2515"><a href="#Union-2515"><span class="linenos">2515</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Union-2516"><a href="#Union-2516"><span class="linenos">2516</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Union-2517"><a href="#Union-2517"><span class="linenos">2517</span></a>
+</span><span id="Union-2518"><a href="#Union-2518"><span class="linenos">2518</span></a><span class="sd"> Returns:</span>
+</span><span id="Union-2519"><a href="#Union-2519"><span class="linenos">2519</span></a><span class="sd"> Union: the modified expression.</span>
+</span><span id="Union-2520"><a href="#Union-2520"><span class="linenos">2520</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union-2521"><a href="#Union-2521"><span class="linenos">2521</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-2522"><a href="#Union-2522"><span class="linenos">2522</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-2523"><a href="#Union-2523"><span class="linenos">2523</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-2524"><a href="#Union-2524"><span class="linenos">2524</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-2525"><a href="#Union-2525"><span class="linenos">2525</span></a> <span class="p">)</span>
+</span><span id="Union-2526"><a href="#Union-2526"><span class="linenos">2526</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Union-2527"><a href="#Union-2527"><span class="linenos">2527</span></a>
+</span><span id="Union-2528"><a href="#Union-2528"><span class="linenos">2528</span></a> <span class="nd">@property</span>
+</span><span id="Union-2529"><a href="#Union-2529"><span class="linenos">2529</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="Union-2530"><a href="#Union-2530"><span class="linenos">2530</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-2531"><a href="#Union-2531"><span class="linenos">2531</span></a>
+</span><span id="Union-2532"><a href="#Union-2532"><span class="linenos">2532</span></a> <span class="nd">@property</span>
+</span><span id="Union-2533"><a href="#Union-2533"><span class="linenos">2533</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-2534"><a href="#Union-2534"><span class="linenos">2534</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-2535"><a href="#Union-2535"><span class="linenos">2535</span></a>
+</span><span id="Union-2536"><a href="#Union-2536"><span class="linenos">2536</span></a> <span class="nd">@property</span>
+</span><span id="Union-2537"><a href="#Union-2537"><span class="linenos">2537</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="Union-2538"><a href="#Union-2538"><span class="linenos">2538</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-2539"><a href="#Union-2539"><span class="linenos">2539</span></a>
+</span><span id="Union-2540"><a href="#Union-2540"><span class="linenos">2540</span></a> <span class="nd">@property</span>
+</span><span id="Union-2541"><a href="#Union-2541"><span class="linenos">2541</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-2542"><a href="#Union-2542"><span class="linenos">2542</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-2543"><a href="#Union-2543"><span class="linenos">2543</span></a>
+</span><span id="Union-2544"><a href="#Union-2544"><span class="linenos">2544</span></a> <span class="nd">@property</span>
+</span><span id="Union-2545"><a href="#Union-2545"><span class="linenos">2545</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-2546"><a href="#Union-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></pre></div>
@@ -32553,7 +33611,7 @@ Otherwise, this resets the expressions.</li>
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Union.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Union.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;this&#39;: True, &#39;expression&#39;: True, &#39;distinct&#39;: False, &#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Union.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;this&#39;: True, &#39;expression&#39;: True, &#39;distinct&#39;: False, &#39;by_name&#39;: False, &#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;connect&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
</div>
@@ -32573,33 +33631,33 @@ 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-2425"><a href="#Union.limit-2425"><span class="linenos">2425</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="Union.limit-2426"><a href="#Union.limit-2426"><span class="linenos">2426</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Union.limit-2427"><a href="#Union.limit-2427"><span class="linenos">2427</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Union.limit-2428"><a href="#Union.limit-2428"><span class="linenos">2428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Union.limit-2429"><a href="#Union.limit-2429"><span class="linenos">2429</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Union.limit-2430"><a href="#Union.limit-2430"><span class="linenos">2430</span></a>
-</span><span id="Union.limit-2431"><a href="#Union.limit-2431"><span class="linenos">2431</span></a><span class="sd"> Example:</span>
-</span><span id="Union.limit-2432"><a href="#Union.limit-2432"><span class="linenos">2432</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-2433"><a href="#Union.limit-2433"><span class="linenos">2433</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-2434"><a href="#Union.limit-2434"><span class="linenos">2434</span></a>
-</span><span id="Union.limit-2435"><a href="#Union.limit-2435"><span class="linenos">2435</span></a><span class="sd"> Args:</span>
-</span><span id="Union.limit-2436"><a href="#Union.limit-2436"><span class="linenos">2436</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Union.limit-2437"><a href="#Union.limit-2437"><span class="linenos">2437</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Union.limit-2438"><a href="#Union.limit-2438"><span class="linenos">2438</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Union.limit-2439"><a href="#Union.limit-2439"><span class="linenos">2439</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Union.limit-2440"><a href="#Union.limit-2440"><span class="linenos">2440</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Union.limit-2441"><a href="#Union.limit-2441"><span class="linenos">2441</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Union.limit-2442"><a href="#Union.limit-2442"><span class="linenos">2442</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Union.limit-2443"><a href="#Union.limit-2443"><span class="linenos">2443</span></a>
-</span><span id="Union.limit-2444"><a href="#Union.limit-2444"><span class="linenos">2444</span></a><span class="sd"> Returns:</span>
-</span><span id="Union.limit-2445"><a href="#Union.limit-2445"><span class="linenos">2445</span></a><span class="sd"> The limited subqueryable.</span>
-</span><span id="Union.limit-2446"><a href="#Union.limit-2446"><span class="linenos">2446</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union.limit-2447"><a href="#Union.limit-2447"><span class="linenos">2447</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Union.limit-2448"><a href="#Union.limit-2448"><span class="linenos">2448</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-2449"><a href="#Union.limit-2449"><span class="linenos">2449</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-2450"><a href="#Union.limit-2450"><span class="linenos">2450</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-2451"><a href="#Union.limit-2451"><span class="linenos">2451</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Union.limit-2466"><a href="#Union.limit-2466"><span class="linenos">2466</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="Union.limit-2467"><a href="#Union.limit-2467"><span class="linenos">2467</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Union.limit-2468"><a href="#Union.limit-2468"><span class="linenos">2468</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Union.limit-2469"><a href="#Union.limit-2469"><span class="linenos">2469</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Union.limit-2470"><a href="#Union.limit-2470"><span class="linenos">2470</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Union.limit-2471"><a href="#Union.limit-2471"><span class="linenos">2471</span></a>
+</span><span id="Union.limit-2472"><a href="#Union.limit-2472"><span class="linenos">2472</span></a><span class="sd"> Example:</span>
+</span><span id="Union.limit-2473"><a href="#Union.limit-2473"><span class="linenos">2473</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-2474"><a href="#Union.limit-2474"><span class="linenos">2474</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-2475"><a href="#Union.limit-2475"><span class="linenos">2475</span></a>
+</span><span id="Union.limit-2476"><a href="#Union.limit-2476"><span class="linenos">2476</span></a><span class="sd"> Args:</span>
+</span><span id="Union.limit-2477"><a href="#Union.limit-2477"><span class="linenos">2477</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Union.limit-2478"><a href="#Union.limit-2478"><span class="linenos">2478</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Union.limit-2479"><a href="#Union.limit-2479"><span class="linenos">2479</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Union.limit-2480"><a href="#Union.limit-2480"><span class="linenos">2480</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Union.limit-2481"><a href="#Union.limit-2481"><span class="linenos">2481</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Union.limit-2482"><a href="#Union.limit-2482"><span class="linenos">2482</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Union.limit-2483"><a href="#Union.limit-2483"><span class="linenos">2483</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Union.limit-2484"><a href="#Union.limit-2484"><span class="linenos">2484</span></a>
+</span><span id="Union.limit-2485"><a href="#Union.limit-2485"><span class="linenos">2485</span></a><span class="sd"> Returns:</span>
+</span><span id="Union.limit-2486"><a href="#Union.limit-2486"><span class="linenos">2486</span></a><span class="sd"> The limited subqueryable.</span>
+</span><span id="Union.limit-2487"><a href="#Union.limit-2487"><span class="linenos">2487</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union.limit-2488"><a href="#Union.limit-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Union.limit-2489"><a href="#Union.limit-2489"><span class="linenos">2489</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-2490"><a href="#Union.limit-2490"><span class="linenos">2490</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-2491"><a href="#Union.limit-2491"><span class="linenos">2491</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-2492"><a href="#Union.limit-2492"><span class="linenos">2492</span></a> <span class="p">)</span>
</span></pre></div>
@@ -32647,39 +33705,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-2453"><a href="#Union.select-2453"><span class="linenos">2453</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Union.select-2454"><a href="#Union.select-2454"><span class="linenos">2454</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Union.select-2455"><a href="#Union.select-2455"><span class="linenos">2455</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Union.select-2456"><a href="#Union.select-2456"><span class="linenos">2456</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-2457"><a href="#Union.select-2457"><span class="linenos">2457</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-2458"><a href="#Union.select-2458"><span class="linenos">2458</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-2459"><a href="#Union.select-2459"><span class="linenos">2459</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Union.select-2460"><a href="#Union.select-2460"><span class="linenos">2460</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-2461"><a href="#Union.select-2461"><span class="linenos">2461</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-2462"><a href="#Union.select-2462"><span class="linenos">2462</span></a>
-</span><span id="Union.select-2463"><a href="#Union.select-2463"><span class="linenos">2463</span></a><span class="sd"> Example:</span>
-</span><span id="Union.select-2464"><a href="#Union.select-2464"><span class="linenos">2464</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="Union.select-2465"><a href="#Union.select-2465"><span class="linenos">2465</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-2466"><a href="#Union.select-2466"><span class="linenos">2466</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-2467"><a href="#Union.select-2467"><span class="linenos">2467</span></a>
-</span><span id="Union.select-2468"><a href="#Union.select-2468"><span class="linenos">2468</span></a><span class="sd"> Args:</span>
-</span><span id="Union.select-2469"><a href="#Union.select-2469"><span class="linenos">2469</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Union.select-2470"><a href="#Union.select-2470"><span class="linenos">2470</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Union.select-2471"><a href="#Union.select-2471"><span class="linenos">2471</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Union.select-2472"><a href="#Union.select-2472"><span class="linenos">2472</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Union.select-2473"><a href="#Union.select-2473"><span class="linenos">2473</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Union.select-2474"><a href="#Union.select-2474"><span class="linenos">2474</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Union.select-2475"><a href="#Union.select-2475"><span class="linenos">2475</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Union.select-2476"><a href="#Union.select-2476"><span class="linenos">2476</span></a>
-</span><span id="Union.select-2477"><a href="#Union.select-2477"><span class="linenos">2477</span></a><span class="sd"> Returns:</span>
-</span><span id="Union.select-2478"><a href="#Union.select-2478"><span class="linenos">2478</span></a><span class="sd"> Union: the modified expression.</span>
-</span><span id="Union.select-2479"><a href="#Union.select-2479"><span class="linenos">2479</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union.select-2480"><a href="#Union.select-2480"><span class="linenos">2480</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-2481"><a href="#Union.select-2481"><span class="linenos">2481</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-2482"><a href="#Union.select-2482"><span class="linenos">2482</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-2483"><a href="#Union.select-2483"><span class="linenos">2483</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-2484"><a href="#Union.select-2484"><span class="linenos">2484</span></a> <span class="p">)</span>
-</span><span id="Union.select-2485"><a href="#Union.select-2485"><span class="linenos">2485</span></a> <span class="k">return</span> <span class="n">this</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Union.select-2494"><a href="#Union.select-2494"><span class="linenos">2494</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Union.select-2495"><a href="#Union.select-2495"><span class="linenos">2495</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Union.select-2496"><a href="#Union.select-2496"><span class="linenos">2496</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Union.select-2497"><a href="#Union.select-2497"><span class="linenos">2497</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-2498"><a href="#Union.select-2498"><span class="linenos">2498</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-2499"><a href="#Union.select-2499"><span class="linenos">2499</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-2500"><a href="#Union.select-2500"><span class="linenos">2500</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Union.select-2501"><a href="#Union.select-2501"><span class="linenos">2501</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-2502"><a href="#Union.select-2502"><span class="linenos">2502</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-2503"><a href="#Union.select-2503"><span class="linenos">2503</span></a>
+</span><span id="Union.select-2504"><a href="#Union.select-2504"><span class="linenos">2504</span></a><span class="sd"> Example:</span>
+</span><span id="Union.select-2505"><a href="#Union.select-2505"><span class="linenos">2505</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="Union.select-2506"><a href="#Union.select-2506"><span class="linenos">2506</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-2507"><a href="#Union.select-2507"><span class="linenos">2507</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-2508"><a href="#Union.select-2508"><span class="linenos">2508</span></a>
+</span><span id="Union.select-2509"><a href="#Union.select-2509"><span class="linenos">2509</span></a><span class="sd"> Args:</span>
+</span><span id="Union.select-2510"><a href="#Union.select-2510"><span class="linenos">2510</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Union.select-2511"><a href="#Union.select-2511"><span class="linenos">2511</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Union.select-2512"><a href="#Union.select-2512"><span class="linenos">2512</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Union.select-2513"><a href="#Union.select-2513"><span class="linenos">2513</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Union.select-2514"><a href="#Union.select-2514"><span class="linenos">2514</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Union.select-2515"><a href="#Union.select-2515"><span class="linenos">2515</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Union.select-2516"><a href="#Union.select-2516"><span class="linenos">2516</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Union.select-2517"><a href="#Union.select-2517"><span class="linenos">2517</span></a>
+</span><span id="Union.select-2518"><a href="#Union.select-2518"><span class="linenos">2518</span></a><span class="sd"> Returns:</span>
+</span><span id="Union.select-2519"><a href="#Union.select-2519"><span class="linenos">2519</span></a><span class="sd"> Union: the modified expression.</span>
+</span><span id="Union.select-2520"><a href="#Union.select-2520"><span class="linenos">2520</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union.select-2521"><a href="#Union.select-2521"><span class="linenos">2521</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-2522"><a href="#Union.select-2522"><span class="linenos">2522</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-2523"><a href="#Union.select-2523"><span class="linenos">2523</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-2524"><a href="#Union.select-2524"><span class="linenos">2524</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-2525"><a href="#Union.select-2525"><span class="linenos">2525</span></a> <span class="p">)</span>
+</span><span id="Union.select-2526"><a href="#Union.select-2526"><span class="linenos">2526</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@@ -32865,8 +33923,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-2508"><a href="#Except-2508"><span class="linenos">2508</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-2509"><a href="#Except-2509"><span class="linenos">2509</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Except-2549"><a href="#Except-2549"><span class="linenos">2549</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-2550"><a href="#Except-2550"><span class="linenos">2550</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32974,8 +34032,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-2512"><a href="#Intersect-2512"><span class="linenos">2512</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-2513"><a href="#Intersect-2513"><span class="linenos">2513</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Intersect-2553"><a href="#Intersect-2553"><span class="linenos">2553</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-2554"><a href="#Intersect-2554"><span class="linenos">2554</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -33083,13 +34141,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-2516"><a href="#Unnest-2516"><span class="linenos">2516</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-2517"><a href="#Unnest-2517"><span class="linenos">2517</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Unnest-2518"><a href="#Unnest-2518"><span class="linenos">2518</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-2519"><a href="#Unnest-2519"><span class="linenos">2519</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-2520"><a href="#Unnest-2520"><span class="linenos">2520</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-2521"><a href="#Unnest-2521"><span class="linenos">2521</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-2522"><a href="#Unnest-2522"><span class="linenos">2522</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unnest-2557"><a href="#Unnest-2557"><span class="linenos">2557</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-2558"><a href="#Unnest-2558"><span class="linenos">2558</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Unnest-2559"><a href="#Unnest-2559"><span class="linenos">2559</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-2560"><a href="#Unnest-2560"><span class="linenos">2560</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-2561"><a href="#Unnest-2561"><span class="linenos">2561</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-2562"><a href="#Unnest-2562"><span class="linenos">2562</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-2563"><a href="#Unnest-2563"><span class="linenos">2563</span></a> <span class="p">}</span>
</span></pre></div>
@@ -33201,16 +34259,17 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Update"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Update-2525"><a href="#Update-2525"><span class="linenos">2525</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-2526"><a href="#Update-2526"><span class="linenos">2526</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Update-2527"><a href="#Update-2527"><span class="linenos">2527</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-2528"><a href="#Update-2528"><span class="linenos">2528</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-2529"><a href="#Update-2529"><span class="linenos">2529</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-2530"><a href="#Update-2530"><span class="linenos">2530</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-2531"><a href="#Update-2531"><span class="linenos">2531</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-2532"><a href="#Update-2532"><span class="linenos">2532</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-2533"><a href="#Update-2533"><span class="linenos">2533</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="Update-2534"><a href="#Update-2534"><span class="linenos">2534</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Update-2566"><a href="#Update-2566"><span class="linenos">2566</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-2567"><a href="#Update-2567"><span class="linenos">2567</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Update-2568"><a href="#Update-2568"><span class="linenos">2568</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-2569"><a href="#Update-2569"><span class="linenos">2569</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-2570"><a href="#Update-2570"><span class="linenos">2570</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-2571"><a href="#Update-2571"><span class="linenos">2571</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-2572"><a href="#Update-2572"><span class="linenos">2572</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-2573"><a href="#Update-2573"><span class="linenos">2573</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-2574"><a href="#Update-2574"><span class="linenos">2574</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="Update-2575"><a href="#Update-2575"><span class="linenos">2575</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="Update-2576"><a href="#Update-2576"><span class="linenos">2576</span></a> <span class="p">}</span>
</span></pre></div>
@@ -33220,7 +34279,7 @@ Otherwise, this resets the expressions.</li>
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Update.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Update.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;this&#39;: False, &#39;expressions&#39;: True, &#39;from&#39;: False, &#39;where&#39;: False, &#39;returning&#39;: False, &#39;limit&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Update.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;this&#39;: False, &#39;expressions&#39;: True, &#39;from&#39;: False, &#39;where&#39;: False, &#39;returning&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False}</span>
</div>
@@ -33309,12 +34368,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-2537"><a href="#Values-2537"><span class="linenos">2537</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-2538"><a href="#Values-2538"><span class="linenos">2538</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Values-2539"><a href="#Values-2539"><span class="linenos">2539</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-2540"><a href="#Values-2540"><span class="linenos">2540</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-2541"><a href="#Values-2541"><span class="linenos">2541</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-2542"><a href="#Values-2542"><span class="linenos">2542</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Values-2579"><a href="#Values-2579"><span class="linenos">2579</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-2580"><a href="#Values-2580"><span class="linenos">2580</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Values-2581"><a href="#Values-2581"><span class="linenos">2581</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-2582"><a href="#Values-2582"><span class="linenos">2582</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-2583"><a href="#Values-2583"><span class="linenos">2583</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-2584"><a href="#Values-2584"><span class="linenos">2584</span></a> <span class="p">}</span>
</span></pre></div>
@@ -33426,8 +34485,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-2545"><a href="#Var-2545"><span class="linenos">2545</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-2546"><a href="#Var-2546"><span class="linenos">2546</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Var-2587"><a href="#Var-2587"><span class="linenos">2587</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-2588"><a href="#Var-2588"><span class="linenos">2588</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -33503,6 +34562,123 @@ Otherwise, this resets the expressions.</li>
</dl>
</div>
</section>
+ <section id="Version">
+ <input id="Version-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">Version</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+
+ <label class="view-source-button" for="Version-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Version"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Version-2591"><a href="#Version-2591"><span class="linenos">2591</span></a><span class="k">class</span> <span class="nc">Version</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Version-2592"><a href="#Version-2592"><span class="linenos">2592</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Version-2593"><a href="#Version-2593"><span class="linenos">2593</span></a><span class="sd"> Time travel, iceberg, bigquery etc</span>
+</span><span id="Version-2594"><a href="#Version-2594"><span class="linenos">2594</span></a><span class="sd"> https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots</span>
+</span><span id="Version-2595"><a href="#Version-2595"><span class="linenos">2595</span></a><span class="sd"> https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html</span>
+</span><span id="Version-2596"><a href="#Version-2596"><span class="linenos">2596</span></a><span class="sd"> https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of</span>
+</span><span id="Version-2597"><a href="#Version-2597"><span class="linenos">2597</span></a><span class="sd"> https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16</span>
+</span><span id="Version-2598"><a href="#Version-2598"><span class="linenos">2598</span></a><span class="sd"> this is either TIMESTAMP or VERSION</span>
+</span><span id="Version-2599"><a href="#Version-2599"><span class="linenos">2599</span></a><span class="sd"> kind is (&quot;AS OF&quot;, &quot;BETWEEN&quot;)</span>
+</span><span id="Version-2600"><a href="#Version-2600"><span class="linenos">2600</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Version-2601"><a href="#Version-2601"><span class="linenos">2601</span></a>
+</span><span id="Version-2602"><a href="#Version-2602"><span class="linenos">2602</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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">False</span><span class="p">}</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Time travel, iceberg, bigquery etc
+<a href="https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots">https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots</a>
+<a href="https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html">https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html</a>
+<a href="https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of">https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of</a>
+<a href="https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16">https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16</a>
+this is either TIMESTAMP or VERSION
+kind is ("AS OF", "BETWEEN")</p>
+</div>
+
+
+ <div id="Version.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True, &#39;kind&#39;: True, &#39;expression&#39;: False}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Version.arg_types"></a>
+
+
+
+ </div>
+ <div id="Version.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;version&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Version.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="Version.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="Version.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="Version.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="Version.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="Version.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="Version.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="Version.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="Version.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="Version.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="Version.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="Version.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="Version.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="Version.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="Version.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="Version.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="Version.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="Version.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="Version.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="Version.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="Version.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="Version.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="Version.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="Version.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="Version.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="Version.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="Version.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="Version.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="Version.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="Version.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="Version.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="Version.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="Version.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="Version.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="Version.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="Version.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="Version.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="Version.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="Version.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="Version.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="Version.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="Version.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="Version.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="Version.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="Version.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="Version.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="Version.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="Version.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="Version.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="Schema">
<input id="Schema-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -33514,8 +34690,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-2549"><a href="#Schema-2549"><span class="linenos">2549</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-2550"><a href="#Schema-2550"><span class="linenos">2550</span></a> <span class="n">arg_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-2605"><a href="#Schema-2605"><span class="linenos">2605</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-2606"><a href="#Schema-2606"><span class="linenos">2606</span></a> <span class="n">arg_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>
@@ -33613,8 +34789,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-2555"><a href="#Lock-2555"><span class="linenos">2555</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-2556"><a href="#Lock-2556"><span class="linenos">2556</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 class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wait&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="Lock-2611"><a href="#Lock-2611"><span class="linenos">2611</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-2612"><a href="#Lock-2612"><span class="linenos">2612</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 class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wait&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -33712,695 +34888,695 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Select"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select-2559"><a href="#Select-2559"><span class="linenos">2559</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-2560"><a href="#Select-2560"><span class="linenos">2560</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Select-2561"><a href="#Select-2561"><span class="linenos">2561</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-2562"><a href="#Select-2562"><span class="linenos">2562</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-2563"><a href="#Select-2563"><span class="linenos">2563</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-2564"><a href="#Select-2564"><span class="linenos">2564</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-2565"><a href="#Select-2565"><span class="linenos">2565</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-2566"><a href="#Select-2566"><span class="linenos">2566</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-2567"><a href="#Select-2567"><span class="linenos">2567</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-2568"><a href="#Select-2568"><span class="linenos">2568</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="Select-2569"><a href="#Select-2569"><span class="linenos">2569</span></a> <span class="p">}</span>
-</span><span id="Select-2570"><a href="#Select-2570"><span class="linenos">2570</span></a>
-</span><span id="Select-2571"><a href="#Select-2571"><span class="linenos">2571</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span>
-</span><span id="Select-2572"><a href="#Select-2572"><span class="linenos">2572</span></a> <span class="bp">self</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">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="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><span id="Select-2573"><a href="#Select-2573"><span class="linenos">2573</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2574"><a href="#Select-2574"><span class="linenos">2574</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2575"><a href="#Select-2575"><span class="linenos">2575</span></a><span class="sd"> Set the FROM expression.</span>
-</span><span id="Select-2576"><a href="#Select-2576"><span class="linenos">2576</span></a>
-</span><span id="Select-2577"><a href="#Select-2577"><span class="linenos">2577</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2578"><a href="#Select-2578"><span class="linenos">2578</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
-</span><span id="Select-2579"><a href="#Select-2579"><span class="linenos">2579</span></a><span class="sd"> &#39;SELECT x FROM tbl&#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 : the SQL code strings to parse.</span>
-</span><span id="Select-2583"><a href="#Select-2583"><span class="linenos">2583</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
-</span><span id="Select-2584"><a href="#Select-2584"><span class="linenos">2584</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
-</span><span id="Select-2585"><a href="#Select-2585"><span class="linenos">2585</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2586"><a href="#Select-2586"><span class="linenos">2586</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2587"><a href="#Select-2587"><span class="linenos">2587</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2588"><a href="#Select-2588"><span class="linenos">2588</span></a>
-</span><span id="Select-2589"><a href="#Select-2589"><span class="linenos">2589</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2590"><a href="#Select-2590"><span class="linenos">2590</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2591"><a href="#Select-2591"><span class="linenos">2591</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2592"><a href="#Select-2592"><span class="linenos">2592</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select-2593"><a href="#Select-2593"><span class="linenos">2593</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select-2594"><a href="#Select-2594"><span class="linenos">2594</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2595"><a href="#Select-2595"><span class="linenos">2595</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-2596"><a href="#Select-2596"><span class="linenos">2596</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
-</span><span id="Select-2597"><a href="#Select-2597"><span class="linenos">2597</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-2598"><a href="#Select-2598"><span class="linenos">2598</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2599"><a href="#Select-2599"><span class="linenos">2599</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2600"><a href="#Select-2600"><span class="linenos">2600</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2601"><a href="#Select-2601"><span class="linenos">2601</span></a> <span class="p">)</span>
-</span><span id="Select-2602"><a href="#Select-2602"><span class="linenos">2602</span></a>
-</span><span id="Select-2603"><a href="#Select-2603"><span class="linenos">2603</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span>
-</span><span id="Select-2604"><a href="#Select-2604"><span class="linenos">2604</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2605"><a href="#Select-2605"><span class="linenos">2605</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-2606"><a href="#Select-2606"><span class="linenos">2606</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-2607"><a href="#Select-2607"><span class="linenos">2607</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-2608"><a href="#Select-2608"><span class="linenos">2608</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-2609"><a href="#Select-2609"><span class="linenos">2609</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2610"><a href="#Select-2610"><span class="linenos">2610</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2611"><a href="#Select-2611"><span class="linenos">2611</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2612"><a href="#Select-2612"><span class="linenos">2612</span></a><span class="sd"> Set the GROUP BY expression.</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="sd"> Example:</span>
-</span><span id="Select-2615"><a href="#Select-2615"><span class="linenos">2615</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-2616"><a href="#Select-2616"><span class="linenos">2616</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</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"> Args:</span>
-</span><span id="Select-2619"><a href="#Select-2619"><span class="linenos">2619</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2620"><a href="#Select-2620"><span class="linenos">2620</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2621"><a href="#Select-2621"><span class="linenos">2621</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
-</span><span id="Select-2622"><a href="#Select-2622"><span class="linenos">2622</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-2623"><a href="#Select-2623"><span class="linenos">2623</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2624"><a href="#Select-2624"><span class="linenos">2624</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
-</span><span id="Select-2625"><a href="#Select-2625"><span class="linenos">2625</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2626"><a href="#Select-2626"><span class="linenos">2626</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2627"><a href="#Select-2627"><span class="linenos">2627</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2628"><a href="#Select-2628"><span class="linenos">2628</span></a>
-</span><span id="Select-2629"><a href="#Select-2629"><span class="linenos">2629</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2630"><a href="#Select-2630"><span class="linenos">2630</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2631"><a href="#Select-2631"><span class="linenos">2631</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2632"><a href="#Select-2632"><span class="linenos">2632</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-2633"><a href="#Select-2633"><span class="linenos">2633</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-2634"><a href="#Select-2634"><span class="linenos">2634</span></a>
-</span><span id="Select-2635"><a href="#Select-2635"><span class="linenos">2635</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2636"><a href="#Select-2636"><span class="linenos">2636</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2637"><a href="#Select-2637"><span class="linenos">2637</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2638"><a href="#Select-2638"><span class="linenos">2638</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-2639"><a href="#Select-2639"><span class="linenos">2639</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2640"><a href="#Select-2640"><span class="linenos">2640</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2641"><a href="#Select-2641"><span class="linenos">2641</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-2642"><a href="#Select-2642"><span class="linenos">2642</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
-</span><span id="Select-2643"><a href="#Select-2643"><span class="linenos">2643</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2644"><a href="#Select-2644"><span class="linenos">2644</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2645"><a href="#Select-2645"><span class="linenos">2645</span></a> <span class="p">)</span>
-</span><span id="Select-2646"><a href="#Select-2646"><span class="linenos">2646</span></a>
-</span><span id="Select-2647"><a href="#Select-2647"><span class="linenos">2647</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span>
-</span><span id="Select-2648"><a href="#Select-2648"><span class="linenos">2648</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2649"><a href="#Select-2649"><span class="linenos">2649</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-2650"><a href="#Select-2650"><span class="linenos">2650</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-2651"><a href="#Select-2651"><span class="linenos">2651</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-2652"><a href="#Select-2652"><span class="linenos">2652</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-2653"><a href="#Select-2653"><span class="linenos">2653</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2654"><a href="#Select-2654"><span class="linenos">2654</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2655"><a href="#Select-2655"><span class="linenos">2655</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2656"><a href="#Select-2656"><span class="linenos">2656</span></a><span class="sd"> Set the ORDER BY expression.</span>
-</span><span id="Select-2657"><a href="#Select-2657"><span class="linenos">2657</span></a>
-</span><span id="Select-2658"><a href="#Select-2658"><span class="linenos">2658</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2659"><a href="#Select-2659"><span class="linenos">2659</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-2660"><a href="#Select-2660"><span class="linenos">2660</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
-</span><span id="Select-2661"><a href="#Select-2661"><span class="linenos">2661</span></a>
-</span><span id="Select-2662"><a href="#Select-2662"><span class="linenos">2662</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2663"><a href="#Select-2663"><span class="linenos">2663</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2664"><a href="#Select-2664"><span class="linenos">2664</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2665"><a href="#Select-2665"><span class="linenos">2665</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
-</span><span id="Select-2666"><a href="#Select-2666"><span class="linenos">2666</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2667"><a href="#Select-2667"><span class="linenos">2667</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select-2668"><a href="#Select-2668"><span class="linenos">2668</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2669"><a href="#Select-2669"><span class="linenos">2669</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2670"><a href="#Select-2670"><span class="linenos">2670</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2671"><a href="#Select-2671"><span class="linenos">2671</span></a>
-</span><span id="Select-2672"><a href="#Select-2672"><span class="linenos">2672</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2673"><a href="#Select-2673"><span class="linenos">2673</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2674"><a href="#Select-2674"><span class="linenos">2674</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2675"><a href="#Select-2675"><span class="linenos">2675</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2676"><a href="#Select-2676"><span class="linenos">2676</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2677"><a href="#Select-2677"><span class="linenos">2677</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2678"><a href="#Select-2678"><span class="linenos">2678</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-2679"><a href="#Select-2679"><span class="linenos">2679</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2680"><a href="#Select-2680"><span class="linenos">2680</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2681"><a href="#Select-2681"><span class="linenos">2681</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-2682"><a href="#Select-2682"><span class="linenos">2682</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="Select-2683"><a href="#Select-2683"><span class="linenos">2683</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2684"><a href="#Select-2684"><span class="linenos">2684</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2685"><a href="#Select-2685"><span class="linenos">2685</span></a> <span class="p">)</span>
-</span><span id="Select-2686"><a href="#Select-2686"><span class="linenos">2686</span></a>
-</span><span id="Select-2687"><a href="#Select-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span>
-</span><span id="Select-2688"><a href="#Select-2688"><span class="linenos">2688</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2689"><a href="#Select-2689"><span class="linenos">2689</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-2690"><a href="#Select-2690"><span class="linenos">2690</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-2691"><a href="#Select-2691"><span class="linenos">2691</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-2692"><a href="#Select-2692"><span class="linenos">2692</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-2693"><a href="#Select-2693"><span class="linenos">2693</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2694"><a href="#Select-2694"><span class="linenos">2694</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2695"><a href="#Select-2695"><span class="linenos">2695</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2696"><a href="#Select-2696"><span class="linenos">2696</span></a><span class="sd"> Set the SORT BY expression.</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="sd"> Example:</span>
-</span><span id="Select-2699"><a href="#Select-2699"><span class="linenos">2699</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
-</span><span id="Select-2700"><a href="#Select-2700"><span class="linenos">2700</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</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="sd"> Args:</span>
-</span><span id="Select-2703"><a href="#Select-2703"><span class="linenos">2703</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2704"><a href="#Select-2704"><span class="linenos">2704</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2705"><a href="#Select-2705"><span class="linenos">2705</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
-</span><span id="Select-2706"><a href="#Select-2706"><span class="linenos">2706</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2707"><a href="#Select-2707"><span class="linenos">2707</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select-2708"><a href="#Select-2708"><span class="linenos">2708</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2709"><a href="#Select-2709"><span class="linenos">2709</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2710"><a href="#Select-2710"><span class="linenos">2710</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2711"><a href="#Select-2711"><span class="linenos">2711</span></a>
-</span><span id="Select-2712"><a href="#Select-2712"><span class="linenos">2712</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2713"><a href="#Select-2713"><span class="linenos">2713</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2714"><a href="#Select-2714"><span class="linenos">2714</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2715"><a href="#Select-2715"><span class="linenos">2715</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2716"><a href="#Select-2716"><span class="linenos">2716</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2717"><a href="#Select-2717"><span class="linenos">2717</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2718"><a href="#Select-2718"><span class="linenos">2718</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-2719"><a href="#Select-2719"><span class="linenos">2719</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2720"><a href="#Select-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="Select-2721"><a href="#Select-2721"><span class="linenos">2721</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-2722"><a href="#Select-2722"><span class="linenos">2722</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
-</span><span id="Select-2723"><a href="#Select-2723"><span class="linenos">2723</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2724"><a href="#Select-2724"><span class="linenos">2724</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2725"><a href="#Select-2725"><span class="linenos">2725</span></a> <span class="p">)</span>
-</span><span id="Select-2726"><a href="#Select-2726"><span class="linenos">2726</span></a>
-</span><span id="Select-2727"><a href="#Select-2727"><span class="linenos">2727</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span>
-</span><span id="Select-2728"><a href="#Select-2728"><span class="linenos">2728</span></a> <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="o">*</span><span class="n">expressions</span><span 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><span id="Select-2730"><a href="#Select-2730"><span class="linenos">2730</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-2731"><a href="#Select-2731"><span class="linenos">2731</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-2732"><a href="#Select-2732"><span class="linenos">2732</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-2733"><a href="#Select-2733"><span class="linenos">2733</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2734"><a href="#Select-2734"><span class="linenos">2734</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2735"><a href="#Select-2735"><span class="linenos">2735</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2736"><a href="#Select-2736"><span class="linenos">2736</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
-</span><span id="Select-2737"><a href="#Select-2737"><span class="linenos">2737</span></a>
-</span><span id="Select-2738"><a href="#Select-2738"><span class="linenos">2738</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2739"><a href="#Select-2739"><span class="linenos">2739</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
-</span><span id="Select-2740"><a href="#Select-2740"><span class="linenos">2740</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
-</span><span id="Select-2741"><a href="#Select-2741"><span class="linenos">2741</span></a>
-</span><span id="Select-2742"><a href="#Select-2742"><span class="linenos">2742</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2743"><a href="#Select-2743"><span class="linenos">2743</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2744"><a href="#Select-2744"><span class="linenos">2744</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2745"><a href="#Select-2745"><span class="linenos">2745</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
-</span><span id="Select-2746"><a href="#Select-2746"><span class="linenos">2746</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2747"><a href="#Select-2747"><span class="linenos">2747</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select-2748"><a href="#Select-2748"><span class="linenos">2748</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2749"><a href="#Select-2749"><span class="linenos">2749</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2750"><a href="#Select-2750"><span class="linenos">2750</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2751"><a href="#Select-2751"><span class="linenos">2751</span></a>
-</span><span id="Select-2752"><a href="#Select-2752"><span class="linenos">2752</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2753"><a href="#Select-2753"><span class="linenos">2753</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2754"><a href="#Select-2754"><span class="linenos">2754</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2755"><a href="#Select-2755"><span class="linenos">2755</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2756"><a href="#Select-2756"><span class="linenos">2756</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2757"><a href="#Select-2757"><span class="linenos">2757</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2758"><a href="#Select-2758"><span class="linenos">2758</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-2759"><a href="#Select-2759"><span class="linenos">2759</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2760"><a href="#Select-2760"><span class="linenos">2760</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2761"><a href="#Select-2761"><span class="linenos">2761</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-2762"><a href="#Select-2762"><span class="linenos">2762</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
-</span><span id="Select-2763"><a href="#Select-2763"><span class="linenos">2763</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2764"><a href="#Select-2764"><span class="linenos">2764</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2765"><a href="#Select-2765"><span class="linenos">2765</span></a> <span class="p">)</span>
-</span><span id="Select-2766"><a href="#Select-2766"><span class="linenos">2766</span></a>
-</span><span id="Select-2767"><a href="#Select-2767"><span class="linenos">2767</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="Select-2768"><a href="#Select-2768"><span class="linenos">2768</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select-2769"><a href="#Select-2769"><span class="linenos">2769</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2770"><a href="#Select-2770"><span class="linenos">2770</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2771"><a href="#Select-2771"><span class="linenos">2771</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Select-2772"><a href="#Select-2772"><span class="linenos">2772</span></a>
-</span><span id="Select-2773"><a href="#Select-2773"><span class="linenos">2773</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2774"><a href="#Select-2774"><span class="linenos">2774</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-2775"><a href="#Select-2775"><span class="linenos">2775</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
-</span><span id="Select-2776"><a href="#Select-2776"><span class="linenos">2776</span></a>
-</span><span id="Select-2777"><a href="#Select-2777"><span class="linenos">2777</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2778"><a href="#Select-2778"><span class="linenos">2778</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Select-2779"><a href="#Select-2779"><span class="linenos">2779</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select-2780"><a href="#Select-2780"><span class="linenos">2780</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Select-2781"><a href="#Select-2781"><span class="linenos">2781</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Select-2782"><a href="#Select-2782"><span class="linenos">2782</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2783"><a href="#Select-2783"><span class="linenos">2783</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2784"><a href="#Select-2784"><span class="linenos">2784</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2785"><a href="#Select-2785"><span class="linenos">2785</span></a>
-</span><span id="Select-2786"><a href="#Select-2786"><span class="linenos">2786</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2787"><a href="#Select-2787"><span class="linenos">2787</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2788"><a href="#Select-2788"><span class="linenos">2788</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2789"><a href="#Select-2789"><span class="linenos">2789</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select-2790"><a href="#Select-2790"><span class="linenos">2790</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select-2791"><a href="#Select-2791"><span class="linenos">2791</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2792"><a href="#Select-2792"><span class="linenos">2792</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-2793"><a href="#Select-2793"><span class="linenos">2793</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
-</span><span id="Select-2794"><a href="#Select-2794"><span class="linenos">2794</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-2795"><a href="#Select-2795"><span class="linenos">2795</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2796"><a href="#Select-2796"><span class="linenos">2796</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2797"><a href="#Select-2797"><span class="linenos">2797</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2798"><a href="#Select-2798"><span class="linenos">2798</span></a> <span class="p">)</span>
-</span><span id="Select-2799"><a href="#Select-2799"><span class="linenos">2799</span></a>
-</span><span id="Select-2800"><a href="#Select-2800"><span class="linenos">2800</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span>
-</span><span id="Select-2801"><a href="#Select-2801"><span class="linenos">2801</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select-2802"><a href="#Select-2802"><span class="linenos">2802</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2803"><a href="#Select-2803"><span class="linenos">2803</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2804"><a href="#Select-2804"><span class="linenos">2804</span></a><span class="sd"> Set the OFFSET expression.</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"> Example:</span>
-</span><span id="Select-2807"><a href="#Select-2807"><span class="linenos">2807</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-2808"><a href="#Select-2808"><span class="linenos">2808</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</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"> Args:</span>
-</span><span id="Select-2811"><a href="#Select-2811"><span class="linenos">2811</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Select-2812"><a href="#Select-2812"><span class="linenos">2812</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select-2813"><a href="#Select-2813"><span class="linenos">2813</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
-</span><span id="Select-2814"><a href="#Select-2814"><span class="linenos">2814</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
-</span><span id="Select-2815"><a href="#Select-2815"><span class="linenos">2815</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select-2816"><a href="#Select-2816"><span class="linenos">2816</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2817"><a href="#Select-2817"><span class="linenos">2817</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="Select-2820"><a href="#Select-2820"><span class="linenos">2820</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2821"><a href="#Select-2821"><span class="linenos">2821</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2822"><a href="#Select-2822"><span class="linenos">2822</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select-2823"><a href="#Select-2823"><span class="linenos">2823</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select-2824"><a href="#Select-2824"><span class="linenos">2824</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2825"><a href="#Select-2825"><span class="linenos">2825</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-2826"><a href="#Select-2826"><span class="linenos">2826</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
-</span><span id="Select-2827"><a href="#Select-2827"><span class="linenos">2827</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-2828"><a href="#Select-2828"><span class="linenos">2828</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2829"><a href="#Select-2829"><span class="linenos">2829</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2830"><a href="#Select-2830"><span class="linenos">2830</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2831"><a href="#Select-2831"><span class="linenos">2831</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select-2615"><a href="#Select-2615"><span class="linenos">2615</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-2616"><a href="#Select-2616"><span class="linenos">2616</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Select-2617"><a href="#Select-2617"><span class="linenos">2617</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-2618"><a href="#Select-2618"><span class="linenos">2618</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-2619"><a href="#Select-2619"><span class="linenos">2619</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-2620"><a href="#Select-2620"><span class="linenos">2620</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-2621"><a href="#Select-2621"><span class="linenos">2621</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-2622"><a href="#Select-2622"><span class="linenos">2622</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-2623"><a href="#Select-2623"><span class="linenos">2623</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-2624"><a href="#Select-2624"><span class="linenos">2624</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="Select-2625"><a href="#Select-2625"><span class="linenos">2625</span></a> <span class="p">}</span>
+</span><span id="Select-2626"><a href="#Select-2626"><span class="linenos">2626</span></a>
+</span><span id="Select-2627"><a href="#Select-2627"><span class="linenos">2627</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span>
+</span><span id="Select-2628"><a href="#Select-2628"><span class="linenos">2628</span></a> <span class="bp">self</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">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="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><span id="Select-2629"><a href="#Select-2629"><span class="linenos">2629</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2630"><a href="#Select-2630"><span class="linenos">2630</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2631"><a href="#Select-2631"><span class="linenos">2631</span></a><span class="sd"> Set the FROM expression.</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="sd"> Example:</span>
+</span><span id="Select-2634"><a href="#Select-2634"><span class="linenos">2634</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
+</span><span id="Select-2635"><a href="#Select-2635"><span class="linenos">2635</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</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"> Args:</span>
+</span><span id="Select-2638"><a href="#Select-2638"><span class="linenos">2638</span></a><span class="sd"> expression : the SQL code strings to parse.</span>
+</span><span id="Select-2639"><a href="#Select-2639"><span class="linenos">2639</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
+</span><span id="Select-2640"><a href="#Select-2640"><span class="linenos">2640</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
+</span><span id="Select-2641"><a href="#Select-2641"><span class="linenos">2641</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2642"><a href="#Select-2642"><span class="linenos">2642</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2643"><a href="#Select-2643"><span class="linenos">2643</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2644"><a href="#Select-2644"><span class="linenos">2644</span></a>
+</span><span id="Select-2645"><a href="#Select-2645"><span class="linenos">2645</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2646"><a href="#Select-2646"><span class="linenos">2646</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2647"><a href="#Select-2647"><span class="linenos">2647</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2648"><a href="#Select-2648"><span class="linenos">2648</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select-2649"><a href="#Select-2649"><span class="linenos">2649</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select-2650"><a href="#Select-2650"><span class="linenos">2650</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2651"><a href="#Select-2651"><span class="linenos">2651</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-2652"><a href="#Select-2652"><span class="linenos">2652</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
+</span><span id="Select-2653"><a href="#Select-2653"><span class="linenos">2653</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-2654"><a href="#Select-2654"><span class="linenos">2654</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2655"><a href="#Select-2655"><span class="linenos">2655</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2656"><a href="#Select-2656"><span class="linenos">2656</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2657"><a href="#Select-2657"><span class="linenos">2657</span></a> <span class="p">)</span>
+</span><span id="Select-2658"><a href="#Select-2658"><span class="linenos">2658</span></a>
+</span><span id="Select-2659"><a href="#Select-2659"><span class="linenos">2659</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span>
+</span><span id="Select-2660"><a href="#Select-2660"><span class="linenos">2660</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2661"><a href="#Select-2661"><span class="linenos">2661</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-2662"><a href="#Select-2662"><span class="linenos">2662</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-2663"><a href="#Select-2663"><span class="linenos">2663</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-2664"><a href="#Select-2664"><span class="linenos">2664</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-2665"><a href="#Select-2665"><span class="linenos">2665</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2666"><a href="#Select-2666"><span class="linenos">2666</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2667"><a href="#Select-2667"><span class="linenos">2667</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2668"><a href="#Select-2668"><span class="linenos">2668</span></a><span class="sd"> Set the GROUP BY expression.</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="sd"> Example:</span>
+</span><span id="Select-2671"><a href="#Select-2671"><span class="linenos">2671</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-2672"><a href="#Select-2672"><span class="linenos">2672</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</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"> Args:</span>
+</span><span id="Select-2675"><a href="#Select-2675"><span class="linenos">2675</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2676"><a href="#Select-2676"><span class="linenos">2676</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2677"><a href="#Select-2677"><span class="linenos">2677</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
+</span><span id="Select-2678"><a href="#Select-2678"><span class="linenos">2678</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-2679"><a href="#Select-2679"><span class="linenos">2679</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2680"><a href="#Select-2680"><span class="linenos">2680</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
+</span><span id="Select-2681"><a href="#Select-2681"><span class="linenos">2681</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2682"><a href="#Select-2682"><span class="linenos">2682</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2683"><a href="#Select-2683"><span class="linenos">2683</span></a><span class="sd"> opts: other options to use to parse the input 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 Select 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-2688"><a href="#Select-2688"><span class="linenos">2688</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-2689"><a href="#Select-2689"><span class="linenos">2689</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-2690"><a href="#Select-2690"><span class="linenos">2690</span></a>
+</span><span id="Select-2691"><a href="#Select-2691"><span class="linenos">2691</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2692"><a href="#Select-2692"><span class="linenos">2692</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2693"><a href="#Select-2693"><span class="linenos">2693</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2694"><a href="#Select-2694"><span class="linenos">2694</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-2695"><a href="#Select-2695"><span class="linenos">2695</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2696"><a href="#Select-2696"><span class="linenos">2696</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2697"><a href="#Select-2697"><span class="linenos">2697</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-2698"><a href="#Select-2698"><span class="linenos">2698</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
+</span><span id="Select-2699"><a href="#Select-2699"><span class="linenos">2699</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2700"><a href="#Select-2700"><span class="linenos">2700</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2701"><a href="#Select-2701"><span class="linenos">2701</span></a> <span class="p">)</span>
+</span><span id="Select-2702"><a href="#Select-2702"><span class="linenos">2702</span></a>
+</span><span id="Select-2703"><a href="#Select-2703"><span class="linenos">2703</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span>
+</span><span id="Select-2704"><a href="#Select-2704"><span class="linenos">2704</span></a> <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="o">*</span><span class="n">expressions</span><span 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><span id="Select-2706"><a href="#Select-2706"><span class="linenos">2706</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-2707"><a href="#Select-2707"><span class="linenos">2707</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-2708"><a href="#Select-2708"><span class="linenos">2708</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-2709"><a href="#Select-2709"><span class="linenos">2709</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2710"><a href="#Select-2710"><span class="linenos">2710</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2711"><a href="#Select-2711"><span class="linenos">2711</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2712"><a href="#Select-2712"><span class="linenos">2712</span></a><span class="sd"> Set the ORDER BY expression.</span>
+</span><span id="Select-2713"><a href="#Select-2713"><span class="linenos">2713</span></a>
+</span><span id="Select-2714"><a href="#Select-2714"><span class="linenos">2714</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2715"><a href="#Select-2715"><span class="linenos">2715</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-2716"><a href="#Select-2716"><span class="linenos">2716</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="Select-2717"><a href="#Select-2717"><span class="linenos">2717</span></a>
+</span><span id="Select-2718"><a href="#Select-2718"><span class="linenos">2718</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2719"><a href="#Select-2719"><span class="linenos">2719</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2720"><a href="#Select-2720"><span class="linenos">2720</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2721"><a href="#Select-2721"><span class="linenos">2721</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
+</span><span id="Select-2722"><a href="#Select-2722"><span class="linenos">2722</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2723"><a href="#Select-2723"><span class="linenos">2723</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select-2724"><a href="#Select-2724"><span class="linenos">2724</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2725"><a href="#Select-2725"><span class="linenos">2725</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2726"><a href="#Select-2726"><span class="linenos">2726</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2727"><a href="#Select-2727"><span class="linenos">2727</span></a>
+</span><span id="Select-2728"><a href="#Select-2728"><span class="linenos">2728</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2729"><a href="#Select-2729"><span class="linenos">2729</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2730"><a href="#Select-2730"><span class="linenos">2730</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2731"><a href="#Select-2731"><span class="linenos">2731</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2732"><a href="#Select-2732"><span class="linenos">2732</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2733"><a href="#Select-2733"><span class="linenos">2733</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2734"><a href="#Select-2734"><span class="linenos">2734</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-2735"><a href="#Select-2735"><span class="linenos">2735</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2736"><a href="#Select-2736"><span class="linenos">2736</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2737"><a href="#Select-2737"><span class="linenos">2737</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-2738"><a href="#Select-2738"><span class="linenos">2738</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="Select-2739"><a href="#Select-2739"><span class="linenos">2739</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2740"><a href="#Select-2740"><span class="linenos">2740</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2741"><a href="#Select-2741"><span class="linenos">2741</span></a> <span class="p">)</span>
+</span><span id="Select-2742"><a href="#Select-2742"><span class="linenos">2742</span></a>
+</span><span id="Select-2743"><a href="#Select-2743"><span class="linenos">2743</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span>
+</span><span id="Select-2744"><a href="#Select-2744"><span class="linenos">2744</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2745"><a href="#Select-2745"><span class="linenos">2745</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-2746"><a href="#Select-2746"><span class="linenos">2746</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-2747"><a href="#Select-2747"><span class="linenos">2747</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-2748"><a href="#Select-2748"><span class="linenos">2748</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-2749"><a href="#Select-2749"><span class="linenos">2749</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2750"><a href="#Select-2750"><span class="linenos">2750</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2751"><a href="#Select-2751"><span class="linenos">2751</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2752"><a href="#Select-2752"><span class="linenos">2752</span></a><span class="sd"> Set the SORT BY expression.</span>
+</span><span id="Select-2753"><a href="#Select-2753"><span class="linenos">2753</span></a>
+</span><span id="Select-2754"><a href="#Select-2754"><span class="linenos">2754</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2755"><a href="#Select-2755"><span class="linenos">2755</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
+</span><span id="Select-2756"><a href="#Select-2756"><span class="linenos">2756</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</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="sd"> Args:</span>
+</span><span id="Select-2759"><a href="#Select-2759"><span class="linenos">2759</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2760"><a href="#Select-2760"><span class="linenos">2760</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2761"><a href="#Select-2761"><span class="linenos">2761</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
+</span><span id="Select-2762"><a href="#Select-2762"><span class="linenos">2762</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2763"><a href="#Select-2763"><span class="linenos">2763</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select-2764"><a href="#Select-2764"><span class="linenos">2764</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2765"><a href="#Select-2765"><span class="linenos">2765</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2766"><a href="#Select-2766"><span class="linenos">2766</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2767"><a href="#Select-2767"><span class="linenos">2767</span></a>
+</span><span id="Select-2768"><a href="#Select-2768"><span class="linenos">2768</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2769"><a href="#Select-2769"><span class="linenos">2769</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2770"><a href="#Select-2770"><span class="linenos">2770</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2771"><a href="#Select-2771"><span class="linenos">2771</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2772"><a href="#Select-2772"><span class="linenos">2772</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2773"><a href="#Select-2773"><span class="linenos">2773</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2774"><a href="#Select-2774"><span class="linenos">2774</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-2775"><a href="#Select-2775"><span class="linenos">2775</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2776"><a href="#Select-2776"><span class="linenos">2776</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2777"><a href="#Select-2777"><span class="linenos">2777</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-2778"><a href="#Select-2778"><span class="linenos">2778</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
+</span><span id="Select-2779"><a href="#Select-2779"><span class="linenos">2779</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2780"><a href="#Select-2780"><span class="linenos">2780</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2781"><a href="#Select-2781"><span class="linenos">2781</span></a> <span class="p">)</span>
+</span><span id="Select-2782"><a href="#Select-2782"><span class="linenos">2782</span></a>
+</span><span id="Select-2783"><a href="#Select-2783"><span class="linenos">2783</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span>
+</span><span id="Select-2784"><a href="#Select-2784"><span class="linenos">2784</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2785"><a href="#Select-2785"><span class="linenos">2785</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-2786"><a href="#Select-2786"><span class="linenos">2786</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-2787"><a href="#Select-2787"><span class="linenos">2787</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-2788"><a href="#Select-2788"><span class="linenos">2788</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-2789"><a href="#Select-2789"><span class="linenos">2789</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2790"><a href="#Select-2790"><span class="linenos">2790</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2791"><a href="#Select-2791"><span class="linenos">2791</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2792"><a href="#Select-2792"><span class="linenos">2792</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
+</span><span id="Select-2793"><a href="#Select-2793"><span class="linenos">2793</span></a>
+</span><span id="Select-2794"><a href="#Select-2794"><span class="linenos">2794</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2795"><a href="#Select-2795"><span class="linenos">2795</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
+</span><span id="Select-2796"><a href="#Select-2796"><span class="linenos">2796</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
+</span><span id="Select-2797"><a href="#Select-2797"><span class="linenos">2797</span></a>
+</span><span id="Select-2798"><a href="#Select-2798"><span class="linenos">2798</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2799"><a href="#Select-2799"><span class="linenos">2799</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2800"><a href="#Select-2800"><span class="linenos">2800</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2801"><a href="#Select-2801"><span class="linenos">2801</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
+</span><span id="Select-2802"><a href="#Select-2802"><span class="linenos">2802</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2803"><a href="#Select-2803"><span class="linenos">2803</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select-2804"><a href="#Select-2804"><span class="linenos">2804</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2805"><a href="#Select-2805"><span class="linenos">2805</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2806"><a href="#Select-2806"><span class="linenos">2806</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2807"><a href="#Select-2807"><span class="linenos">2807</span></a>
+</span><span id="Select-2808"><a href="#Select-2808"><span class="linenos">2808</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2809"><a href="#Select-2809"><span class="linenos">2809</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2810"><a href="#Select-2810"><span class="linenos">2810</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2811"><a href="#Select-2811"><span class="linenos">2811</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2812"><a href="#Select-2812"><span class="linenos">2812</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2813"><a href="#Select-2813"><span class="linenos">2813</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2814"><a href="#Select-2814"><span class="linenos">2814</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-2815"><a href="#Select-2815"><span class="linenos">2815</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2816"><a href="#Select-2816"><span class="linenos">2816</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2817"><a href="#Select-2817"><span class="linenos">2817</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-2818"><a href="#Select-2818"><span class="linenos">2818</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
+</span><span id="Select-2819"><a href="#Select-2819"><span class="linenos">2819</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2820"><a href="#Select-2820"><span class="linenos">2820</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2821"><a href="#Select-2821"><span class="linenos">2821</span></a> <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="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="Select-2824"><a href="#Select-2824"><span class="linenos">2824</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select-2825"><a href="#Select-2825"><span class="linenos">2825</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2826"><a href="#Select-2826"><span class="linenos">2826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2827"><a href="#Select-2827"><span class="linenos">2827</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Select-2828"><a href="#Select-2828"><span class="linenos">2828</span></a>
+</span><span id="Select-2829"><a href="#Select-2829"><span class="linenos">2829</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2830"><a href="#Select-2830"><span class="linenos">2830</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-2831"><a href="#Select-2831"><span class="linenos">2831</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
</span><span id="Select-2832"><a href="#Select-2832"><span class="linenos">2832</span></a>
-</span><span id="Select-2833"><a href="#Select-2833"><span class="linenos">2833</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Select-2834"><a href="#Select-2834"><span class="linenos">2834</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2835"><a href="#Select-2835"><span class="linenos">2835</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-2836"><a href="#Select-2836"><span class="linenos">2836</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-2837"><a href="#Select-2837"><span class="linenos">2837</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-2838"><a href="#Select-2838"><span class="linenos">2838</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-2839"><a href="#Select-2839"><span class="linenos">2839</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2840"><a href="#Select-2840"><span class="linenos">2840</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2841"><a href="#Select-2841"><span class="linenos">2841</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2842"><a href="#Select-2842"><span class="linenos">2842</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
-</span><span id="Select-2843"><a href="#Select-2843"><span class="linenos">2843</span></a>
-</span><span id="Select-2844"><a href="#Select-2844"><span class="linenos">2844</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2845"><a href="#Select-2845"><span class="linenos">2845</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
-</span><span id="Select-2846"><a href="#Select-2846"><span class="linenos">2846</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
-</span><span id="Select-2847"><a href="#Select-2847"><span class="linenos">2847</span></a>
-</span><span id="Select-2848"><a href="#Select-2848"><span class="linenos">2848</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2849"><a href="#Select-2849"><span class="linenos">2849</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2850"><a href="#Select-2850"><span class="linenos">2850</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2851"><a href="#Select-2851"><span class="linenos">2851</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2852"><a href="#Select-2852"><span class="linenos">2852</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select-2853"><a href="#Select-2853"><span class="linenos">2853</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select-2854"><a href="#Select-2854"><span class="linenos">2854</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2855"><a href="#Select-2855"><span class="linenos">2855</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2856"><a href="#Select-2856"><span class="linenos">2856</span></a>
-</span><span id="Select-2857"><a href="#Select-2857"><span class="linenos">2857</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2858"><a href="#Select-2858"><span class="linenos">2858</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2859"><a href="#Select-2859"><span class="linenos">2859</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2860"><a href="#Select-2860"><span class="linenos">2860</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2861"><a href="#Select-2861"><span class="linenos">2861</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2862"><a href="#Select-2862"><span class="linenos">2862</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2863"><a href="#Select-2863"><span class="linenos">2863</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-2864"><a href="#Select-2864"><span class="linenos">2864</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2865"><a href="#Select-2865"><span class="linenos">2865</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2866"><a href="#Select-2866"><span class="linenos">2866</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2867"><a href="#Select-2867"><span class="linenos">2867</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2868"><a href="#Select-2868"><span class="linenos">2868</span></a> <span class="p">)</span>
-</span><span id="Select-2869"><a href="#Select-2869"><span class="linenos">2869</span></a>
-</span><span id="Select-2870"><a href="#Select-2870"><span class="linenos">2870</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span>
-</span><span id="Select-2871"><a href="#Select-2871"><span class="linenos">2871</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2872"><a href="#Select-2872"><span class="linenos">2872</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-2873"><a href="#Select-2873"><span class="linenos">2873</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-2874"><a href="#Select-2874"><span class="linenos">2874</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-2875"><a href="#Select-2875"><span class="linenos">2875</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-2876"><a href="#Select-2876"><span class="linenos">2876</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2877"><a href="#Select-2877"><span class="linenos">2877</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2878"><a href="#Select-2878"><span class="linenos">2878</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2879"><a href="#Select-2879"><span class="linenos">2879</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
-</span><span id="Select-2880"><a href="#Select-2880"><span class="linenos">2880</span></a>
-</span><span id="Select-2881"><a href="#Select-2881"><span class="linenos">2881</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2882"><a href="#Select-2882"><span class="linenos">2882</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-2883"><a href="#Select-2883"><span class="linenos">2883</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
-</span><span id="Select-2884"><a href="#Select-2884"><span class="linenos">2884</span></a>
-</span><span id="Select-2885"><a href="#Select-2885"><span class="linenos">2885</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2886"><a href="#Select-2886"><span class="linenos">2886</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2887"><a href="#Select-2887"><span class="linenos">2887</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2888"><a href="#Select-2888"><span class="linenos">2888</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2889"><a href="#Select-2889"><span class="linenos">2889</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select-2890"><a href="#Select-2890"><span class="linenos">2890</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select-2891"><a href="#Select-2891"><span class="linenos">2891</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2892"><a href="#Select-2892"><span class="linenos">2892</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2893"><a href="#Select-2893"><span class="linenos">2893</span></a>
-</span><span id="Select-2894"><a href="#Select-2894"><span class="linenos">2894</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2895"><a href="#Select-2895"><span class="linenos">2895</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-2896"><a href="#Select-2896"><span class="linenos">2896</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2897"><a href="#Select-2897"><span class="linenos">2897</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2898"><a href="#Select-2898"><span class="linenos">2898</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2899"><a href="#Select-2899"><span class="linenos">2899</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2900"><a href="#Select-2900"><span class="linenos">2900</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-2901"><a href="#Select-2901"><span class="linenos">2901</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2902"><a href="#Select-2902"><span class="linenos">2902</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="Select-2903"><a href="#Select-2903"><span class="linenos">2903</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-2904"><a href="#Select-2904"><span class="linenos">2904</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2905"><a href="#Select-2905"><span class="linenos">2905</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2906"><a href="#Select-2906"><span class="linenos">2906</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2907"><a href="#Select-2907"><span class="linenos">2907</span></a> <span class="p">)</span>
-</span><span id="Select-2908"><a href="#Select-2908"><span class="linenos">2908</span></a>
-</span><span id="Select-2909"><a href="#Select-2909"><span class="linenos">2909</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="Select-2910"><a href="#Select-2910"><span class="linenos">2910</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2911"><a href="#Select-2911"><span class="linenos">2911</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Select-2912"><a href="#Select-2912"><span class="linenos">2912</span></a> <span class="n">on</span><span 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="Select-2913"><a href="#Select-2913"><span class="linenos">2913</span></a> <span class="n">using</span><span 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="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</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="Select-2914"><a href="#Select-2914"><span class="linenos">2914</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-2915"><a href="#Select-2915"><span class="linenos">2915</span></a> <span class="n">join_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-2916"><a href="#Select-2916"><span class="linenos">2916</span></a> <span class="n">join_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">Identifier</span> <span class="o">|</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="Select-2917"><a href="#Select-2917"><span class="linenos">2917</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-2918"><a href="#Select-2918"><span class="linenos">2918</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-2919"><a href="#Select-2919"><span class="linenos">2919</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2920"><a href="#Select-2920"><span class="linenos">2920</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2921"><a href="#Select-2921"><span class="linenos">2921</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2922"><a href="#Select-2922"><span class="linenos">2922</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
-</span><span id="Select-2923"><a href="#Select-2923"><span class="linenos">2923</span></a>
-</span><span id="Select-2924"><a href="#Select-2924"><span class="linenos">2924</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2925"><a href="#Select-2925"><span class="linenos">2925</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-2926"><a href="#Select-2926"><span class="linenos">2926</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="Select-2927"><a href="#Select-2927"><span class="linenos">2927</span></a>
-</span><span id="Select-2928"><a href="#Select-2928"><span class="linenos">2928</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-2929"><a href="#Select-2929"><span class="linenos">2929</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
-</span><span id="Select-2930"><a href="#Select-2930"><span class="linenos">2930</span></a>
-</span><span id="Select-2931"><a href="#Select-2931"><span class="linenos">2931</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
-</span><span id="Select-2932"><a href="#Select-2932"><span class="linenos">2932</span></a>
-</span><span id="Select-2933"><a href="#Select-2933"><span class="linenos">2933</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-2934"><a href="#Select-2934"><span class="linenos">2934</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="Select-2935"><a href="#Select-2935"><span class="linenos">2935</span></a>
-</span><span id="Select-2936"><a href="#Select-2936"><span class="linenos">2936</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2937"><a href="#Select-2937"><span class="linenos">2937</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Select-2938"><a href="#Select-2938"><span class="linenos">2938</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2939"><a href="#Select-2939"><span class="linenos">2939</span></a><span class="sd"> on: optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
-</span><span id="Select-2940"><a href="#Select-2940"><span class="linenos">2940</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2941"><a href="#Select-2941"><span class="linenos">2941</span></a><span class="sd"> using: optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
-</span><span id="Select-2942"><a href="#Select-2942"><span class="linenos">2942</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2943"><a href="#Select-2943"><span class="linenos">2943</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2944"><a href="#Select-2944"><span class="linenos">2944</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select-2945"><a href="#Select-2945"><span class="linenos">2945</span></a><span class="sd"> join_type: if set, alter the parsed join type.</span>
-</span><span id="Select-2946"><a href="#Select-2946"><span class="linenos">2946</span></a><span class="sd"> join_alias: an optional alias for the joined source.</span>
-</span><span id="Select-2947"><a href="#Select-2947"><span class="linenos">2947</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select-2948"><a href="#Select-2948"><span class="linenos">2948</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2949"><a href="#Select-2949"><span class="linenos">2949</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2950"><a href="#Select-2950"><span class="linenos">2950</span></a>
-</span><span id="Select-2951"><a href="#Select-2951"><span class="linenos">2951</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2952"><a href="#Select-2952"><span class="linenos">2952</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2953"><a href="#Select-2953"><span class="linenos">2953</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2954"><a href="#Select-2954"><span class="linenos">2954</span></a> <span class="n">parse_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;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-2955"><a href="#Select-2955"><span class="linenos">2955</span></a>
-</span><span id="Select-2956"><a href="#Select-2956"><span class="linenos">2956</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Select-2957"><a href="#Select-2957"><span class="linenos">2957</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-2958"><a href="#Select-2958"><span class="linenos">2958</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Select-2959"><a href="#Select-2959"><span class="linenos">2959</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-2960"><a href="#Select-2960"><span class="linenos">2960</span></a>
-</span><span id="Select-2961"><a href="#Select-2961"><span class="linenos">2961</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-2962"><a href="#Select-2962"><span class="linenos">2962</span></a>
-</span><span id="Select-2963"><a href="#Select-2963"><span class="linenos">2963</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-2964"><a href="#Select-2964"><span class="linenos">2964</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-2965"><a href="#Select-2965"><span class="linenos">2965</span></a>
-</span><span id="Select-2966"><a href="#Select-2966"><span class="linenos">2966</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
-</span><span id="Select-2967"><a href="#Select-2967"><span class="linenos">2967</span></a> <span class="n">method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span>
-</span><span id="Select-2968"><a href="#Select-2968"><span class="linenos">2968</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-2969"><a href="#Select-2969"><span class="linenos">2969</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-2970"><a href="#Select-2970"><span class="linenos">2970</span></a>
-</span><span id="Select-2971"><a href="#Select-2971"><span class="linenos">2971</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="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-2972"><a href="#Select-2972"><span class="linenos">2972</span></a>
-</span><span id="Select-2973"><a href="#Select-2973"><span class="linenos">2973</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="Select-2974"><a href="#Select-2974"><span class="linenos">2974</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Select-2975"><a href="#Select-2975"><span class="linenos">2975</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Select-2976"><a href="#Select-2976"><span class="linenos">2976</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-2977"><a href="#Select-2977"><span class="linenos">2977</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Select-2978"><a href="#Select-2978"><span class="linenos">2978</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-2833"><a href="#Select-2833"><span class="linenos">2833</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2834"><a href="#Select-2834"><span class="linenos">2834</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Select-2835"><a href="#Select-2835"><span class="linenos">2835</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select-2836"><a href="#Select-2836"><span class="linenos">2836</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Select-2837"><a href="#Select-2837"><span class="linenos">2837</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Select-2838"><a href="#Select-2838"><span class="linenos">2838</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2839"><a href="#Select-2839"><span class="linenos">2839</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2840"><a href="#Select-2840"><span class="linenos">2840</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2841"><a href="#Select-2841"><span class="linenos">2841</span></a>
+</span><span id="Select-2842"><a href="#Select-2842"><span class="linenos">2842</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2843"><a href="#Select-2843"><span class="linenos">2843</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2844"><a href="#Select-2844"><span class="linenos">2844</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2845"><a href="#Select-2845"><span class="linenos">2845</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select-2846"><a href="#Select-2846"><span class="linenos">2846</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select-2847"><a href="#Select-2847"><span class="linenos">2847</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2848"><a href="#Select-2848"><span class="linenos">2848</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-2849"><a href="#Select-2849"><span class="linenos">2849</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="Select-2850"><a href="#Select-2850"><span class="linenos">2850</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-2851"><a href="#Select-2851"><span class="linenos">2851</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2852"><a href="#Select-2852"><span class="linenos">2852</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2853"><a href="#Select-2853"><span class="linenos">2853</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2854"><a href="#Select-2854"><span class="linenos">2854</span></a> <span class="p">)</span>
+</span><span id="Select-2855"><a href="#Select-2855"><span class="linenos">2855</span></a>
+</span><span id="Select-2856"><a href="#Select-2856"><span class="linenos">2856</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span>
+</span><span id="Select-2857"><a href="#Select-2857"><span class="linenos">2857</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select-2858"><a href="#Select-2858"><span class="linenos">2858</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2859"><a href="#Select-2859"><span class="linenos">2859</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2860"><a href="#Select-2860"><span class="linenos">2860</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select-2861"><a href="#Select-2861"><span class="linenos">2861</span></a>
+</span><span id="Select-2862"><a href="#Select-2862"><span class="linenos">2862</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2863"><a href="#Select-2863"><span class="linenos">2863</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-2864"><a href="#Select-2864"><span class="linenos">2864</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
+</span><span id="Select-2865"><a href="#Select-2865"><span class="linenos">2865</span></a>
+</span><span id="Select-2866"><a href="#Select-2866"><span class="linenos">2866</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2867"><a href="#Select-2867"><span class="linenos">2867</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Select-2868"><a href="#Select-2868"><span class="linenos">2868</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select-2869"><a href="#Select-2869"><span class="linenos">2869</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
+</span><span id="Select-2870"><a href="#Select-2870"><span class="linenos">2870</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
+</span><span id="Select-2871"><a href="#Select-2871"><span class="linenos">2871</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select-2872"><a href="#Select-2872"><span class="linenos">2872</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2873"><a href="#Select-2873"><span class="linenos">2873</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2874"><a href="#Select-2874"><span class="linenos">2874</span></a>
+</span><span id="Select-2875"><a href="#Select-2875"><span class="linenos">2875</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2876"><a href="#Select-2876"><span class="linenos">2876</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2877"><a href="#Select-2877"><span class="linenos">2877</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2878"><a href="#Select-2878"><span class="linenos">2878</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select-2879"><a href="#Select-2879"><span class="linenos">2879</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select-2880"><a href="#Select-2880"><span class="linenos">2880</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2881"><a href="#Select-2881"><span class="linenos">2881</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-2882"><a href="#Select-2882"><span class="linenos">2882</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
+</span><span id="Select-2883"><a href="#Select-2883"><span class="linenos">2883</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-2884"><a href="#Select-2884"><span class="linenos">2884</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2885"><a href="#Select-2885"><span class="linenos">2885</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2886"><a href="#Select-2886"><span class="linenos">2886</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2887"><a href="#Select-2887"><span class="linenos">2887</span></a> <span class="p">)</span>
+</span><span id="Select-2888"><a href="#Select-2888"><span class="linenos">2888</span></a>
+</span><span id="Select-2889"><a href="#Select-2889"><span class="linenos">2889</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Select-2890"><a href="#Select-2890"><span class="linenos">2890</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2891"><a href="#Select-2891"><span class="linenos">2891</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-2892"><a href="#Select-2892"><span class="linenos">2892</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-2893"><a href="#Select-2893"><span class="linenos">2893</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-2894"><a href="#Select-2894"><span class="linenos">2894</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-2895"><a href="#Select-2895"><span class="linenos">2895</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2896"><a href="#Select-2896"><span class="linenos">2896</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2897"><a href="#Select-2897"><span class="linenos">2897</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2898"><a href="#Select-2898"><span class="linenos">2898</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
+</span><span id="Select-2899"><a href="#Select-2899"><span class="linenos">2899</span></a>
+</span><span id="Select-2900"><a href="#Select-2900"><span class="linenos">2900</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2901"><a href="#Select-2901"><span class="linenos">2901</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
+</span><span id="Select-2902"><a href="#Select-2902"><span class="linenos">2902</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
+</span><span id="Select-2903"><a href="#Select-2903"><span class="linenos">2903</span></a>
+</span><span id="Select-2904"><a href="#Select-2904"><span class="linenos">2904</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2905"><a href="#Select-2905"><span class="linenos">2905</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2906"><a href="#Select-2906"><span class="linenos">2906</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2907"><a href="#Select-2907"><span class="linenos">2907</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2908"><a href="#Select-2908"><span class="linenos">2908</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select-2909"><a href="#Select-2909"><span class="linenos">2909</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select-2910"><a href="#Select-2910"><span class="linenos">2910</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2911"><a href="#Select-2911"><span class="linenos">2911</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2912"><a href="#Select-2912"><span class="linenos">2912</span></a>
+</span><span id="Select-2913"><a href="#Select-2913"><span class="linenos">2913</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2914"><a href="#Select-2914"><span class="linenos">2914</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2915"><a href="#Select-2915"><span class="linenos">2915</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2916"><a href="#Select-2916"><span class="linenos">2916</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2917"><a href="#Select-2917"><span class="linenos">2917</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2918"><a href="#Select-2918"><span class="linenos">2918</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2919"><a href="#Select-2919"><span class="linenos">2919</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-2920"><a href="#Select-2920"><span class="linenos">2920</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2921"><a href="#Select-2921"><span class="linenos">2921</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2922"><a href="#Select-2922"><span class="linenos">2922</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2923"><a href="#Select-2923"><span class="linenos">2923</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2924"><a href="#Select-2924"><span class="linenos">2924</span></a> <span class="p">)</span>
+</span><span id="Select-2925"><a href="#Select-2925"><span class="linenos">2925</span></a>
+</span><span id="Select-2926"><a href="#Select-2926"><span class="linenos">2926</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span>
+</span><span id="Select-2927"><a href="#Select-2927"><span class="linenos">2927</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2928"><a href="#Select-2928"><span class="linenos">2928</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-2929"><a href="#Select-2929"><span class="linenos">2929</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-2930"><a href="#Select-2930"><span class="linenos">2930</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-2931"><a href="#Select-2931"><span class="linenos">2931</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-2932"><a href="#Select-2932"><span class="linenos">2932</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2933"><a href="#Select-2933"><span class="linenos">2933</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2934"><a href="#Select-2934"><span class="linenos">2934</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2935"><a href="#Select-2935"><span class="linenos">2935</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
+</span><span id="Select-2936"><a href="#Select-2936"><span class="linenos">2936</span></a>
+</span><span id="Select-2937"><a href="#Select-2937"><span class="linenos">2937</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2938"><a href="#Select-2938"><span class="linenos">2938</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-2939"><a href="#Select-2939"><span class="linenos">2939</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
+</span><span id="Select-2940"><a href="#Select-2940"><span class="linenos">2940</span></a>
+</span><span id="Select-2941"><a href="#Select-2941"><span class="linenos">2941</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2942"><a href="#Select-2942"><span class="linenos">2942</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2943"><a href="#Select-2943"><span class="linenos">2943</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2944"><a href="#Select-2944"><span class="linenos">2944</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2945"><a href="#Select-2945"><span class="linenos">2945</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select-2946"><a href="#Select-2946"><span class="linenos">2946</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select-2947"><a href="#Select-2947"><span class="linenos">2947</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2948"><a href="#Select-2948"><span class="linenos">2948</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2949"><a href="#Select-2949"><span class="linenos">2949</span></a>
+</span><span id="Select-2950"><a href="#Select-2950"><span class="linenos">2950</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2951"><a href="#Select-2951"><span class="linenos">2951</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-2952"><a href="#Select-2952"><span class="linenos">2952</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2953"><a href="#Select-2953"><span class="linenos">2953</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2954"><a href="#Select-2954"><span class="linenos">2954</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2955"><a href="#Select-2955"><span class="linenos">2955</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2956"><a href="#Select-2956"><span class="linenos">2956</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-2957"><a href="#Select-2957"><span class="linenos">2957</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2958"><a href="#Select-2958"><span class="linenos">2958</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="Select-2959"><a href="#Select-2959"><span class="linenos">2959</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-2960"><a href="#Select-2960"><span class="linenos">2960</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2961"><a href="#Select-2961"><span class="linenos">2961</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2962"><a href="#Select-2962"><span class="linenos">2962</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2963"><a href="#Select-2963"><span class="linenos">2963</span></a> <span class="p">)</span>
+</span><span id="Select-2964"><a href="#Select-2964"><span class="linenos">2964</span></a>
+</span><span id="Select-2965"><a href="#Select-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="Select-2966"><a href="#Select-2966"><span class="linenos">2966</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2967"><a href="#Select-2967"><span class="linenos">2967</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Select-2968"><a href="#Select-2968"><span class="linenos">2968</span></a> <span class="n">on</span><span 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="Select-2969"><a href="#Select-2969"><span class="linenos">2969</span></a> <span class="n">using</span><span 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="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</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="Select-2970"><a href="#Select-2970"><span class="linenos">2970</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-2971"><a href="#Select-2971"><span class="linenos">2971</span></a> <span class="n">join_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-2972"><a href="#Select-2972"><span class="linenos">2972</span></a> <span class="n">join_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">Identifier</span> <span class="o">|</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="Select-2973"><a href="#Select-2973"><span class="linenos">2973</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-2974"><a href="#Select-2974"><span class="linenos">2974</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-2975"><a href="#Select-2975"><span class="linenos">2975</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2976"><a href="#Select-2976"><span class="linenos">2976</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2977"><a href="#Select-2977"><span class="linenos">2977</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2978"><a href="#Select-2978"><span class="linenos">2978</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
</span><span id="Select-2979"><a href="#Select-2979"><span class="linenos">2979</span></a>
-</span><span id="Select-2980"><a href="#Select-2980"><span class="linenos">2980</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
-</span><span id="Select-2981"><a href="#Select-2981"><span class="linenos">2981</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_list</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-2982"><a href="#Select-2982"><span class="linenos">2982</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-2980"><a href="#Select-2980"><span class="linenos">2980</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2981"><a href="#Select-2981"><span class="linenos">2981</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-2982"><a href="#Select-2982"><span class="linenos">2982</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
</span><span id="Select-2983"><a href="#Select-2983"><span class="linenos">2983</span></a>
-</span><span id="Select-2984"><a href="#Select-2984"><span class="linenos">2984</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Select-2985"><a href="#Select-2985"><span class="linenos">2985</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-2986"><a href="#Select-2986"><span class="linenos">2986</span></a> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
-</span><span id="Select-2987"><a href="#Select-2987"><span class="linenos">2987</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
-</span><span id="Select-2988"><a href="#Select-2988"><span class="linenos">2988</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-2989"><a href="#Select-2989"><span class="linenos">2989</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2990"><a href="#Select-2990"><span class="linenos">2990</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2991"><a href="#Select-2991"><span class="linenos">2991</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="Select-2992"><a href="#Select-2992"><span class="linenos">2992</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2993"><a href="#Select-2993"><span class="linenos">2993</span></a> <span class="p">)</span>
-</span><span id="Select-2994"><a href="#Select-2994"><span class="linenos">2994</span></a>
-</span><span id="Select-2995"><a href="#Select-2995"><span class="linenos">2995</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
-</span><span id="Select-2996"><a href="#Select-2996"><span class="linenos">2996</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-2997"><a href="#Select-2997"><span class="linenos">2997</span></a>
-</span><span id="Select-2998"><a href="#Select-2998"><span class="linenos">2998</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2999"><a href="#Select-2999"><span class="linenos">2999</span></a> <span class="n">join</span><span class="p">,</span>
-</span><span id="Select-3000"><a href="#Select-3000"><span class="linenos">3000</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3001"><a href="#Select-3001"><span class="linenos">3001</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-3002"><a href="#Select-3002"><span class="linenos">3002</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-3003"><a href="#Select-3003"><span class="linenos">3003</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-3004"><a href="#Select-3004"><span class="linenos">3004</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3005"><a href="#Select-3005"><span class="linenos">3005</span></a> <span class="p">)</span>
+</span><span id="Select-2984"><a href="#Select-2984"><span class="linenos">2984</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-2985"><a href="#Select-2985"><span class="linenos">2985</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
+</span><span id="Select-2986"><a href="#Select-2986"><span class="linenos">2986</span></a>
+</span><span id="Select-2987"><a href="#Select-2987"><span class="linenos">2987</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
+</span><span id="Select-2988"><a href="#Select-2988"><span class="linenos">2988</span></a>
+</span><span id="Select-2989"><a href="#Select-2989"><span class="linenos">2989</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-2990"><a href="#Select-2990"><span class="linenos">2990</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="Select-2991"><a href="#Select-2991"><span class="linenos">2991</span></a>
+</span><span id="Select-2992"><a href="#Select-2992"><span class="linenos">2992</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2993"><a href="#Select-2993"><span class="linenos">2993</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Select-2994"><a href="#Select-2994"><span class="linenos">2994</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2995"><a href="#Select-2995"><span class="linenos">2995</span></a><span class="sd"> on: optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
+</span><span id="Select-2996"><a href="#Select-2996"><span class="linenos">2996</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2997"><a href="#Select-2997"><span class="linenos">2997</span></a><span class="sd"> using: optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
+</span><span id="Select-2998"><a href="#Select-2998"><span class="linenos">2998</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2999"><a href="#Select-2999"><span class="linenos">2999</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-3000"><a href="#Select-3000"><span class="linenos">3000</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select-3001"><a href="#Select-3001"><span class="linenos">3001</span></a><span class="sd"> join_type: if set, alter the parsed join type.</span>
+</span><span id="Select-3002"><a href="#Select-3002"><span class="linenos">3002</span></a><span class="sd"> join_alias: an optional alias for the joined source.</span>
+</span><span id="Select-3003"><a href="#Select-3003"><span class="linenos">3003</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select-3004"><a href="#Select-3004"><span class="linenos">3004</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-3005"><a href="#Select-3005"><span class="linenos">3005</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
</span><span id="Select-3006"><a href="#Select-3006"><span class="linenos">3006</span></a>
-</span><span id="Select-3007"><a href="#Select-3007"><span class="linenos">3007</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="Select-3008"><a href="#Select-3008"><span class="linenos">3008</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3009"><a href="#Select-3009"><span class="linenos">3009</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-3010"><a href="#Select-3010"><span class="linenos">3010</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-3011"><a href="#Select-3011"><span class="linenos">3011</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-3012"><a href="#Select-3012"><span class="linenos">3012</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-3013"><a href="#Select-3013"><span class="linenos">3013</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3014"><a href="#Select-3014"><span class="linenos">3014</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-3015"><a href="#Select-3015"><span class="linenos">3015</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-3016"><a href="#Select-3016"><span class="linenos">3016</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Select-3017"><a href="#Select-3017"><span class="linenos">3017</span></a>
-</span><span id="Select-3018"><a href="#Select-3018"><span class="linenos">3018</span></a><span class="sd"> Example:</span>
-</span><span id="Select-3019"><a href="#Select-3019"><span class="linenos">3019</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-3020"><a href="#Select-3020"><span class="linenos">3020</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-3007"><a href="#Select-3007"><span class="linenos">3007</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3008"><a href="#Select-3008"><span class="linenos">3008</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-3009"><a href="#Select-3009"><span class="linenos">3009</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3010"><a href="#Select-3010"><span class="linenos">3010</span></a> <span class="n">parse_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;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-3011"><a href="#Select-3011"><span class="linenos">3011</span></a>
+</span><span id="Select-3012"><a href="#Select-3012"><span class="linenos">3012</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Select-3013"><a href="#Select-3013"><span class="linenos">3013</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-3014"><a href="#Select-3014"><span class="linenos">3014</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Select-3015"><a href="#Select-3015"><span class="linenos">3015</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-3016"><a href="#Select-3016"><span class="linenos">3016</span></a>
+</span><span id="Select-3017"><a href="#Select-3017"><span class="linenos">3017</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-3018"><a href="#Select-3018"><span class="linenos">3018</span></a>
+</span><span id="Select-3019"><a href="#Select-3019"><span class="linenos">3019</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-3020"><a href="#Select-3020"><span class="linenos">3020</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-3021"><a href="#Select-3021"><span class="linenos">3021</span></a>
-</span><span id="Select-3022"><a href="#Select-3022"><span class="linenos">3022</span></a><span class="sd"> Args:</span>
-</span><span id="Select-3023"><a href="#Select-3023"><span class="linenos">3023</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-3024"><a href="#Select-3024"><span class="linenos">3024</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-3025"><a href="#Select-3025"><span class="linenos">3025</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select-3026"><a href="#Select-3026"><span class="linenos">3026</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select-3027"><a href="#Select-3027"><span class="linenos">3027</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select-3028"><a href="#Select-3028"><span class="linenos">3028</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select-3029"><a href="#Select-3029"><span class="linenos">3029</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-3030"><a href="#Select-3030"><span class="linenos">3030</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-3031"><a href="#Select-3031"><span class="linenos">3031</span></a>
-</span><span id="Select-3032"><a href="#Select-3032"><span class="linenos">3032</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-3033"><a href="#Select-3033"><span class="linenos">3033</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-3034"><a href="#Select-3034"><span class="linenos">3034</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-3035"><a href="#Select-3035"><span class="linenos">3035</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select-3036"><a href="#Select-3036"><span class="linenos">3036</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-3037"><a href="#Select-3037"><span class="linenos">3037</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3038"><a href="#Select-3038"><span class="linenos">3038</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-3039"><a href="#Select-3039"><span class="linenos">3039</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-3040"><a href="#Select-3040"><span class="linenos">3040</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Select-3041"><a href="#Select-3041"><span class="linenos">3041</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-3042"><a href="#Select-3042"><span class="linenos">3042</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-3043"><a href="#Select-3043"><span class="linenos">3043</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3044"><a href="#Select-3044"><span class="linenos">3044</span></a> <span class="p">)</span>
-</span><span id="Select-3045"><a href="#Select-3045"><span class="linenos">3045</span></a>
-</span><span id="Select-3046"><a href="#Select-3046"><span class="linenos">3046</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span>
-</span><span id="Select-3047"><a href="#Select-3047"><span class="linenos">3047</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3048"><a href="#Select-3048"><span class="linenos">3048</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-3049"><a href="#Select-3049"><span class="linenos">3049</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-3050"><a href="#Select-3050"><span class="linenos">3050</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-3051"><a href="#Select-3051"><span class="linenos">3051</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-3052"><a href="#Select-3052"><span class="linenos">3052</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3053"><a href="#Select-3053"><span class="linenos">3053</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-3054"><a href="#Select-3054"><span class="linenos">3054</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-3055"><a href="#Select-3055"><span class="linenos">3055</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
-</span><span id="Select-3056"><a href="#Select-3056"><span class="linenos">3056</span></a>
-</span><span id="Select-3057"><a href="#Select-3057"><span class="linenos">3057</span></a><span class="sd"> Example:</span>
-</span><span id="Select-3058"><a href="#Select-3058"><span class="linenos">3058</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-3059"><a href="#Select-3059"><span class="linenos">3059</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-3060"><a href="#Select-3060"><span class="linenos">3060</span></a>
-</span><span id="Select-3061"><a href="#Select-3061"><span class="linenos">3061</span></a><span class="sd"> Args:</span>
-</span><span id="Select-3062"><a href="#Select-3062"><span class="linenos">3062</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-3063"><a href="#Select-3063"><span class="linenos">3063</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-3064"><a href="#Select-3064"><span class="linenos">3064</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select-3065"><a href="#Select-3065"><span class="linenos">3065</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select-3066"><a href="#Select-3066"><span class="linenos">3066</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select-3067"><a href="#Select-3067"><span class="linenos">3067</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select-3068"><a href="#Select-3068"><span class="linenos">3068</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-3069"><a href="#Select-3069"><span class="linenos">3069</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-3070"><a href="#Select-3070"><span class="linenos">3070</span></a>
-</span><span id="Select-3071"><a href="#Select-3071"><span class="linenos">3071</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-3072"><a href="#Select-3072"><span class="linenos">3072</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select-3073"><a href="#Select-3073"><span class="linenos">3073</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-3074"><a href="#Select-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select-3075"><a href="#Select-3075"><span class="linenos">3075</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-3076"><a href="#Select-3076"><span class="linenos">3076</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3077"><a href="#Select-3077"><span class="linenos">3077</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-3078"><a href="#Select-3078"><span class="linenos">3078</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-3079"><a href="#Select-3079"><span class="linenos">3079</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
-</span><span id="Select-3080"><a href="#Select-3080"><span class="linenos">3080</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-3081"><a href="#Select-3081"><span class="linenos">3081</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-3082"><a href="#Select-3082"><span class="linenos">3082</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3083"><a href="#Select-3083"><span class="linenos">3083</span></a> <span class="p">)</span>
-</span><span id="Select-3084"><a href="#Select-3084"><span class="linenos">3084</span></a>
-</span><span id="Select-3085"><a href="#Select-3085"><span class="linenos">3085</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span>
-</span><span id="Select-3086"><a href="#Select-3086"><span class="linenos">3086</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3087"><a href="#Select-3087"><span class="linenos">3087</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-3088"><a href="#Select-3088"><span class="linenos">3088</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-3089"><a href="#Select-3089"><span class="linenos">3089</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-3090"><a href="#Select-3090"><span class="linenos">3090</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-3091"><a href="#Select-3091"><span class="linenos">3091</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3092"><a href="#Select-3092"><span class="linenos">3092</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-3093"><a href="#Select-3093"><span class="linenos">3093</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-3094"><a href="#Select-3094"><span class="linenos">3094</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-3095"><a href="#Select-3095"><span class="linenos">3095</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3096"><a href="#Select-3096"><span class="linenos">3096</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-3097"><a href="#Select-3097"><span class="linenos">3097</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-3098"><a href="#Select-3098"><span class="linenos">3098</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="Select-3099"><a href="#Select-3099"><span class="linenos">3099</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-3100"><a href="#Select-3100"><span class="linenos">3100</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-3101"><a href="#Select-3101"><span class="linenos">3101</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3102"><a href="#Select-3102"><span class="linenos">3102</span></a> <span class="p">)</span>
-</span><span id="Select-3103"><a href="#Select-3103"><span class="linenos">3103</span></a>
-</span><span id="Select-3104"><a href="#Select-3104"><span class="linenos">3104</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span>
-</span><span id="Select-3105"><a href="#Select-3105"><span class="linenos">3105</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3106"><a href="#Select-3106"><span class="linenos">3106</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select-3107"><a href="#Select-3107"><span class="linenos">3107</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-3108"><a href="#Select-3108"><span class="linenos">3108</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-3109"><a href="#Select-3109"><span class="linenos">3109</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-3110"><a href="#Select-3110"><span class="linenos">3110</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3111"><a href="#Select-3111"><span class="linenos">3111</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-3112"><a href="#Select-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select-3113"><a href="#Select-3113"><span class="linenos">3113</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-3114"><a href="#Select-3114"><span class="linenos">3114</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3115"><a href="#Select-3115"><span class="linenos">3115</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-3116"><a href="#Select-3116"><span class="linenos">3116</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-3117"><a href="#Select-3117"><span class="linenos">3117</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
-</span><span id="Select-3118"><a href="#Select-3118"><span class="linenos">3118</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-3119"><a href="#Select-3119"><span class="linenos">3119</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-3120"><a href="#Select-3120"><span class="linenos">3120</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3121"><a href="#Select-3121"><span class="linenos">3121</span></a> <span class="p">)</span>
-</span><span id="Select-3122"><a href="#Select-3122"><span class="linenos">3122</span></a>
-</span><span id="Select-3123"><a href="#Select-3123"><span class="linenos">3123</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span>
-</span><span id="Select-3124"><a href="#Select-3124"><span class="linenos">3124</span></a> <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">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="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><span id="Select-3125"><a href="#Select-3125"><span class="linenos">3125</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-3126"><a href="#Select-3126"><span class="linenos">3126</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-3127"><a href="#Select-3127"><span class="linenos">3127</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select-3128"><a href="#Select-3128"><span class="linenos">3128</span></a>
-</span><span id="Select-3129"><a href="#Select-3129"><span class="linenos">3129</span></a><span class="sd"> Example:</span>
-</span><span id="Select-3130"><a href="#Select-3130"><span class="linenos">3130</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
-</span><span id="Select-3131"><a href="#Select-3131"><span class="linenos">3131</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
-</span><span id="Select-3132"><a href="#Select-3132"><span class="linenos">3132</span></a>
-</span><span id="Select-3133"><a href="#Select-3133"><span class="linenos">3133</span></a><span class="sd"> Args:</span>
-</span><span id="Select-3134"><a href="#Select-3134"><span class="linenos">3134</span></a><span class="sd"> ons: the expressions to distinct on</span>
-</span><span id="Select-3135"><a href="#Select-3135"><span class="linenos">3135</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
-</span><span id="Select-3136"><a href="#Select-3136"><span class="linenos">3136</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-3137"><a href="#Select-3137"><span class="linenos">3137</span></a>
-</span><span id="Select-3138"><a href="#Select-3138"><span class="linenos">3138</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-3139"><a href="#Select-3139"><span class="linenos">3139</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-3140"><a href="#Select-3140"><span class="linenos">3140</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-3141"><a href="#Select-3141"><span class="linenos">3141</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-3142"><a href="#Select-3142"><span class="linenos">3142</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="k">if</span> <span class="n">on</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-3143"><a href="#Select-3143"><span class="linenos">3143</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-3144"><a href="#Select-3144"><span class="linenos">3144</span></a> <span class="k">return</span> <span class="n">instance</span>
-</span><span id="Select-3145"><a href="#Select-3145"><span class="linenos">3145</span></a>
-</span><span id="Select-3146"><a href="#Select-3146"><span class="linenos">3146</span></a> <span class="k">def</span> <span class="nf">ctas</span><span class="p">(</span>
-</span><span id="Select-3147"><a href="#Select-3147"><span class="linenos">3147</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-3148"><a href="#Select-3148"><span class="linenos">3148</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Select-3149"><a href="#Select-3149"><span class="linenos">3149</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-3150"><a href="#Select-3150"><span class="linenos">3150</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-3151"><a href="#Select-3151"><span class="linenos">3151</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-3152"><a href="#Select-3152"><span class="linenos">3152</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3153"><a href="#Select-3153"><span class="linenos">3153</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Create</span><span class="p">:</span>
-</span><span id="Select-3154"><a href="#Select-3154"><span class="linenos">3154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-3155"><a href="#Select-3155"><span class="linenos">3155</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
-</span><span id="Select-3156"><a href="#Select-3156"><span class="linenos">3156</span></a>
-</span><span id="Select-3157"><a href="#Select-3157"><span class="linenos">3157</span></a><span class="sd"> Example:</span>
-</span><span id="Select-3158"><a href="#Select-3158"><span class="linenos">3158</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-3159"><a href="#Select-3159"><span class="linenos">3159</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
-</span><span id="Select-3160"><a href="#Select-3160"><span class="linenos">3160</span></a>
-</span><span id="Select-3161"><a href="#Select-3161"><span class="linenos">3161</span></a><span class="sd"> Args:</span>
-</span><span id="Select-3162"><a href="#Select-3162"><span class="linenos">3162</span></a><span class="sd"> table: the SQL code string to parse as the table name.</span>
-</span><span id="Select-3163"><a href="#Select-3163"><span class="linenos">3163</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-3164"><a href="#Select-3164"><span class="linenos">3164</span></a><span class="sd"> properties: an optional mapping of table properties</span>
-</span><span id="Select-3165"><a href="#Select-3165"><span class="linenos">3165</span></a><span class="sd"> dialect: the dialect used to parse the input table.</span>
-</span><span id="Select-3166"><a href="#Select-3166"><span class="linenos">3166</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-3167"><a href="#Select-3167"><span class="linenos">3167</span></a><span class="sd"> opts: other options to use to parse the input table.</span>
-</span><span id="Select-3168"><a href="#Select-3168"><span class="linenos">3168</span></a>
-</span><span id="Select-3169"><a href="#Select-3169"><span class="linenos">3169</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-3170"><a href="#Select-3170"><span class="linenos">3170</span></a><span class="sd"> The new Create expression.</span>
-</span><span id="Select-3171"><a href="#Select-3171"><span class="linenos">3171</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-3172"><a href="#Select-3172"><span class="linenos">3172</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-3173"><a href="#Select-3173"><span class="linenos">3173</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-3174"><a href="#Select-3174"><span class="linenos">3174</span></a> <span class="n">table</span><span class="p">,</span>
-</span><span id="Select-3175"><a href="#Select-3175"><span class="linenos">3175</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="Select-3176"><a href="#Select-3176"><span class="linenos">3176</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-3177"><a href="#Select-3177"><span class="linenos">3177</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-3178"><a href="#Select-3178"><span class="linenos">3178</span></a> <span class="p">)</span>
-</span><span id="Select-3179"><a href="#Select-3179"><span class="linenos">3179</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Select-3180"><a href="#Select-3180"><span class="linenos">3180</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="Select-3181"><a href="#Select-3181"><span class="linenos">3181</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-3182"><a href="#Select-3182"><span class="linenos">3182</span></a>
-</span><span id="Select-3183"><a href="#Select-3183"><span class="linenos">3183</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
-</span><span id="Select-3184"><a href="#Select-3184"><span class="linenos">3184</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-3185"><a href="#Select-3185"><span class="linenos">3185</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-3186"><a href="#Select-3186"><span class="linenos">3186</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="Select-3187"><a href="#Select-3187"><span class="linenos">3187</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-3188"><a href="#Select-3188"><span class="linenos">3188</span></a> <span class="p">)</span>
-</span><span id="Select-3189"><a href="#Select-3189"><span class="linenos">3189</span></a>
-</span><span id="Select-3190"><a href="#Select-3190"><span class="linenos">3190</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-3191"><a href="#Select-3191"><span class="linenos">3191</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-3192"><a href="#Select-3192"><span class="linenos">3192</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="Select-3022"><a href="#Select-3022"><span class="linenos">3022</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
+</span><span id="Select-3023"><a href="#Select-3023"><span class="linenos">3023</span></a> <span class="n">method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span>
+</span><span id="Select-3024"><a href="#Select-3024"><span class="linenos">3024</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-3025"><a href="#Select-3025"><span class="linenos">3025</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-3026"><a href="#Select-3026"><span class="linenos">3026</span></a>
+</span><span id="Select-3027"><a href="#Select-3027"><span class="linenos">3027</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="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-3028"><a href="#Select-3028"><span class="linenos">3028</span></a>
+</span><span id="Select-3029"><a href="#Select-3029"><span class="linenos">3029</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="Select-3030"><a href="#Select-3030"><span class="linenos">3030</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Select-3031"><a href="#Select-3031"><span class="linenos">3031</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Select-3032"><a href="#Select-3032"><span class="linenos">3032</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-3033"><a href="#Select-3033"><span class="linenos">3033</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Select-3034"><a href="#Select-3034"><span class="linenos">3034</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-3035"><a href="#Select-3035"><span class="linenos">3035</span></a>
+</span><span id="Select-3036"><a href="#Select-3036"><span class="linenos">3036</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
+</span><span id="Select-3037"><a href="#Select-3037"><span class="linenos">3037</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_list</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-3038"><a href="#Select-3038"><span class="linenos">3038</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-3039"><a href="#Select-3039"><span class="linenos">3039</span></a>
+</span><span id="Select-3040"><a href="#Select-3040"><span class="linenos">3040</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Select-3041"><a href="#Select-3041"><span class="linenos">3041</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-3042"><a href="#Select-3042"><span class="linenos">3042</span></a> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
+</span><span id="Select-3043"><a href="#Select-3043"><span class="linenos">3043</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
+</span><span id="Select-3044"><a href="#Select-3044"><span class="linenos">3044</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-3045"><a href="#Select-3045"><span class="linenos">3045</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-3046"><a href="#Select-3046"><span class="linenos">3046</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-3047"><a href="#Select-3047"><span class="linenos">3047</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="Select-3048"><a href="#Select-3048"><span class="linenos">3048</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3049"><a href="#Select-3049"><span class="linenos">3049</span></a> <span class="p">)</span>
+</span><span id="Select-3050"><a href="#Select-3050"><span class="linenos">3050</span></a>
+</span><span id="Select-3051"><a href="#Select-3051"><span class="linenos">3051</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
+</span><span id="Select-3052"><a href="#Select-3052"><span class="linenos">3052</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-3053"><a href="#Select-3053"><span class="linenos">3053</span></a>
+</span><span id="Select-3054"><a href="#Select-3054"><span class="linenos">3054</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-3055"><a href="#Select-3055"><span class="linenos">3055</span></a> <span class="n">join</span><span class="p">,</span>
+</span><span id="Select-3056"><a href="#Select-3056"><span class="linenos">3056</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3057"><a href="#Select-3057"><span class="linenos">3057</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-3058"><a href="#Select-3058"><span class="linenos">3058</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-3059"><a href="#Select-3059"><span class="linenos">3059</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-3060"><a href="#Select-3060"><span class="linenos">3060</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3061"><a href="#Select-3061"><span class="linenos">3061</span></a> <span class="p">)</span>
+</span><span id="Select-3062"><a href="#Select-3062"><span class="linenos">3062</span></a>
+</span><span id="Select-3063"><a href="#Select-3063"><span class="linenos">3063</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="Select-3064"><a href="#Select-3064"><span class="linenos">3064</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3065"><a href="#Select-3065"><span class="linenos">3065</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-3066"><a href="#Select-3066"><span class="linenos">3066</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-3067"><a href="#Select-3067"><span class="linenos">3067</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-3068"><a href="#Select-3068"><span class="linenos">3068</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-3069"><a href="#Select-3069"><span class="linenos">3069</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3070"><a href="#Select-3070"><span class="linenos">3070</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-3071"><a href="#Select-3071"><span class="linenos">3071</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-3072"><a href="#Select-3072"><span class="linenos">3072</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Select-3073"><a href="#Select-3073"><span class="linenos">3073</span></a>
+</span><span id="Select-3074"><a href="#Select-3074"><span class="linenos">3074</span></a><span class="sd"> Example:</span>
+</span><span id="Select-3075"><a href="#Select-3075"><span class="linenos">3075</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-3076"><a href="#Select-3076"><span class="linenos">3076</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-3077"><a href="#Select-3077"><span class="linenos">3077</span></a>
+</span><span id="Select-3078"><a href="#Select-3078"><span class="linenos">3078</span></a><span class="sd"> Args:</span>
+</span><span id="Select-3079"><a href="#Select-3079"><span class="linenos">3079</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-3080"><a href="#Select-3080"><span class="linenos">3080</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-3081"><a href="#Select-3081"><span class="linenos">3081</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select-3082"><a href="#Select-3082"><span class="linenos">3082</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select-3083"><a href="#Select-3083"><span class="linenos">3083</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select-3084"><a href="#Select-3084"><span class="linenos">3084</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select-3085"><a href="#Select-3085"><span class="linenos">3085</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-3086"><a href="#Select-3086"><span class="linenos">3086</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-3087"><a href="#Select-3087"><span class="linenos">3087</span></a>
+</span><span id="Select-3088"><a href="#Select-3088"><span class="linenos">3088</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3089"><a href="#Select-3089"><span class="linenos">3089</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-3090"><a href="#Select-3090"><span class="linenos">3090</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3091"><a href="#Select-3091"><span class="linenos">3091</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select-3092"><a href="#Select-3092"><span class="linenos">3092</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-3093"><a href="#Select-3093"><span class="linenos">3093</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3094"><a href="#Select-3094"><span class="linenos">3094</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-3095"><a href="#Select-3095"><span class="linenos">3095</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-3096"><a href="#Select-3096"><span class="linenos">3096</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Select-3097"><a href="#Select-3097"><span class="linenos">3097</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-3098"><a href="#Select-3098"><span class="linenos">3098</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-3099"><a href="#Select-3099"><span class="linenos">3099</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3100"><a href="#Select-3100"><span class="linenos">3100</span></a> <span class="p">)</span>
+</span><span id="Select-3101"><a href="#Select-3101"><span class="linenos">3101</span></a>
+</span><span id="Select-3102"><a href="#Select-3102"><span class="linenos">3102</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span>
+</span><span id="Select-3103"><a href="#Select-3103"><span class="linenos">3103</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3104"><a href="#Select-3104"><span class="linenos">3104</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-3105"><a href="#Select-3105"><span class="linenos">3105</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-3106"><a href="#Select-3106"><span class="linenos">3106</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-3107"><a href="#Select-3107"><span class="linenos">3107</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-3108"><a href="#Select-3108"><span class="linenos">3108</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3109"><a href="#Select-3109"><span class="linenos">3109</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-3110"><a href="#Select-3110"><span class="linenos">3110</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-3111"><a href="#Select-3111"><span class="linenos">3111</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
+</span><span id="Select-3112"><a href="#Select-3112"><span class="linenos">3112</span></a>
+</span><span id="Select-3113"><a href="#Select-3113"><span class="linenos">3113</span></a><span class="sd"> Example:</span>
+</span><span id="Select-3114"><a href="#Select-3114"><span class="linenos">3114</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-3115"><a href="#Select-3115"><span class="linenos">3115</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-3116"><a href="#Select-3116"><span class="linenos">3116</span></a>
+</span><span id="Select-3117"><a href="#Select-3117"><span class="linenos">3117</span></a><span class="sd"> Args:</span>
+</span><span id="Select-3118"><a href="#Select-3118"><span class="linenos">3118</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-3119"><a href="#Select-3119"><span class="linenos">3119</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-3120"><a href="#Select-3120"><span class="linenos">3120</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select-3121"><a href="#Select-3121"><span class="linenos">3121</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select-3122"><a href="#Select-3122"><span class="linenos">3122</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select-3123"><a href="#Select-3123"><span class="linenos">3123</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select-3124"><a href="#Select-3124"><span class="linenos">3124</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-3125"><a href="#Select-3125"><span class="linenos">3125</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-3126"><a href="#Select-3126"><span class="linenos">3126</span></a>
+</span><span id="Select-3127"><a href="#Select-3127"><span class="linenos">3127</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3128"><a href="#Select-3128"><span class="linenos">3128</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select-3129"><a href="#Select-3129"><span class="linenos">3129</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3130"><a href="#Select-3130"><span class="linenos">3130</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select-3131"><a href="#Select-3131"><span class="linenos">3131</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-3132"><a href="#Select-3132"><span class="linenos">3132</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3133"><a href="#Select-3133"><span class="linenos">3133</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-3134"><a href="#Select-3134"><span class="linenos">3134</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-3135"><a href="#Select-3135"><span class="linenos">3135</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
+</span><span id="Select-3136"><a href="#Select-3136"><span class="linenos">3136</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-3137"><a href="#Select-3137"><span class="linenos">3137</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-3138"><a href="#Select-3138"><span class="linenos">3138</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3139"><a href="#Select-3139"><span class="linenos">3139</span></a> <span class="p">)</span>
+</span><span id="Select-3140"><a href="#Select-3140"><span class="linenos">3140</span></a>
+</span><span id="Select-3141"><a href="#Select-3141"><span class="linenos">3141</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span>
+</span><span id="Select-3142"><a href="#Select-3142"><span class="linenos">3142</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3143"><a href="#Select-3143"><span class="linenos">3143</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-3144"><a href="#Select-3144"><span class="linenos">3144</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-3145"><a href="#Select-3145"><span class="linenos">3145</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-3146"><a href="#Select-3146"><span class="linenos">3146</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-3147"><a href="#Select-3147"><span class="linenos">3147</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3148"><a href="#Select-3148"><span class="linenos">3148</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-3149"><a href="#Select-3149"><span class="linenos">3149</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-3150"><a href="#Select-3150"><span class="linenos">3150</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-3151"><a href="#Select-3151"><span class="linenos">3151</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3152"><a href="#Select-3152"><span class="linenos">3152</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-3153"><a href="#Select-3153"><span class="linenos">3153</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-3154"><a href="#Select-3154"><span class="linenos">3154</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="Select-3155"><a href="#Select-3155"><span class="linenos">3155</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-3156"><a href="#Select-3156"><span class="linenos">3156</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-3157"><a href="#Select-3157"><span class="linenos">3157</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3158"><a href="#Select-3158"><span class="linenos">3158</span></a> <span class="p">)</span>
+</span><span id="Select-3159"><a href="#Select-3159"><span class="linenos">3159</span></a>
+</span><span id="Select-3160"><a href="#Select-3160"><span class="linenos">3160</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span>
+</span><span id="Select-3161"><a href="#Select-3161"><span class="linenos">3161</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3162"><a href="#Select-3162"><span class="linenos">3162</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select-3163"><a href="#Select-3163"><span class="linenos">3163</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-3164"><a href="#Select-3164"><span class="linenos">3164</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-3165"><a href="#Select-3165"><span class="linenos">3165</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-3166"><a href="#Select-3166"><span class="linenos">3166</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3167"><a href="#Select-3167"><span class="linenos">3167</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-3168"><a href="#Select-3168"><span class="linenos">3168</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select-3169"><a href="#Select-3169"><span class="linenos">3169</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-3170"><a href="#Select-3170"><span class="linenos">3170</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3171"><a href="#Select-3171"><span class="linenos">3171</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-3172"><a href="#Select-3172"><span class="linenos">3172</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-3173"><a href="#Select-3173"><span class="linenos">3173</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
+</span><span id="Select-3174"><a href="#Select-3174"><span class="linenos">3174</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-3175"><a href="#Select-3175"><span class="linenos">3175</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-3176"><a href="#Select-3176"><span class="linenos">3176</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3177"><a href="#Select-3177"><span class="linenos">3177</span></a> <span class="p">)</span>
+</span><span id="Select-3178"><a href="#Select-3178"><span class="linenos">3178</span></a>
+</span><span id="Select-3179"><a href="#Select-3179"><span class="linenos">3179</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span>
+</span><span id="Select-3180"><a href="#Select-3180"><span class="linenos">3180</span></a> <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">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="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><span id="Select-3181"><a href="#Select-3181"><span class="linenos">3181</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-3182"><a href="#Select-3182"><span class="linenos">3182</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-3183"><a href="#Select-3183"><span class="linenos">3183</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select-3184"><a href="#Select-3184"><span class="linenos">3184</span></a>
+</span><span id="Select-3185"><a href="#Select-3185"><span class="linenos">3185</span></a><span class="sd"> Example:</span>
+</span><span id="Select-3186"><a href="#Select-3186"><span class="linenos">3186</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
+</span><span id="Select-3187"><a href="#Select-3187"><span class="linenos">3187</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
+</span><span id="Select-3188"><a href="#Select-3188"><span class="linenos">3188</span></a>
+</span><span id="Select-3189"><a href="#Select-3189"><span class="linenos">3189</span></a><span class="sd"> Args:</span>
+</span><span id="Select-3190"><a href="#Select-3190"><span class="linenos">3190</span></a><span class="sd"> ons: the expressions to distinct on</span>
+</span><span id="Select-3191"><a href="#Select-3191"><span class="linenos">3191</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
+</span><span id="Select-3192"><a href="#Select-3192"><span class="linenos">3192</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
</span><span id="Select-3193"><a href="#Select-3193"><span class="linenos">3193</span></a>
-</span><span id="Select-3194"><a href="#Select-3194"><span class="linenos">3194</span></a><span class="sd"> Examples:</span>
-</span><span id="Select-3195"><a href="#Select-3195"><span class="linenos">3195</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-3196"><a href="#Select-3196"><span class="linenos">3196</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
-</span><span id="Select-3197"><a href="#Select-3197"><span class="linenos">3197</span></a>
-</span><span id="Select-3198"><a href="#Select-3198"><span class="linenos">3198</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-3199"><a href="#Select-3199"><span class="linenos">3199</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
-</span><span id="Select-3200"><a href="#Select-3200"><span class="linenos">3200</span></a>
-</span><span id="Select-3201"><a href="#Select-3201"><span class="linenos">3201</span></a><span class="sd"> Args:</span>
-</span><span id="Select-3202"><a href="#Select-3202"><span class="linenos">3202</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-3203"><a href="#Select-3203"><span class="linenos">3203</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-3204"><a href="#Select-3204"><span class="linenos">3204</span></a>
-</span><span id="Select-3205"><a href="#Select-3205"><span class="linenos">3205</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-3206"><a href="#Select-3206"><span class="linenos">3206</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Select-3207"><a href="#Select-3207"><span class="linenos">3207</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-3208"><a href="#Select-3208"><span class="linenos">3208</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-3209"><a href="#Select-3209"><span class="linenos">3209</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</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-3210"><a href="#Select-3210"><span class="linenos">3210</span></a>
-</span><span id="Select-3211"><a href="#Select-3211"><span class="linenos">3211</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="Select-3194"><a href="#Select-3194"><span class="linenos">3194</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3195"><a href="#Select-3195"><span class="linenos">3195</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-3196"><a href="#Select-3196"><span class="linenos">3196</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3197"><a href="#Select-3197"><span class="linenos">3197</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-3198"><a href="#Select-3198"><span class="linenos">3198</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="k">if</span> <span class="n">on</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-3199"><a href="#Select-3199"><span class="linenos">3199</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-3200"><a href="#Select-3200"><span class="linenos">3200</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="Select-3201"><a href="#Select-3201"><span class="linenos">3201</span></a>
+</span><span id="Select-3202"><a href="#Select-3202"><span class="linenos">3202</span></a> <span class="k">def</span> <span class="nf">ctas</span><span class="p">(</span>
+</span><span id="Select-3203"><a href="#Select-3203"><span class="linenos">3203</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-3204"><a href="#Select-3204"><span class="linenos">3204</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Select-3205"><a href="#Select-3205"><span class="linenos">3205</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-3206"><a href="#Select-3206"><span class="linenos">3206</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-3207"><a href="#Select-3207"><span class="linenos">3207</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-3208"><a href="#Select-3208"><span class="linenos">3208</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3209"><a href="#Select-3209"><span class="linenos">3209</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Create</span><span class="p">:</span>
+</span><span id="Select-3210"><a href="#Select-3210"><span class="linenos">3210</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-3211"><a href="#Select-3211"><span class="linenos">3211</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
</span><span id="Select-3212"><a href="#Select-3212"><span class="linenos">3212</span></a>
-</span><span id="Select-3213"><a href="#Select-3213"><span class="linenos">3213</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 class="o">*</span><span class="n">hints</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="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-3214"><a href="#Select-3214"><span class="linenos">3214</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-3215"><a href="#Select-3215"><span class="linenos">3215</span></a><span class="sd"> Set hints for this expression.</span>
+</span><span id="Select-3213"><a href="#Select-3213"><span class="linenos">3213</span></a><span class="sd"> Example:</span>
+</span><span id="Select-3214"><a href="#Select-3214"><span class="linenos">3214</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-3215"><a href="#Select-3215"><span class="linenos">3215</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
</span><span id="Select-3216"><a href="#Select-3216"><span class="linenos">3216</span></a>
-</span><span id="Select-3217"><a href="#Select-3217"><span class="linenos">3217</span></a><span class="sd"> Examples:</span>
-</span><span id="Select-3218"><a href="#Select-3218"><span class="linenos">3218</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).hint(&quot;BROADCAST(y)&quot;).sql(dialect=&quot;spark&quot;)</span>
-</span><span id="Select-3219"><a href="#Select-3219"><span class="linenos">3219</span></a><span class="sd"> &#39;SELECT /*+ BROADCAST(y) */ x FROM tbl&#39;</span>
-</span><span id="Select-3220"><a href="#Select-3220"><span class="linenos">3220</span></a>
-</span><span id="Select-3221"><a href="#Select-3221"><span class="linenos">3221</span></a><span class="sd"> Args:</span>
-</span><span id="Select-3222"><a href="#Select-3222"><span class="linenos">3222</span></a><span class="sd"> hints: The SQL code strings to parse as the hints.</span>
-</span><span id="Select-3223"><a href="#Select-3223"><span class="linenos">3223</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-3224"><a href="#Select-3224"><span class="linenos">3224</span></a><span class="sd"> dialect: The dialect used to parse the hints.</span>
-</span><span id="Select-3225"><a href="#Select-3225"><span class="linenos">3225</span></a><span class="sd"> copy: If `False`, modify this expression instance in-place.</span>
-</span><span id="Select-3226"><a href="#Select-3226"><span class="linenos">3226</span></a>
-</span><span id="Select-3227"><a href="#Select-3227"><span class="linenos">3227</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-3228"><a href="#Select-3228"><span class="linenos">3228</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Select-3229"><a href="#Select-3229"><span class="linenos">3229</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-3230"><a href="#Select-3230"><span class="linenos">3230</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-3231"><a href="#Select-3231"><span class="linenos">3231</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Select-3232"><a href="#Select-3232"><span class="linenos">3232</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">,</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="n">maybe_parse</span><span class="p">(</span><span class="n">h</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="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span>
-</span><span id="Select-3233"><a href="#Select-3233"><span class="linenos">3233</span></a> <span class="p">)</span>
-</span><span id="Select-3234"><a href="#Select-3234"><span class="linenos">3234</span></a>
-</span><span id="Select-3235"><a href="#Select-3235"><span class="linenos">3235</span></a> <span class="k">return</span> <span class="n">inst</span>
-</span><span id="Select-3236"><a href="#Select-3236"><span class="linenos">3236</span></a>
-</span><span id="Select-3237"><a href="#Select-3237"><span class="linenos">3237</span></a> <span class="nd">@property</span>
-</span><span id="Select-3238"><a href="#Select-3238"><span class="linenos">3238</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-3239"><a href="#Select-3239"><span class="linenos">3239</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-3240"><a href="#Select-3240"><span class="linenos">3240</span></a>
-</span><span id="Select-3241"><a href="#Select-3241"><span class="linenos">3241</span></a> <span class="nd">@property</span>
-</span><span id="Select-3242"><a href="#Select-3242"><span class="linenos">3242</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-3243"><a href="#Select-3243"><span class="linenos">3243</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-3244"><a href="#Select-3244"><span class="linenos">3244</span></a>
-</span><span id="Select-3245"><a href="#Select-3245"><span class="linenos">3245</span></a> <span class="nd">@property</span>
-</span><span id="Select-3246"><a href="#Select-3246"><span class="linenos">3246</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-3247"><a href="#Select-3247"><span class="linenos">3247</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-3217"><a href="#Select-3217"><span class="linenos">3217</span></a><span class="sd"> Args:</span>
+</span><span id="Select-3218"><a href="#Select-3218"><span class="linenos">3218</span></a><span class="sd"> table: the SQL code string to parse as the table name.</span>
+</span><span id="Select-3219"><a href="#Select-3219"><span class="linenos">3219</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-3220"><a href="#Select-3220"><span class="linenos">3220</span></a><span class="sd"> properties: an optional mapping of table properties</span>
+</span><span id="Select-3221"><a href="#Select-3221"><span class="linenos">3221</span></a><span class="sd"> dialect: the dialect used to parse the input table.</span>
+</span><span id="Select-3222"><a href="#Select-3222"><span class="linenos">3222</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-3223"><a href="#Select-3223"><span class="linenos">3223</span></a><span class="sd"> opts: other options to use to parse the input table.</span>
+</span><span id="Select-3224"><a href="#Select-3224"><span class="linenos">3224</span></a>
+</span><span id="Select-3225"><a href="#Select-3225"><span class="linenos">3225</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3226"><a href="#Select-3226"><span class="linenos">3226</span></a><span class="sd"> The new Create expression.</span>
+</span><span id="Select-3227"><a href="#Select-3227"><span class="linenos">3227</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3228"><a href="#Select-3228"><span class="linenos">3228</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-3229"><a href="#Select-3229"><span class="linenos">3229</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-3230"><a href="#Select-3230"><span class="linenos">3230</span></a> <span class="n">table</span><span class="p">,</span>
+</span><span id="Select-3231"><a href="#Select-3231"><span class="linenos">3231</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="Select-3232"><a href="#Select-3232"><span class="linenos">3232</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-3233"><a href="#Select-3233"><span class="linenos">3233</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-3234"><a href="#Select-3234"><span class="linenos">3234</span></a> <span class="p">)</span>
+</span><span id="Select-3235"><a href="#Select-3235"><span class="linenos">3235</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Select-3236"><a href="#Select-3236"><span class="linenos">3236</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="Select-3237"><a href="#Select-3237"><span class="linenos">3237</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-3238"><a href="#Select-3238"><span class="linenos">3238</span></a>
+</span><span id="Select-3239"><a href="#Select-3239"><span class="linenos">3239</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
+</span><span id="Select-3240"><a href="#Select-3240"><span class="linenos">3240</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-3241"><a href="#Select-3241"><span class="linenos">3241</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-3242"><a href="#Select-3242"><span class="linenos">3242</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="Select-3243"><a href="#Select-3243"><span class="linenos">3243</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-3244"><a href="#Select-3244"><span class="linenos">3244</span></a> <span class="p">)</span>
+</span><span id="Select-3245"><a href="#Select-3245"><span class="linenos">3245</span></a>
+</span><span id="Select-3246"><a href="#Select-3246"><span class="linenos">3246</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-3247"><a href="#Select-3247"><span class="linenos">3247</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-3248"><a href="#Select-3248"><span class="linenos">3248</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="Select-3249"><a href="#Select-3249"><span class="linenos">3249</span></a>
+</span><span id="Select-3250"><a href="#Select-3250"><span class="linenos">3250</span></a><span class="sd"> Examples:</span>
+</span><span id="Select-3251"><a href="#Select-3251"><span class="linenos">3251</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-3252"><a href="#Select-3252"><span class="linenos">3252</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
+</span><span id="Select-3253"><a href="#Select-3253"><span class="linenos">3253</span></a>
+</span><span id="Select-3254"><a href="#Select-3254"><span class="linenos">3254</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-3255"><a href="#Select-3255"><span class="linenos">3255</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="Select-3256"><a href="#Select-3256"><span class="linenos">3256</span></a>
+</span><span id="Select-3257"><a href="#Select-3257"><span class="linenos">3257</span></a><span class="sd"> Args:</span>
+</span><span id="Select-3258"><a href="#Select-3258"><span class="linenos">3258</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-3259"><a href="#Select-3259"><span class="linenos">3259</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-3260"><a href="#Select-3260"><span class="linenos">3260</span></a>
+</span><span id="Select-3261"><a href="#Select-3261"><span class="linenos">3261</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3262"><a href="#Select-3262"><span class="linenos">3262</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Select-3263"><a href="#Select-3263"><span class="linenos">3263</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3264"><a href="#Select-3264"><span class="linenos">3264</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-3265"><a href="#Select-3265"><span class="linenos">3265</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</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-3266"><a href="#Select-3266"><span class="linenos">3266</span></a>
+</span><span id="Select-3267"><a href="#Select-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="Select-3268"><a href="#Select-3268"><span class="linenos">3268</span></a>
+</span><span id="Select-3269"><a href="#Select-3269"><span class="linenos">3269</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 class="o">*</span><span class="n">hints</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="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-3270"><a href="#Select-3270"><span class="linenos">3270</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-3271"><a href="#Select-3271"><span class="linenos">3271</span></a><span class="sd"> Set hints for this expression.</span>
+</span><span id="Select-3272"><a href="#Select-3272"><span class="linenos">3272</span></a>
+</span><span id="Select-3273"><a href="#Select-3273"><span class="linenos">3273</span></a><span class="sd"> Examples:</span>
+</span><span id="Select-3274"><a href="#Select-3274"><span class="linenos">3274</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).hint(&quot;BROADCAST(y)&quot;).sql(dialect=&quot;spark&quot;)</span>
+</span><span id="Select-3275"><a href="#Select-3275"><span class="linenos">3275</span></a><span class="sd"> &#39;SELECT /*+ BROADCAST(y) */ x FROM tbl&#39;</span>
+</span><span id="Select-3276"><a href="#Select-3276"><span class="linenos">3276</span></a>
+</span><span id="Select-3277"><a href="#Select-3277"><span class="linenos">3277</span></a><span class="sd"> Args:</span>
+</span><span id="Select-3278"><a href="#Select-3278"><span class="linenos">3278</span></a><span class="sd"> hints: The SQL code strings to parse as the hints.</span>
+</span><span id="Select-3279"><a href="#Select-3279"><span class="linenos">3279</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-3280"><a href="#Select-3280"><span class="linenos">3280</span></a><span class="sd"> dialect: The dialect used to parse the hints.</span>
+</span><span id="Select-3281"><a href="#Select-3281"><span class="linenos">3281</span></a><span class="sd"> copy: If `False`, modify this expression instance in-place.</span>
+</span><span id="Select-3282"><a href="#Select-3282"><span class="linenos">3282</span></a>
+</span><span id="Select-3283"><a href="#Select-3283"><span class="linenos">3283</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-3284"><a href="#Select-3284"><span class="linenos">3284</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Select-3285"><a href="#Select-3285"><span class="linenos">3285</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-3286"><a href="#Select-3286"><span class="linenos">3286</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-3287"><a href="#Select-3287"><span class="linenos">3287</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Select-3288"><a href="#Select-3288"><span class="linenos">3288</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">,</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="n">maybe_parse</span><span class="p">(</span><span class="n">h</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="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span>
+</span><span id="Select-3289"><a href="#Select-3289"><span class="linenos">3289</span></a> <span class="p">)</span>
+</span><span id="Select-3290"><a href="#Select-3290"><span class="linenos">3290</span></a>
+</span><span id="Select-3291"><a href="#Select-3291"><span class="linenos">3291</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="Select-3292"><a href="#Select-3292"><span class="linenos">3292</span></a>
+</span><span id="Select-3293"><a href="#Select-3293"><span class="linenos">3293</span></a> <span class="nd">@property</span>
+</span><span id="Select-3294"><a href="#Select-3294"><span class="linenos">3294</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-3295"><a href="#Select-3295"><span class="linenos">3295</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-3296"><a href="#Select-3296"><span class="linenos">3296</span></a>
+</span><span id="Select-3297"><a href="#Select-3297"><span class="linenos">3297</span></a> <span class="nd">@property</span>
+</span><span id="Select-3298"><a href="#Select-3298"><span class="linenos">3298</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-3299"><a href="#Select-3299"><span class="linenos">3299</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-3300"><a href="#Select-3300"><span class="linenos">3300</span></a>
+</span><span id="Select-3301"><a href="#Select-3301"><span class="linenos">3301</span></a> <span class="nd">@property</span>
+</span><span id="Select-3302"><a href="#Select-3302"><span class="linenos">3302</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-3303"><a href="#Select-3303"><span class="linenos">3303</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
</span></pre></div>
@@ -34410,7 +35586,7 @@ Otherwise, this resets the expressions.</li>
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Select.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Select.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;kind&#39;: False, &#39;expressions&#39;: False, &#39;hint&#39;: False, &#39;distinct&#39;: False, &#39;into&#39;: False, &#39;from&#39;: False, &#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Select.arg_types-view-value"></label><span class="default_value">{&#39;with&#39;: False, &#39;kind&#39;: False, &#39;expressions&#39;: False, &#39;hint&#39;: False, &#39;distinct&#39;: False, &#39;into&#39;: False, &#39;from&#39;: False, &#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;connect&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
</div>
@@ -34430,37 +35606,37 @@ 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_-2571"><a href="#Select.from_-2571"><span class="linenos">2571</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span>
-</span><span id="Select.from_-2572"><a href="#Select.from_-2572"><span class="linenos">2572</span></a> <span class="bp">self</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">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="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><span id="Select.from_-2573"><a href="#Select.from_-2573"><span class="linenos">2573</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.from_-2574"><a href="#Select.from_-2574"><span class="linenos">2574</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.from_-2575"><a href="#Select.from_-2575"><span class="linenos">2575</span></a><span class="sd"> Set the FROM expression.</span>
-</span><span id="Select.from_-2576"><a href="#Select.from_-2576"><span class="linenos">2576</span></a>
-</span><span id="Select.from_-2577"><a href="#Select.from_-2577"><span class="linenos">2577</span></a><span class="sd"> Example:</span>
-</span><span id="Select.from_-2578"><a href="#Select.from_-2578"><span class="linenos">2578</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
-</span><span id="Select.from_-2579"><a href="#Select.from_-2579"><span class="linenos">2579</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
-</span><span id="Select.from_-2580"><a href="#Select.from_-2580"><span class="linenos">2580</span></a>
-</span><span id="Select.from_-2581"><a href="#Select.from_-2581"><span class="linenos">2581</span></a><span class="sd"> Args:</span>
-</span><span id="Select.from_-2582"><a href="#Select.from_-2582"><span class="linenos">2582</span></a><span class="sd"> expression : the SQL code strings to parse.</span>
-</span><span id="Select.from_-2583"><a href="#Select.from_-2583"><span class="linenos">2583</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
-</span><span id="Select.from_-2584"><a href="#Select.from_-2584"><span class="linenos">2584</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
-</span><span id="Select.from_-2585"><a href="#Select.from_-2585"><span class="linenos">2585</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.from_-2586"><a href="#Select.from_-2586"><span class="linenos">2586</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.from_-2587"><a href="#Select.from_-2587"><span class="linenos">2587</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.from_-2588"><a href="#Select.from_-2588"><span class="linenos">2588</span></a>
-</span><span id="Select.from_-2589"><a href="#Select.from_-2589"><span class="linenos">2589</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.from_-2590"><a href="#Select.from_-2590"><span class="linenos">2590</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.from_-2591"><a href="#Select.from_-2591"><span class="linenos">2591</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.from_-2592"><a href="#Select.from_-2592"><span class="linenos">2592</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select.from_-2593"><a href="#Select.from_-2593"><span class="linenos">2593</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select.from_-2594"><a href="#Select.from_-2594"><span class="linenos">2594</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_-2595"><a href="#Select.from_-2595"><span class="linenos">2595</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_-2596"><a href="#Select.from_-2596"><span class="linenos">2596</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_-2597"><a href="#Select.from_-2597"><span class="linenos">2597</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_-2598"><a href="#Select.from_-2598"><span class="linenos">2598</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_-2599"><a href="#Select.from_-2599"><span class="linenos">2599</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_-2600"><a href="#Select.from_-2600"><span class="linenos">2600</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.from_-2601"><a href="#Select.from_-2601"><span class="linenos">2601</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.from_-2627"><a href="#Select.from_-2627"><span class="linenos">2627</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span>
+</span><span id="Select.from_-2628"><a href="#Select.from_-2628"><span class="linenos">2628</span></a> <span class="bp">self</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">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="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><span id="Select.from_-2629"><a href="#Select.from_-2629"><span class="linenos">2629</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.from_-2630"><a href="#Select.from_-2630"><span class="linenos">2630</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.from_-2631"><a href="#Select.from_-2631"><span class="linenos">2631</span></a><span class="sd"> Set the FROM expression.</span>
+</span><span id="Select.from_-2632"><a href="#Select.from_-2632"><span class="linenos">2632</span></a>
+</span><span id="Select.from_-2633"><a href="#Select.from_-2633"><span class="linenos">2633</span></a><span class="sd"> Example:</span>
+</span><span id="Select.from_-2634"><a href="#Select.from_-2634"><span class="linenos">2634</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
+</span><span id="Select.from_-2635"><a href="#Select.from_-2635"><span class="linenos">2635</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
+</span><span id="Select.from_-2636"><a href="#Select.from_-2636"><span class="linenos">2636</span></a>
+</span><span id="Select.from_-2637"><a href="#Select.from_-2637"><span class="linenos">2637</span></a><span class="sd"> Args:</span>
+</span><span id="Select.from_-2638"><a href="#Select.from_-2638"><span class="linenos">2638</span></a><span class="sd"> expression : the SQL code strings to parse.</span>
+</span><span id="Select.from_-2639"><a href="#Select.from_-2639"><span class="linenos">2639</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
+</span><span id="Select.from_-2640"><a href="#Select.from_-2640"><span class="linenos">2640</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
+</span><span id="Select.from_-2641"><a href="#Select.from_-2641"><span class="linenos">2641</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.from_-2642"><a href="#Select.from_-2642"><span class="linenos">2642</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.from_-2643"><a href="#Select.from_-2643"><span class="linenos">2643</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.from_-2644"><a href="#Select.from_-2644"><span class="linenos">2644</span></a>
+</span><span id="Select.from_-2645"><a href="#Select.from_-2645"><span class="linenos">2645</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.from_-2646"><a href="#Select.from_-2646"><span class="linenos">2646</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.from_-2647"><a href="#Select.from_-2647"><span class="linenos">2647</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.from_-2648"><a href="#Select.from_-2648"><span class="linenos">2648</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select.from_-2649"><a href="#Select.from_-2649"><span class="linenos">2649</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select.from_-2650"><a href="#Select.from_-2650"><span class="linenos">2650</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_-2651"><a href="#Select.from_-2651"><span class="linenos">2651</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_-2652"><a href="#Select.from_-2652"><span class="linenos">2652</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_-2653"><a href="#Select.from_-2653"><span class="linenos">2653</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_-2654"><a href="#Select.from_-2654"><span class="linenos">2654</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_-2655"><a href="#Select.from_-2655"><span class="linenos">2655</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_-2656"><a href="#Select.from_-2656"><span class="linenos">2656</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.from_-2657"><a href="#Select.from_-2657"><span class="linenos">2657</span></a> <span class="p">)</span>
</span></pre></div>
@@ -34507,49 +35683,49 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Select.group_by"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.group_by-2603"><a href="#Select.group_by-2603"><span class="linenos">2603</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span>
-</span><span id="Select.group_by-2604"><a href="#Select.group_by-2604"><span class="linenos">2604</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.group_by-2605"><a href="#Select.group_by-2605"><span class="linenos">2605</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.group_by-2606"><a href="#Select.group_by-2606"><span class="linenos">2606</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.group_by-2607"><a href="#Select.group_by-2607"><span class="linenos">2607</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.group_by-2608"><a href="#Select.group_by-2608"><span class="linenos">2608</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.group_by-2609"><a href="#Select.group_by-2609"><span class="linenos">2609</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.group_by-2610"><a href="#Select.group_by-2610"><span class="linenos">2610</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.group_by-2611"><a href="#Select.group_by-2611"><span class="linenos">2611</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.group_by-2612"><a href="#Select.group_by-2612"><span class="linenos">2612</span></a><span class="sd"> Set the GROUP BY expression.</span>
-</span><span id="Select.group_by-2613"><a href="#Select.group_by-2613"><span class="linenos">2613</span></a>
-</span><span id="Select.group_by-2614"><a href="#Select.group_by-2614"><span class="linenos">2614</span></a><span class="sd"> Example:</span>
-</span><span id="Select.group_by-2615"><a href="#Select.group_by-2615"><span class="linenos">2615</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-2616"><a href="#Select.group_by-2616"><span class="linenos">2616</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
-</span><span id="Select.group_by-2617"><a href="#Select.group_by-2617"><span class="linenos">2617</span></a>
-</span><span id="Select.group_by-2618"><a href="#Select.group_by-2618"><span class="linenos">2618</span></a><span class="sd"> Args:</span>
-</span><span id="Select.group_by-2619"><a href="#Select.group_by-2619"><span class="linenos">2619</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.group_by-2620"><a href="#Select.group_by-2620"><span class="linenos">2620</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.group_by-2621"><a href="#Select.group_by-2621"><span class="linenos">2621</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-2622"><a href="#Select.group_by-2622"><span class="linenos">2622</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-2623"><a href="#Select.group_by-2623"><span class="linenos">2623</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.group_by-2624"><a href="#Select.group_by-2624"><span class="linenos">2624</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
-</span><span id="Select.group_by-2625"><a href="#Select.group_by-2625"><span class="linenos">2625</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.group_by-2626"><a href="#Select.group_by-2626"><span class="linenos">2626</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.group_by-2627"><a href="#Select.group_by-2627"><span class="linenos">2627</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.group_by-2628"><a href="#Select.group_by-2628"><span class="linenos">2628</span></a>
-</span><span id="Select.group_by-2629"><a href="#Select.group_by-2629"><span class="linenos">2629</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.group_by-2630"><a href="#Select.group_by-2630"><span class="linenos">2630</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.group_by-2631"><a href="#Select.group_by-2631"><span class="linenos">2631</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.group_by-2632"><a href="#Select.group_by-2632"><span class="linenos">2632</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-2633"><a href="#Select.group_by-2633"><span class="linenos">2633</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-2634"><a href="#Select.group_by-2634"><span class="linenos">2634</span></a>
-</span><span id="Select.group_by-2635"><a href="#Select.group_by-2635"><span class="linenos">2635</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-2636"><a href="#Select.group_by-2636"><span class="linenos">2636</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.group_by-2637"><a href="#Select.group_by-2637"><span class="linenos">2637</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-2638"><a href="#Select.group_by-2638"><span class="linenos">2638</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-2639"><a href="#Select.group_by-2639"><span class="linenos">2639</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-2640"><a href="#Select.group_by-2640"><span class="linenos">2640</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-2641"><a href="#Select.group_by-2641"><span class="linenos">2641</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-2642"><a href="#Select.group_by-2642"><span class="linenos">2642</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-2643"><a href="#Select.group_by-2643"><span class="linenos">2643</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-2644"><a href="#Select.group_by-2644"><span class="linenos">2644</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.group_by-2645"><a href="#Select.group_by-2645"><span class="linenos">2645</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.group_by-2659"><a href="#Select.group_by-2659"><span class="linenos">2659</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span>
+</span><span id="Select.group_by-2660"><a href="#Select.group_by-2660"><span class="linenos">2660</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.group_by-2661"><a href="#Select.group_by-2661"><span class="linenos">2661</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.group_by-2662"><a href="#Select.group_by-2662"><span class="linenos">2662</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.group_by-2663"><a href="#Select.group_by-2663"><span class="linenos">2663</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.group_by-2664"><a href="#Select.group_by-2664"><span class="linenos">2664</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.group_by-2665"><a href="#Select.group_by-2665"><span class="linenos">2665</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.group_by-2666"><a href="#Select.group_by-2666"><span class="linenos">2666</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.group_by-2667"><a href="#Select.group_by-2667"><span class="linenos">2667</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.group_by-2668"><a href="#Select.group_by-2668"><span class="linenos">2668</span></a><span class="sd"> Set the GROUP BY expression.</span>
+</span><span id="Select.group_by-2669"><a href="#Select.group_by-2669"><span class="linenos">2669</span></a>
+</span><span id="Select.group_by-2670"><a href="#Select.group_by-2670"><span class="linenos">2670</span></a><span class="sd"> Example:</span>
+</span><span id="Select.group_by-2671"><a href="#Select.group_by-2671"><span class="linenos">2671</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-2672"><a href="#Select.group_by-2672"><span class="linenos">2672</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
+</span><span id="Select.group_by-2673"><a href="#Select.group_by-2673"><span class="linenos">2673</span></a>
+</span><span id="Select.group_by-2674"><a href="#Select.group_by-2674"><span class="linenos">2674</span></a><span class="sd"> Args:</span>
+</span><span id="Select.group_by-2675"><a href="#Select.group_by-2675"><span class="linenos">2675</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.group_by-2676"><a href="#Select.group_by-2676"><span class="linenos">2676</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.group_by-2677"><a href="#Select.group_by-2677"><span class="linenos">2677</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-2678"><a href="#Select.group_by-2678"><span class="linenos">2678</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-2679"><a href="#Select.group_by-2679"><span class="linenos">2679</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.group_by-2680"><a href="#Select.group_by-2680"><span class="linenos">2680</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
+</span><span id="Select.group_by-2681"><a href="#Select.group_by-2681"><span class="linenos">2681</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.group_by-2682"><a href="#Select.group_by-2682"><span class="linenos">2682</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.group_by-2683"><a href="#Select.group_by-2683"><span class="linenos">2683</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.group_by-2684"><a href="#Select.group_by-2684"><span class="linenos">2684</span></a>
+</span><span id="Select.group_by-2685"><a href="#Select.group_by-2685"><span class="linenos">2685</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.group_by-2686"><a href="#Select.group_by-2686"><span class="linenos">2686</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.group_by-2687"><a href="#Select.group_by-2687"><span class="linenos">2687</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.group_by-2688"><a href="#Select.group_by-2688"><span class="linenos">2688</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-2689"><a href="#Select.group_by-2689"><span class="linenos">2689</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-2690"><a href="#Select.group_by-2690"><span class="linenos">2690</span></a>
+</span><span id="Select.group_by-2691"><a href="#Select.group_by-2691"><span class="linenos">2691</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-2692"><a href="#Select.group_by-2692"><span class="linenos">2692</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.group_by-2693"><a href="#Select.group_by-2693"><span class="linenos">2693</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-2694"><a href="#Select.group_by-2694"><span class="linenos">2694</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-2695"><a href="#Select.group_by-2695"><span class="linenos">2695</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-2696"><a href="#Select.group_by-2696"><span class="linenos">2696</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-2697"><a href="#Select.group_by-2697"><span class="linenos">2697</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-2698"><a href="#Select.group_by-2698"><span class="linenos">2698</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-2699"><a href="#Select.group_by-2699"><span class="linenos">2699</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-2700"><a href="#Select.group_by-2700"><span class="linenos">2700</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.group_by-2701"><a href="#Select.group_by-2701"><span class="linenos">2701</span></a> <span class="p">)</span>
</span></pre></div>
@@ -34599,45 +35775,45 @@ 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-2647"><a href="#Select.order_by-2647"><span class="linenos">2647</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span>
-</span><span id="Select.order_by-2648"><a href="#Select.order_by-2648"><span class="linenos">2648</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.order_by-2649"><a href="#Select.order_by-2649"><span class="linenos">2649</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.order_by-2650"><a href="#Select.order_by-2650"><span class="linenos">2650</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.order_by-2651"><a href="#Select.order_by-2651"><span class="linenos">2651</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.order_by-2652"><a href="#Select.order_by-2652"><span class="linenos">2652</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.order_by-2653"><a href="#Select.order_by-2653"><span class="linenos">2653</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.order_by-2654"><a href="#Select.order_by-2654"><span class="linenos">2654</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.order_by-2655"><a href="#Select.order_by-2655"><span class="linenos">2655</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.order_by-2656"><a href="#Select.order_by-2656"><span class="linenos">2656</span></a><span class="sd"> Set the ORDER BY expression.</span>
-</span><span id="Select.order_by-2657"><a href="#Select.order_by-2657"><span class="linenos">2657</span></a>
-</span><span id="Select.order_by-2658"><a href="#Select.order_by-2658"><span class="linenos">2658</span></a><span class="sd"> Example:</span>
-</span><span id="Select.order_by-2659"><a href="#Select.order_by-2659"><span class="linenos">2659</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-2660"><a href="#Select.order_by-2660"><span class="linenos">2660</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
-</span><span id="Select.order_by-2661"><a href="#Select.order_by-2661"><span class="linenos">2661</span></a>
-</span><span id="Select.order_by-2662"><a href="#Select.order_by-2662"><span class="linenos">2662</span></a><span class="sd"> Args:</span>
-</span><span id="Select.order_by-2663"><a href="#Select.order_by-2663"><span class="linenos">2663</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.order_by-2664"><a href="#Select.order_by-2664"><span class="linenos">2664</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.order_by-2665"><a href="#Select.order_by-2665"><span class="linenos">2665</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-2666"><a href="#Select.order_by-2666"><span class="linenos">2666</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.order_by-2667"><a href="#Select.order_by-2667"><span class="linenos">2667</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select.order_by-2668"><a href="#Select.order_by-2668"><span class="linenos">2668</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.order_by-2669"><a href="#Select.order_by-2669"><span class="linenos">2669</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.order_by-2670"><a href="#Select.order_by-2670"><span class="linenos">2670</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.order_by-2671"><a href="#Select.order_by-2671"><span class="linenos">2671</span></a>
-</span><span id="Select.order_by-2672"><a href="#Select.order_by-2672"><span class="linenos">2672</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.order_by-2673"><a href="#Select.order_by-2673"><span class="linenos">2673</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.order_by-2674"><a href="#Select.order_by-2674"><span class="linenos">2674</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.order_by-2675"><a href="#Select.order_by-2675"><span class="linenos">2675</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-2676"><a href="#Select.order_by-2676"><span class="linenos">2676</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.order_by-2677"><a href="#Select.order_by-2677"><span class="linenos">2677</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-2678"><a href="#Select.order_by-2678"><span class="linenos">2678</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-2679"><a href="#Select.order_by-2679"><span class="linenos">2679</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-2680"><a href="#Select.order_by-2680"><span class="linenos">2680</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-2681"><a href="#Select.order_by-2681"><span class="linenos">2681</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-2682"><a href="#Select.order_by-2682"><span class="linenos">2682</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-2683"><a href="#Select.order_by-2683"><span class="linenos">2683</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-2684"><a href="#Select.order_by-2684"><span class="linenos">2684</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.order_by-2685"><a href="#Select.order_by-2685"><span class="linenos">2685</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.order_by-2703"><a href="#Select.order_by-2703"><span class="linenos">2703</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span>
+</span><span id="Select.order_by-2704"><a href="#Select.order_by-2704"><span class="linenos">2704</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.order_by-2705"><a href="#Select.order_by-2705"><span class="linenos">2705</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.order_by-2706"><a href="#Select.order_by-2706"><span class="linenos">2706</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.order_by-2707"><a href="#Select.order_by-2707"><span class="linenos">2707</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.order_by-2708"><a href="#Select.order_by-2708"><span class="linenos">2708</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.order_by-2709"><a href="#Select.order_by-2709"><span class="linenos">2709</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.order_by-2710"><a href="#Select.order_by-2710"><span class="linenos">2710</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.order_by-2711"><a href="#Select.order_by-2711"><span class="linenos">2711</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.order_by-2712"><a href="#Select.order_by-2712"><span class="linenos">2712</span></a><span class="sd"> Set the ORDER BY expression.</span>
+</span><span id="Select.order_by-2713"><a href="#Select.order_by-2713"><span class="linenos">2713</span></a>
+</span><span id="Select.order_by-2714"><a href="#Select.order_by-2714"><span class="linenos">2714</span></a><span class="sd"> Example:</span>
+</span><span id="Select.order_by-2715"><a href="#Select.order_by-2715"><span class="linenos">2715</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-2716"><a href="#Select.order_by-2716"><span class="linenos">2716</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="Select.order_by-2717"><a href="#Select.order_by-2717"><span class="linenos">2717</span></a>
+</span><span id="Select.order_by-2718"><a href="#Select.order_by-2718"><span class="linenos">2718</span></a><span class="sd"> Args:</span>
+</span><span id="Select.order_by-2719"><a href="#Select.order_by-2719"><span class="linenos">2719</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.order_by-2720"><a href="#Select.order_by-2720"><span class="linenos">2720</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.order_by-2721"><a href="#Select.order_by-2721"><span class="linenos">2721</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-2722"><a href="#Select.order_by-2722"><span class="linenos">2722</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.order_by-2723"><a href="#Select.order_by-2723"><span class="linenos">2723</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select.order_by-2724"><a href="#Select.order_by-2724"><span class="linenos">2724</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.order_by-2725"><a href="#Select.order_by-2725"><span class="linenos">2725</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.order_by-2726"><a href="#Select.order_by-2726"><span class="linenos">2726</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.order_by-2727"><a href="#Select.order_by-2727"><span class="linenos">2727</span></a>
+</span><span id="Select.order_by-2728"><a href="#Select.order_by-2728"><span class="linenos">2728</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.order_by-2729"><a href="#Select.order_by-2729"><span class="linenos">2729</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.order_by-2730"><a href="#Select.order_by-2730"><span class="linenos">2730</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.order_by-2731"><a href="#Select.order_by-2731"><span class="linenos">2731</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-2732"><a href="#Select.order_by-2732"><span class="linenos">2732</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.order_by-2733"><a href="#Select.order_by-2733"><span class="linenos">2733</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-2734"><a href="#Select.order_by-2734"><span class="linenos">2734</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-2735"><a href="#Select.order_by-2735"><span class="linenos">2735</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-2736"><a href="#Select.order_by-2736"><span class="linenos">2736</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-2737"><a href="#Select.order_by-2737"><span class="linenos">2737</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-2738"><a href="#Select.order_by-2738"><span class="linenos">2738</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-2739"><a href="#Select.order_by-2739"><span class="linenos">2739</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-2740"><a href="#Select.order_by-2740"><span class="linenos">2740</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.order_by-2741"><a href="#Select.order_by-2741"><span class="linenos">2741</span></a> <span class="p">)</span>
</span></pre></div>
@@ -34686,45 +35862,45 @@ 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-2687"><a href="#Select.sort_by-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span>
-</span><span id="Select.sort_by-2688"><a href="#Select.sort_by-2688"><span class="linenos">2688</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.sort_by-2689"><a href="#Select.sort_by-2689"><span class="linenos">2689</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.sort_by-2690"><a href="#Select.sort_by-2690"><span class="linenos">2690</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.sort_by-2691"><a href="#Select.sort_by-2691"><span class="linenos">2691</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.sort_by-2692"><a href="#Select.sort_by-2692"><span class="linenos">2692</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.sort_by-2693"><a href="#Select.sort_by-2693"><span class="linenos">2693</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.sort_by-2694"><a href="#Select.sort_by-2694"><span class="linenos">2694</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.sort_by-2695"><a href="#Select.sort_by-2695"><span class="linenos">2695</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.sort_by-2696"><a href="#Select.sort_by-2696"><span class="linenos">2696</span></a><span class="sd"> Set the SORT BY expression.</span>
-</span><span id="Select.sort_by-2697"><a href="#Select.sort_by-2697"><span class="linenos">2697</span></a>
-</span><span id="Select.sort_by-2698"><a href="#Select.sort_by-2698"><span class="linenos">2698</span></a><span class="sd"> Example:</span>
-</span><span id="Select.sort_by-2699"><a href="#Select.sort_by-2699"><span class="linenos">2699</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
-</span><span id="Select.sort_by-2700"><a href="#Select.sort_by-2700"><span class="linenos">2700</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</span>
-</span><span id="Select.sort_by-2701"><a href="#Select.sort_by-2701"><span class="linenos">2701</span></a>
-</span><span id="Select.sort_by-2702"><a href="#Select.sort_by-2702"><span class="linenos">2702</span></a><span class="sd"> Args:</span>
-</span><span id="Select.sort_by-2703"><a href="#Select.sort_by-2703"><span class="linenos">2703</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.sort_by-2704"><a href="#Select.sort_by-2704"><span class="linenos">2704</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.sort_by-2705"><a href="#Select.sort_by-2705"><span class="linenos">2705</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-2706"><a href="#Select.sort_by-2706"><span class="linenos">2706</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.sort_by-2707"><a href="#Select.sort_by-2707"><span class="linenos">2707</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select.sort_by-2708"><a href="#Select.sort_by-2708"><span class="linenos">2708</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.sort_by-2709"><a href="#Select.sort_by-2709"><span class="linenos">2709</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.sort_by-2710"><a href="#Select.sort_by-2710"><span class="linenos">2710</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.sort_by-2711"><a href="#Select.sort_by-2711"><span class="linenos">2711</span></a>
-</span><span id="Select.sort_by-2712"><a href="#Select.sort_by-2712"><span class="linenos">2712</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.sort_by-2713"><a href="#Select.sort_by-2713"><span class="linenos">2713</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.sort_by-2714"><a href="#Select.sort_by-2714"><span class="linenos">2714</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.sort_by-2715"><a href="#Select.sort_by-2715"><span class="linenos">2715</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-2716"><a href="#Select.sort_by-2716"><span class="linenos">2716</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.sort_by-2717"><a href="#Select.sort_by-2717"><span class="linenos">2717</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-2718"><a href="#Select.sort_by-2718"><span class="linenos">2718</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-2719"><a href="#Select.sort_by-2719"><span class="linenos">2719</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-2720"><a href="#Select.sort_by-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="Select.sort_by-2721"><a href="#Select.sort_by-2721"><span class="linenos">2721</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-2722"><a href="#Select.sort_by-2722"><span class="linenos">2722</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-2723"><a href="#Select.sort_by-2723"><span class="linenos">2723</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-2724"><a href="#Select.sort_by-2724"><span class="linenos">2724</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.sort_by-2725"><a href="#Select.sort_by-2725"><span class="linenos">2725</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.sort_by-2743"><a href="#Select.sort_by-2743"><span class="linenos">2743</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span>
+</span><span id="Select.sort_by-2744"><a href="#Select.sort_by-2744"><span class="linenos">2744</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.sort_by-2745"><a href="#Select.sort_by-2745"><span class="linenos">2745</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.sort_by-2746"><a href="#Select.sort_by-2746"><span class="linenos">2746</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.sort_by-2747"><a href="#Select.sort_by-2747"><span class="linenos">2747</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.sort_by-2748"><a href="#Select.sort_by-2748"><span class="linenos">2748</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.sort_by-2749"><a href="#Select.sort_by-2749"><span class="linenos">2749</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.sort_by-2750"><a href="#Select.sort_by-2750"><span class="linenos">2750</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.sort_by-2751"><a href="#Select.sort_by-2751"><span class="linenos">2751</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.sort_by-2752"><a href="#Select.sort_by-2752"><span class="linenos">2752</span></a><span class="sd"> Set the SORT BY expression.</span>
+</span><span id="Select.sort_by-2753"><a href="#Select.sort_by-2753"><span class="linenos">2753</span></a>
+</span><span id="Select.sort_by-2754"><a href="#Select.sort_by-2754"><span class="linenos">2754</span></a><span class="sd"> Example:</span>
+</span><span id="Select.sort_by-2755"><a href="#Select.sort_by-2755"><span class="linenos">2755</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
+</span><span id="Select.sort_by-2756"><a href="#Select.sort_by-2756"><span class="linenos">2756</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</span>
+</span><span id="Select.sort_by-2757"><a href="#Select.sort_by-2757"><span class="linenos">2757</span></a>
+</span><span id="Select.sort_by-2758"><a href="#Select.sort_by-2758"><span class="linenos">2758</span></a><span class="sd"> Args:</span>
+</span><span id="Select.sort_by-2759"><a href="#Select.sort_by-2759"><span class="linenos">2759</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.sort_by-2760"><a href="#Select.sort_by-2760"><span class="linenos">2760</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.sort_by-2761"><a href="#Select.sort_by-2761"><span class="linenos">2761</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-2762"><a href="#Select.sort_by-2762"><span class="linenos">2762</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.sort_by-2763"><a href="#Select.sort_by-2763"><span class="linenos">2763</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select.sort_by-2764"><a href="#Select.sort_by-2764"><span class="linenos">2764</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.sort_by-2765"><a href="#Select.sort_by-2765"><span class="linenos">2765</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.sort_by-2766"><a href="#Select.sort_by-2766"><span class="linenos">2766</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.sort_by-2767"><a href="#Select.sort_by-2767"><span class="linenos">2767</span></a>
+</span><span id="Select.sort_by-2768"><a href="#Select.sort_by-2768"><span class="linenos">2768</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.sort_by-2769"><a href="#Select.sort_by-2769"><span class="linenos">2769</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.sort_by-2770"><a href="#Select.sort_by-2770"><span class="linenos">2770</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.sort_by-2771"><a href="#Select.sort_by-2771"><span class="linenos">2771</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-2772"><a href="#Select.sort_by-2772"><span class="linenos">2772</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.sort_by-2773"><a href="#Select.sort_by-2773"><span class="linenos">2773</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-2774"><a href="#Select.sort_by-2774"><span class="linenos">2774</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-2775"><a href="#Select.sort_by-2775"><span class="linenos">2775</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-2776"><a href="#Select.sort_by-2776"><span class="linenos">2776</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-2777"><a href="#Select.sort_by-2777"><span class="linenos">2777</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-2778"><a href="#Select.sort_by-2778"><span class="linenos">2778</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-2779"><a href="#Select.sort_by-2779"><span class="linenos">2779</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-2780"><a href="#Select.sort_by-2780"><span class="linenos">2780</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.sort_by-2781"><a href="#Select.sort_by-2781"><span class="linenos">2781</span></a> <span class="p">)</span>
</span></pre></div>
@@ -34773,45 +35949,45 @@ 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-2727"><a href="#Select.cluster_by-2727"><span class="linenos">2727</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span>
-</span><span id="Select.cluster_by-2728"><a href="#Select.cluster_by-2728"><span class="linenos">2728</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2729"><a href="#Select.cluster_by-2729"><span class="linenos">2729</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.cluster_by-2730"><a href="#Select.cluster_by-2730"><span class="linenos">2730</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.cluster_by-2731"><a href="#Select.cluster_by-2731"><span class="linenos">2731</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.cluster_by-2732"><a href="#Select.cluster_by-2732"><span class="linenos">2732</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.cluster_by-2733"><a href="#Select.cluster_by-2733"><span class="linenos">2733</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2734"><a href="#Select.cluster_by-2734"><span class="linenos">2734</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.cluster_by-2735"><a href="#Select.cluster_by-2735"><span class="linenos">2735</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.cluster_by-2736"><a href="#Select.cluster_by-2736"><span class="linenos">2736</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
-</span><span id="Select.cluster_by-2737"><a href="#Select.cluster_by-2737"><span class="linenos">2737</span></a>
-</span><span id="Select.cluster_by-2738"><a href="#Select.cluster_by-2738"><span class="linenos">2738</span></a><span class="sd"> Example:</span>
-</span><span id="Select.cluster_by-2739"><a href="#Select.cluster_by-2739"><span class="linenos">2739</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
-</span><span id="Select.cluster_by-2740"><a href="#Select.cluster_by-2740"><span class="linenos">2740</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
-</span><span id="Select.cluster_by-2741"><a href="#Select.cluster_by-2741"><span class="linenos">2741</span></a>
-</span><span id="Select.cluster_by-2742"><a href="#Select.cluster_by-2742"><span class="linenos">2742</span></a><span class="sd"> Args:</span>
-</span><span id="Select.cluster_by-2743"><a href="#Select.cluster_by-2743"><span class="linenos">2743</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.cluster_by-2744"><a href="#Select.cluster_by-2744"><span class="linenos">2744</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.cluster_by-2745"><a href="#Select.cluster_by-2745"><span class="linenos">2745</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-2746"><a href="#Select.cluster_by-2746"><span class="linenos">2746</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.cluster_by-2747"><a href="#Select.cluster_by-2747"><span class="linenos">2747</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select.cluster_by-2748"><a href="#Select.cluster_by-2748"><span class="linenos">2748</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.cluster_by-2749"><a href="#Select.cluster_by-2749"><span class="linenos">2749</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.cluster_by-2750"><a href="#Select.cluster_by-2750"><span class="linenos">2750</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.cluster_by-2751"><a href="#Select.cluster_by-2751"><span class="linenos">2751</span></a>
-</span><span id="Select.cluster_by-2752"><a href="#Select.cluster_by-2752"><span class="linenos">2752</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.cluster_by-2753"><a href="#Select.cluster_by-2753"><span class="linenos">2753</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.cluster_by-2754"><a href="#Select.cluster_by-2754"><span class="linenos">2754</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.cluster_by-2755"><a href="#Select.cluster_by-2755"><span class="linenos">2755</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-2756"><a href="#Select.cluster_by-2756"><span class="linenos">2756</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2757"><a href="#Select.cluster_by-2757"><span class="linenos">2757</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-2758"><a href="#Select.cluster_by-2758"><span class="linenos">2758</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-2759"><a href="#Select.cluster_by-2759"><span class="linenos">2759</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-2760"><a href="#Select.cluster_by-2760"><span class="linenos">2760</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-2761"><a href="#Select.cluster_by-2761"><span class="linenos">2761</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-2762"><a href="#Select.cluster_by-2762"><span class="linenos">2762</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-2763"><a href="#Select.cluster_by-2763"><span class="linenos">2763</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-2764"><a href="#Select.cluster_by-2764"><span class="linenos">2764</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2765"><a href="#Select.cluster_by-2765"><span class="linenos">2765</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.cluster_by-2783"><a href="#Select.cluster_by-2783"><span class="linenos">2783</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span>
+</span><span id="Select.cluster_by-2784"><a href="#Select.cluster_by-2784"><span class="linenos">2784</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2785"><a href="#Select.cluster_by-2785"><span class="linenos">2785</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.cluster_by-2786"><a href="#Select.cluster_by-2786"><span class="linenos">2786</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.cluster_by-2787"><a href="#Select.cluster_by-2787"><span class="linenos">2787</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.cluster_by-2788"><a href="#Select.cluster_by-2788"><span class="linenos">2788</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.cluster_by-2789"><a href="#Select.cluster_by-2789"><span class="linenos">2789</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2790"><a href="#Select.cluster_by-2790"><span class="linenos">2790</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.cluster_by-2791"><a href="#Select.cluster_by-2791"><span class="linenos">2791</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.cluster_by-2792"><a href="#Select.cluster_by-2792"><span class="linenos">2792</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
+</span><span id="Select.cluster_by-2793"><a href="#Select.cluster_by-2793"><span class="linenos">2793</span></a>
+</span><span id="Select.cluster_by-2794"><a href="#Select.cluster_by-2794"><span class="linenos">2794</span></a><span class="sd"> Example:</span>
+</span><span id="Select.cluster_by-2795"><a href="#Select.cluster_by-2795"><span class="linenos">2795</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql(dialect=&quot;hive&quot;)</span>
+</span><span id="Select.cluster_by-2796"><a href="#Select.cluster_by-2796"><span class="linenos">2796</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
+</span><span id="Select.cluster_by-2797"><a href="#Select.cluster_by-2797"><span class="linenos">2797</span></a>
+</span><span id="Select.cluster_by-2798"><a href="#Select.cluster_by-2798"><span class="linenos">2798</span></a><span class="sd"> Args:</span>
+</span><span id="Select.cluster_by-2799"><a href="#Select.cluster_by-2799"><span class="linenos">2799</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.cluster_by-2800"><a href="#Select.cluster_by-2800"><span class="linenos">2800</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.cluster_by-2801"><a href="#Select.cluster_by-2801"><span class="linenos">2801</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-2802"><a href="#Select.cluster_by-2802"><span class="linenos">2802</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.cluster_by-2803"><a href="#Select.cluster_by-2803"><span class="linenos">2803</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select.cluster_by-2804"><a href="#Select.cluster_by-2804"><span class="linenos">2804</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.cluster_by-2805"><a href="#Select.cluster_by-2805"><span class="linenos">2805</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.cluster_by-2806"><a href="#Select.cluster_by-2806"><span class="linenos">2806</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.cluster_by-2807"><a href="#Select.cluster_by-2807"><span class="linenos">2807</span></a>
+</span><span id="Select.cluster_by-2808"><a href="#Select.cluster_by-2808"><span class="linenos">2808</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.cluster_by-2809"><a href="#Select.cluster_by-2809"><span class="linenos">2809</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.cluster_by-2810"><a href="#Select.cluster_by-2810"><span class="linenos">2810</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.cluster_by-2811"><a href="#Select.cluster_by-2811"><span class="linenos">2811</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-2812"><a href="#Select.cluster_by-2812"><span class="linenos">2812</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2813"><a href="#Select.cluster_by-2813"><span class="linenos">2813</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-2814"><a href="#Select.cluster_by-2814"><span class="linenos">2814</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-2815"><a href="#Select.cluster_by-2815"><span class="linenos">2815</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-2816"><a href="#Select.cluster_by-2816"><span class="linenos">2816</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-2817"><a href="#Select.cluster_by-2817"><span class="linenos">2817</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-2818"><a href="#Select.cluster_by-2818"><span class="linenos">2818</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-2819"><a href="#Select.cluster_by-2819"><span class="linenos">2819</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-2820"><a href="#Select.cluster_by-2820"><span class="linenos">2820</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2821"><a href="#Select.cluster_by-2821"><span class="linenos">2821</span></a> <span class="p">)</span>
</span></pre></div>
@@ -34860,38 +36036,38 @@ 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-2767"><a href="#Select.limit-2767"><span class="linenos">2767</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
-</span><span id="Select.limit-2768"><a href="#Select.limit-2768"><span class="linenos">2768</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select.limit-2769"><a href="#Select.limit-2769"><span class="linenos">2769</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.limit-2770"><a href="#Select.limit-2770"><span class="linenos">2770</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.limit-2771"><a href="#Select.limit-2771"><span class="linenos">2771</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Select.limit-2772"><a href="#Select.limit-2772"><span class="linenos">2772</span></a>
-</span><span id="Select.limit-2773"><a href="#Select.limit-2773"><span class="linenos">2773</span></a><span class="sd"> Example:</span>
-</span><span id="Select.limit-2774"><a href="#Select.limit-2774"><span class="linenos">2774</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-2775"><a href="#Select.limit-2775"><span class="linenos">2775</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
-</span><span id="Select.limit-2776"><a href="#Select.limit-2776"><span class="linenos">2776</span></a>
-</span><span id="Select.limit-2777"><a href="#Select.limit-2777"><span class="linenos">2777</span></a><span class="sd"> Args:</span>
-</span><span id="Select.limit-2778"><a href="#Select.limit-2778"><span class="linenos">2778</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Select.limit-2779"><a href="#Select.limit-2779"><span class="linenos">2779</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select.limit-2780"><a href="#Select.limit-2780"><span class="linenos">2780</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Select.limit-2781"><a href="#Select.limit-2781"><span class="linenos">2781</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Select.limit-2782"><a href="#Select.limit-2782"><span class="linenos">2782</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.limit-2783"><a href="#Select.limit-2783"><span class="linenos">2783</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.limit-2784"><a href="#Select.limit-2784"><span class="linenos">2784</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.limit-2785"><a href="#Select.limit-2785"><span class="linenos">2785</span></a>
-</span><span id="Select.limit-2786"><a href="#Select.limit-2786"><span class="linenos">2786</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.limit-2787"><a href="#Select.limit-2787"><span class="linenos">2787</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.limit-2788"><a href="#Select.limit-2788"><span class="linenos">2788</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.limit-2789"><a href="#Select.limit-2789"><span class="linenos">2789</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select.limit-2790"><a href="#Select.limit-2790"><span class="linenos">2790</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-2791"><a href="#Select.limit-2791"><span class="linenos">2791</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-2792"><a href="#Select.limit-2792"><span class="linenos">2792</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-2793"><a href="#Select.limit-2793"><span class="linenos">2793</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-2794"><a href="#Select.limit-2794"><span class="linenos">2794</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-2795"><a href="#Select.limit-2795"><span class="linenos">2795</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-2796"><a href="#Select.limit-2796"><span class="linenos">2796</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-2797"><a href="#Select.limit-2797"><span class="linenos">2797</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.limit-2798"><a href="#Select.limit-2798"><span class="linenos">2798</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.limit-2823"><a href="#Select.limit-2823"><span class="linenos">2823</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span>
+</span><span id="Select.limit-2824"><a href="#Select.limit-2824"><span class="linenos">2824</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select.limit-2825"><a href="#Select.limit-2825"><span class="linenos">2825</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.limit-2826"><a href="#Select.limit-2826"><span class="linenos">2826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.limit-2827"><a href="#Select.limit-2827"><span class="linenos">2827</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Select.limit-2828"><a href="#Select.limit-2828"><span class="linenos">2828</span></a>
+</span><span id="Select.limit-2829"><a href="#Select.limit-2829"><span class="linenos">2829</span></a><span class="sd"> Example:</span>
+</span><span id="Select.limit-2830"><a href="#Select.limit-2830"><span class="linenos">2830</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-2831"><a href="#Select.limit-2831"><span class="linenos">2831</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
+</span><span id="Select.limit-2832"><a href="#Select.limit-2832"><span class="linenos">2832</span></a>
+</span><span id="Select.limit-2833"><a href="#Select.limit-2833"><span class="linenos">2833</span></a><span class="sd"> Args:</span>
+</span><span id="Select.limit-2834"><a href="#Select.limit-2834"><span class="linenos">2834</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Select.limit-2835"><a href="#Select.limit-2835"><span class="linenos">2835</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select.limit-2836"><a href="#Select.limit-2836"><span class="linenos">2836</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Select.limit-2837"><a href="#Select.limit-2837"><span class="linenos">2837</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Select.limit-2838"><a href="#Select.limit-2838"><span class="linenos">2838</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.limit-2839"><a href="#Select.limit-2839"><span class="linenos">2839</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.limit-2840"><a href="#Select.limit-2840"><span class="linenos">2840</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.limit-2841"><a href="#Select.limit-2841"><span class="linenos">2841</span></a>
+</span><span id="Select.limit-2842"><a href="#Select.limit-2842"><span class="linenos">2842</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.limit-2843"><a href="#Select.limit-2843"><span class="linenos">2843</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.limit-2844"><a href="#Select.limit-2844"><span class="linenos">2844</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.limit-2845"><a href="#Select.limit-2845"><span class="linenos">2845</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select.limit-2846"><a href="#Select.limit-2846"><span class="linenos">2846</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-2847"><a href="#Select.limit-2847"><span class="linenos">2847</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-2848"><a href="#Select.limit-2848"><span class="linenos">2848</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-2849"><a href="#Select.limit-2849"><span class="linenos">2849</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-2850"><a href="#Select.limit-2850"><span class="linenos">2850</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-2851"><a href="#Select.limit-2851"><span class="linenos">2851</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-2852"><a href="#Select.limit-2852"><span class="linenos">2852</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-2853"><a href="#Select.limit-2853"><span class="linenos">2853</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.limit-2854"><a href="#Select.limit-2854"><span class="linenos">2854</span></a> <span class="p">)</span>
</span></pre></div>
@@ -34939,38 +36115,38 @@ 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-2800"><a href="#Select.offset-2800"><span class="linenos">2800</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span>
-</span><span id="Select.offset-2801"><a href="#Select.offset-2801"><span class="linenos">2801</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select.offset-2802"><a href="#Select.offset-2802"><span class="linenos">2802</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.offset-2803"><a href="#Select.offset-2803"><span class="linenos">2803</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.offset-2804"><a href="#Select.offset-2804"><span class="linenos">2804</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select.offset-2805"><a href="#Select.offset-2805"><span class="linenos">2805</span></a>
-</span><span id="Select.offset-2806"><a href="#Select.offset-2806"><span class="linenos">2806</span></a><span class="sd"> Example:</span>
-</span><span id="Select.offset-2807"><a href="#Select.offset-2807"><span class="linenos">2807</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-2808"><a href="#Select.offset-2808"><span class="linenos">2808</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
-</span><span id="Select.offset-2809"><a href="#Select.offset-2809"><span class="linenos">2809</span></a>
-</span><span id="Select.offset-2810"><a href="#Select.offset-2810"><span class="linenos">2810</span></a><span class="sd"> Args:</span>
-</span><span id="Select.offset-2811"><a href="#Select.offset-2811"><span class="linenos">2811</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Select.offset-2812"><a href="#Select.offset-2812"><span class="linenos">2812</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select.offset-2813"><a href="#Select.offset-2813"><span class="linenos">2813</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
-</span><span id="Select.offset-2814"><a href="#Select.offset-2814"><span class="linenos">2814</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
-</span><span id="Select.offset-2815"><a href="#Select.offset-2815"><span class="linenos">2815</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Select.offset-2816"><a href="#Select.offset-2816"><span class="linenos">2816</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.offset-2817"><a href="#Select.offset-2817"><span class="linenos">2817</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.offset-2818"><a href="#Select.offset-2818"><span class="linenos">2818</span></a>
-</span><span id="Select.offset-2819"><a href="#Select.offset-2819"><span class="linenos">2819</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.offset-2820"><a href="#Select.offset-2820"><span class="linenos">2820</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.offset-2821"><a href="#Select.offset-2821"><span class="linenos">2821</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.offset-2822"><a href="#Select.offset-2822"><span class="linenos">2822</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select.offset-2823"><a href="#Select.offset-2823"><span class="linenos">2823</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-2824"><a href="#Select.offset-2824"><span class="linenos">2824</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-2825"><a href="#Select.offset-2825"><span class="linenos">2825</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-2826"><a href="#Select.offset-2826"><span class="linenos">2826</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-2827"><a href="#Select.offset-2827"><span class="linenos">2827</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-2828"><a href="#Select.offset-2828"><span class="linenos">2828</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-2829"><a href="#Select.offset-2829"><span class="linenos">2829</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-2830"><a href="#Select.offset-2830"><span class="linenos">2830</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.offset-2831"><a href="#Select.offset-2831"><span class="linenos">2831</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.offset-2856"><a href="#Select.offset-2856"><span class="linenos">2856</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span>
+</span><span id="Select.offset-2857"><a href="#Select.offset-2857"><span class="linenos">2857</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span> <span class="o">|</span> <span class="nb">int</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="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><span id="Select.offset-2858"><a href="#Select.offset-2858"><span class="linenos">2858</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.offset-2859"><a href="#Select.offset-2859"><span class="linenos">2859</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.offset-2860"><a href="#Select.offset-2860"><span class="linenos">2860</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select.offset-2861"><a href="#Select.offset-2861"><span class="linenos">2861</span></a>
+</span><span id="Select.offset-2862"><a href="#Select.offset-2862"><span class="linenos">2862</span></a><span class="sd"> Example:</span>
+</span><span id="Select.offset-2863"><a href="#Select.offset-2863"><span class="linenos">2863</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-2864"><a href="#Select.offset-2864"><span class="linenos">2864</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
+</span><span id="Select.offset-2865"><a href="#Select.offset-2865"><span class="linenos">2865</span></a>
+</span><span id="Select.offset-2866"><a href="#Select.offset-2866"><span class="linenos">2866</span></a><span class="sd"> Args:</span>
+</span><span id="Select.offset-2867"><a href="#Select.offset-2867"><span class="linenos">2867</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Select.offset-2868"><a href="#Select.offset-2868"><span class="linenos">2868</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select.offset-2869"><a href="#Select.offset-2869"><span class="linenos">2869</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
+</span><span id="Select.offset-2870"><a href="#Select.offset-2870"><span class="linenos">2870</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
+</span><span id="Select.offset-2871"><a href="#Select.offset-2871"><span class="linenos">2871</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Select.offset-2872"><a href="#Select.offset-2872"><span class="linenos">2872</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.offset-2873"><a href="#Select.offset-2873"><span class="linenos">2873</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.offset-2874"><a href="#Select.offset-2874"><span class="linenos">2874</span></a>
+</span><span id="Select.offset-2875"><a href="#Select.offset-2875"><span class="linenos">2875</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.offset-2876"><a href="#Select.offset-2876"><span class="linenos">2876</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.offset-2877"><a href="#Select.offset-2877"><span class="linenos">2877</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.offset-2878"><a href="#Select.offset-2878"><span class="linenos">2878</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select.offset-2879"><a href="#Select.offset-2879"><span class="linenos">2879</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-2880"><a href="#Select.offset-2880"><span class="linenos">2880</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-2881"><a href="#Select.offset-2881"><span class="linenos">2881</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-2882"><a href="#Select.offset-2882"><span class="linenos">2882</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-2883"><a href="#Select.offset-2883"><span class="linenos">2883</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-2884"><a href="#Select.offset-2884"><span class="linenos">2884</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-2885"><a href="#Select.offset-2885"><span class="linenos">2885</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-2886"><a href="#Select.offset-2886"><span class="linenos">2886</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.offset-2887"><a href="#Select.offset-2887"><span class="linenos">2887</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35018,42 +36194,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-2833"><a href="#Select.select-2833"><span class="linenos">2833</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Select.select-2834"><a href="#Select.select-2834"><span class="linenos">2834</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.select-2835"><a href="#Select.select-2835"><span class="linenos">2835</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.select-2836"><a href="#Select.select-2836"><span class="linenos">2836</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-2837"><a href="#Select.select-2837"><span class="linenos">2837</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-2838"><a href="#Select.select-2838"><span class="linenos">2838</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-2839"><a href="#Select.select-2839"><span class="linenos">2839</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.select-2840"><a href="#Select.select-2840"><span class="linenos">2840</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-2841"><a href="#Select.select-2841"><span class="linenos">2841</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.select-2842"><a href="#Select.select-2842"><span class="linenos">2842</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
-</span><span id="Select.select-2843"><a href="#Select.select-2843"><span class="linenos">2843</span></a>
-</span><span id="Select.select-2844"><a href="#Select.select-2844"><span class="linenos">2844</span></a><span class="sd"> Example:</span>
-</span><span id="Select.select-2845"><a href="#Select.select-2845"><span class="linenos">2845</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
-</span><span id="Select.select-2846"><a href="#Select.select-2846"><span class="linenos">2846</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
-</span><span id="Select.select-2847"><a href="#Select.select-2847"><span class="linenos">2847</span></a>
-</span><span id="Select.select-2848"><a href="#Select.select-2848"><span class="linenos">2848</span></a><span class="sd"> Args:</span>
-</span><span id="Select.select-2849"><a href="#Select.select-2849"><span class="linenos">2849</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.select-2850"><a href="#Select.select-2850"><span class="linenos">2850</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.select-2851"><a href="#Select.select-2851"><span class="linenos">2851</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.select-2852"><a href="#Select.select-2852"><span class="linenos">2852</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select.select-2853"><a href="#Select.select-2853"><span class="linenos">2853</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select.select-2854"><a href="#Select.select-2854"><span class="linenos">2854</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.select-2855"><a href="#Select.select-2855"><span class="linenos">2855</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.select-2856"><a href="#Select.select-2856"><span class="linenos">2856</span></a>
-</span><span id="Select.select-2857"><a href="#Select.select-2857"><span class="linenos">2857</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.select-2858"><a href="#Select.select-2858"><span class="linenos">2858</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.select-2859"><a href="#Select.select-2859"><span class="linenos">2859</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.select-2860"><a href="#Select.select-2860"><span class="linenos">2860</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.select-2861"><a href="#Select.select-2861"><span class="linenos">2861</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.select-2862"><a href="#Select.select-2862"><span class="linenos">2862</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-2863"><a href="#Select.select-2863"><span class="linenos">2863</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-2864"><a href="#Select.select-2864"><span class="linenos">2864</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-2865"><a href="#Select.select-2865"><span class="linenos">2865</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-2866"><a href="#Select.select-2866"><span class="linenos">2866</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-2867"><a href="#Select.select-2867"><span class="linenos">2867</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.select-2868"><a href="#Select.select-2868"><span class="linenos">2868</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.select-2889"><a href="#Select.select-2889"><span class="linenos">2889</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Select.select-2890"><a href="#Select.select-2890"><span class="linenos">2890</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.select-2891"><a href="#Select.select-2891"><span class="linenos">2891</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.select-2892"><a href="#Select.select-2892"><span class="linenos">2892</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-2893"><a href="#Select.select-2893"><span class="linenos">2893</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-2894"><a href="#Select.select-2894"><span class="linenos">2894</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-2895"><a href="#Select.select-2895"><span class="linenos">2895</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.select-2896"><a href="#Select.select-2896"><span class="linenos">2896</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-2897"><a href="#Select.select-2897"><span class="linenos">2897</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.select-2898"><a href="#Select.select-2898"><span class="linenos">2898</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
+</span><span id="Select.select-2899"><a href="#Select.select-2899"><span class="linenos">2899</span></a>
+</span><span id="Select.select-2900"><a href="#Select.select-2900"><span class="linenos">2900</span></a><span class="sd"> Example:</span>
+</span><span id="Select.select-2901"><a href="#Select.select-2901"><span class="linenos">2901</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
+</span><span id="Select.select-2902"><a href="#Select.select-2902"><span class="linenos">2902</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
+</span><span id="Select.select-2903"><a href="#Select.select-2903"><span class="linenos">2903</span></a>
+</span><span id="Select.select-2904"><a href="#Select.select-2904"><span class="linenos">2904</span></a><span class="sd"> Args:</span>
+</span><span id="Select.select-2905"><a href="#Select.select-2905"><span class="linenos">2905</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.select-2906"><a href="#Select.select-2906"><span class="linenos">2906</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.select-2907"><a href="#Select.select-2907"><span class="linenos">2907</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.select-2908"><a href="#Select.select-2908"><span class="linenos">2908</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select.select-2909"><a href="#Select.select-2909"><span class="linenos">2909</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select.select-2910"><a href="#Select.select-2910"><span class="linenos">2910</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.select-2911"><a href="#Select.select-2911"><span class="linenos">2911</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.select-2912"><a href="#Select.select-2912"><span class="linenos">2912</span></a>
+</span><span id="Select.select-2913"><a href="#Select.select-2913"><span class="linenos">2913</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.select-2914"><a href="#Select.select-2914"><span class="linenos">2914</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.select-2915"><a href="#Select.select-2915"><span class="linenos">2915</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.select-2916"><a href="#Select.select-2916"><span class="linenos">2916</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.select-2917"><a href="#Select.select-2917"><span class="linenos">2917</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.select-2918"><a href="#Select.select-2918"><span class="linenos">2918</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-2919"><a href="#Select.select-2919"><span class="linenos">2919</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-2920"><a href="#Select.select-2920"><span class="linenos">2920</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-2921"><a href="#Select.select-2921"><span class="linenos">2921</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-2922"><a href="#Select.select-2922"><span class="linenos">2922</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-2923"><a href="#Select.select-2923"><span class="linenos">2923</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.select-2924"><a href="#Select.select-2924"><span class="linenos">2924</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35101,44 +36277,44 @@ 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-2870"><a href="#Select.lateral-2870"><span class="linenos">2870</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span>
-</span><span id="Select.lateral-2871"><a href="#Select.lateral-2871"><span class="linenos">2871</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.lateral-2872"><a href="#Select.lateral-2872"><span class="linenos">2872</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.lateral-2873"><a href="#Select.lateral-2873"><span class="linenos">2873</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.lateral-2874"><a href="#Select.lateral-2874"><span class="linenos">2874</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.lateral-2875"><a href="#Select.lateral-2875"><span class="linenos">2875</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.lateral-2876"><a href="#Select.lateral-2876"><span class="linenos">2876</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.lateral-2877"><a href="#Select.lateral-2877"><span class="linenos">2877</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.lateral-2878"><a href="#Select.lateral-2878"><span class="linenos">2878</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.lateral-2879"><a href="#Select.lateral-2879"><span class="linenos">2879</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
-</span><span id="Select.lateral-2880"><a href="#Select.lateral-2880"><span class="linenos">2880</span></a>
-</span><span id="Select.lateral-2881"><a href="#Select.lateral-2881"><span class="linenos">2881</span></a><span class="sd"> Example:</span>
-</span><span id="Select.lateral-2882"><a href="#Select.lateral-2882"><span class="linenos">2882</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-2883"><a href="#Select.lateral-2883"><span class="linenos">2883</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-2884"><a href="#Select.lateral-2884"><span class="linenos">2884</span></a>
-</span><span id="Select.lateral-2885"><a href="#Select.lateral-2885"><span class="linenos">2885</span></a><span class="sd"> Args:</span>
-</span><span id="Select.lateral-2886"><a href="#Select.lateral-2886"><span class="linenos">2886</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.lateral-2887"><a href="#Select.lateral-2887"><span class="linenos">2887</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.lateral-2888"><a href="#Select.lateral-2888"><span class="linenos">2888</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.lateral-2889"><a href="#Select.lateral-2889"><span class="linenos">2889</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select.lateral-2890"><a href="#Select.lateral-2890"><span class="linenos">2890</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select.lateral-2891"><a href="#Select.lateral-2891"><span class="linenos">2891</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.lateral-2892"><a href="#Select.lateral-2892"><span class="linenos">2892</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.lateral-2893"><a href="#Select.lateral-2893"><span class="linenos">2893</span></a>
-</span><span id="Select.lateral-2894"><a href="#Select.lateral-2894"><span class="linenos">2894</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.lateral-2895"><a href="#Select.lateral-2895"><span class="linenos">2895</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.lateral-2896"><a href="#Select.lateral-2896"><span class="linenos">2896</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.lateral-2897"><a href="#Select.lateral-2897"><span class="linenos">2897</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.lateral-2898"><a href="#Select.lateral-2898"><span class="linenos">2898</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.lateral-2899"><a href="#Select.lateral-2899"><span class="linenos">2899</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-2900"><a href="#Select.lateral-2900"><span class="linenos">2900</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-2901"><a href="#Select.lateral-2901"><span class="linenos">2901</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-2902"><a href="#Select.lateral-2902"><span class="linenos">2902</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-2903"><a href="#Select.lateral-2903"><span class="linenos">2903</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-2904"><a href="#Select.lateral-2904"><span class="linenos">2904</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-2905"><a href="#Select.lateral-2905"><span class="linenos">2905</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-2906"><a href="#Select.lateral-2906"><span class="linenos">2906</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.lateral-2907"><a href="#Select.lateral-2907"><span class="linenos">2907</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.lateral-2926"><a href="#Select.lateral-2926"><span class="linenos">2926</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span>
+</span><span id="Select.lateral-2927"><a href="#Select.lateral-2927"><span class="linenos">2927</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.lateral-2928"><a href="#Select.lateral-2928"><span class="linenos">2928</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.lateral-2929"><a href="#Select.lateral-2929"><span class="linenos">2929</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.lateral-2930"><a href="#Select.lateral-2930"><span class="linenos">2930</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.lateral-2931"><a href="#Select.lateral-2931"><span class="linenos">2931</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.lateral-2932"><a href="#Select.lateral-2932"><span class="linenos">2932</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.lateral-2933"><a href="#Select.lateral-2933"><span class="linenos">2933</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.lateral-2934"><a href="#Select.lateral-2934"><span class="linenos">2934</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.lateral-2935"><a href="#Select.lateral-2935"><span class="linenos">2935</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
+</span><span id="Select.lateral-2936"><a href="#Select.lateral-2936"><span class="linenos">2936</span></a>
+</span><span id="Select.lateral-2937"><a href="#Select.lateral-2937"><span class="linenos">2937</span></a><span class="sd"> Example:</span>
+</span><span id="Select.lateral-2938"><a href="#Select.lateral-2938"><span class="linenos">2938</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-2939"><a href="#Select.lateral-2939"><span class="linenos">2939</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-2940"><a href="#Select.lateral-2940"><span class="linenos">2940</span></a>
+</span><span id="Select.lateral-2941"><a href="#Select.lateral-2941"><span class="linenos">2941</span></a><span class="sd"> Args:</span>
+</span><span id="Select.lateral-2942"><a href="#Select.lateral-2942"><span class="linenos">2942</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.lateral-2943"><a href="#Select.lateral-2943"><span class="linenos">2943</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.lateral-2944"><a href="#Select.lateral-2944"><span class="linenos">2944</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.lateral-2945"><a href="#Select.lateral-2945"><span class="linenos">2945</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select.lateral-2946"><a href="#Select.lateral-2946"><span class="linenos">2946</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select.lateral-2947"><a href="#Select.lateral-2947"><span class="linenos">2947</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.lateral-2948"><a href="#Select.lateral-2948"><span class="linenos">2948</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.lateral-2949"><a href="#Select.lateral-2949"><span class="linenos">2949</span></a>
+</span><span id="Select.lateral-2950"><a href="#Select.lateral-2950"><span class="linenos">2950</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.lateral-2951"><a href="#Select.lateral-2951"><span class="linenos">2951</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.lateral-2952"><a href="#Select.lateral-2952"><span class="linenos">2952</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.lateral-2953"><a href="#Select.lateral-2953"><span class="linenos">2953</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.lateral-2954"><a href="#Select.lateral-2954"><span class="linenos">2954</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.lateral-2955"><a href="#Select.lateral-2955"><span class="linenos">2955</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-2956"><a href="#Select.lateral-2956"><span class="linenos">2956</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-2957"><a href="#Select.lateral-2957"><span class="linenos">2957</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-2958"><a href="#Select.lateral-2958"><span class="linenos">2958</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-2959"><a href="#Select.lateral-2959"><span class="linenos">2959</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-2960"><a href="#Select.lateral-2960"><span class="linenos">2960</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-2961"><a href="#Select.lateral-2961"><span class="linenos">2961</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-2962"><a href="#Select.lateral-2962"><span class="linenos">2962</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.lateral-2963"><a href="#Select.lateral-2963"><span class="linenos">2963</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35186,103 +36362,103 @@ 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-2909"><a href="#Select.join-2909"><span class="linenos">2909</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="Select.join-2910"><a href="#Select.join-2910"><span class="linenos">2910</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.join-2911"><a href="#Select.join-2911"><span class="linenos">2911</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Select.join-2912"><a href="#Select.join-2912"><span class="linenos">2912</span></a> <span class="n">on</span><span 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="Select.join-2913"><a href="#Select.join-2913"><span class="linenos">2913</span></a> <span class="n">using</span><span 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="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</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="Select.join-2914"><a href="#Select.join-2914"><span class="linenos">2914</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.join-2915"><a href="#Select.join-2915"><span class="linenos">2915</span></a> <span class="n">join_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.join-2916"><a href="#Select.join-2916"><span class="linenos">2916</span></a> <span class="n">join_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">Identifier</span> <span class="o">|</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="Select.join-2917"><a href="#Select.join-2917"><span class="linenos">2917</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.join-2918"><a href="#Select.join-2918"><span class="linenos">2918</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.join-2919"><a href="#Select.join-2919"><span class="linenos">2919</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.join-2920"><a href="#Select.join-2920"><span class="linenos">2920</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-2921"><a href="#Select.join-2921"><span class="linenos">2921</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.join-2922"><a href="#Select.join-2922"><span class="linenos">2922</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
-</span><span id="Select.join-2923"><a href="#Select.join-2923"><span class="linenos">2923</span></a>
-</span><span id="Select.join-2924"><a href="#Select.join-2924"><span class="linenos">2924</span></a><span class="sd"> Example:</span>
-</span><span id="Select.join-2925"><a href="#Select.join-2925"><span class="linenos">2925</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-2926"><a href="#Select.join-2926"><span class="linenos">2926</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="Select.join-2927"><a href="#Select.join-2927"><span class="linenos">2927</span></a>
-</span><span id="Select.join-2928"><a href="#Select.join-2928"><span class="linenos">2928</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-2929"><a href="#Select.join-2929"><span class="linenos">2929</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
-</span><span id="Select.join-2930"><a href="#Select.join-2930"><span class="linenos">2930</span></a>
-</span><span id="Select.join-2931"><a href="#Select.join-2931"><span class="linenos">2931</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
-</span><span id="Select.join-2932"><a href="#Select.join-2932"><span class="linenos">2932</span></a>
-</span><span id="Select.join-2933"><a href="#Select.join-2933"><span class="linenos">2933</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-2934"><a href="#Select.join-2934"><span class="linenos">2934</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-2935"><a href="#Select.join-2935"><span class="linenos">2935</span></a>
-</span><span id="Select.join-2936"><a href="#Select.join-2936"><span class="linenos">2936</span></a><span class="sd"> Args:</span>
-</span><span id="Select.join-2937"><a href="#Select.join-2937"><span class="linenos">2937</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="Select.join-2938"><a href="#Select.join-2938"><span class="linenos">2938</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.join-2939"><a href="#Select.join-2939"><span class="linenos">2939</span></a><span class="sd"> on: optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
-</span><span id="Select.join-2940"><a href="#Select.join-2940"><span class="linenos">2940</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.join-2941"><a href="#Select.join-2941"><span class="linenos">2941</span></a><span class="sd"> using: optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
-</span><span id="Select.join-2942"><a href="#Select.join-2942"><span class="linenos">2942</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.join-2943"><a href="#Select.join-2943"><span class="linenos">2943</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.join-2944"><a href="#Select.join-2944"><span class="linenos">2944</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select.join-2945"><a href="#Select.join-2945"><span class="linenos">2945</span></a><span class="sd"> join_type: if set, alter the parsed join type.</span>
-</span><span id="Select.join-2946"><a href="#Select.join-2946"><span class="linenos">2946</span></a><span class="sd"> join_alias: an optional alias for the joined source.</span>
-</span><span id="Select.join-2947"><a href="#Select.join-2947"><span class="linenos">2947</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select.join-2948"><a href="#Select.join-2948"><span class="linenos">2948</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.join-2949"><a href="#Select.join-2949"><span class="linenos">2949</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.join-2950"><a href="#Select.join-2950"><span class="linenos">2950</span></a>
-</span><span id="Select.join-2951"><a href="#Select.join-2951"><span class="linenos">2951</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.join-2952"><a href="#Select.join-2952"><span class="linenos">2952</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.join-2953"><a href="#Select.join-2953"><span class="linenos">2953</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.join-2954"><a href="#Select.join-2954"><span class="linenos">2954</span></a> <span class="n">parse_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;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-2955"><a href="#Select.join-2955"><span class="linenos">2955</span></a>
-</span><span id="Select.join-2956"><a href="#Select.join-2956"><span class="linenos">2956</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Select.join-2957"><a href="#Select.join-2957"><span class="linenos">2957</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-2958"><a href="#Select.join-2958"><span class="linenos">2958</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Select.join-2959"><a href="#Select.join-2959"><span class="linenos">2959</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-2960"><a href="#Select.join-2960"><span class="linenos">2960</span></a>
-</span><span id="Select.join-2961"><a href="#Select.join-2961"><span class="linenos">2961</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-2962"><a href="#Select.join-2962"><span class="linenos">2962</span></a>
-</span><span id="Select.join-2963"><a href="#Select.join-2963"><span class="linenos">2963</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-2964"><a href="#Select.join-2964"><span class="linenos">2964</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-2965"><a href="#Select.join-2965"><span class="linenos">2965</span></a>
-</span><span id="Select.join-2966"><a href="#Select.join-2966"><span class="linenos">2966</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
-</span><span id="Select.join-2967"><a href="#Select.join-2967"><span class="linenos">2967</span></a> <span class="n">method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span>
-</span><span id="Select.join-2968"><a href="#Select.join-2968"><span class="linenos">2968</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-2969"><a href="#Select.join-2969"><span class="linenos">2969</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-2970"><a href="#Select.join-2970"><span class="linenos">2970</span></a>
-</span><span id="Select.join-2971"><a href="#Select.join-2971"><span class="linenos">2971</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="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-2972"><a href="#Select.join-2972"><span class="linenos">2972</span></a>
-</span><span id="Select.join-2973"><a href="#Select.join-2973"><span class="linenos">2973</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="Select.join-2974"><a href="#Select.join-2974"><span class="linenos">2974</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Select.join-2975"><a href="#Select.join-2975"><span class="linenos">2975</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Select.join-2976"><a href="#Select.join-2976"><span class="linenos">2976</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-2977"><a href="#Select.join-2977"><span class="linenos">2977</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Select.join-2978"><a href="#Select.join-2978"><span class="linenos">2978</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.join-2965"><a href="#Select.join-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="Select.join-2966"><a href="#Select.join-2966"><span class="linenos">2966</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.join-2967"><a href="#Select.join-2967"><span class="linenos">2967</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Select.join-2968"><a href="#Select.join-2968"><span class="linenos">2968</span></a> <span class="n">on</span><span 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="Select.join-2969"><a href="#Select.join-2969"><span class="linenos">2969</span></a> <span class="n">using</span><span 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="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</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="Select.join-2970"><a href="#Select.join-2970"><span class="linenos">2970</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.join-2971"><a href="#Select.join-2971"><span class="linenos">2971</span></a> <span class="n">join_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.join-2972"><a href="#Select.join-2972"><span class="linenos">2972</span></a> <span class="n">join_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">Identifier</span> <span class="o">|</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="Select.join-2973"><a href="#Select.join-2973"><span class="linenos">2973</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.join-2974"><a href="#Select.join-2974"><span class="linenos">2974</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.join-2975"><a href="#Select.join-2975"><span class="linenos">2975</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.join-2976"><a href="#Select.join-2976"><span class="linenos">2976</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-2977"><a href="#Select.join-2977"><span class="linenos">2977</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.join-2978"><a href="#Select.join-2978"><span class="linenos">2978</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
</span><span id="Select.join-2979"><a href="#Select.join-2979"><span class="linenos">2979</span></a>
-</span><span id="Select.join-2980"><a href="#Select.join-2980"><span class="linenos">2980</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
-</span><span id="Select.join-2981"><a href="#Select.join-2981"><span class="linenos">2981</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_list</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-2982"><a href="#Select.join-2982"><span class="linenos">2982</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-2980"><a href="#Select.join-2980"><span class="linenos">2980</span></a><span class="sd"> Example:</span>
+</span><span id="Select.join-2981"><a href="#Select.join-2981"><span class="linenos">2981</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-2982"><a href="#Select.join-2982"><span class="linenos">2982</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
</span><span id="Select.join-2983"><a href="#Select.join-2983"><span class="linenos">2983</span></a>
-</span><span id="Select.join-2984"><a href="#Select.join-2984"><span class="linenos">2984</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Select.join-2985"><a href="#Select.join-2985"><span class="linenos">2985</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-2986"><a href="#Select.join-2986"><span class="linenos">2986</span></a> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
-</span><span id="Select.join-2987"><a href="#Select.join-2987"><span class="linenos">2987</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-2988"><a href="#Select.join-2988"><span class="linenos">2988</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-2989"><a href="#Select.join-2989"><span class="linenos">2989</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-2990"><a href="#Select.join-2990"><span class="linenos">2990</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-2991"><a href="#Select.join-2991"><span class="linenos">2991</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="Select.join-2992"><a href="#Select.join-2992"><span class="linenos">2992</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.join-2993"><a href="#Select.join-2993"><span class="linenos">2993</span></a> <span class="p">)</span>
-</span><span id="Select.join-2994"><a href="#Select.join-2994"><span class="linenos">2994</span></a>
-</span><span id="Select.join-2995"><a href="#Select.join-2995"><span class="linenos">2995</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
-</span><span id="Select.join-2996"><a href="#Select.join-2996"><span class="linenos">2996</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-2997"><a href="#Select.join-2997"><span class="linenos">2997</span></a>
-</span><span id="Select.join-2998"><a href="#Select.join-2998"><span class="linenos">2998</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.join-2999"><a href="#Select.join-2999"><span class="linenos">2999</span></a> <span class="n">join</span><span class="p">,</span>
-</span><span id="Select.join-3000"><a href="#Select.join-3000"><span class="linenos">3000</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-3001"><a href="#Select.join-3001"><span class="linenos">3001</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-3002"><a href="#Select.join-3002"><span class="linenos">3002</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-3003"><a href="#Select.join-3003"><span class="linenos">3003</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-3004"><a href="#Select.join-3004"><span class="linenos">3004</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.join-3005"><a href="#Select.join-3005"><span class="linenos">3005</span></a> <span class="p">)</span>
+</span><span id="Select.join-2984"><a href="#Select.join-2984"><span class="linenos">2984</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-2985"><a href="#Select.join-2985"><span class="linenos">2985</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
+</span><span id="Select.join-2986"><a href="#Select.join-2986"><span class="linenos">2986</span></a>
+</span><span id="Select.join-2987"><a href="#Select.join-2987"><span class="linenos">2987</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
+</span><span id="Select.join-2988"><a href="#Select.join-2988"><span class="linenos">2988</span></a>
+</span><span id="Select.join-2989"><a href="#Select.join-2989"><span class="linenos">2989</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-2990"><a href="#Select.join-2990"><span class="linenos">2990</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-2991"><a href="#Select.join-2991"><span class="linenos">2991</span></a>
+</span><span id="Select.join-2992"><a href="#Select.join-2992"><span class="linenos">2992</span></a><span class="sd"> Args:</span>
+</span><span id="Select.join-2993"><a href="#Select.join-2993"><span class="linenos">2993</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="Select.join-2994"><a href="#Select.join-2994"><span class="linenos">2994</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.join-2995"><a href="#Select.join-2995"><span class="linenos">2995</span></a><span class="sd"> on: optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
+</span><span id="Select.join-2996"><a href="#Select.join-2996"><span class="linenos">2996</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.join-2997"><a href="#Select.join-2997"><span class="linenos">2997</span></a><span class="sd"> using: optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
+</span><span id="Select.join-2998"><a href="#Select.join-2998"><span class="linenos">2998</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.join-2999"><a href="#Select.join-2999"><span class="linenos">2999</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.join-3000"><a href="#Select.join-3000"><span class="linenos">3000</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select.join-3001"><a href="#Select.join-3001"><span class="linenos">3001</span></a><span class="sd"> join_type: if set, alter the parsed join type.</span>
+</span><span id="Select.join-3002"><a href="#Select.join-3002"><span class="linenos">3002</span></a><span class="sd"> join_alias: an optional alias for the joined source.</span>
+</span><span id="Select.join-3003"><a href="#Select.join-3003"><span class="linenos">3003</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select.join-3004"><a href="#Select.join-3004"><span class="linenos">3004</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.join-3005"><a href="#Select.join-3005"><span class="linenos">3005</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.join-3006"><a href="#Select.join-3006"><span class="linenos">3006</span></a>
+</span><span id="Select.join-3007"><a href="#Select.join-3007"><span class="linenos">3007</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.join-3008"><a href="#Select.join-3008"><span class="linenos">3008</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.join-3009"><a href="#Select.join-3009"><span class="linenos">3009</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.join-3010"><a href="#Select.join-3010"><span class="linenos">3010</span></a> <span class="n">parse_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;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-3011"><a href="#Select.join-3011"><span class="linenos">3011</span></a>
+</span><span id="Select.join-3012"><a href="#Select.join-3012"><span class="linenos">3012</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Select.join-3013"><a href="#Select.join-3013"><span class="linenos">3013</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-3014"><a href="#Select.join-3014"><span class="linenos">3014</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Select.join-3015"><a href="#Select.join-3015"><span class="linenos">3015</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-3016"><a href="#Select.join-3016"><span class="linenos">3016</span></a>
+</span><span id="Select.join-3017"><a href="#Select.join-3017"><span class="linenos">3017</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-3018"><a href="#Select.join-3018"><span class="linenos">3018</span></a>
+</span><span id="Select.join-3019"><a href="#Select.join-3019"><span class="linenos">3019</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-3020"><a href="#Select.join-3020"><span class="linenos">3020</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-3021"><a href="#Select.join-3021"><span class="linenos">3021</span></a>
+</span><span id="Select.join-3022"><a href="#Select.join-3022"><span class="linenos">3022</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
+</span><span id="Select.join-3023"><a href="#Select.join-3023"><span class="linenos">3023</span></a> <span class="n">method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span>
+</span><span id="Select.join-3024"><a href="#Select.join-3024"><span class="linenos">3024</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-3025"><a href="#Select.join-3025"><span class="linenos">3025</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-3026"><a href="#Select.join-3026"><span class="linenos">3026</span></a>
+</span><span id="Select.join-3027"><a href="#Select.join-3027"><span class="linenos">3027</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="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-3028"><a href="#Select.join-3028"><span class="linenos">3028</span></a>
+</span><span id="Select.join-3029"><a href="#Select.join-3029"><span class="linenos">3029</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="Select.join-3030"><a href="#Select.join-3030"><span class="linenos">3030</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Select.join-3031"><a href="#Select.join-3031"><span class="linenos">3031</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Select.join-3032"><a href="#Select.join-3032"><span class="linenos">3032</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-3033"><a href="#Select.join-3033"><span class="linenos">3033</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Select.join-3034"><a href="#Select.join-3034"><span class="linenos">3034</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-3035"><a href="#Select.join-3035"><span class="linenos">3035</span></a>
+</span><span id="Select.join-3036"><a href="#Select.join-3036"><span class="linenos">3036</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
+</span><span id="Select.join-3037"><a href="#Select.join-3037"><span class="linenos">3037</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_list</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-3038"><a href="#Select.join-3038"><span class="linenos">3038</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-3039"><a href="#Select.join-3039"><span class="linenos">3039</span></a>
+</span><span id="Select.join-3040"><a href="#Select.join-3040"><span class="linenos">3040</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Select.join-3041"><a href="#Select.join-3041"><span class="linenos">3041</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-3042"><a href="#Select.join-3042"><span class="linenos">3042</span></a> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
+</span><span id="Select.join-3043"><a href="#Select.join-3043"><span class="linenos">3043</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-3044"><a href="#Select.join-3044"><span class="linenos">3044</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-3045"><a href="#Select.join-3045"><span class="linenos">3045</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-3046"><a href="#Select.join-3046"><span class="linenos">3046</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-3047"><a href="#Select.join-3047"><span class="linenos">3047</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="Select.join-3048"><a href="#Select.join-3048"><span class="linenos">3048</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.join-3049"><a href="#Select.join-3049"><span class="linenos">3049</span></a> <span class="p">)</span>
+</span><span id="Select.join-3050"><a href="#Select.join-3050"><span class="linenos">3050</span></a>
+</span><span id="Select.join-3051"><a href="#Select.join-3051"><span class="linenos">3051</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
+</span><span id="Select.join-3052"><a href="#Select.join-3052"><span class="linenos">3052</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-3053"><a href="#Select.join-3053"><span class="linenos">3053</span></a>
+</span><span id="Select.join-3054"><a href="#Select.join-3054"><span class="linenos">3054</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.join-3055"><a href="#Select.join-3055"><span class="linenos">3055</span></a> <span class="n">join</span><span class="p">,</span>
+</span><span id="Select.join-3056"><a href="#Select.join-3056"><span class="linenos">3056</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-3057"><a href="#Select.join-3057"><span class="linenos">3057</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-3058"><a href="#Select.join-3058"><span class="linenos">3058</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-3059"><a href="#Select.join-3059"><span class="linenos">3059</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-3060"><a href="#Select.join-3060"><span class="linenos">3060</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.join-3061"><a href="#Select.join-3061"><span class="linenos">3061</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35350,44 +36526,44 @@ 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-3007"><a href="#Select.where-3007"><span class="linenos">3007</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="Select.where-3008"><a href="#Select.where-3008"><span class="linenos">3008</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.where-3009"><a href="#Select.where-3009"><span class="linenos">3009</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.where-3010"><a href="#Select.where-3010"><span class="linenos">3010</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.where-3011"><a href="#Select.where-3011"><span class="linenos">3011</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.where-3012"><a href="#Select.where-3012"><span class="linenos">3012</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.where-3013"><a href="#Select.where-3013"><span class="linenos">3013</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.where-3014"><a href="#Select.where-3014"><span class="linenos">3014</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.where-3015"><a href="#Select.where-3015"><span class="linenos">3015</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.where-3016"><a href="#Select.where-3016"><span class="linenos">3016</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Select.where-3017"><a href="#Select.where-3017"><span class="linenos">3017</span></a>
-</span><span id="Select.where-3018"><a href="#Select.where-3018"><span class="linenos">3018</span></a><span class="sd"> Example:</span>
-</span><span id="Select.where-3019"><a href="#Select.where-3019"><span class="linenos">3019</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-3020"><a href="#Select.where-3020"><span class="linenos">3020</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-3021"><a href="#Select.where-3021"><span class="linenos">3021</span></a>
-</span><span id="Select.where-3022"><a href="#Select.where-3022"><span class="linenos">3022</span></a><span class="sd"> Args:</span>
-</span><span id="Select.where-3023"><a href="#Select.where-3023"><span class="linenos">3023</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.where-3024"><a href="#Select.where-3024"><span class="linenos">3024</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.where-3025"><a href="#Select.where-3025"><span class="linenos">3025</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select.where-3026"><a href="#Select.where-3026"><span class="linenos">3026</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select.where-3027"><a href="#Select.where-3027"><span class="linenos">3027</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select.where-3028"><a href="#Select.where-3028"><span class="linenos">3028</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select.where-3029"><a href="#Select.where-3029"><span class="linenos">3029</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.where-3030"><a href="#Select.where-3030"><span class="linenos">3030</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.where-3031"><a href="#Select.where-3031"><span class="linenos">3031</span></a>
-</span><span id="Select.where-3032"><a href="#Select.where-3032"><span class="linenos">3032</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.where-3033"><a href="#Select.where-3033"><span class="linenos">3033</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.where-3034"><a href="#Select.where-3034"><span class="linenos">3034</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.where-3035"><a href="#Select.where-3035"><span class="linenos">3035</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select.where-3036"><a href="#Select.where-3036"><span class="linenos">3036</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.where-3037"><a href="#Select.where-3037"><span class="linenos">3037</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-3038"><a href="#Select.where-3038"><span class="linenos">3038</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-3039"><a href="#Select.where-3039"><span class="linenos">3039</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-3040"><a href="#Select.where-3040"><span class="linenos">3040</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-3041"><a href="#Select.where-3041"><span class="linenos">3041</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-3042"><a href="#Select.where-3042"><span class="linenos">3042</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-3043"><a href="#Select.where-3043"><span class="linenos">3043</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.where-3044"><a href="#Select.where-3044"><span class="linenos">3044</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.where-3063"><a href="#Select.where-3063"><span class="linenos">3063</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="Select.where-3064"><a href="#Select.where-3064"><span class="linenos">3064</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.where-3065"><a href="#Select.where-3065"><span class="linenos">3065</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.where-3066"><a href="#Select.where-3066"><span class="linenos">3066</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.where-3067"><a href="#Select.where-3067"><span class="linenos">3067</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.where-3068"><a href="#Select.where-3068"><span class="linenos">3068</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.where-3069"><a href="#Select.where-3069"><span class="linenos">3069</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.where-3070"><a href="#Select.where-3070"><span class="linenos">3070</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.where-3071"><a href="#Select.where-3071"><span class="linenos">3071</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.where-3072"><a href="#Select.where-3072"><span class="linenos">3072</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Select.where-3073"><a href="#Select.where-3073"><span class="linenos">3073</span></a>
+</span><span id="Select.where-3074"><a href="#Select.where-3074"><span class="linenos">3074</span></a><span class="sd"> Example:</span>
+</span><span id="Select.where-3075"><a href="#Select.where-3075"><span class="linenos">3075</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-3076"><a href="#Select.where-3076"><span class="linenos">3076</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-3077"><a href="#Select.where-3077"><span class="linenos">3077</span></a>
+</span><span id="Select.where-3078"><a href="#Select.where-3078"><span class="linenos">3078</span></a><span class="sd"> Args:</span>
+</span><span id="Select.where-3079"><a href="#Select.where-3079"><span class="linenos">3079</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.where-3080"><a href="#Select.where-3080"><span class="linenos">3080</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.where-3081"><a href="#Select.where-3081"><span class="linenos">3081</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select.where-3082"><a href="#Select.where-3082"><span class="linenos">3082</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select.where-3083"><a href="#Select.where-3083"><span class="linenos">3083</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select.where-3084"><a href="#Select.where-3084"><span class="linenos">3084</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select.where-3085"><a href="#Select.where-3085"><span class="linenos">3085</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.where-3086"><a href="#Select.where-3086"><span class="linenos">3086</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.where-3087"><a href="#Select.where-3087"><span class="linenos">3087</span></a>
+</span><span id="Select.where-3088"><a href="#Select.where-3088"><span class="linenos">3088</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.where-3089"><a href="#Select.where-3089"><span class="linenos">3089</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.where-3090"><a href="#Select.where-3090"><span class="linenos">3090</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.where-3091"><a href="#Select.where-3091"><span class="linenos">3091</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select.where-3092"><a href="#Select.where-3092"><span class="linenos">3092</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.where-3093"><a href="#Select.where-3093"><span class="linenos">3093</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-3094"><a href="#Select.where-3094"><span class="linenos">3094</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-3095"><a href="#Select.where-3095"><span class="linenos">3095</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-3096"><a href="#Select.where-3096"><span class="linenos">3096</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-3097"><a href="#Select.where-3097"><span class="linenos">3097</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-3098"><a href="#Select.where-3098"><span class="linenos">3098</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-3099"><a href="#Select.where-3099"><span class="linenos">3099</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.where-3100"><a href="#Select.where-3100"><span class="linenos">3100</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35436,44 +36612,44 @@ 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-3046"><a href="#Select.having-3046"><span class="linenos">3046</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span>
-</span><span id="Select.having-3047"><a href="#Select.having-3047"><span class="linenos">3047</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.having-3048"><a href="#Select.having-3048"><span class="linenos">3048</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.having-3049"><a href="#Select.having-3049"><span class="linenos">3049</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.having-3050"><a href="#Select.having-3050"><span class="linenos">3050</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.having-3051"><a href="#Select.having-3051"><span class="linenos">3051</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.having-3052"><a href="#Select.having-3052"><span class="linenos">3052</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.having-3053"><a href="#Select.having-3053"><span class="linenos">3053</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.having-3054"><a href="#Select.having-3054"><span class="linenos">3054</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.having-3055"><a href="#Select.having-3055"><span class="linenos">3055</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
-</span><span id="Select.having-3056"><a href="#Select.having-3056"><span class="linenos">3056</span></a>
-</span><span id="Select.having-3057"><a href="#Select.having-3057"><span class="linenos">3057</span></a><span class="sd"> Example:</span>
-</span><span id="Select.having-3058"><a href="#Select.having-3058"><span class="linenos">3058</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-3059"><a href="#Select.having-3059"><span class="linenos">3059</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-3060"><a href="#Select.having-3060"><span class="linenos">3060</span></a>
-</span><span id="Select.having-3061"><a href="#Select.having-3061"><span class="linenos">3061</span></a><span class="sd"> Args:</span>
-</span><span id="Select.having-3062"><a href="#Select.having-3062"><span class="linenos">3062</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.having-3063"><a href="#Select.having-3063"><span class="linenos">3063</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.having-3064"><a href="#Select.having-3064"><span class="linenos">3064</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select.having-3065"><a href="#Select.having-3065"><span class="linenos">3065</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select.having-3066"><a href="#Select.having-3066"><span class="linenos">3066</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select.having-3067"><a href="#Select.having-3067"><span class="linenos">3067</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select.having-3068"><a href="#Select.having-3068"><span class="linenos">3068</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.having-3069"><a href="#Select.having-3069"><span class="linenos">3069</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.having-3070"><a href="#Select.having-3070"><span class="linenos">3070</span></a>
-</span><span id="Select.having-3071"><a href="#Select.having-3071"><span class="linenos">3071</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.having-3072"><a href="#Select.having-3072"><span class="linenos">3072</span></a><span class="sd"> The modified Select expression.</span>
-</span><span id="Select.having-3073"><a href="#Select.having-3073"><span class="linenos">3073</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.having-3074"><a href="#Select.having-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select.having-3075"><a href="#Select.having-3075"><span class="linenos">3075</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.having-3076"><a href="#Select.having-3076"><span class="linenos">3076</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-3077"><a href="#Select.having-3077"><span class="linenos">3077</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-3078"><a href="#Select.having-3078"><span class="linenos">3078</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-3079"><a href="#Select.having-3079"><span class="linenos">3079</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-3080"><a href="#Select.having-3080"><span class="linenos">3080</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-3081"><a href="#Select.having-3081"><span class="linenos">3081</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-3082"><a href="#Select.having-3082"><span class="linenos">3082</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.having-3083"><a href="#Select.having-3083"><span class="linenos">3083</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.having-3102"><a href="#Select.having-3102"><span class="linenos">3102</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span>
+</span><span id="Select.having-3103"><a href="#Select.having-3103"><span class="linenos">3103</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.having-3104"><a href="#Select.having-3104"><span class="linenos">3104</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.having-3105"><a href="#Select.having-3105"><span class="linenos">3105</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.having-3106"><a href="#Select.having-3106"><span class="linenos">3106</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.having-3107"><a href="#Select.having-3107"><span class="linenos">3107</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.having-3108"><a href="#Select.having-3108"><span class="linenos">3108</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.having-3109"><a href="#Select.having-3109"><span class="linenos">3109</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.having-3110"><a href="#Select.having-3110"><span class="linenos">3110</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.having-3111"><a href="#Select.having-3111"><span class="linenos">3111</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
+</span><span id="Select.having-3112"><a href="#Select.having-3112"><span class="linenos">3112</span></a>
+</span><span id="Select.having-3113"><a href="#Select.having-3113"><span class="linenos">3113</span></a><span class="sd"> Example:</span>
+</span><span id="Select.having-3114"><a href="#Select.having-3114"><span class="linenos">3114</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-3115"><a href="#Select.having-3115"><span class="linenos">3115</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-3116"><a href="#Select.having-3116"><span class="linenos">3116</span></a>
+</span><span id="Select.having-3117"><a href="#Select.having-3117"><span class="linenos">3117</span></a><span class="sd"> Args:</span>
+</span><span id="Select.having-3118"><a href="#Select.having-3118"><span class="linenos">3118</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.having-3119"><a href="#Select.having-3119"><span class="linenos">3119</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.having-3120"><a href="#Select.having-3120"><span class="linenos">3120</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select.having-3121"><a href="#Select.having-3121"><span class="linenos">3121</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select.having-3122"><a href="#Select.having-3122"><span class="linenos">3122</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select.having-3123"><a href="#Select.having-3123"><span class="linenos">3123</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select.having-3124"><a href="#Select.having-3124"><span class="linenos">3124</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.having-3125"><a href="#Select.having-3125"><span class="linenos">3125</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.having-3126"><a href="#Select.having-3126"><span class="linenos">3126</span></a>
+</span><span id="Select.having-3127"><a href="#Select.having-3127"><span class="linenos">3127</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.having-3128"><a href="#Select.having-3128"><span class="linenos">3128</span></a><span class="sd"> The modified Select expression.</span>
+</span><span id="Select.having-3129"><a href="#Select.having-3129"><span class="linenos">3129</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.having-3130"><a href="#Select.having-3130"><span class="linenos">3130</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select.having-3131"><a href="#Select.having-3131"><span class="linenos">3131</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.having-3132"><a href="#Select.having-3132"><span class="linenos">3132</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-3133"><a href="#Select.having-3133"><span class="linenos">3133</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-3134"><a href="#Select.having-3134"><span class="linenos">3134</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-3135"><a href="#Select.having-3135"><span class="linenos">3135</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-3136"><a href="#Select.having-3136"><span class="linenos">3136</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-3137"><a href="#Select.having-3137"><span class="linenos">3137</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-3138"><a href="#Select.having-3138"><span class="linenos">3138</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.having-3139"><a href="#Select.having-3139"><span class="linenos">3139</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35522,24 +36698,24 @@ 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-3085"><a href="#Select.window-3085"><span class="linenos">3085</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span>
-</span><span id="Select.window-3086"><a href="#Select.window-3086"><span class="linenos">3086</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.window-3087"><a href="#Select.window-3087"><span class="linenos">3087</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.window-3088"><a href="#Select.window-3088"><span class="linenos">3088</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.window-3089"><a href="#Select.window-3089"><span class="linenos">3089</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.window-3090"><a href="#Select.window-3090"><span class="linenos">3090</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.window-3091"><a href="#Select.window-3091"><span class="linenos">3091</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.window-3092"><a href="#Select.window-3092"><span class="linenos">3092</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.window-3093"><a href="#Select.window-3093"><span class="linenos">3093</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.window-3094"><a href="#Select.window-3094"><span class="linenos">3094</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.window-3095"><a href="#Select.window-3095"><span class="linenos">3095</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-3096"><a href="#Select.window-3096"><span class="linenos">3096</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-3097"><a href="#Select.window-3097"><span class="linenos">3097</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-3098"><a href="#Select.window-3098"><span class="linenos">3098</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-3099"><a href="#Select.window-3099"><span class="linenos">3099</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-3100"><a href="#Select.window-3100"><span class="linenos">3100</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-3101"><a href="#Select.window-3101"><span class="linenos">3101</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.window-3102"><a href="#Select.window-3102"><span class="linenos">3102</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.window-3141"><a href="#Select.window-3141"><span class="linenos">3141</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span>
+</span><span id="Select.window-3142"><a href="#Select.window-3142"><span class="linenos">3142</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.window-3143"><a href="#Select.window-3143"><span class="linenos">3143</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.window-3144"><a href="#Select.window-3144"><span class="linenos">3144</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.window-3145"><a href="#Select.window-3145"><span class="linenos">3145</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.window-3146"><a href="#Select.window-3146"><span class="linenos">3146</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.window-3147"><a href="#Select.window-3147"><span class="linenos">3147</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.window-3148"><a href="#Select.window-3148"><span class="linenos">3148</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.window-3149"><a href="#Select.window-3149"><span class="linenos">3149</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.window-3150"><a href="#Select.window-3150"><span class="linenos">3150</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.window-3151"><a href="#Select.window-3151"><span class="linenos">3151</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-3152"><a href="#Select.window-3152"><span class="linenos">3152</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-3153"><a href="#Select.window-3153"><span class="linenos">3153</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-3154"><a href="#Select.window-3154"><span class="linenos">3154</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-3155"><a href="#Select.window-3155"><span class="linenos">3155</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-3156"><a href="#Select.window-3156"><span class="linenos">3156</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-3157"><a href="#Select.window-3157"><span class="linenos">3157</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.window-3158"><a href="#Select.window-3158"><span class="linenos">3158</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35557,24 +36733,24 @@ 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-3104"><a href="#Select.qualify-3104"><span class="linenos">3104</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span>
-</span><span id="Select.qualify-3105"><a href="#Select.qualify-3105"><span class="linenos">3105</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.qualify-3106"><a href="#Select.qualify-3106"><span class="linenos">3106</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
-</span><span id="Select.qualify-3107"><a href="#Select.qualify-3107"><span class="linenos">3107</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.qualify-3108"><a href="#Select.qualify-3108"><span class="linenos">3108</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.qualify-3109"><a href="#Select.qualify-3109"><span class="linenos">3109</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.qualify-3110"><a href="#Select.qualify-3110"><span class="linenos">3110</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.qualify-3111"><a href="#Select.qualify-3111"><span class="linenos">3111</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.qualify-3112"><a href="#Select.qualify-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select.qualify-3113"><a href="#Select.qualify-3113"><span class="linenos">3113</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.qualify-3114"><a href="#Select.qualify-3114"><span class="linenos">3114</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-3115"><a href="#Select.qualify-3115"><span class="linenos">3115</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-3116"><a href="#Select.qualify-3116"><span class="linenos">3116</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-3117"><a href="#Select.qualify-3117"><span class="linenos">3117</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-3118"><a href="#Select.qualify-3118"><span class="linenos">3118</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-3119"><a href="#Select.qualify-3119"><span class="linenos">3119</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-3120"><a href="#Select.qualify-3120"><span class="linenos">3120</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.qualify-3121"><a href="#Select.qualify-3121"><span class="linenos">3121</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.qualify-3160"><a href="#Select.qualify-3160"><span class="linenos">3160</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span>
+</span><span id="Select.qualify-3161"><a href="#Select.qualify-3161"><span class="linenos">3161</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.qualify-3162"><a href="#Select.qualify-3162"><span class="linenos">3162</span></a> <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">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">],</span>
+</span><span id="Select.qualify-3163"><a href="#Select.qualify-3163"><span class="linenos">3163</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.qualify-3164"><a href="#Select.qualify-3164"><span class="linenos">3164</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.qualify-3165"><a href="#Select.qualify-3165"><span class="linenos">3165</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.qualify-3166"><a href="#Select.qualify-3166"><span class="linenos">3166</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.qualify-3167"><a href="#Select.qualify-3167"><span class="linenos">3167</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.qualify-3168"><a href="#Select.qualify-3168"><span class="linenos">3168</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select.qualify-3169"><a href="#Select.qualify-3169"><span class="linenos">3169</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.qualify-3170"><a href="#Select.qualify-3170"><span class="linenos">3170</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-3171"><a href="#Select.qualify-3171"><span class="linenos">3171</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-3172"><a href="#Select.qualify-3172"><span class="linenos">3172</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-3173"><a href="#Select.qualify-3173"><span class="linenos">3173</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-3174"><a href="#Select.qualify-3174"><span class="linenos">3174</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-3175"><a href="#Select.qualify-3175"><span class="linenos">3175</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-3176"><a href="#Select.qualify-3176"><span class="linenos">3176</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.qualify-3177"><a href="#Select.qualify-3177"><span class="linenos">3177</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35592,28 +36768,28 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Select.distinct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.distinct-3123"><a href="#Select.distinct-3123"><span class="linenos">3123</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span>
-</span><span id="Select.distinct-3124"><a href="#Select.distinct-3124"><span class="linenos">3124</span></a> <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">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="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><span id="Select.distinct-3125"><a href="#Select.distinct-3125"><span class="linenos">3125</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.distinct-3126"><a href="#Select.distinct-3126"><span class="linenos">3126</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.distinct-3127"><a href="#Select.distinct-3127"><span class="linenos">3127</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select.distinct-3128"><a href="#Select.distinct-3128"><span class="linenos">3128</span></a>
-</span><span id="Select.distinct-3129"><a href="#Select.distinct-3129"><span class="linenos">3129</span></a><span class="sd"> Example:</span>
-</span><span id="Select.distinct-3130"><a href="#Select.distinct-3130"><span class="linenos">3130</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-3131"><a href="#Select.distinct-3131"><span class="linenos">3131</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
-</span><span id="Select.distinct-3132"><a href="#Select.distinct-3132"><span class="linenos">3132</span></a>
-</span><span id="Select.distinct-3133"><a href="#Select.distinct-3133"><span class="linenos">3133</span></a><span class="sd"> Args:</span>
-</span><span id="Select.distinct-3134"><a href="#Select.distinct-3134"><span class="linenos">3134</span></a><span class="sd"> ons: the expressions to distinct on</span>
-</span><span id="Select.distinct-3135"><a href="#Select.distinct-3135"><span class="linenos">3135</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
-</span><span id="Select.distinct-3136"><a href="#Select.distinct-3136"><span class="linenos">3136</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.distinct-3137"><a href="#Select.distinct-3137"><span class="linenos">3137</span></a>
-</span><span id="Select.distinct-3138"><a href="#Select.distinct-3138"><span class="linenos">3138</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.distinct-3139"><a href="#Select.distinct-3139"><span class="linenos">3139</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.distinct-3140"><a href="#Select.distinct-3140"><span class="linenos">3140</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.distinct-3141"><a href="#Select.distinct-3141"><span class="linenos">3141</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-3142"><a href="#Select.distinct-3142"><span class="linenos">3142</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="k">if</span> <span class="n">on</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-3143"><a href="#Select.distinct-3143"><span class="linenos">3143</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-3144"><a href="#Select.distinct-3144"><span class="linenos">3144</span></a> <span class="k">return</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.distinct-3179"><a href="#Select.distinct-3179"><span class="linenos">3179</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span>
+</span><span id="Select.distinct-3180"><a href="#Select.distinct-3180"><span class="linenos">3180</span></a> <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">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="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><span id="Select.distinct-3181"><a href="#Select.distinct-3181"><span class="linenos">3181</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.distinct-3182"><a href="#Select.distinct-3182"><span class="linenos">3182</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.distinct-3183"><a href="#Select.distinct-3183"><span class="linenos">3183</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select.distinct-3184"><a href="#Select.distinct-3184"><span class="linenos">3184</span></a>
+</span><span id="Select.distinct-3185"><a href="#Select.distinct-3185"><span class="linenos">3185</span></a><span class="sd"> Example:</span>
+</span><span id="Select.distinct-3186"><a href="#Select.distinct-3186"><span class="linenos">3186</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-3187"><a href="#Select.distinct-3187"><span class="linenos">3187</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
+</span><span id="Select.distinct-3188"><a href="#Select.distinct-3188"><span class="linenos">3188</span></a>
+</span><span id="Select.distinct-3189"><a href="#Select.distinct-3189"><span class="linenos">3189</span></a><span class="sd"> Args:</span>
+</span><span id="Select.distinct-3190"><a href="#Select.distinct-3190"><span class="linenos">3190</span></a><span class="sd"> ons: the expressions to distinct on</span>
+</span><span id="Select.distinct-3191"><a href="#Select.distinct-3191"><span class="linenos">3191</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
+</span><span id="Select.distinct-3192"><a href="#Select.distinct-3192"><span class="linenos">3192</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.distinct-3193"><a href="#Select.distinct-3193"><span class="linenos">3193</span></a>
+</span><span id="Select.distinct-3194"><a href="#Select.distinct-3194"><span class="linenos">3194</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.distinct-3195"><a href="#Select.distinct-3195"><span class="linenos">3195</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.distinct-3196"><a href="#Select.distinct-3196"><span class="linenos">3196</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.distinct-3197"><a href="#Select.distinct-3197"><span class="linenos">3197</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-3198"><a href="#Select.distinct-3198"><span class="linenos">3198</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="k">if</span> <span class="n">on</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-3199"><a href="#Select.distinct-3199"><span class="linenos">3199</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-3200"><a href="#Select.distinct-3200"><span class="linenos">3200</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
@@ -35657,49 +36833,49 @@ 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-3146"><a href="#Select.ctas-3146"><span class="linenos">3146</span></a> <span class="k">def</span> <span class="nf">ctas</span><span class="p">(</span>
-</span><span id="Select.ctas-3147"><a href="#Select.ctas-3147"><span class="linenos">3147</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.ctas-3148"><a href="#Select.ctas-3148"><span class="linenos">3148</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Select.ctas-3149"><a href="#Select.ctas-3149"><span class="linenos">3149</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.ctas-3150"><a href="#Select.ctas-3150"><span class="linenos">3150</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.ctas-3151"><a href="#Select.ctas-3151"><span class="linenos">3151</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.ctas-3152"><a href="#Select.ctas-3152"><span class="linenos">3152</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.ctas-3153"><a href="#Select.ctas-3153"><span class="linenos">3153</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Create</span><span class="p">:</span>
-</span><span id="Select.ctas-3154"><a href="#Select.ctas-3154"><span class="linenos">3154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.ctas-3155"><a href="#Select.ctas-3155"><span class="linenos">3155</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
-</span><span id="Select.ctas-3156"><a href="#Select.ctas-3156"><span class="linenos">3156</span></a>
-</span><span id="Select.ctas-3157"><a href="#Select.ctas-3157"><span class="linenos">3157</span></a><span class="sd"> Example:</span>
-</span><span id="Select.ctas-3158"><a href="#Select.ctas-3158"><span class="linenos">3158</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-3159"><a href="#Select.ctas-3159"><span class="linenos">3159</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
-</span><span id="Select.ctas-3160"><a href="#Select.ctas-3160"><span class="linenos">3160</span></a>
-</span><span id="Select.ctas-3161"><a href="#Select.ctas-3161"><span class="linenos">3161</span></a><span class="sd"> Args:</span>
-</span><span id="Select.ctas-3162"><a href="#Select.ctas-3162"><span class="linenos">3162</span></a><span class="sd"> table: the SQL code string to parse as the table name.</span>
-</span><span id="Select.ctas-3163"><a href="#Select.ctas-3163"><span class="linenos">3163</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.ctas-3164"><a href="#Select.ctas-3164"><span class="linenos">3164</span></a><span class="sd"> properties: an optional mapping of table properties</span>
-</span><span id="Select.ctas-3165"><a href="#Select.ctas-3165"><span class="linenos">3165</span></a><span class="sd"> dialect: the dialect used to parse the input table.</span>
-</span><span id="Select.ctas-3166"><a href="#Select.ctas-3166"><span class="linenos">3166</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.ctas-3167"><a href="#Select.ctas-3167"><span class="linenos">3167</span></a><span class="sd"> opts: other options to use to parse the input table.</span>
-</span><span id="Select.ctas-3168"><a href="#Select.ctas-3168"><span class="linenos">3168</span></a>
-</span><span id="Select.ctas-3169"><a href="#Select.ctas-3169"><span class="linenos">3169</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.ctas-3170"><a href="#Select.ctas-3170"><span class="linenos">3170</span></a><span class="sd"> The new Create expression.</span>
-</span><span id="Select.ctas-3171"><a href="#Select.ctas-3171"><span class="linenos">3171</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.ctas-3172"><a href="#Select.ctas-3172"><span class="linenos">3172</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-3173"><a href="#Select.ctas-3173"><span class="linenos">3173</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-3174"><a href="#Select.ctas-3174"><span class="linenos">3174</span></a> <span class="n">table</span><span class="p">,</span>
-</span><span id="Select.ctas-3175"><a href="#Select.ctas-3175"><span class="linenos">3175</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-3176"><a href="#Select.ctas-3176"><span class="linenos">3176</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-3177"><a href="#Select.ctas-3177"><span class="linenos">3177</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.ctas-3178"><a href="#Select.ctas-3178"><span class="linenos">3178</span></a> <span class="p">)</span>
-</span><span id="Select.ctas-3179"><a href="#Select.ctas-3179"><span class="linenos">3179</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Select.ctas-3180"><a href="#Select.ctas-3180"><span class="linenos">3180</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="Select.ctas-3181"><a href="#Select.ctas-3181"><span class="linenos">3181</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-3182"><a href="#Select.ctas-3182"><span class="linenos">3182</span></a>
-</span><span id="Select.ctas-3183"><a href="#Select.ctas-3183"><span class="linenos">3183</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
-</span><span id="Select.ctas-3184"><a href="#Select.ctas-3184"><span class="linenos">3184</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-3185"><a href="#Select.ctas-3185"><span class="linenos">3185</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-3186"><a href="#Select.ctas-3186"><span class="linenos">3186</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-3187"><a href="#Select.ctas-3187"><span class="linenos">3187</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-3188"><a href="#Select.ctas-3188"><span class="linenos">3188</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.ctas-3202"><a href="#Select.ctas-3202"><span class="linenos">3202</span></a> <span class="k">def</span> <span class="nf">ctas</span><span class="p">(</span>
+</span><span id="Select.ctas-3203"><a href="#Select.ctas-3203"><span class="linenos">3203</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.ctas-3204"><a href="#Select.ctas-3204"><span class="linenos">3204</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Select.ctas-3205"><a href="#Select.ctas-3205"><span class="linenos">3205</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.ctas-3206"><a href="#Select.ctas-3206"><span class="linenos">3206</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.ctas-3207"><a href="#Select.ctas-3207"><span class="linenos">3207</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.ctas-3208"><a href="#Select.ctas-3208"><span class="linenos">3208</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.ctas-3209"><a href="#Select.ctas-3209"><span class="linenos">3209</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Create</span><span class="p">:</span>
+</span><span id="Select.ctas-3210"><a href="#Select.ctas-3210"><span class="linenos">3210</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.ctas-3211"><a href="#Select.ctas-3211"><span class="linenos">3211</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
+</span><span id="Select.ctas-3212"><a href="#Select.ctas-3212"><span class="linenos">3212</span></a>
+</span><span id="Select.ctas-3213"><a href="#Select.ctas-3213"><span class="linenos">3213</span></a><span class="sd"> Example:</span>
+</span><span id="Select.ctas-3214"><a href="#Select.ctas-3214"><span class="linenos">3214</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-3215"><a href="#Select.ctas-3215"><span class="linenos">3215</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
+</span><span id="Select.ctas-3216"><a href="#Select.ctas-3216"><span class="linenos">3216</span></a>
+</span><span id="Select.ctas-3217"><a href="#Select.ctas-3217"><span class="linenos">3217</span></a><span class="sd"> Args:</span>
+</span><span id="Select.ctas-3218"><a href="#Select.ctas-3218"><span class="linenos">3218</span></a><span class="sd"> table: the SQL code string to parse as the table name.</span>
+</span><span id="Select.ctas-3219"><a href="#Select.ctas-3219"><span class="linenos">3219</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.ctas-3220"><a href="#Select.ctas-3220"><span class="linenos">3220</span></a><span class="sd"> properties: an optional mapping of table properties</span>
+</span><span id="Select.ctas-3221"><a href="#Select.ctas-3221"><span class="linenos">3221</span></a><span class="sd"> dialect: the dialect used to parse the input table.</span>
+</span><span id="Select.ctas-3222"><a href="#Select.ctas-3222"><span class="linenos">3222</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.ctas-3223"><a href="#Select.ctas-3223"><span class="linenos">3223</span></a><span class="sd"> opts: other options to use to parse the input table.</span>
+</span><span id="Select.ctas-3224"><a href="#Select.ctas-3224"><span class="linenos">3224</span></a>
+</span><span id="Select.ctas-3225"><a href="#Select.ctas-3225"><span class="linenos">3225</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.ctas-3226"><a href="#Select.ctas-3226"><span class="linenos">3226</span></a><span class="sd"> The new Create expression.</span>
+</span><span id="Select.ctas-3227"><a href="#Select.ctas-3227"><span class="linenos">3227</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.ctas-3228"><a href="#Select.ctas-3228"><span class="linenos">3228</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-3229"><a href="#Select.ctas-3229"><span class="linenos">3229</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-3230"><a href="#Select.ctas-3230"><span class="linenos">3230</span></a> <span class="n">table</span><span class="p">,</span>
+</span><span id="Select.ctas-3231"><a href="#Select.ctas-3231"><span class="linenos">3231</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-3232"><a href="#Select.ctas-3232"><span class="linenos">3232</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-3233"><a href="#Select.ctas-3233"><span class="linenos">3233</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.ctas-3234"><a href="#Select.ctas-3234"><span class="linenos">3234</span></a> <span class="p">)</span>
+</span><span id="Select.ctas-3235"><a href="#Select.ctas-3235"><span class="linenos">3235</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Select.ctas-3236"><a href="#Select.ctas-3236"><span class="linenos">3236</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="Select.ctas-3237"><a href="#Select.ctas-3237"><span class="linenos">3237</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-3238"><a href="#Select.ctas-3238"><span class="linenos">3238</span></a>
+</span><span id="Select.ctas-3239"><a href="#Select.ctas-3239"><span class="linenos">3239</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
+</span><span id="Select.ctas-3240"><a href="#Select.ctas-3240"><span class="linenos">3240</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-3241"><a href="#Select.ctas-3241"><span class="linenos">3241</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-3242"><a href="#Select.ctas-3242"><span class="linenos">3242</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-3243"><a href="#Select.ctas-3243"><span class="linenos">3243</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-3244"><a href="#Select.ctas-3244"><span class="linenos">3244</span></a> <span class="p">)</span>
</span></pre></div>
@@ -35746,28 +36922,28 @@ 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-3190"><a href="#Select.lock-3190"><span class="linenos">3190</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-3191"><a href="#Select.lock-3191"><span class="linenos">3191</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.lock-3192"><a href="#Select.lock-3192"><span class="linenos">3192</span></a><span class="sd"> Set the locking read mode for this expression.</span>
-</span><span id="Select.lock-3193"><a href="#Select.lock-3193"><span class="linenos">3193</span></a>
-</span><span id="Select.lock-3194"><a href="#Select.lock-3194"><span class="linenos">3194</span></a><span class="sd"> Examples:</span>
-</span><span id="Select.lock-3195"><a href="#Select.lock-3195"><span class="linenos">3195</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-3196"><a href="#Select.lock-3196"><span class="linenos">3196</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
-</span><span id="Select.lock-3197"><a href="#Select.lock-3197"><span class="linenos">3197</span></a>
-</span><span id="Select.lock-3198"><a href="#Select.lock-3198"><span class="linenos">3198</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-3199"><a href="#Select.lock-3199"><span class="linenos">3199</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
-</span><span id="Select.lock-3200"><a href="#Select.lock-3200"><span class="linenos">3200</span></a>
-</span><span id="Select.lock-3201"><a href="#Select.lock-3201"><span class="linenos">3201</span></a><span class="sd"> Args:</span>
-</span><span id="Select.lock-3202"><a href="#Select.lock-3202"><span class="linenos">3202</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-3203"><a href="#Select.lock-3203"><span class="linenos">3203</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.lock-3204"><a href="#Select.lock-3204"><span class="linenos">3204</span></a>
-</span><span id="Select.lock-3205"><a href="#Select.lock-3205"><span class="linenos">3205</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.lock-3206"><a href="#Select.lock-3206"><span class="linenos">3206</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Select.lock-3207"><a href="#Select.lock-3207"><span class="linenos">3207</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.lock-3208"><a href="#Select.lock-3208"><span class="linenos">3208</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-3209"><a href="#Select.lock-3209"><span class="linenos">3209</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</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-3210"><a href="#Select.lock-3210"><span class="linenos">3210</span></a>
-</span><span id="Select.lock-3211"><a href="#Select.lock-3211"><span class="linenos">3211</span></a> <span class="k">return</span> <span class="n">inst</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.lock-3246"><a href="#Select.lock-3246"><span class="linenos">3246</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-3247"><a href="#Select.lock-3247"><span class="linenos">3247</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.lock-3248"><a href="#Select.lock-3248"><span class="linenos">3248</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="Select.lock-3249"><a href="#Select.lock-3249"><span class="linenos">3249</span></a>
+</span><span id="Select.lock-3250"><a href="#Select.lock-3250"><span class="linenos">3250</span></a><span class="sd"> Examples:</span>
+</span><span id="Select.lock-3251"><a href="#Select.lock-3251"><span class="linenos">3251</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-3252"><a href="#Select.lock-3252"><span class="linenos">3252</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
+</span><span id="Select.lock-3253"><a href="#Select.lock-3253"><span class="linenos">3253</span></a>
+</span><span id="Select.lock-3254"><a href="#Select.lock-3254"><span class="linenos">3254</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-3255"><a href="#Select.lock-3255"><span class="linenos">3255</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="Select.lock-3256"><a href="#Select.lock-3256"><span class="linenos">3256</span></a>
+</span><span id="Select.lock-3257"><a href="#Select.lock-3257"><span class="linenos">3257</span></a><span class="sd"> Args:</span>
+</span><span id="Select.lock-3258"><a href="#Select.lock-3258"><span class="linenos">3258</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-3259"><a href="#Select.lock-3259"><span class="linenos">3259</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.lock-3260"><a href="#Select.lock-3260"><span class="linenos">3260</span></a>
+</span><span id="Select.lock-3261"><a href="#Select.lock-3261"><span class="linenos">3261</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.lock-3262"><a href="#Select.lock-3262"><span class="linenos">3262</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Select.lock-3263"><a href="#Select.lock-3263"><span class="linenos">3263</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.lock-3264"><a href="#Select.lock-3264"><span class="linenos">3264</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-3265"><a href="#Select.lock-3265"><span class="linenos">3265</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</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-3266"><a href="#Select.lock-3266"><span class="linenos">3266</span></a>
+</span><span id="Select.lock-3267"><a href="#Select.lock-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="n">inst</span>
</span></pre></div>
@@ -35816,29 +36992,29 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Select.hint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.hint-3213"><a href="#Select.hint-3213"><span class="linenos">3213</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 class="o">*</span><span class="n">hints</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="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.hint-3214"><a href="#Select.hint-3214"><span class="linenos">3214</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.hint-3215"><a href="#Select.hint-3215"><span class="linenos">3215</span></a><span class="sd"> Set hints for this expression.</span>
-</span><span id="Select.hint-3216"><a href="#Select.hint-3216"><span class="linenos">3216</span></a>
-</span><span id="Select.hint-3217"><a href="#Select.hint-3217"><span class="linenos">3217</span></a><span class="sd"> Examples:</span>
-</span><span id="Select.hint-3218"><a href="#Select.hint-3218"><span class="linenos">3218</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).hint(&quot;BROADCAST(y)&quot;).sql(dialect=&quot;spark&quot;)</span>
-</span><span id="Select.hint-3219"><a href="#Select.hint-3219"><span class="linenos">3219</span></a><span class="sd"> &#39;SELECT /*+ BROADCAST(y) */ x FROM tbl&#39;</span>
-</span><span id="Select.hint-3220"><a href="#Select.hint-3220"><span class="linenos">3220</span></a>
-</span><span id="Select.hint-3221"><a href="#Select.hint-3221"><span class="linenos">3221</span></a><span class="sd"> Args:</span>
-</span><span id="Select.hint-3222"><a href="#Select.hint-3222"><span class="linenos">3222</span></a><span class="sd"> hints: The SQL code strings to parse as the hints.</span>
-</span><span id="Select.hint-3223"><a href="#Select.hint-3223"><span class="linenos">3223</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.hint-3224"><a href="#Select.hint-3224"><span class="linenos">3224</span></a><span class="sd"> dialect: The dialect used to parse the hints.</span>
-</span><span id="Select.hint-3225"><a href="#Select.hint-3225"><span class="linenos">3225</span></a><span class="sd"> copy: If `False`, modify this expression instance in-place.</span>
-</span><span id="Select.hint-3226"><a href="#Select.hint-3226"><span class="linenos">3226</span></a>
-</span><span id="Select.hint-3227"><a href="#Select.hint-3227"><span class="linenos">3227</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.hint-3228"><a href="#Select.hint-3228"><span class="linenos">3228</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Select.hint-3229"><a href="#Select.hint-3229"><span class="linenos">3229</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.hint-3230"><a href="#Select.hint-3230"><span class="linenos">3230</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.hint-3231"><a href="#Select.hint-3231"><span class="linenos">3231</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Select.hint-3232"><a href="#Select.hint-3232"><span class="linenos">3232</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">,</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="n">maybe_parse</span><span class="p">(</span><span class="n">h</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="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span>
-</span><span id="Select.hint-3233"><a href="#Select.hint-3233"><span class="linenos">3233</span></a> <span class="p">)</span>
-</span><span id="Select.hint-3234"><a href="#Select.hint-3234"><span class="linenos">3234</span></a>
-</span><span id="Select.hint-3235"><a href="#Select.hint-3235"><span class="linenos">3235</span></a> <span class="k">return</span> <span class="n">inst</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.hint-3269"><a href="#Select.hint-3269"><span class="linenos">3269</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 class="o">*</span><span class="n">hints</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="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.hint-3270"><a href="#Select.hint-3270"><span class="linenos">3270</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.hint-3271"><a href="#Select.hint-3271"><span class="linenos">3271</span></a><span class="sd"> Set hints for this expression.</span>
+</span><span id="Select.hint-3272"><a href="#Select.hint-3272"><span class="linenos">3272</span></a>
+</span><span id="Select.hint-3273"><a href="#Select.hint-3273"><span class="linenos">3273</span></a><span class="sd"> Examples:</span>
+</span><span id="Select.hint-3274"><a href="#Select.hint-3274"><span class="linenos">3274</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).hint(&quot;BROADCAST(y)&quot;).sql(dialect=&quot;spark&quot;)</span>
+</span><span id="Select.hint-3275"><a href="#Select.hint-3275"><span class="linenos">3275</span></a><span class="sd"> &#39;SELECT /*+ BROADCAST(y) */ x FROM tbl&#39;</span>
+</span><span id="Select.hint-3276"><a href="#Select.hint-3276"><span class="linenos">3276</span></a>
+</span><span id="Select.hint-3277"><a href="#Select.hint-3277"><span class="linenos">3277</span></a><span class="sd"> Args:</span>
+</span><span id="Select.hint-3278"><a href="#Select.hint-3278"><span class="linenos">3278</span></a><span class="sd"> hints: The SQL code strings to parse as the hints.</span>
+</span><span id="Select.hint-3279"><a href="#Select.hint-3279"><span class="linenos">3279</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.hint-3280"><a href="#Select.hint-3280"><span class="linenos">3280</span></a><span class="sd"> dialect: The dialect used to parse the hints.</span>
+</span><span id="Select.hint-3281"><a href="#Select.hint-3281"><span class="linenos">3281</span></a><span class="sd"> copy: If `False`, modify this expression instance in-place.</span>
+</span><span id="Select.hint-3282"><a href="#Select.hint-3282"><span class="linenos">3282</span></a>
+</span><span id="Select.hint-3283"><a href="#Select.hint-3283"><span class="linenos">3283</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.hint-3284"><a href="#Select.hint-3284"><span class="linenos">3284</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Select.hint-3285"><a href="#Select.hint-3285"><span class="linenos">3285</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.hint-3286"><a href="#Select.hint-3286"><span class="linenos">3286</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.hint-3287"><a href="#Select.hint-3287"><span class="linenos">3287</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Select.hint-3288"><a href="#Select.hint-3288"><span class="linenos">3288</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">,</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="n">maybe_parse</span><span class="p">(</span><span class="n">h</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="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span>
+</span><span id="Select.hint-3289"><a href="#Select.hint-3289"><span class="linenos">3289</span></a> <span class="p">)</span>
+</span><span id="Select.hint-3290"><a href="#Select.hint-3290"><span class="linenos">3290</span></a>
+</span><span id="Select.hint-3291"><a href="#Select.hint-3291"><span class="linenos">3291</span></a> <span class="k">return</span> <span class="n">inst</span>
</span></pre></div>
@@ -35998,30 +37174,47 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Subquery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery-3250"><a href="#Subquery-3250"><span class="linenos">3250</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-3251"><a href="#Subquery-3251"><span class="linenos">3251</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Subquery-3252"><a href="#Subquery-3252"><span class="linenos">3252</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-3253"><a href="#Subquery-3253"><span class="linenos">3253</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-3254"><a href="#Subquery-3254"><span class="linenos">3254</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-3255"><a href="#Subquery-3255"><span class="linenos">3255</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="Subquery-3256"><a href="#Subquery-3256"><span class="linenos">3256</span></a> <span class="p">}</span>
-</span><span id="Subquery-3257"><a href="#Subquery-3257"><span class="linenos">3257</span></a>
-</span><span id="Subquery-3258"><a href="#Subquery-3258"><span class="linenos">3258</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-3259"><a href="#Subquery-3259"><span class="linenos">3259</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subquery-3260"><a href="#Subquery-3260"><span class="linenos">3260</span></a><span class="sd"> Returns the first non subquery.</span>
-</span><span id="Subquery-3261"><a href="#Subquery-3261"><span class="linenos">3261</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subquery-3262"><a href="#Subquery-3262"><span class="linenos">3262</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
-</span><span id="Subquery-3263"><a href="#Subquery-3263"><span class="linenos">3263</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-3264"><a href="#Subquery-3264"><span class="linenos">3264</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-3265"><a href="#Subquery-3265"><span class="linenos">3265</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Subquery-3266"><a href="#Subquery-3266"><span class="linenos">3266</span></a>
-</span><span id="Subquery-3267"><a href="#Subquery-3267"><span class="linenos">3267</span></a> <span class="nd">@property</span>
-</span><span id="Subquery-3268"><a href="#Subquery-3268"><span class="linenos">3268</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-3269"><a href="#Subquery-3269"><span class="linenos">3269</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-3270"><a href="#Subquery-3270"><span class="linenos">3270</span></a>
-</span><span id="Subquery-3271"><a href="#Subquery-3271"><span class="linenos">3271</span></a> <span class="nd">@property</span>
-</span><span id="Subquery-3272"><a href="#Subquery-3272"><span class="linenos">3272</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="Subquery-3273"><a href="#Subquery-3273"><span class="linenos">3273</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-3306"><a href="#Subquery-3306"><span class="linenos">3306</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-3307"><a href="#Subquery-3307"><span class="linenos">3307</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Subquery-3308"><a href="#Subquery-3308"><span class="linenos">3308</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-3309"><a href="#Subquery-3309"><span class="linenos">3309</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-3310"><a href="#Subquery-3310"><span class="linenos">3310</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-3311"><a href="#Subquery-3311"><span class="linenos">3311</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="Subquery-3312"><a href="#Subquery-3312"><span class="linenos">3312</span></a> <span class="p">}</span>
+</span><span id="Subquery-3313"><a href="#Subquery-3313"><span class="linenos">3313</span></a>
+</span><span id="Subquery-3314"><a href="#Subquery-3314"><span class="linenos">3314</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-3315"><a href="#Subquery-3315"><span class="linenos">3315</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subquery-3316"><a href="#Subquery-3316"><span class="linenos">3316</span></a><span class="sd"> Returns the first non subquery.</span>
+</span><span id="Subquery-3317"><a href="#Subquery-3317"><span class="linenos">3317</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subquery-3318"><a href="#Subquery-3318"><span class="linenos">3318</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="Subquery-3319"><a href="#Subquery-3319"><span class="linenos">3319</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-3320"><a href="#Subquery-3320"><span class="linenos">3320</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-3321"><a href="#Subquery-3321"><span class="linenos">3321</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Subquery-3322"><a href="#Subquery-3322"><span class="linenos">3322</span></a>
+</span><span id="Subquery-3323"><a href="#Subquery-3323"><span class="linenos">3323</span></a> <span class="k">def</span> <span class="nf">unwrap</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
+</span><span id="Subquery-3324"><a href="#Subquery-3324"><span class="linenos">3324</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="Subquery-3325"><a href="#Subquery-3325"><span class="linenos">3325</span></a> <span class="k">while</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_wrapper</span><span class="p">:</span>
+</span><span id="Subquery-3326"><a href="#Subquery-3326"><span class="linenos">3326</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">Subquery</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span>
+</span><span id="Subquery-3327"><a href="#Subquery-3327"><span class="linenos">3327</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Subquery-3328"><a href="#Subquery-3328"><span class="linenos">3328</span></a>
+</span><span id="Subquery-3329"><a href="#Subquery-3329"><span class="linenos">3329</span></a> <span class="nd">@property</span>
+</span><span id="Subquery-3330"><a href="#Subquery-3330"><span class="linenos">3330</span></a> <span class="k">def</span> <span class="nf">is_wrapper</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-3331"><a href="#Subquery-3331"><span class="linenos">3331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subquery-3332"><a href="#Subquery-3332"><span class="linenos">3332</span></a><span class="sd"> Whether this Subquery acts as a simple wrapper around another expression.</span>
+</span><span id="Subquery-3333"><a href="#Subquery-3333"><span class="linenos">3333</span></a>
+</span><span id="Subquery-3334"><a href="#Subquery-3334"><span class="linenos">3334</span></a><span class="sd"> SELECT * FROM (((SELECT * FROM t)))</span>
+</span><span id="Subquery-3335"><a href="#Subquery-3335"><span class="linenos">3335</span></a><span class="sd"> ^</span>
+</span><span id="Subquery-3336"><a href="#Subquery-3336"><span class="linenos">3336</span></a><span class="sd"> This corresponds to a &quot;wrapper&quot; Subquery node</span>
+</span><span id="Subquery-3337"><a href="#Subquery-3337"><span class="linenos">3337</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subquery-3338"><a href="#Subquery-3338"><span class="linenos">3338</span></a> <span class="k">return</span> <span class="nb">all</span><span class="p">(</span><span class="n">v</span> <span class="ow">is</span> <span class="kc">None</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="bp">self</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="o">!=</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Subquery-3339"><a href="#Subquery-3339"><span class="linenos">3339</span></a>
+</span><span id="Subquery-3340"><a href="#Subquery-3340"><span class="linenos">3340</span></a> <span class="nd">@property</span>
+</span><span id="Subquery-3341"><a href="#Subquery-3341"><span class="linenos">3341</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-3342"><a href="#Subquery-3342"><span class="linenos">3342</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-3343"><a href="#Subquery-3343"><span class="linenos">3343</span></a>
+</span><span id="Subquery-3344"><a href="#Subquery-3344"><span class="linenos">3344</span></a> <span class="nd">@property</span>
+</span><span id="Subquery-3345"><a href="#Subquery-3345"><span class="linenos">3345</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="Subquery-3346"><a href="#Subquery-3346"><span class="linenos">3346</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
</span></pre></div>
@@ -36031,7 +37224,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Subquery.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Subquery.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: True, &#39;alias&#39;: False, &#39;with&#39;: False, &#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Subquery.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: True, &#39;alias&#39;: False, &#39;with&#39;: False, &#39;match&#39;: False, &#39;laterals&#39;: False, &#39;joins&#39;: False, &#39;connect&#39;: False, &#39;pivots&#39;: False, &#39;where&#39;: False, &#39;group&#39;: False, &#39;having&#39;: False, &#39;qualify&#39;: False, &#39;windows&#39;: False, &#39;distribute&#39;: False, &#39;sort&#39;: False, &#39;cluster&#39;: False, &#39;order&#39;: False, &#39;limit&#39;: False, &#39;offset&#39;: False, &#39;locks&#39;: False, &#39;sample&#39;: False, &#39;settings&#39;: False, &#39;format&#39;: False}</span>
</div>
@@ -36051,14 +37244,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Subquery.unnest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery.unnest-3258"><a href="#Subquery.unnest-3258"><span class="linenos">3258</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-3259"><a href="#Subquery.unnest-3259"><span class="linenos">3259</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subquery.unnest-3260"><a href="#Subquery.unnest-3260"><span class="linenos">3260</span></a><span class="sd"> Returns the first non subquery.</span>
-</span><span id="Subquery.unnest-3261"><a href="#Subquery.unnest-3261"><span class="linenos">3261</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subquery.unnest-3262"><a href="#Subquery.unnest-3262"><span class="linenos">3262</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
-</span><span id="Subquery.unnest-3263"><a href="#Subquery.unnest-3263"><span class="linenos">3263</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-3264"><a href="#Subquery.unnest-3264"><span class="linenos">3264</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-3265"><a href="#Subquery.unnest-3265"><span class="linenos">3265</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery.unnest-3314"><a href="#Subquery.unnest-3314"><span class="linenos">3314</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-3315"><a href="#Subquery.unnest-3315"><span class="linenos">3315</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subquery.unnest-3316"><a href="#Subquery.unnest-3316"><span class="linenos">3316</span></a><span class="sd"> Returns the first non subquery.</span>
+</span><span id="Subquery.unnest-3317"><a href="#Subquery.unnest-3317"><span class="linenos">3317</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subquery.unnest-3318"><a href="#Subquery.unnest-3318"><span class="linenos">3318</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="Subquery.unnest-3319"><a href="#Subquery.unnest-3319"><span class="linenos">3319</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-3320"><a href="#Subquery.unnest-3320"><span class="linenos">3320</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-3321"><a href="#Subquery.unnest-3321"><span class="linenos">3321</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -36067,6 +37260,45 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="Subquery.unwrap" class="classattr">
+ <input id="Subquery.unwrap-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">unwrap</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="n"><a href="#Subquery">sqlglot.expressions.Subquery</a></span>:</span></span>
+
+ <label class="view-source-button" for="Subquery.unwrap-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Subquery.unwrap"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery.unwrap-3323"><a href="#Subquery.unwrap-3323"><span class="linenos">3323</span></a> <span class="k">def</span> <span class="nf">unwrap</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
+</span><span id="Subquery.unwrap-3324"><a href="#Subquery.unwrap-3324"><span class="linenos">3324</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="Subquery.unwrap-3325"><a href="#Subquery.unwrap-3325"><span class="linenos">3325</span></a> <span class="k">while</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_wrapper</span><span class="p">:</span>
+</span><span id="Subquery.unwrap-3326"><a href="#Subquery.unwrap-3326"><span class="linenos">3326</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">Subquery</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span>
+</span><span id="Subquery.unwrap-3327"><a href="#Subquery.unwrap-3327"><span class="linenos">3327</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Subquery.is_wrapper" class="classattr">
+ <div class="attr variable">
+ <span class="name">is_wrapper</span><span class="annotation">: bool</span>
+
+
+ </div>
+ <a class="headerlink" href="#Subquery.is_wrapper"></a>
+
+ <div class="docstring"><p>Whether this Subquery acts as a simple wrapper around another expression.</p>
+
+<p>SELECT * FROM (((SELECT * FROM t)))
+ ^
+ This corresponds to a "wrapper" Subquery node</p>
+</div>
+
+
+ </div>
<div id="Subquery.is_star" class="classattr">
<div class="attr variable">
<span class="name">is_star</span><span class="annotation">: bool</span>
@@ -36198,19 +37430,19 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#TableSample"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TableSample-3276"><a href="#TableSample-3276"><span class="linenos">3276</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-3277"><a href="#TableSample-3277"><span class="linenos">3277</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TableSample-3278"><a href="#TableSample-3278"><span class="linenos">3278</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-3279"><a href="#TableSample-3279"><span class="linenos">3279</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-3280"><a href="#TableSample-3280"><span class="linenos">3280</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-3281"><a href="#TableSample-3281"><span class="linenos">3281</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-3282"><a href="#TableSample-3282"><span class="linenos">3282</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-3283"><a href="#TableSample-3283"><span class="linenos">3283</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-3284"><a href="#TableSample-3284"><span class="linenos">3284</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-3285"><a href="#TableSample-3285"><span class="linenos">3285</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-3286"><a href="#TableSample-3286"><span class="linenos">3286</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-3287"><a href="#TableSample-3287"><span class="linenos">3287</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-3288"><a href="#TableSample-3288"><span class="linenos">3288</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TableSample-3349"><a href="#TableSample-3349"><span class="linenos">3349</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-3350"><a href="#TableSample-3350"><span class="linenos">3350</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TableSample-3351"><a href="#TableSample-3351"><span class="linenos">3351</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-3352"><a href="#TableSample-3352"><span class="linenos">3352</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-3353"><a href="#TableSample-3353"><span class="linenos">3353</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-3354"><a href="#TableSample-3354"><span class="linenos">3354</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-3355"><a href="#TableSample-3355"><span class="linenos">3355</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-3356"><a href="#TableSample-3356"><span class="linenos">3356</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-3357"><a href="#TableSample-3357"><span class="linenos">3357</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-3358"><a href="#TableSample-3358"><span class="linenos">3358</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-3359"><a href="#TableSample-3359"><span class="linenos">3359</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-3360"><a href="#TableSample-3360"><span class="linenos">3360</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-3361"><a href="#TableSample-3361"><span class="linenos">3361</span></a> <span class="p">}</span>
</span></pre></div>
@@ -36309,14 +37541,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Tag"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tag-3291"><a href="#Tag-3291"><span class="linenos">3291</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-3292"><a href="#Tag-3292"><span class="linenos">3292</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-3293"><a href="#Tag-3293"><span class="linenos">3293</span></a>
-</span><span id="Tag-3294"><a href="#Tag-3294"><span class="linenos">3294</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tag-3295"><a href="#Tag-3295"><span class="linenos">3295</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-3296"><a href="#Tag-3296"><span class="linenos">3296</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-3297"><a href="#Tag-3297"><span class="linenos">3297</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-3298"><a href="#Tag-3298"><span class="linenos">3298</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tag-3364"><a href="#Tag-3364"><span class="linenos">3364</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-3365"><a href="#Tag-3365"><span class="linenos">3365</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-3366"><a href="#Tag-3366"><span class="linenos">3366</span></a>
+</span><span id="Tag-3367"><a href="#Tag-3367"><span class="linenos">3367</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tag-3368"><a href="#Tag-3368"><span class="linenos">3368</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-3369"><a href="#Tag-3369"><span class="linenos">3369</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-3370"><a href="#Tag-3370"><span class="linenos">3370</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-3371"><a href="#Tag-3371"><span class="linenos">3371</span></a> <span class="p">}</span>
</span></pre></div>
@@ -36416,17 +37648,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Pivot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Pivot-3303"><a href="#Pivot-3303"><span class="linenos">3303</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-3304"><a href="#Pivot-3304"><span class="linenos">3304</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Pivot-3305"><a href="#Pivot-3305"><span class="linenos">3305</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-3306"><a href="#Pivot-3306"><span class="linenos">3306</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-3307"><a href="#Pivot-3307"><span class="linenos">3307</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-3308"><a href="#Pivot-3308"><span class="linenos">3308</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="Pivot-3309"><a href="#Pivot-3309"><span class="linenos">3309</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Pivot-3310"><a href="#Pivot-3310"><span class="linenos">3310</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="Pivot-3311"><a href="#Pivot-3311"><span class="linenos">3311</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="Pivot-3312"><a href="#Pivot-3312"><span class="linenos">3312</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-3313"><a href="#Pivot-3313"><span class="linenos">3313</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Pivot-3376"><a href="#Pivot-3376"><span class="linenos">3376</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-3377"><a href="#Pivot-3377"><span class="linenos">3377</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Pivot-3378"><a href="#Pivot-3378"><span class="linenos">3378</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-3379"><a href="#Pivot-3379"><span class="linenos">3379</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-3380"><a href="#Pivot-3380"><span class="linenos">3380</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-3381"><a href="#Pivot-3381"><span class="linenos">3381</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="Pivot-3382"><a href="#Pivot-3382"><span class="linenos">3382</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Pivot-3383"><a href="#Pivot-3383"><span class="linenos">3383</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="Pivot-3384"><a href="#Pivot-3384"><span class="linenos">3384</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="Pivot-3385"><a href="#Pivot-3385"><span class="linenos">3385</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-3386"><a href="#Pivot-3386"><span class="linenos">3386</span></a> <span class="s2">&quot;include_nulls&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Pivot-3387"><a href="#Pivot-3387"><span class="linenos">3387</span></a> <span class="p">}</span>
</span></pre></div>
@@ -36436,7 +37669,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">arg_types</span> =
<input id="Pivot.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Pivot.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: False, &#39;alias&#39;: False, &#39;expressions&#39;: True, &#39;field&#39;: False, &#39;unpivot&#39;: False, &#39;using&#39;: False, &#39;group&#39;: False, &#39;columns&#39;: False}</span>
+ <label class="view-value-button pdoc-button" for="Pivot.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: False, &#39;alias&#39;: False, &#39;expressions&#39;: True, &#39;field&#39;: False, &#39;unpivot&#39;: False, &#39;using&#39;: False, &#39;group&#39;: False, &#39;columns&#39;: False, &#39;include_nulls&#39;: False}</span>
</div>
@@ -36519,22 +37752,22 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr class">
<span class="def">class</span>
- <span class="name">Window</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+ <span class="name">Window</span><wbr>(<span class="base"><a href="#Condition">Condition</a></span>):
<label class="view-source-button" for="Window-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Window"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Window-3316"><a href="#Window-3316"><span class="linenos">3316</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-3317"><a href="#Window-3317"><span class="linenos">3317</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Window-3318"><a href="#Window-3318"><span class="linenos">3318</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-3319"><a href="#Window-3319"><span class="linenos">3319</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-3320"><a href="#Window-3320"><span class="linenos">3320</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-3321"><a href="#Window-3321"><span class="linenos">3321</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-3322"><a href="#Window-3322"><span class="linenos">3322</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-3323"><a href="#Window-3323"><span class="linenos">3323</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-3324"><a href="#Window-3324"><span class="linenos">3324</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-3325"><a href="#Window-3325"><span class="linenos">3325</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Window-3390"><a href="#Window-3390"><span class="linenos">3390</span></a><span class="k">class</span> <span class="nc">Window</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Window-3391"><a href="#Window-3391"><span class="linenos">3391</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Window-3392"><a href="#Window-3392"><span class="linenos">3392</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-3393"><a href="#Window-3393"><span class="linenos">3393</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-3394"><a href="#Window-3394"><span class="linenos">3394</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-3395"><a href="#Window-3395"><span class="linenos">3395</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-3396"><a href="#Window-3396"><span class="linenos">3396</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-3397"><a href="#Window-3397"><span class="linenos">3397</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-3398"><a href="#Window-3398"><span class="linenos">3398</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-3399"><a href="#Window-3399"><span class="linenos">3399</span></a> <span class="p">}</span>
</span></pre></div>
@@ -36619,6 +37852,21 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="Window.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Window.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Window.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Window.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Window.as_" class="function"><a href="#Condition.as_">as_</a></dd>
+ <dd id="Window.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Window.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Window.is_" class="function"><a href="#Condition.is_">is_</a></dd>
+ <dd id="Window.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Window.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Window.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Window.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Window.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -36633,14 +37881,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#WindowSpec"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec-3328"><a href="#WindowSpec-3328"><span class="linenos">3328</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-3329"><a href="#WindowSpec-3329"><span class="linenos">3329</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="WindowSpec-3330"><a href="#WindowSpec-3330"><span class="linenos">3330</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-3331"><a href="#WindowSpec-3331"><span class="linenos">3331</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-3332"><a href="#WindowSpec-3332"><span class="linenos">3332</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-3333"><a href="#WindowSpec-3333"><span class="linenos">3333</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-3334"><a href="#WindowSpec-3334"><span class="linenos">3334</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-3335"><a href="#WindowSpec-3335"><span class="linenos">3335</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec-3402"><a href="#WindowSpec-3402"><span class="linenos">3402</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-3403"><a href="#WindowSpec-3403"><span class="linenos">3403</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="WindowSpec-3404"><a href="#WindowSpec-3404"><span class="linenos">3404</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-3405"><a href="#WindowSpec-3405"><span class="linenos">3405</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-3406"><a href="#WindowSpec-3406"><span class="linenos">3406</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-3407"><a href="#WindowSpec-3407"><span class="linenos">3407</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-3408"><a href="#WindowSpec-3408"><span class="linenos">3408</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-3409"><a href="#WindowSpec-3409"><span class="linenos">3409</span></a> <span class="p">}</span>
</span></pre></div>
@@ -36738,8 +37986,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Where"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Where-3338"><a href="#Where-3338"><span class="linenos">3338</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-3339"><a href="#Where-3339"><span class="linenos">3339</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Where-3412"><a href="#Where-3412"><span class="linenos">3412</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-3413"><a href="#Where-3413"><span class="linenos">3413</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36826,16 +38074,16 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Star"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Star-3342"><a href="#Star-3342"><span class="linenos">3342</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-3343"><a href="#Star-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;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-3344"><a href="#Star-3344"><span class="linenos">3344</span></a>
-</span><span id="Star-3345"><a href="#Star-3345"><span class="linenos">3345</span></a> <span class="nd">@property</span>
-</span><span id="Star-3346"><a href="#Star-3346"><span class="linenos">3346</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-3347"><a href="#Star-3347"><span class="linenos">3347</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
-</span><span id="Star-3348"><a href="#Star-3348"><span class="linenos">3348</span></a>
-</span><span id="Star-3349"><a href="#Star-3349"><span class="linenos">3349</span></a> <span class="nd">@property</span>
-</span><span id="Star-3350"><a href="#Star-3350"><span class="linenos">3350</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="Star-3351"><a href="#Star-3351"><span class="linenos">3351</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-3416"><a href="#Star-3416"><span class="linenos">3416</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-3417"><a href="#Star-3417"><span class="linenos">3417</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-3418"><a href="#Star-3418"><span class="linenos">3418</span></a>
+</span><span id="Star-3419"><a href="#Star-3419"><span class="linenos">3419</span></a> <span class="nd">@property</span>
+</span><span id="Star-3420"><a href="#Star-3420"><span class="linenos">3420</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-3421"><a href="#Star-3421"><span class="linenos">3421</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
+</span><span id="Star-3422"><a href="#Star-3422"><span class="linenos">3422</span></a>
+</span><span id="Star-3423"><a href="#Star-3423"><span class="linenos">3423</span></a> <span class="nd">@property</span>
+</span><span id="Star-3424"><a href="#Star-3424"><span class="linenos">3424</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="Star-3425"><a href="#Star-3425"><span class="linenos">3425</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -36972,8 +38220,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Parameter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parameter-3354"><a href="#Parameter-3354"><span class="linenos">3354</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Parameter-3355"><a href="#Parameter-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;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-3428"><a href="#Parameter-3428"><span class="linenos">3428</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Parameter-3429"><a href="#Parameter-3429"><span class="linenos">3429</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -37086,8 +38334,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SessionParameter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SessionParameter-3358"><a href="#SessionParameter-3358"><span class="linenos">3358</span></a><span class="k">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="SessionParameter-3359"><a href="#SessionParameter-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;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-3432"><a href="#SessionParameter-3432"><span class="linenos">3432</span></a><span class="k">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="SessionParameter-3433"><a href="#SessionParameter-3433"><span class="linenos">3433</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -37200,8 +38448,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Placeholder"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Placeholder-3362"><a href="#Placeholder-3362"><span class="linenos">3362</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Placeholder-3363"><a href="#Placeholder-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;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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Placeholder-3436"><a href="#Placeholder-3436"><span class="linenos">3436</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Placeholder-3437"><a href="#Placeholder-3437"><span class="linenos">3437</span></a> <span class="n">arg_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">False</span><span class="p">}</span>
</span></pre></div>
@@ -37314,12 +38562,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Null"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Null-3366"><a href="#Null-3366"><span class="linenos">3366</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-3367"><a href="#Null-3367"><span class="linenos">3367</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-3368"><a href="#Null-3368"><span class="linenos">3368</span></a>
-</span><span id="Null-3369"><a href="#Null-3369"><span class="linenos">3369</span></a> <span class="nd">@property</span>
-</span><span id="Null-3370"><a href="#Null-3370"><span class="linenos">3370</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-3371"><a href="#Null-3371"><span class="linenos">3371</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-3440"><a href="#Null-3440"><span class="linenos">3440</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-3441"><a href="#Null-3441"><span class="linenos">3441</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-3442"><a href="#Null-3442"><span class="linenos">3442</span></a>
+</span><span id="Null-3443"><a href="#Null-3443"><span class="linenos">3443</span></a> <span class="nd">@property</span>
+</span><span id="Null-3444"><a href="#Null-3444"><span class="linenos">3444</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-3445"><a href="#Null-3445"><span class="linenos">3445</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
</span></pre></div>
@@ -37442,8 +38690,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Boolean"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Boolean-3374"><a href="#Boolean-3374"><span class="linenos">3374</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-3375"><a href="#Boolean-3375"><span class="linenos">3375</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Boolean-3448"><a href="#Boolean-3448"><span class="linenos">3448</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-3449"><a href="#Boolean-3449"><span class="linenos">3449</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -37534,44 +38782,44 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
- <section id="DataTypeSize">
- <input id="DataTypeSize-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <section id="DataTypeParam">
+ <input id="DataTypeParam-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">DataTypeSize</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+ <span class="name">DataTypeParam</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
- <label class="view-source-button" for="DataTypeSize-view-source"><span>View Source</span></label>
+ <label class="view-source-button" for="DataTypeParam-view-source"><span>View Source</span></label>
</div>
- <a class="headerlink" href="#DataTypeSize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataTypeSize-3378"><a href="#DataTypeSize-3378"><span class="linenos">3378</span></a><span class="k">class</span> <span class="nc">DataTypeSize</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="DataTypeSize-3379"><a href="#DataTypeSize-3379"><span class="linenos">3379</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
+ <a class="headerlink" href="#DataTypeParam"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataTypeParam-3452"><a href="#DataTypeParam-3452"><span class="linenos">3452</span></a><span class="k">class</span> <span class="nc">DataTypeParam</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="DataTypeParam-3453"><a href="#DataTypeParam-3453"><span class="linenos">3453</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
- <div id="DataTypeSize.arg_types" class="classattr">
+ <div id="DataTypeParam.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
<span class="default_value">{&#39;this&#39;: True, &#39;expression&#39;: False}</span>
</div>
- <a class="headerlink" href="#DataTypeSize.arg_types"></a>
+ <a class="headerlink" href="#DataTypeParam.arg_types"></a>
</div>
- <div id="DataTypeSize.key" class="classattr">
+ <div id="DataTypeParam.key" class="classattr">
<div class="attr variable">
<span class="name">key</span> =
-<span class="default_value">&#39;datatypesize&#39;</span>
+<span class="default_value">&#39;datatypeparam&#39;</span>
</div>
- <a class="headerlink" href="#DataTypeSize.key"></a>
+ <a class="headerlink" href="#DataTypeParam.key"></a>
@@ -37580,54 +38828,54 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<h5>Inherited Members</h5>
<dl>
<div><dt><a href="#Expression">Expression</a></dt>
- <dd id="DataTypeSize.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
- <dd id="DataTypeSize.args" class="variable"><a href="#Expression.args">args</a></dd>
- <dd id="DataTypeSize.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
- <dd id="DataTypeSize.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
- <dd id="DataTypeSize.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
- <dd id="DataTypeSize.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
- <dd id="DataTypeSize.this" class="variable"><a href="#Expression.this">this</a></dd>
- <dd id="DataTypeSize.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
- <dd id="DataTypeSize.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
- <dd id="DataTypeSize.text" class="function"><a href="#Expression.text">text</a></dd>
- <dd id="DataTypeSize.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
- <dd id="DataTypeSize.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
- <dd id="DataTypeSize.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
- <dd id="DataTypeSize.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
- <dd id="DataTypeSize.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
- <dd id="DataTypeSize.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
- <dd id="DataTypeSize.name" class="variable"><a href="#Expression.name">name</a></dd>
- <dd id="DataTypeSize.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
- <dd id="DataTypeSize.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
- <dd id="DataTypeSize.type" class="variable"><a href="#Expression.type">type</a></dd>
- <dd id="DataTypeSize.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
- <dd id="DataTypeSize.copy" class="function"><a href="#Expression.copy">copy</a></dd>
- <dd id="DataTypeSize.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
- <dd id="DataTypeSize.append" class="function"><a href="#Expression.append">append</a></dd>
- <dd id="DataTypeSize.set" class="function"><a href="#Expression.set">set</a></dd>
- <dd id="DataTypeSize.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
- <dd id="DataTypeSize.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
- <dd id="DataTypeSize.find" class="function"><a href="#Expression.find">find</a></dd>
- <dd id="DataTypeSize.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
- <dd id="DataTypeSize.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
- <dd id="DataTypeSize.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
- <dd id="DataTypeSize.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
- <dd id="DataTypeSize.root" class="function"><a href="#Expression.root">root</a></dd>
- <dd id="DataTypeSize.walk" class="function"><a href="#Expression.walk">walk</a></dd>
- <dd id="DataTypeSize.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
- <dd id="DataTypeSize.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
- <dd id="DataTypeSize.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
- <dd id="DataTypeSize.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
- <dd id="DataTypeSize.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
- <dd id="DataTypeSize.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
- <dd id="DataTypeSize.sql" class="function"><a href="#Expression.sql">sql</a></dd>
- <dd id="DataTypeSize.transform" class="function"><a href="#Expression.transform">transform</a></dd>
- <dd id="DataTypeSize.replace" class="function"><a href="#Expression.replace">replace</a></dd>
- <dd id="DataTypeSize.pop" class="function"><a href="#Expression.pop">pop</a></dd>
- <dd id="DataTypeSize.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
- <dd id="DataTypeSize.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
- <dd id="DataTypeSize.dump" class="function"><a href="#Expression.dump">dump</a></dd>
- <dd id="DataTypeSize.load" class="function"><a href="#Expression.load">load</a></dd>
+ <dd id="DataTypeParam.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="DataTypeParam.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="DataTypeParam.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="DataTypeParam.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="DataTypeParam.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="DataTypeParam.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="DataTypeParam.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="DataTypeParam.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="DataTypeParam.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="DataTypeParam.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="DataTypeParam.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="DataTypeParam.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="DataTypeParam.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="DataTypeParam.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="DataTypeParam.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="DataTypeParam.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="DataTypeParam.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="DataTypeParam.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="DataTypeParam.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="DataTypeParam.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="DataTypeParam.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="DataTypeParam.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="DataTypeParam.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="DataTypeParam.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="DataTypeParam.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="DataTypeParam.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="DataTypeParam.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="DataTypeParam.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="DataTypeParam.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="DataTypeParam.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="DataTypeParam.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="DataTypeParam.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="DataTypeParam.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="DataTypeParam.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="DataTypeParam.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="DataTypeParam.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="DataTypeParam.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="DataTypeParam.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="DataTypeParam.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="DataTypeParam.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="DataTypeParam.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="DataTypeParam.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="DataTypeParam.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="DataTypeParam.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="DataTypeParam.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="DataTypeParam.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="DataTypeParam.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="DataTypeParam.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
</dl>
@@ -37644,159 +38892,212 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DataType"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType-3382"><a href="#DataType-3382"><span class="linenos">3382</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-3383"><a href="#DataType-3383"><span class="linenos">3383</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-3384"><a href="#DataType-3384"><span class="linenos">3384</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-3385"><a href="#DataType-3385"><span class="linenos">3385</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-3386"><a href="#DataType-3386"><span class="linenos">3386</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-3387"><a href="#DataType-3387"><span class="linenos">3387</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-3388"><a href="#DataType-3388"><span class="linenos">3388</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-3389"><a href="#DataType-3389"><span class="linenos">3389</span></a> <span class="p">}</span>
-</span><span id="DataType-3390"><a href="#DataType-3390"><span class="linenos">3390</span></a>
-</span><span id="DataType-3391"><a href="#DataType-3391"><span class="linenos">3391</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-3392"><a href="#DataType-3392"><span class="linenos">3392</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3393"><a href="#DataType-3393"><span class="linenos">3393</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3394"><a href="#DataType-3394"><span class="linenos">3394</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3395"><a href="#DataType-3395"><span class="linenos">3395</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3396"><a href="#DataType-3396"><span class="linenos">3396</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3397"><a href="#DataType-3397"><span class="linenos">3397</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3398"><a href="#DataType-3398"><span class="linenos">3398</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3399"><a href="#DataType-3399"><span class="linenos">3399</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3400"><a href="#DataType-3400"><span class="linenos">3400</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3401"><a href="#DataType-3401"><span class="linenos">3401</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3402"><a href="#DataType-3402"><span class="linenos">3402</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3403"><a href="#DataType-3403"><span class="linenos">3403</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3404"><a href="#DataType-3404"><span class="linenos">3404</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3405"><a href="#DataType-3405"><span class="linenos">3405</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3406"><a href="#DataType-3406"><span class="linenos">3406</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3407"><a href="#DataType-3407"><span class="linenos">3407</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3408"><a href="#DataType-3408"><span class="linenos">3408</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3409"><a href="#DataType-3409"><span class="linenos">3409</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3410"><a href="#DataType-3410"><span class="linenos">3410</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3411"><a href="#DataType-3411"><span class="linenos">3411</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3412"><a href="#DataType-3412"><span class="linenos">3412</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3413"><a href="#DataType-3413"><span class="linenos">3413</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3414"><a href="#DataType-3414"><span class="linenos">3414</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3415"><a href="#DataType-3415"><span class="linenos">3415</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3416"><a href="#DataType-3416"><span class="linenos">3416</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3417"><a href="#DataType-3417"><span class="linenos">3417</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3418"><a href="#DataType-3418"><span class="linenos">3418</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3419"><a href="#DataType-3419"><span class="linenos">3419</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3420"><a href="#DataType-3420"><span class="linenos">3420</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3421"><a href="#DataType-3421"><span class="linenos">3421</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3422"><a href="#DataType-3422"><span class="linenos">3422</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3423"><a href="#DataType-3423"><span class="linenos">3423</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3424"><a href="#DataType-3424"><span class="linenos">3424</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3425"><a href="#DataType-3425"><span class="linenos">3425</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3426"><a href="#DataType-3426"><span class="linenos">3426</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3427"><a href="#DataType-3427"><span class="linenos">3427</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3428"><a href="#DataType-3428"><span class="linenos">3428</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3429"><a href="#DataType-3429"><span class="linenos">3429</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3430"><a href="#DataType-3430"><span class="linenos">3430</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3431"><a href="#DataType-3431"><span class="linenos">3431</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3432"><a href="#DataType-3432"><span class="linenos">3432</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3433"><a href="#DataType-3433"><span class="linenos">3433</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3434"><a href="#DataType-3434"><span class="linenos">3434</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3435"><a href="#DataType-3435"><span class="linenos">3435</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3436"><a href="#DataType-3436"><span class="linenos">3436</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3437"><a href="#DataType-3437"><span class="linenos">3437</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3438"><a href="#DataType-3438"><span class="linenos">3438</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3439"><a href="#DataType-3439"><span class="linenos">3439</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3440"><a href="#DataType-3440"><span class="linenos">3440</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3441"><a href="#DataType-3441"><span class="linenos">3441</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3442"><a href="#DataType-3442"><span class="linenos">3442</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3443"><a href="#DataType-3443"><span class="linenos">3443</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3444"><a href="#DataType-3444"><span class="linenos">3444</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3445"><a href="#DataType-3445"><span class="linenos">3445</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3446"><a href="#DataType-3446"><span class="linenos">3446</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3447"><a href="#DataType-3447"><span class="linenos">3447</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3448"><a href="#DataType-3448"><span class="linenos">3448</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3449"><a href="#DataType-3449"><span class="linenos">3449</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3450"><a href="#DataType-3450"><span class="linenos">3450</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3451"><a href="#DataType-3451"><span class="linenos">3451</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3452"><a href="#DataType-3452"><span class="linenos">3452</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3453"><a href="#DataType-3453"><span class="linenos">3453</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3454"><a href="#DataType-3454"><span class="linenos">3454</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3455"><a href="#DataType-3455"><span class="linenos">3455</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3456"><a href="#DataType-3456"><span class="linenos">3456</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3457"><a href="#DataType-3457"><span class="linenos">3457</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3458"><a href="#DataType-3458"><span class="linenos">3458</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3459"><a href="#DataType-3459"><span class="linenos">3459</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3460"><a href="#DataType-3460"><span class="linenos">3460</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3461"><a href="#DataType-3461"><span class="linenos">3461</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3462"><a href="#DataType-3462"><span class="linenos">3462</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-3463"><a href="#DataType-3463"><span class="linenos">3463</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3464"><a href="#DataType-3464"><span class="linenos">3464</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3465"><a href="#DataType-3465"><span class="linenos">3465</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3466"><a href="#DataType-3466"><span class="linenos">3466</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="s2">&quot;USER-DEFINED&quot;</span>
-</span><span id="DataType-3467"><a href="#DataType-3467"><span class="linenos">3467</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3468"><a href="#DataType-3468"><span class="linenos">3468</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3469"><a href="#DataType-3469"><span class="linenos">3469</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3470"><a href="#DataType-3470"><span class="linenos">3470</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3471"><a href="#DataType-3471"><span class="linenos">3471</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-3472"><a href="#DataType-3472"><span class="linenos">3472</span></a>
-</span><span id="DataType-3473"><a href="#DataType-3473"><span class="linenos">3473</span></a> <span class="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-3474"><a href="#DataType-3474"><span class="linenos">3474</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="DataType-3475"><a href="#DataType-3475"><span class="linenos">3475</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="DataType-3476"><a href="#DataType-3476"><span class="linenos">3476</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="DataType-3477"><a href="#DataType-3477"><span class="linenos">3477</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="DataType-3478"><a href="#DataType-3478"><span class="linenos">3478</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="DataType-3479"><a href="#DataType-3479"><span class="linenos">3479</span></a> <span class="p">}</span>
-</span><span id="DataType-3480"><a href="#DataType-3480"><span class="linenos">3480</span></a>
-</span><span id="DataType-3481"><a href="#DataType-3481"><span class="linenos">3481</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-3482"><a href="#DataType-3482"><span class="linenos">3482</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="DataType-3483"><a href="#DataType-3483"><span class="linenos">3483</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="DataType-3484"><a href="#DataType-3484"><span class="linenos">3484</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="DataType-3485"><a href="#DataType-3485"><span class="linenos">3485</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="DataType-3486"><a href="#DataType-3486"><span class="linenos">3486</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="DataType-3487"><a href="#DataType-3487"><span class="linenos">3487</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="DataType-3488"><a href="#DataType-3488"><span class="linenos">3488</span></a> <span class="p">}</span>
-</span><span id="DataType-3489"><a href="#DataType-3489"><span class="linenos">3489</span></a>
-</span><span id="DataType-3490"><a href="#DataType-3490"><span class="linenos">3490</span></a> <span class="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-3491"><a href="#DataType-3491"><span class="linenos">3491</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="DataType-3492"><a href="#DataType-3492"><span class="linenos">3492</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="DataType-3493"><a href="#DataType-3493"><span class="linenos">3493</span></a> <span class="p">}</span>
-</span><span id="DataType-3494"><a href="#DataType-3494"><span class="linenos">3494</span></a>
-</span><span id="DataType-3495"><a href="#DataType-3495"><span class="linenos">3495</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-3496"><a href="#DataType-3496"><span class="linenos">3496</span></a>
-</span><span id="DataType-3497"><a href="#DataType-3497"><span class="linenos">3497</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-3498"><a href="#DataType-3498"><span class="linenos">3498</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
-</span><span id="DataType-3499"><a href="#DataType-3499"><span class="linenos">3499</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="DataType-3500"><a href="#DataType-3500"><span class="linenos">3500</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="DataType-3501"><a href="#DataType-3501"><span class="linenos">3501</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="DataType-3502"><a href="#DataType-3502"><span class="linenos">3502</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="DataType-3503"><a href="#DataType-3503"><span class="linenos">3503</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="DataType-3504"><a href="#DataType-3504"><span class="linenos">3504</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="DataType-3505"><a href="#DataType-3505"><span class="linenos">3505</span></a> <span class="p">}</span>
-</span><span id="DataType-3506"><a href="#DataType-3506"><span class="linenos">3506</span></a>
-</span><span id="DataType-3507"><a href="#DataType-3507"><span class="linenos">3507</span></a> <span class="n">META_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;UNKNOWN&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">}</span>
-</span><span id="DataType-3508"><a href="#DataType-3508"><span class="linenos">3508</span></a>
-</span><span id="DataType-3509"><a href="#DataType-3509"><span class="linenos">3509</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataType-3510"><a href="#DataType-3510"><span class="linenos">3510</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
-</span><span id="DataType-3511"><a href="#DataType-3511"><span class="linenos">3511</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-3512"><a href="#DataType-3512"><span class="linenos">3512</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="DataType-3513"><a href="#DataType-3513"><span class="linenos">3513</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-3514"><a href="#DataType-3514"><span class="linenos">3514</span></a>
-</span><span id="DataType-3515"><a href="#DataType-3515"><span class="linenos">3515</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-3516"><a href="#DataType-3516"><span class="linenos">3516</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="DataType-3517"><a href="#DataType-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="n">upper</span> <span class="ow">in</span> <span class="n">DataType</span><span class="o">.</span><span class="n">META_TYPES</span><span class="p">:</span>
-</span><span id="DataType-3518"><a href="#DataType-3518"><span class="linenos">3518</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">upper</span><span class="p">])</span>
-</span><span id="DataType-3519"><a href="#DataType-3519"><span class="linenos">3519</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType-3520"><a href="#DataType-3520"><span class="linenos">3520</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-3521"><a href="#DataType-3521"><span class="linenos">3521</span></a>
-</span><span id="DataType-3522"><a href="#DataType-3522"><span class="linenos">3522</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-3523"><a href="#DataType-3523"><span class="linenos">3523</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-3524"><a href="#DataType-3524"><span class="linenos">3524</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-3525"><a href="#DataType-3525"><span class="linenos">3525</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-3526"><a href="#DataType-3526"><span class="linenos">3526</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-3527"><a href="#DataType-3527"><span class="linenos">3527</span></a> <span class="k">return</span> <span class="n">dtype</span>
-</span><span id="DataType-3528"><a href="#DataType-3528"><span class="linenos">3528</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType-3529"><a href="#DataType-3529"><span class="linenos">3529</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-3530"><a href="#DataType-3530"><span class="linenos">3530</span></a>
-</span><span id="DataType-3531"><a href="#DataType-3531"><span class="linenos">3531</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-3532"><a href="#DataType-3532"><span class="linenos">3532</span></a>
-</span><span id="DataType-3533"><a href="#DataType-3533"><span class="linenos">3533</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="DataType-3534"><a href="#DataType-3534"><span class="linenos">3534</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="n">dtypes</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType-3456"><a href="#DataType-3456"><span class="linenos">3456</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-3457"><a href="#DataType-3457"><span class="linenos">3457</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3458"><a href="#DataType-3458"><span class="linenos">3458</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-3459"><a href="#DataType-3459"><span class="linenos">3459</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-3460"><a href="#DataType-3460"><span class="linenos">3460</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-3461"><a href="#DataType-3461"><span class="linenos">3461</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-3462"><a href="#DataType-3462"><span class="linenos">3462</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-3463"><a href="#DataType-3463"><span class="linenos">3463</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="DataType-3464"><a href="#DataType-3464"><span class="linenos">3464</span></a> <span class="p">}</span>
+</span><span id="DataType-3465"><a href="#DataType-3465"><span class="linenos">3465</span></a>
+</span><span id="DataType-3466"><a href="#DataType-3466"><span class="linenos">3466</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-3467"><a href="#DataType-3467"><span class="linenos">3467</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3468"><a href="#DataType-3468"><span class="linenos">3468</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3469"><a href="#DataType-3469"><span class="linenos">3469</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3470"><a href="#DataType-3470"><span class="linenos">3470</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3471"><a href="#DataType-3471"><span class="linenos">3471</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3472"><a href="#DataType-3472"><span class="linenos">3472</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3473"><a href="#DataType-3473"><span class="linenos">3473</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3474"><a href="#DataType-3474"><span class="linenos">3474</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3475"><a href="#DataType-3475"><span class="linenos">3475</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3476"><a href="#DataType-3476"><span class="linenos">3476</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3477"><a href="#DataType-3477"><span class="linenos">3477</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3478"><a href="#DataType-3478"><span class="linenos">3478</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3479"><a href="#DataType-3479"><span class="linenos">3479</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3480"><a href="#DataType-3480"><span class="linenos">3480</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3481"><a href="#DataType-3481"><span class="linenos">3481</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3482"><a href="#DataType-3482"><span class="linenos">3482</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3483"><a href="#DataType-3483"><span class="linenos">3483</span></a> <span class="n">ENUM8</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3484"><a href="#DataType-3484"><span class="linenos">3484</span></a> <span class="n">ENUM16</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3485"><a href="#DataType-3485"><span class="linenos">3485</span></a> <span class="n">FIXEDSTRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3486"><a href="#DataType-3486"><span class="linenos">3486</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3487"><a href="#DataType-3487"><span class="linenos">3487</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3488"><a href="#DataType-3488"><span class="linenos">3488</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3489"><a href="#DataType-3489"><span class="linenos">3489</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3490"><a href="#DataType-3490"><span class="linenos">3490</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3491"><a href="#DataType-3491"><span class="linenos">3491</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3492"><a href="#DataType-3492"><span class="linenos">3492</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3493"><a href="#DataType-3493"><span class="linenos">3493</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3494"><a href="#DataType-3494"><span class="linenos">3494</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3495"><a href="#DataType-3495"><span class="linenos">3495</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3496"><a href="#DataType-3496"><span class="linenos">3496</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3497"><a href="#DataType-3497"><span class="linenos">3497</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3498"><a href="#DataType-3498"><span class="linenos">3498</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3499"><a href="#DataType-3499"><span class="linenos">3499</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3500"><a href="#DataType-3500"><span class="linenos">3500</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3501"><a href="#DataType-3501"><span class="linenos">3501</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3502"><a href="#DataType-3502"><span class="linenos">3502</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3503"><a href="#DataType-3503"><span class="linenos">3503</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3504"><a href="#DataType-3504"><span class="linenos">3504</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3505"><a href="#DataType-3505"><span class="linenos">3505</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3506"><a href="#DataType-3506"><span class="linenos">3506</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3507"><a href="#DataType-3507"><span class="linenos">3507</span></a> <span class="n">LOWCARDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3508"><a href="#DataType-3508"><span class="linenos">3508</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3509"><a href="#DataType-3509"><span class="linenos">3509</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3510"><a href="#DataType-3510"><span class="linenos">3510</span></a> <span class="n">MEDIUMINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3511"><a href="#DataType-3511"><span class="linenos">3511</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3512"><a href="#DataType-3512"><span class="linenos">3512</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3513"><a href="#DataType-3513"><span class="linenos">3513</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3514"><a href="#DataType-3514"><span class="linenos">3514</span></a> <span class="n">NESTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3515"><a href="#DataType-3515"><span class="linenos">3515</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3516"><a href="#DataType-3516"><span class="linenos">3516</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3517"><a href="#DataType-3517"><span class="linenos">3517</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3518"><a href="#DataType-3518"><span class="linenos">3518</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3519"><a href="#DataType-3519"><span class="linenos">3519</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3520"><a href="#DataType-3520"><span class="linenos">3520</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3521"><a href="#DataType-3521"><span class="linenos">3521</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3522"><a href="#DataType-3522"><span class="linenos">3522</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3523"><a href="#DataType-3523"><span class="linenos">3523</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3524"><a href="#DataType-3524"><span class="linenos">3524</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3525"><a href="#DataType-3525"><span class="linenos">3525</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3526"><a href="#DataType-3526"><span class="linenos">3526</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3527"><a href="#DataType-3527"><span class="linenos">3527</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3528"><a href="#DataType-3528"><span class="linenos">3528</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3529"><a href="#DataType-3529"><span class="linenos">3529</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3530"><a href="#DataType-3530"><span class="linenos">3530</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3531"><a href="#DataType-3531"><span class="linenos">3531</span></a> <span class="n">TIMETZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3532"><a href="#DataType-3532"><span class="linenos">3532</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3533"><a href="#DataType-3533"><span class="linenos">3533</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3534"><a href="#DataType-3534"><span class="linenos">3534</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3535"><a href="#DataType-3535"><span class="linenos">3535</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3536"><a href="#DataType-3536"><span class="linenos">3536</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3537"><a href="#DataType-3537"><span class="linenos">3537</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3538"><a href="#DataType-3538"><span class="linenos">3538</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3539"><a href="#DataType-3539"><span class="linenos">3539</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3540"><a href="#DataType-3540"><span class="linenos">3540</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3541"><a href="#DataType-3541"><span class="linenos">3541</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3542"><a href="#DataType-3542"><span class="linenos">3542</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3543"><a href="#DataType-3543"><span class="linenos">3543</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3544"><a href="#DataType-3544"><span class="linenos">3544</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3545"><a href="#DataType-3545"><span class="linenos">3545</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-3546"><a href="#DataType-3546"><span class="linenos">3546</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="s2">&quot;USER-DEFINED&quot;</span>
+</span><span id="DataType-3547"><a href="#DataType-3547"><span class="linenos">3547</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3548"><a href="#DataType-3548"><span class="linenos">3548</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3549"><a href="#DataType-3549"><span class="linenos">3549</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3550"><a href="#DataType-3550"><span class="linenos">3550</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3551"><a href="#DataType-3551"><span class="linenos">3551</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3552"><a href="#DataType-3552"><span class="linenos">3552</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3553"><a href="#DataType-3553"><span class="linenos">3553</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3554"><a href="#DataType-3554"><span class="linenos">3554</span></a> <span class="n">YEAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3555"><a href="#DataType-3555"><span class="linenos">3555</span></a>
+</span><span id="DataType-3556"><a href="#DataType-3556"><span class="linenos">3556</span></a> <span class="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3557"><a href="#DataType-3557"><span class="linenos">3557</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="DataType-3558"><a href="#DataType-3558"><span class="linenos">3558</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="DataType-3559"><a href="#DataType-3559"><span class="linenos">3559</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="DataType-3560"><a href="#DataType-3560"><span class="linenos">3560</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="DataType-3561"><a href="#DataType-3561"><span class="linenos">3561</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="DataType-3562"><a href="#DataType-3562"><span class="linenos">3562</span></a> <span class="p">}</span>
+</span><span id="DataType-3563"><a href="#DataType-3563"><span class="linenos">3563</span></a>
+</span><span id="DataType-3564"><a href="#DataType-3564"><span class="linenos">3564</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3565"><a href="#DataType-3565"><span class="linenos">3565</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="DataType-3566"><a href="#DataType-3566"><span class="linenos">3566</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="DataType-3567"><a href="#DataType-3567"><span class="linenos">3567</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="DataType-3568"><a href="#DataType-3568"><span class="linenos">3568</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="DataType-3569"><a href="#DataType-3569"><span class="linenos">3569</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="DataType-3570"><a href="#DataType-3570"><span class="linenos">3570</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="DataType-3571"><a href="#DataType-3571"><span class="linenos">3571</span></a> <span class="p">}</span>
+</span><span id="DataType-3572"><a href="#DataType-3572"><span class="linenos">3572</span></a>
+</span><span id="DataType-3573"><a href="#DataType-3573"><span class="linenos">3573</span></a> <span class="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3574"><a href="#DataType-3574"><span class="linenos">3574</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="DataType-3575"><a href="#DataType-3575"><span class="linenos">3575</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="DataType-3576"><a href="#DataType-3576"><span class="linenos">3576</span></a> <span class="p">}</span>
+</span><span id="DataType-3577"><a href="#DataType-3577"><span class="linenos">3577</span></a>
+</span><span id="DataType-3578"><a href="#DataType-3578"><span class="linenos">3578</span></a> <span class="n">NUMERIC_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3579"><a href="#DataType-3579"><span class="linenos">3579</span></a> <span class="o">*</span><span class="n">INTEGER_TYPES</span><span class="p">,</span>
+</span><span id="DataType-3580"><a href="#DataType-3580"><span class="linenos">3580</span></a> <span class="o">*</span><span class="n">FLOAT_TYPES</span><span class="p">,</span>
+</span><span id="DataType-3581"><a href="#DataType-3581"><span class="linenos">3581</span></a> <span class="p">}</span>
+</span><span id="DataType-3582"><a href="#DataType-3582"><span class="linenos">3582</span></a>
+</span><span id="DataType-3583"><a href="#DataType-3583"><span class="linenos">3583</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3584"><a href="#DataType-3584"><span class="linenos">3584</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="DataType-3585"><a href="#DataType-3585"><span class="linenos">3585</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="DataType-3586"><a href="#DataType-3586"><span class="linenos">3586</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="DataType-3587"><a href="#DataType-3587"><span class="linenos">3587</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="DataType-3588"><a href="#DataType-3588"><span class="linenos">3588</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="DataType-3589"><a href="#DataType-3589"><span class="linenos">3589</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="DataType-3590"><a href="#DataType-3590"><span class="linenos">3590</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="DataType-3591"><a href="#DataType-3591"><span class="linenos">3591</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="DataType-3592"><a href="#DataType-3592"><span class="linenos">3592</span></a> <span class="p">}</span>
+</span><span id="DataType-3593"><a href="#DataType-3593"><span class="linenos">3593</span></a>
+</span><span id="DataType-3594"><a href="#DataType-3594"><span class="linenos">3594</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataType-3595"><a href="#DataType-3595"><span class="linenos">3595</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
+</span><span id="DataType-3596"><a href="#DataType-3596"><span class="linenos">3596</span></a> <span class="bp">cls</span><span class="p">,</span>
+</span><span id="DataType-3597"><a href="#DataType-3597"><span class="linenos">3597</span></a> <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><span id="DataType-3598"><a href="#DataType-3598"><span class="linenos">3598</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="DataType-3599"><a href="#DataType-3599"><span class="linenos">3599</span></a> <span class="n">udt</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="DataType-3600"><a href="#DataType-3600"><span class="linenos">3600</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataType-3601"><a href="#DataType-3601"><span class="linenos">3601</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="DataType-3602"><a href="#DataType-3602"><span class="linenos">3602</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataType-3603"><a href="#DataType-3603"><span class="linenos">3603</span></a><span class="sd"> Constructs a DataType object.</span>
+</span><span id="DataType-3604"><a href="#DataType-3604"><span class="linenos">3604</span></a>
+</span><span id="DataType-3605"><a href="#DataType-3605"><span class="linenos">3605</span></a><span class="sd"> Args:</span>
+</span><span id="DataType-3606"><a href="#DataType-3606"><span class="linenos">3606</span></a><span class="sd"> dtype: the data type of interest.</span>
+</span><span id="DataType-3607"><a href="#DataType-3607"><span class="linenos">3607</span></a><span class="sd"> dialect: the dialect to use for parsing `dtype`, in case it&#39;s a string.</span>
+</span><span id="DataType-3608"><a href="#DataType-3608"><span class="linenos">3608</span></a><span class="sd"> udt: when set to True, `dtype` will be used as-is if it can&#39;t be parsed into a</span>
+</span><span id="DataType-3609"><a href="#DataType-3609"><span class="linenos">3609</span></a><span class="sd"> DataType, thus creating a user-defined type.</span>
+</span><span id="DataType-3610"><a href="#DataType-3610"><span class="linenos">3610</span></a><span class="sd"> kawrgs: additional arguments to pass in the constructor of DataType.</span>
+</span><span id="DataType-3611"><a href="#DataType-3611"><span class="linenos">3611</span></a>
+</span><span id="DataType-3612"><a href="#DataType-3612"><span class="linenos">3612</span></a><span class="sd"> Returns:</span>
+</span><span id="DataType-3613"><a href="#DataType-3613"><span class="linenos">3613</span></a><span class="sd"> The constructed DataType object.</span>
+</span><span id="DataType-3614"><a href="#DataType-3614"><span class="linenos">3614</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataType-3615"><a href="#DataType-3615"><span class="linenos">3615</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-3616"><a href="#DataType-3616"><span class="linenos">3616</span></a>
+</span><span id="DataType-3617"><a href="#DataType-3617"><span class="linenos">3617</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-3618"><a href="#DataType-3618"><span class="linenos">3618</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="o">==</span> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span>
+</span><span id="DataType-3619"><a href="#DataType-3619"><span class="linenos">3619</span></a> <span class="k">return</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="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="DataType-3620"><a href="#DataType-3620"><span class="linenos">3620</span></a>
+</span><span id="DataType-3621"><a href="#DataType-3621"><span class="linenos">3621</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="DataType-3622"><a href="#DataType-3622"><span class="linenos">3622</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-3623"><a href="#DataType-3623"><span class="linenos">3623</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="DataType-3624"><a href="#DataType-3624"><span class="linenos">3624</span></a> <span class="k">if</span> <span class="n">udt</span><span class="p">:</span>
+</span><span id="DataType-3625"><a href="#DataType-3625"><span class="linenos">3625</span></a> <span class="k">return</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="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">dtype</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="DataType-3626"><a href="#DataType-3626"><span class="linenos">3626</span></a> <span class="k">raise</span>
+</span><span id="DataType-3627"><a href="#DataType-3627"><span class="linenos">3627</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-3628"><a href="#DataType-3628"><span class="linenos">3628</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-3629"><a href="#DataType-3629"><span class="linenos">3629</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-3630"><a href="#DataType-3630"><span class="linenos">3630</span></a> <span class="k">return</span> <span class="n">dtype</span>
+</span><span id="DataType-3631"><a href="#DataType-3631"><span class="linenos">3631</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType-3632"><a href="#DataType-3632"><span class="linenos">3632</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-3633"><a href="#DataType-3633"><span class="linenos">3633</span></a>
+</span><span id="DataType-3634"><a href="#DataType-3634"><span class="linenos">3634</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-3635"><a href="#DataType-3635"><span class="linenos">3635</span></a>
+</span><span id="DataType-3636"><a href="#DataType-3636"><span class="linenos">3636</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="DataType-3637"><a href="#DataType-3637"><span class="linenos">3637</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataType-3638"><a href="#DataType-3638"><span class="linenos">3638</span></a><span class="sd"> Checks whether this DataType matches one of the provided data types. Nested types or precision</span>
+</span><span id="DataType-3639"><a href="#DataType-3639"><span class="linenos">3639</span></a><span class="sd"> will be compared using &quot;structural equivalence&quot; semantics, so e.g. array&lt;int&gt; != array&lt;float&gt;.</span>
+</span><span id="DataType-3640"><a href="#DataType-3640"><span class="linenos">3640</span></a>
+</span><span id="DataType-3641"><a href="#DataType-3641"><span class="linenos">3641</span></a><span class="sd"> Args:</span>
+</span><span id="DataType-3642"><a href="#DataType-3642"><span class="linenos">3642</span></a><span class="sd"> dtypes: the data types to compare this DataType to.</span>
+</span><span id="DataType-3643"><a href="#DataType-3643"><span class="linenos">3643</span></a>
+</span><span id="DataType-3644"><a href="#DataType-3644"><span class="linenos">3644</span></a><span class="sd"> Returns:</span>
+</span><span id="DataType-3645"><a href="#DataType-3645"><span class="linenos">3645</span></a><span class="sd"> True, if and only if there is a type in `dtypes` which is equal to this DataType.</span>
+</span><span id="DataType-3646"><a href="#DataType-3646"><span class="linenos">3646</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataType-3647"><a href="#DataType-3647"><span class="linenos">3647</span></a> <span class="k">for</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="n">dtypes</span><span class="p">:</span>
+</span><span id="DataType-3648"><a href="#DataType-3648"><span class="linenos">3648</span></a> <span class="n">other</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">dtype</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="DataType-3649"><a href="#DataType-3649"><span class="linenos">3649</span></a>
+</span><span id="DataType-3650"><a href="#DataType-3650"><span class="linenos">3650</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DataType-3651"><a href="#DataType-3651"><span class="linenos">3651</span></a> <span class="n">other</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataType-3652"><a href="#DataType-3652"><span class="linenos">3652</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span>
+</span><span id="DataType-3653"><a href="#DataType-3653"><span class="linenos">3653</span></a> <span class="ow">or</span> <span class="n">other</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span>
+</span><span id="DataType-3654"><a href="#DataType-3654"><span class="linenos">3654</span></a> <span class="p">):</span>
+</span><span id="DataType-3655"><a href="#DataType-3655"><span class="linenos">3655</span></a> <span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="DataType-3656"><a href="#DataType-3656"><span class="linenos">3656</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType-3657"><a href="#DataType-3657"><span class="linenos">3657</span></a> <span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DataType-3658"><a href="#DataType-3658"><span class="linenos">3658</span></a>
+</span><span id="DataType-3659"><a href="#DataType-3659"><span class="linenos">3659</span></a> <span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
+</span><span id="DataType-3660"><a href="#DataType-3660"><span class="linenos">3660</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="DataType-3661"><a href="#DataType-3661"><span class="linenos">3661</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -37805,7 +39106,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div id="DataType.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;expressions&#39;: False, &#39;nested&#39;: False, &#39;values&#39;: False, &#39;prefix&#39;: False}</span>
+<input id="DataType.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="DataType.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: True, &#39;expressions&#39;: False, &#39;nested&#39;: False, &#39;values&#39;: False, &#39;prefix&#39;: False, &#39;kind&#39;: False}</span>
</div>
@@ -37818,7 +39120,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">TEXT_TYPES</span> =
<input id="DataType.TEXT_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;}</span>
</div>
@@ -37831,7 +39133,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">INTEGER_TYPES</span> =
<input id="DataType.INTEGER_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;}</span>
</div>
@@ -37843,7 +39145,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div id="DataType.FLOAT_TYPES" class="classattr">
<div class="attr variable">
<span class="name">FLOAT_TYPES</span> =
-<span class="default_value">{&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}</span>
+<span class="default_value">{&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
</div>
@@ -37856,7 +39158,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">NUMERIC_TYPES</span> =
<input id="DataType.NUMERIC_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
</div>
@@ -37869,7 +39171,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">TEMPORAL_TYPES</span> =
<input id="DataType.TEMPORAL_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{&lt;Type.DATE: &#39;DATE&#39;&gt;, &lt;Type.TIME: &#39;TIME&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{&lt;Type.DATE: &#39;DATE&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;Type.TIME: &#39;TIME&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;}</span>
</div>
@@ -37878,57 +39180,81 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
- <div id="DataType.META_TYPES" class="classattr">
- <div class="attr variable">
- <span class="name">META_TYPES</span> =
-<span class="default_value">{&#39;UNKNOWN&#39;, &#39;NULL&#39;}</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.META_TYPES"></a>
-
-
-
- </div>
<div id="DataType.build" class="classattr">
<input id="DataType.build-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">build</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="#DataType">sqlglot.expressions.DataType</a></span> <span class="o">|</span> <span class="n"><a href="#DataType.Type">sqlglot.expressions.DataType.Type</a></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="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataType">sqlglot.expressions.DataType</a></span>:</span></span>
+ <span class="name">build</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="#DataType">sqlglot.expressions.DataType</a></span> <span class="o">|</span> <span class="n"><a href="#DataType.Type">sqlglot.expressions.DataType.Type</a></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">udt</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataType">sqlglot.expressions.DataType</a></span>:</span></span>
<label class="view-source-button" for="DataType.build-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#DataType.build"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.build-3509"><a href="#DataType.build-3509"><span class="linenos">3509</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataType.build-3510"><a href="#DataType.build-3510"><span class="linenos">3510</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
-</span><span id="DataType.build-3511"><a href="#DataType.build-3511"><span class="linenos">3511</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-3512"><a href="#DataType.build-3512"><span class="linenos">3512</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-3513"><a href="#DataType.build-3513"><span class="linenos">3513</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-3514"><a href="#DataType.build-3514"><span class="linenos">3514</span></a>
-</span><span id="DataType.build-3515"><a href="#DataType.build-3515"><span class="linenos">3515</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-3516"><a href="#DataType.build-3516"><span class="linenos">3516</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="DataType.build-3517"><a href="#DataType.build-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="n">upper</span> <span class="ow">in</span> <span class="n">DataType</span><span class="o">.</span><span class="n">META_TYPES</span><span class="p">:</span>
-</span><span id="DataType.build-3518"><a href="#DataType.build-3518"><span class="linenos">3518</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">upper</span><span class="p">])</span>
-</span><span id="DataType.build-3519"><a href="#DataType.build-3519"><span class="linenos">3519</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType.build-3520"><a href="#DataType.build-3520"><span class="linenos">3520</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-3521"><a href="#DataType.build-3521"><span class="linenos">3521</span></a>
-</span><span id="DataType.build-3522"><a href="#DataType.build-3522"><span class="linenos">3522</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-3523"><a href="#DataType.build-3523"><span class="linenos">3523</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-3524"><a href="#DataType.build-3524"><span class="linenos">3524</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-3525"><a href="#DataType.build-3525"><span class="linenos">3525</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-3526"><a href="#DataType.build-3526"><span class="linenos">3526</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-3527"><a href="#DataType.build-3527"><span class="linenos">3527</span></a> <span class="k">return</span> <span class="n">dtype</span>
-</span><span id="DataType.build-3528"><a href="#DataType.build-3528"><span class="linenos">3528</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType.build-3529"><a href="#DataType.build-3529"><span class="linenos">3529</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-3530"><a href="#DataType.build-3530"><span class="linenos">3530</span></a>
-</span><span id="DataType.build-3531"><a href="#DataType.build-3531"><span class="linenos">3531</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.build-3594"><a href="#DataType.build-3594"><span class="linenos">3594</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataType.build-3595"><a href="#DataType.build-3595"><span class="linenos">3595</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
+</span><span id="DataType.build-3596"><a href="#DataType.build-3596"><span class="linenos">3596</span></a> <span class="bp">cls</span><span class="p">,</span>
+</span><span id="DataType.build-3597"><a href="#DataType.build-3597"><span class="linenos">3597</span></a> <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><span id="DataType.build-3598"><a href="#DataType.build-3598"><span class="linenos">3598</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="DataType.build-3599"><a href="#DataType.build-3599"><span class="linenos">3599</span></a> <span class="n">udt</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="DataType.build-3600"><a href="#DataType.build-3600"><span class="linenos">3600</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="DataType.build-3601"><a href="#DataType.build-3601"><span class="linenos">3601</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-3602"><a href="#DataType.build-3602"><span class="linenos">3602</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataType.build-3603"><a href="#DataType.build-3603"><span class="linenos">3603</span></a><span class="sd"> Constructs a DataType object.</span>
+</span><span id="DataType.build-3604"><a href="#DataType.build-3604"><span class="linenos">3604</span></a>
+</span><span id="DataType.build-3605"><a href="#DataType.build-3605"><span class="linenos">3605</span></a><span class="sd"> Args:</span>
+</span><span id="DataType.build-3606"><a href="#DataType.build-3606"><span class="linenos">3606</span></a><span class="sd"> dtype: the data type of interest.</span>
+</span><span id="DataType.build-3607"><a href="#DataType.build-3607"><span class="linenos">3607</span></a><span class="sd"> dialect: the dialect to use for parsing `dtype`, in case it&#39;s a string.</span>
+</span><span id="DataType.build-3608"><a href="#DataType.build-3608"><span class="linenos">3608</span></a><span class="sd"> udt: when set to True, `dtype` will be used as-is if it can&#39;t be parsed into a</span>
+</span><span id="DataType.build-3609"><a href="#DataType.build-3609"><span class="linenos">3609</span></a><span class="sd"> DataType, thus creating a user-defined type.</span>
+</span><span id="DataType.build-3610"><a href="#DataType.build-3610"><span class="linenos">3610</span></a><span class="sd"> kawrgs: additional arguments to pass in the constructor of DataType.</span>
+</span><span id="DataType.build-3611"><a href="#DataType.build-3611"><span class="linenos">3611</span></a>
+</span><span id="DataType.build-3612"><a href="#DataType.build-3612"><span class="linenos">3612</span></a><span class="sd"> Returns:</span>
+</span><span id="DataType.build-3613"><a href="#DataType.build-3613"><span class="linenos">3613</span></a><span class="sd"> The constructed DataType object.</span>
+</span><span id="DataType.build-3614"><a href="#DataType.build-3614"><span class="linenos">3614</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataType.build-3615"><a href="#DataType.build-3615"><span class="linenos">3615</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-3616"><a href="#DataType.build-3616"><span class="linenos">3616</span></a>
+</span><span id="DataType.build-3617"><a href="#DataType.build-3617"><span class="linenos">3617</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-3618"><a href="#DataType.build-3618"><span class="linenos">3618</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="o">==</span> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span>
+</span><span id="DataType.build-3619"><a href="#DataType.build-3619"><span class="linenos">3619</span></a> <span class="k">return</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="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="DataType.build-3620"><a href="#DataType.build-3620"><span class="linenos">3620</span></a>
+</span><span id="DataType.build-3621"><a href="#DataType.build-3621"><span class="linenos">3621</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="DataType.build-3622"><a href="#DataType.build-3622"><span class="linenos">3622</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-3623"><a href="#DataType.build-3623"><span class="linenos">3623</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="DataType.build-3624"><a href="#DataType.build-3624"><span class="linenos">3624</span></a> <span class="k">if</span> <span class="n">udt</span><span class="p">:</span>
+</span><span id="DataType.build-3625"><a href="#DataType.build-3625"><span class="linenos">3625</span></a> <span class="k">return</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="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">dtype</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="DataType.build-3626"><a href="#DataType.build-3626"><span class="linenos">3626</span></a> <span class="k">raise</span>
+</span><span id="DataType.build-3627"><a href="#DataType.build-3627"><span class="linenos">3627</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-3628"><a href="#DataType.build-3628"><span class="linenos">3628</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-3629"><a href="#DataType.build-3629"><span class="linenos">3629</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-3630"><a href="#DataType.build-3630"><span class="linenos">3630</span></a> <span class="k">return</span> <span class="n">dtype</span>
+</span><span id="DataType.build-3631"><a href="#DataType.build-3631"><span class="linenos">3631</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType.build-3632"><a href="#DataType.build-3632"><span class="linenos">3632</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-3633"><a href="#DataType.build-3633"><span class="linenos">3633</span></a>
+</span><span id="DataType.build-3634"><a href="#DataType.build-3634"><span class="linenos">3634</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>
+
+
+ <div class="docstring"><p>Constructs a DataType object.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>dtype:</strong> the data type of interest.</li>
+<li><strong>dialect:</strong> the dialect to use for parsing <code>dtype</code>, in case it's a string.</li>
+<li><strong>udt:</strong> when set to True, <code>dtype</code> will be used as-is if it can't be parsed into a
+DataType, thus creating a user-defined type.</li>
+<li><strong>kawrgs:</strong> additional arguments to pass in the constructor of DataType.</li>
+</ul>
+<h6 id="returns">Returns:</h6>
+
+<blockquote>
+ <p>The constructed DataType object.</p>
+</blockquote>
+</div>
-
</div>
<div id="DataType.is_type" class="classattr">
@@ -37942,12 +39268,51 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DataType.is_type"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.is_type-3533"><a href="#DataType.is_type-3533"><span class="linenos">3533</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="DataType.is_type-3534"><a href="#DataType.is_type-3534"><span class="linenos">3534</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="n">dtypes</span><span class="p">)</span>
-</span></pre></div>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.is_type-3636"><a href="#DataType.is_type-3636"><span class="linenos">3636</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="DataType.is_type-3637"><a href="#DataType.is_type-3637"><span class="linenos">3637</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="DataType.is_type-3638"><a href="#DataType.is_type-3638"><span class="linenos">3638</span></a><span class="sd"> Checks whether this DataType matches one of the provided data types. Nested types or precision</span>
+</span><span id="DataType.is_type-3639"><a href="#DataType.is_type-3639"><span class="linenos">3639</span></a><span class="sd"> will be compared using &quot;structural equivalence&quot; semantics, so e.g. array&lt;int&gt; != array&lt;float&gt;.</span>
+</span><span id="DataType.is_type-3640"><a href="#DataType.is_type-3640"><span class="linenos">3640</span></a>
+</span><span id="DataType.is_type-3641"><a href="#DataType.is_type-3641"><span class="linenos">3641</span></a><span class="sd"> Args:</span>
+</span><span id="DataType.is_type-3642"><a href="#DataType.is_type-3642"><span class="linenos">3642</span></a><span class="sd"> dtypes: the data types to compare this DataType to.</span>
+</span><span id="DataType.is_type-3643"><a href="#DataType.is_type-3643"><span class="linenos">3643</span></a>
+</span><span id="DataType.is_type-3644"><a href="#DataType.is_type-3644"><span class="linenos">3644</span></a><span class="sd"> Returns:</span>
+</span><span id="DataType.is_type-3645"><a href="#DataType.is_type-3645"><span class="linenos">3645</span></a><span class="sd"> True, if and only if there is a type in `dtypes` which is equal to this DataType.</span>
+</span><span id="DataType.is_type-3646"><a href="#DataType.is_type-3646"><span class="linenos">3646</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="DataType.is_type-3647"><a href="#DataType.is_type-3647"><span class="linenos">3647</span></a> <span class="k">for</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="n">dtypes</span><span class="p">:</span>
+</span><span id="DataType.is_type-3648"><a href="#DataType.is_type-3648"><span class="linenos">3648</span></a> <span class="n">other</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">dtype</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="DataType.is_type-3649"><a href="#DataType.is_type-3649"><span class="linenos">3649</span></a>
+</span><span id="DataType.is_type-3650"><a href="#DataType.is_type-3650"><span class="linenos">3650</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DataType.is_type-3651"><a href="#DataType.is_type-3651"><span class="linenos">3651</span></a> <span class="n">other</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="DataType.is_type-3652"><a href="#DataType.is_type-3652"><span class="linenos">3652</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span>
+</span><span id="DataType.is_type-3653"><a href="#DataType.is_type-3653"><span class="linenos">3653</span></a> <span class="ow">or</span> <span class="n">other</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span>
+</span><span id="DataType.is_type-3654"><a href="#DataType.is_type-3654"><span class="linenos">3654</span></a> <span class="p">):</span>
+</span><span id="DataType.is_type-3655"><a href="#DataType.is_type-3655"><span class="linenos">3655</span></a> <span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="DataType.is_type-3656"><a href="#DataType.is_type-3656"><span class="linenos">3656</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType.is_type-3657"><a href="#DataType.is_type-3657"><span class="linenos">3657</span></a> <span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DataType.is_type-3658"><a href="#DataType.is_type-3658"><span class="linenos">3658</span></a>
+</span><span id="DataType.is_type-3659"><a href="#DataType.is_type-3659"><span class="linenos">3659</span></a> <span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
+</span><span id="DataType.is_type-3660"><a href="#DataType.is_type-3660"><span class="linenos">3660</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="DataType.is_type-3661"><a href="#DataType.is_type-3661"><span class="linenos">3661</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Checks whether this DataType matches one of the provided data types. Nested types or precision
+will be compared using "structural equivalence" semantics, so e.g. array<int> != array<float>.</p>
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>dtypes:</strong> the data types to compare this DataType to.</li>
+</ul>
+
+<h6 id="returns">Returns:</h6>
+
+<blockquote>
+ <p>True, if and only if there is a type in <code>dtypes</code> which is equal to this DataType.</p>
+</blockquote>
+</div>
-
</div>
<div id="DataType.key" class="classattr">
@@ -38030,87 +39395,95 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DataType.Type"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.Type-3391"><a href="#DataType.Type-3391"><span class="linenos">3391</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-3392"><a href="#DataType.Type-3392"><span class="linenos">3392</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-3393"><a href="#DataType.Type-3393"><span class="linenos">3393</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-3394"><a href="#DataType.Type-3394"><span class="linenos">3394</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-3395"><a href="#DataType.Type-3395"><span class="linenos">3395</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-3396"><a href="#DataType.Type-3396"><span class="linenos">3396</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-3397"><a href="#DataType.Type-3397"><span class="linenos">3397</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-3398"><a href="#DataType.Type-3398"><span class="linenos">3398</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-3399"><a href="#DataType.Type-3399"><span class="linenos">3399</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-3400"><a href="#DataType.Type-3400"><span class="linenos">3400</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-3401"><a href="#DataType.Type-3401"><span class="linenos">3401</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-3402"><a href="#DataType.Type-3402"><span class="linenos">3402</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3403"><a href="#DataType.Type-3403"><span class="linenos">3403</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3404"><a href="#DataType.Type-3404"><span class="linenos">3404</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3405"><a href="#DataType.Type-3405"><span class="linenos">3405</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3406"><a href="#DataType.Type-3406"><span class="linenos">3406</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3407"><a href="#DataType.Type-3407"><span class="linenos">3407</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3408"><a href="#DataType.Type-3408"><span class="linenos">3408</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3409"><a href="#DataType.Type-3409"><span class="linenos">3409</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3410"><a href="#DataType.Type-3410"><span class="linenos">3410</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3411"><a href="#DataType.Type-3411"><span class="linenos">3411</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3412"><a href="#DataType.Type-3412"><span class="linenos">3412</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3413"><a href="#DataType.Type-3413"><span class="linenos">3413</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3414"><a href="#DataType.Type-3414"><span class="linenos">3414</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3415"><a href="#DataType.Type-3415"><span class="linenos">3415</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3416"><a href="#DataType.Type-3416"><span class="linenos">3416</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-3417"><a href="#DataType.Type-3417"><span class="linenos">3417</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-3418"><a href="#DataType.Type-3418"><span class="linenos">3418</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-3419"><a href="#DataType.Type-3419"><span class="linenos">3419</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-3420"><a href="#DataType.Type-3420"><span class="linenos">3420</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-3421"><a href="#DataType.Type-3421"><span class="linenos">3421</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-3422"><a href="#DataType.Type-3422"><span class="linenos">3422</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-3423"><a href="#DataType.Type-3423"><span class="linenos">3423</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-3424"><a href="#DataType.Type-3424"><span class="linenos">3424</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-3425"><a href="#DataType.Type-3425"><span class="linenos">3425</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3426"><a href="#DataType.Type-3426"><span class="linenos">3426</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3427"><a href="#DataType.Type-3427"><span class="linenos">3427</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-3428"><a href="#DataType.Type-3428"><span class="linenos">3428</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3429"><a href="#DataType.Type-3429"><span class="linenos">3429</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3430"><a href="#DataType.Type-3430"><span class="linenos">3430</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-3431"><a href="#DataType.Type-3431"><span class="linenos">3431</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-3432"><a href="#DataType.Type-3432"><span class="linenos">3432</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-3433"><a href="#DataType.Type-3433"><span class="linenos">3433</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-3434"><a href="#DataType.Type-3434"><span class="linenos">3434</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-3435"><a href="#DataType.Type-3435"><span class="linenos">3435</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-3436"><a href="#DataType.Type-3436"><span class="linenos">3436</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-3437"><a href="#DataType.Type-3437"><span class="linenos">3437</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-3438"><a href="#DataType.Type-3438"><span class="linenos">3438</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-3439"><a href="#DataType.Type-3439"><span class="linenos">3439</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-3440"><a href="#DataType.Type-3440"><span class="linenos">3440</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-3441"><a href="#DataType.Type-3441"><span class="linenos">3441</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-3442"><a href="#DataType.Type-3442"><span class="linenos">3442</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-3443"><a href="#DataType.Type-3443"><span class="linenos">3443</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-3444"><a href="#DataType.Type-3444"><span class="linenos">3444</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-3445"><a href="#DataType.Type-3445"><span class="linenos">3445</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-3446"><a href="#DataType.Type-3446"><span class="linenos">3446</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3447"><a href="#DataType.Type-3447"><span class="linenos">3447</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-3448"><a href="#DataType.Type-3448"><span class="linenos">3448</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-3449"><a href="#DataType.Type-3449"><span class="linenos">3449</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-3450"><a href="#DataType.Type-3450"><span class="linenos">3450</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-3451"><a href="#DataType.Type-3451"><span class="linenos">3451</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-3452"><a href="#DataType.Type-3452"><span class="linenos">3452</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-3453"><a href="#DataType.Type-3453"><span class="linenos">3453</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-3454"><a href="#DataType.Type-3454"><span class="linenos">3454</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-3455"><a href="#DataType.Type-3455"><span class="linenos">3455</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-3456"><a href="#DataType.Type-3456"><span class="linenos">3456</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-3457"><a href="#DataType.Type-3457"><span class="linenos">3457</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-3458"><a href="#DataType.Type-3458"><span class="linenos">3458</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-3459"><a href="#DataType.Type-3459"><span class="linenos">3459</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-3460"><a href="#DataType.Type-3460"><span class="linenos">3460</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-3461"><a href="#DataType.Type-3461"><span class="linenos">3461</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-3462"><a href="#DataType.Type-3462"><span class="linenos">3462</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.Type-3463"><a href="#DataType.Type-3463"><span class="linenos">3463</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3464"><a href="#DataType.Type-3464"><span class="linenos">3464</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-3465"><a href="#DataType.Type-3465"><span class="linenos">3465</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-3466"><a href="#DataType.Type-3466"><span class="linenos">3466</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="s2">&quot;USER-DEFINED&quot;</span>
-</span><span id="DataType.Type-3467"><a href="#DataType.Type-3467"><span class="linenos">3467</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-3468"><a href="#DataType.Type-3468"><span class="linenos">3468</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-3469"><a href="#DataType.Type-3469"><span class="linenos">3469</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-3470"><a href="#DataType.Type-3470"><span class="linenos">3470</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-3471"><a href="#DataType.Type-3471"><span class="linenos">3471</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.Type-3466"><a href="#DataType.Type-3466"><span class="linenos">3466</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-3467"><a href="#DataType.Type-3467"><span class="linenos">3467</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-3468"><a href="#DataType.Type-3468"><span class="linenos">3468</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-3469"><a href="#DataType.Type-3469"><span class="linenos">3469</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-3470"><a href="#DataType.Type-3470"><span class="linenos">3470</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-3471"><a href="#DataType.Type-3471"><span class="linenos">3471</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-3472"><a href="#DataType.Type-3472"><span class="linenos">3472</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-3473"><a href="#DataType.Type-3473"><span class="linenos">3473</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-3474"><a href="#DataType.Type-3474"><span class="linenos">3474</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-3475"><a href="#DataType.Type-3475"><span class="linenos">3475</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-3476"><a href="#DataType.Type-3476"><span class="linenos">3476</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3477"><a href="#DataType.Type-3477"><span class="linenos">3477</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3478"><a href="#DataType.Type-3478"><span class="linenos">3478</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-3479"><a href="#DataType.Type-3479"><span class="linenos">3479</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3480"><a href="#DataType.Type-3480"><span class="linenos">3480</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-3481"><a href="#DataType.Type-3481"><span class="linenos">3481</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-3482"><a href="#DataType.Type-3482"><span class="linenos">3482</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3483"><a href="#DataType.Type-3483"><span class="linenos">3483</span></a> <span class="n">ENUM8</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3484"><a href="#DataType.Type-3484"><span class="linenos">3484</span></a> <span class="n">ENUM16</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3485"><a href="#DataType.Type-3485"><span class="linenos">3485</span></a> <span class="n">FIXEDSTRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3486"><a href="#DataType.Type-3486"><span class="linenos">3486</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-3487"><a href="#DataType.Type-3487"><span class="linenos">3487</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-3488"><a href="#DataType.Type-3488"><span class="linenos">3488</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-3489"><a href="#DataType.Type-3489"><span class="linenos">3489</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-3490"><a href="#DataType.Type-3490"><span class="linenos">3490</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-3491"><a href="#DataType.Type-3491"><span class="linenos">3491</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-3492"><a href="#DataType.Type-3492"><span class="linenos">3492</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-3493"><a href="#DataType.Type-3493"><span class="linenos">3493</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-3494"><a href="#DataType.Type-3494"><span class="linenos">3494</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3495"><a href="#DataType.Type-3495"><span class="linenos">3495</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3496"><a href="#DataType.Type-3496"><span class="linenos">3496</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3497"><a href="#DataType.Type-3497"><span class="linenos">3497</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3498"><a href="#DataType.Type-3498"><span class="linenos">3498</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3499"><a href="#DataType.Type-3499"><span class="linenos">3499</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3500"><a href="#DataType.Type-3500"><span class="linenos">3500</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-3501"><a href="#DataType.Type-3501"><span class="linenos">3501</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3502"><a href="#DataType.Type-3502"><span class="linenos">3502</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3503"><a href="#DataType.Type-3503"><span class="linenos">3503</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-3504"><a href="#DataType.Type-3504"><span class="linenos">3504</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-3505"><a href="#DataType.Type-3505"><span class="linenos">3505</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-3506"><a href="#DataType.Type-3506"><span class="linenos">3506</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-3507"><a href="#DataType.Type-3507"><span class="linenos">3507</span></a> <span class="n">LOWCARDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3508"><a href="#DataType.Type-3508"><span class="linenos">3508</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-3509"><a href="#DataType.Type-3509"><span class="linenos">3509</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-3510"><a href="#DataType.Type-3510"><span class="linenos">3510</span></a> <span class="n">MEDIUMINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3511"><a href="#DataType.Type-3511"><span class="linenos">3511</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-3512"><a href="#DataType.Type-3512"><span class="linenos">3512</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-3513"><a href="#DataType.Type-3513"><span class="linenos">3513</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-3514"><a href="#DataType.Type-3514"><span class="linenos">3514</span></a> <span class="n">NESTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3515"><a href="#DataType.Type-3515"><span class="linenos">3515</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-3516"><a href="#DataType.Type-3516"><span class="linenos">3516</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-3517"><a href="#DataType.Type-3517"><span class="linenos">3517</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3518"><a href="#DataType.Type-3518"><span class="linenos">3518</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3519"><a href="#DataType.Type-3519"><span class="linenos">3519</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-3520"><a href="#DataType.Type-3520"><span class="linenos">3520</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-3521"><a href="#DataType.Type-3521"><span class="linenos">3521</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-3522"><a href="#DataType.Type-3522"><span class="linenos">3522</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-3523"><a href="#DataType.Type-3523"><span class="linenos">3523</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3524"><a href="#DataType.Type-3524"><span class="linenos">3524</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-3525"><a href="#DataType.Type-3525"><span class="linenos">3525</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-3526"><a href="#DataType.Type-3526"><span class="linenos">3526</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-3527"><a href="#DataType.Type-3527"><span class="linenos">3527</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-3528"><a href="#DataType.Type-3528"><span class="linenos">3528</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-3529"><a href="#DataType.Type-3529"><span class="linenos">3529</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-3530"><a href="#DataType.Type-3530"><span class="linenos">3530</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-3531"><a href="#DataType.Type-3531"><span class="linenos">3531</span></a> <span class="n">TIMETZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3532"><a href="#DataType.Type-3532"><span class="linenos">3532</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-3533"><a href="#DataType.Type-3533"><span class="linenos">3533</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-3534"><a href="#DataType.Type-3534"><span class="linenos">3534</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-3535"><a href="#DataType.Type-3535"><span class="linenos">3535</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-3536"><a href="#DataType.Type-3536"><span class="linenos">3536</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3537"><a href="#DataType.Type-3537"><span class="linenos">3537</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3538"><a href="#DataType.Type-3538"><span class="linenos">3538</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3539"><a href="#DataType.Type-3539"><span class="linenos">3539</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3540"><a href="#DataType.Type-3540"><span class="linenos">3540</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-3541"><a href="#DataType.Type-3541"><span class="linenos">3541</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-3542"><a href="#DataType.Type-3542"><span class="linenos">3542</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3543"><a href="#DataType.Type-3543"><span class="linenos">3543</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3544"><a href="#DataType.Type-3544"><span class="linenos">3544</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-3545"><a href="#DataType.Type-3545"><span class="linenos">3545</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.Type-3546"><a href="#DataType.Type-3546"><span class="linenos">3546</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="s2">&quot;USER-DEFINED&quot;</span>
+</span><span id="DataType.Type-3547"><a href="#DataType.Type-3547"><span class="linenos">3547</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-3548"><a href="#DataType.Type-3548"><span class="linenos">3548</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-3549"><a href="#DataType.Type-3549"><span class="linenos">3549</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-3550"><a href="#DataType.Type-3550"><span class="linenos">3550</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-3551"><a href="#DataType.Type-3551"><span class="linenos">3551</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-3552"><a href="#DataType.Type-3552"><span class="linenos">3552</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-3553"><a href="#DataType.Type-3553"><span class="linenos">3553</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-3554"><a href="#DataType.Type-3554"><span class="linenos">3554</span></a> <span class="n">YEAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span></pre></div>
@@ -38226,206 +39599,122 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
- <div id="DataType.Type.DATETIME" class="classattr">
- <div class="attr variable">
- <span class="name">DATETIME</span> =
-<span class="default_value">&lt;Type.DATETIME: &#39;DATETIME&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.DATETIME"></a>
-
-
-
- </div>
- <div id="DataType.Type.DATETIME64" class="classattr">
- <div class="attr variable">
- <span class="name">DATETIME64</span> =
-<span class="default_value">&lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.DATETIME64"></a>
-
-
-
- </div>
- <div id="DataType.Type.ENUM" class="classattr">
- <div class="attr variable">
- <span class="name">ENUM</span> =
-<span class="default_value">&lt;Type.ENUM: &#39;ENUM&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.ENUM"></a>
-
-
-
- </div>
- <div id="DataType.Type.INT4RANGE" class="classattr">
- <div class="attr variable">
- <span class="name">INT4RANGE</span> =
-<span class="default_value">&lt;Type.INT4RANGE: &#39;INT4RANGE&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.INT4RANGE"></a>
-
-
-
- </div>
- <div id="DataType.Type.INT4MULTIRANGE" class="classattr">
- <div class="attr variable">
- <span class="name">INT4MULTIRANGE</span> =
-<span class="default_value">&lt;Type.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.INT4MULTIRANGE"></a>
-
-
-
- </div>
- <div id="DataType.Type.INT8RANGE" class="classattr">
- <div class="attr variable">
- <span class="name">INT8RANGE</span> =
-<span class="default_value">&lt;Type.INT8RANGE: &#39;INT8RANGE&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.INT8RANGE"></a>
-
-
-
- </div>
- <div id="DataType.Type.INT8MULTIRANGE" class="classattr">
- <div class="attr variable">
- <span class="name">INT8MULTIRANGE</span> =
-<span class="default_value">&lt;Type.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;</span>
-
-
- </div>
- <a class="headerlink" href="#DataType.Type.INT8MULTIRANGE"></a>
-
-
-
- </div>
- <div id="DataType.Type.NUMRANGE" class="classattr">
+ <div id="DataType.Type.DATEMULTIRANGE" class="classattr">
<div class="attr variable">
- <span class="name">NUMRANGE</span> =
-<span class="default_value">&lt;Type.NUMRANGE: &#39;NUMRANGE&#39;&gt;</span>
+ <span class="name">DATEMULTIRANGE</span> =
+<span class="default_value">&lt;Type.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.NUMRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.DATEMULTIRANGE"></a>
</div>
- <div id="DataType.Type.NUMMULTIRANGE" class="classattr">
+ <div id="DataType.Type.DATERANGE" class="classattr">
<div class="attr variable">
- <span class="name">NUMMULTIRANGE</span> =
-<span class="default_value">&lt;Type.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;</span>
+ <span class="name">DATERANGE</span> =
+<span class="default_value">&lt;Type.DATERANGE: &#39;DATERANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.NUMMULTIRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.DATERANGE"></a>
</div>
- <div id="DataType.Type.TSRANGE" class="classattr">
+ <div id="DataType.Type.DATETIME" class="classattr">
<div class="attr variable">
- <span class="name">TSRANGE</span> =
-<span class="default_value">&lt;Type.TSRANGE: &#39;TSRANGE&#39;&gt;</span>
+ <span class="name">DATETIME</span> =
+<span class="default_value">&lt;Type.DATETIME: &#39;DATETIME&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.TSRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.DATETIME"></a>
</div>
- <div id="DataType.Type.TSMULTIRANGE" class="classattr">
+ <div id="DataType.Type.DATETIME64" class="classattr">
<div class="attr variable">
- <span class="name">TSMULTIRANGE</span> =
-<span class="default_value">&lt;Type.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;</span>
+ <span class="name">DATETIME64</span> =
+<span class="default_value">&lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.TSMULTIRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.DATETIME64"></a>
</div>
- <div id="DataType.Type.TSTZRANGE" class="classattr">
+ <div id="DataType.Type.DECIMAL" class="classattr">
<div class="attr variable">
- <span class="name">TSTZRANGE</span> =
-<span class="default_value">&lt;Type.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;</span>
+ <span class="name">DECIMAL</span> =
+<span class="default_value">&lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.TSTZRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.DECIMAL"></a>
</div>
- <div id="DataType.Type.TSTZMULTIRANGE" class="classattr">
+ <div id="DataType.Type.DOUBLE" class="classattr">
<div class="attr variable">
- <span class="name">TSTZMULTIRANGE</span> =
-<span class="default_value">&lt;Type.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;</span>
+ <span class="name">DOUBLE</span> =
+<span class="default_value">&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.TSTZMULTIRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.DOUBLE"></a>
</div>
- <div id="DataType.Type.DATERANGE" class="classattr">
+ <div id="DataType.Type.ENUM" class="classattr">
<div class="attr variable">
- <span class="name">DATERANGE</span> =
-<span class="default_value">&lt;Type.DATERANGE: &#39;DATERANGE&#39;&gt;</span>
+ <span class="name">ENUM</span> =
+<span class="default_value">&lt;Type.ENUM: &#39;ENUM&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.DATERANGE"></a>
+ <a class="headerlink" href="#DataType.Type.ENUM"></a>
</div>
- <div id="DataType.Type.DATEMULTIRANGE" class="classattr">
+ <div id="DataType.Type.ENUM8" class="classattr">
<div class="attr variable">
- <span class="name">DATEMULTIRANGE</span> =
-<span class="default_value">&lt;Type.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;</span>
+ <span class="name">ENUM8</span> =
+<span class="default_value">&lt;Type.ENUM8: &#39;ENUM8&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.DATEMULTIRANGE"></a>
+ <a class="headerlink" href="#DataType.Type.ENUM8"></a>
</div>
- <div id="DataType.Type.DECIMAL" class="classattr">
+ <div id="DataType.Type.ENUM16" class="classattr">
<div class="attr variable">
- <span class="name">DECIMAL</span> =
-<span class="default_value">&lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;</span>
+ <span class="name">ENUM16</span> =
+<span class="default_value">&lt;Type.ENUM16: &#39;ENUM16&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.DECIMAL"></a>
+ <a class="headerlink" href="#DataType.Type.ENUM16"></a>
</div>
- <div id="DataType.Type.DOUBLE" class="classattr">
+ <div id="DataType.Type.FIXEDSTRING" class="classattr">
<div class="attr variable">
- <span class="name">DOUBLE</span> =
-<span class="default_value">&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;</span>
+ <span class="name">FIXEDSTRING</span> =
+<span class="default_value">&lt;Type.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.DOUBLE"></a>
+ <a class="headerlink" href="#DataType.Type.FIXEDSTRING"></a>
@@ -38514,62 +39803,86 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
- <div id="DataType.Type.IPADDRESS" class="classattr">
+ <div id="DataType.Type.INT" class="classattr">
<div class="attr variable">
- <span class="name">IPADDRESS</span> =
-<span class="default_value">&lt;Type.IPADDRESS: &#39;IPADDRESS&#39;&gt;</span>
+ <span class="name">INT</span> =
+<span class="default_value">&lt;Type.INT: &#39;INT&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.IPADDRESS"></a>
+ <a class="headerlink" href="#DataType.Type.INT"></a>
</div>
- <div id="DataType.Type.IPPREFIX" class="classattr">
+ <div id="DataType.Type.INT128" class="classattr">
<div class="attr variable">
- <span class="name">IPPREFIX</span> =
-<span class="default_value">&lt;Type.IPPREFIX: &#39;IPPREFIX&#39;&gt;</span>
+ <span class="name">INT128</span> =
+<span class="default_value">&lt;Type.INT128: &#39;INT128&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.IPPREFIX"></a>
+ <a class="headerlink" href="#DataType.Type.INT128"></a>
</div>
- <div id="DataType.Type.INT" class="classattr">
+ <div id="DataType.Type.INT256" class="classattr">
<div class="attr variable">
- <span class="name">INT</span> =
-<span class="default_value">&lt;Type.INT: &#39;INT&#39;&gt;</span>
+ <span class="name">INT256</span> =
+<span class="default_value">&lt;Type.INT256: &#39;INT256&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.INT"></a>
+ <a class="headerlink" href="#DataType.Type.INT256"></a>
</div>
- <div id="DataType.Type.INT128" class="classattr">
+ <div id="DataType.Type.INT4MULTIRANGE" class="classattr">
<div class="attr variable">
- <span class="name">INT128</span> =
-<span class="default_value">&lt;Type.INT128: &#39;INT128&#39;&gt;</span>
+ <span class="name">INT4MULTIRANGE</span> =
+<span class="default_value">&lt;Type.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.INT128"></a>
+ <a class="headerlink" href="#DataType.Type.INT4MULTIRANGE"></a>
</div>
- <div id="DataType.Type.INT256" class="classattr">
+ <div id="DataType.Type.INT4RANGE" class="classattr">
<div class="attr variable">
- <span class="name">INT256</span> =
-<span class="default_value">&lt;Type.INT256: &#39;INT256&#39;&gt;</span>
+ <span class="name">INT4RANGE</span> =
+<span class="default_value">&lt;Type.INT4RANGE: &#39;INT4RANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.INT256"></a>
+ <a class="headerlink" href="#DataType.Type.INT4RANGE"></a>
+
+
+
+ </div>
+ <div id="DataType.Type.INT8MULTIRANGE" class="classattr">
+ <div class="attr variable">
+ <span class="name">INT8MULTIRANGE</span> =
+<span class="default_value">&lt;Type.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.INT8MULTIRANGE"></a>
+
+
+
+ </div>
+ <div id="DataType.Type.INT8RANGE" class="classattr">
+ <div class="attr variable">
+ <span class="name">INT8RANGE</span> =
+<span class="default_value">&lt;Type.INT8RANGE: &#39;INT8RANGE&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.INT8RANGE"></a>
@@ -38586,6 +39899,30 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.IPADDRESS" class="classattr">
+ <div class="attr variable">
+ <span class="name">IPADDRESS</span> =
+<span class="default_value">&lt;Type.IPADDRESS: &#39;IPADDRESS&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.IPADDRESS"></a>
+
+
+
+ </div>
+ <div id="DataType.Type.IPPREFIX" class="classattr">
+ <div class="attr variable">
+ <span class="name">IPPREFIX</span> =
+<span class="default_value">&lt;Type.IPPREFIX: &#39;IPPREFIX&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.IPPREFIX"></a>
+
+
+
+ </div>
<div id="DataType.Type.JSON" class="classattr">
<div class="attr variable">
<span class="name">JSON</span> =
@@ -38634,6 +39971,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.LOWCARDINALITY" class="classattr">
+ <div class="attr variable">
+ <span class="name">LOWCARDINALITY</span> =
+<span class="default_value">&lt;Type.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.LOWCARDINALITY"></a>
+
+
+
+ </div>
<div id="DataType.Type.MAP" class="classattr">
<div class="attr variable">
<span class="name">MAP</span> =
@@ -38658,6 +40007,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.MEDIUMINT" class="classattr">
+ <div class="attr variable">
+ <span class="name">MEDIUMINT</span> =
+<span class="default_value">&lt;Type.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.MEDIUMINT"></a>
+
+
+
+ </div>
<div id="DataType.Type.MEDIUMTEXT" class="classattr">
<div class="attr variable">
<span class="name">MEDIUMTEXT</span> =
@@ -38694,6 +40055,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.NESTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NESTED</span> =
+<span class="default_value">&lt;Type.NESTED: &#39;NESTED&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.NESTED"></a>
+
+
+
+ </div>
<div id="DataType.Type.NULL" class="classattr">
<div class="attr variable">
<span class="name">NULL</span> =
@@ -38718,6 +40091,30 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.NUMMULTIRANGE" class="classattr">
+ <div class="attr variable">
+ <span class="name">NUMMULTIRANGE</span> =
+<span class="default_value">&lt;Type.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.NUMMULTIRANGE"></a>
+
+
+
+ </div>
+ <div id="DataType.Type.NUMRANGE" class="classattr">
+ <div class="attr variable">
+ <span class="name">NUMRANGE</span> =
+<span class="default_value">&lt;Type.NUMRANGE: &#39;NUMRANGE&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.NUMRANGE"></a>
+
+
+
+ </div>
<div id="DataType.Type.NVARCHAR" class="classattr">
<div class="attr variable">
<span class="name">NVARCHAR</span> =
@@ -38862,26 +40259,26 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
- <div id="DataType.Type.TIMESTAMP" class="classattr">
+ <div id="DataType.Type.TIMETZ" class="classattr">
<div class="attr variable">
- <span class="name">TIMESTAMP</span> =
-<span class="default_value">&lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;</span>
+ <span class="name">TIMETZ</span> =
+<span class="default_value">&lt;Type.TIMETZ: &#39;TIMETZ&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.TIMESTAMP"></a>
+ <a class="headerlink" href="#DataType.Type.TIMETZ"></a>
</div>
- <div id="DataType.Type.TIMESTAMPTZ" class="classattr">
+ <div id="DataType.Type.TIMESTAMP" class="classattr">
<div class="attr variable">
- <span class="name">TIMESTAMPTZ</span> =
-<span class="default_value">&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;</span>
+ <span class="name">TIMESTAMP</span> =
+<span class="default_value">&lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.TIMESTAMPTZ"></a>
+ <a class="headerlink" href="#DataType.Type.TIMESTAMP"></a>
@@ -38898,6 +40295,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.TIMESTAMPTZ" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIMESTAMPTZ</span> =
+<span class="default_value">&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.TIMESTAMPTZ"></a>
+
+
+
+ </div>
<div id="DataType.Type.TINYINT" class="classattr">
<div class="attr variable">
<span class="name">TINYINT</span> =
@@ -38910,62 +40319,74 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
- <div id="DataType.Type.UBIGINT" class="classattr">
+ <div id="DataType.Type.TSMULTIRANGE" class="classattr">
<div class="attr variable">
- <span class="name">UBIGINT</span> =
-<span class="default_value">&lt;Type.UBIGINT: &#39;UBIGINT&#39;&gt;</span>
+ <span class="name">TSMULTIRANGE</span> =
+<span class="default_value">&lt;Type.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.UBIGINT"></a>
+ <a class="headerlink" href="#DataType.Type.TSMULTIRANGE"></a>
</div>
- <div id="DataType.Type.UINT" class="classattr">
+ <div id="DataType.Type.TSRANGE" class="classattr">
<div class="attr variable">
- <span class="name">UINT</span> =
-<span class="default_value">&lt;Type.UINT: &#39;UINT&#39;&gt;</span>
+ <span class="name">TSRANGE</span> =
+<span class="default_value">&lt;Type.TSRANGE: &#39;TSRANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.UINT"></a>
+ <a class="headerlink" href="#DataType.Type.TSRANGE"></a>
</div>
- <div id="DataType.Type.USMALLINT" class="classattr">
+ <div id="DataType.Type.TSTZMULTIRANGE" class="classattr">
<div class="attr variable">
- <span class="name">USMALLINT</span> =
-<span class="default_value">&lt;Type.USMALLINT: &#39;USMALLINT&#39;&gt;</span>
+ <span class="name">TSTZMULTIRANGE</span> =
+<span class="default_value">&lt;Type.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.USMALLINT"></a>
+ <a class="headerlink" href="#DataType.Type.TSTZMULTIRANGE"></a>
</div>
- <div id="DataType.Type.UTINYINT" class="classattr">
+ <div id="DataType.Type.TSTZRANGE" class="classattr">
<div class="attr variable">
- <span class="name">UTINYINT</span> =
-<span class="default_value">&lt;Type.UTINYINT: &#39;UTINYINT&#39;&gt;</span>
+ <span class="name">TSTZRANGE</span> =
+<span class="default_value">&lt;Type.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.UTINYINT"></a>
+ <a class="headerlink" href="#DataType.Type.TSTZRANGE"></a>
</div>
- <div id="DataType.Type.UNKNOWN" class="classattr">
+ <div id="DataType.Type.UBIGINT" class="classattr">
<div class="attr variable">
- <span class="name">UNKNOWN</span> =
-<span class="default_value">&lt;Type.UNKNOWN: &#39;UNKNOWN&#39;&gt;</span>
+ <span class="name">UBIGINT</span> =
+<span class="default_value">&lt;Type.UBIGINT: &#39;UBIGINT&#39;&gt;</span>
</div>
- <a class="headerlink" href="#DataType.Type.UNKNOWN"></a>
+ <a class="headerlink" href="#DataType.Type.UBIGINT"></a>
+
+
+
+ </div>
+ <div id="DataType.Type.UINT" class="classattr">
+ <div class="attr variable">
+ <span class="name">UINT</span> =
+<span class="default_value">&lt;Type.UINT: &#39;UINT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.UINT"></a>
@@ -39006,6 +40427,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.UNKNOWN" class="classattr">
+ <div class="attr variable">
+ <span class="name">UNKNOWN</span> =
+<span class="default_value">&lt;Type.UNKNOWN: &#39;UNKNOWN&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.UNKNOWN"></a>
+
+
+
+ </div>
<div id="DataType.Type.USERDEFINED" class="classattr">
<div class="attr variable">
<span class="name">USERDEFINED</span> =
@@ -39018,6 +40451,30 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.USMALLINT" class="classattr">
+ <div class="attr variable">
+ <span class="name">USMALLINT</span> =
+<span class="default_value">&lt;Type.USMALLINT: &#39;USMALLINT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.USMALLINT"></a>
+
+
+
+ </div>
+ <div id="DataType.Type.UTINYINT" class="classattr">
+ <div class="attr variable">
+ <span class="name">UTINYINT</span> =
+<span class="default_value">&lt;Type.UTINYINT: &#39;UTINYINT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.UTINYINT"></a>
+
+
+
+ </div>
<div id="DataType.Type.UUID" class="classattr">
<div class="attr variable">
<span class="name">UUID</span> =
@@ -39078,6 +40535,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="DataType.Type.YEAR" class="classattr">
+ <div class="attr variable">
+ <span class="name">YEAR</span> =
+<span class="default_value">&lt;Type.YEAR: &#39;YEAR&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#DataType.Type.YEAR"></a>
+
+
+
+ </div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
@@ -39100,8 +40569,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#PseudoType"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PseudoType-3538"><a href="#PseudoType-3538"><span class="linenos">3538</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-3539"><a href="#PseudoType-3539"><span class="linenos">3539</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PseudoType-3665"><a href="#PseudoType-3665"><span class="linenos">3665</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-3666"><a href="#PseudoType-3666"><span class="linenos">3666</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39188,8 +40657,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SubqueryPredicate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SubqueryPredicate-3543"><a href="#SubqueryPredicate-3543"><span class="linenos">3543</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-3544"><a href="#SubqueryPredicate-3544"><span class="linenos">3544</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SubqueryPredicate-3670"><a href="#SubqueryPredicate-3670"><span class="linenos">3670</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-3671"><a href="#SubqueryPredicate-3671"><span class="linenos">3671</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39291,8 +40760,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#All"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="All-3547"><a href="#All-3547"><span class="linenos">3547</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-3548"><a href="#All-3548"><span class="linenos">3548</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="All-3674"><a href="#All-3674"><span class="linenos">3674</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-3675"><a href="#All-3675"><span class="linenos">3675</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39394,8 +40863,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Any"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Any-3551"><a href="#Any-3551"><span class="linenos">3551</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-3552"><a href="#Any-3552"><span class="linenos">3552</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Any-3678"><a href="#Any-3678"><span class="linenos">3678</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-3679"><a href="#Any-3679"><span class="linenos">3679</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39497,8 +40966,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Exists"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Exists-3555"><a href="#Exists-3555"><span class="linenos">3555</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-3556"><a href="#Exists-3556"><span class="linenos">3556</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Exists-3682"><a href="#Exists-3682"><span class="linenos">3682</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-3683"><a href="#Exists-3683"><span class="linenos">3683</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39600,8 +41069,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Command"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Command-3561"><a href="#Command-3561"><span class="linenos">3561</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-3562"><a href="#Command-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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Command-3688"><a href="#Command-3688"><span class="linenos">3688</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-3689"><a href="#Command-3689"><span class="linenos">3689</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -39699,8 +41168,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Transaction"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Transaction-3565"><a href="#Transaction-3565"><span class="linenos">3565</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-3566"><a href="#Transaction-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">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 class="s2">&quot;mark&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-3692"><a href="#Transaction-3692"><span class="linenos">3692</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-3693"><a href="#Transaction-3693"><span class="linenos">3693</span></a> <span class="n">arg_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 class="s2">&quot;mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -39798,8 +41267,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Commit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Commit-3569"><a href="#Commit-3569"><span class="linenos">3569</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-3570"><a href="#Commit-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;chain&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;durability&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-3696"><a href="#Commit-3696"><span class="linenos">3696</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-3697"><a href="#Commit-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;chain&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;durability&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -39897,8 +41366,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Rollback"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Rollback-3573"><a href="#Rollback-3573"><span class="linenos">3573</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-3574"><a href="#Rollback-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;savepoint&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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Rollback-3700"><a href="#Rollback-3700"><span class="linenos">3700</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-3701"><a href="#Rollback-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;savepoint&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></pre></div>
@@ -39996,8 +41465,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#AlterTable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AlterTable-3577"><a href="#AlterTable-3577"><span class="linenos">3577</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-3578"><a href="#AlterTable-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;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-3704"><a href="#AlterTable-3704"><span class="linenos">3704</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-3705"><a href="#AlterTable-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;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>
@@ -40095,8 +41564,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#AddConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AddConstraint-3581"><a href="#AddConstraint-3581"><span class="linenos">3581</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-3582"><a href="#AddConstraint-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">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-3708"><a href="#AddConstraint-3708"><span class="linenos">3708</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-3709"><a href="#AddConstraint-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;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>
@@ -40194,8 +41663,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DropPartition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DropPartition-3585"><a href="#DropPartition-3585"><span class="linenos">3585</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-3586"><a href="#DropPartition-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;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-3712"><a href="#DropPartition-3712"><span class="linenos">3712</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-3713"><a href="#DropPartition-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">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>
@@ -40293,16 +41762,16 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Binary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Binary-3590"><a href="#Binary-3590"><span class="linenos">3590</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-3591"><a href="#Binary-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;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-3592"><a href="#Binary-3592"><span class="linenos">3592</span></a>
-</span><span id="Binary-3593"><a href="#Binary-3593"><span class="linenos">3593</span></a> <span class="nd">@property</span>
-</span><span id="Binary-3594"><a href="#Binary-3594"><span class="linenos">3594</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-3595"><a href="#Binary-3595"><span class="linenos">3595</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-3596"><a href="#Binary-3596"><span class="linenos">3596</span></a>
-</span><span id="Binary-3597"><a href="#Binary-3597"><span class="linenos">3597</span></a> <span class="nd">@property</span>
-</span><span id="Binary-3598"><a href="#Binary-3598"><span class="linenos">3598</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-3599"><a href="#Binary-3599"><span class="linenos">3599</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-3717"><a href="#Binary-3717"><span class="linenos">3717</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-3718"><a href="#Binary-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><span id="Binary-3719"><a href="#Binary-3719"><span class="linenos">3719</span></a>
+</span><span id="Binary-3720"><a href="#Binary-3720"><span class="linenos">3720</span></a> <span class="nd">@property</span>
+</span><span id="Binary-3721"><a href="#Binary-3721"><span class="linenos">3721</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-3722"><a href="#Binary-3722"><span class="linenos">3722</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-3723"><a href="#Binary-3723"><span class="linenos">3723</span></a>
+</span><span id="Binary-3724"><a href="#Binary-3724"><span class="linenos">3724</span></a> <span class="nd">@property</span>
+</span><span id="Binary-3725"><a href="#Binary-3725"><span class="linenos">3725</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-3726"><a href="#Binary-3726"><span class="linenos">3726</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
</span></pre></div>
@@ -40437,8 +41906,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Add"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Add-3602"><a href="#Add-3602"><span class="linenos">3602</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-3603"><a href="#Add-3603"><span class="linenos">3603</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Add-3729"><a href="#Add-3729"><span class="linenos">3729</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-3730"><a href="#Add-3730"><span class="linenos">3730</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -40545,8 +42014,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Connector"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Connector-3606"><a href="#Connector-3606"><span class="linenos">3606</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-3607"><a href="#Connector-3607"><span class="linenos">3607</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Connector-3733"><a href="#Connector-3733"><span class="linenos">3733</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-3734"><a href="#Connector-3734"><span class="linenos">3734</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -40653,8 +42122,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#And"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="And-3610"><a href="#And-3610"><span class="linenos">3610</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-3611"><a href="#And-3611"><span class="linenos">3611</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="And-3737"><a href="#And-3737"><span class="linenos">3737</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-3738"><a href="#And-3738"><span class="linenos">3738</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -40761,8 +42230,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Or"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Or-3614"><a href="#Or-3614"><span class="linenos">3614</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-3615"><a href="#Or-3615"><span class="linenos">3615</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Or-3741"><a href="#Or-3741"><span class="linenos">3741</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-3742"><a href="#Or-3742"><span class="linenos">3742</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -40869,8 +42338,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitwiseAnd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseAnd-3618"><a href="#BitwiseAnd-3618"><span class="linenos">3618</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-3619"><a href="#BitwiseAnd-3619"><span class="linenos">3619</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseAnd-3745"><a href="#BitwiseAnd-3745"><span class="linenos">3745</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-3746"><a href="#BitwiseAnd-3746"><span class="linenos">3746</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -40977,8 +42446,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitwiseLeftShift"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseLeftShift-3622"><a href="#BitwiseLeftShift-3622"><span class="linenos">3622</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-3623"><a href="#BitwiseLeftShift-3623"><span class="linenos">3623</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseLeftShift-3749"><a href="#BitwiseLeftShift-3749"><span class="linenos">3749</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-3750"><a href="#BitwiseLeftShift-3750"><span class="linenos">3750</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41085,8 +42554,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitwiseOr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseOr-3626"><a href="#BitwiseOr-3626"><span class="linenos">3626</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-3627"><a href="#BitwiseOr-3627"><span class="linenos">3627</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseOr-3753"><a href="#BitwiseOr-3753"><span class="linenos">3753</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-3754"><a href="#BitwiseOr-3754"><span class="linenos">3754</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41193,8 +42662,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitwiseRightShift"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseRightShift-3630"><a href="#BitwiseRightShift-3630"><span class="linenos">3630</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-3631"><a href="#BitwiseRightShift-3631"><span class="linenos">3631</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseRightShift-3757"><a href="#BitwiseRightShift-3757"><span class="linenos">3757</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-3758"><a href="#BitwiseRightShift-3758"><span class="linenos">3758</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41301,8 +42770,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitwiseXor"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseXor-3634"><a href="#BitwiseXor-3634"><span class="linenos">3634</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-3635"><a href="#BitwiseXor-3635"><span class="linenos">3635</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseXor-3761"><a href="#BitwiseXor-3761"><span class="linenos">3761</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-3762"><a href="#BitwiseXor-3762"><span class="linenos">3762</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41409,8 +42878,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Div"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Div-3638"><a href="#Div-3638"><span class="linenos">3638</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-3639"><a href="#Div-3639"><span class="linenos">3639</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Div-3765"><a href="#Div-3765"><span class="linenos">3765</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-3766"><a href="#Div-3766"><span class="linenos">3766</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41517,8 +42986,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Overlaps"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Overlaps-3642"><a href="#Overlaps-3642"><span class="linenos">3642</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-3643"><a href="#Overlaps-3643"><span class="linenos">3643</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Overlaps-3769"><a href="#Overlaps-3769"><span class="linenos">3769</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-3770"><a href="#Overlaps-3770"><span class="linenos">3770</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41625,28 +43094,28 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Dot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dot-3646"><a href="#Dot-3646"><span class="linenos">3646</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-3647"><a href="#Dot-3647"><span class="linenos">3647</span></a> <span class="nd">@property</span>
-</span><span id="Dot-3648"><a href="#Dot-3648"><span class="linenos">3648</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-3649"><a href="#Dot-3649"><span class="linenos">3649</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-3650"><a href="#Dot-3650"><span class="linenos">3650</span></a>
-</span><span id="Dot-3651"><a href="#Dot-3651"><span class="linenos">3651</span></a> <span class="nd">@property</span>
-</span><span id="Dot-3652"><a href="#Dot-3652"><span class="linenos">3652</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="Dot-3653"><a href="#Dot-3653"><span class="linenos">3653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Dot-3654"><a href="#Dot-3654"><span class="linenos">3654</span></a>
-</span><span id="Dot-3655"><a href="#Dot-3655"><span class="linenos">3655</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dot-3656"><a href="#Dot-3656"><span class="linenos">3656</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-3657"><a href="#Dot-3657"><span class="linenos">3657</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-3658"><a href="#Dot-3658"><span class="linenos">3658</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-3659"><a href="#Dot-3659"><span class="linenos">3659</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-3660"><a href="#Dot-3660"><span class="linenos">3660</span></a>
-</span><span id="Dot-3661"><a href="#Dot-3661"><span class="linenos">3661</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-3662"><a href="#Dot-3662"><span class="linenos">3662</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-3663"><a href="#Dot-3663"><span class="linenos">3663</span></a>
-</span><span id="Dot-3664"><a href="#Dot-3664"><span class="linenos">3664</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-3665"><a href="#Dot-3665"><span class="linenos">3665</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-3666"><a href="#Dot-3666"><span class="linenos">3666</span></a>
-</span><span id="Dot-3667"><a href="#Dot-3667"><span class="linenos">3667</span></a> <span class="k">return</span> <span class="n">dot</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dot-3773"><a href="#Dot-3773"><span class="linenos">3773</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-3774"><a href="#Dot-3774"><span class="linenos">3774</span></a> <span class="nd">@property</span>
+</span><span id="Dot-3775"><a href="#Dot-3775"><span class="linenos">3775</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-3776"><a href="#Dot-3776"><span class="linenos">3776</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-3777"><a href="#Dot-3777"><span class="linenos">3777</span></a>
+</span><span id="Dot-3778"><a href="#Dot-3778"><span class="linenos">3778</span></a> <span class="nd">@property</span>
+</span><span id="Dot-3779"><a href="#Dot-3779"><span class="linenos">3779</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="Dot-3780"><a href="#Dot-3780"><span class="linenos">3780</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Dot-3781"><a href="#Dot-3781"><span class="linenos">3781</span></a>
+</span><span id="Dot-3782"><a href="#Dot-3782"><span class="linenos">3782</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dot-3783"><a href="#Dot-3783"><span class="linenos">3783</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-3784"><a href="#Dot-3784"><span class="linenos">3784</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-3785"><a href="#Dot-3785"><span class="linenos">3785</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-3786"><a href="#Dot-3786"><span class="linenos">3786</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-3787"><a href="#Dot-3787"><span class="linenos">3787</span></a>
+</span><span id="Dot-3788"><a href="#Dot-3788"><span class="linenos">3788</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-3789"><a href="#Dot-3789"><span class="linenos">3789</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-3790"><a href="#Dot-3790"><span class="linenos">3790</span></a>
+</span><span id="Dot-3791"><a href="#Dot-3791"><span class="linenos">3791</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-3792"><a href="#Dot-3792"><span class="linenos">3792</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-3793"><a href="#Dot-3793"><span class="linenos">3793</span></a>
+</span><span id="Dot-3794"><a href="#Dot-3794"><span class="linenos">3794</span></a> <span class="k">return</span> <span class="n">dot</span>
</span></pre></div>
@@ -41705,19 +43174,19 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Dot.build"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dot.build-3655"><a href="#Dot.build-3655"><span class="linenos">3655</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dot.build-3656"><a href="#Dot.build-3656"><span class="linenos">3656</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-3657"><a href="#Dot.build-3657"><span class="linenos">3657</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-3658"><a href="#Dot.build-3658"><span class="linenos">3658</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-3659"><a href="#Dot.build-3659"><span class="linenos">3659</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-3660"><a href="#Dot.build-3660"><span class="linenos">3660</span></a>
-</span><span id="Dot.build-3661"><a href="#Dot.build-3661"><span class="linenos">3661</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-3662"><a href="#Dot.build-3662"><span class="linenos">3662</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-3663"><a href="#Dot.build-3663"><span class="linenos">3663</span></a>
-</span><span id="Dot.build-3664"><a href="#Dot.build-3664"><span class="linenos">3664</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-3665"><a href="#Dot.build-3665"><span class="linenos">3665</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-3666"><a href="#Dot.build-3666"><span class="linenos">3666</span></a>
-</span><span id="Dot.build-3667"><a href="#Dot.build-3667"><span class="linenos">3667</span></a> <span class="k">return</span> <span class="n">dot</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dot.build-3782"><a href="#Dot.build-3782"><span class="linenos">3782</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dot.build-3783"><a href="#Dot.build-3783"><span class="linenos">3783</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-3784"><a href="#Dot.build-3784"><span class="linenos">3784</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-3785"><a href="#Dot.build-3785"><span class="linenos">3785</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-3786"><a href="#Dot.build-3786"><span class="linenos">3786</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-3787"><a href="#Dot.build-3787"><span class="linenos">3787</span></a>
+</span><span id="Dot.build-3788"><a href="#Dot.build-3788"><span class="linenos">3788</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-3789"><a href="#Dot.build-3789"><span class="linenos">3789</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-3790"><a href="#Dot.build-3790"><span class="linenos">3790</span></a>
+</span><span id="Dot.build-3791"><a href="#Dot.build-3791"><span class="linenos">3791</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-3792"><a href="#Dot.build-3792"><span class="linenos">3792</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-3793"><a href="#Dot.build-3793"><span class="linenos">3793</span></a>
+</span><span id="Dot.build-3794"><a href="#Dot.build-3794"><span class="linenos">3794</span></a> <span class="k">return</span> <span class="n">dot</span>
</span></pre></div>
@@ -41825,8 +43294,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DPipe"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DPipe-3670"><a href="#DPipe-3670"><span class="linenos">3670</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-3671"><a href="#DPipe-3671"><span class="linenos">3671</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DPipe-3797"><a href="#DPipe-3797"><span class="linenos">3797</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-3798"><a href="#DPipe-3798"><span class="linenos">3798</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41933,8 +43402,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SafeDPipe"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SafeDPipe-3674"><a href="#SafeDPipe-3674"><span class="linenos">3674</span></a><span class="k">class</span> <span class="nc">SafeDPipe</span><span class="p">(</span><span class="n">DPipe</span><span class="p">):</span>
-</span><span id="SafeDPipe-3675"><a href="#SafeDPipe-3675"><span class="linenos">3675</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SafeDPipe-3801"><a href="#SafeDPipe-3801"><span class="linenos">3801</span></a><span class="k">class</span> <span class="nc">SafeDPipe</span><span class="p">(</span><span class="n">DPipe</span><span class="p">):</span>
+</span><span id="SafeDPipe-3802"><a href="#SafeDPipe-3802"><span class="linenos">3802</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42041,8 +43510,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#EQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="EQ-3678"><a href="#EQ-3678"><span class="linenos">3678</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-3679"><a href="#EQ-3679"><span class="linenos">3679</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="EQ-3805"><a href="#EQ-3805"><span class="linenos">3805</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-3806"><a href="#EQ-3806"><span class="linenos">3806</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42149,8 +43618,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#NullSafeEQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeEQ-3682"><a href="#NullSafeEQ-3682"><span class="linenos">3682</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-3683"><a href="#NullSafeEQ-3683"><span class="linenos">3683</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeEQ-3809"><a href="#NullSafeEQ-3809"><span class="linenos">3809</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-3810"><a href="#NullSafeEQ-3810"><span class="linenos">3810</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42257,8 +43726,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#NullSafeNEQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeNEQ-3686"><a href="#NullSafeNEQ-3686"><span class="linenos">3686</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-3687"><a href="#NullSafeNEQ-3687"><span class="linenos">3687</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeNEQ-3813"><a href="#NullSafeNEQ-3813"><span class="linenos">3813</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-3814"><a href="#NullSafeNEQ-3814"><span class="linenos">3814</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42365,8 +43834,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Distance"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Distance-3690"><a href="#Distance-3690"><span class="linenos">3690</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-3691"><a href="#Distance-3691"><span class="linenos">3691</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Distance-3817"><a href="#Distance-3817"><span class="linenos">3817</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-3818"><a href="#Distance-3818"><span class="linenos">3818</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42473,8 +43942,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Escape"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Escape-3694"><a href="#Escape-3694"><span class="linenos">3694</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-3695"><a href="#Escape-3695"><span class="linenos">3695</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Escape-3821"><a href="#Escape-3821"><span class="linenos">3821</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-3822"><a href="#Escape-3822"><span class="linenos">3822</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42581,8 +44050,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Glob"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Glob-3698"><a href="#Glob-3698"><span class="linenos">3698</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-3699"><a href="#Glob-3699"><span class="linenos">3699</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Glob-3825"><a href="#Glob-3825"><span class="linenos">3825</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-3826"><a href="#Glob-3826"><span class="linenos">3826</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42689,8 +44158,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#GT"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GT-3702"><a href="#GT-3702"><span class="linenos">3702</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-3703"><a href="#GT-3703"><span class="linenos">3703</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GT-3829"><a href="#GT-3829"><span class="linenos">3829</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-3830"><a href="#GT-3830"><span class="linenos">3830</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42797,8 +44266,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#GTE"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GTE-3706"><a href="#GTE-3706"><span class="linenos">3706</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-3707"><a href="#GTE-3707"><span class="linenos">3707</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GTE-3833"><a href="#GTE-3833"><span class="linenos">3833</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-3834"><a href="#GTE-3834"><span class="linenos">3834</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42905,8 +44374,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ILike"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ILike-3710"><a href="#ILike-3710"><span class="linenos">3710</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-3711"><a href="#ILike-3711"><span class="linenos">3711</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ILike-3837"><a href="#ILike-3837"><span class="linenos">3837</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-3838"><a href="#ILike-3838"><span class="linenos">3838</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43013,8 +44482,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ILikeAny"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ILikeAny-3714"><a href="#ILikeAny-3714"><span class="linenos">3714</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-3715"><a href="#ILikeAny-3715"><span class="linenos">3715</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ILikeAny-3841"><a href="#ILikeAny-3841"><span class="linenos">3841</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-3842"><a href="#ILikeAny-3842"><span class="linenos">3842</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43121,8 +44590,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#IntDiv"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IntDiv-3718"><a href="#IntDiv-3718"><span class="linenos">3718</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-3719"><a href="#IntDiv-3719"><span class="linenos">3719</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IntDiv-3845"><a href="#IntDiv-3845"><span class="linenos">3845</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-3846"><a href="#IntDiv-3846"><span class="linenos">3846</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43229,8 +44698,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Is"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Is-3722"><a href="#Is-3722"><span class="linenos">3722</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-3723"><a href="#Is-3723"><span class="linenos">3723</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Is-3849"><a href="#Is-3849"><span class="linenos">3849</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-3850"><a href="#Is-3850"><span class="linenos">3850</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43337,8 +44806,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Kwarg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Kwarg-3726"><a href="#Kwarg-3726"><span class="linenos">3726</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-3727"><a href="#Kwarg-3727"><span class="linenos">3727</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-3853"><a href="#Kwarg-3853"><span class="linenos">3853</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-3854"><a href="#Kwarg-3854"><span class="linenos">3854</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>
@@ -43447,8 +44916,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Like"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Like-3730"><a href="#Like-3730"><span class="linenos">3730</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-3731"><a href="#Like-3731"><span class="linenos">3731</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Like-3857"><a href="#Like-3857"><span class="linenos">3857</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-3858"><a href="#Like-3858"><span class="linenos">3858</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43555,8 +45024,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#LikeAny"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LikeAny-3734"><a href="#LikeAny-3734"><span class="linenos">3734</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-3735"><a href="#LikeAny-3735"><span class="linenos">3735</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LikeAny-3861"><a href="#LikeAny-3861"><span class="linenos">3861</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-3862"><a href="#LikeAny-3862"><span class="linenos">3862</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43663,8 +45132,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#LT"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LT-3738"><a href="#LT-3738"><span class="linenos">3738</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-3739"><a href="#LT-3739"><span class="linenos">3739</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LT-3865"><a href="#LT-3865"><span class="linenos">3865</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-3866"><a href="#LT-3866"><span class="linenos">3866</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43771,8 +45240,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#LTE"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LTE-3742"><a href="#LTE-3742"><span class="linenos">3742</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-3743"><a href="#LTE-3743"><span class="linenos">3743</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LTE-3869"><a href="#LTE-3869"><span class="linenos">3869</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-3870"><a href="#LTE-3870"><span class="linenos">3870</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43879,8 +45348,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Mod"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Mod-3746"><a href="#Mod-3746"><span class="linenos">3746</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-3747"><a href="#Mod-3747"><span class="linenos">3747</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Mod-3873"><a href="#Mod-3873"><span class="linenos">3873</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-3874"><a href="#Mod-3874"><span class="linenos">3874</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43987,8 +45456,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Mul"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Mul-3750"><a href="#Mul-3750"><span class="linenos">3750</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-3751"><a href="#Mul-3751"><span class="linenos">3751</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Mul-3877"><a href="#Mul-3877"><span class="linenos">3877</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-3878"><a href="#Mul-3878"><span class="linenos">3878</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44095,8 +45564,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#NEQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NEQ-3754"><a href="#NEQ-3754"><span class="linenos">3754</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-3755"><a href="#NEQ-3755"><span class="linenos">3755</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NEQ-3881"><a href="#NEQ-3881"><span class="linenos">3881</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-3882"><a href="#NEQ-3882"><span class="linenos">3882</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44203,8 +45672,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SimilarTo"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SimilarTo-3758"><a href="#SimilarTo-3758"><span class="linenos">3758</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-3759"><a href="#SimilarTo-3759"><span class="linenos">3759</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SimilarTo-3885"><a href="#SimilarTo-3885"><span class="linenos">3885</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-3886"><a href="#SimilarTo-3886"><span class="linenos">3886</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44311,8 +45780,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Slice"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Slice-3762"><a href="#Slice-3762"><span class="linenos">3762</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-3763"><a href="#Slice-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">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-3889"><a href="#Slice-3889"><span class="linenos">3889</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-3890"><a href="#Slice-3890"><span class="linenos">3890</span></a> <span class="n">arg_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>
@@ -44430,8 +45899,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Sub"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Sub-3766"><a href="#Sub-3766"><span class="linenos">3766</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-3767"><a href="#Sub-3767"><span class="linenos">3767</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sub-3893"><a href="#Sub-3893"><span class="linenos">3893</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-3894"><a href="#Sub-3894"><span class="linenos">3894</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44538,8 +46007,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ArrayOverlaps"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayOverlaps-3770"><a href="#ArrayOverlaps-3770"><span class="linenos">3770</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-3771"><a href="#ArrayOverlaps-3771"><span class="linenos">3771</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayOverlaps-3897"><a href="#ArrayOverlaps-3897"><span class="linenos">3897</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-3898"><a href="#ArrayOverlaps-3898"><span class="linenos">3898</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44646,8 +46115,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Unary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unary-3776"><a href="#Unary-3776"><span class="linenos">3776</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-3777"><a href="#Unary-3777"><span class="linenos">3777</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unary-3903"><a href="#Unary-3903"><span class="linenos">3903</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-3904"><a href="#Unary-3904"><span class="linenos">3904</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44749,8 +46218,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitwiseNot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseNot-3780"><a href="#BitwiseNot-3780"><span class="linenos">3780</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-3781"><a href="#BitwiseNot-3781"><span class="linenos">3781</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseNot-3907"><a href="#BitwiseNot-3907"><span class="linenos">3907</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-3908"><a href="#BitwiseNot-3908"><span class="linenos">3908</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44852,8 +46321,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Not"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Not-3784"><a href="#Not-3784"><span class="linenos">3784</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-3785"><a href="#Not-3785"><span class="linenos">3785</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Not-3911"><a href="#Not-3911"><span class="linenos">3911</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-3912"><a href="#Not-3912"><span class="linenos">3912</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -44955,12 +46424,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Paren"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Paren-3788"><a href="#Paren-3788"><span class="linenos">3788</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-3789"><a href="#Paren-3789"><span class="linenos">3789</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Paren-3790"><a href="#Paren-3790"><span class="linenos">3790</span></a>
-</span><span id="Paren-3791"><a href="#Paren-3791"><span class="linenos">3791</span></a> <span class="nd">@property</span>
-</span><span id="Paren-3792"><a href="#Paren-3792"><span class="linenos">3792</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="Paren-3793"><a href="#Paren-3793"><span class="linenos">3793</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Paren-3915"><a href="#Paren-3915"><span class="linenos">3915</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-3916"><a href="#Paren-3916"><span class="linenos">3916</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Paren-3917"><a href="#Paren-3917"><span class="linenos">3917</span></a>
+</span><span id="Paren-3918"><a href="#Paren-3918"><span class="linenos">3918</span></a> <span class="nd">@property</span>
+</span><span id="Paren-3919"><a href="#Paren-3919"><span class="linenos">3919</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="Paren-3920"><a href="#Paren-3920"><span class="linenos">3920</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></pre></div>
@@ -45102,8 +46571,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Neg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Neg-3796"><a href="#Neg-3796"><span class="linenos">3796</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-3797"><a href="#Neg-3797"><span class="linenos">3797</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Neg-3923"><a href="#Neg-3923"><span class="linenos">3923</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-3924"><a href="#Neg-3924"><span class="linenos">3924</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -45205,12 +46674,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Alias"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Alias-3800"><a href="#Alias-3800"><span class="linenos">3800</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-3801"><a href="#Alias-3801"><span class="linenos">3801</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3802"><a href="#Alias-3802"><span class="linenos">3802</span></a>
-</span><span id="Alias-3803"><a href="#Alias-3803"><span class="linenos">3803</span></a> <span class="nd">@property</span>
-</span><span id="Alias-3804"><a href="#Alias-3804"><span class="linenos">3804</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="Alias-3805"><a href="#Alias-3805"><span class="linenos">3805</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-3927"><a href="#Alias-3927"><span class="linenos">3927</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-3928"><a href="#Alias-3928"><span class="linenos">3928</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3929"><a href="#Alias-3929"><span class="linenos">3929</span></a>
+</span><span id="Alias-3930"><a href="#Alias-3930"><span class="linenos">3930</span></a> <span class="nd">@property</span>
+</span><span id="Alias-3931"><a href="#Alias-3931"><span class="linenos">3931</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="Alias-3932"><a href="#Alias-3932"><span class="linenos">3932</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
</span></pre></div>
@@ -45337,12 +46806,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Aliases"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Aliases-3808"><a href="#Aliases-3808"><span class="linenos">3808</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-3809"><a href="#Aliases-3809"><span class="linenos">3809</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3810"><a href="#Aliases-3810"><span class="linenos">3810</span></a>
-</span><span id="Aliases-3811"><a href="#Aliases-3811"><span class="linenos">3811</span></a> <span class="nd">@property</span>
-</span><span id="Aliases-3812"><a href="#Aliases-3812"><span class="linenos">3812</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-3813"><a href="#Aliases-3813"><span class="linenos">3813</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-3935"><a href="#Aliases-3935"><span class="linenos">3935</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-3936"><a href="#Aliases-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">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-3937"><a href="#Aliases-3937"><span class="linenos">3937</span></a>
+</span><span id="Aliases-3938"><a href="#Aliases-3938"><span class="linenos">3938</span></a> <span class="nd">@property</span>
+</span><span id="Aliases-3939"><a href="#Aliases-3939"><span class="linenos">3939</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-3940"><a href="#Aliases-3940"><span class="linenos">3940</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
</span></pre></div>
@@ -45451,8 +46920,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#AtTimeZone"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AtTimeZone-3816"><a href="#AtTimeZone-3816"><span class="linenos">3816</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-3817"><a href="#AtTimeZone-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;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-3943"><a href="#AtTimeZone-3943"><span class="linenos">3943</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-3944"><a href="#AtTimeZone-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;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>
@@ -45550,8 +47019,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Between"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Between-3820"><a href="#Between-3820"><span class="linenos">3820</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-3821"><a href="#Between-3821"><span class="linenos">3821</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3947"><a href="#Between-3947"><span class="linenos">3947</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-3948"><a href="#Between-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;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>
@@ -45664,8 +47133,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Bracket"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Bracket-3824"><a href="#Bracket-3824"><span class="linenos">3824</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-3825"><a href="#Bracket-3825"><span class="linenos">3825</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3951"><a href="#Bracket-3951"><span class="linenos">3951</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-3952"><a href="#Bracket-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -45778,8 +47247,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SafeBracket"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SafeBracket-3828"><a href="#SafeBracket-3828"><span class="linenos">3828</span></a><span class="k">class</span> <span class="nc">SafeBracket</span><span class="p">(</span><span class="n">Bracket</span><span class="p">):</span>
-</span><span id="SafeBracket-3829"><a href="#SafeBracket-3829"><span class="linenos">3829</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents array lookup where OOB index yields NULL instead of causing a failure.&quot;&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SafeBracket-3955"><a href="#SafeBracket-3955"><span class="linenos">3955</span></a><span class="k">class</span> <span class="nc">SafeBracket</span><span class="p">(</span><span class="n">Bracket</span><span class="p">):</span>
+</span><span id="SafeBracket-3956"><a href="#SafeBracket-3956"><span class="linenos">3956</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents array lookup where OOB index yields NULL instead of causing a failure.&quot;&quot;&quot;</span>
</span></pre></div>
@@ -45886,8 +47355,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Distinct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Distinct-3832"><a href="#Distinct-3832"><span class="linenos">3832</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-3833"><a href="#Distinct-3833"><span class="linenos">3833</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-3959"><a href="#Distinct-3959"><span class="linenos">3959</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-3960"><a href="#Distinct-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;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>
@@ -45985,15 +47454,15 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#In"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="In-3836"><a href="#In-3836"><span class="linenos">3836</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-3837"><a href="#In-3837"><span class="linenos">3837</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="In-3838"><a href="#In-3838"><span class="linenos">3838</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-3839"><a href="#In-3839"><span class="linenos">3839</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-3840"><a href="#In-3840"><span class="linenos">3840</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-3841"><a href="#In-3841"><span class="linenos">3841</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-3842"><a href="#In-3842"><span class="linenos">3842</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-3843"><a href="#In-3843"><span class="linenos">3843</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-3844"><a href="#In-3844"><span class="linenos">3844</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="In-3963"><a href="#In-3963"><span class="linenos">3963</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-3964"><a href="#In-3964"><span class="linenos">3964</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="In-3965"><a href="#In-3965"><span class="linenos">3965</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-3966"><a href="#In-3966"><span class="linenos">3966</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-3967"><a href="#In-3967"><span class="linenos">3967</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-3968"><a href="#In-3968"><span class="linenos">3968</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-3969"><a href="#In-3969"><span class="linenos">3969</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-3970"><a href="#In-3970"><span class="linenos">3970</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-3971"><a href="#In-3971"><span class="linenos">3971</span></a> <span class="p">}</span>
</span></pre></div>
@@ -46107,19 +47576,19 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#TimeUnit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeUnit-3847"><a href="#TimeUnit-3847"><span class="linenos">3847</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-3848"><a href="#TimeUnit-3848"><span class="linenos">3848</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-3849"><a href="#TimeUnit-3849"><span class="linenos">3849</span></a>
-</span><span id="TimeUnit-3850"><a href="#TimeUnit-3850"><span class="linenos">3850</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-3851"><a href="#TimeUnit-3851"><span class="linenos">3851</span></a>
-</span><span id="TimeUnit-3852"><a href="#TimeUnit-3852"><span class="linenos">3852</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-3853"><a href="#TimeUnit-3853"><span class="linenos">3853</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-3854"><a href="#TimeUnit-3854"><span class="linenos">3854</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-3855"><a href="#TimeUnit-3855"><span class="linenos">3855</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-3856"><a href="#TimeUnit-3856"><span class="linenos">3856</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-3857"><a href="#TimeUnit-3857"><span class="linenos">3857</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-3858"><a href="#TimeUnit-3858"><span class="linenos">3858</span></a>
-</span><span id="TimeUnit-3859"><a href="#TimeUnit-3859"><span class="linenos">3859</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-3974"><a href="#TimeUnit-3974"><span class="linenos">3974</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-3975"><a href="#TimeUnit-3975"><span class="linenos">3975</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-3976"><a href="#TimeUnit-3976"><span class="linenos">3976</span></a>
+</span><span id="TimeUnit-3977"><a href="#TimeUnit-3977"><span class="linenos">3977</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-3978"><a href="#TimeUnit-3978"><span class="linenos">3978</span></a>
+</span><span id="TimeUnit-3979"><a href="#TimeUnit-3979"><span class="linenos">3979</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-3980"><a href="#TimeUnit-3980"><span class="linenos">3980</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-3981"><a href="#TimeUnit-3981"><span class="linenos">3981</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-3982"><a href="#TimeUnit-3982"><span class="linenos">3982</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-3983"><a href="#TimeUnit-3983"><span class="linenos">3983</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-3984"><a href="#TimeUnit-3984"><span class="linenos">3984</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-3985"><a href="#TimeUnit-3985"><span class="linenos">3985</span></a>
+</span><span id="TimeUnit-3986"><a href="#TimeUnit-3986"><span class="linenos">3986</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>
@@ -46137,14 +47606,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#TimeUnit.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeUnit.__init__-3852"><a href="#TimeUnit.__init__-3852"><span class="linenos">3852</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__-3853"><a href="#TimeUnit.__init__-3853"><span class="linenos">3853</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__-3854"><a href="#TimeUnit.__init__-3854"><span class="linenos">3854</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__-3855"><a href="#TimeUnit.__init__-3855"><span class="linenos">3855</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__-3856"><a href="#TimeUnit.__init__-3856"><span class="linenos">3856</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__-3857"><a href="#TimeUnit.__init__-3857"><span class="linenos">3857</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__-3858"><a href="#TimeUnit.__init__-3858"><span class="linenos">3858</span></a>
-</span><span id="TimeUnit.__init__-3859"><a href="#TimeUnit.__init__-3859"><span class="linenos">3859</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__-3979"><a href="#TimeUnit.__init__-3979"><span class="linenos">3979</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__-3980"><a href="#TimeUnit.__init__-3980"><span class="linenos">3980</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__-3981"><a href="#TimeUnit.__init__-3981"><span class="linenos">3981</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__-3982"><a href="#TimeUnit.__init__-3982"><span class="linenos">3982</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__-3983"><a href="#TimeUnit.__init__-3983"><span class="linenos">3983</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__-3984"><a href="#TimeUnit.__init__-3984"><span class="linenos">3984</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__-3985"><a href="#TimeUnit.__init__-3985"><span class="linenos">3985</span></a>
+</span><span id="TimeUnit.__init__-3986"><a href="#TimeUnit.__init__-3986"><span class="linenos">3986</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>
@@ -46231,6 +47700,204 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</dl>
</div>
</section>
+ <section id="IntervalYearToMonthSpan">
+ <input id="IntervalYearToMonthSpan-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">IntervalYearToMonthSpan</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+
+ <label class="view-source-button" for="IntervalYearToMonthSpan-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#IntervalYearToMonthSpan"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IntervalYearToMonthSpan-3991"><a href="#IntervalYearToMonthSpan-3991"><span class="linenos">3991</span></a><span class="k">class</span> <span class="nc">IntervalYearToMonthSpan</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="IntervalYearToMonthSpan-3992"><a href="#IntervalYearToMonthSpan-3992"><span class="linenos">3992</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+</span></pre></div>
+
+
+
+
+ <div id="IntervalYearToMonthSpan.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{}</span>
+
+
+ </div>
+ <a class="headerlink" href="#IntervalYearToMonthSpan.arg_types"></a>
+
+
+
+ </div>
+ <div id="IntervalYearToMonthSpan.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;intervalyeartomonthspan&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#IntervalYearToMonthSpan.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="IntervalYearToMonthSpan.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="IntervalYearToMonthSpan.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="IntervalYearToMonthSpan.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="IntervalYearToMonthSpan.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="IntervalYearToMonthSpan.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="IntervalYearToMonthSpan.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="IntervalYearToMonthSpan.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="IntervalYearToMonthSpan.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="IntervalYearToMonthSpan.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="IntervalYearToMonthSpan.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="IntervalYearToMonthSpan.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="IntervalYearToMonthSpan.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="IntervalYearToMonthSpan.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="IntervalYearToMonthSpan.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="IntervalYearToMonthSpan.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="IntervalYearToMonthSpan.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="IntervalYearToMonthSpan.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="IntervalYearToMonthSpan.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="IntervalYearToMonthSpan.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="IntervalYearToMonthSpan.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="IntervalYearToMonthSpan.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="IntervalYearToMonthSpan.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="IntervalYearToMonthSpan.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="IntervalYearToMonthSpan.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="IntervalYearToMonthSpan.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="IntervalYearToMonthSpan.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="IntervalYearToMonthSpan.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="IntervalYearToMonthSpan.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="IntervalYearToMonthSpan.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="IntervalYearToMonthSpan.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="IntervalYearToMonthSpan.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="IntervalYearToMonthSpan.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="IntervalYearToMonthSpan.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="IntervalYearToMonthSpan.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="IntervalYearToMonthSpan.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="IntervalYearToMonthSpan.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="IntervalYearToMonthSpan.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="IntervalYearToMonthSpan.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="IntervalYearToMonthSpan.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="IntervalYearToMonthSpan.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="IntervalYearToMonthSpan.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="IntervalYearToMonthSpan.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="IntervalYearToMonthSpan.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="IntervalYearToMonthSpan.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="IntervalYearToMonthSpan.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="IntervalYearToMonthSpan.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="IntervalYearToMonthSpan.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="IntervalYearToMonthSpan.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="IntervalDayToSecondSpan">
+ <input id="IntervalDayToSecondSpan-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">IntervalDayToSecondSpan</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+
+ <label class="view-source-button" for="IntervalDayToSecondSpan-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#IntervalDayToSecondSpan"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IntervalDayToSecondSpan-3997"><a href="#IntervalDayToSecondSpan-3997"><span class="linenos">3997</span></a><span class="k">class</span> <span class="nc">IntervalDayToSecondSpan</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="IntervalDayToSecondSpan-3998"><a href="#IntervalDayToSecondSpan-3998"><span class="linenos">3998</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{}</span>
+</span></pre></div>
+
+
+
+
+ <div id="IntervalDayToSecondSpan.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{}</span>
+
+
+ </div>
+ <a class="headerlink" href="#IntervalDayToSecondSpan.arg_types"></a>
+
+
+
+ </div>
+ <div id="IntervalDayToSecondSpan.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;intervaldaytosecondspan&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#IntervalDayToSecondSpan.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="IntervalDayToSecondSpan.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="IntervalDayToSecondSpan.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="IntervalDayToSecondSpan.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="IntervalDayToSecondSpan.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="IntervalDayToSecondSpan.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="IntervalDayToSecondSpan.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="IntervalDayToSecondSpan.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="IntervalDayToSecondSpan.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="IntervalDayToSecondSpan.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="IntervalDayToSecondSpan.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="IntervalDayToSecondSpan.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="IntervalDayToSecondSpan.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="IntervalDayToSecondSpan.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="IntervalDayToSecondSpan.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="IntervalDayToSecondSpan.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="IntervalDayToSecondSpan.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="IntervalDayToSecondSpan.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="IntervalDayToSecondSpan.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="IntervalDayToSecondSpan.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="IntervalDayToSecondSpan.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="IntervalDayToSecondSpan.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="IntervalDayToSecondSpan.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="IntervalDayToSecondSpan.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="IntervalDayToSecondSpan.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="IntervalDayToSecondSpan.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="IntervalDayToSecondSpan.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="IntervalDayToSecondSpan.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="IntervalDayToSecondSpan.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="IntervalDayToSecondSpan.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="IntervalDayToSecondSpan.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="IntervalDayToSecondSpan.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="IntervalDayToSecondSpan.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="IntervalDayToSecondSpan.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="IntervalDayToSecondSpan.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="IntervalDayToSecondSpan.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="IntervalDayToSecondSpan.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="IntervalDayToSecondSpan.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="IntervalDayToSecondSpan.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="IntervalDayToSecondSpan.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="IntervalDayToSecondSpan.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="IntervalDayToSecondSpan.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="IntervalDayToSecondSpan.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="IntervalDayToSecondSpan.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="IntervalDayToSecondSpan.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="IntervalDayToSecondSpan.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="IntervalDayToSecondSpan.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="IntervalDayToSecondSpan.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="IntervalDayToSecondSpan.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="Interval">
<input id="Interval-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -46242,12 +47909,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Interval"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Interval-3862"><a href="#Interval-3862"><span class="linenos">3862</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-3863"><a href="#Interval-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">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="Interval-3864"><a href="#Interval-3864"><span class="linenos">3864</span></a>
-</span><span id="Interval-3865"><a href="#Interval-3865"><span class="linenos">3865</span></a> <span class="nd">@property</span>
-</span><span id="Interval-3866"><a href="#Interval-3866"><span class="linenos">3866</span></a> <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Var</span><span class="p">]:</span>
-</span><span id="Interval-3867"><a href="#Interval-3867"><span class="linenos">3867</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;unit&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Interval-4001"><a href="#Interval-4001"><span class="linenos">4001</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-4002"><a href="#Interval-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">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="Interval-4003"><a href="#Interval-4003"><span class="linenos">4003</span></a>
+</span><span id="Interval-4004"><a href="#Interval-4004"><span class="linenos">4004</span></a> <span class="nd">@property</span>
+</span><span id="Interval-4005"><a href="#Interval-4005"><span class="linenos">4005</span></a> <span class="k">def</span> <span class="nf">unit</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Var</span><span class="p">]:</span>
+</span><span id="Interval-4006"><a href="#Interval-4006"><span class="linenos">4006</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;unit&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -46359,8 +48026,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#IgnoreNulls"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IgnoreNulls-3870"><a href="#IgnoreNulls-3870"><span class="linenos">3870</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-3871"><a href="#IgnoreNulls-3871"><span class="linenos">3871</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IgnoreNulls-4009"><a href="#IgnoreNulls-4009"><span class="linenos">4009</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-4010"><a href="#IgnoreNulls-4010"><span class="linenos">4010</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -46447,8 +48114,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#RespectNulls"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RespectNulls-3874"><a href="#RespectNulls-3874"><span class="linenos">3874</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-3875"><a href="#RespectNulls-3875"><span class="linenos">3875</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RespectNulls-4013"><a href="#RespectNulls-4013"><span class="linenos">4013</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-4014"><a href="#RespectNulls-4014"><span class="linenos">4014</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -46535,53 +48202,53 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Func-3879"><a href="#Func-3879"><span class="linenos">3879</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-3880"><a href="#Func-3880"><span class="linenos">3880</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Func-3881"><a href="#Func-3881"><span class="linenos">3881</span></a><span class="sd"> The base class for all function expressions.</span>
-</span><span id="Func-3882"><a href="#Func-3882"><span class="linenos">3882</span></a>
-</span><span id="Func-3883"><a href="#Func-3883"><span class="linenos">3883</span></a><span class="sd"> Attributes:</span>
-</span><span id="Func-3884"><a href="#Func-3884"><span class="linenos">3884</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-3885"><a href="#Func-3885"><span class="linenos">3885</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-3886"><a href="#Func-3886"><span class="linenos">3886</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-3887"><a href="#Func-3887"><span class="linenos">3887</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-3888"><a href="#Func-3888"><span class="linenos">3888</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-3889"><a href="#Func-3889"><span class="linenos">3889</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
-</span><span id="Func-3890"><a href="#Func-3890"><span class="linenos">3890</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Func-3891"><a href="#Func-3891"><span class="linenos">3891</span></a>
-</span><span id="Func-3892"><a href="#Func-3892"><span class="linenos">3892</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Func-3893"><a href="#Func-3893"><span class="linenos">3893</span></a>
-</span><span id="Func-3894"><a href="#Func-3894"><span class="linenos">3894</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3895"><a href="#Func-3895"><span class="linenos">3895</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-3896"><a href="#Func-3896"><span class="linenos">3896</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-3897"><a href="#Func-3897"><span class="linenos">3897</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-3898"><a href="#Func-3898"><span class="linenos">3898</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
-</span><span id="Func-3899"><a href="#Func-3899"><span class="linenos">3899</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-3900"><a href="#Func-3900"><span class="linenos">3900</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-3901"><a href="#Func-3901"><span class="linenos">3901</span></a>
-</span><span id="Func-3902"><a href="#Func-3902"><span class="linenos">3902</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-3903"><a href="#Func-3903"><span class="linenos">3903</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-3904"><a href="#Func-3904"><span class="linenos">3904</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Func-3905"><a href="#Func-3905"><span class="linenos">3905</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-3906"><a href="#Func-3906"><span class="linenos">3906</span></a>
-</span><span id="Func-3907"><a href="#Func-3907"><span class="linenos">3907</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-3908"><a href="#Func-3908"><span class="linenos">3908</span></a>
-</span><span id="Func-3909"><a href="#Func-3909"><span class="linenos">3909</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3910"><a href="#Func-3910"><span class="linenos">3910</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-3911"><a href="#Func-3911"><span class="linenos">3911</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-3912"><a href="#Func-3912"><span class="linenos">3912</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
-</span><span id="Func-3913"><a href="#Func-3913"><span class="linenos">3913</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
-</span><span id="Func-3914"><a href="#Func-3914"><span class="linenos">3914</span></a> <span class="p">)</span>
-</span><span id="Func-3915"><a href="#Func-3915"><span class="linenos">3915</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-3916"><a href="#Func-3916"><span class="linenos">3916</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-3917"><a href="#Func-3917"><span class="linenos">3917</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-3918"><a href="#Func-3918"><span class="linenos">3918</span></a>
-</span><span id="Func-3919"><a href="#Func-3919"><span class="linenos">3919</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3920"><a href="#Func-3920"><span class="linenos">3920</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-3921"><a href="#Func-3921"><span class="linenos">3921</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-3922"><a href="#Func-3922"><span class="linenos">3922</span></a>
-</span><span id="Func-3923"><a href="#Func-3923"><span class="linenos">3923</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3924"><a href="#Func-3924"><span class="linenos">3924</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-3925"><a href="#Func-3925"><span class="linenos">3925</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-4018"><a href="#Func-4018"><span class="linenos">4018</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-4019"><a href="#Func-4019"><span class="linenos">4019</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Func-4020"><a href="#Func-4020"><span class="linenos">4020</span></a><span class="sd"> The base class for all function expressions.</span>
+</span><span id="Func-4021"><a href="#Func-4021"><span class="linenos">4021</span></a>
+</span><span id="Func-4022"><a href="#Func-4022"><span class="linenos">4022</span></a><span class="sd"> Attributes:</span>
+</span><span id="Func-4023"><a href="#Func-4023"><span class="linenos">4023</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-4024"><a href="#Func-4024"><span class="linenos">4024</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-4025"><a href="#Func-4025"><span class="linenos">4025</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-4026"><a href="#Func-4026"><span class="linenos">4026</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-4027"><a href="#Func-4027"><span class="linenos">4027</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-4028"><a href="#Func-4028"><span class="linenos">4028</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
+</span><span id="Func-4029"><a href="#Func-4029"><span class="linenos">4029</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Func-4030"><a href="#Func-4030"><span class="linenos">4030</span></a>
+</span><span id="Func-4031"><a href="#Func-4031"><span class="linenos">4031</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Func-4032"><a href="#Func-4032"><span class="linenos">4032</span></a>
+</span><span id="Func-4033"><a href="#Func-4033"><span class="linenos">4033</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-4034"><a href="#Func-4034"><span class="linenos">4034</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-4035"><a href="#Func-4035"><span class="linenos">4035</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-4036"><a href="#Func-4036"><span class="linenos">4036</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-4037"><a href="#Func-4037"><span class="linenos">4037</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
+</span><span id="Func-4038"><a href="#Func-4038"><span class="linenos">4038</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-4039"><a href="#Func-4039"><span class="linenos">4039</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-4040"><a href="#Func-4040"><span class="linenos">4040</span></a>
+</span><span id="Func-4041"><a href="#Func-4041"><span class="linenos">4041</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-4042"><a href="#Func-4042"><span class="linenos">4042</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-4043"><a href="#Func-4043"><span class="linenos">4043</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Func-4044"><a href="#Func-4044"><span class="linenos">4044</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-4045"><a href="#Func-4045"><span class="linenos">4045</span></a>
+</span><span id="Func-4046"><a href="#Func-4046"><span class="linenos">4046</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-4047"><a href="#Func-4047"><span class="linenos">4047</span></a>
+</span><span id="Func-4048"><a href="#Func-4048"><span class="linenos">4048</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-4049"><a href="#Func-4049"><span class="linenos">4049</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-4050"><a href="#Func-4050"><span class="linenos">4050</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-4051"><a href="#Func-4051"><span class="linenos">4051</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
+</span><span id="Func-4052"><a href="#Func-4052"><span class="linenos">4052</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
+</span><span id="Func-4053"><a href="#Func-4053"><span class="linenos">4053</span></a> <span class="p">)</span>
+</span><span id="Func-4054"><a href="#Func-4054"><span class="linenos">4054</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-4055"><a href="#Func-4055"><span class="linenos">4055</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-4056"><a href="#Func-4056"><span class="linenos">4056</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-4057"><a href="#Func-4057"><span class="linenos">4057</span></a>
+</span><span id="Func-4058"><a href="#Func-4058"><span class="linenos">4058</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-4059"><a href="#Func-4059"><span class="linenos">4059</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-4060"><a href="#Func-4060"><span class="linenos">4060</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-4061"><a href="#Func-4061"><span class="linenos">4061</span></a>
+</span><span id="Func-4062"><a href="#Func-4062"><span class="linenos">4062</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-4063"><a href="#Func-4063"><span class="linenos">4063</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-4064"><a href="#Func-4064"><span class="linenos">4064</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>
@@ -46624,20 +48291,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-3894"><a href="#Func.from_arg_list-3894"><span class="linenos">3894</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.from_arg_list-3895"><a href="#Func.from_arg_list-3895"><span class="linenos">3895</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-3896"><a href="#Func.from_arg_list-3896"><span class="linenos">3896</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-3897"><a href="#Func.from_arg_list-3897"><span class="linenos">3897</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-3898"><a href="#Func.from_arg_list-3898"><span class="linenos">3898</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-3899"><a href="#Func.from_arg_list-3899"><span class="linenos">3899</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-3900"><a href="#Func.from_arg_list-3900"><span class="linenos">3900</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-3901"><a href="#Func.from_arg_list-3901"><span class="linenos">3901</span></a>
-</span><span id="Func.from_arg_list-3902"><a href="#Func.from_arg_list-3902"><span class="linenos">3902</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-3903"><a href="#Func.from_arg_list-3903"><span class="linenos">3903</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-3904"><a href="#Func.from_arg_list-3904"><span class="linenos">3904</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Func.from_arg_list-3905"><a href="#Func.from_arg_list-3905"><span class="linenos">3905</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-3906"><a href="#Func.from_arg_list-3906"><span class="linenos">3906</span></a>
-</span><span id="Func.from_arg_list-3907"><a href="#Func.from_arg_list-3907"><span class="linenos">3907</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-4033"><a href="#Func.from_arg_list-4033"><span class="linenos">4033</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.from_arg_list-4034"><a href="#Func.from_arg_list-4034"><span class="linenos">4034</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-4035"><a href="#Func.from_arg_list-4035"><span class="linenos">4035</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-4036"><a href="#Func.from_arg_list-4036"><span class="linenos">4036</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-4037"><a href="#Func.from_arg_list-4037"><span class="linenos">4037</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-4038"><a href="#Func.from_arg_list-4038"><span class="linenos">4038</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-4039"><a href="#Func.from_arg_list-4039"><span class="linenos">4039</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-4040"><a href="#Func.from_arg_list-4040"><span class="linenos">4040</span></a>
+</span><span id="Func.from_arg_list-4041"><a href="#Func.from_arg_list-4041"><span class="linenos">4041</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-4042"><a href="#Func.from_arg_list-4042"><span class="linenos">4042</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-4043"><a href="#Func.from_arg_list-4043"><span class="linenos">4043</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Func.from_arg_list-4044"><a href="#Func.from_arg_list-4044"><span class="linenos">4044</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-4045"><a href="#Func.from_arg_list-4045"><span class="linenos">4045</span></a>
+</span><span id="Func.from_arg_list-4046"><a href="#Func.from_arg_list-4046"><span class="linenos">4046</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>
@@ -46656,15 +48323,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-3909"><a href="#Func.sql_names-3909"><span class="linenos">3909</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.sql_names-3910"><a href="#Func.sql_names-3910"><span class="linenos">3910</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-3911"><a href="#Func.sql_names-3911"><span class="linenos">3911</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-3912"><a href="#Func.sql_names-3912"><span class="linenos">3912</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
-</span><span id="Func.sql_names-3913"><a href="#Func.sql_names-3913"><span class="linenos">3913</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
-</span><span id="Func.sql_names-3914"><a href="#Func.sql_names-3914"><span class="linenos">3914</span></a> <span class="p">)</span>
-</span><span id="Func.sql_names-3915"><a href="#Func.sql_names-3915"><span class="linenos">3915</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-3916"><a href="#Func.sql_names-3916"><span class="linenos">3916</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-3917"><a href="#Func.sql_names-3917"><span class="linenos">3917</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-4048"><a href="#Func.sql_names-4048"><span class="linenos">4048</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.sql_names-4049"><a href="#Func.sql_names-4049"><span class="linenos">4049</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-4050"><a href="#Func.sql_names-4050"><span class="linenos">4050</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-4051"><a href="#Func.sql_names-4051"><span class="linenos">4051</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
+</span><span id="Func.sql_names-4052"><a href="#Func.sql_names-4052"><span class="linenos">4052</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
+</span><span id="Func.sql_names-4053"><a href="#Func.sql_names-4053"><span class="linenos">4053</span></a> <span class="p">)</span>
+</span><span id="Func.sql_names-4054"><a href="#Func.sql_names-4054"><span class="linenos">4054</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-4055"><a href="#Func.sql_names-4055"><span class="linenos">4055</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-4056"><a href="#Func.sql_names-4056"><span class="linenos">4056</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>
@@ -46683,9 +48350,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-3919"><a href="#Func.sql_name-3919"><span class="linenos">3919</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.sql_name-3920"><a href="#Func.sql_name-3920"><span class="linenos">3920</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-3921"><a href="#Func.sql_name-3921"><span class="linenos">3921</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-4058"><a href="#Func.sql_name-4058"><span class="linenos">4058</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.sql_name-4059"><a href="#Func.sql_name-4059"><span class="linenos">4059</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-4060"><a href="#Func.sql_name-4060"><span class="linenos">4060</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>
@@ -46704,9 +48371,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-3923"><a href="#Func.default_parser_mappings-3923"><span class="linenos">3923</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.default_parser_mappings-3924"><a href="#Func.default_parser_mappings-3924"><span class="linenos">3924</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-3925"><a href="#Func.default_parser_mappings-3925"><span class="linenos">3925</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-4062"><a href="#Func.default_parser_mappings-4062"><span class="linenos">4062</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.default_parser_mappings-4063"><a href="#Func.default_parser_mappings-4063"><span class="linenos">4063</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-4064"><a href="#Func.default_parser_mappings-4064"><span class="linenos">4064</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>
@@ -46809,8 +48476,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-3928"><a href="#AggFunc-3928"><span class="linenos">3928</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-3929"><a href="#AggFunc-3929"><span class="linenos">3929</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AggFunc-4067"><a href="#AggFunc-4067"><span class="linenos">4067</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-4068"><a href="#AggFunc-4068"><span class="linenos">4068</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -46920,8 +48587,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ParameterizedAgg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ParameterizedAgg-3932"><a href="#ParameterizedAgg-3932"><span class="linenos">3932</span></a><span class="k">class</span> <span class="nc">ParameterizedAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="ParameterizedAgg-3933"><a href="#ParameterizedAgg-3933"><span class="linenos">3933</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;params&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="ParameterizedAgg-4071"><a href="#ParameterizedAgg-4071"><span class="linenos">4071</span></a><span class="k">class</span> <span class="nc">ParameterizedAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="ParameterizedAgg-4072"><a href="#ParameterizedAgg-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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;params&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -47042,8 +48709,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-3936"><a href="#Abs-3936"><span class="linenos">3936</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-3937"><a href="#Abs-3937"><span class="linenos">3937</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Abs-4075"><a href="#Abs-4075"><span class="linenos">4075</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-4076"><a href="#Abs-4076"><span class="linenos">4076</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -47153,8 +48820,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Transform"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Transform-3941"><a href="#Transform-3941"><span class="linenos">3941</span></a><span class="k">class</span> <span class="nc">Transform</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Transform-3942"><a href="#Transform-3942"><span class="linenos">3942</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Transform-4080"><a href="#Transform-4080"><span class="linenos">4080</span></a><span class="k">class</span> <span class="nc">Transform</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Transform-4081"><a href="#Transform-4081"><span class="linenos">4081</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -47275,9 +48942,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-3945"><a href="#Anonymous-3945"><span class="linenos">3945</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-3946"><a href="#Anonymous-3946"><span class="linenos">3946</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3947"><a href="#Anonymous-3947"><span class="linenos">3947</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-4084"><a href="#Anonymous-4084"><span class="linenos">4084</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-4085"><a href="#Anonymous-4085"><span class="linenos">4085</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4086"><a href="#Anonymous-4086"><span class="linenos">4086</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -47409,9 +49076,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-3952"><a href="#Hll-3952"><span class="linenos">3952</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-3953"><a href="#Hll-3953"><span class="linenos">3953</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-3954"><a href="#Hll-3954"><span class="linenos">3954</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-4091"><a href="#Hll-4091"><span class="linenos">4091</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-4092"><a href="#Hll-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Hll-4093"><a href="#Hll-4093"><span class="linenos">4093</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -47543,9 +49210,9 @@ 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-3957"><a href="#ApproxDistinct-3957"><span class="linenos">3957</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-3958"><a href="#ApproxDistinct-3958"><span class="linenos">3958</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="ApproxDistinct-3959"><a href="#ApproxDistinct-3959"><span class="linenos">3959</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ApproxDistinct-4096"><a href="#ApproxDistinct-4096"><span class="linenos">4096</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-4097"><a href="#ApproxDistinct-4097"><span class="linenos">4097</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="ApproxDistinct-4098"><a href="#ApproxDistinct-4098"><span class="linenos">4098</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -47666,9 +49333,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-3962"><a href="#Array-3962"><span class="linenos">3962</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-3963"><a href="#Array-3963"><span class="linenos">3963</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-3964"><a href="#Array-3964"><span class="linenos">3964</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-4101"><a href="#Array-4101"><span class="linenos">4101</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-4102"><a href="#Array-4102"><span class="linenos">4102</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-4103"><a href="#Array-4103"><span class="linenos">4103</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -47800,8 +49467,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-3968"><a href="#ToChar-3968"><span class="linenos">3968</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-3969"><a href="#ToChar-3969"><span class="linenos">3969</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4107"><a href="#ToChar-4107"><span class="linenos">4107</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-4108"><a href="#ToChar-4108"><span class="linenos">4108</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -47922,8 +49589,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-3972"><a href="#GenerateSeries-3972"><span class="linenos">3972</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-3973"><a href="#GenerateSeries-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;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-4111"><a href="#GenerateSeries-4111"><span class="linenos">4111</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-4112"><a href="#GenerateSeries-4112"><span class="linenos">4112</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>
@@ -48044,8 +49711,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-3976"><a href="#ArrayAgg-3976"><span class="linenos">3976</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-3977"><a href="#ArrayAgg-3977"><span class="linenos">3977</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAgg-4115"><a href="#ArrayAgg-4115"><span class="linenos">4115</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-4116"><a href="#ArrayAgg-4116"><span class="linenos">4116</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -48155,8 +49822,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-3980"><a href="#ArrayAll-3980"><span class="linenos">3980</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-3981"><a href="#ArrayAll-3981"><span class="linenos">3981</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4119"><a href="#ArrayAll-4119"><span class="linenos">4119</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-4120"><a href="#ArrayAll-4120"><span class="linenos">4120</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -48277,8 +49944,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-3984"><a href="#ArrayAny-3984"><span class="linenos">3984</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-3985"><a href="#ArrayAny-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;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-4123"><a href="#ArrayAny-4123"><span class="linenos">4123</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-4124"><a href="#ArrayAny-4124"><span class="linenos">4124</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -48399,9 +50066,10 @@ 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-3988"><a href="#ArrayConcat-3988"><span class="linenos">3988</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-3989"><a href="#ArrayConcat-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="ArrayConcat-3990"><a href="#ArrayConcat-3990"><span class="linenos">3990</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-4127"><a href="#ArrayConcat-4127"><span class="linenos">4127</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-4128"><a href="#ArrayConcat-4128"><span class="linenos">4128</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;ARRAY_CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">]</span>
+</span><span id="ArrayConcat-4129"><a href="#ArrayConcat-4129"><span class="linenos">4129</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4130"><a href="#ArrayConcat-4130"><span class="linenos">4130</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -48533,8 +50201,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-3993"><a href="#ArrayContains-3993"><span class="linenos">3993</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-3994"><a href="#ArrayContains-3994"><span class="linenos">3994</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayContains-4133"><a href="#ArrayContains-4133"><span class="linenos">4133</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-4134"><a href="#ArrayContains-4134"><span class="linenos">4134</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -48649,8 +50317,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-3997"><a href="#ArrayContained-3997"><span class="linenos">3997</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-3998"><a href="#ArrayContained-3998"><span class="linenos">3998</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayContained-4137"><a href="#ArrayContained-4137"><span class="linenos">4137</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-4138"><a href="#ArrayContained-4138"><span class="linenos">4138</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -48757,9 +50425,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-4001"><a href="#ArrayFilter-4001"><span class="linenos">4001</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-4002"><a href="#ArrayFilter-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><span id="ArrayFilter-4003"><a href="#ArrayFilter-4003"><span class="linenos">4003</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-4141"><a href="#ArrayFilter-4141"><span class="linenos">4141</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-4142"><a href="#ArrayFilter-4142"><span class="linenos">4142</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4143"><a href="#ArrayFilter-4143"><span class="linenos">4143</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>
@@ -48880,8 +50548,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-4006"><a href="#ArrayJoin-4006"><span class="linenos">4006</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-4007"><a href="#ArrayJoin-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;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-4146"><a href="#ArrayJoin-4146"><span class="linenos">4146</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-4147"><a href="#ArrayJoin-4147"><span class="linenos">4147</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -49002,8 +50670,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-4010"><a href="#ArraySize-4010"><span class="linenos">4010</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-4011"><a href="#ArraySize-4011"><span class="linenos">4011</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4150"><a href="#ArraySize-4150"><span class="linenos">4150</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-4151"><a href="#ArraySize-4151"><span class="linenos">4151</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -49124,8 +50792,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-4014"><a href="#ArraySort-4014"><span class="linenos">4014</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-4015"><a href="#ArraySort-4015"><span class="linenos">4015</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4154"><a href="#ArraySort-4154"><span class="linenos">4154</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-4155"><a href="#ArraySort-4155"><span class="linenos">4155</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -49246,8 +50914,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-4018"><a href="#ArraySum-4018"><span class="linenos">4018</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-4019"><a href="#ArraySum-4019"><span class="linenos">4019</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySum-4158"><a href="#ArraySum-4158"><span class="linenos">4158</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-4159"><a href="#ArraySum-4159"><span class="linenos">4159</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -49357,8 +51025,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-4022"><a href="#ArrayUnionAgg-4022"><span class="linenos">4022</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-4023"><a href="#ArrayUnionAgg-4023"><span class="linenos">4023</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayUnionAgg-4162"><a href="#ArrayUnionAgg-4162"><span class="linenos">4162</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-4163"><a href="#ArrayUnionAgg-4163"><span class="linenos">4163</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -49468,8 +51136,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-4026"><a href="#Avg-4026"><span class="linenos">4026</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-4027"><a href="#Avg-4027"><span class="linenos">4027</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Avg-4166"><a href="#Avg-4166"><span class="linenos">4166</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-4167"><a href="#Avg-4167"><span class="linenos">4167</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -49579,8 +51247,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-4030"><a href="#AnyValue-4030"><span class="linenos">4030</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-4031"><a href="#AnyValue-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;having&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;max&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="AnyValue-4170"><a href="#AnyValue-4170"><span class="linenos">4170</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-4171"><a href="#AnyValue-4171"><span class="linenos">4171</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><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 class="s2">&quot;max&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;ignore_nulls&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -49589,7 +51257,7 @@ name is set to the expression's class name transformed to snake case.</li>
<div id="AnyValue.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;having&#39;: False, &#39;max&#39;: False}</span>
+<span class="default_value">{&#39;this&#39;: True, &#39;having&#39;: False, &#39;max&#39;: False, &#39;ignore_nulls&#39;: False}</span>
</div>
@@ -49690,6 +51358,250 @@ name is set to the expression's class name transformed to snake case.</li>
</dl>
</div>
</section>
+ <section id="First">
+ <input id="First-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">First</span><wbr>(<span class="base"><a href="#Func">Func</a></span>):
+
+ <label class="view-source-button" for="First-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#First"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="First-4174"><a href="#First-4174"><span class="linenos">4174</span></a><span class="k">class</span> <span class="nc">First</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="First-4175"><a href="#First-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;ignore_nulls&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div id="First.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True, &#39;ignore_nulls&#39;: False}</span>
+
+
+ </div>
+ <a class="headerlink" href="#First.arg_types"></a>
+
+
+
+ </div>
+ <div id="First.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;first&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#First.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="First.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="First.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="First.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="First.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="First.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="First.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="First.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="First.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="First.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="First.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="First.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="First.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="First.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="First.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="First.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="First.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="First.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="First.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="First.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="First.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="First.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="First.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="First.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="First.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="First.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="First.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="First.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="First.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="First.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="First.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="First.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="First.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="First.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="First.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="First.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="First.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="First.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="First.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="First.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="First.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="First.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="First.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="First.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="First.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="First.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="First.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="First.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="First.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ <div><dt><a href="#Func">Func</a></dt>
+ <dd id="First.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
+ <dd id="First.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="First.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
+ <dd id="First.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
+ <dd id="First.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="First.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="First.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="First.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="First.as_" class="function"><a href="#Condition.as_">as_</a></dd>
+ <dd id="First.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="First.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="First.is_" class="function"><a href="#Condition.is_">is_</a></dd>
+ <dd id="First.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="First.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="First.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="First.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="First.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Last">
+ <input id="Last-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">Last</span><wbr>(<span class="base"><a href="#Func">Func</a></span>):
+
+ <label class="view-source-button" for="Last-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Last"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Last-4178"><a href="#Last-4178"><span class="linenos">4178</span></a><span class="k">class</span> <span class="nc">Last</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Last-4179"><a href="#Last-4179"><span class="linenos">4179</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;ignore_nulls&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div id="Last.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True, &#39;ignore_nulls&#39;: False}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Last.arg_types"></a>
+
+
+
+ </div>
+ <div id="Last.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;last&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Last.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="Last.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="Last.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="Last.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="Last.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="Last.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="Last.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="Last.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="Last.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="Last.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="Last.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="Last.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="Last.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="Last.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="Last.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="Last.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="Last.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="Last.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="Last.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="Last.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="Last.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="Last.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="Last.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="Last.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="Last.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="Last.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="Last.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="Last.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="Last.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="Last.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="Last.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="Last.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="Last.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="Last.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="Last.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="Last.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="Last.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="Last.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="Last.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="Last.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="Last.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="Last.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="Last.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="Last.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="Last.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="Last.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="Last.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="Last.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="Last.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ <div><dt><a href="#Func">Func</a></dt>
+ <dd id="Last.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
+ <dd id="Last.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="Last.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
+ <dd id="Last.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
+ <dd id="Last.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="Last.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Last.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Last.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Last.as_" class="function"><a href="#Condition.as_">as_</a></dd>
+ <dd id="Last.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Last.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Last.is_" class="function"><a href="#Condition.is_">is_</a></dd>
+ <dd id="Last.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Last.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Last.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Last.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Last.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="Case">
<input id="Case-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -49701,24 +51613,24 @@ 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-4034"><a href="#Case-4034"><span class="linenos">4034</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-4035"><a href="#Case-4035"><span class="linenos">4035</span></a> <span class="n">arg_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-4036"><a href="#Case-4036"><span class="linenos">4036</span></a>
-</span><span id="Case-4037"><a href="#Case-4037"><span class="linenos">4037</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-4038"><a href="#Case-4038"><span class="linenos">4038</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-4039"><a href="#Case-4039"><span class="linenos">4039</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Case-4040"><a href="#Case-4040"><span class="linenos">4040</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
-</span><span id="Case-4041"><a href="#Case-4041"><span class="linenos">4041</span></a> <span class="n">If</span><span class="p">(</span>
-</span><span id="Case-4042"><a href="#Case-4042"><span class="linenos">4042</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-4043"><a href="#Case-4043"><span class="linenos">4043</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-4044"><a href="#Case-4044"><span class="linenos">4044</span></a> <span class="p">),</span>
-</span><span id="Case-4045"><a href="#Case-4045"><span class="linenos">4045</span></a> <span class="p">)</span>
-</span><span id="Case-4046"><a href="#Case-4046"><span class="linenos">4046</span></a> <span class="k">return</span> <span class="n">instance</span>
-</span><span id="Case-4047"><a href="#Case-4047"><span class="linenos">4047</span></a>
-</span><span id="Case-4048"><a href="#Case-4048"><span class="linenos">4048</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-4049"><a href="#Case-4049"><span class="linenos">4049</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-4050"><a href="#Case-4050"><span class="linenos">4050</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-4051"><a href="#Case-4051"><span class="linenos">4051</span></a> <span class="k">return</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Case-4182"><a href="#Case-4182"><span class="linenos">4182</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-4183"><a href="#Case-4183"><span class="linenos">4183</span></a> <span class="n">arg_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-4184"><a href="#Case-4184"><span class="linenos">4184</span></a>
+</span><span id="Case-4185"><a href="#Case-4185"><span class="linenos">4185</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-4186"><a href="#Case-4186"><span class="linenos">4186</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-4187"><a href="#Case-4187"><span class="linenos">4187</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Case-4188"><a href="#Case-4188"><span class="linenos">4188</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
+</span><span id="Case-4189"><a href="#Case-4189"><span class="linenos">4189</span></a> <span class="n">If</span><span class="p">(</span>
+</span><span id="Case-4190"><a href="#Case-4190"><span class="linenos">4190</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-4191"><a href="#Case-4191"><span class="linenos">4191</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-4192"><a href="#Case-4192"><span class="linenos">4192</span></a> <span class="p">),</span>
+</span><span id="Case-4193"><a href="#Case-4193"><span class="linenos">4193</span></a> <span class="p">)</span>
+</span><span id="Case-4194"><a href="#Case-4194"><span class="linenos">4194</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="Case-4195"><a href="#Case-4195"><span class="linenos">4195</span></a>
+</span><span id="Case-4196"><a href="#Case-4196"><span class="linenos">4196</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-4197"><a href="#Case-4197"><span class="linenos">4197</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-4198"><a href="#Case-4198"><span class="linenos">4198</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-4199"><a href="#Case-4199"><span class="linenos">4199</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
@@ -49747,16 +51659,16 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Case.when"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Case.when-4037"><a href="#Case.when-4037"><span class="linenos">4037</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-4038"><a href="#Case.when-4038"><span class="linenos">4038</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-4039"><a href="#Case.when-4039"><span class="linenos">4039</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-4040"><a href="#Case.when-4040"><span class="linenos">4040</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
-</span><span id="Case.when-4041"><a href="#Case.when-4041"><span class="linenos">4041</span></a> <span class="n">If</span><span class="p">(</span>
-</span><span id="Case.when-4042"><a href="#Case.when-4042"><span class="linenos">4042</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-4043"><a href="#Case.when-4043"><span class="linenos">4043</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-4044"><a href="#Case.when-4044"><span class="linenos">4044</span></a> <span class="p">),</span>
-</span><span id="Case.when-4045"><a href="#Case.when-4045"><span class="linenos">4045</span></a> <span class="p">)</span>
-</span><span id="Case.when-4046"><a href="#Case.when-4046"><span class="linenos">4046</span></a> <span class="k">return</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Case.when-4185"><a href="#Case.when-4185"><span class="linenos">4185</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-4186"><a href="#Case.when-4186"><span class="linenos">4186</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-4187"><a href="#Case.when-4187"><span class="linenos">4187</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-4188"><a href="#Case.when-4188"><span class="linenos">4188</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
+</span><span id="Case.when-4189"><a href="#Case.when-4189"><span class="linenos">4189</span></a> <span class="n">If</span><span class="p">(</span>
+</span><span id="Case.when-4190"><a href="#Case.when-4190"><span class="linenos">4190</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-4191"><a href="#Case.when-4191"><span class="linenos">4191</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-4192"><a href="#Case.when-4192"><span class="linenos">4192</span></a> <span class="p">),</span>
+</span><span id="Case.when-4193"><a href="#Case.when-4193"><span class="linenos">4193</span></a> <span class="p">)</span>
+</span><span id="Case.when-4194"><a href="#Case.when-4194"><span class="linenos">4194</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
@@ -49774,10 +51686,10 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Case.else_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Case.else_-4048"><a href="#Case.else_-4048"><span class="linenos">4048</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_-4049"><a href="#Case.else_-4049"><span class="linenos">4049</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_-4050"><a href="#Case.else_-4050"><span class="linenos">4050</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_-4051"><a href="#Case.else_-4051"><span class="linenos">4051</span></a> <span class="k">return</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Case.else_-4196"><a href="#Case.else_-4196"><span class="linenos">4196</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_-4197"><a href="#Case.else_-4197"><span class="linenos">4197</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_-4198"><a href="#Case.else_-4198"><span class="linenos">4198</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_-4199"><a href="#Case.else_-4199"><span class="linenos">4199</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
@@ -49887,23 +51799,34 @@ 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-4054"><a href="#Cast-4054"><span class="linenos">4054</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-4055"><a href="#Cast-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;to&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="Cast-4056"><a href="#Cast-4056"><span class="linenos">4056</span></a>
-</span><span id="Cast-4057"><a href="#Cast-4057"><span class="linenos">4057</span></a> <span class="nd">@property</span>
-</span><span id="Cast-4058"><a href="#Cast-4058"><span class="linenos">4058</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-4059"><a href="#Cast-4059"><span class="linenos">4059</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-4060"><a href="#Cast-4060"><span class="linenos">4060</span></a>
-</span><span id="Cast-4061"><a href="#Cast-4061"><span class="linenos">4061</span></a> <span class="nd">@property</span>
-</span><span id="Cast-4062"><a href="#Cast-4062"><span class="linenos">4062</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 class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="Cast-4063"><a href="#Cast-4063"><span class="linenos">4063</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-4064"><a href="#Cast-4064"><span class="linenos">4064</span></a>
-</span><span id="Cast-4065"><a href="#Cast-4065"><span class="linenos">4065</span></a> <span class="nd">@property</span>
-</span><span id="Cast-4066"><a href="#Cast-4066"><span class="linenos">4066</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="Cast-4067"><a href="#Cast-4067"><span class="linenos">4067</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-4068"><a href="#Cast-4068"><span class="linenos">4068</span></a>
-</span><span id="Cast-4069"><a href="#Cast-4069"><span class="linenos">4069</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Cast-4070"><a href="#Cast-4070"><span class="linenos">4070</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="o">*</span><span class="n">dtypes</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cast-4202"><a href="#Cast-4202"><span class="linenos">4202</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-4203"><a href="#Cast-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;to&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="Cast-4204"><a href="#Cast-4204"><span class="linenos">4204</span></a>
+</span><span id="Cast-4205"><a href="#Cast-4205"><span class="linenos">4205</span></a> <span class="nd">@property</span>
+</span><span id="Cast-4206"><a href="#Cast-4206"><span class="linenos">4206</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-4207"><a href="#Cast-4207"><span class="linenos">4207</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-4208"><a href="#Cast-4208"><span class="linenos">4208</span></a>
+</span><span id="Cast-4209"><a href="#Cast-4209"><span class="linenos">4209</span></a> <span class="nd">@property</span>
+</span><span id="Cast-4210"><a href="#Cast-4210"><span class="linenos">4210</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 class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="Cast-4211"><a href="#Cast-4211"><span class="linenos">4211</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-4212"><a href="#Cast-4212"><span class="linenos">4212</span></a>
+</span><span id="Cast-4213"><a href="#Cast-4213"><span class="linenos">4213</span></a> <span class="nd">@property</span>
+</span><span id="Cast-4214"><a href="#Cast-4214"><span class="linenos">4214</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="Cast-4215"><a href="#Cast-4215"><span class="linenos">4215</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-4216"><a href="#Cast-4216"><span class="linenos">4216</span></a>
+</span><span id="Cast-4217"><a href="#Cast-4217"><span class="linenos">4217</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Cast-4218"><a href="#Cast-4218"><span class="linenos">4218</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Cast-4219"><a href="#Cast-4219"><span class="linenos">4219</span></a><span class="sd"> Checks whether this Cast&#39;s DataType matches one of the provided data types. Nested types</span>
+</span><span id="Cast-4220"><a href="#Cast-4220"><span class="linenos">4220</span></a><span class="sd"> like arrays or structs will be compared using &quot;structural equivalence&quot; semantics, so e.g.</span>
+</span><span id="Cast-4221"><a href="#Cast-4221"><span class="linenos">4221</span></a><span class="sd"> array&lt;int&gt; != array&lt;float&gt;.</span>
+</span><span id="Cast-4222"><a href="#Cast-4222"><span class="linenos">4222</span></a>
+</span><span id="Cast-4223"><a href="#Cast-4223"><span class="linenos">4223</span></a><span class="sd"> Args:</span>
+</span><span id="Cast-4224"><a href="#Cast-4224"><span class="linenos">4224</span></a><span class="sd"> dtypes: the data types to compare this Cast&#39;s DataType to.</span>
+</span><span id="Cast-4225"><a href="#Cast-4225"><span class="linenos">4225</span></a>
+</span><span id="Cast-4226"><a href="#Cast-4226"><span class="linenos">4226</span></a><span class="sd"> Returns:</span>
+</span><span id="Cast-4227"><a href="#Cast-4227"><span class="linenos">4227</span></a><span class="sd"> True, if and only if there is a type in `dtypes` which is equal to this Cast&#39;s DataType.</span>
+</span><span id="Cast-4228"><a href="#Cast-4228"><span class="linenos">4228</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Cast-4229"><a href="#Cast-4229"><span class="linenos">4229</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="o">*</span><span class="n">dtypes</span><span class="p">)</span>
</span></pre></div>
@@ -49984,12 +51907,39 @@ 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-4069"><a href="#Cast.is_type-4069"><span class="linenos">4069</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Cast.is_type-4070"><a href="#Cast.is_type-4070"><span class="linenos">4070</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="o">*</span><span class="n">dtypes</span><span class="p">)</span>
-</span></pre></div>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cast.is_type-4217"><a href="#Cast.is_type-4217"><span class="linenos">4217</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="o">*</span><span class="n">dtypes</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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Cast.is_type-4218"><a href="#Cast.is_type-4218"><span class="linenos">4218</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Cast.is_type-4219"><a href="#Cast.is_type-4219"><span class="linenos">4219</span></a><span class="sd"> Checks whether this Cast&#39;s DataType matches one of the provided data types. Nested types</span>
+</span><span id="Cast.is_type-4220"><a href="#Cast.is_type-4220"><span class="linenos">4220</span></a><span class="sd"> like arrays or structs will be compared using &quot;structural equivalence&quot; semantics, so e.g.</span>
+</span><span id="Cast.is_type-4221"><a href="#Cast.is_type-4221"><span class="linenos">4221</span></a><span class="sd"> array&lt;int&gt; != array&lt;float&gt;.</span>
+</span><span id="Cast.is_type-4222"><a href="#Cast.is_type-4222"><span class="linenos">4222</span></a>
+</span><span id="Cast.is_type-4223"><a href="#Cast.is_type-4223"><span class="linenos">4223</span></a><span class="sd"> Args:</span>
+</span><span id="Cast.is_type-4224"><a href="#Cast.is_type-4224"><span class="linenos">4224</span></a><span class="sd"> dtypes: the data types to compare this Cast&#39;s DataType to.</span>
+</span><span id="Cast.is_type-4225"><a href="#Cast.is_type-4225"><span class="linenos">4225</span></a>
+</span><span id="Cast.is_type-4226"><a href="#Cast.is_type-4226"><span class="linenos">4226</span></a><span class="sd"> Returns:</span>
+</span><span id="Cast.is_type-4227"><a href="#Cast.is_type-4227"><span class="linenos">4227</span></a><span class="sd"> True, if and only if there is a type in `dtypes` which is equal to this Cast&#39;s DataType.</span>
+</span><span id="Cast.is_type-4228"><a href="#Cast.is_type-4228"><span class="linenos">4228</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Cast.is_type-4229"><a href="#Cast.is_type-4229"><span class="linenos">4229</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="o">*</span><span class="n">dtypes</span><span class="p">)</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Checks whether this Cast's DataType matches one of the provided data types. Nested types
+like arrays or structs will be compared using "structural equivalence" semantics, so e.g.
+array<int> != array<float>.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>dtypes:</strong> the data types to compare this Cast's DataType to.</li>
+</ul>
+<h6 id="returns">Returns:</h6>
+
+<blockquote>
+ <p>True, if and only if there is a type in <code>dtypes</code> which is equal to this Cast's DataType.</p>
+</blockquote>
+</div>
-
</div>
<div id="Cast.key" class="classattr">
@@ -50082,6 +52032,122 @@ name is set to the expression's class name transformed to snake case.</li>
</dl>
</div>
</section>
+ <section id="TryCast">
+ <input id="TryCast-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">TryCast</span><wbr>(<span class="base"><a href="#Cast">Cast</a></span>):
+
+ <label class="view-source-button" for="TryCast-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#TryCast"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TryCast-4232"><a href="#TryCast-4232"><span class="linenos">4232</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-4233"><a href="#TryCast-4233"><span class="linenos">4233</span></a> <span class="k">pass</span>
+</span></pre></div>
+
+
+
+
+ <div id="TryCast.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;trycast&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TryCast.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="TryCast.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="TryCast.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="TryCast.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="TryCast.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="TryCast.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="TryCast.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="TryCast.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="TryCast.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="TryCast.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="TryCast.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="TryCast.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="TryCast.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="TryCast.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="TryCast.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="TryCast.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="TryCast.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="TryCast.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="TryCast.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="TryCast.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="TryCast.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="TryCast.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="TryCast.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="TryCast.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="TryCast.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="TryCast.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="TryCast.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="TryCast.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="TryCast.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="TryCast.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="TryCast.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="TryCast.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="TryCast.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="TryCast.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="TryCast.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="TryCast.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="TryCast.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="TryCast.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="TryCast.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="TryCast.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="TryCast.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="TryCast.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="TryCast.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="TryCast.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="TryCast.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="TryCast.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="TryCast.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ <div><dt><a href="#Cast">Cast</a></dt>
+ <dd id="TryCast.arg_types" class="variable"><a href="#Cast.arg_types">arg_types</a></dd>
+ <dd id="TryCast.name" class="variable"><a href="#Cast.name">name</a></dd>
+ <dd id="TryCast.to" class="variable"><a href="#Cast.to">to</a></dd>
+ <dd id="TryCast.output_name" class="variable"><a href="#Cast.output_name">output_name</a></dd>
+ <dd id="TryCast.is_type" class="function"><a href="#Cast.is_type">is_type</a></dd>
+
+ </div>
+ <div><dt><a href="#Func">Func</a></dt>
+ <dd id="TryCast.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
+ <dd id="TryCast.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="TryCast.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
+ <dd id="TryCast.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
+ <dd id="TryCast.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="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.as_" class="function"><a href="#Condition.as_">as_</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.is_" class="function"><a href="#Condition.is_">is_</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>
+ </div>
+ </section>
<section id="CastToStrType">
<input id="CastToStrType-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -50093,8 +52159,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CastToStrType"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CastToStrType-4073"><a href="#CastToStrType-4073"><span class="linenos">4073</span></a><span class="k">class</span> <span class="nc">CastToStrType</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="CastToStrType-4074"><a href="#CastToStrType-4074"><span class="linenos">4074</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="CastToStrType-4236"><a href="#CastToStrType-4236"><span class="linenos">4236</span></a><span class="k">class</span> <span class="nc">CastToStrType</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="CastToStrType-4237"><a href="#CastToStrType-4237"><span class="linenos">4237</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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></pre></div>
@@ -50103,7 +52169,7 @@ name is set to the expression's class name transformed to snake case.</li>
<div id="CastToStrType.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;expression&#39;: True}</span>
+<span class="default_value">{&#39;this&#39;: True, &#39;to&#39;: True}</span>
</div>
@@ -50215,8 +52281,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-4077"><a href="#Collate-4077"><span class="linenos">4077</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-4078"><a href="#Collate-4078"><span class="linenos">4078</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Collate-4240"><a href="#Collate-4240"><span class="linenos">4240</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-4241"><a href="#Collate-4241"><span class="linenos">4241</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -50312,122 +52378,6 @@ name is set to the expression's class name transformed to snake case.</li>
</dl>
</div>
</section>
- <section id="TryCast">
- <input id="TryCast-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">TryCast</span><wbr>(<span class="base"><a href="#Cast">Cast</a></span>):
-
- <label class="view-source-button" for="TryCast-view-source"><span>View Source</span></label>
-
- </div>
- <a class="headerlink" href="#TryCast"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TryCast-4081"><a href="#TryCast-4081"><span class="linenos">4081</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-4082"><a href="#TryCast-4082"><span class="linenos">4082</span></a> <span class="k">pass</span>
-</span></pre></div>
-
-
-
-
- <div id="TryCast.key" class="classattr">
- <div class="attr variable">
- <span class="name">key</span> =
-<span class="default_value">&#39;trycast&#39;</span>
-
-
- </div>
- <a class="headerlink" href="#TryCast.key"></a>
-
-
-
- </div>
- <div class="inherited">
- <h5>Inherited Members</h5>
- <dl>
- <div><dt><a href="#Expression">Expression</a></dt>
- <dd id="TryCast.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
- <dd id="TryCast.args" class="variable"><a href="#Expression.args">args</a></dd>
- <dd id="TryCast.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
- <dd id="TryCast.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
- <dd id="TryCast.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
- <dd id="TryCast.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
- <dd id="TryCast.this" class="variable"><a href="#Expression.this">this</a></dd>
- <dd id="TryCast.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
- <dd id="TryCast.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
- <dd id="TryCast.text" class="function"><a href="#Expression.text">text</a></dd>
- <dd id="TryCast.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
- <dd id="TryCast.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
- <dd id="TryCast.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
- <dd id="TryCast.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
- <dd id="TryCast.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
- <dd id="TryCast.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
- <dd id="TryCast.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
- <dd id="TryCast.type" class="variable"><a href="#Expression.type">type</a></dd>
- <dd id="TryCast.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
- <dd id="TryCast.copy" class="function"><a href="#Expression.copy">copy</a></dd>
- <dd id="TryCast.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
- <dd id="TryCast.append" class="function"><a href="#Expression.append">append</a></dd>
- <dd id="TryCast.set" class="function"><a href="#Expression.set">set</a></dd>
- <dd id="TryCast.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
- <dd id="TryCast.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
- <dd id="TryCast.find" class="function"><a href="#Expression.find">find</a></dd>
- <dd id="TryCast.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
- <dd id="TryCast.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
- <dd id="TryCast.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
- <dd id="TryCast.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
- <dd id="TryCast.root" class="function"><a href="#Expression.root">root</a></dd>
- <dd id="TryCast.walk" class="function"><a href="#Expression.walk">walk</a></dd>
- <dd id="TryCast.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
- <dd id="TryCast.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
- <dd id="TryCast.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
- <dd id="TryCast.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
- <dd id="TryCast.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
- <dd id="TryCast.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
- <dd id="TryCast.sql" class="function"><a href="#Expression.sql">sql</a></dd>
- <dd id="TryCast.transform" class="function"><a href="#Expression.transform">transform</a></dd>
- <dd id="TryCast.replace" class="function"><a href="#Expression.replace">replace</a></dd>
- <dd id="TryCast.pop" class="function"><a href="#Expression.pop">pop</a></dd>
- <dd id="TryCast.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
- <dd id="TryCast.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
- <dd id="TryCast.dump" class="function"><a href="#Expression.dump">dump</a></dd>
- <dd id="TryCast.load" class="function"><a href="#Expression.load">load</a></dd>
-
- </div>
- <div><dt><a href="#Cast">Cast</a></dt>
- <dd id="TryCast.arg_types" class="variable"><a href="#Cast.arg_types">arg_types</a></dd>
- <dd id="TryCast.name" class="variable"><a href="#Cast.name">name</a></dd>
- <dd id="TryCast.to" class="variable"><a href="#Cast.to">to</a></dd>
- <dd id="TryCast.output_name" class="variable"><a href="#Cast.output_name">output_name</a></dd>
- <dd id="TryCast.is_type" class="function"><a href="#Cast.is_type">is_type</a></dd>
-
- </div>
- <div><dt><a href="#Func">Func</a></dt>
- <dd id="TryCast.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
- <dd id="TryCast.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
- <dd id="TryCast.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
- <dd id="TryCast.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
- <dd id="TryCast.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="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.as_" class="function"><a href="#Condition.as_">as_</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.is_" class="function"><a href="#Condition.is_">is_</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>
- </div>
- </section>
<section id="Ceil">
<input id="Ceil-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -50439,9 +52389,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-4085"><a href="#Ceil-4085"><span class="linenos">4085</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-4086"><a href="#Ceil-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;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-4087"><a href="#Ceil-4087"><span class="linenos">4087</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-4244"><a href="#Ceil-4244"><span class="linenos">4244</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-4245"><a href="#Ceil-4245"><span class="linenos">4245</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4246"><a href="#Ceil-4246"><span class="linenos">4246</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>
@@ -50562,10 +52512,10 @@ 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-4090"><a href="#Coalesce-4090"><span class="linenos">4090</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-4091"><a href="#Coalesce-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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Coalesce-4092"><a href="#Coalesce-4092"><span class="linenos">4092</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Coalesce-4093"><a href="#Coalesce-4093"><span class="linenos">4093</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;COALESCE&quot;</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="Coalesce-4249"><a href="#Coalesce-4249"><span class="linenos">4249</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-4250"><a href="#Coalesce-4250"><span class="linenos">4250</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4251"><a href="#Coalesce-4251"><span class="linenos">4251</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Coalesce-4252"><a href="#Coalesce-4252"><span class="linenos">4252</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;COALESCE&quot;</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>
@@ -50697,9 +52647,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-4096"><a href="#Concat-4096"><span class="linenos">4096</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-4097"><a href="#Concat-4097"><span class="linenos">4097</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-4098"><a href="#Concat-4098"><span class="linenos">4098</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-4255"><a href="#Concat-4255"><span class="linenos">4255</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-4256"><a href="#Concat-4256"><span class="linenos">4256</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-4257"><a href="#Concat-4257"><span class="linenos">4257</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -50831,8 +52781,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#SafeConcat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SafeConcat-4101"><a href="#SafeConcat-4101"><span class="linenos">4101</span></a><span class="k">class</span> <span class="nc">SafeConcat</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
-</span><span id="SafeConcat-4102"><a href="#SafeConcat-4102"><span class="linenos">4102</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SafeConcat-4260"><a href="#SafeConcat-4260"><span class="linenos">4260</span></a><span class="k">class</span> <span class="nc">SafeConcat</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
+</span><span id="SafeConcat-4261"><a href="#SafeConcat-4261"><span class="linenos">4261</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -50945,8 +52895,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-4105"><a href="#ConcatWs-4105"><span class="linenos">4105</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-4106"><a href="#ConcatWs-4106"><span class="linenos">4106</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-4264"><a href="#ConcatWs-4264"><span class="linenos">4264</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-4265"><a href="#ConcatWs-4265"><span class="linenos">4265</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>
@@ -51059,9 +53009,9 @@ 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-4109"><a href="#Count-4109"><span class="linenos">4109</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-4110"><a href="#Count-4110"><span class="linenos">4110</span></a> <span class="n">arg_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="Count-4111"><a href="#Count-4111"><span class="linenos">4111</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="Count-4268"><a href="#Count-4268"><span class="linenos">4268</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-4269"><a href="#Count-4269"><span class="linenos">4269</span></a> <span class="n">arg_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="Count-4270"><a href="#Count-4270"><span class="linenos">4270</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -51193,8 +53143,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-4114"><a href="#CountIf-4114"><span class="linenos">4114</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-4115"><a href="#CountIf-4115"><span class="linenos">4115</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CountIf-4273"><a href="#CountIf-4273"><span class="linenos">4273</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-4274"><a href="#CountIf-4274"><span class="linenos">4274</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -51304,8 +53254,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-4118"><a href="#CurrentDate-4118"><span class="linenos">4118</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-4119"><a href="#CurrentDate-4119"><span class="linenos">4119</span></a> <span class="n">arg_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-4277"><a href="#CurrentDate-4277"><span class="linenos">4277</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-4278"><a href="#CurrentDate-4278"><span class="linenos">4278</span></a> <span class="n">arg_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>
@@ -51426,8 +53376,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-4122"><a href="#CurrentDatetime-4122"><span class="linenos">4122</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-4123"><a href="#CurrentDatetime-4123"><span class="linenos">4123</span></a> <span class="n">arg_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-4281"><a href="#CurrentDatetime-4281"><span class="linenos">4281</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-4282"><a href="#CurrentDatetime-4282"><span class="linenos">4282</span></a> <span class="n">arg_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>
@@ -51548,8 +53498,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-4126"><a href="#CurrentTime-4126"><span class="linenos">4126</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-4127"><a href="#CurrentTime-4127"><span class="linenos">4127</span></a> <span class="n">arg_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-4285"><a href="#CurrentTime-4285"><span class="linenos">4285</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-4286"><a href="#CurrentTime-4286"><span class="linenos">4286</span></a> <span class="n">arg_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>
@@ -51670,8 +53620,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-4130"><a href="#CurrentTimestamp-4130"><span class="linenos">4130</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-4131"><a href="#CurrentTimestamp-4131"><span class="linenos">4131</span></a> <span class="n">arg_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-4289"><a href="#CurrentTimestamp-4289"><span class="linenos">4289</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-4290"><a href="#CurrentTimestamp-4290"><span class="linenos">4290</span></a> <span class="n">arg_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>
@@ -51792,8 +53742,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-4134"><a href="#CurrentUser-4134"><span class="linenos">4134</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-4135"><a href="#CurrentUser-4135"><span class="linenos">4135</span></a> <span class="n">arg_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-4293"><a href="#CurrentUser-4293"><span class="linenos">4293</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-4294"><a href="#CurrentUser-4294"><span class="linenos">4294</span></a> <span class="n">arg_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>
@@ -51914,8 +53864,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-4138"><a href="#DateAdd-4138"><span class="linenos">4138</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-4139"><a href="#DateAdd-4139"><span class="linenos">4139</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4297"><a href="#DateAdd-4297"><span class="linenos">4297</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-4298"><a href="#DateAdd-4298"><span class="linenos">4298</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52039,8 +53989,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-4142"><a href="#DateSub-4142"><span class="linenos">4142</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-4143"><a href="#DateSub-4143"><span class="linenos">4143</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4301"><a href="#DateSub-4301"><span class="linenos">4301</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-4302"><a href="#DateSub-4302"><span class="linenos">4302</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52164,9 +54114,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-4146"><a href="#DateDiff-4146"><span class="linenos">4146</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-4147"><a href="#DateDiff-4147"><span class="linenos">4147</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-4148"><a href="#DateDiff-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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateDiff-4305"><a href="#DateDiff-4305"><span class="linenos">4305</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-4306"><a href="#DateDiff-4306"><span class="linenos">4306</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-4307"><a href="#DateDiff-4307"><span class="linenos">4307</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52290,8 +54240,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-4151"><a href="#DateTrunc-4151"><span class="linenos">4151</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-4152"><a href="#DateTrunc-4152"><span class="linenos">4152</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-4310"><a href="#DateTrunc-4310"><span class="linenos">4310</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-4311"><a href="#DateTrunc-4311"><span class="linenos">4311</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>
@@ -52412,8 +54362,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-4155"><a href="#DatetimeAdd-4155"><span class="linenos">4155</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-4156"><a href="#DatetimeAdd-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;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-4314"><a href="#DatetimeAdd-4314"><span class="linenos">4314</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-4315"><a href="#DatetimeAdd-4315"><span class="linenos">4315</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52537,8 +54487,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-4159"><a href="#DatetimeSub-4159"><span class="linenos">4159</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-4160"><a href="#DatetimeSub-4160"><span class="linenos">4160</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4318"><a href="#DatetimeSub-4318"><span class="linenos">4318</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-4319"><a href="#DatetimeSub-4319"><span class="linenos">4319</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52662,8 +54612,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-4163"><a href="#DatetimeDiff-4163"><span class="linenos">4163</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-4164"><a href="#DatetimeDiff-4164"><span class="linenos">4164</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4322"><a href="#DatetimeDiff-4322"><span class="linenos">4322</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-4323"><a href="#DatetimeDiff-4323"><span class="linenos">4323</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52787,8 +54737,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-4167"><a href="#DatetimeTrunc-4167"><span class="linenos">4167</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-4168"><a href="#DatetimeTrunc-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;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-4326"><a href="#DatetimeTrunc-4326"><span class="linenos">4326</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-4327"><a href="#DatetimeTrunc-4327"><span class="linenos">4327</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -52912,8 +54862,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-4171"><a href="#DayOfWeek-4171"><span class="linenos">4171</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-4172"><a href="#DayOfWeek-4172"><span class="linenos">4172</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-4330"><a href="#DayOfWeek-4330"><span class="linenos">4330</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-4331"><a href="#DayOfWeek-4331"><span class="linenos">4331</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>
@@ -53023,8 +54973,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-4175"><a href="#DayOfMonth-4175"><span class="linenos">4175</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-4176"><a href="#DayOfMonth-4176"><span class="linenos">4176</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-4334"><a href="#DayOfMonth-4334"><span class="linenos">4334</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-4335"><a href="#DayOfMonth-4335"><span class="linenos">4335</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>
@@ -53134,8 +55084,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-4179"><a href="#DayOfYear-4179"><span class="linenos">4179</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-4180"><a href="#DayOfYear-4180"><span class="linenos">4180</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-4338"><a href="#DayOfYear-4338"><span class="linenos">4338</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-4339"><a href="#DayOfYear-4339"><span class="linenos">4339</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>
@@ -53245,8 +55195,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-4183"><a href="#WeekOfYear-4183"><span class="linenos">4183</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-4184"><a href="#WeekOfYear-4184"><span class="linenos">4184</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-4342"><a href="#WeekOfYear-4342"><span class="linenos">4342</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-4343"><a href="#WeekOfYear-4343"><span class="linenos">4343</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>
@@ -53356,8 +55306,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#MonthsBetween"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MonthsBetween-4187"><a href="#MonthsBetween-4187"><span class="linenos">4187</span></a><span class="k">class</span> <span class="nc">MonthsBetween</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="MonthsBetween-4188"><a href="#MonthsBetween-4188"><span class="linenos">4188</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;roundoff&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="MonthsBetween-4346"><a href="#MonthsBetween-4346"><span class="linenos">4346</span></a><span class="k">class</span> <span class="nc">MonthsBetween</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="MonthsBetween-4347"><a href="#MonthsBetween-4347"><span class="linenos">4347</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;roundoff&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -53478,8 +55428,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-4191"><a href="#LastDateOfMonth-4191"><span class="linenos">4191</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-4192"><a href="#LastDateOfMonth-4192"><span class="linenos">4192</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LastDateOfMonth-4350"><a href="#LastDateOfMonth-4350"><span class="linenos">4350</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-4351"><a href="#LastDateOfMonth-4351"><span class="linenos">4351</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -53589,8 +55539,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-4195"><a href="#Extract-4195"><span class="linenos">4195</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-4196"><a href="#Extract-4196"><span class="linenos">4196</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4354"><a href="#Extract-4354"><span class="linenos">4354</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-4355"><a href="#Extract-4355"><span class="linenos">4355</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -53711,8 +55661,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-4199"><a href="#TimestampAdd-4199"><span class="linenos">4199</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-4200"><a href="#TimestampAdd-4200"><span class="linenos">4200</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4358"><a href="#TimestampAdd-4358"><span class="linenos">4358</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-4359"><a href="#TimestampAdd-4359"><span class="linenos">4359</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -53836,8 +55786,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-4203"><a href="#TimestampSub-4203"><span class="linenos">4203</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-4204"><a href="#TimestampSub-4204"><span class="linenos">4204</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4362"><a href="#TimestampSub-4362"><span class="linenos">4362</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-4363"><a href="#TimestampSub-4363"><span class="linenos">4363</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -53961,8 +55911,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-4207"><a href="#TimestampDiff-4207"><span class="linenos">4207</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-4208"><a href="#TimestampDiff-4208"><span class="linenos">4208</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4366"><a href="#TimestampDiff-4366"><span class="linenos">4366</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-4367"><a href="#TimestampDiff-4367"><span class="linenos">4367</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -54086,8 +56036,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-4211"><a href="#TimestampTrunc-4211"><span class="linenos">4211</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-4212"><a href="#TimestampTrunc-4212"><span class="linenos">4212</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4370"><a href="#TimestampTrunc-4370"><span class="linenos">4370</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-4371"><a href="#TimestampTrunc-4371"><span class="linenos">4371</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -54211,8 +56161,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-4215"><a href="#TimeAdd-4215"><span class="linenos">4215</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-4216"><a href="#TimeAdd-4216"><span class="linenos">4216</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4374"><a href="#TimeAdd-4374"><span class="linenos">4374</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-4375"><a href="#TimeAdd-4375"><span class="linenos">4375</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -54336,8 +56286,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-4219"><a href="#TimeSub-4219"><span class="linenos">4219</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-4220"><a href="#TimeSub-4220"><span class="linenos">4220</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4378"><a href="#TimeSub-4378"><span class="linenos">4378</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-4379"><a href="#TimeSub-4379"><span class="linenos">4379</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -54461,8 +56411,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-4223"><a href="#TimeDiff-4223"><span class="linenos">4223</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-4224"><a href="#TimeDiff-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;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-4382"><a href="#TimeDiff-4382"><span class="linenos">4382</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-4383"><a href="#TimeDiff-4383"><span class="linenos">4383</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -54586,8 +56536,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-4227"><a href="#TimeTrunc-4227"><span class="linenos">4227</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-4228"><a href="#TimeTrunc-4228"><span class="linenos">4228</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4386"><a href="#TimeTrunc-4386"><span class="linenos">4386</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-4387"><a href="#TimeTrunc-4387"><span class="linenos">4387</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -54711,9 +56661,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-4231"><a href="#DateFromParts-4231"><span class="linenos">4231</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-4232"><a href="#DateFromParts-4232"><span class="linenos">4232</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-4233"><a href="#DateFromParts-4233"><span class="linenos">4233</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-4390"><a href="#DateFromParts-4390"><span class="linenos">4390</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-4391"><a href="#DateFromParts-4391"><span class="linenos">4391</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-4392"><a href="#DateFromParts-4392"><span class="linenos">4392</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>
@@ -54834,8 +56784,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-4236"><a href="#DateStrToDate-4236"><span class="linenos">4236</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-4237"><a href="#DateStrToDate-4237"><span class="linenos">4237</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateStrToDate-4395"><a href="#DateStrToDate-4395"><span class="linenos">4395</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-4396"><a href="#DateStrToDate-4396"><span class="linenos">4396</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -54945,8 +56895,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-4240"><a href="#DateToDateStr-4240"><span class="linenos">4240</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-4241"><a href="#DateToDateStr-4241"><span class="linenos">4241</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateToDateStr-4399"><a href="#DateToDateStr-4399"><span class="linenos">4399</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-4400"><a href="#DateToDateStr-4400"><span class="linenos">4400</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -55056,8 +57006,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-4244"><a href="#DateToDi-4244"><span class="linenos">4244</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-4245"><a href="#DateToDi-4245"><span class="linenos">4245</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateToDi-4403"><a href="#DateToDi-4403"><span class="linenos">4403</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-4404"><a href="#DateToDi-4404"><span class="linenos">4404</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -55167,8 +57117,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Date"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Date-4249"><a href="#Date-4249"><span class="linenos">4249</span></a><span class="k">class</span> <span class="nc">Date</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Date-4250"><a href="#Date-4250"><span class="linenos">4250</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Date-4408"><a href="#Date-4408"><span class="linenos">4408</span></a><span class="k">class</span> <span class="nc">Date</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Date-4409"><a href="#Date-4409"><span class="linenos">4409</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -55289,8 +57239,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-4253"><a href="#Day-4253"><span class="linenos">4253</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-4254"><a href="#Day-4254"><span class="linenos">4254</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Day-4412"><a href="#Day-4412"><span class="linenos">4412</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-4413"><a href="#Day-4413"><span class="linenos">4413</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -55400,8 +57350,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-4257"><a href="#Decode-4257"><span class="linenos">4257</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-4258"><a href="#Decode-4258"><span class="linenos">4258</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4416"><a href="#Decode-4416"><span class="linenos">4416</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-4417"><a href="#Decode-4417"><span class="linenos">4417</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -55522,8 +57472,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-4261"><a href="#DiToDate-4261"><span class="linenos">4261</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-4262"><a href="#DiToDate-4262"><span class="linenos">4262</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DiToDate-4420"><a href="#DiToDate-4420"><span class="linenos">4420</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-4421"><a href="#DiToDate-4421"><span class="linenos">4421</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -55633,8 +57583,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-4265"><a href="#Encode-4265"><span class="linenos">4265</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-4266"><a href="#Encode-4266"><span class="linenos">4266</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4424"><a href="#Encode-4424"><span class="linenos">4424</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-4425"><a href="#Encode-4425"><span class="linenos">4425</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -55755,8 +57705,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-4269"><a href="#Exp-4269"><span class="linenos">4269</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-4270"><a href="#Exp-4270"><span class="linenos">4270</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Exp-4428"><a href="#Exp-4428"><span class="linenos">4428</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-4429"><a href="#Exp-4429"><span class="linenos">4429</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -55866,8 +57816,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-4273"><a href="#Explode-4273"><span class="linenos">4273</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-4274"><a href="#Explode-4274"><span class="linenos">4274</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Explode-4432"><a href="#Explode-4432"><span class="linenos">4432</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-4433"><a href="#Explode-4433"><span class="linenos">4433</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -55977,8 +57927,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-4277"><a href="#Floor-4277"><span class="linenos">4277</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-4278"><a href="#Floor-4278"><span class="linenos">4278</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4436"><a href="#Floor-4436"><span class="linenos">4436</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-4437"><a href="#Floor-4437"><span class="linenos">4437</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -56099,8 +58049,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#FromBase64"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="FromBase64-4281"><a href="#FromBase64-4281"><span class="linenos">4281</span></a><span class="k">class</span> <span class="nc">FromBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="FromBase64-4282"><a href="#FromBase64-4282"><span class="linenos">4282</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="FromBase64-4440"><a href="#FromBase64-4440"><span class="linenos">4440</span></a><span class="k">class</span> <span class="nc">FromBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="FromBase64-4441"><a href="#FromBase64-4441"><span class="linenos">4441</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -56210,8 +58160,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ToBase64"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ToBase64-4285"><a href="#ToBase64-4285"><span class="linenos">4285</span></a><span class="k">class</span> <span class="nc">ToBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ToBase64-4286"><a href="#ToBase64-4286"><span class="linenos">4286</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ToBase64-4444"><a href="#ToBase64-4444"><span class="linenos">4444</span></a><span class="k">class</span> <span class="nc">ToBase64</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ToBase64-4445"><a href="#ToBase64-4445"><span class="linenos">4445</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -56321,9 +58271,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-4289"><a href="#Greatest-4289"><span class="linenos">4289</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-4290"><a href="#Greatest-4290"><span class="linenos">4290</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4291"><a href="#Greatest-4291"><span class="linenos">4291</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-4448"><a href="#Greatest-4448"><span class="linenos">4448</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-4449"><a href="#Greatest-4449"><span class="linenos">4449</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4450"><a href="#Greatest-4450"><span class="linenos">4450</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -56455,8 +58405,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-4294"><a href="#GroupConcat-4294"><span class="linenos">4294</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-4295"><a href="#GroupConcat-4295"><span class="linenos">4295</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4453"><a href="#GroupConcat-4453"><span class="linenos">4453</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-4454"><a href="#GroupConcat-4454"><span class="linenos">4454</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -56577,8 +58527,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-4298"><a href="#Hex-4298"><span class="linenos">4298</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-4299"><a href="#Hex-4299"><span class="linenos">4299</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hex-4457"><a href="#Hex-4457"><span class="linenos">4457</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-4458"><a href="#Hex-4458"><span class="linenos">4458</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -56688,8 +58638,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Xor"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Xor-4302"><a href="#Xor-4302"><span class="linenos">4302</span></a><span class="k">class</span> <span class="nc">Xor</span><span class="p">(</span><span class="n">Connector</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="Xor-4303"><a href="#Xor-4303"><span class="linenos">4303</span></a> <span class="n">arg_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;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="Xor-4461"><a href="#Xor-4461"><span class="linenos">4461</span></a><span class="k">class</span> <span class="nc">Xor</span><span class="p">(</span><span class="n">Connector</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
+</span><span id="Xor-4462"><a href="#Xor-4462"><span class="linenos">4462</span></a> <span class="n">arg_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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -56815,8 +58765,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-4306"><a href="#If-4306"><span class="linenos">4306</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-4307"><a href="#If-4307"><span class="linenos">4307</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4465"><a href="#If-4465"><span class="linenos">4465</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-4466"><a href="#If-4466"><span class="linenos">4466</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -56937,8 +58887,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-4310"><a href="#Initcap-4310"><span class="linenos">4310</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-4311"><a href="#Initcap-4311"><span class="linenos">4311</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Initcap-4469"><a href="#Initcap-4469"><span class="linenos">4469</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-4470"><a href="#Initcap-4470"><span class="linenos">4470</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -57059,8 +59009,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#IsNan"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IsNan-4314"><a href="#IsNan-4314"><span class="linenos">4314</span></a><span class="k">class</span> <span class="nc">IsNan</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="IsNan-4315"><a href="#IsNan-4315"><span class="linenos">4315</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IS_NAN&quot;</span><span class="p">,</span> <span class="s2">&quot;ISNAN&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IsNan-4473"><a href="#IsNan-4473"><span class="linenos">4473</span></a><span class="k">class</span> <span class="nc">IsNan</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="IsNan-4474"><a href="#IsNan-4474"><span class="linenos">4474</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IS_NAN&quot;</span><span class="p">,</span> <span class="s2">&quot;ISNAN&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -57170,8 +59120,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-4318"><a href="#JSONKeyValue-4318"><span class="linenos">4318</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-4319"><a href="#JSONKeyValue-4319"><span class="linenos">4319</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4477"><a href="#JSONKeyValue-4477"><span class="linenos">4477</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-4478"><a href="#JSONKeyValue-4478"><span class="linenos">4478</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -57269,15 +59219,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-4322"><a href="#JSONObject-4322"><span class="linenos">4322</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-4323"><a href="#JSONObject-4323"><span class="linenos">4323</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="JSONObject-4324"><a href="#JSONObject-4324"><span class="linenos">4324</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-4325"><a href="#JSONObject-4325"><span class="linenos">4325</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-4326"><a href="#JSONObject-4326"><span class="linenos">4326</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-4327"><a href="#JSONObject-4327"><span class="linenos">4327</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-4328"><a href="#JSONObject-4328"><span class="linenos">4328</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-4329"><a href="#JSONObject-4329"><span class="linenos">4329</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-4330"><a href="#JSONObject-4330"><span class="linenos">4330</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONObject-4481"><a href="#JSONObject-4481"><span class="linenos">4481</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-4482"><a href="#JSONObject-4482"><span class="linenos">4482</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="JSONObject-4483"><a href="#JSONObject-4483"><span class="linenos">4483</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-4484"><a href="#JSONObject-4484"><span class="linenos">4484</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-4485"><a href="#JSONObject-4485"><span class="linenos">4485</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-4486"><a href="#JSONObject-4486"><span class="linenos">4486</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-4487"><a href="#JSONObject-4487"><span class="linenos">4487</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-4488"><a href="#JSONObject-4488"><span class="linenos">4488</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-4489"><a href="#JSONObject-4489"><span class="linenos">4489</span></a> <span class="p">}</span>
</span></pre></div>
@@ -57399,8 +59349,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#OpenJSONColumnDef"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OpenJSONColumnDef-4333"><a href="#OpenJSONColumnDef-4333"><span class="linenos">4333</span></a><span class="k">class</span> <span class="nc">OpenJSONColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="OpenJSONColumnDef-4334"><a href="#OpenJSONColumnDef-4334"><span class="linenos">4334</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;path&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;as_json&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="OpenJSONColumnDef-4492"><a href="#OpenJSONColumnDef-4492"><span class="linenos">4492</span></a><span class="k">class</span> <span class="nc">OpenJSONColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="OpenJSONColumnDef-4493"><a href="#OpenJSONColumnDef-4493"><span class="linenos">4493</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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;path&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;as_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -57498,8 +59448,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#OpenJSON"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OpenJSON-4337"><a href="#OpenJSON-4337"><span class="linenos">4337</span></a><span class="k">class</span> <span class="nc">OpenJSON</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="OpenJSON-4338"><a href="#OpenJSON-4338"><span class="linenos">4338</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;path&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="OpenJSON-4496"><a href="#OpenJSON-4496"><span class="linenos">4496</span></a><span class="k">class</span> <span class="nc">OpenJSON</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="OpenJSON-4497"><a href="#OpenJSON-4497"><span class="linenos">4497</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;path&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>
@@ -57620,8 +59570,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-4341"><a href="#JSONBContains-4341"><span class="linenos">4341</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-4342"><a href="#JSONBContains-4342"><span class="linenos">4342</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-4500"><a href="#JSONBContains-4500"><span class="linenos">4500</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-4501"><a href="#JSONBContains-4501"><span class="linenos">4501</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>
@@ -57728,8 +59678,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-4345"><a href="#JSONExtract-4345"><span class="linenos">4345</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-4346"><a href="#JSONExtract-4346"><span class="linenos">4346</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-4504"><a href="#JSONExtract-4504"><span class="linenos">4504</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-4505"><a href="#JSONExtract-4505"><span class="linenos">4505</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>
@@ -57844,8 +59794,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-4349"><a href="#JSONExtractScalar-4349"><span class="linenos">4349</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-4350"><a href="#JSONExtractScalar-4350"><span class="linenos">4350</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-4508"><a href="#JSONExtractScalar-4508"><span class="linenos">4508</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-4509"><a href="#JSONExtractScalar-4509"><span class="linenos">4509</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>
@@ -57960,8 +59910,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-4353"><a href="#JSONBExtract-4353"><span class="linenos">4353</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-4354"><a href="#JSONBExtract-4354"><span class="linenos">4354</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-4512"><a href="#JSONBExtract-4512"><span class="linenos">4512</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-4513"><a href="#JSONBExtract-4513"><span class="linenos">4513</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>
@@ -58076,8 +60026,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-4357"><a href="#JSONBExtractScalar-4357"><span class="linenos">4357</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-4358"><a href="#JSONBExtractScalar-4358"><span class="linenos">4358</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-4516"><a href="#JSONBExtractScalar-4516"><span class="linenos">4516</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-4517"><a href="#JSONBExtractScalar-4517"><span class="linenos">4517</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>
@@ -58192,9 +60142,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-4361"><a href="#JSONFormat-4361"><span class="linenos">4361</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-4362"><a href="#JSONFormat-4362"><span class="linenos">4362</span></a> <span class="n">arg_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-4363"><a href="#JSONFormat-4363"><span class="linenos">4363</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-4520"><a href="#JSONFormat-4520"><span class="linenos">4520</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-4521"><a href="#JSONFormat-4521"><span class="linenos">4521</span></a> <span class="n">arg_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-4522"><a href="#JSONFormat-4522"><span class="linenos">4522</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>
@@ -58315,8 +60265,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONArrayContains"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONArrayContains-4367"><a href="#JSONArrayContains-4367"><span class="linenos">4367</span></a><span class="k">class</span> <span class="nc">JSONArrayContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="JSONArrayContains-4368"><a href="#JSONArrayContains-4368"><span class="linenos">4368</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_ARRAY_CONTAINS&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONArrayContains-4526"><a href="#JSONArrayContains-4526"><span class="linenos">4526</span></a><span class="k">class</span> <span class="nc">JSONArrayContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
+</span><span id="JSONArrayContains-4527"><a href="#JSONArrayContains-4527"><span class="linenos">4527</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_ARRAY_CONTAINS&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -58431,9 +60381,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-4371"><a href="#Least-4371"><span class="linenos">4371</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-4372"><a href="#Least-4372"><span class="linenos">4372</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Least-4373"><a href="#Least-4373"><span class="linenos">4373</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-4530"><a href="#Least-4530"><span class="linenos">4530</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-4531"><a href="#Least-4531"><span class="linenos">4531</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Least-4532"><a href="#Least-4532"><span class="linenos">4532</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -58565,8 +60515,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Left"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Left-4376"><a href="#Left-4376"><span class="linenos">4376</span></a><span class="k">class</span> <span class="nc">Left</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Left-4377"><a href="#Left-4377"><span class="linenos">4377</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Left-4535"><a href="#Left-4535"><span class="linenos">4535</span></a><span class="k">class</span> <span class="nc">Left</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Left-4536"><a href="#Left-4536"><span class="linenos">4536</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -58687,8 +60637,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Right"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Right-4380"><a href="#Right-4380"><span class="linenos">4380</span></a><span class="k">class</span> <span class="nc">Right</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Right-4381"><a href="#Right-4381"><span class="linenos">4381</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="Right-4539"><a href="#Right-4539"><span class="linenos">4539</span></a><span class="k">class</span> <span class="nc">Right</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Right-4540"><a href="#Right-4540"><span class="linenos">4540</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -58809,8 +60759,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-4384"><a href="#Length-4384"><span class="linenos">4384</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-4385"><a href="#Length-4385"><span class="linenos">4385</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="s2">&quot;LEN&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Length-4543"><a href="#Length-4543"><span class="linenos">4543</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-4544"><a href="#Length-4544"><span class="linenos">4544</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="s2">&quot;LEN&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -58920,14 +60870,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-4388"><a href="#Levenshtein-4388"><span class="linenos">4388</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-4389"><a href="#Levenshtein-4389"><span class="linenos">4389</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Levenshtein-4390"><a href="#Levenshtein-4390"><span class="linenos">4390</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-4391"><a href="#Levenshtein-4391"><span class="linenos">4391</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-4392"><a href="#Levenshtein-4392"><span class="linenos">4392</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-4393"><a href="#Levenshtein-4393"><span class="linenos">4393</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-4394"><a href="#Levenshtein-4394"><span class="linenos">4394</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-4395"><a href="#Levenshtein-4395"><span class="linenos">4395</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Levenshtein-4547"><a href="#Levenshtein-4547"><span class="linenos">4547</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-4548"><a href="#Levenshtein-4548"><span class="linenos">4548</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Levenshtein-4549"><a href="#Levenshtein-4549"><span class="linenos">4549</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-4550"><a href="#Levenshtein-4550"><span class="linenos">4550</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-4551"><a href="#Levenshtein-4551"><span class="linenos">4551</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-4552"><a href="#Levenshtein-4552"><span class="linenos">4552</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-4553"><a href="#Levenshtein-4553"><span class="linenos">4553</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-4554"><a href="#Levenshtein-4554"><span class="linenos">4554</span></a> <span class="p">}</span>
</span></pre></div>
@@ -59048,8 +60998,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-4398"><a href="#Ln-4398"><span class="linenos">4398</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-4399"><a href="#Ln-4399"><span class="linenos">4399</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Ln-4557"><a href="#Ln-4557"><span class="linenos">4557</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-4558"><a href="#Ln-4558"><span class="linenos">4558</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -59159,8 +61109,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-4402"><a href="#Log-4402"><span class="linenos">4402</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-4403"><a href="#Log-4403"><span class="linenos">4403</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4561"><a href="#Log-4561"><span class="linenos">4561</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-4562"><a href="#Log-4562"><span class="linenos">4562</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -59281,8 +61231,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-4406"><a href="#Log2-4406"><span class="linenos">4406</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-4407"><a href="#Log2-4407"><span class="linenos">4407</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Log2-4565"><a href="#Log2-4565"><span class="linenos">4565</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-4566"><a href="#Log2-4566"><span class="linenos">4566</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -59392,8 +61342,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-4410"><a href="#Log10-4410"><span class="linenos">4410</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-4411"><a href="#Log10-4411"><span class="linenos">4411</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Log10-4569"><a href="#Log10-4569"><span class="linenos">4569</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-4570"><a href="#Log10-4570"><span class="linenos">4570</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -59503,8 +61453,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-4414"><a href="#LogicalOr-4414"><span class="linenos">4414</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-4415"><a href="#LogicalOr-4415"><span class="linenos">4415</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-4573"><a href="#LogicalOr-4573"><span class="linenos">4573</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-4574"><a href="#LogicalOr-4574"><span class="linenos">4574</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>
@@ -59614,8 +61564,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-4418"><a href="#LogicalAnd-4418"><span class="linenos">4418</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-4419"><a href="#LogicalAnd-4419"><span class="linenos">4419</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-4577"><a href="#LogicalAnd-4577"><span class="linenos">4577</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-4578"><a href="#LogicalAnd-4578"><span class="linenos">4578</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>
@@ -59725,8 +61675,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-4422"><a href="#Lower-4422"><span class="linenos">4422</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-4423"><a href="#Lower-4423"><span class="linenos">4423</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-4581"><a href="#Lower-4581"><span class="linenos">4581</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-4582"><a href="#Lower-4582"><span class="linenos">4582</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>
@@ -59836,8 +61786,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-4426"><a href="#Map-4426"><span class="linenos">4426</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-4427"><a href="#Map-4427"><span class="linenos">4427</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-4585"><a href="#Map-4585"><span class="linenos">4585</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-4586"><a href="#Map-4586"><span class="linenos">4586</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>
@@ -59958,8 +61908,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#MapFromEntries"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MapFromEntries-4430"><a href="#MapFromEntries-4430"><span class="linenos">4430</span></a><span class="k">class</span> <span class="nc">MapFromEntries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="MapFromEntries-4431"><a href="#MapFromEntries-4431"><span class="linenos">4431</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MapFromEntries-4589"><a href="#MapFromEntries-4589"><span class="linenos">4589</span></a><span class="k">class</span> <span class="nc">MapFromEntries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="MapFromEntries-4590"><a href="#MapFromEntries-4590"><span class="linenos">4590</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -60069,8 +62019,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-4434"><a href="#StarMap-4434"><span class="linenos">4434</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-4435"><a href="#StarMap-4435"><span class="linenos">4435</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StarMap-4593"><a href="#StarMap-4593"><span class="linenos">4593</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-4594"><a href="#StarMap-4594"><span class="linenos">4594</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -60180,17 +62130,17 @@ 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-4438"><a href="#VarMap-4438"><span class="linenos">4438</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-4439"><a href="#VarMap-4439"><span class="linenos">4439</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-4440"><a href="#VarMap-4440"><span class="linenos">4440</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="VarMap-4441"><a href="#VarMap-4441"><span class="linenos">4441</span></a>
-</span><span id="VarMap-4442"><a href="#VarMap-4442"><span class="linenos">4442</span></a> <span class="nd">@property</span>
-</span><span id="VarMap-4443"><a href="#VarMap-4443"><span class="linenos">4443</span></a> <span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="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="VarMap-4444"><a href="#VarMap-4444"><span class="linenos">4444</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;keys&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="VarMap-4445"><a href="#VarMap-4445"><span class="linenos">4445</span></a>
-</span><span id="VarMap-4446"><a href="#VarMap-4446"><span class="linenos">4446</span></a> <span class="nd">@property</span>
-</span><span id="VarMap-4447"><a href="#VarMap-4447"><span class="linenos">4447</span></a> <span class="k">def</span> <span class="nf">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">List</span><span class="p">[</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="VarMap-4448"><a href="#VarMap-4448"><span class="linenos">4448</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;values&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="VarMap-4597"><a href="#VarMap-4597"><span class="linenos">4597</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-4598"><a href="#VarMap-4598"><span class="linenos">4598</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-4599"><a href="#VarMap-4599"><span class="linenos">4599</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="VarMap-4600"><a href="#VarMap-4600"><span class="linenos">4600</span></a>
+</span><span id="VarMap-4601"><a href="#VarMap-4601"><span class="linenos">4601</span></a> <span class="nd">@property</span>
+</span><span id="VarMap-4602"><a href="#VarMap-4602"><span class="linenos">4602</span></a> <span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="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="VarMap-4603"><a href="#VarMap-4603"><span class="linenos">4603</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;keys&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="VarMap-4604"><a href="#VarMap-4604"><span class="linenos">4604</span></a>
+</span><span id="VarMap-4605"><a href="#VarMap-4605"><span class="linenos">4605</span></a> <span class="nd">@property</span>
+</span><span id="VarMap-4606"><a href="#VarMap-4606"><span class="linenos">4606</span></a> <span class="k">def</span> <span class="nf">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">List</span><span class="p">[</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="VarMap-4607"><a href="#VarMap-4607"><span class="linenos">4607</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;values&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
</span></pre></div>
@@ -60344,8 +62294,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-4452"><a href="#MatchAgainst-4452"><span class="linenos">4452</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-4453"><a href="#MatchAgainst-4453"><span class="linenos">4453</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4611"><a href="#MatchAgainst-4611"><span class="linenos">4611</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-4612"><a href="#MatchAgainst-4612"><span class="linenos">4612</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -60466,9 +62416,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-4456"><a href="#Max-4456"><span class="linenos">4456</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-4457"><a href="#Max-4457"><span class="linenos">4457</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4458"><a href="#Max-4458"><span class="linenos">4458</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-4615"><a href="#Max-4615"><span class="linenos">4615</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-4616"><a href="#Max-4616"><span class="linenos">4616</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4617"><a href="#Max-4617"><span class="linenos">4617</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -60600,8 +62550,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-4461"><a href="#MD5-4461"><span class="linenos">4461</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-4462"><a href="#MD5-4462"><span class="linenos">4462</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-4620"><a href="#MD5-4620"><span class="linenos">4620</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-4621"><a href="#MD5-4621"><span class="linenos">4621</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>
@@ -60711,8 +62661,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#MD5Digest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MD5Digest-4466"><a href="#MD5Digest-4466"><span class="linenos">4466</span></a><span class="k">class</span> <span class="nc">MD5Digest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="MD5Digest-4467"><a href="#MD5Digest-4467"><span class="linenos">4467</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5_DIGEST&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MD5Digest-4625"><a href="#MD5Digest-4625"><span class="linenos">4625</span></a><span class="k">class</span> <span class="nc">MD5Digest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="MD5Digest-4626"><a href="#MD5Digest-4626"><span class="linenos">4626</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5_DIGEST&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -60822,9 +62772,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-4470"><a href="#Min-4470"><span class="linenos">4470</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-4471"><a href="#Min-4471"><span class="linenos">4471</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4472"><a href="#Min-4472"><span class="linenos">4472</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-4629"><a href="#Min-4629"><span class="linenos">4629</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-4630"><a href="#Min-4630"><span class="linenos">4630</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4631"><a href="#Min-4631"><span class="linenos">4631</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -60956,8 +62906,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-4475"><a href="#Month-4475"><span class="linenos">4475</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-4476"><a href="#Month-4476"><span class="linenos">4476</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Month-4634"><a href="#Month-4634"><span class="linenos">4634</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-4635"><a href="#Month-4635"><span class="linenos">4635</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -61067,8 +63017,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-4479"><a href="#Nvl2-4479"><span class="linenos">4479</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-4480"><a href="#Nvl2-4480"><span class="linenos">4480</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4638"><a href="#Nvl2-4638"><span class="linenos">4638</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-4639"><a href="#Nvl2-4639"><span class="linenos">4639</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -61189,8 +63139,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-4483"><a href="#Posexplode-4483"><span class="linenos">4483</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-4484"><a href="#Posexplode-4484"><span class="linenos">4484</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Posexplode-4642"><a href="#Posexplode-4642"><span class="linenos">4642</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-4643"><a href="#Posexplode-4643"><span class="linenos">4643</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -61300,8 +63250,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-4487"><a href="#Pow-4487"><span class="linenos">4487</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-4488"><a href="#Pow-4488"><span class="linenos">4488</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-4646"><a href="#Pow-4646"><span class="linenos">4646</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-4647"><a href="#Pow-4647"><span class="linenos">4647</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>
@@ -61416,8 +63366,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-4491"><a href="#PercentileCont-4491"><span class="linenos">4491</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-4492"><a href="#PercentileCont-4492"><span class="linenos">4492</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="PercentileCont-4650"><a href="#PercentileCont-4650"><span class="linenos">4650</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-4651"><a href="#PercentileCont-4651"><span class="linenos">4651</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -61538,8 +63488,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-4495"><a href="#PercentileDisc-4495"><span class="linenos">4495</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-4496"><a href="#PercentileDisc-4496"><span class="linenos">4496</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="PercentileDisc-4654"><a href="#PercentileDisc-4654"><span class="linenos">4654</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-4655"><a href="#PercentileDisc-4655"><span class="linenos">4655</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -61660,8 +63610,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-4499"><a href="#Quantile-4499"><span class="linenos">4499</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-4500"><a href="#Quantile-4500"><span class="linenos">4500</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4658"><a href="#Quantile-4658"><span class="linenos">4658</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-4659"><a href="#Quantile-4659"><span class="linenos">4659</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -61782,8 +63732,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-4503"><a href="#ApproxQuantile-4503"><span class="linenos">4503</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-4504"><a href="#ApproxQuantile-4504"><span class="linenos">4504</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4662"><a href="#ApproxQuantile-4662"><span class="linenos">4662</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-4663"><a href="#ApproxQuantile-4663"><span class="linenos">4663</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -61904,8 +63854,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-4507"><a href="#RangeN-4507"><span class="linenos">4507</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-4508"><a href="#RangeN-4508"><span class="linenos">4508</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4666"><a href="#RangeN-4666"><span class="linenos">4666</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-4667"><a href="#RangeN-4667"><span class="linenos">4667</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -62026,10 +63976,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-4511"><a href="#ReadCSV-4511"><span class="linenos">4511</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-4512"><a href="#ReadCSV-4512"><span class="linenos">4512</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-4513"><a href="#ReadCSV-4513"><span class="linenos">4513</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ReadCSV-4514"><a href="#ReadCSV-4514"><span class="linenos">4514</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4670"><a href="#ReadCSV-4670"><span class="linenos">4670</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-4671"><a href="#ReadCSV-4671"><span class="linenos">4671</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-4672"><a href="#ReadCSV-4672"><span class="linenos">4672</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ReadCSV-4673"><a href="#ReadCSV-4673"><span class="linenos">4673</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -62161,8 +64111,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-4517"><a href="#Reduce-4517"><span class="linenos">4517</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-4518"><a href="#Reduce-4518"><span class="linenos">4518</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4676"><a href="#Reduce-4676"><span class="linenos">4676</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-4677"><a href="#Reduce-4677"><span class="linenos">4677</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -62283,15 +64233,15 @@ 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-4521"><a href="#RegexpExtract-4521"><span class="linenos">4521</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-4522"><a href="#RegexpExtract-4522"><span class="linenos">4522</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RegexpExtract-4523"><a href="#RegexpExtract-4523"><span class="linenos">4523</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-4524"><a href="#RegexpExtract-4524"><span class="linenos">4524</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-4525"><a href="#RegexpExtract-4525"><span class="linenos">4525</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-4526"><a href="#RegexpExtract-4526"><span class="linenos">4526</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-4527"><a href="#RegexpExtract-4527"><span class="linenos">4527</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RegexpExtract-4528"><a href="#RegexpExtract-4528"><span class="linenos">4528</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-4529"><a href="#RegexpExtract-4529"><span class="linenos">4529</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpExtract-4680"><a href="#RegexpExtract-4680"><span class="linenos">4680</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-4681"><a href="#RegexpExtract-4681"><span class="linenos">4681</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RegexpExtract-4682"><a href="#RegexpExtract-4682"><span class="linenos">4682</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-4683"><a href="#RegexpExtract-4683"><span class="linenos">4683</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-4684"><a href="#RegexpExtract-4684"><span class="linenos">4684</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-4685"><a href="#RegexpExtract-4685"><span class="linenos">4685</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-4686"><a href="#RegexpExtract-4686"><span class="linenos">4686</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RegexpExtract-4687"><a href="#RegexpExtract-4687"><span class="linenos">4687</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-4688"><a href="#RegexpExtract-4688"><span class="linenos">4688</span></a> <span class="p">}</span>
</span></pre></div>
@@ -62413,15 +64363,15 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RegexpReplace"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpReplace-4532"><a href="#RegexpReplace-4532"><span class="linenos">4532</span></a><span class="k">class</span> <span class="nc">RegexpReplace</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RegexpReplace-4533"><a href="#RegexpReplace-4533"><span class="linenos">4533</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RegexpReplace-4534"><a href="#RegexpReplace-4534"><span class="linenos">4534</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="RegexpReplace-4535"><a href="#RegexpReplace-4535"><span class="linenos">4535</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="RegexpReplace-4536"><a href="#RegexpReplace-4536"><span class="linenos">4536</span></a> <span class="s2">&quot;replacement&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="RegexpReplace-4537"><a href="#RegexpReplace-4537"><span class="linenos">4537</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="RegexpReplace-4538"><a href="#RegexpReplace-4538"><span class="linenos">4538</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="RegexpReplace-4539"><a href="#RegexpReplace-4539"><span class="linenos">4539</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RegexpReplace-4540"><a href="#RegexpReplace-4540"><span class="linenos">4540</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpReplace-4691"><a href="#RegexpReplace-4691"><span class="linenos">4691</span></a><span class="k">class</span> <span class="nc">RegexpReplace</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RegexpReplace-4692"><a href="#RegexpReplace-4692"><span class="linenos">4692</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RegexpReplace-4693"><a href="#RegexpReplace-4693"><span class="linenos">4693</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="RegexpReplace-4694"><a href="#RegexpReplace-4694"><span class="linenos">4694</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="RegexpReplace-4695"><a href="#RegexpReplace-4695"><span class="linenos">4695</span></a> <span class="s2">&quot;replacement&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="RegexpReplace-4696"><a href="#RegexpReplace-4696"><span class="linenos">4696</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="RegexpReplace-4697"><a href="#RegexpReplace-4697"><span class="linenos">4697</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="RegexpReplace-4698"><a href="#RegexpReplace-4698"><span class="linenos">4698</span></a> <span class="s2">&quot;parameters&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RegexpReplace-4699"><a href="#RegexpReplace-4699"><span class="linenos">4699</span></a> <span class="p">}</span>
</span></pre></div>
@@ -62543,8 +64493,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-4543"><a href="#RegexpLike-4543"><span class="linenos">4543</span></a><span class="k">class</span> <span class="nc">RegexpLike</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="RegexpLike-4544"><a href="#RegexpLike-4544"><span class="linenos">4544</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4702"><a href="#RegexpLike-4702"><span class="linenos">4702</span></a><span class="k">class</span> <span class="nc">RegexpLike</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="RegexpLike-4703"><a href="#RegexpLike-4703"><span class="linenos">4703</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -62670,8 +64620,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-4547"><a href="#RegexpILike-4547"><span class="linenos">4547</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-4548"><a href="#RegexpILike-4548"><span class="linenos">4548</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4706"><a href="#RegexpILike-4706"><span class="linenos">4706</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-4707"><a href="#RegexpILike-4707"><span class="linenos">4707</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -62792,8 +64742,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-4553"><a href="#RegexpSplit-4553"><span class="linenos">4553</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-4554"><a href="#RegexpSplit-4554"><span class="linenos">4554</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4712"><a href="#RegexpSplit-4712"><span class="linenos">4712</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-4713"><a href="#RegexpSplit-4713"><span class="linenos">4713</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -62914,8 +64864,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-4557"><a href="#Repeat-4557"><span class="linenos">4557</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-4558"><a href="#Repeat-4558"><span class="linenos">4558</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4716"><a href="#Repeat-4716"><span class="linenos">4716</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-4717"><a href="#Repeat-4717"><span class="linenos">4717</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -63036,8 +64986,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-4561"><a href="#Round-4561"><span class="linenos">4561</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-4562"><a href="#Round-4562"><span class="linenos">4562</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4720"><a href="#Round-4720"><span class="linenos">4720</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-4721"><a href="#Round-4721"><span class="linenos">4721</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -63158,8 +65108,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-4565"><a href="#RowNumber-4565"><span class="linenos">4565</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-4566"><a href="#RowNumber-4566"><span class="linenos">4566</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-4724"><a href="#RowNumber-4724"><span class="linenos">4724</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-4725"><a href="#RowNumber-4725"><span class="linenos">4725</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>
@@ -63280,8 +65230,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-4569"><a href="#SafeDivide-4569"><span class="linenos">4569</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-4570"><a href="#SafeDivide-4570"><span class="linenos">4570</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4728"><a href="#SafeDivide-4728"><span class="linenos">4728</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-4729"><a href="#SafeDivide-4729"><span class="linenos">4729</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -63402,8 +65352,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-4573"><a href="#SetAgg-4573"><span class="linenos">4573</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-4574"><a href="#SetAgg-4574"><span class="linenos">4574</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SetAgg-4732"><a href="#SetAgg-4732"><span class="linenos">4732</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-4733"><a href="#SetAgg-4733"><span class="linenos">4733</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -63513,8 +65463,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-4577"><a href="#SHA-4577"><span class="linenos">4577</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-4578"><a href="#SHA-4578"><span class="linenos">4578</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-4736"><a href="#SHA-4736"><span class="linenos">4736</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-4737"><a href="#SHA-4737"><span class="linenos">4737</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>
@@ -63624,9 +65574,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-4581"><a href="#SHA2-4581"><span class="linenos">4581</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-4582"><a href="#SHA2-4582"><span class="linenos">4582</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-4583"><a href="#SHA2-4583"><span class="linenos">4583</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4740"><a href="#SHA2-4740"><span class="linenos">4740</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-4741"><a href="#SHA2-4741"><span class="linenos">4741</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-4742"><a href="#SHA2-4742"><span class="linenos">4742</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -63747,8 +65697,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-4586"><a href="#SortArray-4586"><span class="linenos">4586</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-4587"><a href="#SortArray-4587"><span class="linenos">4587</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4745"><a href="#SortArray-4745"><span class="linenos">4745</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-4746"><a href="#SortArray-4746"><span class="linenos">4746</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -63869,8 +65819,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-4590"><a href="#Split-4590"><span class="linenos">4590</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-4591"><a href="#Split-4591"><span class="linenos">4591</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4749"><a href="#Split-4749"><span class="linenos">4749</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-4750"><a href="#Split-4750"><span class="linenos">4750</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -63991,8 +65941,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-4596"><a href="#Substring-4596"><span class="linenos">4596</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-4597"><a href="#Substring-4597"><span class="linenos">4597</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4755"><a href="#Substring-4755"><span class="linenos">4755</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-4756"><a href="#Substring-4756"><span class="linenos">4756</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -64113,8 +66063,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StandardHash"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StandardHash-4600"><a href="#StandardHash-4600"><span class="linenos">4600</span></a><span class="k">class</span> <span class="nc">StandardHash</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StandardHash-4601"><a href="#StandardHash-4601"><span class="linenos">4601</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="StandardHash-4759"><a href="#StandardHash-4759"><span class="linenos">4759</span></a><span class="k">class</span> <span class="nc">StandardHash</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StandardHash-4760"><a href="#StandardHash-4760"><span class="linenos">4760</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -64235,9 +66185,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StartsWith"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StartsWith-4604"><a href="#StartsWith-4604"><span class="linenos">4604</span></a><span class="k">class</span> <span class="nc">StartsWith</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StartsWith-4605"><a href="#StartsWith-4605"><span class="linenos">4605</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;STARTS_WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">]</span>
-</span><span id="StartsWith-4606"><a href="#StartsWith-4606"><span class="linenos">4606</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="StartsWith-4763"><a href="#StartsWith-4763"><span class="linenos">4763</span></a><span class="k">class</span> <span class="nc">StartsWith</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StartsWith-4764"><a href="#StartsWith-4764"><span class="linenos">4764</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;STARTS_WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;STARTSWITH&quot;</span><span class="p">]</span>
+</span><span id="StartsWith-4765"><a href="#StartsWith-4765"><span class="linenos">4765</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -64358,13 +66308,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-4609"><a href="#StrPosition-4609"><span class="linenos">4609</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-4610"><a href="#StrPosition-4610"><span class="linenos">4610</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StrPosition-4611"><a href="#StrPosition-4611"><span class="linenos">4611</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-4612"><a href="#StrPosition-4612"><span class="linenos">4612</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-4613"><a href="#StrPosition-4613"><span class="linenos">4613</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-4614"><a href="#StrPosition-4614"><span class="linenos">4614</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-4615"><a href="#StrPosition-4615"><span class="linenos">4615</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StrPosition-4768"><a href="#StrPosition-4768"><span class="linenos">4768</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-4769"><a href="#StrPosition-4769"><span class="linenos">4769</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StrPosition-4770"><a href="#StrPosition-4770"><span class="linenos">4770</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-4771"><a href="#StrPosition-4771"><span class="linenos">4771</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-4772"><a href="#StrPosition-4772"><span class="linenos">4772</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-4773"><a href="#StrPosition-4773"><span class="linenos">4773</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-4774"><a href="#StrPosition-4774"><span class="linenos">4774</span></a> <span class="p">}</span>
</span></pre></div>
@@ -64485,8 +66435,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-4618"><a href="#StrToDate-4618"><span class="linenos">4618</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-4619"><a href="#StrToDate-4619"><span class="linenos">4619</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4777"><a href="#StrToDate-4777"><span class="linenos">4777</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-4778"><a href="#StrToDate-4778"><span class="linenos">4778</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -64607,8 +66557,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-4622"><a href="#StrToTime-4622"><span class="linenos">4622</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-4623"><a href="#StrToTime-4623"><span class="linenos">4623</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 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="StrToTime-4781"><a href="#StrToTime-4781"><span class="linenos">4781</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-4782"><a href="#StrToTime-4782"><span class="linenos">4782</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -64729,8 +66679,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-4628"><a href="#StrToUnix-4628"><span class="linenos">4628</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-4629"><a href="#StrToUnix-4629"><span class="linenos">4629</span></a> <span class="n">arg_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-4787"><a href="#StrToUnix-4787"><span class="linenos">4787</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-4788"><a href="#StrToUnix-4788"><span class="linenos">4788</span></a> <span class="n">arg_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>
@@ -64840,6 +66790,134 @@ name is set to the expression's class name transformed to snake case.</li>
</dl>
</div>
</section>
+ <section id="StrToMap">
+ <input id="StrToMap-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">StrToMap</span><wbr>(<span class="base"><a href="#Func">Func</a></span>):
+
+ <label class="view-source-button" for="StrToMap-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#StrToMap"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StrToMap-4793"><a href="#StrToMap-4793"><span class="linenos">4793</span></a><span class="k">class</span> <span class="nc">StrToMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StrToMap-4794"><a href="#StrToMap-4794"><span class="linenos">4794</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StrToMap-4795"><a href="#StrToMap-4795"><span class="linenos">4795</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="StrToMap-4796"><a href="#StrToMap-4796"><span class="linenos">4796</span></a> <span class="s2">&quot;pair_delim&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="StrToMap-4797"><a href="#StrToMap-4797"><span class="linenos">4797</span></a> <span class="s2">&quot;key_value_delim&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="StrToMap-4798"><a href="#StrToMap-4798"><span class="linenos">4798</span></a> <span class="s2">&quot;duplicate_resolution_callback&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="StrToMap-4799"><a href="#StrToMap-4799"><span class="linenos">4799</span></a> <span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div id="StrToMap.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<input id="StrToMap.arg_types-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="StrToMap.arg_types-view-value"></label><span class="default_value">{&#39;this&#39;: True, &#39;pair_delim&#39;: False, &#39;key_value_delim&#39;: False, &#39;duplicate_resolution_callback&#39;: False}</span>
+
+
+ </div>
+ <a class="headerlink" href="#StrToMap.arg_types"></a>
+
+
+
+ </div>
+ <div id="StrToMap.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;strtomap&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#StrToMap.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="StrToMap.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="StrToMap.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="StrToMap.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="StrToMap.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="StrToMap.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="StrToMap.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="StrToMap.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="StrToMap.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="StrToMap.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="StrToMap.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="StrToMap.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="StrToMap.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="StrToMap.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="StrToMap.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="StrToMap.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="StrToMap.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="StrToMap.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="StrToMap.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="StrToMap.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="StrToMap.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="StrToMap.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="StrToMap.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="StrToMap.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="StrToMap.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="StrToMap.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="StrToMap.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="StrToMap.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="StrToMap.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="StrToMap.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="StrToMap.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="StrToMap.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="StrToMap.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="StrToMap.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="StrToMap.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="StrToMap.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="StrToMap.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="StrToMap.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="StrToMap.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="StrToMap.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="StrToMap.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="StrToMap.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="StrToMap.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="StrToMap.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="StrToMap.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="StrToMap.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="StrToMap.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="StrToMap.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="StrToMap.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ <div><dt><a href="#Func">Func</a></dt>
+ <dd id="StrToMap.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
+ <dd id="StrToMap.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="StrToMap.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
+ <dd id="StrToMap.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
+ <dd id="StrToMap.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="StrToMap.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="StrToMap.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="StrToMap.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StrToMap.as_" class="function"><a href="#Condition.as_">as_</a></dd>
+ <dd id="StrToMap.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StrToMap.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StrToMap.is_" class="function"><a href="#Condition.is_">is_</a></dd>
+ <dd id="StrToMap.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StrToMap.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StrToMap.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StrToMap.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StrToMap.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="NumberToStr">
<input id="NumberToStr-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -64851,8 +66929,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-4632"><a href="#NumberToStr-4632"><span class="linenos">4632</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-4633"><a href="#NumberToStr-4633"><span class="linenos">4633</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4802"><a href="#NumberToStr-4802"><span class="linenos">4802</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-4803"><a href="#NumberToStr-4803"><span class="linenos">4803</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;culture&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -64861,7 +66939,7 @@ name is set to the expression's class name transformed to snake case.</li>
<div id="NumberToStr.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;format&#39;: True}</span>
+<span class="default_value">{&#39;this&#39;: True, &#39;format&#39;: True, &#39;culture&#39;: False}</span>
</div>
@@ -64973,8 +67051,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#FromBase"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="FromBase-4636"><a href="#FromBase-4636"><span class="linenos">4636</span></a><span class="k">class</span> <span class="nc">FromBase</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="FromBase-4637"><a href="#FromBase-4637"><span class="linenos">4637</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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="FromBase-4806"><a href="#FromBase-4806"><span class="linenos">4806</span></a><span class="k">class</span> <span class="nc">FromBase</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="FromBase-4807"><a href="#FromBase-4807"><span class="linenos">4807</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -65095,9 +67173,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-4640"><a href="#Struct-4640"><span class="linenos">4640</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-4641"><a href="#Struct-4641"><span class="linenos">4641</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-4642"><a href="#Struct-4642"><span class="linenos">4642</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-4810"><a href="#Struct-4810"><span class="linenos">4810</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-4811"><a href="#Struct-4811"><span class="linenos">4811</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-4812"><a href="#Struct-4812"><span class="linenos">4812</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -65229,8 +67307,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-4645"><a href="#StructExtract-4645"><span class="linenos">4645</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-4646"><a href="#StructExtract-4646"><span class="linenos">4646</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4815"><a href="#StructExtract-4815"><span class="linenos">4815</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-4816"><a href="#StructExtract-4816"><span class="linenos">4816</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -65340,6 +67418,129 @@ name is set to the expression's class name transformed to snake case.</li>
</dl>
</div>
</section>
+ <section id="Stuff">
+ <input id="Stuff-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">Stuff</span><wbr>(<span class="base"><a href="#Func">Func</a></span>):
+
+ <label class="view-source-button" for="Stuff-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Stuff"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Stuff-4821"><a href="#Stuff-4821"><span class="linenos">4821</span></a><span class="k">class</span> <span class="nc">Stuff</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Stuff-4822"><a href="#Stuff-4822"><span class="linenos">4822</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;STUFF&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">]</span>
+</span><span id="Stuff-4823"><a href="#Stuff-4823"><span class="linenos">4823</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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">True</span><span class="p">,</span> <span class="s2">&quot;length&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>
+
+
+
+
+ <div id="Stuff.arg_types" class="classattr">
+ <div class="attr variable">
+ <span class="name">arg_types</span> =
+<span class="default_value">{&#39;this&#39;: True, &#39;start&#39;: True, &#39;length&#39;: True, &#39;expression&#39;: True}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Stuff.arg_types"></a>
+
+
+
+ </div>
+ <div id="Stuff.key" class="classattr">
+ <div class="attr variable">
+ <span class="name">key</span> =
+<span class="default_value">&#39;stuff&#39;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Stuff.key"></a>
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="Stuff.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="Stuff.args" class="variable"><a href="#Expression.args">args</a></dd>
+ <dd id="Stuff.parent" class="variable"><a href="#Expression.parent">parent</a></dd>
+ <dd id="Stuff.arg_key" class="variable"><a href="#Expression.arg_key">arg_key</a></dd>
+ <dd id="Stuff.comments" class="variable"><a href="#Expression.comments">comments</a></dd>
+ <dd id="Stuff.hashable_args" class="variable"><a href="#Expression.hashable_args">hashable_args</a></dd>
+ <dd id="Stuff.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="Stuff.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="Stuff.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="Stuff.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="Stuff.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="Stuff.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="Stuff.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="Stuff.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="Stuff.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="Stuff.alias_column_names" class="variable"><a href="#Expression.alias_column_names">alias_column_names</a></dd>
+ <dd id="Stuff.name" class="variable"><a href="#Expression.name">name</a></dd>
+ <dd id="Stuff.alias_or_name" class="variable"><a href="#Expression.alias_or_name">alias_or_name</a></dd>
+ <dd id="Stuff.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="Stuff.type" class="variable"><a href="#Expression.type">type</a></dd>
+ <dd id="Stuff.meta" class="variable"><a href="#Expression.meta">meta</a></dd>
+ <dd id="Stuff.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="Stuff.add_comments" class="function"><a href="#Expression.add_comments">add_comments</a></dd>
+ <dd id="Stuff.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="Stuff.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="Stuff.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="Stuff.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="Stuff.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="Stuff.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="Stuff.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="Stuff.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="Stuff.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="Stuff.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="Stuff.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="Stuff.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="Stuff.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="Stuff.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="Stuff.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="Stuff.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="Stuff.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="Stuff.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="Stuff.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="Stuff.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="Stuff.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="Stuff.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="Stuff.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="Stuff.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="Stuff.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ <div><dt><a href="#Func">Func</a></dt>
+ <dd id="Stuff.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
+ <dd id="Stuff.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="Stuff.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
+ <dd id="Stuff.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
+ <dd id="Stuff.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="Stuff.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Stuff.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Stuff.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Stuff.as_" class="function"><a href="#Condition.as_">as_</a></dd>
+ <dd id="Stuff.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Stuff.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Stuff.is_" class="function"><a href="#Condition.is_">is_</a></dd>
+ <dd id="Stuff.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Stuff.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Stuff.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Stuff.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Stuff.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="Sum">
<input id="Sum-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
@@ -65351,8 +67552,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-4649"><a href="#Sum-4649"><span class="linenos">4649</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-4650"><a href="#Sum-4650"><span class="linenos">4650</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sum-4826"><a href="#Sum-4826"><span class="linenos">4826</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-4827"><a href="#Sum-4827"><span class="linenos">4827</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -65462,8 +67663,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-4653"><a href="#Sqrt-4653"><span class="linenos">4653</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-4654"><a href="#Sqrt-4654"><span class="linenos">4654</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sqrt-4830"><a href="#Sqrt-4830"><span class="linenos">4830</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-4831"><a href="#Sqrt-4831"><span class="linenos">4831</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -65573,8 +67774,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-4657"><a href="#Stddev-4657"><span class="linenos">4657</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-4658"><a href="#Stddev-4658"><span class="linenos">4658</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Stddev-4834"><a href="#Stddev-4834"><span class="linenos">4834</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-4835"><a href="#Stddev-4835"><span class="linenos">4835</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -65684,8 +67885,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-4661"><a href="#StddevPop-4661"><span class="linenos">4661</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-4662"><a href="#StddevPop-4662"><span class="linenos">4662</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StddevPop-4838"><a href="#StddevPop-4838"><span class="linenos">4838</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-4839"><a href="#StddevPop-4839"><span class="linenos">4839</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -65795,8 +67996,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-4665"><a href="#StddevSamp-4665"><span class="linenos">4665</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-4666"><a href="#StddevSamp-4666"><span class="linenos">4666</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StddevSamp-4842"><a href="#StddevSamp-4842"><span class="linenos">4842</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-4843"><a href="#StddevSamp-4843"><span class="linenos">4843</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -65906,8 +68107,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-4669"><a href="#TimeToStr-4669"><span class="linenos">4669</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-4670"><a href="#TimeToStr-4670"><span class="linenos">4670</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4846"><a href="#TimeToStr-4846"><span class="linenos">4846</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-4847"><a href="#TimeToStr-4847"><span class="linenos">4847</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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 class="s2">&quot;culture&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -65916,7 +68117,7 @@ name is set to the expression's class name transformed to snake case.</li>
<div id="TimeToStr.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;format&#39;: True}</span>
+<span class="default_value">{&#39;this&#39;: True, &#39;format&#39;: True, &#39;culture&#39;: False}</span>
</div>
@@ -66028,8 +68229,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-4673"><a href="#TimeToTimeStr-4673"><span class="linenos">4673</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-4674"><a href="#TimeToTimeStr-4674"><span class="linenos">4674</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToTimeStr-4850"><a href="#TimeToTimeStr-4850"><span class="linenos">4850</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-4851"><a href="#TimeToTimeStr-4851"><span class="linenos">4851</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -66139,8 +68340,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-4677"><a href="#TimeToUnix-4677"><span class="linenos">4677</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-4678"><a href="#TimeToUnix-4678"><span class="linenos">4678</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToUnix-4854"><a href="#TimeToUnix-4854"><span class="linenos">4854</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-4855"><a href="#TimeToUnix-4855"><span class="linenos">4855</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -66250,8 +68451,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-4681"><a href="#TimeStrToDate-4681"><span class="linenos">4681</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-4682"><a href="#TimeStrToDate-4682"><span class="linenos">4682</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToDate-4858"><a href="#TimeStrToDate-4858"><span class="linenos">4858</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-4859"><a href="#TimeStrToDate-4859"><span class="linenos">4859</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -66361,8 +68562,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-4685"><a href="#TimeStrToTime-4685"><span class="linenos">4685</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-4686"><a href="#TimeStrToTime-4686"><span class="linenos">4686</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToTime-4862"><a href="#TimeStrToTime-4862"><span class="linenos">4862</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-4863"><a href="#TimeStrToTime-4863"><span class="linenos">4863</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -66472,8 +68673,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-4689"><a href="#TimeStrToUnix-4689"><span class="linenos">4689</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-4690"><a href="#TimeStrToUnix-4690"><span class="linenos">4690</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToUnix-4866"><a href="#TimeStrToUnix-4866"><span class="linenos">4866</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-4867"><a href="#TimeStrToUnix-4867"><span class="linenos">4867</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -66583,13 +68784,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-4693"><a href="#Trim-4693"><span class="linenos">4693</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-4694"><a href="#Trim-4694"><span class="linenos">4694</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Trim-4695"><a href="#Trim-4695"><span class="linenos">4695</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-4696"><a href="#Trim-4696"><span class="linenos">4696</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-4697"><a href="#Trim-4697"><span class="linenos">4697</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-4698"><a href="#Trim-4698"><span class="linenos">4698</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-4699"><a href="#Trim-4699"><span class="linenos">4699</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Trim-4870"><a href="#Trim-4870"><span class="linenos">4870</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-4871"><a href="#Trim-4871"><span class="linenos">4871</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Trim-4872"><a href="#Trim-4872"><span class="linenos">4872</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-4873"><a href="#Trim-4873"><span class="linenos">4873</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-4874"><a href="#Trim-4874"><span class="linenos">4874</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-4875"><a href="#Trim-4875"><span class="linenos">4875</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-4876"><a href="#Trim-4876"><span class="linenos">4876</span></a> <span class="p">}</span>
</span></pre></div>
@@ -66710,8 +68911,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-4702"><a href="#TsOrDsAdd-4702"><span class="linenos">4702</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-4703"><a href="#TsOrDsAdd-4703"><span class="linenos">4703</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4879"><a href="#TsOrDsAdd-4879"><span class="linenos">4879</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-4880"><a href="#TsOrDsAdd-4880"><span class="linenos">4880</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -66835,8 +69036,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-4706"><a href="#TsOrDsToDateStr-4706"><span class="linenos">4706</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-4707"><a href="#TsOrDsToDateStr-4707"><span class="linenos">4707</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsToDateStr-4883"><a href="#TsOrDsToDateStr-4883"><span class="linenos">4883</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-4884"><a href="#TsOrDsToDateStr-4884"><span class="linenos">4884</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -66946,8 +69147,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-4710"><a href="#TsOrDsToDate-4710"><span class="linenos">4710</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-4711"><a href="#TsOrDsToDate-4711"><span class="linenos">4711</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4887"><a href="#TsOrDsToDate-4887"><span class="linenos">4887</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-4888"><a href="#TsOrDsToDate-4888"><span class="linenos">4888</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -67068,8 +69269,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-4714"><a href="#TsOrDiToDi-4714"><span class="linenos">4714</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-4715"><a href="#TsOrDiToDi-4715"><span class="linenos">4715</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDiToDi-4891"><a href="#TsOrDiToDi-4891"><span class="linenos">4891</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-4892"><a href="#TsOrDiToDi-4892"><span class="linenos">4892</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -67179,8 +69380,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-4718"><a href="#Unhex-4718"><span class="linenos">4718</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-4719"><a href="#Unhex-4719"><span class="linenos">4719</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unhex-4895"><a href="#Unhex-4895"><span class="linenos">4895</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-4896"><a href="#Unhex-4896"><span class="linenos">4896</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -67290,8 +69491,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-4722"><a href="#UnixToStr-4722"><span class="linenos">4722</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-4723"><a href="#UnixToStr-4723"><span class="linenos">4723</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4899"><a href="#UnixToStr-4899"><span class="linenos">4899</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-4900"><a href="#UnixToStr-4900"><span class="linenos">4900</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -67412,12 +69613,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-4728"><a href="#UnixToTime-4728"><span class="linenos">4728</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-4729"><a href="#UnixToTime-4729"><span class="linenos">4729</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4730"><a href="#UnixToTime-4730"><span class="linenos">4730</span></a>
-</span><span id="UnixToTime-4731"><a href="#UnixToTime-4731"><span class="linenos">4731</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-4732"><a href="#UnixToTime-4732"><span class="linenos">4732</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-4733"><a href="#UnixToTime-4733"><span class="linenos">4733</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-4905"><a href="#UnixToTime-4905"><span class="linenos">4905</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-4906"><a href="#UnixToTime-4906"><span class="linenos">4906</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4907"><a href="#UnixToTime-4907"><span class="linenos">4907</span></a>
+</span><span id="UnixToTime-4908"><a href="#UnixToTime-4908"><span class="linenos">4908</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-4909"><a href="#UnixToTime-4909"><span class="linenos">4909</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-4910"><a href="#UnixToTime-4910"><span class="linenos">4910</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>
@@ -67574,8 +69775,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-4736"><a href="#UnixToTimeStr-4736"><span class="linenos">4736</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-4737"><a href="#UnixToTimeStr-4737"><span class="linenos">4737</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToTimeStr-4913"><a href="#UnixToTimeStr-4913"><span class="linenos">4913</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-4914"><a href="#UnixToTimeStr-4914"><span class="linenos">4914</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -67685,8 +69886,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-4740"><a href="#Upper-4740"><span class="linenos">4740</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-4741"><a href="#Upper-4741"><span class="linenos">4741</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-4917"><a href="#Upper-4917"><span class="linenos">4917</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-4918"><a href="#Upper-4918"><span class="linenos">4918</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>
@@ -67796,8 +69997,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-4744"><a href="#Variance-4744"><span class="linenos">4744</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-4745"><a href="#Variance-4745"><span class="linenos">4745</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-4921"><a href="#Variance-4921"><span class="linenos">4921</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-4922"><a href="#Variance-4922"><span class="linenos">4922</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>
@@ -67907,8 +70108,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-4748"><a href="#VariancePop-4748"><span class="linenos">4748</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-4749"><a href="#VariancePop-4749"><span class="linenos">4749</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-4925"><a href="#VariancePop-4925"><span class="linenos">4925</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-4926"><a href="#VariancePop-4926"><span class="linenos">4926</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>
@@ -68018,8 +70219,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-4752"><a href="#Week-4752"><span class="linenos">4752</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-4753"><a href="#Week-4753"><span class="linenos">4753</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4929"><a href="#Week-4929"><span class="linenos">4929</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-4930"><a href="#Week-4930"><span class="linenos">4930</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -68140,8 +70341,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-4756"><a href="#XMLTable-4756"><span class="linenos">4756</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-4757"><a href="#XMLTable-4757"><span class="linenos">4757</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4933"><a href="#XMLTable-4933"><span class="linenos">4933</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-4934"><a href="#XMLTable-4934"><span class="linenos">4934</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -68262,8 +70463,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-4760"><a href="#Year-4760"><span class="linenos">4760</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-4761"><a href="#Year-4761"><span class="linenos">4761</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Year-4937"><a href="#Year-4937"><span class="linenos">4937</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-4938"><a href="#Year-4938"><span class="linenos">4938</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -68373,8 +70574,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-4764"><a href="#Use-4764"><span class="linenos">4764</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-4765"><a href="#Use-4765"><span class="linenos">4765</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4941"><a href="#Use-4941"><span class="linenos">4941</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-4942"><a href="#Use-4942"><span class="linenos">4942</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -68472,8 +70673,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-4768"><a href="#Merge-4768"><span class="linenos">4768</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-4769"><a href="#Merge-4769"><span class="linenos">4769</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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-4945"><a href="#Merge-4945"><span class="linenos">4945</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-4946"><a href="#Merge-4946"><span class="linenos">4946</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -68571,8 +70772,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-4772"><a href="#When-4772"><span class="linenos">4772</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-4773"><a href="#When-4773"><span class="linenos">4773</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-4949"><a href="#When-4949"><span class="linenos">4949</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-4950"><a href="#When-4950"><span class="linenos">4950</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>
@@ -68693,8 +70894,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#NextValueFor"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NextValueFor-4778"><a href="#NextValueFor-4778"><span class="linenos">4778</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-4779"><a href="#NextValueFor-4779"><span class="linenos">4779</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NextValueFor-4955"><a href="#NextValueFor-4955"><span class="linenos">4955</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-4956"><a href="#NextValueFor-4956"><span class="linenos">4956</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><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>
@@ -68808,7 +71009,7 @@ name is set to the expression's class name transformed to snake case.</li>
<div class="attr variable">
<span class="name">ALL_FUNCTIONS</span> =
<input id="ALL_FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ALL_FUNCTIONS-view-value"></label><span class="default_value">[&lt;class &#39;<a href="#Abs">sqlglot.expressions.Abs</a>&#39;&gt;, &lt;class &#39;<a href="#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;, &lt;class &#39;<a href="#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;, &lt;class &#39;<a href="#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;, &lt;class &#39;<a href="#Array">sqlglot.expressions.Array</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;, &lt;class &#39;<a href="#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;, &lt;class &#39;<a href="#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;, &lt;class &#39;<a href="#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;, &lt;class &#39;<a href="#Avg">sqlglot.expressions.Avg</a>&#39;&gt;, &lt;class &#39;<a href="#Case">sqlglot.expressions.Case</a>&#39;&gt;, &lt;class &#39;<a href="#Cast">sqlglot.expressions.Cast</a>&#39;&gt;, &lt;class &#39;<a href="#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;, &lt;class &#39;<a href="#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;, &lt;class &#39;<a href="#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;, &lt;class &#39;<a href="#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;, &lt;class &#39;<a href="#Count">sqlglot.expressions.Count</a>&#39;&gt;, &lt;class &#39;<a href="#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;, &lt;class &#39;<a href="#Date">sqlglot.expressions.Date</a>&#39;&gt;, &lt;class &#39;<a href="#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;, &lt;class &#39;<a href="#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;, &lt;class &#39;<a href="#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;, &lt;class &#39;<a href="#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;, &lt;class &#39;<a href="#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;, &lt;class &#39;<a href="#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#Day">sqlglot.expressions.Day</a>&#39;&gt;, &lt;class &#39;<a href="#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;, &lt;class &#39;<a href="#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;, &lt;class &#39;<a href="#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;, &lt;class &#39;<a href="#Decode">sqlglot.expressions.Decode</a>&#39;&gt;, &lt;class &#39;<a href="#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;, &lt;class &#39;<a href="#Encode">sqlglot.expressions.Encode</a>&#39;&gt;, &lt;class &#39;<a href="#Exp">sqlglot.expressions.Exp</a>&#39;&gt;, &lt;class &#39;<a href="#Explode">sqlglot.expressions.Explode</a>&#39;&gt;, &lt;class &#39;<a href="#Extract">sqlglot.expressions.Extract</a>&#39;&gt;, &lt;class &#39;<a href="#Floor">sqlglot.expressions.Floor</a>&#39;&gt;, &lt;class &#39;<a href="#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;, &lt;class &#39;<a href="#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;, &lt;class &#39;<a href="#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;, &lt;class &#39;<a href="#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;, &lt;class &#39;<a href="#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;, &lt;class &#39;<a href="#Hex">sqlglot.expressions.Hex</a>&#39;&gt;, &lt;class &#39;<a href="#Hll">sqlglot.expressions.Hll</a>&#39;&gt;, &lt;class &#39;<a href="#If">sqlglot.expressions.If</a>&#39;&gt;, &lt;class &#39;<a href="#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;, &lt;class &#39;<a href="#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;, &lt;class &#39;<a href="#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;, &lt;class &#39;<a href="#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;, &lt;class &#39;<a href="#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;, &lt;class &#39;<a href="#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;, &lt;class &#39;<a href="#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;, &lt;class &#39;<a href="#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;, &lt;class &#39;<a href="#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;, &lt;class &#39;<a href="#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;, &lt;class &#39;<a href="#Least">sqlglot.expressions.Least</a>&#39;&gt;, &lt;class &#39;<a href="#Left">sqlglot.expressions.Left</a>&#39;&gt;, &lt;class &#39;<a href="#Length">sqlglot.expressions.Length</a>&#39;&gt;, &lt;class &#39;<a href="#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;, &lt;class &#39;<a href="#Ln">sqlglot.expressions.Ln</a>&#39;&gt;, &lt;class &#39;<a href="#Log">sqlglot.expressions.Log</a>&#39;&gt;, &lt;class &#39;<a href="#Log10">sqlglot.expressions.Log10</a>&#39;&gt;, &lt;class &#39;<a href="#Log2">sqlglot.expressions.Log2</a>&#39;&gt;, &lt;class &#39;<a href="#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;, &lt;class &#39;<a href="#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;, &lt;class &#39;<a href="#Lower">sqlglot.expressions.Lower</a>&#39;&gt;, &lt;class &#39;<a href="#MD5">sqlglot.expressions.MD5</a>&#39;&gt;, &lt;class &#39;<a href="#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;, &lt;class &#39;<a href="#Map">sqlglot.expressions.Map</a>&#39;&gt;, &lt;class &#39;<a href="#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;, &lt;class &#39;<a href="#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;, &lt;class &#39;<a href="#Max">sqlglot.expressions.Max</a>&#39;&gt;, &lt;class &#39;<a href="#Min">sqlglot.expressions.Min</a>&#39;&gt;, &lt;class &#39;<a href="#Month">sqlglot.expressions.Month</a>&#39;&gt;, &lt;class &#39;<a href="#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;, &lt;class &#39;<a href="#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;, &lt;class &#39;<a href="#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;, &lt;class &#39;<a href="#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;, &lt;class &#39;<a href="#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;, &lt;class &#39;<a href="#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;, &lt;class &#39;<a href="#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;, &lt;class &#39;<a href="#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;, &lt;class &#39;<a href="#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;, &lt;class &#39;<a href="#Pow">sqlglot.expressions.Pow</a>&#39;&gt;, &lt;class &#39;<a href="#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;, &lt;class &#39;<a href="#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;, &lt;class &#39;<a href="#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;, &lt;class &#39;<a href="#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;, &lt;class &#39;<a href="#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;, &lt;class &#39;<a href="#Right">sqlglot.expressions.Right</a>&#39;&gt;, &lt;class &#39;<a href="#Round">sqlglot.expressions.Round</a>&#39;&gt;, &lt;class &#39;<a href="#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;, &lt;class &#39;<a href="#SHA">sqlglot.expressions.SHA</a>&#39;&gt;, &lt;class &#39;<a href="#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;, &lt;class &#39;<a href="#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;, &lt;class &#39;<a href="#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;, &lt;class &#39;<a href="#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;, &lt;class &#39;<a href="#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;, &lt;class &#39;<a href="#Split">sqlglot.expressions.Split</a>&#39;&gt;, &lt;class &#39;<a href="#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;, &lt;class &#39;<a href="#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;, &lt;class &#39;<a href="#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;, &lt;class &#39;<a href="#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;, &lt;class &#39;<a href="#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;, &lt;class &#39;<a href="#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;, &lt;class &#39;<a href="#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;, &lt;class &#39;<a href="#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;, &lt;class &#39;<a href="#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;, &lt;class &#39;<a href="#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;, &lt;class &#39;<a href="#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;, &lt;class &#39;<a href="#Struct">sqlglot.expressions.Struct</a>&#39;&gt;, &lt;class &#39;<a href="#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;, &lt;class &#39;<a href="#Substring">sqlglot.expressions.Substring</a>&#39;&gt;, &lt;class &#39;<a href="#Sum">sqlglot.expressions.Sum</a>&#39;&gt;, &lt;class &#39;<a href="#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;, &lt;class &#39;<a href="#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;, &lt;class &#39;<a href="#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;, &lt;class &#39;<a href="#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;, &lt;class &#39;<a href="#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;, &lt;class &#39;<a href="#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;, &lt;class &#39;<a href="#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;, &lt;class &#39;<a href="#Transform">sqlglot.expressions.Transform</a>&#39;&gt;, &lt;class &#39;<a href="#Trim">sqlglot.expressions.Trim</a>&#39;&gt;, &lt;class &#39;<a href="#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;, &lt;class &#39;<a href="#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;, &lt;class &#39;<a href="#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;, &lt;class &#39;<a href="#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="#Upper">sqlglot.expressions.Upper</a>&#39;&gt;, &lt;class &#39;<a href="#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;, &lt;class &#39;<a href="#Variance">sqlglot.expressions.Variance</a>&#39;&gt;, &lt;class &#39;<a href="#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;, &lt;class &#39;<a href="#Week">sqlglot.expressions.Week</a>&#39;&gt;, &lt;class &#39;<a href="#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;, &lt;class &#39;<a href="#When">sqlglot.expressions.When</a>&#39;&gt;, &lt;class &#39;<a href="#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;, &lt;class &#39;<a href="#Xor">sqlglot.expressions.Xor</a>&#39;&gt;, &lt;class &#39;<a href="#Year">sqlglot.expressions.Year</a>&#39;&gt;]</span>
+ <label class="view-value-button pdoc-button" for="ALL_FUNCTIONS-view-value"></label><span class="default_value">[&lt;class &#39;<a href="#Abs">sqlglot.expressions.Abs</a>&#39;&gt;, &lt;class &#39;<a href="#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;, &lt;class &#39;<a href="#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;, &lt;class &#39;<a href="#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;, &lt;class &#39;<a href="#Array">sqlglot.expressions.Array</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;, &lt;class &#39;<a href="#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;, &lt;class &#39;<a href="#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;, &lt;class &#39;<a href="#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;, &lt;class &#39;<a href="#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;, &lt;class &#39;<a href="#Avg">sqlglot.expressions.Avg</a>&#39;&gt;, &lt;class &#39;<a href="#Case">sqlglot.expressions.Case</a>&#39;&gt;, &lt;class &#39;<a href="#Cast">sqlglot.expressions.Cast</a>&#39;&gt;, &lt;class &#39;<a href="#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;, &lt;class &#39;<a href="#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;, &lt;class &#39;<a href="#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;, &lt;class &#39;<a href="#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;, &lt;class &#39;<a href="#Count">sqlglot.expressions.Count</a>&#39;&gt;, &lt;class &#39;<a href="#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;, &lt;class &#39;<a href="#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;, &lt;class &#39;<a href="#Date">sqlglot.expressions.Date</a>&#39;&gt;, &lt;class &#39;<a href="#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;, &lt;class &#39;<a href="#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;, &lt;class &#39;<a href="#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;, &lt;class &#39;<a href="#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;, &lt;class &#39;<a href="#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;, &lt;class &#39;<a href="#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;, &lt;class &#39;<a href="#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#Day">sqlglot.expressions.Day</a>&#39;&gt;, &lt;class &#39;<a href="#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;, &lt;class &#39;<a href="#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;, &lt;class &#39;<a href="#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;, &lt;class &#39;<a href="#Decode">sqlglot.expressions.Decode</a>&#39;&gt;, &lt;class &#39;<a href="#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;, &lt;class &#39;<a href="#Encode">sqlglot.expressions.Encode</a>&#39;&gt;, &lt;class &#39;<a href="#Exp">sqlglot.expressions.Exp</a>&#39;&gt;, &lt;class &#39;<a href="#Explode">sqlglot.expressions.Explode</a>&#39;&gt;, &lt;class &#39;<a href="#Extract">sqlglot.expressions.Extract</a>&#39;&gt;, &lt;class &#39;<a href="#First">sqlglot.expressions.First</a>&#39;&gt;, &lt;class &#39;<a href="#Floor">sqlglot.expressions.Floor</a>&#39;&gt;, &lt;class &#39;<a href="#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;, &lt;class &#39;<a href="#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;, &lt;class &#39;<a href="#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;, &lt;class &#39;<a href="#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;, &lt;class &#39;<a href="#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;, &lt;class &#39;<a href="#Hex">sqlglot.expressions.Hex</a>&#39;&gt;, &lt;class &#39;<a href="#Hll">sqlglot.expressions.Hll</a>&#39;&gt;, &lt;class &#39;<a href="#If">sqlglot.expressions.If</a>&#39;&gt;, &lt;class &#39;<a href="#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;, &lt;class &#39;<a href="#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;, &lt;class &#39;<a href="#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;, &lt;class &#39;<a href="#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;, &lt;class &#39;<a href="#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;, &lt;class &#39;<a href="#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;, &lt;class &#39;<a href="#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;, &lt;class &#39;<a href="#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;, &lt;class &#39;<a href="#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;, &lt;class &#39;<a href="#Last">sqlglot.expressions.Last</a>&#39;&gt;, &lt;class &#39;<a href="#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;, &lt;class &#39;<a href="#Least">sqlglot.expressions.Least</a>&#39;&gt;, &lt;class &#39;<a href="#Left">sqlglot.expressions.Left</a>&#39;&gt;, &lt;class &#39;<a href="#Length">sqlglot.expressions.Length</a>&#39;&gt;, &lt;class &#39;<a href="#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;, &lt;class &#39;<a href="#Ln">sqlglot.expressions.Ln</a>&#39;&gt;, &lt;class &#39;<a href="#Log">sqlglot.expressions.Log</a>&#39;&gt;, &lt;class &#39;<a href="#Log10">sqlglot.expressions.Log10</a>&#39;&gt;, &lt;class &#39;<a href="#Log2">sqlglot.expressions.Log2</a>&#39;&gt;, &lt;class &#39;<a href="#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;, &lt;class &#39;<a href="#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;, &lt;class &#39;<a href="#Lower">sqlglot.expressions.Lower</a>&#39;&gt;, &lt;class &#39;<a href="#MD5">sqlglot.expressions.MD5</a>&#39;&gt;, &lt;class &#39;<a href="#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;, &lt;class &#39;<a href="#Map">sqlglot.expressions.Map</a>&#39;&gt;, &lt;class &#39;<a href="#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;, &lt;class &#39;<a href="#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;, &lt;class &#39;<a href="#Max">sqlglot.expressions.Max</a>&#39;&gt;, &lt;class &#39;<a href="#Min">sqlglot.expressions.Min</a>&#39;&gt;, &lt;class &#39;<a href="#Month">sqlglot.expressions.Month</a>&#39;&gt;, &lt;class &#39;<a href="#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;, &lt;class &#39;<a href="#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;, &lt;class &#39;<a href="#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;, &lt;class &#39;<a href="#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;, &lt;class &#39;<a href="#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;, &lt;class &#39;<a href="#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;, &lt;class &#39;<a href="#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;, &lt;class &#39;<a href="#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;, &lt;class &#39;<a href="#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;, &lt;class &#39;<a href="#Pow">sqlglot.expressions.Pow</a>&#39;&gt;, &lt;class &#39;<a href="#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;, &lt;class &#39;<a href="#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;, &lt;class &#39;<a href="#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;, &lt;class &#39;<a href="#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;, &lt;class &#39;<a href="#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;, &lt;class &#39;<a href="#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;, &lt;class &#39;<a href="#Right">sqlglot.expressions.Right</a>&#39;&gt;, &lt;class &#39;<a href="#Round">sqlglot.expressions.Round</a>&#39;&gt;, &lt;class &#39;<a href="#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;, &lt;class &#39;<a href="#SHA">sqlglot.expressions.SHA</a>&#39;&gt;, &lt;class &#39;<a href="#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;, &lt;class &#39;<a href="#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;, &lt;class &#39;<a href="#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;, &lt;class &#39;<a href="#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;, &lt;class &#39;<a href="#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;, &lt;class &#39;<a href="#Split">sqlglot.expressions.Split</a>&#39;&gt;, &lt;class &#39;<a href="#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;, &lt;class &#39;<a href="#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;, &lt;class &#39;<a href="#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;, &lt;class &#39;<a href="#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;, &lt;class &#39;<a href="#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;, &lt;class &#39;<a href="#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;, &lt;class &#39;<a href="#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;, &lt;class &#39;<a href="#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;, &lt;class &#39;<a href="#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;, &lt;class &#39;<a href="#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;, &lt;class &#39;<a href="#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;, &lt;class &#39;<a href="#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;, &lt;class &#39;<a href="#Struct">sqlglot.expressions.Struct</a>&#39;&gt;, &lt;class &#39;<a href="#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;, &lt;class &#39;<a href="#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;, &lt;class &#39;<a href="#Substring">sqlglot.expressions.Substring</a>&#39;&gt;, &lt;class &#39;<a href="#Sum">sqlglot.expressions.Sum</a>&#39;&gt;, &lt;class &#39;<a href="#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;, &lt;class &#39;<a href="#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;, &lt;class &#39;<a href="#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;, &lt;class &#39;<a href="#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;, &lt;class &#39;<a href="#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;, &lt;class &#39;<a href="#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;, &lt;class &#39;<a href="#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;, &lt;class &#39;<a href="#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;, &lt;class &#39;<a href="#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;, &lt;class &#39;<a href="#Transform">sqlglot.expressions.Transform</a>&#39;&gt;, &lt;class &#39;<a href="#Trim">sqlglot.expressions.Trim</a>&#39;&gt;, &lt;class &#39;<a href="#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;, &lt;class &#39;<a href="#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;, &lt;class &#39;<a href="#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;, &lt;class &#39;<a href="#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;, &lt;class &#39;<a href="#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="#Upper">sqlglot.expressions.Upper</a>&#39;&gt;, &lt;class &#39;<a href="#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;, &lt;class &#39;<a href="#Variance">sqlglot.expressions.Variance</a>&#39;&gt;, &lt;class &#39;<a href="#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;, &lt;class &#39;<a href="#Week">sqlglot.expressions.Week</a>&#39;&gt;, &lt;class &#39;<a href="#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;, &lt;class &#39;<a href="#When">sqlglot.expressions.When</a>&#39;&gt;, &lt;class &#39;<a href="#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;, &lt;class &#39;<a href="#Xor">sqlglot.expressions.Xor</a>&#39;&gt;, &lt;class &#39;<a href="#Year">sqlglot.expressions.Year</a>&#39;&gt;]</span>
</div>
@@ -68828,52 +71029,52 @@ 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-4816"><a href="#maybe_parse-4816"><span class="linenos">4816</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="maybe_parse-4817"><a href="#maybe_parse-4817"><span class="linenos">4817</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-4818"><a href="#maybe_parse-4818"><span class="linenos">4818</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="maybe_parse-4819"><a href="#maybe_parse-4819"><span class="linenos">4819</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-4820"><a href="#maybe_parse-4820"><span class="linenos">4820</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-4821"><a href="#maybe_parse-4821"><span class="linenos">4821</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-4822"><a href="#maybe_parse-4822"><span class="linenos">4822</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-4823"><a href="#maybe_parse-4823"><span class="linenos">4823</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="maybe_parse-4824"><a href="#maybe_parse-4824"><span class="linenos">4824</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-4825"><a href="#maybe_parse-4825"><span class="linenos">4825</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-4826"><a href="#maybe_parse-4826"><span class="linenos">4826</span></a>
-</span><span id="maybe_parse-4827"><a href="#maybe_parse-4827"><span class="linenos">4827</span></a><span class="sd"> Example:</span>
-</span><span id="maybe_parse-4828"><a href="#maybe_parse-4828"><span class="linenos">4828</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
-</span><span id="maybe_parse-4829"><a href="#maybe_parse-4829"><span class="linenos">4829</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
-</span><span id="maybe_parse-4830"><a href="#maybe_parse-4830"><span class="linenos">4830</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
-</span><span id="maybe_parse-4831"><a href="#maybe_parse-4831"><span class="linenos">4831</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
-</span><span id="maybe_parse-4832"><a href="#maybe_parse-4832"><span class="linenos">4832</span></a>
-</span><span id="maybe_parse-4833"><a href="#maybe_parse-4833"><span class="linenos">4833</span></a><span class="sd"> Args:</span>
-</span><span id="maybe_parse-4834"><a href="#maybe_parse-4834"><span class="linenos">4834</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
-</span><span id="maybe_parse-4835"><a href="#maybe_parse-4835"><span class="linenos">4835</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
-</span><span id="maybe_parse-4836"><a href="#maybe_parse-4836"><span class="linenos">4836</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-4837"><a href="#maybe_parse-4837"><span class="linenos">4837</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="maybe_parse-4838"><a href="#maybe_parse-4838"><span class="linenos">4838</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
-</span><span id="maybe_parse-4839"><a href="#maybe_parse-4839"><span class="linenos">4839</span></a><span class="sd"> (automatically includes a space)</span>
-</span><span id="maybe_parse-4840"><a href="#maybe_parse-4840"><span class="linenos">4840</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="maybe_parse-4841"><a href="#maybe_parse-4841"><span class="linenos">4841</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-4842"><a href="#maybe_parse-4842"><span class="linenos">4842</span></a><span class="sd"> that an input expression is a SQL string).</span>
-</span><span id="maybe_parse-4843"><a href="#maybe_parse-4843"><span class="linenos">4843</span></a>
-</span><span id="maybe_parse-4844"><a href="#maybe_parse-4844"><span class="linenos">4844</span></a><span class="sd"> Returns:</span>
-</span><span id="maybe_parse-4845"><a href="#maybe_parse-4845"><span class="linenos">4845</span></a><span class="sd"> Expression: the parsed or given expression.</span>
-</span><span id="maybe_parse-4846"><a href="#maybe_parse-4846"><span class="linenos">4846</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="maybe_parse-4847"><a href="#maybe_parse-4847"><span class="linenos">4847</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-4848"><a href="#maybe_parse-4848"><span class="linenos">4848</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="maybe_parse-4849"><a href="#maybe_parse-4849"><span class="linenos">4849</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-4850"><a href="#maybe_parse-4850"><span class="linenos">4850</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span>
-</span><span id="maybe_parse-4851"><a href="#maybe_parse-4851"><span class="linenos">4851</span></a>
-</span><span id="maybe_parse-4852"><a href="#maybe_parse-4852"><span class="linenos">4852</span></a> <span class="k">if</span> <span class="n">sql_or_expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="maybe_parse-4853"><a href="#maybe_parse-4853"><span class="linenos">4853</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SQL cannot be None&quot;</span><span class="p">)</span>
-</span><span id="maybe_parse-4854"><a href="#maybe_parse-4854"><span class="linenos">4854</span></a>
-</span><span id="maybe_parse-4855"><a href="#maybe_parse-4855"><span class="linenos">4855</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="maybe_parse-4856"><a href="#maybe_parse-4856"><span class="linenos">4856</span></a>
-</span><span id="maybe_parse-4857"><a href="#maybe_parse-4857"><span class="linenos">4857</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-4858"><a href="#maybe_parse-4858"><span class="linenos">4858</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
-</span><span id="maybe_parse-4859"><a href="#maybe_parse-4859"><span class="linenos">4859</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-4860"><a href="#maybe_parse-4860"><span class="linenos">4860</span></a>
-</span><span id="maybe_parse-4861"><a href="#maybe_parse-4861"><span class="linenos">4861</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-4993"><a href="#maybe_parse-4993"><span class="linenos">4993</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="maybe_parse-4994"><a href="#maybe_parse-4994"><span class="linenos">4994</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-4995"><a href="#maybe_parse-4995"><span class="linenos">4995</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="maybe_parse-4996"><a href="#maybe_parse-4996"><span class="linenos">4996</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-4997"><a href="#maybe_parse-4997"><span class="linenos">4997</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-4998"><a href="#maybe_parse-4998"><span class="linenos">4998</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-4999"><a href="#maybe_parse-4999"><span class="linenos">4999</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-5000"><a href="#maybe_parse-5000"><span class="linenos">5000</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="maybe_parse-5001"><a href="#maybe_parse-5001"><span class="linenos">5001</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-5002"><a href="#maybe_parse-5002"><span class="linenos">5002</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-5003"><a href="#maybe_parse-5003"><span class="linenos">5003</span></a>
+</span><span id="maybe_parse-5004"><a href="#maybe_parse-5004"><span class="linenos">5004</span></a><span class="sd"> Example:</span>
+</span><span id="maybe_parse-5005"><a href="#maybe_parse-5005"><span class="linenos">5005</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
+</span><span id="maybe_parse-5006"><a href="#maybe_parse-5006"><span class="linenos">5006</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
+</span><span id="maybe_parse-5007"><a href="#maybe_parse-5007"><span class="linenos">5007</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
+</span><span id="maybe_parse-5008"><a href="#maybe_parse-5008"><span class="linenos">5008</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
+</span><span id="maybe_parse-5009"><a href="#maybe_parse-5009"><span class="linenos">5009</span></a>
+</span><span id="maybe_parse-5010"><a href="#maybe_parse-5010"><span class="linenos">5010</span></a><span class="sd"> Args:</span>
+</span><span id="maybe_parse-5011"><a href="#maybe_parse-5011"><span class="linenos">5011</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
+</span><span id="maybe_parse-5012"><a href="#maybe_parse-5012"><span class="linenos">5012</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
+</span><span id="maybe_parse-5013"><a href="#maybe_parse-5013"><span class="linenos">5013</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-5014"><a href="#maybe_parse-5014"><span class="linenos">5014</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="maybe_parse-5015"><a href="#maybe_parse-5015"><span class="linenos">5015</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
+</span><span id="maybe_parse-5016"><a href="#maybe_parse-5016"><span class="linenos">5016</span></a><span class="sd"> (automatically includes a space)</span>
+</span><span id="maybe_parse-5017"><a href="#maybe_parse-5017"><span class="linenos">5017</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="maybe_parse-5018"><a href="#maybe_parse-5018"><span class="linenos">5018</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-5019"><a href="#maybe_parse-5019"><span class="linenos">5019</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="maybe_parse-5020"><a href="#maybe_parse-5020"><span class="linenos">5020</span></a>
+</span><span id="maybe_parse-5021"><a href="#maybe_parse-5021"><span class="linenos">5021</span></a><span class="sd"> Returns:</span>
+</span><span id="maybe_parse-5022"><a href="#maybe_parse-5022"><span class="linenos">5022</span></a><span class="sd"> Expression: the parsed or given expression.</span>
+</span><span id="maybe_parse-5023"><a href="#maybe_parse-5023"><span class="linenos">5023</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="maybe_parse-5024"><a href="#maybe_parse-5024"><span class="linenos">5024</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-5025"><a href="#maybe_parse-5025"><span class="linenos">5025</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="maybe_parse-5026"><a href="#maybe_parse-5026"><span class="linenos">5026</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-5027"><a href="#maybe_parse-5027"><span class="linenos">5027</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span>
+</span><span id="maybe_parse-5028"><a href="#maybe_parse-5028"><span class="linenos">5028</span></a>
+</span><span id="maybe_parse-5029"><a href="#maybe_parse-5029"><span class="linenos">5029</span></a> <span class="k">if</span> <span class="n">sql_or_expression</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="maybe_parse-5030"><a href="#maybe_parse-5030"><span class="linenos">5030</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SQL cannot be None&quot;</span><span class="p">)</span>
+</span><span id="maybe_parse-5031"><a href="#maybe_parse-5031"><span class="linenos">5031</span></a>
+</span><span id="maybe_parse-5032"><a href="#maybe_parse-5032"><span class="linenos">5032</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="maybe_parse-5033"><a href="#maybe_parse-5033"><span class="linenos">5033</span></a>
+</span><span id="maybe_parse-5034"><a href="#maybe_parse-5034"><span class="linenos">5034</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-5035"><a href="#maybe_parse-5035"><span class="linenos">5035</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
+</span><span id="maybe_parse-5036"><a href="#maybe_parse-5036"><span class="linenos">5036</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-5037"><a href="#maybe_parse-5037"><span class="linenos">5037</span></a>
+</span><span id="maybe_parse-5038"><a href="#maybe_parse-5038"><span class="linenos">5038</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>
@@ -68925,8 +71126,8 @@ that an input expression is a SQL string).</li>
</div>
<a class="headerlink" href="#maybe_copy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="maybe_copy-4874"><a href="#maybe_copy-4874"><span class="linenos">4874</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="maybe_copy-4875"><a href="#maybe_copy-4875"><span class="linenos">4875</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="ow">and</span> <span class="n">instance</span> <span class="k">else</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="maybe_copy-5051"><a href="#maybe_copy-5051"><span class="linenos">5051</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="maybe_copy-5052"><a href="#maybe_copy-5052"><span class="linenos">5052</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="ow">and</span> <span class="n">instance</span> <span class="k">else</span> <span class="n">instance</span>
</span></pre></div>
@@ -68944,32 +71145,32 @@ 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-5055"><a href="#union-5055"><span class="linenos">5055</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span>
-</span><span id="union-5056"><a href="#union-5056"><span class="linenos">5056</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="union-5057"><a href="#union-5057"><span class="linenos">5057</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="union-5058"><a href="#union-5058"><span class="linenos">5058</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="union-5059"><a href="#union-5059"><span class="linenos">5059</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</span>
-</span><span id="union-5060"><a href="#union-5060"><span class="linenos">5060</span></a>
-</span><span id="union-5061"><a href="#union-5061"><span class="linenos">5061</span></a><span class="sd"> Example:</span>
-</span><span id="union-5062"><a href="#union-5062"><span class="linenos">5062</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-5063"><a href="#union-5063"><span class="linenos">5063</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
-</span><span id="union-5064"><a href="#union-5064"><span class="linenos">5064</span></a>
-</span><span id="union-5065"><a href="#union-5065"><span class="linenos">5065</span></a><span class="sd"> Args:</span>
-</span><span id="union-5066"><a href="#union-5066"><span class="linenos">5066</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
-</span><span id="union-5067"><a href="#union-5067"><span class="linenos">5067</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="union-5068"><a href="#union-5068"><span class="linenos">5068</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
-</span><span id="union-5069"><a href="#union-5069"><span class="linenos">5069</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="union-5070"><a href="#union-5070"><span class="linenos">5070</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
-</span><span id="union-5071"><a href="#union-5071"><span class="linenos">5071</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="union-5072"><a href="#union-5072"><span class="linenos">5072</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="union-5073"><a href="#union-5073"><span class="linenos">5073</span></a>
-</span><span id="union-5074"><a href="#union-5074"><span class="linenos">5074</span></a><span class="sd"> Returns:</span>
-</span><span id="union-5075"><a href="#union-5075"><span class="linenos">5075</span></a><span class="sd"> The new Union instance.</span>
-</span><span id="union-5076"><a href="#union-5076"><span class="linenos">5076</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="union-5077"><a href="#union-5077"><span class="linenos">5077</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-5078"><a href="#union-5078"><span class="linenos">5078</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-5079"><a href="#union-5079"><span class="linenos">5079</span></a>
-</span><span id="union-5080"><a href="#union-5080"><span class="linenos">5080</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-5232"><a href="#union-5232"><span class="linenos">5232</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span>
+</span><span id="union-5233"><a href="#union-5233"><span class="linenos">5233</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="union-5234"><a href="#union-5234"><span class="linenos">5234</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="union-5235"><a href="#union-5235"><span class="linenos">5235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="union-5236"><a href="#union-5236"><span class="linenos">5236</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</span>
+</span><span id="union-5237"><a href="#union-5237"><span class="linenos">5237</span></a>
+</span><span id="union-5238"><a href="#union-5238"><span class="linenos">5238</span></a><span class="sd"> Example:</span>
+</span><span id="union-5239"><a href="#union-5239"><span class="linenos">5239</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-5240"><a href="#union-5240"><span class="linenos">5240</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
+</span><span id="union-5241"><a href="#union-5241"><span class="linenos">5241</span></a>
+</span><span id="union-5242"><a href="#union-5242"><span class="linenos">5242</span></a><span class="sd"> Args:</span>
+</span><span id="union-5243"><a href="#union-5243"><span class="linenos">5243</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
+</span><span id="union-5244"><a href="#union-5244"><span class="linenos">5244</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="union-5245"><a href="#union-5245"><span class="linenos">5245</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
+</span><span id="union-5246"><a href="#union-5246"><span class="linenos">5246</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="union-5247"><a href="#union-5247"><span class="linenos">5247</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
+</span><span id="union-5248"><a href="#union-5248"><span class="linenos">5248</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="union-5249"><a href="#union-5249"><span class="linenos">5249</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="union-5250"><a href="#union-5250"><span class="linenos">5250</span></a>
+</span><span id="union-5251"><a href="#union-5251"><span class="linenos">5251</span></a><span class="sd"> Returns:</span>
+</span><span id="union-5252"><a href="#union-5252"><span class="linenos">5252</span></a><span class="sd"> The new Union instance.</span>
+</span><span id="union-5253"><a href="#union-5253"><span class="linenos">5253</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="union-5254"><a href="#union-5254"><span class="linenos">5254</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-5255"><a href="#union-5255"><span class="linenos">5255</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-5256"><a href="#union-5256"><span class="linenos">5256</span></a>
+</span><span id="union-5257"><a href="#union-5257"><span class="linenos">5257</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>
@@ -69017,32 +71218,32 @@ 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-5083"><a href="#intersect-5083"><span class="linenos">5083</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span>
-</span><span id="intersect-5084"><a href="#intersect-5084"><span class="linenos">5084</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="intersect-5085"><a href="#intersect-5085"><span class="linenos">5085</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Intersect</span><span class="p">:</span>
-</span><span id="intersect-5086"><a href="#intersect-5086"><span class="linenos">5086</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="intersect-5087"><a href="#intersect-5087"><span class="linenos">5087</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
-</span><span id="intersect-5088"><a href="#intersect-5088"><span class="linenos">5088</span></a>
-</span><span id="intersect-5089"><a href="#intersect-5089"><span class="linenos">5089</span></a><span class="sd"> Example:</span>
-</span><span id="intersect-5090"><a href="#intersect-5090"><span class="linenos">5090</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-5091"><a href="#intersect-5091"><span class="linenos">5091</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
-</span><span id="intersect-5092"><a href="#intersect-5092"><span class="linenos">5092</span></a>
-</span><span id="intersect-5093"><a href="#intersect-5093"><span class="linenos">5093</span></a><span class="sd"> Args:</span>
-</span><span id="intersect-5094"><a href="#intersect-5094"><span class="linenos">5094</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
-</span><span id="intersect-5095"><a href="#intersect-5095"><span class="linenos">5095</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="intersect-5096"><a href="#intersect-5096"><span class="linenos">5096</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
-</span><span id="intersect-5097"><a href="#intersect-5097"><span class="linenos">5097</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="intersect-5098"><a href="#intersect-5098"><span class="linenos">5098</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
-</span><span id="intersect-5099"><a href="#intersect-5099"><span class="linenos">5099</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="intersect-5100"><a href="#intersect-5100"><span class="linenos">5100</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="intersect-5101"><a href="#intersect-5101"><span class="linenos">5101</span></a>
-</span><span id="intersect-5102"><a href="#intersect-5102"><span class="linenos">5102</span></a><span class="sd"> Returns:</span>
-</span><span id="intersect-5103"><a href="#intersect-5103"><span class="linenos">5103</span></a><span class="sd"> The new Intersect instance.</span>
-</span><span id="intersect-5104"><a href="#intersect-5104"><span class="linenos">5104</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="intersect-5105"><a href="#intersect-5105"><span class="linenos">5105</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-5106"><a href="#intersect-5106"><span class="linenos">5106</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-5107"><a href="#intersect-5107"><span class="linenos">5107</span></a>
-</span><span id="intersect-5108"><a href="#intersect-5108"><span class="linenos">5108</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-5260"><a href="#intersect-5260"><span class="linenos">5260</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span>
+</span><span id="intersect-5261"><a href="#intersect-5261"><span class="linenos">5261</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="intersect-5262"><a href="#intersect-5262"><span class="linenos">5262</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Intersect</span><span class="p">:</span>
+</span><span id="intersect-5263"><a href="#intersect-5263"><span class="linenos">5263</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="intersect-5264"><a href="#intersect-5264"><span class="linenos">5264</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
+</span><span id="intersect-5265"><a href="#intersect-5265"><span class="linenos">5265</span></a>
+</span><span id="intersect-5266"><a href="#intersect-5266"><span class="linenos">5266</span></a><span class="sd"> Example:</span>
+</span><span id="intersect-5267"><a href="#intersect-5267"><span class="linenos">5267</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-5268"><a href="#intersect-5268"><span class="linenos">5268</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
+</span><span id="intersect-5269"><a href="#intersect-5269"><span class="linenos">5269</span></a>
+</span><span id="intersect-5270"><a href="#intersect-5270"><span class="linenos">5270</span></a><span class="sd"> Args:</span>
+</span><span id="intersect-5271"><a href="#intersect-5271"><span class="linenos">5271</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
+</span><span id="intersect-5272"><a href="#intersect-5272"><span class="linenos">5272</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="intersect-5273"><a href="#intersect-5273"><span class="linenos">5273</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
+</span><span id="intersect-5274"><a href="#intersect-5274"><span class="linenos">5274</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="intersect-5275"><a href="#intersect-5275"><span class="linenos">5275</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
+</span><span id="intersect-5276"><a href="#intersect-5276"><span class="linenos">5276</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="intersect-5277"><a href="#intersect-5277"><span class="linenos">5277</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="intersect-5278"><a href="#intersect-5278"><span class="linenos">5278</span></a>
+</span><span id="intersect-5279"><a href="#intersect-5279"><span class="linenos">5279</span></a><span class="sd"> Returns:</span>
+</span><span id="intersect-5280"><a href="#intersect-5280"><span class="linenos">5280</span></a><span class="sd"> The new Intersect instance.</span>
+</span><span id="intersect-5281"><a href="#intersect-5281"><span class="linenos">5281</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="intersect-5282"><a href="#intersect-5282"><span class="linenos">5282</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-5283"><a href="#intersect-5283"><span class="linenos">5283</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-5284"><a href="#intersect-5284"><span class="linenos">5284</span></a>
+</span><span id="intersect-5285"><a href="#intersect-5285"><span class="linenos">5285</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>
@@ -69090,32 +71291,32 @@ 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_-5111"><a href="#except_-5111"><span class="linenos">5111</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span>
-</span><span id="except_-5112"><a href="#except_-5112"><span class="linenos">5112</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="except_-5113"><a href="#except_-5113"><span class="linenos">5113</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Except</span><span class="p">:</span>
-</span><span id="except_-5114"><a href="#except_-5114"><span class="linenos">5114</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="except_-5115"><a href="#except_-5115"><span class="linenos">5115</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</span>
-</span><span id="except_-5116"><a href="#except_-5116"><span class="linenos">5116</span></a>
-</span><span id="except_-5117"><a href="#except_-5117"><span class="linenos">5117</span></a><span class="sd"> Example:</span>
-</span><span id="except_-5118"><a href="#except_-5118"><span class="linenos">5118</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_-5119"><a href="#except_-5119"><span class="linenos">5119</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="except_-5120"><a href="#except_-5120"><span class="linenos">5120</span></a>
-</span><span id="except_-5121"><a href="#except_-5121"><span class="linenos">5121</span></a><span class="sd"> Args:</span>
-</span><span id="except_-5122"><a href="#except_-5122"><span class="linenos">5122</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
-</span><span id="except_-5123"><a href="#except_-5123"><span class="linenos">5123</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="except_-5124"><a href="#except_-5124"><span class="linenos">5124</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
-</span><span id="except_-5125"><a href="#except_-5125"><span class="linenos">5125</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="except_-5126"><a href="#except_-5126"><span class="linenos">5126</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
-</span><span id="except_-5127"><a href="#except_-5127"><span class="linenos">5127</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="except_-5128"><a href="#except_-5128"><span class="linenos">5128</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="except_-5129"><a href="#except_-5129"><span class="linenos">5129</span></a>
-</span><span id="except_-5130"><a href="#except_-5130"><span class="linenos">5130</span></a><span class="sd"> Returns:</span>
-</span><span id="except_-5131"><a href="#except_-5131"><span class="linenos">5131</span></a><span class="sd"> The new Except instance.</span>
-</span><span id="except_-5132"><a href="#except_-5132"><span class="linenos">5132</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="except_-5133"><a href="#except_-5133"><span class="linenos">5133</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_-5134"><a href="#except_-5134"><span class="linenos">5134</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_-5135"><a href="#except_-5135"><span class="linenos">5135</span></a>
-</span><span id="except_-5136"><a href="#except_-5136"><span class="linenos">5136</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_-5288"><a href="#except_-5288"><span class="linenos">5288</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span>
+</span><span id="except_-5289"><a href="#except_-5289"><span class="linenos">5289</span></a> <span class="n">left</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">right</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">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><span id="except_-5290"><a href="#except_-5290"><span class="linenos">5290</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Except</span><span class="p">:</span>
+</span><span id="except_-5291"><a href="#except_-5291"><span class="linenos">5291</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="except_-5292"><a href="#except_-5292"><span class="linenos">5292</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</span>
+</span><span id="except_-5293"><a href="#except_-5293"><span class="linenos">5293</span></a>
+</span><span id="except_-5294"><a href="#except_-5294"><span class="linenos">5294</span></a><span class="sd"> Example:</span>
+</span><span id="except_-5295"><a href="#except_-5295"><span class="linenos">5295</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_-5296"><a href="#except_-5296"><span class="linenos">5296</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
+</span><span id="except_-5297"><a href="#except_-5297"><span class="linenos">5297</span></a>
+</span><span id="except_-5298"><a href="#except_-5298"><span class="linenos">5298</span></a><span class="sd"> Args:</span>
+</span><span id="except_-5299"><a href="#except_-5299"><span class="linenos">5299</span></a><span class="sd"> left: the SQL code string corresponding to the left-hand side.</span>
+</span><span id="except_-5300"><a href="#except_-5300"><span class="linenos">5300</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="except_-5301"><a href="#except_-5301"><span class="linenos">5301</span></a><span class="sd"> right: the SQL code string corresponding to the right-hand side.</span>
+</span><span id="except_-5302"><a href="#except_-5302"><span class="linenos">5302</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="except_-5303"><a href="#except_-5303"><span class="linenos">5303</span></a><span class="sd"> distinct: set the DISTINCT flag if and only if this is true.</span>
+</span><span id="except_-5304"><a href="#except_-5304"><span class="linenos">5304</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="except_-5305"><a href="#except_-5305"><span class="linenos">5305</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="except_-5306"><a href="#except_-5306"><span class="linenos">5306</span></a>
+</span><span id="except_-5307"><a href="#except_-5307"><span class="linenos">5307</span></a><span class="sd"> Returns:</span>
+</span><span id="except_-5308"><a href="#except_-5308"><span class="linenos">5308</span></a><span class="sd"> The new Except instance.</span>
+</span><span id="except_-5309"><a href="#except_-5309"><span class="linenos">5309</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="except_-5310"><a href="#except_-5310"><span class="linenos">5310</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_-5311"><a href="#except_-5311"><span class="linenos">5311</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_-5312"><a href="#except_-5312"><span class="linenos">5312</span></a>
+</span><span id="except_-5313"><a href="#except_-5313"><span class="linenos">5313</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>
@@ -69163,26 +71364,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-5139"><a href="#select-5139"><span class="linenos">5139</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-5140"><a href="#select-5140"><span class="linenos">5140</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="select-5141"><a href="#select-5141"><span class="linenos">5141</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
-</span><span id="select-5142"><a href="#select-5142"><span class="linenos">5142</span></a>
-</span><span id="select-5143"><a href="#select-5143"><span class="linenos">5143</span></a><span class="sd"> Example:</span>
-</span><span id="select-5144"><a href="#select-5144"><span class="linenos">5144</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-5145"><a href="#select-5145"><span class="linenos">5145</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="select-5146"><a href="#select-5146"><span class="linenos">5146</span></a>
-</span><span id="select-5147"><a href="#select-5147"><span class="linenos">5147</span></a><span class="sd"> Args:</span>
-</span><span id="select-5148"><a href="#select-5148"><span class="linenos">5148</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
-</span><span id="select-5149"><a href="#select-5149"><span class="linenos">5149</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="select-5150"><a href="#select-5150"><span class="linenos">5150</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="select-5151"><a href="#select-5151"><span class="linenos">5151</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="select-5152"><a href="#select-5152"><span class="linenos">5152</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="select-5153"><a href="#select-5153"><span class="linenos">5153</span></a><span class="sd"> that an input expression is a SQL string).</span>
-</span><span id="select-5154"><a href="#select-5154"><span class="linenos">5154</span></a>
-</span><span id="select-5155"><a href="#select-5155"><span class="linenos">5155</span></a><span class="sd"> Returns:</span>
-</span><span id="select-5156"><a href="#select-5156"><span class="linenos">5156</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="select-5157"><a href="#select-5157"><span class="linenos">5157</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="select-5158"><a href="#select-5158"><span class="linenos">5158</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-5316"><a href="#select-5316"><span class="linenos">5316</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-5317"><a href="#select-5317"><span class="linenos">5317</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="select-5318"><a href="#select-5318"><span class="linenos">5318</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
+</span><span id="select-5319"><a href="#select-5319"><span class="linenos">5319</span></a>
+</span><span id="select-5320"><a href="#select-5320"><span class="linenos">5320</span></a><span class="sd"> Example:</span>
+</span><span id="select-5321"><a href="#select-5321"><span class="linenos">5321</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-5322"><a href="#select-5322"><span class="linenos">5322</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
+</span><span id="select-5323"><a href="#select-5323"><span class="linenos">5323</span></a>
+</span><span id="select-5324"><a href="#select-5324"><span class="linenos">5324</span></a><span class="sd"> Args:</span>
+</span><span id="select-5325"><a href="#select-5325"><span class="linenos">5325</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
+</span><span id="select-5326"><a href="#select-5326"><span class="linenos">5326</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="select-5327"><a href="#select-5327"><span class="linenos">5327</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
+</span><span id="select-5328"><a href="#select-5328"><span class="linenos">5328</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="select-5329"><a href="#select-5329"><span class="linenos">5329</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="select-5330"><a href="#select-5330"><span class="linenos">5330</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="select-5331"><a href="#select-5331"><span class="linenos">5331</span></a>
+</span><span id="select-5332"><a href="#select-5332"><span class="linenos">5332</span></a><span class="sd"> Returns:</span>
+</span><span id="select-5333"><a href="#select-5333"><span class="linenos">5333</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="select-5334"><a href="#select-5334"><span class="linenos">5334</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="select-5335"><a href="#select-5335"><span class="linenos">5335</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>
@@ -69229,26 +71430,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_-5161"><a href="#from_-5161"><span class="linenos">5161</span></a><span class="k">def</span> <span class="nf">from_</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">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="from_-5162"><a href="#from_-5162"><span class="linenos">5162</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="from_-5163"><a href="#from_-5163"><span class="linenos">5163</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</span>
-</span><span id="from_-5164"><a href="#from_-5164"><span class="linenos">5164</span></a>
-</span><span id="from_-5165"><a href="#from_-5165"><span class="linenos">5165</span></a><span class="sd"> Example:</span>
-</span><span id="from_-5166"><a href="#from_-5166"><span class="linenos">5166</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_-5167"><a href="#from_-5167"><span class="linenos">5167</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="from_-5168"><a href="#from_-5168"><span class="linenos">5168</span></a>
-</span><span id="from_-5169"><a href="#from_-5169"><span class="linenos">5169</span></a><span class="sd"> Args:</span>
-</span><span id="from_-5170"><a href="#from_-5170"><span class="linenos">5170</span></a><span class="sd"> *expression: the SQL code string to parse as the FROM expressions of a</span>
-</span><span id="from_-5171"><a href="#from_-5171"><span class="linenos">5171</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="from_-5172"><a href="#from_-5172"><span class="linenos">5172</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
-</span><span id="from_-5173"><a href="#from_-5173"><span class="linenos">5173</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="from_-5174"><a href="#from_-5174"><span class="linenos">5174</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="from_-5175"><a href="#from_-5175"><span class="linenos">5175</span></a><span class="sd"> that the input expression is a SQL string).</span>
-</span><span id="from_-5176"><a href="#from_-5176"><span class="linenos">5176</span></a>
-</span><span id="from_-5177"><a href="#from_-5177"><span class="linenos">5177</span></a><span class="sd"> Returns:</span>
-</span><span id="from_-5178"><a href="#from_-5178"><span class="linenos">5178</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="from_-5179"><a href="#from_-5179"><span class="linenos">5179</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="from_-5180"><a href="#from_-5180"><span class="linenos">5180</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="from_-5338"><a href="#from_-5338"><span class="linenos">5338</span></a><span class="k">def</span> <span class="nf">from_</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">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="from_-5339"><a href="#from_-5339"><span class="linenos">5339</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="from_-5340"><a href="#from_-5340"><span class="linenos">5340</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</span>
+</span><span id="from_-5341"><a href="#from_-5341"><span class="linenos">5341</span></a>
+</span><span id="from_-5342"><a href="#from_-5342"><span class="linenos">5342</span></a><span class="sd"> Example:</span>
+</span><span id="from_-5343"><a href="#from_-5343"><span class="linenos">5343</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_-5344"><a href="#from_-5344"><span class="linenos">5344</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
+</span><span id="from_-5345"><a href="#from_-5345"><span class="linenos">5345</span></a>
+</span><span id="from_-5346"><a href="#from_-5346"><span class="linenos">5346</span></a><span class="sd"> Args:</span>
+</span><span id="from_-5347"><a href="#from_-5347"><span class="linenos">5347</span></a><span class="sd"> *expression: the SQL code string to parse as the FROM expressions of a</span>
+</span><span id="from_-5348"><a href="#from_-5348"><span class="linenos">5348</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="from_-5349"><a href="#from_-5349"><span class="linenos">5349</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
+</span><span id="from_-5350"><a href="#from_-5350"><span class="linenos">5350</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="from_-5351"><a href="#from_-5351"><span class="linenos">5351</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="from_-5352"><a href="#from_-5352"><span class="linenos">5352</span></a><span class="sd"> that the input expression is a SQL string).</span>
+</span><span id="from_-5353"><a href="#from_-5353"><span class="linenos">5353</span></a>
+</span><span id="from_-5354"><a href="#from_-5354"><span class="linenos">5354</span></a><span class="sd"> Returns:</span>
+</span><span id="from_-5355"><a href="#from_-5355"><span class="linenos">5355</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="from_-5356"><a href="#from_-5356"><span class="linenos">5356</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="from_-5357"><a href="#from_-5357"><span class="linenos">5357</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>
@@ -69295,53 +71496,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-5183"><a href="#update-5183"><span class="linenos">5183</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
-</span><span id="update-5184"><a href="#update-5184"><span class="linenos">5184</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-5185"><a href="#update-5185"><span class="linenos">5185</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
-</span><span id="update-5186"><a href="#update-5186"><span class="linenos">5186</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-5187"><a href="#update-5187"><span class="linenos">5187</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-5188"><a href="#update-5188"><span class="linenos">5188</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-5189"><a href="#update-5189"><span class="linenos">5189</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="update-5190"><a href="#update-5190"><span class="linenos">5190</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
-</span><span id="update-5191"><a href="#update-5191"><span class="linenos">5191</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="update-5192"><a href="#update-5192"><span class="linenos">5192</span></a><span class="sd"> Creates an update statement.</span>
-</span><span id="update-5193"><a href="#update-5193"><span class="linenos">5193</span></a>
-</span><span id="update-5194"><a href="#update-5194"><span class="linenos">5194</span></a><span class="sd"> Example:</span>
-</span><span id="update-5195"><a href="#update-5195"><span class="linenos">5195</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-5196"><a href="#update-5196"><span class="linenos">5196</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-5197"><a href="#update-5197"><span class="linenos">5197</span></a>
-</span><span id="update-5198"><a href="#update-5198"><span class="linenos">5198</span></a><span class="sd"> Args:</span>
-</span><span id="update-5199"><a href="#update-5199"><span class="linenos">5199</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
-</span><span id="update-5200"><a href="#update-5200"><span class="linenos">5200</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
-</span><span id="update-5201"><a href="#update-5201"><span class="linenos">5201</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="update-5202"><a href="#update-5202"><span class="linenos">5202</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
-</span><span id="update-5203"><a href="#update-5203"><span class="linenos">5203</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="update-5204"><a href="#update-5204"><span class="linenos">5204</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="update-5205"><a href="#update-5205"><span class="linenos">5205</span></a>
-</span><span id="update-5206"><a href="#update-5206"><span class="linenos">5206</span></a><span class="sd"> Returns:</span>
-</span><span id="update-5207"><a href="#update-5207"><span class="linenos">5207</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
-</span><span id="update-5208"><a href="#update-5208"><span class="linenos">5208</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="update-5209"><a href="#update-5209"><span class="linenos">5209</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-5210"><a href="#update-5210"><span class="linenos">5210</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-5211"><a href="#update-5211"><span class="linenos">5211</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="update-5212"><a href="#update-5212"><span class="linenos">5212</span></a> <span class="p">[</span>
-</span><span id="update-5213"><a href="#update-5213"><span class="linenos">5213</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-5214"><a href="#update-5214"><span class="linenos">5214</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-5215"><a href="#update-5215"><span class="linenos">5215</span></a> <span class="p">],</span>
-</span><span id="update-5216"><a href="#update-5216"><span class="linenos">5216</span></a> <span class="p">)</span>
-</span><span id="update-5217"><a href="#update-5217"><span class="linenos">5217</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="update-5218"><a href="#update-5218"><span class="linenos">5218</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-5219"><a href="#update-5219"><span class="linenos">5219</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="update-5220"><a href="#update-5220"><span class="linenos">5220</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-5221"><a href="#update-5221"><span class="linenos">5221</span></a> <span class="p">)</span>
-</span><span id="update-5222"><a href="#update-5222"><span class="linenos">5222</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-5223"><a href="#update-5223"><span class="linenos">5223</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-5224"><a href="#update-5224"><span class="linenos">5224</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="update-5225"><a href="#update-5225"><span class="linenos">5225</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-5226"><a href="#update-5226"><span class="linenos">5226</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="update-5227"><a href="#update-5227"><span class="linenos">5227</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-5228"><a href="#update-5228"><span class="linenos">5228</span></a> <span class="p">)</span>
-</span><span id="update-5229"><a href="#update-5229"><span class="linenos">5229</span></a> <span class="k">return</span> <span class="n">update_expr</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="update-5360"><a href="#update-5360"><span class="linenos">5360</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
+</span><span id="update-5361"><a href="#update-5361"><span class="linenos">5361</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-5362"><a href="#update-5362"><span class="linenos">5362</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
+</span><span id="update-5363"><a href="#update-5363"><span class="linenos">5363</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-5364"><a href="#update-5364"><span class="linenos">5364</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-5365"><a href="#update-5365"><span class="linenos">5365</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-5366"><a href="#update-5366"><span class="linenos">5366</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="update-5367"><a href="#update-5367"><span class="linenos">5367</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
+</span><span id="update-5368"><a href="#update-5368"><span class="linenos">5368</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="update-5369"><a href="#update-5369"><span class="linenos">5369</span></a><span class="sd"> Creates an update statement.</span>
+</span><span id="update-5370"><a href="#update-5370"><span class="linenos">5370</span></a>
+</span><span id="update-5371"><a href="#update-5371"><span class="linenos">5371</span></a><span class="sd"> Example:</span>
+</span><span id="update-5372"><a href="#update-5372"><span class="linenos">5372</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-5373"><a href="#update-5373"><span class="linenos">5373</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-5374"><a href="#update-5374"><span class="linenos">5374</span></a>
+</span><span id="update-5375"><a href="#update-5375"><span class="linenos">5375</span></a><span class="sd"> Args:</span>
+</span><span id="update-5376"><a href="#update-5376"><span class="linenos">5376</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
+</span><span id="update-5377"><a href="#update-5377"><span class="linenos">5377</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
+</span><span id="update-5378"><a href="#update-5378"><span class="linenos">5378</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="update-5379"><a href="#update-5379"><span class="linenos">5379</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
+</span><span id="update-5380"><a href="#update-5380"><span class="linenos">5380</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="update-5381"><a href="#update-5381"><span class="linenos">5381</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="update-5382"><a href="#update-5382"><span class="linenos">5382</span></a>
+</span><span id="update-5383"><a href="#update-5383"><span class="linenos">5383</span></a><span class="sd"> Returns:</span>
+</span><span id="update-5384"><a href="#update-5384"><span class="linenos">5384</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
+</span><span id="update-5385"><a href="#update-5385"><span class="linenos">5385</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="update-5386"><a href="#update-5386"><span class="linenos">5386</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-5387"><a href="#update-5387"><span class="linenos">5387</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-5388"><a href="#update-5388"><span class="linenos">5388</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="update-5389"><a href="#update-5389"><span class="linenos">5389</span></a> <span class="p">[</span>
+</span><span id="update-5390"><a href="#update-5390"><span class="linenos">5390</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-5391"><a href="#update-5391"><span class="linenos">5391</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-5392"><a href="#update-5392"><span class="linenos">5392</span></a> <span class="p">],</span>
+</span><span id="update-5393"><a href="#update-5393"><span class="linenos">5393</span></a> <span class="p">)</span>
+</span><span id="update-5394"><a href="#update-5394"><span class="linenos">5394</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="update-5395"><a href="#update-5395"><span class="linenos">5395</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-5396"><a href="#update-5396"><span class="linenos">5396</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="update-5397"><a href="#update-5397"><span class="linenos">5397</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-5398"><a href="#update-5398"><span class="linenos">5398</span></a> <span class="p">)</span>
+</span><span id="update-5399"><a href="#update-5399"><span class="linenos">5399</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-5400"><a href="#update-5400"><span class="linenos">5400</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-5401"><a href="#update-5401"><span class="linenos">5401</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="update-5402"><a href="#update-5402"><span class="linenos">5402</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-5403"><a href="#update-5403"><span class="linenos">5403</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="update-5404"><a href="#update-5404"><span class="linenos">5404</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-5405"><a href="#update-5405"><span class="linenos">5405</span></a> <span class="p">)</span>
+</span><span id="update-5406"><a href="#update-5406"><span class="linenos">5406</span></a> <span class="k">return</span> <span class="n">update_expr</span>
</span></pre></div>
@@ -69388,35 +71589,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-5232"><a href="#delete-5232"><span class="linenos">5232</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="delete-5233"><a href="#delete-5233"><span class="linenos">5233</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="delete-5234"><a href="#delete-5234"><span class="linenos">5234</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-5235"><a href="#delete-5235"><span class="linenos">5235</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-5236"><a href="#delete-5236"><span class="linenos">5236</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-5237"><a href="#delete-5237"><span class="linenos">5237</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="delete-5238"><a href="#delete-5238"><span class="linenos">5238</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="delete-5239"><a href="#delete-5239"><span class="linenos">5239</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="delete-5240"><a href="#delete-5240"><span class="linenos">5240</span></a><span class="sd"> Builds a delete statement.</span>
-</span><span id="delete-5241"><a href="#delete-5241"><span class="linenos">5241</span></a>
-</span><span id="delete-5242"><a href="#delete-5242"><span class="linenos">5242</span></a><span class="sd"> Example:</span>
-</span><span id="delete-5243"><a href="#delete-5243"><span class="linenos">5243</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-5244"><a href="#delete-5244"><span class="linenos">5244</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
-</span><span id="delete-5245"><a href="#delete-5245"><span class="linenos">5245</span></a>
-</span><span id="delete-5246"><a href="#delete-5246"><span class="linenos">5246</span></a><span class="sd"> Args:</span>
-</span><span id="delete-5247"><a href="#delete-5247"><span class="linenos">5247</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="delete-5248"><a href="#delete-5248"><span class="linenos">5248</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
-</span><span id="delete-5249"><a href="#delete-5249"><span class="linenos">5249</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="delete-5250"><a href="#delete-5250"><span class="linenos">5250</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="delete-5251"><a href="#delete-5251"><span class="linenos">5251</span></a>
-</span><span id="delete-5252"><a href="#delete-5252"><span class="linenos">5252</span></a><span class="sd"> Returns:</span>
-</span><span id="delete-5253"><a href="#delete-5253"><span class="linenos">5253</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
-</span><span id="delete-5254"><a href="#delete-5254"><span class="linenos">5254</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="delete-5255"><a href="#delete-5255"><span class="linenos">5255</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-5256"><a href="#delete-5256"><span class="linenos">5256</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="delete-5257"><a href="#delete-5257"><span class="linenos">5257</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-5258"><a href="#delete-5258"><span class="linenos">5258</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
-</span><span id="delete-5259"><a href="#delete-5259"><span class="linenos">5259</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-5260"><a href="#delete-5260"><span class="linenos">5260</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="delete-5409"><a href="#delete-5409"><span class="linenos">5409</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="delete-5410"><a href="#delete-5410"><span class="linenos">5410</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="delete-5411"><a href="#delete-5411"><span class="linenos">5411</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-5412"><a href="#delete-5412"><span class="linenos">5412</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-5413"><a href="#delete-5413"><span class="linenos">5413</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-5414"><a href="#delete-5414"><span class="linenos">5414</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="delete-5415"><a href="#delete-5415"><span class="linenos">5415</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="delete-5416"><a href="#delete-5416"><span class="linenos">5416</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="delete-5417"><a href="#delete-5417"><span class="linenos">5417</span></a><span class="sd"> Builds a delete statement.</span>
+</span><span id="delete-5418"><a href="#delete-5418"><span class="linenos">5418</span></a>
+</span><span id="delete-5419"><a href="#delete-5419"><span class="linenos">5419</span></a><span class="sd"> Example:</span>
+</span><span id="delete-5420"><a href="#delete-5420"><span class="linenos">5420</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-5421"><a href="#delete-5421"><span class="linenos">5421</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
+</span><span id="delete-5422"><a href="#delete-5422"><span class="linenos">5422</span></a>
+</span><span id="delete-5423"><a href="#delete-5423"><span class="linenos">5423</span></a><span class="sd"> Args:</span>
+</span><span id="delete-5424"><a href="#delete-5424"><span class="linenos">5424</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="delete-5425"><a href="#delete-5425"><span class="linenos">5425</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
+</span><span id="delete-5426"><a href="#delete-5426"><span class="linenos">5426</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="delete-5427"><a href="#delete-5427"><span class="linenos">5427</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="delete-5428"><a href="#delete-5428"><span class="linenos">5428</span></a>
+</span><span id="delete-5429"><a href="#delete-5429"><span class="linenos">5429</span></a><span class="sd"> Returns:</span>
+</span><span id="delete-5430"><a href="#delete-5430"><span class="linenos">5430</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
+</span><span id="delete-5431"><a href="#delete-5431"><span class="linenos">5431</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="delete-5432"><a href="#delete-5432"><span class="linenos">5432</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-5433"><a href="#delete-5433"><span class="linenos">5433</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="delete-5434"><a href="#delete-5434"><span class="linenos">5434</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-5435"><a href="#delete-5435"><span class="linenos">5435</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
+</span><span id="delete-5436"><a href="#delete-5436"><span class="linenos">5436</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-5437"><a href="#delete-5437"><span class="linenos">5437</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
</span></pre></div>
@@ -69461,49 +71662,49 @@ auto converted to sql objects eg None -> NULL</li>
</div>
<a class="headerlink" href="#insert"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="insert-5263"><a href="#insert-5263"><span class="linenos">5263</span></a><span class="k">def</span> <span class="nf">insert</span><span class="p">(</span>
-</span><span id="insert-5264"><a href="#insert-5264"><span class="linenos">5264</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="insert-5265"><a href="#insert-5265"><span class="linenos">5265</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="insert-5266"><a href="#insert-5266"><span class="linenos">5266</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">Sequence</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="insert-5267"><a href="#insert-5267"><span class="linenos">5267</span></a> <span class="n">overwrite</span><span 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="insert-5268"><a href="#insert-5268"><span class="linenos">5268</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="insert-5269"><a href="#insert-5269"><span class="linenos">5269</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="insert-5270"><a href="#insert-5270"><span class="linenos">5270</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="insert-5271"><a href="#insert-5271"><span class="linenos">5271</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
-</span><span id="insert-5272"><a href="#insert-5272"><span class="linenos">5272</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="insert-5273"><a href="#insert-5273"><span class="linenos">5273</span></a><span class="sd"> Builds an INSERT statement.</span>
-</span><span id="insert-5274"><a href="#insert-5274"><span class="linenos">5274</span></a>
-</span><span id="insert-5275"><a href="#insert-5275"><span class="linenos">5275</span></a><span class="sd"> Example:</span>
-</span><span id="insert-5276"><a href="#insert-5276"><span class="linenos">5276</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;VALUES (1, 2, 3)&quot;, &quot;tbl&quot;).sql()</span>
-</span><span id="insert-5277"><a href="#insert-5277"><span class="linenos">5277</span></a><span class="sd"> &#39;INSERT INTO tbl VALUES (1, 2, 3)&#39;</span>
-</span><span id="insert-5278"><a href="#insert-5278"><span class="linenos">5278</span></a>
-</span><span id="insert-5279"><a href="#insert-5279"><span class="linenos">5279</span></a><span class="sd"> Args:</span>
-</span><span id="insert-5280"><a href="#insert-5280"><span class="linenos">5280</span></a><span class="sd"> expression: the sql string or expression of the INSERT statement</span>
-</span><span id="insert-5281"><a href="#insert-5281"><span class="linenos">5281</span></a><span class="sd"> into: the tbl to insert data to.</span>
-</span><span id="insert-5282"><a href="#insert-5282"><span class="linenos">5282</span></a><span class="sd"> columns: optionally the table&#39;s column names.</span>
-</span><span id="insert-5283"><a href="#insert-5283"><span class="linenos">5283</span></a><span class="sd"> overwrite: whether to INSERT OVERWRITE or not.</span>
-</span><span id="insert-5284"><a href="#insert-5284"><span class="linenos">5284</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="insert-5285"><a href="#insert-5285"><span class="linenos">5285</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="insert-5286"><a href="#insert-5286"><span class="linenos">5286</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="insert-5287"><a href="#insert-5287"><span class="linenos">5287</span></a>
-</span><span id="insert-5288"><a href="#insert-5288"><span class="linenos">5288</span></a><span class="sd"> Returns:</span>
-</span><span id="insert-5289"><a href="#insert-5289"><span class="linenos">5289</span></a><span class="sd"> Insert: the syntax tree for the INSERT statement.</span>
-</span><span id="insert-5290"><a href="#insert-5290"><span class="linenos">5290</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="insert-5291"><a href="#insert-5291"><span class="linenos">5291</span></a> <span class="n">expr</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="insert-5292"><a href="#insert-5292"><span class="linenos">5292</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">Table</span> <span class="o">|</span> <span class="n">Schema</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">into</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 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="insert-5293"><a href="#insert-5293"><span class="linenos">5293</span></a>
-</span><span id="insert-5294"><a href="#insert-5294"><span class="linenos">5294</span></a> <span class="k">if</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="insert-5295"><a href="#insert-5295"><span class="linenos">5295</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="insert-5296"><a href="#insert-5296"><span class="linenos">5296</span></a> <span class="o">*</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="insert-5297"><a href="#insert-5297"><span class="linenos">5297</span></a> <span class="n">instance</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><span id="insert-5298"><a href="#insert-5298"><span class="linenos">5298</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="insert-5299"><a href="#insert-5299"><span class="linenos">5299</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="insert-5300"><a href="#insert-5300"><span class="linenos">5300</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="insert-5301"><a href="#insert-5301"><span class="linenos">5301</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="insert-5302"><a href="#insert-5302"><span class="linenos">5302</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="insert-5303"><a href="#insert-5303"><span class="linenos">5303</span></a> <span class="p">)</span>
-</span><span id="insert-5304"><a href="#insert-5304"><span class="linenos">5304</span></a>
-</span><span id="insert-5305"><a href="#insert-5305"><span class="linenos">5305</span></a> <span class="k">return</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 class="n">expression</span><span class="o">=</span><span class="n">expr</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="insert-5440"><a href="#insert-5440"><span class="linenos">5440</span></a><span class="k">def</span> <span class="nf">insert</span><span class="p">(</span>
+</span><span id="insert-5441"><a href="#insert-5441"><span class="linenos">5441</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="insert-5442"><a href="#insert-5442"><span class="linenos">5442</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="insert-5443"><a href="#insert-5443"><span class="linenos">5443</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">Sequence</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="insert-5444"><a href="#insert-5444"><span class="linenos">5444</span></a> <span class="n">overwrite</span><span 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="insert-5445"><a href="#insert-5445"><span class="linenos">5445</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="insert-5446"><a href="#insert-5446"><span class="linenos">5446</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="insert-5447"><a href="#insert-5447"><span class="linenos">5447</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="insert-5448"><a href="#insert-5448"><span class="linenos">5448</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Insert</span><span class="p">:</span>
+</span><span id="insert-5449"><a href="#insert-5449"><span class="linenos">5449</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="insert-5450"><a href="#insert-5450"><span class="linenos">5450</span></a><span class="sd"> Builds an INSERT statement.</span>
+</span><span id="insert-5451"><a href="#insert-5451"><span class="linenos">5451</span></a>
+</span><span id="insert-5452"><a href="#insert-5452"><span class="linenos">5452</span></a><span class="sd"> Example:</span>
+</span><span id="insert-5453"><a href="#insert-5453"><span class="linenos">5453</span></a><span class="sd"> &gt;&gt;&gt; insert(&quot;VALUES (1, 2, 3)&quot;, &quot;tbl&quot;).sql()</span>
+</span><span id="insert-5454"><a href="#insert-5454"><span class="linenos">5454</span></a><span class="sd"> &#39;INSERT INTO tbl VALUES (1, 2, 3)&#39;</span>
+</span><span id="insert-5455"><a href="#insert-5455"><span class="linenos">5455</span></a>
+</span><span id="insert-5456"><a href="#insert-5456"><span class="linenos">5456</span></a><span class="sd"> Args:</span>
+</span><span id="insert-5457"><a href="#insert-5457"><span class="linenos">5457</span></a><span class="sd"> expression: the sql string or expression of the INSERT statement</span>
+</span><span id="insert-5458"><a href="#insert-5458"><span class="linenos">5458</span></a><span class="sd"> into: the tbl to insert data to.</span>
+</span><span id="insert-5459"><a href="#insert-5459"><span class="linenos">5459</span></a><span class="sd"> columns: optionally the table&#39;s column names.</span>
+</span><span id="insert-5460"><a href="#insert-5460"><span class="linenos">5460</span></a><span class="sd"> overwrite: whether to INSERT OVERWRITE or not.</span>
+</span><span id="insert-5461"><a href="#insert-5461"><span class="linenos">5461</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="insert-5462"><a href="#insert-5462"><span class="linenos">5462</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="insert-5463"><a href="#insert-5463"><span class="linenos">5463</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="insert-5464"><a href="#insert-5464"><span class="linenos">5464</span></a>
+</span><span id="insert-5465"><a href="#insert-5465"><span class="linenos">5465</span></a><span class="sd"> Returns:</span>
+</span><span id="insert-5466"><a href="#insert-5466"><span class="linenos">5466</span></a><span class="sd"> Insert: the syntax tree for the INSERT statement.</span>
+</span><span id="insert-5467"><a href="#insert-5467"><span class="linenos">5467</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="insert-5468"><a href="#insert-5468"><span class="linenos">5468</span></a> <span class="n">expr</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="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="insert-5469"><a href="#insert-5469"><span class="linenos">5469</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">Table</span> <span class="o">|</span> <span class="n">Schema</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">into</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 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="insert-5470"><a href="#insert-5470"><span class="linenos">5470</span></a>
+</span><span id="insert-5471"><a href="#insert-5471"><span class="linenos">5471</span></a> <span class="k">if</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="insert-5472"><a href="#insert-5472"><span class="linenos">5472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="insert-5473"><a href="#insert-5473"><span class="linenos">5473</span></a> <span class="o">*</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="insert-5474"><a href="#insert-5474"><span class="linenos">5474</span></a> <span class="n">instance</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><span id="insert-5475"><a href="#insert-5475"><span class="linenos">5475</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="insert-5476"><a href="#insert-5476"><span class="linenos">5476</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="insert-5477"><a href="#insert-5477"><span class="linenos">5477</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="insert-5478"><a href="#insert-5478"><span class="linenos">5478</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="insert-5479"><a href="#insert-5479"><span class="linenos">5479</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="insert-5480"><a href="#insert-5480"><span class="linenos">5480</span></a> <span class="p">)</span>
+</span><span id="insert-5481"><a href="#insert-5481"><span class="linenos">5481</span></a>
+</span><span id="insert-5482"><a href="#insert-5482"><span class="linenos">5482</span></a> <span class="k">return</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 class="n">expression</span><span class="o">=</span><span class="n">expr</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span>
</span></pre></div>
@@ -69551,41 +71752,41 @@ auto converted to sql objects eg None -> NULL</li>
</div>
<a class="headerlink" href="#condition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="condition-5308"><a href="#condition-5308"><span class="linenos">5308</span></a><span class="k">def</span> <span class="nf">condition</span><span class="p">(</span>
-</span><span id="condition-5309"><a href="#condition-5309"><span class="linenos">5309</span></a> <span class="n">expression</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="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><span id="condition-5310"><a href="#condition-5310"><span class="linenos">5310</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
-</span><span id="condition-5311"><a href="#condition-5311"><span class="linenos">5311</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="condition-5312"><a href="#condition-5312"><span class="linenos">5312</span></a><span class="sd"> Initialize a logical condition expression.</span>
-</span><span id="condition-5313"><a href="#condition-5313"><span class="linenos">5313</span></a>
-</span><span id="condition-5314"><a href="#condition-5314"><span class="linenos">5314</span></a><span class="sd"> Example:</span>
-</span><span id="condition-5315"><a href="#condition-5315"><span class="linenos">5315</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
-</span><span id="condition-5316"><a href="#condition-5316"><span class="linenos">5316</span></a><span class="sd"> &#39;x = 1&#39;</span>
-</span><span id="condition-5317"><a href="#condition-5317"><span class="linenos">5317</span></a>
-</span><span id="condition-5318"><a href="#condition-5318"><span class="linenos">5318</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
-</span><span id="condition-5319"><a href="#condition-5319"><span class="linenos">5319</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
-</span><span id="condition-5320"><a href="#condition-5320"><span class="linenos">5320</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
-</span><span id="condition-5321"><a href="#condition-5321"><span class="linenos">5321</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
-</span><span id="condition-5322"><a href="#condition-5322"><span class="linenos">5322</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
-</span><span id="condition-5323"><a href="#condition-5323"><span class="linenos">5323</span></a>
-</span><span id="condition-5324"><a href="#condition-5324"><span class="linenos">5324</span></a><span class="sd"> Args:</span>
-</span><span id="condition-5325"><a href="#condition-5325"><span class="linenos">5325</span></a><span class="sd"> *expression: the SQL code string to parse.</span>
-</span><span id="condition-5326"><a href="#condition-5326"><span class="linenos">5326</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="condition-5327"><a href="#condition-5327"><span class="linenos">5327</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
-</span><span id="condition-5328"><a href="#condition-5328"><span class="linenos">5328</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="condition-5329"><a href="#condition-5329"><span class="linenos">5329</span></a><span class="sd"> copy: Whether or not to copy `expression` (only applies to expressions).</span>
-</span><span id="condition-5330"><a href="#condition-5330"><span class="linenos">5330</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="condition-5331"><a href="#condition-5331"><span class="linenos">5331</span></a><span class="sd"> that the input expression is a SQL string).</span>
-</span><span id="condition-5332"><a href="#condition-5332"><span class="linenos">5332</span></a>
-</span><span id="condition-5333"><a href="#condition-5333"><span class="linenos">5333</span></a><span class="sd"> Returns:</span>
-</span><span id="condition-5334"><a href="#condition-5334"><span class="linenos">5334</span></a><span class="sd"> The new Condition instance</span>
-</span><span id="condition-5335"><a href="#condition-5335"><span class="linenos">5335</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="condition-5336"><a href="#condition-5336"><span class="linenos">5336</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="condition-5337"><a href="#condition-5337"><span class="linenos">5337</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="condition-5338"><a href="#condition-5338"><span class="linenos">5338</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
-</span><span id="condition-5339"><a href="#condition-5339"><span class="linenos">5339</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="condition-5340"><a href="#condition-5340"><span class="linenos">5340</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="condition-5341"><a href="#condition-5341"><span class="linenos">5341</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="condition-5342"><a href="#condition-5342"><span class="linenos">5342</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="condition-5485"><a href="#condition-5485"><span class="linenos">5485</span></a><span class="k">def</span> <span class="nf">condition</span><span class="p">(</span>
+</span><span id="condition-5486"><a href="#condition-5486"><span class="linenos">5486</span></a> <span class="n">expression</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="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><span id="condition-5487"><a href="#condition-5487"><span class="linenos">5487</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
+</span><span id="condition-5488"><a href="#condition-5488"><span class="linenos">5488</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="condition-5489"><a href="#condition-5489"><span class="linenos">5489</span></a><span class="sd"> Initialize a logical condition expression.</span>
+</span><span id="condition-5490"><a href="#condition-5490"><span class="linenos">5490</span></a>
+</span><span id="condition-5491"><a href="#condition-5491"><span class="linenos">5491</span></a><span class="sd"> Example:</span>
+</span><span id="condition-5492"><a href="#condition-5492"><span class="linenos">5492</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
+</span><span id="condition-5493"><a href="#condition-5493"><span class="linenos">5493</span></a><span class="sd"> &#39;x = 1&#39;</span>
+</span><span id="condition-5494"><a href="#condition-5494"><span class="linenos">5494</span></a>
+</span><span id="condition-5495"><a href="#condition-5495"><span class="linenos">5495</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
+</span><span id="condition-5496"><a href="#condition-5496"><span class="linenos">5496</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
+</span><span id="condition-5497"><a href="#condition-5497"><span class="linenos">5497</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
+</span><span id="condition-5498"><a href="#condition-5498"><span class="linenos">5498</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
+</span><span id="condition-5499"><a href="#condition-5499"><span class="linenos">5499</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
+</span><span id="condition-5500"><a href="#condition-5500"><span class="linenos">5500</span></a>
+</span><span id="condition-5501"><a href="#condition-5501"><span class="linenos">5501</span></a><span class="sd"> Args:</span>
+</span><span id="condition-5502"><a href="#condition-5502"><span class="linenos">5502</span></a><span class="sd"> *expression: the SQL code string to parse.</span>
+</span><span id="condition-5503"><a href="#condition-5503"><span class="linenos">5503</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="condition-5504"><a href="#condition-5504"><span class="linenos">5504</span></a><span class="sd"> dialect: the dialect used to parse the input expression (in the case that the</span>
+</span><span id="condition-5505"><a href="#condition-5505"><span class="linenos">5505</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="condition-5506"><a href="#condition-5506"><span class="linenos">5506</span></a><span class="sd"> copy: Whether or not to copy `expression` (only applies to expressions).</span>
+</span><span id="condition-5507"><a href="#condition-5507"><span class="linenos">5507</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="condition-5508"><a href="#condition-5508"><span class="linenos">5508</span></a><span class="sd"> that the input expression is a SQL string).</span>
+</span><span id="condition-5509"><a href="#condition-5509"><span class="linenos">5509</span></a>
+</span><span id="condition-5510"><a href="#condition-5510"><span class="linenos">5510</span></a><span class="sd"> Returns:</span>
+</span><span id="condition-5511"><a href="#condition-5511"><span class="linenos">5511</span></a><span class="sd"> The new Condition instance</span>
+</span><span id="condition-5512"><a href="#condition-5512"><span class="linenos">5512</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="condition-5513"><a href="#condition-5513"><span class="linenos">5513</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="condition-5514"><a href="#condition-5514"><span class="linenos">5514</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="condition-5515"><a href="#condition-5515"><span class="linenos">5515</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
+</span><span id="condition-5516"><a href="#condition-5516"><span class="linenos">5516</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="condition-5517"><a href="#condition-5517"><span class="linenos">5517</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="condition-5518"><a href="#condition-5518"><span class="linenos">5518</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="condition-5519"><a href="#condition-5519"><span class="linenos">5519</span></a> <span class="p">)</span>
</span></pre></div>
@@ -69643,27 +71844,27 @@ that the input expression is a SQL string).</li>
</div>
<a class="headerlink" href="#and_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="and_-5345"><a href="#and_-5345"><span class="linenos">5345</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span>
-</span><span id="and_-5346"><a href="#and_-5346"><span class="linenos">5346</span></a> <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">Optional</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="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><span id="and_-5347"><a href="#and_-5347"><span class="linenos">5347</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
-</span><span id="and_-5348"><a href="#and_-5348"><span class="linenos">5348</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="and_-5349"><a href="#and_-5349"><span class="linenos">5349</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
-</span><span id="and_-5350"><a href="#and_-5350"><span class="linenos">5350</span></a>
-</span><span id="and_-5351"><a href="#and_-5351"><span class="linenos">5351</span></a><span class="sd"> Example:</span>
-</span><span id="and_-5352"><a href="#and_-5352"><span class="linenos">5352</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_-5353"><a href="#and_-5353"><span class="linenos">5353</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
-</span><span id="and_-5354"><a href="#and_-5354"><span class="linenos">5354</span></a>
-</span><span id="and_-5355"><a href="#and_-5355"><span class="linenos">5355</span></a><span class="sd"> Args:</span>
-</span><span id="and_-5356"><a href="#and_-5356"><span class="linenos">5356</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="and_-5357"><a href="#and_-5357"><span class="linenos">5357</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="and_-5358"><a href="#and_-5358"><span class="linenos">5358</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="and_-5359"><a href="#and_-5359"><span class="linenos">5359</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
-</span><span id="and_-5360"><a href="#and_-5360"><span class="linenos">5360</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="and_-5361"><a href="#and_-5361"><span class="linenos">5361</span></a>
-</span><span id="and_-5362"><a href="#and_-5362"><span class="linenos">5362</span></a><span class="sd"> Returns:</span>
-</span><span id="and_-5363"><a href="#and_-5363"><span class="linenos">5363</span></a><span class="sd"> And: the new condition</span>
-</span><span id="and_-5364"><a href="#and_-5364"><span class="linenos">5364</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="and_-5365"><a href="#and_-5365"><span class="linenos">5365</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="and_-5522"><a href="#and_-5522"><span class="linenos">5522</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span>
+</span><span id="and_-5523"><a href="#and_-5523"><span class="linenos">5523</span></a> <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">Optional</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="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><span id="and_-5524"><a href="#and_-5524"><span class="linenos">5524</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
+</span><span id="and_-5525"><a href="#and_-5525"><span class="linenos">5525</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="and_-5526"><a href="#and_-5526"><span class="linenos">5526</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
+</span><span id="and_-5527"><a href="#and_-5527"><span class="linenos">5527</span></a>
+</span><span id="and_-5528"><a href="#and_-5528"><span class="linenos">5528</span></a><span class="sd"> Example:</span>
+</span><span id="and_-5529"><a href="#and_-5529"><span class="linenos">5529</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_-5530"><a href="#and_-5530"><span class="linenos">5530</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
+</span><span id="and_-5531"><a href="#and_-5531"><span class="linenos">5531</span></a>
+</span><span id="and_-5532"><a href="#and_-5532"><span class="linenos">5532</span></a><span class="sd"> Args:</span>
+</span><span id="and_-5533"><a href="#and_-5533"><span class="linenos">5533</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="and_-5534"><a href="#and_-5534"><span class="linenos">5534</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="and_-5535"><a href="#and_-5535"><span class="linenos">5535</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="and_-5536"><a href="#and_-5536"><span class="linenos">5536</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="and_-5537"><a href="#and_-5537"><span class="linenos">5537</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="and_-5538"><a href="#and_-5538"><span class="linenos">5538</span></a>
+</span><span id="and_-5539"><a href="#and_-5539"><span class="linenos">5539</span></a><span class="sd"> Returns:</span>
+</span><span id="and_-5540"><a href="#and_-5540"><span class="linenos">5540</span></a><span class="sd"> And: the new condition</span>
+</span><span id="and_-5541"><a href="#and_-5541"><span class="linenos">5541</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="and_-5542"><a href="#and_-5542"><span class="linenos">5542</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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>
@@ -69709,27 +71910,27 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#or_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="or_-5368"><a href="#or_-5368"><span class="linenos">5368</span></a><span class="k">def</span> <span class="nf">or_</span><span class="p">(</span>
-</span><span id="or_-5369"><a href="#or_-5369"><span class="linenos">5369</span></a> <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">Optional</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="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><span id="or_-5370"><a href="#or_-5370"><span class="linenos">5370</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
-</span><span id="or_-5371"><a href="#or_-5371"><span class="linenos">5371</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="or_-5372"><a href="#or_-5372"><span class="linenos">5372</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
-</span><span id="or_-5373"><a href="#or_-5373"><span class="linenos">5373</span></a>
-</span><span id="or_-5374"><a href="#or_-5374"><span class="linenos">5374</span></a><span class="sd"> Example:</span>
-</span><span id="or_-5375"><a href="#or_-5375"><span class="linenos">5375</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_-5376"><a href="#or_-5376"><span class="linenos">5376</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
-</span><span id="or_-5377"><a href="#or_-5377"><span class="linenos">5377</span></a>
-</span><span id="or_-5378"><a href="#or_-5378"><span class="linenos">5378</span></a><span class="sd"> Args:</span>
-</span><span id="or_-5379"><a href="#or_-5379"><span class="linenos">5379</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="or_-5380"><a href="#or_-5380"><span class="linenos">5380</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="or_-5381"><a href="#or_-5381"><span class="linenos">5381</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="or_-5382"><a href="#or_-5382"><span class="linenos">5382</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
-</span><span id="or_-5383"><a href="#or_-5383"><span class="linenos">5383</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="or_-5384"><a href="#or_-5384"><span class="linenos">5384</span></a>
-</span><span id="or_-5385"><a href="#or_-5385"><span class="linenos">5385</span></a><span class="sd"> Returns:</span>
-</span><span id="or_-5386"><a href="#or_-5386"><span class="linenos">5386</span></a><span class="sd"> Or: the new condition</span>
-</span><span id="or_-5387"><a href="#or_-5387"><span class="linenos">5387</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="or_-5388"><a href="#or_-5388"><span class="linenos">5388</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="or_-5545"><a href="#or_-5545"><span class="linenos">5545</span></a><span class="k">def</span> <span class="nf">or_</span><span class="p">(</span>
+</span><span id="or_-5546"><a href="#or_-5546"><span class="linenos">5546</span></a> <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">Optional</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="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><span id="or_-5547"><a href="#or_-5547"><span class="linenos">5547</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Condition</span><span class="p">:</span>
+</span><span id="or_-5548"><a href="#or_-5548"><span class="linenos">5548</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="or_-5549"><a href="#or_-5549"><span class="linenos">5549</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
+</span><span id="or_-5550"><a href="#or_-5550"><span class="linenos">5550</span></a>
+</span><span id="or_-5551"><a href="#or_-5551"><span class="linenos">5551</span></a><span class="sd"> Example:</span>
+</span><span id="or_-5552"><a href="#or_-5552"><span class="linenos">5552</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_-5553"><a href="#or_-5553"><span class="linenos">5553</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
+</span><span id="or_-5554"><a href="#or_-5554"><span class="linenos">5554</span></a>
+</span><span id="or_-5555"><a href="#or_-5555"><span class="linenos">5555</span></a><span class="sd"> Args:</span>
+</span><span id="or_-5556"><a href="#or_-5556"><span class="linenos">5556</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="or_-5557"><a href="#or_-5557"><span class="linenos">5557</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="or_-5558"><a href="#or_-5558"><span class="linenos">5558</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="or_-5559"><a href="#or_-5559"><span class="linenos">5559</span></a><span class="sd"> copy: whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="or_-5560"><a href="#or_-5560"><span class="linenos">5560</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="or_-5561"><a href="#or_-5561"><span class="linenos">5561</span></a>
+</span><span id="or_-5562"><a href="#or_-5562"><span class="linenos">5562</span></a><span class="sd"> Returns:</span>
+</span><span id="or_-5563"><a href="#or_-5563"><span class="linenos">5563</span></a><span class="sd"> Or: the new condition</span>
+</span><span id="or_-5564"><a href="#or_-5564"><span class="linenos">5564</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="or_-5565"><a href="#or_-5565"><span class="linenos">5565</span></a> <span class="k">return</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Condition</span><span class="p">,</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>
@@ -69775,31 +71976,31 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#not_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="not_-5391"><a href="#not_-5391"><span class="linenos">5391</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">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="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">Not</span><span class="p">:</span>
-</span><span id="not_-5392"><a href="#not_-5392"><span class="linenos">5392</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="not_-5393"><a href="#not_-5393"><span class="linenos">5393</span></a><span class="sd"> Wrap a condition with a NOT operator.</span>
-</span><span id="not_-5394"><a href="#not_-5394"><span class="linenos">5394</span></a>
-</span><span id="not_-5395"><a href="#not_-5395"><span class="linenos">5395</span></a><span class="sd"> Example:</span>
-</span><span id="not_-5396"><a href="#not_-5396"><span class="linenos">5396</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
-</span><span id="not_-5397"><a href="#not_-5397"><span class="linenos">5397</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</span>
-</span><span id="not_-5398"><a href="#not_-5398"><span class="linenos">5398</span></a>
-</span><span id="not_-5399"><a href="#not_-5399"><span class="linenos">5399</span></a><span class="sd"> Args:</span>
-</span><span id="not_-5400"><a href="#not_-5400"><span class="linenos">5400</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="not_-5401"><a href="#not_-5401"><span class="linenos">5401</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="not_-5402"><a href="#not_-5402"><span class="linenos">5402</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="not_-5403"><a href="#not_-5403"><span class="linenos">5403</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
-</span><span id="not_-5404"><a href="#not_-5404"><span class="linenos">5404</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="not_-5405"><a href="#not_-5405"><span class="linenos">5405</span></a>
-</span><span id="not_-5406"><a href="#not_-5406"><span class="linenos">5406</span></a><span class="sd"> Returns:</span>
-</span><span id="not_-5407"><a href="#not_-5407"><span class="linenos">5407</span></a><span class="sd"> The new condition.</span>
-</span><span id="not_-5408"><a href="#not_-5408"><span class="linenos">5408</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="not_-5409"><a href="#not_-5409"><span class="linenos">5409</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
-</span><span id="not_-5410"><a href="#not_-5410"><span class="linenos">5410</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="not_-5411"><a href="#not_-5411"><span class="linenos">5411</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="not_-5412"><a href="#not_-5412"><span class="linenos">5412</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="not_-5413"><a href="#not_-5413"><span class="linenos">5413</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="not_-5414"><a href="#not_-5414"><span class="linenos">5414</span></a> <span class="p">)</span>
-</span><span id="not_-5415"><a href="#not_-5415"><span class="linenos">5415</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="not_-5568"><a href="#not_-5568"><span class="linenos">5568</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">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="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">Not</span><span class="p">:</span>
+</span><span id="not_-5569"><a href="#not_-5569"><span class="linenos">5569</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="not_-5570"><a href="#not_-5570"><span class="linenos">5570</span></a><span class="sd"> Wrap a condition with a NOT operator.</span>
+</span><span id="not_-5571"><a href="#not_-5571"><span class="linenos">5571</span></a>
+</span><span id="not_-5572"><a href="#not_-5572"><span class="linenos">5572</span></a><span class="sd"> Example:</span>
+</span><span id="not_-5573"><a href="#not_-5573"><span class="linenos">5573</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
+</span><span id="not_-5574"><a href="#not_-5574"><span class="linenos">5574</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</span>
+</span><span id="not_-5575"><a href="#not_-5575"><span class="linenos">5575</span></a>
+</span><span id="not_-5576"><a href="#not_-5576"><span class="linenos">5576</span></a><span class="sd"> Args:</span>
+</span><span id="not_-5577"><a href="#not_-5577"><span class="linenos">5577</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="not_-5578"><a href="#not_-5578"><span class="linenos">5578</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="not_-5579"><a href="#not_-5579"><span class="linenos">5579</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="not_-5580"><a href="#not_-5580"><span class="linenos">5580</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
+</span><span id="not_-5581"><a href="#not_-5581"><span class="linenos">5581</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="not_-5582"><a href="#not_-5582"><span class="linenos">5582</span></a>
+</span><span id="not_-5583"><a href="#not_-5583"><span class="linenos">5583</span></a><span class="sd"> Returns:</span>
+</span><span id="not_-5584"><a href="#not_-5584"><span class="linenos">5584</span></a><span class="sd"> The new condition.</span>
+</span><span id="not_-5585"><a href="#not_-5585"><span class="linenos">5585</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="not_-5586"><a href="#not_-5586"><span class="linenos">5586</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
+</span><span id="not_-5587"><a href="#not_-5587"><span class="linenos">5587</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="not_-5588"><a href="#not_-5588"><span class="linenos">5588</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="not_-5589"><a href="#not_-5589"><span class="linenos">5589</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="not_-5590"><a href="#not_-5590"><span class="linenos">5590</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="not_-5591"><a href="#not_-5591"><span class="linenos">5591</span></a> <span class="p">)</span>
+</span><span id="not_-5592"><a href="#not_-5592"><span class="linenos">5592</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>
@@ -69845,23 +72046,23 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#paren"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="paren-5418"><a href="#paren-5418"><span class="linenos">5418</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">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">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
-</span><span id="paren-5419"><a href="#paren-5419"><span class="linenos">5419</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="paren-5420"><a href="#paren-5420"><span class="linenos">5420</span></a><span class="sd"> Wrap an expression in parentheses.</span>
-</span><span id="paren-5421"><a href="#paren-5421"><span class="linenos">5421</span></a>
-</span><span id="paren-5422"><a href="#paren-5422"><span class="linenos">5422</span></a><span class="sd"> Example:</span>
-</span><span id="paren-5423"><a href="#paren-5423"><span class="linenos">5423</span></a><span class="sd"> &gt;&gt;&gt; paren(&quot;5 + 3&quot;).sql()</span>
-</span><span id="paren-5424"><a href="#paren-5424"><span class="linenos">5424</span></a><span class="sd"> &#39;(5 + 3)&#39;</span>
-</span><span id="paren-5425"><a href="#paren-5425"><span class="linenos">5425</span></a>
-</span><span id="paren-5426"><a href="#paren-5426"><span class="linenos">5426</span></a><span class="sd"> Args:</span>
-</span><span id="paren-5427"><a href="#paren-5427"><span class="linenos">5427</span></a><span class="sd"> expression: the SQL code string to parse.</span>
-</span><span id="paren-5428"><a href="#paren-5428"><span class="linenos">5428</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="paren-5429"><a href="#paren-5429"><span class="linenos">5429</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
-</span><span id="paren-5430"><a href="#paren-5430"><span class="linenos">5430</span></a>
-</span><span id="paren-5431"><a href="#paren-5431"><span class="linenos">5431</span></a><span class="sd"> Returns:</span>
-</span><span id="paren-5432"><a href="#paren-5432"><span class="linenos">5432</span></a><span class="sd"> The wrapped expression.</span>
-</span><span id="paren-5433"><a href="#paren-5433"><span class="linenos">5433</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="paren-5434"><a href="#paren-5434"><span class="linenos">5434</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_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="paren-5595"><a href="#paren-5595"><span class="linenos">5595</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">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">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
+</span><span id="paren-5596"><a href="#paren-5596"><span class="linenos">5596</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="paren-5597"><a href="#paren-5597"><span class="linenos">5597</span></a><span class="sd"> Wrap an expression in parentheses.</span>
+</span><span id="paren-5598"><a href="#paren-5598"><span class="linenos">5598</span></a>
+</span><span id="paren-5599"><a href="#paren-5599"><span class="linenos">5599</span></a><span class="sd"> Example:</span>
+</span><span id="paren-5600"><a href="#paren-5600"><span class="linenos">5600</span></a><span class="sd"> &gt;&gt;&gt; paren(&quot;5 + 3&quot;).sql()</span>
+</span><span id="paren-5601"><a href="#paren-5601"><span class="linenos">5601</span></a><span class="sd"> &#39;(5 + 3)&#39;</span>
+</span><span id="paren-5602"><a href="#paren-5602"><span class="linenos">5602</span></a>
+</span><span id="paren-5603"><a href="#paren-5603"><span class="linenos">5603</span></a><span class="sd"> Args:</span>
+</span><span id="paren-5604"><a href="#paren-5604"><span class="linenos">5604</span></a><span class="sd"> expression: the SQL code string to parse.</span>
+</span><span id="paren-5605"><a href="#paren-5605"><span class="linenos">5605</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="paren-5606"><a href="#paren-5606"><span class="linenos">5606</span></a><span class="sd"> copy: whether to copy the expression or not.</span>
+</span><span id="paren-5607"><a href="#paren-5607"><span class="linenos">5607</span></a>
+</span><span id="paren-5608"><a href="#paren-5608"><span class="linenos">5608</span></a><span class="sd"> Returns:</span>
+</span><span id="paren-5609"><a href="#paren-5609"><span class="linenos">5609</span></a><span class="sd"> The wrapped expression.</span>
+</span><span id="paren-5610"><a href="#paren-5610"><span class="linenos">5610</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="paren-5611"><a href="#paren-5611"><span class="linenos">5611</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_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">))</span>
</span></pre></div>
@@ -69917,31 +72118,31 @@ 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-5452"><a href="#to_identifier-5452"><span class="linenos">5452</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 class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="to_identifier-5453"><a href="#to_identifier-5453"><span class="linenos">5453</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
-</span><span id="to_identifier-5454"><a href="#to_identifier-5454"><span class="linenos">5454</span></a>
-</span><span id="to_identifier-5455"><a href="#to_identifier-5455"><span class="linenos">5455</span></a><span class="sd"> Args:</span>
-</span><span id="to_identifier-5456"><a href="#to_identifier-5456"><span class="linenos">5456</span></a><span class="sd"> name: The name to turn into an identifier.</span>
-</span><span id="to_identifier-5457"><a href="#to_identifier-5457"><span class="linenos">5457</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
-</span><span id="to_identifier-5458"><a href="#to_identifier-5458"><span class="linenos">5458</span></a><span class="sd"> copy: Whether or not to copy a passed in Identefier node.</span>
-</span><span id="to_identifier-5459"><a href="#to_identifier-5459"><span class="linenos">5459</span></a>
-</span><span id="to_identifier-5460"><a href="#to_identifier-5460"><span class="linenos">5460</span></a><span class="sd"> Returns:</span>
-</span><span id="to_identifier-5461"><a href="#to_identifier-5461"><span class="linenos">5461</span></a><span class="sd"> The identifier ast node.</span>
-</span><span id="to_identifier-5462"><a href="#to_identifier-5462"><span class="linenos">5462</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="to_identifier-5463"><a href="#to_identifier-5463"><span class="linenos">5463</span></a>
-</span><span id="to_identifier-5464"><a href="#to_identifier-5464"><span class="linenos">5464</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-5465"><a href="#to_identifier-5465"><span class="linenos">5465</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="to_identifier-5466"><a href="#to_identifier-5466"><span class="linenos">5466</span></a>
-</span><span id="to_identifier-5467"><a href="#to_identifier-5467"><span class="linenos">5467</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-5468"><a href="#to_identifier-5468"><span class="linenos">5468</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">maybe_copy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="to_identifier-5469"><a href="#to_identifier-5469"><span class="linenos">5469</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-5470"><a href="#to_identifier-5470"><span class="linenos">5470</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-5471"><a href="#to_identifier-5471"><span class="linenos">5471</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-5472"><a href="#to_identifier-5472"><span class="linenos">5472</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-5473"><a href="#to_identifier-5473"><span class="linenos">5473</span></a> <span class="p">)</span>
-</span><span id="to_identifier-5474"><a href="#to_identifier-5474"><span class="linenos">5474</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="to_identifier-5475"><a href="#to_identifier-5475"><span class="linenos">5475</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-5476"><a href="#to_identifier-5476"><span class="linenos">5476</span></a> <span class="k">return</span> <span class="n">identifier</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_identifier-5629"><a href="#to_identifier-5629"><span class="linenos">5629</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 class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="to_identifier-5630"><a href="#to_identifier-5630"><span class="linenos">5630</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
+</span><span id="to_identifier-5631"><a href="#to_identifier-5631"><span class="linenos">5631</span></a>
+</span><span id="to_identifier-5632"><a href="#to_identifier-5632"><span class="linenos">5632</span></a><span class="sd"> Args:</span>
+</span><span id="to_identifier-5633"><a href="#to_identifier-5633"><span class="linenos">5633</span></a><span class="sd"> name: The name to turn into an identifier.</span>
+</span><span id="to_identifier-5634"><a href="#to_identifier-5634"><span class="linenos">5634</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
+</span><span id="to_identifier-5635"><a href="#to_identifier-5635"><span class="linenos">5635</span></a><span class="sd"> copy: Whether or not to copy a passed in Identefier node.</span>
+</span><span id="to_identifier-5636"><a href="#to_identifier-5636"><span class="linenos">5636</span></a>
+</span><span id="to_identifier-5637"><a href="#to_identifier-5637"><span class="linenos">5637</span></a><span class="sd"> Returns:</span>
+</span><span id="to_identifier-5638"><a href="#to_identifier-5638"><span class="linenos">5638</span></a><span class="sd"> The identifier ast node.</span>
+</span><span id="to_identifier-5639"><a href="#to_identifier-5639"><span class="linenos">5639</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="to_identifier-5640"><a href="#to_identifier-5640"><span class="linenos">5640</span></a>
+</span><span id="to_identifier-5641"><a href="#to_identifier-5641"><span class="linenos">5641</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-5642"><a href="#to_identifier-5642"><span class="linenos">5642</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="to_identifier-5643"><a href="#to_identifier-5643"><span class="linenos">5643</span></a>
+</span><span id="to_identifier-5644"><a href="#to_identifier-5644"><span class="linenos">5644</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-5645"><a href="#to_identifier-5645"><span class="linenos">5645</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">maybe_copy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="to_identifier-5646"><a href="#to_identifier-5646"><span class="linenos">5646</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-5647"><a href="#to_identifier-5647"><span class="linenos">5647</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-5648"><a href="#to_identifier-5648"><span class="linenos">5648</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-5649"><a href="#to_identifier-5649"><span class="linenos">5649</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-5650"><a href="#to_identifier-5650"><span class="linenos">5650</span></a> <span class="p">)</span>
+</span><span id="to_identifier-5651"><a href="#to_identifier-5651"><span class="linenos">5651</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="to_identifier-5652"><a href="#to_identifier-5652"><span class="linenos">5652</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-5653"><a href="#to_identifier-5653"><span class="linenos">5653</span></a> <span class="k">return</span> <span class="n">identifier</span>
</span></pre></div>
@@ -69987,23 +72188,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-5482"><a href="#to_interval-5482"><span class="linenos">5482</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-5483"><a href="#to_interval-5483"><span class="linenos">5483</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-5484"><a href="#to_interval-5484"><span class="linenos">5484</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-5485"><a href="#to_interval-5485"><span class="linenos">5485</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-5486"><a href="#to_interval-5486"><span class="linenos">5486</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-5487"><a href="#to_interval-5487"><span class="linenos">5487</span></a>
-</span><span id="to_interval-5488"><a href="#to_interval-5488"><span class="linenos">5488</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-5489"><a href="#to_interval-5489"><span class="linenos">5489</span></a>
-</span><span id="to_interval-5490"><a href="#to_interval-5490"><span class="linenos">5490</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-5491"><a href="#to_interval-5491"><span class="linenos">5491</span></a>
-</span><span id="to_interval-5492"><a href="#to_interval-5492"><span class="linenos">5492</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-5493"><a href="#to_interval-5493"><span class="linenos">5493</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-5494"><a href="#to_interval-5494"><span class="linenos">5494</span></a>
-</span><span id="to_interval-5495"><a href="#to_interval-5495"><span class="linenos">5495</span></a> <span class="k">return</span> <span class="n">Interval</span><span class="p">(</span>
-</span><span id="to_interval-5496"><a href="#to_interval-5496"><span class="linenos">5496</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-5497"><a href="#to_interval-5497"><span class="linenos">5497</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-5498"><a href="#to_interval-5498"><span class="linenos">5498</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_interval-5659"><a href="#to_interval-5659"><span class="linenos">5659</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-5660"><a href="#to_interval-5660"><span class="linenos">5660</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-5661"><a href="#to_interval-5661"><span class="linenos">5661</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-5662"><a href="#to_interval-5662"><span class="linenos">5662</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-5663"><a href="#to_interval-5663"><span class="linenos">5663</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-5664"><a href="#to_interval-5664"><span class="linenos">5664</span></a>
+</span><span id="to_interval-5665"><a href="#to_interval-5665"><span class="linenos">5665</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-5666"><a href="#to_interval-5666"><span class="linenos">5666</span></a>
+</span><span id="to_interval-5667"><a href="#to_interval-5667"><span class="linenos">5667</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-5668"><a href="#to_interval-5668"><span class="linenos">5668</span></a>
+</span><span id="to_interval-5669"><a href="#to_interval-5669"><span class="linenos">5669</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-5670"><a href="#to_interval-5670"><span class="linenos">5670</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-5671"><a href="#to_interval-5671"><span class="linenos">5671</span></a>
+</span><span id="to_interval-5672"><a href="#to_interval-5672"><span class="linenos">5672</span></a> <span class="k">return</span> <span class="n">Interval</span><span class="p">(</span>
+</span><span id="to_interval-5673"><a href="#to_interval-5673"><span class="linenos">5673</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-5674"><a href="#to_interval-5674"><span class="linenos">5674</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-5675"><a href="#to_interval-5675"><span class="linenos">5675</span></a> <span class="p">)</span>
</span></pre></div>
@@ -70023,32 +72224,32 @@ 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-5511"><a href="#to_table-5511"><span class="linenos">5511</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span>
-</span><span id="to_table-5512"><a href="#to_table-5512"><span class="linenos">5512</span></a> <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="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="to_table-5513"><a href="#to_table-5513"><span class="linenos">5513</span></a><span class="p">)</span> <span class="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-5514"><a href="#to_table-5514"><span class="linenos">5514</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="to_table-5515"><a href="#to_table-5515"><span class="linenos">5515</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-5516"><a href="#to_table-5516"><span class="linenos">5516</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
-</span><span id="to_table-5517"><a href="#to_table-5517"><span class="linenos">5517</span></a>
-</span><span id="to_table-5518"><a href="#to_table-5518"><span class="linenos">5518</span></a><span class="sd"> Args:</span>
-</span><span id="to_table-5519"><a href="#to_table-5519"><span class="linenos">5519</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
-</span><span id="to_table-5520"><a href="#to_table-5520"><span class="linenos">5520</span></a><span class="sd"> dialect: the source dialect according to which the table name will be parsed.</span>
-</span><span id="to_table-5521"><a href="#to_table-5521"><span class="linenos">5521</span></a><span class="sd"> kwargs: the kwargs to instantiate the resulting `Table` expression with.</span>
-</span><span id="to_table-5522"><a href="#to_table-5522"><span class="linenos">5522</span></a>
-</span><span id="to_table-5523"><a href="#to_table-5523"><span class="linenos">5523</span></a><span class="sd"> Returns:</span>
-</span><span id="to_table-5524"><a href="#to_table-5524"><span class="linenos">5524</span></a><span class="sd"> A table expression.</span>
-</span><span id="to_table-5525"><a href="#to_table-5525"><span class="linenos">5525</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="to_table-5526"><a href="#to_table-5526"><span class="linenos">5526</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-5527"><a href="#to_table-5527"><span class="linenos">5527</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="to_table-5528"><a href="#to_table-5528"><span class="linenos">5528</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-5529"><a href="#to_table-5529"><span class="linenos">5529</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-5530"><a href="#to_table-5530"><span class="linenos">5530</span></a>
-</span><span id="to_table-5531"><a href="#to_table-5531"><span class="linenos">5531</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_path</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="to_table-5532"><a href="#to_table-5532"><span class="linenos">5532</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="to_table-5533"><a href="#to_table-5533"><span class="linenos">5533</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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="to_table-5534"><a href="#to_table-5534"><span class="linenos">5534</span></a> <span class="n">table</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="to_table-5535"><a href="#to_table-5535"><span class="linenos">5535</span></a>
-</span><span id="to_table-5536"><a href="#to_table-5536"><span class="linenos">5536</span></a> <span class="k">return</span> <span class="n">table</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_table-5688"><a href="#to_table-5688"><span class="linenos">5688</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span>
+</span><span id="to_table-5689"><a href="#to_table-5689"><span class="linenos">5689</span></a> <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="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="to_table-5690"><a href="#to_table-5690"><span class="linenos">5690</span></a><span class="p">)</span> <span class="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-5691"><a href="#to_table-5691"><span class="linenos">5691</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="to_table-5692"><a href="#to_table-5692"><span class="linenos">5692</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-5693"><a href="#to_table-5693"><span class="linenos">5693</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
+</span><span id="to_table-5694"><a href="#to_table-5694"><span class="linenos">5694</span></a>
+</span><span id="to_table-5695"><a href="#to_table-5695"><span class="linenos">5695</span></a><span class="sd"> Args:</span>
+</span><span id="to_table-5696"><a href="#to_table-5696"><span class="linenos">5696</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
+</span><span id="to_table-5697"><a href="#to_table-5697"><span class="linenos">5697</span></a><span class="sd"> dialect: the source dialect according to which the table name will be parsed.</span>
+</span><span id="to_table-5698"><a href="#to_table-5698"><span class="linenos">5698</span></a><span class="sd"> kwargs: the kwargs to instantiate the resulting `Table` expression with.</span>
+</span><span id="to_table-5699"><a href="#to_table-5699"><span class="linenos">5699</span></a>
+</span><span id="to_table-5700"><a href="#to_table-5700"><span class="linenos">5700</span></a><span class="sd"> Returns:</span>
+</span><span id="to_table-5701"><a href="#to_table-5701"><span class="linenos">5701</span></a><span class="sd"> A table expression.</span>
+</span><span id="to_table-5702"><a href="#to_table-5702"><span class="linenos">5702</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="to_table-5703"><a href="#to_table-5703"><span class="linenos">5703</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-5704"><a href="#to_table-5704"><span class="linenos">5704</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="to_table-5705"><a href="#to_table-5705"><span class="linenos">5705</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-5706"><a href="#to_table-5706"><span class="linenos">5706</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-5707"><a href="#to_table-5707"><span class="linenos">5707</span></a>
+</span><span id="to_table-5708"><a href="#to_table-5708"><span class="linenos">5708</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_path</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="to_table-5709"><a href="#to_table-5709"><span class="linenos">5709</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="to_table-5710"><a href="#to_table-5710"><span class="linenos">5710</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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="to_table-5711"><a href="#to_table-5711"><span class="linenos">5711</span></a> <span class="n">table</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="to_table-5712"><a href="#to_table-5712"><span class="linenos">5712</span></a>
+</span><span id="to_table-5713"><a href="#to_table-5713"><span class="linenos">5713</span></a> <span class="k">return</span> <span class="n">table</span>
</span></pre></div>
@@ -70083,22 +72284,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-5539"><a href="#to_column-5539"><span class="linenos">5539</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-5540"><a href="#to_column-5540"><span class="linenos">5540</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="to_column-5541"><a href="#to_column-5541"><span class="linenos">5541</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
-</span><span id="to_column-5542"><a href="#to_column-5542"><span class="linenos">5542</span></a>
-</span><span id="to_column-5543"><a href="#to_column-5543"><span class="linenos">5543</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
-</span><span id="to_column-5544"><a href="#to_column-5544"><span class="linenos">5544</span></a>
-</span><span id="to_column-5545"><a href="#to_column-5545"><span class="linenos">5545</span></a><span class="sd"> Args:</span>
-</span><span id="to_column-5546"><a href="#to_column-5546"><span class="linenos">5546</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
-</span><span id="to_column-5547"><a href="#to_column-5547"><span class="linenos">5547</span></a><span class="sd"> Returns:</span>
-</span><span id="to_column-5548"><a href="#to_column-5548"><span class="linenos">5548</span></a><span class="sd"> Table: A column expression</span>
-</span><span id="to_column-5549"><a href="#to_column-5549"><span class="linenos">5549</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="to_column-5550"><a href="#to_column-5550"><span class="linenos">5550</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-5551"><a href="#to_column-5551"><span class="linenos">5551</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="to_column-5552"><a href="#to_column-5552"><span class="linenos">5552</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-5553"><a href="#to_column-5553"><span class="linenos">5553</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-5554"><a href="#to_column-5554"><span class="linenos">5554</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-5716"><a href="#to_column-5716"><span class="linenos">5716</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-5717"><a href="#to_column-5717"><span class="linenos">5717</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="to_column-5718"><a href="#to_column-5718"><span class="linenos">5718</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
+</span><span id="to_column-5719"><a href="#to_column-5719"><span class="linenos">5719</span></a>
+</span><span id="to_column-5720"><a href="#to_column-5720"><span class="linenos">5720</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
+</span><span id="to_column-5721"><a href="#to_column-5721"><span class="linenos">5721</span></a>
+</span><span id="to_column-5722"><a href="#to_column-5722"><span class="linenos">5722</span></a><span class="sd"> Args:</span>
+</span><span id="to_column-5723"><a href="#to_column-5723"><span class="linenos">5723</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
+</span><span id="to_column-5724"><a href="#to_column-5724"><span class="linenos">5724</span></a><span class="sd"> Returns:</span>
+</span><span id="to_column-5725"><a href="#to_column-5725"><span class="linenos">5725</span></a><span class="sd"> Table: A column expression</span>
+</span><span id="to_column-5726"><a href="#to_column-5726"><span class="linenos">5726</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="to_column-5727"><a href="#to_column-5727"><span class="linenos">5727</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-5728"><a href="#to_column-5728"><span class="linenos">5728</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="to_column-5729"><a href="#to_column-5729"><span class="linenos">5729</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-5730"><a href="#to_column-5730"><span class="linenos">5730</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-5731"><a href="#to_column-5731"><span class="linenos">5731</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>
@@ -70132,61 +72333,61 @@ 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_-5557"><a href="#alias_-5557"><span class="linenos">5557</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
-</span><span id="alias_-5558"><a href="#alias_-5558"><span class="linenos">5558</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="alias_-5559"><a href="#alias_-5559"><span class="linenos">5559</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_-5560"><a href="#alias_-5560"><span class="linenos">5560</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_-5561"><a href="#alias_-5561"><span class="linenos">5561</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_-5562"><a href="#alias_-5562"><span class="linenos">5562</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_-5563"><a href="#alias_-5563"><span class="linenos">5563</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="alias_-5564"><a href="#alias_-5564"><span class="linenos">5564</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="alias_-5565"><a href="#alias_-5565"><span class="linenos">5565</span></a><span class="p">):</span>
-</span><span id="alias_-5566"><a href="#alias_-5566"><span class="linenos">5566</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
-</span><span id="alias_-5567"><a href="#alias_-5567"><span class="linenos">5567</span></a>
-</span><span id="alias_-5568"><a href="#alias_-5568"><span class="linenos">5568</span></a><span class="sd"> Example:</span>
-</span><span id="alias_-5569"><a href="#alias_-5569"><span class="linenos">5569</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
-</span><span id="alias_-5570"><a href="#alias_-5570"><span class="linenos">5570</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
-</span><span id="alias_-5571"><a href="#alias_-5571"><span class="linenos">5571</span></a>
-</span><span id="alias_-5572"><a href="#alias_-5572"><span class="linenos">5572</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_-5573"><a href="#alias_-5573"><span class="linenos">5573</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
-</span><span id="alias_-5574"><a href="#alias_-5574"><span class="linenos">5574</span></a>
-</span><span id="alias_-5575"><a href="#alias_-5575"><span class="linenos">5575</span></a><span class="sd"> Args:</span>
-</span><span id="alias_-5576"><a href="#alias_-5576"><span class="linenos">5576</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="alias_-5577"><a href="#alias_-5577"><span class="linenos">5577</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="alias_-5578"><a href="#alias_-5578"><span class="linenos">5578</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
-</span><span id="alias_-5579"><a href="#alias_-5579"><span class="linenos">5579</span></a><span class="sd"> special characters it is quoted.</span>
-</span><span id="alias_-5580"><a href="#alias_-5580"><span class="linenos">5580</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_-5581"><a href="#alias_-5581"><span class="linenos">5581</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
-</span><span id="alias_-5582"><a href="#alias_-5582"><span class="linenos">5582</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="alias_-5583"><a href="#alias_-5583"><span class="linenos">5583</span></a><span class="sd"> copy: Whether or not to copy the expression.</span>
-</span><span id="alias_-5584"><a href="#alias_-5584"><span class="linenos">5584</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="alias_-5585"><a href="#alias_-5585"><span class="linenos">5585</span></a>
-</span><span id="alias_-5586"><a href="#alias_-5586"><span class="linenos">5586</span></a><span class="sd"> Returns:</span>
-</span><span id="alias_-5587"><a href="#alias_-5587"><span class="linenos">5587</span></a><span class="sd"> Alias: the aliased expression</span>
-</span><span id="alias_-5588"><a href="#alias_-5588"><span class="linenos">5588</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="alias_-5589"><a href="#alias_-5589"><span class="linenos">5589</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="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="alias_-5590"><a href="#alias_-5590"><span class="linenos">5590</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_-5591"><a href="#alias_-5591"><span class="linenos">5591</span></a>
-</span><span id="alias_-5592"><a href="#alias_-5592"><span class="linenos">5592</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="alias_-5593"><a href="#alias_-5593"><span class="linenos">5593</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_-5594"><a href="#alias_-5594"><span class="linenos">5594</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_-5595"><a href="#alias_-5595"><span class="linenos">5595</span></a>
-</span><span id="alias_-5596"><a href="#alias_-5596"><span class="linenos">5596</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_-5597"><a href="#alias_-5597"><span class="linenos">5597</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_-5598"><a href="#alias_-5598"><span class="linenos">5598</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_-5599"><a href="#alias_-5599"><span class="linenos">5599</span></a>
-</span><span id="alias_-5600"><a href="#alias_-5600"><span class="linenos">5600</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="alias_-5601"><a href="#alias_-5601"><span class="linenos">5601</span></a>
-</span><span id="alias_-5602"><a href="#alias_-5602"><span class="linenos">5602</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_-5603"><a href="#alias_-5603"><span class="linenos">5603</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_-5604"><a href="#alias_-5604"><span class="linenos">5604</span></a> <span class="c1"># for the complete Window expression.</span>
-</span><span id="alias_-5605"><a href="#alias_-5605"><span class="linenos">5605</span></a> <span class="c1">#</span>
-</span><span id="alias_-5606"><a href="#alias_-5606"><span class="linenos">5606</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
-</span><span id="alias_-5607"><a href="#alias_-5607"><span class="linenos">5607</span></a>
-</span><span id="alias_-5608"><a href="#alias_-5608"><span class="linenos">5608</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_-5609"><a href="#alias_-5609"><span class="linenos">5609</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_-5610"><a href="#alias_-5610"><span class="linenos">5610</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="alias_-5611"><a href="#alias_-5611"><span class="linenos">5611</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_-5734"><a href="#alias_-5734"><span class="linenos">5734</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
+</span><span id="alias_-5735"><a href="#alias_-5735"><span class="linenos">5735</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="alias_-5736"><a href="#alias_-5736"><span class="linenos">5736</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_-5737"><a href="#alias_-5737"><span class="linenos">5737</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_-5738"><a href="#alias_-5738"><span class="linenos">5738</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_-5739"><a href="#alias_-5739"><span class="linenos">5739</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_-5740"><a href="#alias_-5740"><span class="linenos">5740</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="alias_-5741"><a href="#alias_-5741"><span class="linenos">5741</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="alias_-5742"><a href="#alias_-5742"><span class="linenos">5742</span></a><span class="p">):</span>
+</span><span id="alias_-5743"><a href="#alias_-5743"><span class="linenos">5743</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
+</span><span id="alias_-5744"><a href="#alias_-5744"><span class="linenos">5744</span></a>
+</span><span id="alias_-5745"><a href="#alias_-5745"><span class="linenos">5745</span></a><span class="sd"> Example:</span>
+</span><span id="alias_-5746"><a href="#alias_-5746"><span class="linenos">5746</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
+</span><span id="alias_-5747"><a href="#alias_-5747"><span class="linenos">5747</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
+</span><span id="alias_-5748"><a href="#alias_-5748"><span class="linenos">5748</span></a>
+</span><span id="alias_-5749"><a href="#alias_-5749"><span class="linenos">5749</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_-5750"><a href="#alias_-5750"><span class="linenos">5750</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
+</span><span id="alias_-5751"><a href="#alias_-5751"><span class="linenos">5751</span></a>
+</span><span id="alias_-5752"><a href="#alias_-5752"><span class="linenos">5752</span></a><span class="sd"> Args:</span>
+</span><span id="alias_-5753"><a href="#alias_-5753"><span class="linenos">5753</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="alias_-5754"><a href="#alias_-5754"><span class="linenos">5754</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="alias_-5755"><a href="#alias_-5755"><span class="linenos">5755</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
+</span><span id="alias_-5756"><a href="#alias_-5756"><span class="linenos">5756</span></a><span class="sd"> special characters it is quoted.</span>
+</span><span id="alias_-5757"><a href="#alias_-5757"><span class="linenos">5757</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_-5758"><a href="#alias_-5758"><span class="linenos">5758</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
+</span><span id="alias_-5759"><a href="#alias_-5759"><span class="linenos">5759</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="alias_-5760"><a href="#alias_-5760"><span class="linenos">5760</span></a><span class="sd"> copy: Whether or not to copy the expression.</span>
+</span><span id="alias_-5761"><a href="#alias_-5761"><span class="linenos">5761</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="alias_-5762"><a href="#alias_-5762"><span class="linenos">5762</span></a>
+</span><span id="alias_-5763"><a href="#alias_-5763"><span class="linenos">5763</span></a><span class="sd"> Returns:</span>
+</span><span id="alias_-5764"><a href="#alias_-5764"><span class="linenos">5764</span></a><span class="sd"> Alias: the aliased expression</span>
+</span><span id="alias_-5765"><a href="#alias_-5765"><span class="linenos">5765</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="alias_-5766"><a href="#alias_-5766"><span class="linenos">5766</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="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="alias_-5767"><a href="#alias_-5767"><span class="linenos">5767</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_-5768"><a href="#alias_-5768"><span class="linenos">5768</span></a>
+</span><span id="alias_-5769"><a href="#alias_-5769"><span class="linenos">5769</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="alias_-5770"><a href="#alias_-5770"><span class="linenos">5770</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_-5771"><a href="#alias_-5771"><span class="linenos">5771</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_-5772"><a href="#alias_-5772"><span class="linenos">5772</span></a>
+</span><span id="alias_-5773"><a href="#alias_-5773"><span class="linenos">5773</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_-5774"><a href="#alias_-5774"><span class="linenos">5774</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_-5775"><a href="#alias_-5775"><span class="linenos">5775</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_-5776"><a href="#alias_-5776"><span class="linenos">5776</span></a>
+</span><span id="alias_-5777"><a href="#alias_-5777"><span class="linenos">5777</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="alias_-5778"><a href="#alias_-5778"><span class="linenos">5778</span></a>
+</span><span id="alias_-5779"><a href="#alias_-5779"><span class="linenos">5779</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_-5780"><a href="#alias_-5780"><span class="linenos">5780</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_-5781"><a href="#alias_-5781"><span class="linenos">5781</span></a> <span class="c1"># for the complete Window expression.</span>
+</span><span id="alias_-5782"><a href="#alias_-5782"><span class="linenos">5782</span></a> <span class="c1">#</span>
+</span><span id="alias_-5783"><a href="#alias_-5783"><span class="linenos">5783</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
+</span><span id="alias_-5784"><a href="#alias_-5784"><span class="linenos">5784</span></a>
+</span><span id="alias_-5785"><a href="#alias_-5785"><span class="linenos">5785</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_-5786"><a href="#alias_-5786"><span class="linenos">5786</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_-5787"><a href="#alias_-5787"><span class="linenos">5787</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="alias_-5788"><a href="#alias_-5788"><span class="linenos">5788</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>
@@ -70242,32 +72443,32 @@ special characters it is quoted.</li>
</div>
<a class="headerlink" href="#subquery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="subquery-5614"><a href="#subquery-5614"><span class="linenos">5614</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span>
-</span><span id="subquery-5615"><a href="#subquery-5615"><span class="linenos">5615</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="subquery-5616"><a href="#subquery-5616"><span class="linenos">5616</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="n">Identifier</span> <span class="o">|</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="subquery-5617"><a href="#subquery-5617"><span class="linenos">5617</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="subquery-5618"><a href="#subquery-5618"><span class="linenos">5618</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="subquery-5619"><a href="#subquery-5619"><span class="linenos">5619</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="subquery-5620"><a href="#subquery-5620"><span class="linenos">5620</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="subquery-5621"><a href="#subquery-5621"><span class="linenos">5621</span></a><span class="sd"> Build a subquery expression.</span>
-</span><span id="subquery-5622"><a href="#subquery-5622"><span class="linenos">5622</span></a>
-</span><span id="subquery-5623"><a href="#subquery-5623"><span class="linenos">5623</span></a><span class="sd"> Example:</span>
-</span><span id="subquery-5624"><a href="#subquery-5624"><span class="linenos">5624</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-5625"><a href="#subquery-5625"><span class="linenos">5625</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
-</span><span id="subquery-5626"><a href="#subquery-5626"><span class="linenos">5626</span></a>
-</span><span id="subquery-5627"><a href="#subquery-5627"><span class="linenos">5627</span></a><span class="sd"> Args:</span>
-</span><span id="subquery-5628"><a href="#subquery-5628"><span class="linenos">5628</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="subquery-5629"><a href="#subquery-5629"><span class="linenos">5629</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="subquery-5630"><a href="#subquery-5630"><span class="linenos">5630</span></a><span class="sd"> alias: the alias name to use.</span>
-</span><span id="subquery-5631"><a href="#subquery-5631"><span class="linenos">5631</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="subquery-5632"><a href="#subquery-5632"><span class="linenos">5632</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="subquery-5633"><a href="#subquery-5633"><span class="linenos">5633</span></a>
-</span><span id="subquery-5634"><a href="#subquery-5634"><span class="linenos">5634</span></a><span class="sd"> Returns:</span>
-</span><span id="subquery-5635"><a href="#subquery-5635"><span class="linenos">5635</span></a><span class="sd"> A new Select instance with the subquery expression included.</span>
-</span><span id="subquery-5636"><a href="#subquery-5636"><span class="linenos">5636</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="subquery-5637"><a href="#subquery-5637"><span class="linenos">5637</span></a>
-</span><span id="subquery-5638"><a href="#subquery-5638"><span class="linenos">5638</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-5639"><a href="#subquery-5639"><span class="linenos">5639</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-5791"><a href="#subquery-5791"><span class="linenos">5791</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span>
+</span><span id="subquery-5792"><a href="#subquery-5792"><span class="linenos">5792</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="subquery-5793"><a href="#subquery-5793"><span class="linenos">5793</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="n">Identifier</span> <span class="o">|</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="subquery-5794"><a href="#subquery-5794"><span class="linenos">5794</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="subquery-5795"><a href="#subquery-5795"><span class="linenos">5795</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="subquery-5796"><a href="#subquery-5796"><span class="linenos">5796</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="subquery-5797"><a href="#subquery-5797"><span class="linenos">5797</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="subquery-5798"><a href="#subquery-5798"><span class="linenos">5798</span></a><span class="sd"> Build a subquery expression.</span>
+</span><span id="subquery-5799"><a href="#subquery-5799"><span class="linenos">5799</span></a>
+</span><span id="subquery-5800"><a href="#subquery-5800"><span class="linenos">5800</span></a><span class="sd"> Example:</span>
+</span><span id="subquery-5801"><a href="#subquery-5801"><span class="linenos">5801</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-5802"><a href="#subquery-5802"><span class="linenos">5802</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
+</span><span id="subquery-5803"><a href="#subquery-5803"><span class="linenos">5803</span></a>
+</span><span id="subquery-5804"><a href="#subquery-5804"><span class="linenos">5804</span></a><span class="sd"> Args:</span>
+</span><span id="subquery-5805"><a href="#subquery-5805"><span class="linenos">5805</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="subquery-5806"><a href="#subquery-5806"><span class="linenos">5806</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="subquery-5807"><a href="#subquery-5807"><span class="linenos">5807</span></a><span class="sd"> alias: the alias name to use.</span>
+</span><span id="subquery-5808"><a href="#subquery-5808"><span class="linenos">5808</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="subquery-5809"><a href="#subquery-5809"><span class="linenos">5809</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="subquery-5810"><a href="#subquery-5810"><span class="linenos">5810</span></a>
+</span><span id="subquery-5811"><a href="#subquery-5811"><span class="linenos">5811</span></a><span class="sd"> Returns:</span>
+</span><span id="subquery-5812"><a href="#subquery-5812"><span class="linenos">5812</span></a><span class="sd"> A new Select instance with the subquery expression included.</span>
+</span><span id="subquery-5813"><a href="#subquery-5813"><span class="linenos">5813</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="subquery-5814"><a href="#subquery-5814"><span class="linenos">5814</span></a>
+</span><span id="subquery-5815"><a href="#subquery-5815"><span class="linenos">5815</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-5816"><a href="#subquery-5816"><span class="linenos">5816</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>
@@ -70313,32 +72514,32 @@ 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-5642"><a href="#column-5642"><span class="linenos">5642</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
-</span><span id="column-5643"><a href="#column-5643"><span class="linenos">5643</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-5644"><a href="#column-5644"><span class="linenos">5644</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-5645"><a href="#column-5645"><span class="linenos">5645</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-5646"><a href="#column-5646"><span class="linenos">5646</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-5647"><a href="#column-5647"><span class="linenos">5647</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-5648"><a href="#column-5648"><span class="linenos">5648</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="column-5649"><a href="#column-5649"><span class="linenos">5649</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="column-5650"><a href="#column-5650"><span class="linenos">5650</span></a><span class="sd"> Build a Column.</span>
-</span><span id="column-5651"><a href="#column-5651"><span class="linenos">5651</span></a>
-</span><span id="column-5652"><a href="#column-5652"><span class="linenos">5652</span></a><span class="sd"> Args:</span>
-</span><span id="column-5653"><a href="#column-5653"><span class="linenos">5653</span></a><span class="sd"> col: Column name.</span>
-</span><span id="column-5654"><a href="#column-5654"><span class="linenos">5654</span></a><span class="sd"> table: Table name.</span>
-</span><span id="column-5655"><a href="#column-5655"><span class="linenos">5655</span></a><span class="sd"> db: Database name.</span>
-</span><span id="column-5656"><a href="#column-5656"><span class="linenos">5656</span></a><span class="sd"> catalog: Catalog name.</span>
-</span><span id="column-5657"><a href="#column-5657"><span class="linenos">5657</span></a><span class="sd"> quoted: Whether to force quotes on the column&#39;s identifiers.</span>
-</span><span id="column-5658"><a href="#column-5658"><span class="linenos">5658</span></a>
-</span><span id="column-5659"><a href="#column-5659"><span class="linenos">5659</span></a><span class="sd"> Returns:</span>
-</span><span id="column-5660"><a href="#column-5660"><span class="linenos">5660</span></a><span class="sd"> The new Column instance.</span>
-</span><span id="column-5661"><a href="#column-5661"><span class="linenos">5661</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="column-5662"><a href="#column-5662"><span class="linenos">5662</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
-</span><span id="column-5663"><a href="#column-5663"><span class="linenos">5663</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-5664"><a href="#column-5664"><span class="linenos">5664</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-5665"><a href="#column-5665"><span class="linenos">5665</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-5666"><a href="#column-5666"><span class="linenos">5666</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-5667"><a href="#column-5667"><span class="linenos">5667</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="column-5819"><a href="#column-5819"><span class="linenos">5819</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
+</span><span id="column-5820"><a href="#column-5820"><span class="linenos">5820</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-5821"><a href="#column-5821"><span class="linenos">5821</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-5822"><a href="#column-5822"><span class="linenos">5822</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-5823"><a href="#column-5823"><span class="linenos">5823</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-5824"><a href="#column-5824"><span class="linenos">5824</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-5825"><a href="#column-5825"><span class="linenos">5825</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="column-5826"><a href="#column-5826"><span class="linenos">5826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="column-5827"><a href="#column-5827"><span class="linenos">5827</span></a><span class="sd"> Build a Column.</span>
+</span><span id="column-5828"><a href="#column-5828"><span class="linenos">5828</span></a>
+</span><span id="column-5829"><a href="#column-5829"><span class="linenos">5829</span></a><span class="sd"> Args:</span>
+</span><span id="column-5830"><a href="#column-5830"><span class="linenos">5830</span></a><span class="sd"> col: Column name.</span>
+</span><span id="column-5831"><a href="#column-5831"><span class="linenos">5831</span></a><span class="sd"> table: Table name.</span>
+</span><span id="column-5832"><a href="#column-5832"><span class="linenos">5832</span></a><span class="sd"> db: Database name.</span>
+</span><span id="column-5833"><a href="#column-5833"><span class="linenos">5833</span></a><span class="sd"> catalog: Catalog name.</span>
+</span><span id="column-5834"><a href="#column-5834"><span class="linenos">5834</span></a><span class="sd"> quoted: Whether to force quotes on the column&#39;s identifiers.</span>
+</span><span id="column-5835"><a href="#column-5835"><span class="linenos">5835</span></a>
+</span><span id="column-5836"><a href="#column-5836"><span class="linenos">5836</span></a><span class="sd"> Returns:</span>
+</span><span id="column-5837"><a href="#column-5837"><span class="linenos">5837</span></a><span class="sd"> The new Column instance.</span>
+</span><span id="column-5838"><a href="#column-5838"><span class="linenos">5838</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="column-5839"><a href="#column-5839"><span class="linenos">5839</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
+</span><span id="column-5840"><a href="#column-5840"><span class="linenos">5840</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-5841"><a href="#column-5841"><span class="linenos">5841</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-5842"><a href="#column-5842"><span class="linenos">5842</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-5843"><a href="#column-5843"><span class="linenos">5843</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-5844"><a href="#column-5844"><span class="linenos">5844</span></a> <span class="p">)</span>
</span></pre></div>
@@ -70374,22 +72575,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-5670"><a href="#cast-5670"><span class="linenos">5670</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-5671"><a href="#cast-5671"><span class="linenos">5671</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
-</span><span id="cast-5672"><a href="#cast-5672"><span class="linenos">5672</span></a>
-</span><span id="cast-5673"><a href="#cast-5673"><span class="linenos">5673</span></a><span class="sd"> Example:</span>
-</span><span id="cast-5674"><a href="#cast-5674"><span class="linenos">5674</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
-</span><span id="cast-5675"><a href="#cast-5675"><span class="linenos">5675</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
-</span><span id="cast-5676"><a href="#cast-5676"><span class="linenos">5676</span></a>
-</span><span id="cast-5677"><a href="#cast-5677"><span class="linenos">5677</span></a><span class="sd"> Args:</span>
-</span><span id="cast-5678"><a href="#cast-5678"><span class="linenos">5678</span></a><span class="sd"> expression: The expression to cast.</span>
-</span><span id="cast-5679"><a href="#cast-5679"><span class="linenos">5679</span></a><span class="sd"> to: The datatype to cast to.</span>
-</span><span id="cast-5680"><a href="#cast-5680"><span class="linenos">5680</span></a>
-</span><span id="cast-5681"><a href="#cast-5681"><span class="linenos">5681</span></a><span class="sd"> Returns:</span>
-</span><span id="cast-5682"><a href="#cast-5682"><span class="linenos">5682</span></a><span class="sd"> The new Cast instance.</span>
-</span><span id="cast-5683"><a href="#cast-5683"><span class="linenos">5683</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="cast-5684"><a href="#cast-5684"><span class="linenos">5684</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-5685"><a href="#cast-5685"><span class="linenos">5685</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-5847"><a href="#cast-5847"><span class="linenos">5847</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-5848"><a href="#cast-5848"><span class="linenos">5848</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
+</span><span id="cast-5849"><a href="#cast-5849"><span class="linenos">5849</span></a>
+</span><span id="cast-5850"><a href="#cast-5850"><span class="linenos">5850</span></a><span class="sd"> Example:</span>
+</span><span id="cast-5851"><a href="#cast-5851"><span class="linenos">5851</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
+</span><span id="cast-5852"><a href="#cast-5852"><span class="linenos">5852</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
+</span><span id="cast-5853"><a href="#cast-5853"><span class="linenos">5853</span></a>
+</span><span id="cast-5854"><a href="#cast-5854"><span class="linenos">5854</span></a><span class="sd"> Args:</span>
+</span><span id="cast-5855"><a href="#cast-5855"><span class="linenos">5855</span></a><span class="sd"> expression: The expression to cast.</span>
+</span><span id="cast-5856"><a href="#cast-5856"><span class="linenos">5856</span></a><span class="sd"> to: The datatype to cast to.</span>
+</span><span id="cast-5857"><a href="#cast-5857"><span class="linenos">5857</span></a>
+</span><span id="cast-5858"><a href="#cast-5858"><span class="linenos">5858</span></a><span class="sd"> Returns:</span>
+</span><span id="cast-5859"><a href="#cast-5859"><span class="linenos">5859</span></a><span class="sd"> The new Cast instance.</span>
+</span><span id="cast-5860"><a href="#cast-5860"><span class="linenos">5860</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="cast-5861"><a href="#cast-5861"><span class="linenos">5861</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-5862"><a href="#cast-5862"><span class="linenos">5862</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>
@@ -70432,31 +72633,31 @@ 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_-5688"><a href="#table_-5688"><span class="linenos">5688</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span>
-</span><span id="table_-5689"><a href="#table_-5689"><span class="linenos">5689</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">Identifier</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="table_-5690"><a href="#table_-5690"><span class="linenos">5690</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="n">Identifier</span> <span class="o">|</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="table_-5691"><a href="#table_-5691"><span class="linenos">5691</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="n">Identifier</span> <span class="o">|</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="table_-5692"><a href="#table_-5692"><span class="linenos">5692</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="table_-5693"><a href="#table_-5693"><span class="linenos">5693</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="n">Identifier</span> <span class="o">|</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="table_-5694"><a href="#table_-5694"><span class="linenos">5694</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
-</span><span id="table_-5695"><a href="#table_-5695"><span class="linenos">5695</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
-</span><span id="table_-5696"><a href="#table_-5696"><span class="linenos">5696</span></a>
-</span><span id="table_-5697"><a href="#table_-5697"><span class="linenos">5697</span></a><span class="sd"> Args:</span>
-</span><span id="table_-5698"><a href="#table_-5698"><span class="linenos">5698</span></a><span class="sd"> table: Table name.</span>
-</span><span id="table_-5699"><a href="#table_-5699"><span class="linenos">5699</span></a><span class="sd"> db: Database name.</span>
-</span><span id="table_-5700"><a href="#table_-5700"><span class="linenos">5700</span></a><span class="sd"> catalog: Catalog name.</span>
-</span><span id="table_-5701"><a href="#table_-5701"><span class="linenos">5701</span></a><span class="sd"> quote: Whether to force quotes on the table&#39;s identifiers.</span>
-</span><span id="table_-5702"><a href="#table_-5702"><span class="linenos">5702</span></a><span class="sd"> alias: Table&#39;s alias.</span>
-</span><span id="table_-5703"><a href="#table_-5703"><span class="linenos">5703</span></a>
-</span><span id="table_-5704"><a href="#table_-5704"><span class="linenos">5704</span></a><span class="sd"> Returns:</span>
-</span><span id="table_-5705"><a href="#table_-5705"><span class="linenos">5705</span></a><span class="sd"> The new Table instance.</span>
-</span><span id="table_-5706"><a href="#table_-5706"><span class="linenos">5706</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="table_-5707"><a href="#table_-5707"><span class="linenos">5707</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
-</span><span id="table_-5708"><a href="#table_-5708"><span class="linenos">5708</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_-5709"><a href="#table_-5709"><span class="linenos">5709</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_-5710"><a href="#table_-5710"><span class="linenos">5710</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_-5711"><a href="#table_-5711"><span class="linenos">5711</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_-5712"><a href="#table_-5712"><span class="linenos">5712</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="table_-5865"><a href="#table_-5865"><span class="linenos">5865</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span>
+</span><span id="table_-5866"><a href="#table_-5866"><span class="linenos">5866</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">Identifier</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="table_-5867"><a href="#table_-5867"><span class="linenos">5867</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="n">Identifier</span> <span class="o">|</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="table_-5868"><a href="#table_-5868"><span class="linenos">5868</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="n">Identifier</span> <span class="o">|</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="table_-5869"><a href="#table_-5869"><span class="linenos">5869</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="table_-5870"><a href="#table_-5870"><span class="linenos">5870</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="n">Identifier</span> <span class="o">|</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="table_-5871"><a href="#table_-5871"><span class="linenos">5871</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
+</span><span id="table_-5872"><a href="#table_-5872"><span class="linenos">5872</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
+</span><span id="table_-5873"><a href="#table_-5873"><span class="linenos">5873</span></a>
+</span><span id="table_-5874"><a href="#table_-5874"><span class="linenos">5874</span></a><span class="sd"> Args:</span>
+</span><span id="table_-5875"><a href="#table_-5875"><span class="linenos">5875</span></a><span class="sd"> table: Table name.</span>
+</span><span id="table_-5876"><a href="#table_-5876"><span class="linenos">5876</span></a><span class="sd"> db: Database name.</span>
+</span><span id="table_-5877"><a href="#table_-5877"><span class="linenos">5877</span></a><span class="sd"> catalog: Catalog name.</span>
+</span><span id="table_-5878"><a href="#table_-5878"><span class="linenos">5878</span></a><span class="sd"> quote: Whether to force quotes on the table&#39;s identifiers.</span>
+</span><span id="table_-5879"><a href="#table_-5879"><span class="linenos">5879</span></a><span class="sd"> alias: Table&#39;s alias.</span>
+</span><span id="table_-5880"><a href="#table_-5880"><span class="linenos">5880</span></a>
+</span><span id="table_-5881"><a href="#table_-5881"><span class="linenos">5881</span></a><span class="sd"> Returns:</span>
+</span><span id="table_-5882"><a href="#table_-5882"><span class="linenos">5882</span></a><span class="sd"> The new Table instance.</span>
+</span><span id="table_-5883"><a href="#table_-5883"><span class="linenos">5883</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="table_-5884"><a href="#table_-5884"><span class="linenos">5884</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
+</span><span id="table_-5885"><a href="#table_-5885"><span class="linenos">5885</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 class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="table_-5886"><a href="#table_-5886"><span class="linenos">5886</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 class="k">if</span> <span class="n">db</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="table_-5887"><a href="#table_-5887"><span class="linenos">5887</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 class="k">if</span> <span class="n">catalog</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="table_-5888"><a href="#table_-5888"><span class="linenos">5888</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_-5889"><a href="#table_-5889"><span class="linenos">5889</span></a> <span class="p">)</span>
</span></pre></div>
@@ -70492,37 +72693,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-5715"><a href="#values-5715"><span class="linenos">5715</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
-</span><span id="values-5716"><a href="#values-5716"><span class="linenos">5716</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-5717"><a href="#values-5717"><span class="linenos">5717</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-5718"><a href="#values-5718"><span class="linenos">5718</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-5719"><a href="#values-5719"><span class="linenos">5719</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
-</span><span id="values-5720"><a href="#values-5720"><span class="linenos">5720</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
-</span><span id="values-5721"><a href="#values-5721"><span class="linenos">5721</span></a>
-</span><span id="values-5722"><a href="#values-5722"><span class="linenos">5722</span></a><span class="sd"> Example:</span>
-</span><span id="values-5723"><a href="#values-5723"><span class="linenos">5723</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
-</span><span id="values-5724"><a href="#values-5724"><span class="linenos">5724</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
-</span><span id="values-5725"><a href="#values-5725"><span class="linenos">5725</span></a>
-</span><span id="values-5726"><a href="#values-5726"><span class="linenos">5726</span></a><span class="sd"> Args:</span>
-</span><span id="values-5727"><a href="#values-5727"><span class="linenos">5727</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
-</span><span id="values-5728"><a href="#values-5728"><span class="linenos">5728</span></a><span class="sd"> alias: optional alias</span>
-</span><span id="values-5729"><a href="#values-5729"><span class="linenos">5729</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-5730"><a href="#values-5730"><span class="linenos">5730</span></a><span class="sd"> If either are provided then an alias is also required.</span>
-</span><span id="values-5731"><a href="#values-5731"><span class="linenos">5731</span></a>
-</span><span id="values-5732"><a href="#values-5732"><span class="linenos">5732</span></a><span class="sd"> Returns:</span>
-</span><span id="values-5733"><a href="#values-5733"><span class="linenos">5733</span></a><span class="sd"> Values: the Values expression object</span>
-</span><span id="values-5734"><a href="#values-5734"><span class="linenos">5734</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="values-5735"><a href="#values-5735"><span class="linenos">5735</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-5736"><a href="#values-5736"><span class="linenos">5736</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-5737"><a href="#values-5737"><span class="linenos">5737</span></a>
-</span><span id="values-5738"><a href="#values-5738"><span class="linenos">5738</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
-</span><span id="values-5739"><a href="#values-5739"><span class="linenos">5739</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-5740"><a href="#values-5740"><span class="linenos">5740</span></a> <span class="n">alias</span><span class="o">=</span><span class="p">(</span>
-</span><span id="values-5741"><a href="#values-5741"><span class="linenos">5741</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-5742"><a href="#values-5742"><span class="linenos">5742</span></a> <span class="k">if</span> <span class="n">columns</span>
-</span><span id="values-5743"><a href="#values-5743"><span class="linenos">5743</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-5744"><a href="#values-5744"><span class="linenos">5744</span></a> <span class="p">),</span>
-</span><span id="values-5745"><a href="#values-5745"><span class="linenos">5745</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="values-5892"><a href="#values-5892"><span class="linenos">5892</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
+</span><span id="values-5893"><a href="#values-5893"><span class="linenos">5893</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-5894"><a href="#values-5894"><span class="linenos">5894</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-5895"><a href="#values-5895"><span class="linenos">5895</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-5896"><a href="#values-5896"><span class="linenos">5896</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
+</span><span id="values-5897"><a href="#values-5897"><span class="linenos">5897</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
+</span><span id="values-5898"><a href="#values-5898"><span class="linenos">5898</span></a>
+</span><span id="values-5899"><a href="#values-5899"><span class="linenos">5899</span></a><span class="sd"> Example:</span>
+</span><span id="values-5900"><a href="#values-5900"><span class="linenos">5900</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
+</span><span id="values-5901"><a href="#values-5901"><span class="linenos">5901</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
+</span><span id="values-5902"><a href="#values-5902"><span class="linenos">5902</span></a>
+</span><span id="values-5903"><a href="#values-5903"><span class="linenos">5903</span></a><span class="sd"> Args:</span>
+</span><span id="values-5904"><a href="#values-5904"><span class="linenos">5904</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
+</span><span id="values-5905"><a href="#values-5905"><span class="linenos">5905</span></a><span class="sd"> alias: optional alias</span>
+</span><span id="values-5906"><a href="#values-5906"><span class="linenos">5906</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-5907"><a href="#values-5907"><span class="linenos">5907</span></a><span class="sd"> If either are provided then an alias is also required.</span>
+</span><span id="values-5908"><a href="#values-5908"><span class="linenos">5908</span></a>
+</span><span id="values-5909"><a href="#values-5909"><span class="linenos">5909</span></a><span class="sd"> Returns:</span>
+</span><span id="values-5910"><a href="#values-5910"><span class="linenos">5910</span></a><span class="sd"> Values: the Values expression object</span>
+</span><span id="values-5911"><a href="#values-5911"><span class="linenos">5911</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="values-5912"><a href="#values-5912"><span class="linenos">5912</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-5913"><a href="#values-5913"><span class="linenos">5913</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-5914"><a href="#values-5914"><span class="linenos">5914</span></a>
+</span><span id="values-5915"><a href="#values-5915"><span class="linenos">5915</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
+</span><span id="values-5916"><a href="#values-5916"><span class="linenos">5916</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-5917"><a href="#values-5917"><span class="linenos">5917</span></a> <span class="n">alias</span><span class="o">=</span><span class="p">(</span>
+</span><span id="values-5918"><a href="#values-5918"><span class="linenos">5918</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-5919"><a href="#values-5919"><span class="linenos">5919</span></a> <span class="k">if</span> <span class="n">columns</span>
+</span><span id="values-5920"><a href="#values-5920"><span class="linenos">5920</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-5921"><a href="#values-5921"><span class="linenos">5921</span></a> <span class="p">),</span>
+</span><span id="values-5922"><a href="#values-5922"><span class="linenos">5922</span></a> <span class="p">)</span>
</span></pre></div>
@@ -70567,28 +72768,28 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#var"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="var-5748"><a href="#var-5748"><span class="linenos">5748</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-5749"><a href="#var-5749"><span class="linenos">5749</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
-</span><span id="var-5750"><a href="#var-5750"><span class="linenos">5750</span></a>
-</span><span id="var-5751"><a href="#var-5751"><span class="linenos">5751</span></a><span class="sd"> Example:</span>
-</span><span id="var-5752"><a href="#var-5752"><span class="linenos">5752</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
-</span><span id="var-5753"><a href="#var-5753"><span class="linenos">5753</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="var-5754"><a href="#var-5754"><span class="linenos">5754</span></a>
-</span><span id="var-5755"><a href="#var-5755"><span class="linenos">5755</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
-</span><span id="var-5756"><a href="#var-5756"><span class="linenos">5756</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="var-5757"><a href="#var-5757"><span class="linenos">5757</span></a>
-</span><span id="var-5758"><a href="#var-5758"><span class="linenos">5758</span></a><span class="sd"> Args:</span>
-</span><span id="var-5759"><a href="#var-5759"><span class="linenos">5759</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-5760"><a href="#var-5760"><span class="linenos">5760</span></a>
-</span><span id="var-5761"><a href="#var-5761"><span class="linenos">5761</span></a><span class="sd"> Returns:</span>
-</span><span id="var-5762"><a href="#var-5762"><span class="linenos">5762</span></a><span class="sd"> The new variable node.</span>
-</span><span id="var-5763"><a href="#var-5763"><span class="linenos">5763</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="var-5764"><a href="#var-5764"><span class="linenos">5764</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-5765"><a href="#var-5765"><span class="linenos">5765</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-5766"><a href="#var-5766"><span class="linenos">5766</span></a>
-</span><span id="var-5767"><a href="#var-5767"><span class="linenos">5767</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-5768"><a href="#var-5768"><span class="linenos">5768</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-5769"><a href="#var-5769"><span class="linenos">5769</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-5925"><a href="#var-5925"><span class="linenos">5925</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-5926"><a href="#var-5926"><span class="linenos">5926</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
+</span><span id="var-5927"><a href="#var-5927"><span class="linenos">5927</span></a>
+</span><span id="var-5928"><a href="#var-5928"><span class="linenos">5928</span></a><span class="sd"> Example:</span>
+</span><span id="var-5929"><a href="#var-5929"><span class="linenos">5929</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
+</span><span id="var-5930"><a href="#var-5930"><span class="linenos">5930</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
+</span><span id="var-5931"><a href="#var-5931"><span class="linenos">5931</span></a>
+</span><span id="var-5932"><a href="#var-5932"><span class="linenos">5932</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
+</span><span id="var-5933"><a href="#var-5933"><span class="linenos">5933</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
+</span><span id="var-5934"><a href="#var-5934"><span class="linenos">5934</span></a>
+</span><span id="var-5935"><a href="#var-5935"><span class="linenos">5935</span></a><span class="sd"> Args:</span>
+</span><span id="var-5936"><a href="#var-5936"><span class="linenos">5936</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-5937"><a href="#var-5937"><span class="linenos">5937</span></a>
+</span><span id="var-5938"><a href="#var-5938"><span class="linenos">5938</span></a><span class="sd"> Returns:</span>
+</span><span id="var-5939"><a href="#var-5939"><span class="linenos">5939</span></a><span class="sd"> The new variable node.</span>
+</span><span id="var-5940"><a href="#var-5940"><span class="linenos">5940</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="var-5941"><a href="#var-5941"><span class="linenos">5941</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-5942"><a href="#var-5942"><span class="linenos">5942</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-5943"><a href="#var-5943"><span class="linenos">5943</span></a>
+</span><span id="var-5944"><a href="#var-5944"><span class="linenos">5944</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-5945"><a href="#var-5945"><span class="linenos">5945</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-5946"><a href="#var-5946"><span class="linenos">5946</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>
@@ -70636,24 +72837,24 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#rename_table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="rename_table-5772"><a href="#rename_table-5772"><span class="linenos">5772</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-5773"><a href="#rename_table-5773"><span class="linenos">5773</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
-</span><span id="rename_table-5774"><a href="#rename_table-5774"><span class="linenos">5774</span></a>
-</span><span id="rename_table-5775"><a href="#rename_table-5775"><span class="linenos">5775</span></a><span class="sd"> Args:</span>
-</span><span id="rename_table-5776"><a href="#rename_table-5776"><span class="linenos">5776</span></a><span class="sd"> old_name: The old name of the table</span>
-</span><span id="rename_table-5777"><a href="#rename_table-5777"><span class="linenos">5777</span></a><span class="sd"> new_name: The new name of the table</span>
-</span><span id="rename_table-5778"><a href="#rename_table-5778"><span class="linenos">5778</span></a>
-</span><span id="rename_table-5779"><a href="#rename_table-5779"><span class="linenos">5779</span></a><span class="sd"> Returns:</span>
-</span><span id="rename_table-5780"><a href="#rename_table-5780"><span class="linenos">5780</span></a><span class="sd"> Alter table expression</span>
-</span><span id="rename_table-5781"><a href="#rename_table-5781"><span class="linenos">5781</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="rename_table-5782"><a href="#rename_table-5782"><span class="linenos">5782</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-5783"><a href="#rename_table-5783"><span class="linenos">5783</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-5784"><a href="#rename_table-5784"><span class="linenos">5784</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
-</span><span id="rename_table-5785"><a href="#rename_table-5785"><span class="linenos">5785</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-5786"><a href="#rename_table-5786"><span class="linenos">5786</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="rename_table-5787"><a href="#rename_table-5787"><span class="linenos">5787</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-5788"><a href="#rename_table-5788"><span class="linenos">5788</span></a> <span class="p">],</span>
-</span><span id="rename_table-5789"><a href="#rename_table-5789"><span class="linenos">5789</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="rename_table-5949"><a href="#rename_table-5949"><span class="linenos">5949</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-5950"><a href="#rename_table-5950"><span class="linenos">5950</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
+</span><span id="rename_table-5951"><a href="#rename_table-5951"><span class="linenos">5951</span></a>
+</span><span id="rename_table-5952"><a href="#rename_table-5952"><span class="linenos">5952</span></a><span class="sd"> Args:</span>
+</span><span id="rename_table-5953"><a href="#rename_table-5953"><span class="linenos">5953</span></a><span class="sd"> old_name: The old name of the table</span>
+</span><span id="rename_table-5954"><a href="#rename_table-5954"><span class="linenos">5954</span></a><span class="sd"> new_name: The new name of the table</span>
+</span><span id="rename_table-5955"><a href="#rename_table-5955"><span class="linenos">5955</span></a>
+</span><span id="rename_table-5956"><a href="#rename_table-5956"><span class="linenos">5956</span></a><span class="sd"> Returns:</span>
+</span><span id="rename_table-5957"><a href="#rename_table-5957"><span class="linenos">5957</span></a><span class="sd"> Alter table expression</span>
+</span><span id="rename_table-5958"><a href="#rename_table-5958"><span class="linenos">5958</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="rename_table-5959"><a href="#rename_table-5959"><span class="linenos">5959</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-5960"><a href="#rename_table-5960"><span class="linenos">5960</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-5961"><a href="#rename_table-5961"><span class="linenos">5961</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
+</span><span id="rename_table-5962"><a href="#rename_table-5962"><span class="linenos">5962</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-5963"><a href="#rename_table-5963"><span class="linenos">5963</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="rename_table-5964"><a href="#rename_table-5964"><span class="linenos">5964</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-5965"><a href="#rename_table-5965"><span class="linenos">5965</span></a> <span class="p">],</span>
+</span><span id="rename_table-5966"><a href="#rename_table-5966"><span class="linenos">5966</span></a> <span class="p">)</span>
</span></pre></div>
@@ -70686,46 +72887,46 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#convert"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="convert-5792"><a href="#convert-5792"><span class="linenos">5792</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-5793"><a href="#convert-5793"><span class="linenos">5793</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-5794"><a href="#convert-5794"><span class="linenos">5794</span></a>
-</span><span id="convert-5795"><a href="#convert-5795"><span class="linenos">5795</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
-</span><span id="convert-5796"><a href="#convert-5796"><span class="linenos">5796</span></a>
-</span><span id="convert-5797"><a href="#convert-5797"><span class="linenos">5797</span></a><span class="sd"> Args:</span>
-</span><span id="convert-5798"><a href="#convert-5798"><span class="linenos">5798</span></a><span class="sd"> value: A python object.</span>
-</span><span id="convert-5799"><a href="#convert-5799"><span class="linenos">5799</span></a><span class="sd"> copy: Whether or not to copy `value` (only applies to Expressions and collections).</span>
-</span><span id="convert-5800"><a href="#convert-5800"><span class="linenos">5800</span></a>
-</span><span id="convert-5801"><a href="#convert-5801"><span class="linenos">5801</span></a><span class="sd"> Returns:</span>
-</span><span id="convert-5802"><a href="#convert-5802"><span class="linenos">5802</span></a><span class="sd"> Expression: the equivalent expression object.</span>
-</span><span id="convert-5803"><a href="#convert-5803"><span class="linenos">5803</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="convert-5804"><a href="#convert-5804"><span class="linenos">5804</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-5805"><a href="#convert-5805"><span class="linenos">5805</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-5806"><a href="#convert-5806"><span class="linenos">5806</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-5807"><a href="#convert-5807"><span class="linenos">5807</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-5808"><a href="#convert-5808"><span class="linenos">5808</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-5809"><a href="#convert-5809"><span class="linenos">5809</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-5810"><a href="#convert-5810"><span class="linenos">5810</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-5811"><a href="#convert-5811"><span class="linenos">5811</span></a> <span class="k">return</span> <span class="n">NULL</span>
-</span><span id="convert-5812"><a href="#convert-5812"><span class="linenos">5812</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-5813"><a href="#convert-5813"><span class="linenos">5813</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-5814"><a href="#convert-5814"><span class="linenos">5814</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-5815"><a href="#convert-5815"><span class="linenos">5815</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-5816"><a href="#convert-5816"><span class="linenos">5816</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-5817"><a href="#convert-5817"><span class="linenos">5817</span></a> <span class="p">)</span>
-</span><span id="convert-5818"><a href="#convert-5818"><span class="linenos">5818</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-5819"><a href="#convert-5819"><span class="linenos">5819</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-5820"><a href="#convert-5820"><span class="linenos">5820</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-5821"><a href="#convert-5821"><span class="linenos">5821</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-5822"><a href="#convert-5822"><span class="linenos">5822</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-5823"><a href="#convert-5823"><span class="linenos">5823</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-5824"><a href="#convert-5824"><span class="linenos">5824</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-5825"><a href="#convert-5825"><span class="linenos">5825</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-5826"><a href="#convert-5826"><span class="linenos">5826</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-5827"><a href="#convert-5827"><span class="linenos">5827</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
-</span><span id="convert-5828"><a href="#convert-5828"><span class="linenos">5828</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-5829"><a href="#convert-5829"><span class="linenos">5829</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-5830"><a href="#convert-5830"><span class="linenos">5830</span></a> <span class="p">)</span>
-</span><span id="convert-5831"><a href="#convert-5831"><span class="linenos">5831</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-5969"><a href="#convert-5969"><span class="linenos">5969</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-5970"><a href="#convert-5970"><span class="linenos">5970</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-5971"><a href="#convert-5971"><span class="linenos">5971</span></a>
+</span><span id="convert-5972"><a href="#convert-5972"><span class="linenos">5972</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
+</span><span id="convert-5973"><a href="#convert-5973"><span class="linenos">5973</span></a>
+</span><span id="convert-5974"><a href="#convert-5974"><span class="linenos">5974</span></a><span class="sd"> Args:</span>
+</span><span id="convert-5975"><a href="#convert-5975"><span class="linenos">5975</span></a><span class="sd"> value: A python object.</span>
+</span><span id="convert-5976"><a href="#convert-5976"><span class="linenos">5976</span></a><span class="sd"> copy: Whether or not to copy `value` (only applies to Expressions and collections).</span>
+</span><span id="convert-5977"><a href="#convert-5977"><span class="linenos">5977</span></a>
+</span><span id="convert-5978"><a href="#convert-5978"><span class="linenos">5978</span></a><span class="sd"> Returns:</span>
+</span><span id="convert-5979"><a href="#convert-5979"><span class="linenos">5979</span></a><span class="sd"> Expression: the equivalent expression object.</span>
+</span><span id="convert-5980"><a href="#convert-5980"><span class="linenos">5980</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="convert-5981"><a href="#convert-5981"><span class="linenos">5981</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-5982"><a href="#convert-5982"><span class="linenos">5982</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-5983"><a href="#convert-5983"><span class="linenos">5983</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-5984"><a href="#convert-5984"><span class="linenos">5984</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-5985"><a href="#convert-5985"><span class="linenos">5985</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-5986"><a href="#convert-5986"><span class="linenos">5986</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-5987"><a href="#convert-5987"><span class="linenos">5987</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-5988"><a href="#convert-5988"><span class="linenos">5988</span></a> <span class="k">return</span> <span class="n">NULL</span>
+</span><span id="convert-5989"><a href="#convert-5989"><span class="linenos">5989</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-5990"><a href="#convert-5990"><span class="linenos">5990</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-5991"><a href="#convert-5991"><span class="linenos">5991</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-5992"><a href="#convert-5992"><span class="linenos">5992</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-5993"><a href="#convert-5993"><span class="linenos">5993</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-5994"><a href="#convert-5994"><span class="linenos">5994</span></a> <span class="p">)</span>
+</span><span id="convert-5995"><a href="#convert-5995"><span class="linenos">5995</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-5996"><a href="#convert-5996"><span class="linenos">5996</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-5997"><a href="#convert-5997"><span class="linenos">5997</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-5998"><a href="#convert-5998"><span class="linenos">5998</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-5999"><a href="#convert-5999"><span class="linenos">5999</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-6000"><a href="#convert-6000"><span class="linenos">6000</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-6001"><a href="#convert-6001"><span class="linenos">6001</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-6002"><a href="#convert-6002"><span class="linenos">6002</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-6003"><a href="#convert-6003"><span class="linenos">6003</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-6004"><a href="#convert-6004"><span class="linenos">6004</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
+</span><span id="convert-6005"><a href="#convert-6005"><span class="linenos">6005</span></a> <span class="n">keys</span><span class="o">=</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">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-6006"><a href="#convert-6006"><span class="linenos">6006</span></a> <span class="n">values</span><span class="o">=</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">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-6007"><a href="#convert-6007"><span class="linenos">6007</span></a> <span class="p">)</span>
+</span><span id="convert-6008"><a href="#convert-6008"><span class="linenos">6008</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>
@@ -70760,26 +72961,26 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#replace_children"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_children-5834"><a href="#replace_children-5834"><span class="linenos">5834</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">Expression</span><span class="p">,</span> <span class="n">fun</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">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="replace_children-5835"><a href="#replace_children-5835"><span class="linenos">5835</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="replace_children-5836"><a href="#replace_children-5836"><span class="linenos">5836</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-5837"><a href="#replace_children-5837"><span class="linenos">5837</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="replace_children-5838"><a href="#replace_children-5838"><span class="linenos">5838</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-5839"><a href="#replace_children-5839"><span class="linenos">5839</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-5840"><a href="#replace_children-5840"><span class="linenos">5840</span></a>
-</span><span id="replace_children-5841"><a href="#replace_children-5841"><span class="linenos">5841</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-5842"><a href="#replace_children-5842"><span class="linenos">5842</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="replace_children-5843"><a href="#replace_children-5843"><span class="linenos">5843</span></a>
-</span><span id="replace_children-5844"><a href="#replace_children-5844"><span class="linenos">5844</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-5845"><a href="#replace_children-5845"><span class="linenos">5845</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-5846"><a href="#replace_children-5846"><span class="linenos">5846</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-5847"><a href="#replace_children-5847"><span class="linenos">5847</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-5848"><a href="#replace_children-5848"><span class="linenos">5848</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-5849"><a href="#replace_children-5849"><span class="linenos">5849</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-5850"><a href="#replace_children-5850"><span class="linenos">5850</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="replace_children-5851"><a href="#replace_children-5851"><span class="linenos">5851</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-5852"><a href="#replace_children-5852"><span class="linenos">5852</span></a>
-</span><span id="replace_children-5853"><a href="#replace_children-5853"><span class="linenos">5853</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-6011"><a href="#replace_children-6011"><span class="linenos">6011</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">Expression</span><span class="p">,</span> <span class="n">fun</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">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="replace_children-6012"><a href="#replace_children-6012"><span class="linenos">6012</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="replace_children-6013"><a href="#replace_children-6013"><span class="linenos">6013</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-6014"><a href="#replace_children-6014"><span class="linenos">6014</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="replace_children-6015"><a href="#replace_children-6015"><span class="linenos">6015</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-6016"><a href="#replace_children-6016"><span class="linenos">6016</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-6017"><a href="#replace_children-6017"><span class="linenos">6017</span></a>
+</span><span id="replace_children-6018"><a href="#replace_children-6018"><span class="linenos">6018</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-6019"><a href="#replace_children-6019"><span class="linenos">6019</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="replace_children-6020"><a href="#replace_children-6020"><span class="linenos">6020</span></a>
+</span><span id="replace_children-6021"><a href="#replace_children-6021"><span class="linenos">6021</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-6022"><a href="#replace_children-6022"><span class="linenos">6022</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-6023"><a href="#replace_children-6023"><span class="linenos">6023</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-6024"><a href="#replace_children-6024"><span class="linenos">6024</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-6025"><a href="#replace_children-6025"><span class="linenos">6025</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-6026"><a href="#replace_children-6026"><span class="linenos">6026</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-6027"><a href="#replace_children-6027"><span class="linenos">6027</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="replace_children-6028"><a href="#replace_children-6028"><span class="linenos">6028</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-6029"><a href="#replace_children-6029"><span class="linenos">6029</span></a>
+</span><span id="replace_children-6030"><a href="#replace_children-6030"><span class="linenos">6030</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>
@@ -70799,27 +73000,27 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#column_table_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="column_table_names-5856"><a href="#column_table_names-5856"><span class="linenos">5856</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 class="n">Expression</span><span class="p">,</span> <span class="n">exclude</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="column_table_names-5857"><a href="#column_table_names-5857"><span class="linenos">5857</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="column_table_names-5858"><a href="#column_table_names-5858"><span class="linenos">5858</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
-</span><span id="column_table_names-5859"><a href="#column_table_names-5859"><span class="linenos">5859</span></a>
-</span><span id="column_table_names-5860"><a href="#column_table_names-5860"><span class="linenos">5860</span></a><span class="sd"> Example:</span>
-</span><span id="column_table_names-5861"><a href="#column_table_names-5861"><span class="linenos">5861</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="column_table_names-5862"><a href="#column_table_names-5862"><span class="linenos">5862</span></a><span class="sd"> &gt;&gt;&gt; sorted(column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;)))</span>
-</span><span id="column_table_names-5863"><a href="#column_table_names-5863"><span class="linenos">5863</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
-</span><span id="column_table_names-5864"><a href="#column_table_names-5864"><span class="linenos">5864</span></a>
-</span><span id="column_table_names-5865"><a href="#column_table_names-5865"><span class="linenos">5865</span></a><span class="sd"> Args:</span>
-</span><span id="column_table_names-5866"><a href="#column_table_names-5866"><span class="linenos">5866</span></a><span class="sd"> expression: expression to find table names.</span>
-</span><span id="column_table_names-5867"><a href="#column_table_names-5867"><span class="linenos">5867</span></a><span class="sd"> exclude: a table name to exclude</span>
-</span><span id="column_table_names-5868"><a href="#column_table_names-5868"><span class="linenos">5868</span></a>
-</span><span id="column_table_names-5869"><a href="#column_table_names-5869"><span class="linenos">5869</span></a><span class="sd"> Returns:</span>
-</span><span id="column_table_names-5870"><a href="#column_table_names-5870"><span class="linenos">5870</span></a><span class="sd"> A list of unique names.</span>
-</span><span id="column_table_names-5871"><a href="#column_table_names-5871"><span class="linenos">5871</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="column_table_names-5872"><a href="#column_table_names-5872"><span class="linenos">5872</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="column_table_names-5873"><a href="#column_table_names-5873"><span class="linenos">5873</span></a> <span class="n">table</span>
-</span><span id="column_table_names-5874"><a href="#column_table_names-5874"><span class="linenos">5874</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</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="column_table_names-5875"><a href="#column_table_names-5875"><span class="linenos">5875</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">and</span> <span class="n">table</span> <span class="o">!=</span> <span class="n">exclude</span>
-</span><span id="column_table_names-5876"><a href="#column_table_names-5876"><span class="linenos">5876</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="column_table_names-6033"><a href="#column_table_names-6033"><span class="linenos">6033</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 class="n">Expression</span><span class="p">,</span> <span class="n">exclude</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="column_table_names-6034"><a href="#column_table_names-6034"><span class="linenos">6034</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="column_table_names-6035"><a href="#column_table_names-6035"><span class="linenos">6035</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
+</span><span id="column_table_names-6036"><a href="#column_table_names-6036"><span class="linenos">6036</span></a>
+</span><span id="column_table_names-6037"><a href="#column_table_names-6037"><span class="linenos">6037</span></a><span class="sd"> Example:</span>
+</span><span id="column_table_names-6038"><a href="#column_table_names-6038"><span class="linenos">6038</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="column_table_names-6039"><a href="#column_table_names-6039"><span class="linenos">6039</span></a><span class="sd"> &gt;&gt;&gt; sorted(column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;)))</span>
+</span><span id="column_table_names-6040"><a href="#column_table_names-6040"><span class="linenos">6040</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</span><span id="column_table_names-6041"><a href="#column_table_names-6041"><span class="linenos">6041</span></a>
+</span><span id="column_table_names-6042"><a href="#column_table_names-6042"><span class="linenos">6042</span></a><span class="sd"> Args:</span>
+</span><span id="column_table_names-6043"><a href="#column_table_names-6043"><span class="linenos">6043</span></a><span class="sd"> expression: expression to find table names.</span>
+</span><span id="column_table_names-6044"><a href="#column_table_names-6044"><span class="linenos">6044</span></a><span class="sd"> exclude: a table name to exclude</span>
+</span><span id="column_table_names-6045"><a href="#column_table_names-6045"><span class="linenos">6045</span></a>
+</span><span id="column_table_names-6046"><a href="#column_table_names-6046"><span class="linenos">6046</span></a><span class="sd"> Returns:</span>
+</span><span id="column_table_names-6047"><a href="#column_table_names-6047"><span class="linenos">6047</span></a><span class="sd"> A list of unique names.</span>
+</span><span id="column_table_names-6048"><a href="#column_table_names-6048"><span class="linenos">6048</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="column_table_names-6049"><a href="#column_table_names-6049"><span class="linenos">6049</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="column_table_names-6050"><a href="#column_table_names-6050"><span class="linenos">6050</span></a> <span class="n">table</span>
+</span><span id="column_table_names-6051"><a href="#column_table_names-6051"><span class="linenos">6051</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</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="column_table_names-6052"><a href="#column_table_names-6052"><span class="linenos">6052</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">and</span> <span class="n">table</span> <span class="o">!=</span> <span class="n">exclude</span>
+</span><span id="column_table_names-6053"><a href="#column_table_names-6053"><span class="linenos">6053</span></a> <span class="p">}</span>
</span></pre></div>
@@ -70863,33 +73064,33 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#table_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="table_name-5879"><a href="#table_name-5879"><span class="linenos">5879</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="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="table_name-5880"><a href="#table_name-5880"><span class="linenos">5880</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-5881"><a href="#table_name-5881"><span class="linenos">5881</span></a>
-</span><span id="table_name-5882"><a href="#table_name-5882"><span class="linenos">5882</span></a><span class="sd"> Args:</span>
-</span><span id="table_name-5883"><a href="#table_name-5883"><span class="linenos">5883</span></a><span class="sd"> table: Table expression node or string.</span>
-</span><span id="table_name-5884"><a href="#table_name-5884"><span class="linenos">5884</span></a><span class="sd"> dialect: The dialect to generate the table name for.</span>
-</span><span id="table_name-5885"><a href="#table_name-5885"><span class="linenos">5885</span></a>
-</span><span id="table_name-5886"><a href="#table_name-5886"><span class="linenos">5886</span></a><span class="sd"> Examples:</span>
-</span><span id="table_name-5887"><a href="#table_name-5887"><span class="linenos">5887</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="table_name-5888"><a href="#table_name-5888"><span class="linenos">5888</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-5889"><a href="#table_name-5889"><span class="linenos">5889</span></a><span class="sd"> &#39;a.b.c&#39;</span>
-</span><span id="table_name-5890"><a href="#table_name-5890"><span class="linenos">5890</span></a>
-</span><span id="table_name-5891"><a href="#table_name-5891"><span class="linenos">5891</span></a><span class="sd"> Returns:</span>
-</span><span id="table_name-5892"><a href="#table_name-5892"><span class="linenos">5892</span></a><span class="sd"> The table name.</span>
-</span><span id="table_name-5893"><a href="#table_name-5893"><span class="linenos">5893</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="table_name-5894"><a href="#table_name-5894"><span class="linenos">5894</span></a>
-</span><span id="table_name-5895"><a href="#table_name-5895"><span class="linenos">5895</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-5896"><a href="#table_name-5896"><span class="linenos">5896</span></a>
-</span><span id="table_name-5897"><a href="#table_name-5897"><span class="linenos">5897</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-5898"><a href="#table_name-5898"><span class="linenos">5898</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-5899"><a href="#table_name-5899"><span class="linenos">5899</span></a>
-</span><span id="table_name-5900"><a href="#table_name-5900"><span class="linenos">5900</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-5901"><a href="#table_name-5901"><span class="linenos">5901</span></a> <span class="n">part</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="n">dialect</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="table_name-5902"><a href="#table_name-5902"><span class="linenos">5902</span></a> <span class="k">if</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">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="table_name-5903"><a href="#table_name-5903"><span class="linenos">5903</span></a> <span class="k">else</span> <span class="n">part</span><span class="o">.</span><span class="n">name</span>
-</span><span id="table_name-5904"><a href="#table_name-5904"><span class="linenos">5904</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span>
-</span><span id="table_name-5905"><a href="#table_name-5905"><span class="linenos">5905</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="table_name-6056"><a href="#table_name-6056"><span class="linenos">6056</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="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="table_name-6057"><a href="#table_name-6057"><span class="linenos">6057</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-6058"><a href="#table_name-6058"><span class="linenos">6058</span></a>
+</span><span id="table_name-6059"><a href="#table_name-6059"><span class="linenos">6059</span></a><span class="sd"> Args:</span>
+</span><span id="table_name-6060"><a href="#table_name-6060"><span class="linenos">6060</span></a><span class="sd"> table: Table expression node or string.</span>
+</span><span id="table_name-6061"><a href="#table_name-6061"><span class="linenos">6061</span></a><span class="sd"> dialect: The dialect to generate the table name for.</span>
+</span><span id="table_name-6062"><a href="#table_name-6062"><span class="linenos">6062</span></a>
+</span><span id="table_name-6063"><a href="#table_name-6063"><span class="linenos">6063</span></a><span class="sd"> Examples:</span>
+</span><span id="table_name-6064"><a href="#table_name-6064"><span class="linenos">6064</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="table_name-6065"><a href="#table_name-6065"><span class="linenos">6065</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-6066"><a href="#table_name-6066"><span class="linenos">6066</span></a><span class="sd"> &#39;a.b.c&#39;</span>
+</span><span id="table_name-6067"><a href="#table_name-6067"><span class="linenos">6067</span></a>
+</span><span id="table_name-6068"><a href="#table_name-6068"><span class="linenos">6068</span></a><span class="sd"> Returns:</span>
+</span><span id="table_name-6069"><a href="#table_name-6069"><span class="linenos">6069</span></a><span class="sd"> The table name.</span>
+</span><span id="table_name-6070"><a href="#table_name-6070"><span class="linenos">6070</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="table_name-6071"><a href="#table_name-6071"><span class="linenos">6071</span></a>
+</span><span id="table_name-6072"><a href="#table_name-6072"><span class="linenos">6072</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-6073"><a href="#table_name-6073"><span class="linenos">6073</span></a>
+</span><span id="table_name-6074"><a href="#table_name-6074"><span class="linenos">6074</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-6075"><a href="#table_name-6075"><span class="linenos">6075</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-6076"><a href="#table_name-6076"><span class="linenos">6076</span></a>
+</span><span id="table_name-6077"><a href="#table_name-6077"><span class="linenos">6077</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-6078"><a href="#table_name-6078"><span class="linenos">6078</span></a> <span class="n">part</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="n">dialect</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="table_name-6079"><a href="#table_name-6079"><span class="linenos">6079</span></a> <span class="k">if</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">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="table_name-6080"><a href="#table_name-6080"><span class="linenos">6080</span></a> <span class="k">else</span> <span class="n">part</span><span class="o">.</span><span class="n">name</span>
+</span><span id="table_name-6081"><a href="#table_name-6081"><span class="linenos">6081</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span>
+</span><span id="table_name-6082"><a href="#table_name-6082"><span class="linenos">6082</span></a> <span class="p">)</span>
</span></pre></div>
@@ -70933,34 +73134,34 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#replace_tables"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_tables-5908"><a href="#replace_tables-5908"><span class="linenos">5908</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">E</span><span class="p">,</span> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">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="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">E</span><span class="p">:</span>
-</span><span id="replace_tables-5909"><a href="#replace_tables-5909"><span class="linenos">5909</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-5910"><a href="#replace_tables-5910"><span class="linenos">5910</span></a>
-</span><span id="replace_tables-5911"><a href="#replace_tables-5911"><span class="linenos">5911</span></a><span class="sd"> Args:</span>
-</span><span id="replace_tables-5912"><a href="#replace_tables-5912"><span class="linenos">5912</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
-</span><span id="replace_tables-5913"><a href="#replace_tables-5913"><span class="linenos">5913</span></a><span class="sd"> mapping: mapping of table names.</span>
-</span><span id="replace_tables-5914"><a href="#replace_tables-5914"><span class="linenos">5914</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="replace_tables-5915"><a href="#replace_tables-5915"><span class="linenos">5915</span></a>
-</span><span id="replace_tables-5916"><a href="#replace_tables-5916"><span class="linenos">5916</span></a><span class="sd"> Examples:</span>
-</span><span id="replace_tables-5917"><a href="#replace_tables-5917"><span class="linenos">5917</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="replace_tables-5918"><a href="#replace_tables-5918"><span class="linenos">5918</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-5919"><a href="#replace_tables-5919"><span class="linenos">5919</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
-</span><span id="replace_tables-5920"><a href="#replace_tables-5920"><span class="linenos">5920</span></a>
-</span><span id="replace_tables-5921"><a href="#replace_tables-5921"><span class="linenos">5921</span></a><span class="sd"> Returns:</span>
-</span><span id="replace_tables-5922"><a href="#replace_tables-5922"><span class="linenos">5922</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="replace_tables-5923"><a href="#replace_tables-5923"><span class="linenos">5923</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="replace_tables-5924"><a href="#replace_tables-5924"><span class="linenos">5924</span></a>
-</span><span id="replace_tables-5925"><a href="#replace_tables-5925"><span class="linenos">5925</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 class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="replace_tables-5926"><a href="#replace_tables-5926"><span class="linenos">5926</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-5927"><a href="#replace_tables-5927"><span class="linenos">5927</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-5928"><a href="#replace_tables-5928"><span class="linenos">5928</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="replace_tables-5929"><a href="#replace_tables-5929"><span class="linenos">5929</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
-</span><span id="replace_tables-5930"><a href="#replace_tables-5930"><span class="linenos">5930</span></a> <span class="n">new_name</span><span class="p">,</span>
-</span><span id="replace_tables-5931"><a href="#replace_tables-5931"><span class="linenos">5931</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-5932"><a href="#replace_tables-5932"><span class="linenos">5932</span></a> <span class="p">)</span>
-</span><span id="replace_tables-5933"><a href="#replace_tables-5933"><span class="linenos">5933</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="replace_tables-5934"><a href="#replace_tables-5934"><span class="linenos">5934</span></a>
-</span><span id="replace_tables-5935"><a href="#replace_tables-5935"><span class="linenos">5935</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 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="replace_tables-6085"><a href="#replace_tables-6085"><span class="linenos">6085</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">E</span><span class="p">,</span> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">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="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">E</span><span class="p">:</span>
+</span><span id="replace_tables-6086"><a href="#replace_tables-6086"><span class="linenos">6086</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-6087"><a href="#replace_tables-6087"><span class="linenos">6087</span></a>
+</span><span id="replace_tables-6088"><a href="#replace_tables-6088"><span class="linenos">6088</span></a><span class="sd"> Args:</span>
+</span><span id="replace_tables-6089"><a href="#replace_tables-6089"><span class="linenos">6089</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
+</span><span id="replace_tables-6090"><a href="#replace_tables-6090"><span class="linenos">6090</span></a><span class="sd"> mapping: mapping of table names.</span>
+</span><span id="replace_tables-6091"><a href="#replace_tables-6091"><span class="linenos">6091</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="replace_tables-6092"><a href="#replace_tables-6092"><span class="linenos">6092</span></a>
+</span><span id="replace_tables-6093"><a href="#replace_tables-6093"><span class="linenos">6093</span></a><span class="sd"> Examples:</span>
+</span><span id="replace_tables-6094"><a href="#replace_tables-6094"><span class="linenos">6094</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="replace_tables-6095"><a href="#replace_tables-6095"><span class="linenos">6095</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-6096"><a href="#replace_tables-6096"><span class="linenos">6096</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
+</span><span id="replace_tables-6097"><a href="#replace_tables-6097"><span class="linenos">6097</span></a>
+</span><span id="replace_tables-6098"><a href="#replace_tables-6098"><span class="linenos">6098</span></a><span class="sd"> Returns:</span>
+</span><span id="replace_tables-6099"><a href="#replace_tables-6099"><span class="linenos">6099</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="replace_tables-6100"><a href="#replace_tables-6100"><span class="linenos">6100</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="replace_tables-6101"><a href="#replace_tables-6101"><span class="linenos">6101</span></a>
+</span><span id="replace_tables-6102"><a href="#replace_tables-6102"><span class="linenos">6102</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 class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="replace_tables-6103"><a href="#replace_tables-6103"><span class="linenos">6103</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-6104"><a href="#replace_tables-6104"><span class="linenos">6104</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-6105"><a href="#replace_tables-6105"><span class="linenos">6105</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
+</span><span id="replace_tables-6106"><a href="#replace_tables-6106"><span class="linenos">6106</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
+</span><span id="replace_tables-6107"><a href="#replace_tables-6107"><span class="linenos">6107</span></a> <span class="n">new_name</span><span class="p">,</span>
+</span><span id="replace_tables-6108"><a href="#replace_tables-6108"><span class="linenos">6108</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-6109"><a href="#replace_tables-6109"><span class="linenos">6109</span></a> <span class="p">)</span>
+</span><span id="replace_tables-6110"><a href="#replace_tables-6110"><span class="linenos">6110</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="replace_tables-6111"><a href="#replace_tables-6111"><span class="linenos">6111</span></a>
+</span><span id="replace_tables-6112"><a href="#replace_tables-6112"><span class="linenos">6112</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 class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
</span></pre></div>
@@ -71005,40 +73206,40 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#replace_placeholders"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_placeholders-5938"><a href="#replace_placeholders-5938"><span class="linenos">5938</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="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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="replace_placeholders-5939"><a href="#replace_placeholders-5939"><span class="linenos">5939</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
-</span><span id="replace_placeholders-5940"><a href="#replace_placeholders-5940"><span class="linenos">5940</span></a>
-</span><span id="replace_placeholders-5941"><a href="#replace_placeholders-5941"><span class="linenos">5941</span></a><span class="sd"> Args:</span>
-</span><span id="replace_placeholders-5942"><a href="#replace_placeholders-5942"><span class="linenos">5942</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
-</span><span id="replace_placeholders-5943"><a href="#replace_placeholders-5943"><span class="linenos">5943</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
-</span><span id="replace_placeholders-5944"><a href="#replace_placeholders-5944"><span class="linenos">5944</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
-</span><span id="replace_placeholders-5945"><a href="#replace_placeholders-5945"><span class="linenos">5945</span></a>
-</span><span id="replace_placeholders-5946"><a href="#replace_placeholders-5946"><span class="linenos">5946</span></a><span class="sd"> Examples:</span>
-</span><span id="replace_placeholders-5947"><a href="#replace_placeholders-5947"><span class="linenos">5947</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="replace_placeholders-5948"><a href="#replace_placeholders-5948"><span class="linenos">5948</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
-</span><span id="replace_placeholders-5949"><a href="#replace_placeholders-5949"><span class="linenos">5949</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
-</span><span id="replace_placeholders-5950"><a href="#replace_placeholders-5950"><span class="linenos">5950</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-5951"><a href="#replace_placeholders-5951"><span class="linenos">5951</span></a><span class="sd"> ... ).sql()</span>
-</span><span id="replace_placeholders-5952"><a href="#replace_placeholders-5952"><span class="linenos">5952</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
-</span><span id="replace_placeholders-5953"><a href="#replace_placeholders-5953"><span class="linenos">5953</span></a>
-</span><span id="replace_placeholders-5954"><a href="#replace_placeholders-5954"><span class="linenos">5954</span></a><span class="sd"> Returns:</span>
-</span><span id="replace_placeholders-5955"><a href="#replace_placeholders-5955"><span class="linenos">5955</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="replace_placeholders-5956"><a href="#replace_placeholders-5956"><span class="linenos">5956</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="replace_placeholders-5957"><a href="#replace_placeholders-5957"><span class="linenos">5957</span></a>
-</span><span id="replace_placeholders-5958"><a href="#replace_placeholders-5958"><span class="linenos">5958</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">Expression</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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="replace_placeholders-5959"><a href="#replace_placeholders-5959"><span class="linenos">5959</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-5960"><a href="#replace_placeholders-5960"><span class="linenos">5960</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-5961"><a href="#replace_placeholders-5961"><span class="linenos">5961</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-5962"><a href="#replace_placeholders-5962"><span class="linenos">5962</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="replace_placeholders-5963"><a href="#replace_placeholders-5963"><span class="linenos">5963</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-5964"><a href="#replace_placeholders-5964"><span class="linenos">5964</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="replace_placeholders-5965"><a href="#replace_placeholders-5965"><span class="linenos">5965</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="replace_placeholders-5966"><a href="#replace_placeholders-5966"><span class="linenos">5966</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-5967"><a href="#replace_placeholders-5967"><span class="linenos">5967</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="replace_placeholders-5968"><a href="#replace_placeholders-5968"><span class="linenos">5968</span></a> <span class="k">pass</span>
-</span><span id="replace_placeholders-5969"><a href="#replace_placeholders-5969"><span class="linenos">5969</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="replace_placeholders-5970"><a href="#replace_placeholders-5970"><span class="linenos">5970</span></a>
-</span><span id="replace_placeholders-5971"><a href="#replace_placeholders-5971"><span class="linenos">5971</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-6115"><a href="#replace_placeholders-6115"><span class="linenos">6115</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="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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="replace_placeholders-6116"><a href="#replace_placeholders-6116"><span class="linenos">6116</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
+</span><span id="replace_placeholders-6117"><a href="#replace_placeholders-6117"><span class="linenos">6117</span></a>
+</span><span id="replace_placeholders-6118"><a href="#replace_placeholders-6118"><span class="linenos">6118</span></a><span class="sd"> Args:</span>
+</span><span id="replace_placeholders-6119"><a href="#replace_placeholders-6119"><span class="linenos">6119</span></a><span class="sd"> expression: expression node to be transformed and replaced.</span>
+</span><span id="replace_placeholders-6120"><a href="#replace_placeholders-6120"><span class="linenos">6120</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
+</span><span id="replace_placeholders-6121"><a href="#replace_placeholders-6121"><span class="linenos">6121</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
+</span><span id="replace_placeholders-6122"><a href="#replace_placeholders-6122"><span class="linenos">6122</span></a>
+</span><span id="replace_placeholders-6123"><a href="#replace_placeholders-6123"><span class="linenos">6123</span></a><span class="sd"> Examples:</span>
+</span><span id="replace_placeholders-6124"><a href="#replace_placeholders-6124"><span class="linenos">6124</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="replace_placeholders-6125"><a href="#replace_placeholders-6125"><span class="linenos">6125</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
+</span><span id="replace_placeholders-6126"><a href="#replace_placeholders-6126"><span class="linenos">6126</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
+</span><span id="replace_placeholders-6127"><a href="#replace_placeholders-6127"><span class="linenos">6127</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-6128"><a href="#replace_placeholders-6128"><span class="linenos">6128</span></a><span class="sd"> ... ).sql()</span>
+</span><span id="replace_placeholders-6129"><a href="#replace_placeholders-6129"><span class="linenos">6129</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
+</span><span id="replace_placeholders-6130"><a href="#replace_placeholders-6130"><span class="linenos">6130</span></a>
+</span><span id="replace_placeholders-6131"><a href="#replace_placeholders-6131"><span class="linenos">6131</span></a><span class="sd"> Returns:</span>
+</span><span id="replace_placeholders-6132"><a href="#replace_placeholders-6132"><span class="linenos">6132</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="replace_placeholders-6133"><a href="#replace_placeholders-6133"><span class="linenos">6133</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="replace_placeholders-6134"><a href="#replace_placeholders-6134"><span class="linenos">6134</span></a>
+</span><span id="replace_placeholders-6135"><a href="#replace_placeholders-6135"><span class="linenos">6135</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">Expression</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 class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="replace_placeholders-6136"><a href="#replace_placeholders-6136"><span class="linenos">6136</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-6137"><a href="#replace_placeholders-6137"><span class="linenos">6137</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-6138"><a href="#replace_placeholders-6138"><span class="linenos">6138</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-6139"><a href="#replace_placeholders-6139"><span class="linenos">6139</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
+</span><span id="replace_placeholders-6140"><a href="#replace_placeholders-6140"><span class="linenos">6140</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-6141"><a href="#replace_placeholders-6141"><span class="linenos">6141</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="replace_placeholders-6142"><a href="#replace_placeholders-6142"><span class="linenos">6142</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="replace_placeholders-6143"><a href="#replace_placeholders-6143"><span class="linenos">6143</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-6144"><a href="#replace_placeholders-6144"><span class="linenos">6144</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="replace_placeholders-6145"><a href="#replace_placeholders-6145"><span class="linenos">6145</span></a> <span class="k">pass</span>
+</span><span id="replace_placeholders-6146"><a href="#replace_placeholders-6146"><span class="linenos">6146</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="replace_placeholders-6147"><a href="#replace_placeholders-6147"><span class="linenos">6147</span></a>
+</span><span id="replace_placeholders-6148"><a href="#replace_placeholders-6148"><span class="linenos">6148</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>
@@ -71086,39 +73287,39 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#expand"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="expand-5974"><a href="#expand-5974"><span class="linenos">5974</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
-</span><span id="expand-5975"><a href="#expand-5975"><span class="linenos">5975</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-5976"><a href="#expand-5976"><span class="linenos">5976</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="expand-5977"><a href="#expand-5977"><span class="linenos">5977</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-5978"><a href="#expand-5978"><span class="linenos">5978</span></a>
-</span><span id="expand-5979"><a href="#expand-5979"><span class="linenos">5979</span></a><span class="sd"> Examples:</span>
-</span><span id="expand-5980"><a href="#expand-5980"><span class="linenos">5980</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="expand-5981"><a href="#expand-5981"><span class="linenos">5981</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-5982"><a href="#expand-5982"><span class="linenos">5982</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
-</span><span id="expand-5983"><a href="#expand-5983"><span class="linenos">5983</span></a>
-</span><span id="expand-5984"><a href="#expand-5984"><span class="linenos">5984</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-5985"><a href="#expand-5985"><span class="linenos">5985</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-5986"><a href="#expand-5986"><span class="linenos">5986</span></a>
-</span><span id="expand-5987"><a href="#expand-5987"><span class="linenos">5987</span></a><span class="sd"> Args:</span>
-</span><span id="expand-5988"><a href="#expand-5988"><span class="linenos">5988</span></a><span class="sd"> expression: The expression to expand.</span>
-</span><span id="expand-5989"><a href="#expand-5989"><span class="linenos">5989</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
-</span><span id="expand-5990"><a href="#expand-5990"><span class="linenos">5990</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
-</span><span id="expand-5991"><a href="#expand-5991"><span class="linenos">5991</span></a>
-</span><span id="expand-5992"><a href="#expand-5992"><span class="linenos">5992</span></a><span class="sd"> Returns:</span>
-</span><span id="expand-5993"><a href="#expand-5993"><span class="linenos">5993</span></a><span class="sd"> The transformed expression.</span>
-</span><span id="expand-5994"><a href="#expand-5994"><span class="linenos">5994</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="expand-5995"><a href="#expand-5995"><span class="linenos">5995</span></a>
-</span><span id="expand-5996"><a href="#expand-5996"><span class="linenos">5996</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-5997"><a href="#expand-5997"><span class="linenos">5997</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-5998"><a href="#expand-5998"><span class="linenos">5998</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-5999"><a href="#expand-5999"><span class="linenos">5999</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-6000"><a href="#expand-6000"><span class="linenos">6000</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
-</span><span id="expand-6001"><a href="#expand-6001"><span class="linenos">6001</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-6002"><a href="#expand-6002"><span class="linenos">6002</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-6003"><a href="#expand-6003"><span class="linenos">6003</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-6004"><a href="#expand-6004"><span class="linenos">6004</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="expand-6005"><a href="#expand-6005"><span class="linenos">6005</span></a>
-</span><span id="expand-6006"><a href="#expand-6006"><span class="linenos">6006</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-6151"><a href="#expand-6151"><span class="linenos">6151</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
+</span><span id="expand-6152"><a href="#expand-6152"><span class="linenos">6152</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-6153"><a href="#expand-6153"><span class="linenos">6153</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="expand-6154"><a href="#expand-6154"><span class="linenos">6154</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-6155"><a href="#expand-6155"><span class="linenos">6155</span></a>
+</span><span id="expand-6156"><a href="#expand-6156"><span class="linenos">6156</span></a><span class="sd"> Examples:</span>
+</span><span id="expand-6157"><a href="#expand-6157"><span class="linenos">6157</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="expand-6158"><a href="#expand-6158"><span class="linenos">6158</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-6159"><a href="#expand-6159"><span class="linenos">6159</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
+</span><span id="expand-6160"><a href="#expand-6160"><span class="linenos">6160</span></a>
+</span><span id="expand-6161"><a href="#expand-6161"><span class="linenos">6161</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-6162"><a href="#expand-6162"><span class="linenos">6162</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-6163"><a href="#expand-6163"><span class="linenos">6163</span></a>
+</span><span id="expand-6164"><a href="#expand-6164"><span class="linenos">6164</span></a><span class="sd"> Args:</span>
+</span><span id="expand-6165"><a href="#expand-6165"><span class="linenos">6165</span></a><span class="sd"> expression: The expression to expand.</span>
+</span><span id="expand-6166"><a href="#expand-6166"><span class="linenos">6166</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
+</span><span id="expand-6167"><a href="#expand-6167"><span class="linenos">6167</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
+</span><span id="expand-6168"><a href="#expand-6168"><span class="linenos">6168</span></a>
+</span><span id="expand-6169"><a href="#expand-6169"><span class="linenos">6169</span></a><span class="sd"> Returns:</span>
+</span><span id="expand-6170"><a href="#expand-6170"><span class="linenos">6170</span></a><span class="sd"> The transformed expression.</span>
+</span><span id="expand-6171"><a href="#expand-6171"><span class="linenos">6171</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="expand-6172"><a href="#expand-6172"><span class="linenos">6172</span></a>
+</span><span id="expand-6173"><a href="#expand-6173"><span class="linenos">6173</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-6174"><a href="#expand-6174"><span class="linenos">6174</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-6175"><a href="#expand-6175"><span class="linenos">6175</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-6176"><a href="#expand-6176"><span class="linenos">6176</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-6177"><a href="#expand-6177"><span class="linenos">6177</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
+</span><span id="expand-6178"><a href="#expand-6178"><span class="linenos">6178</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-6179"><a href="#expand-6179"><span class="linenos">6179</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-6180"><a href="#expand-6180"><span class="linenos">6180</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-6181"><a href="#expand-6181"><span class="linenos">6181</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="expand-6182"><a href="#expand-6182"><span class="linenos">6182</span></a>
+</span><span id="expand-6183"><a href="#expand-6183"><span class="linenos">6183</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>
@@ -71169,51 +73370,51 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="func-6009"><a href="#func-6009"><span class="linenos">6009</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-6010"><a href="#func-6010"><span class="linenos">6010</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="func-6011"><a href="#func-6011"><span class="linenos">6011</span></a><span class="sd"> Returns a Func expression.</span>
-</span><span id="func-6012"><a href="#func-6012"><span class="linenos">6012</span></a>
-</span><span id="func-6013"><a href="#func-6013"><span class="linenos">6013</span></a><span class="sd"> Examples:</span>
-</span><span id="func-6014"><a href="#func-6014"><span class="linenos">6014</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
-</span><span id="func-6015"><a href="#func-6015"><span class="linenos">6015</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
-</span><span id="func-6016"><a href="#func-6016"><span class="linenos">6016</span></a>
-</span><span id="func-6017"><a href="#func-6017"><span class="linenos">6017</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-6018"><a href="#func-6018"><span class="linenos">6018</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
-</span><span id="func-6019"><a href="#func-6019"><span class="linenos">6019</span></a>
-</span><span id="func-6020"><a href="#func-6020"><span class="linenos">6020</span></a><span class="sd"> Args:</span>
-</span><span id="func-6021"><a href="#func-6021"><span class="linenos">6021</span></a><span class="sd"> name: the name of the function to build.</span>
-</span><span id="func-6022"><a href="#func-6022"><span class="linenos">6022</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
-</span><span id="func-6023"><a href="#func-6023"><span class="linenos">6023</span></a><span class="sd"> dialect: the source dialect.</span>
-</span><span id="func-6024"><a href="#func-6024"><span class="linenos">6024</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
-</span><span id="func-6025"><a href="#func-6025"><span class="linenos">6025</span></a>
-</span><span id="func-6026"><a href="#func-6026"><span class="linenos">6026</span></a><span class="sd"> Note:</span>
-</span><span id="func-6027"><a href="#func-6027"><span class="linenos">6027</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
-</span><span id="func-6028"><a href="#func-6028"><span class="linenos">6028</span></a>
-</span><span id="func-6029"><a href="#func-6029"><span class="linenos">6029</span></a><span class="sd"> Returns:</span>
-</span><span id="func-6030"><a href="#func-6030"><span class="linenos">6030</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-6031"><a href="#func-6031"><span class="linenos">6031</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
-</span><span id="func-6032"><a href="#func-6032"><span class="linenos">6032</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="func-6033"><a href="#func-6033"><span class="linenos">6033</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-6034"><a href="#func-6034"><span class="linenos">6034</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-6035"><a href="#func-6035"><span class="linenos">6035</span></a>
-</span><span id="func-6036"><a href="#func-6036"><span class="linenos">6036</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-6037"><a href="#func-6037"><span class="linenos">6037</span></a>
-</span><span id="func-6038"><a href="#func-6038"><span class="linenos">6038</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-6039"><a href="#func-6039"><span class="linenos">6039</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-6040"><a href="#func-6040"><span class="linenos">6040</span></a>
-</span><span id="func-6041"><a href="#func-6041"><span class="linenos">6041</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-6042"><a href="#func-6042"><span class="linenos">6042</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-6043"><a href="#func-6043"><span class="linenos">6043</span></a>
-</span><span id="func-6044"><a href="#func-6044"><span class="linenos">6044</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
-</span><span id="func-6045"><a href="#func-6045"><span class="linenos">6045</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-6046"><a href="#func-6046"><span class="linenos">6046</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="func-6047"><a href="#func-6047"><span class="linenos">6047</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-6048"><a href="#func-6048"><span class="linenos">6048</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-6049"><a href="#func-6049"><span class="linenos">6049</span></a>
-</span><span id="func-6050"><a href="#func-6050"><span class="linenos">6050</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-6051"><a href="#func-6051"><span class="linenos">6051</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-6052"><a href="#func-6052"><span class="linenos">6052</span></a>
-</span><span id="func-6053"><a href="#func-6053"><span class="linenos">6053</span></a> <span class="k">return</span> <span class="n">function</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="func-6186"><a href="#func-6186"><span class="linenos">6186</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-6187"><a href="#func-6187"><span class="linenos">6187</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="func-6188"><a href="#func-6188"><span class="linenos">6188</span></a><span class="sd"> Returns a Func expression.</span>
+</span><span id="func-6189"><a href="#func-6189"><span class="linenos">6189</span></a>
+</span><span id="func-6190"><a href="#func-6190"><span class="linenos">6190</span></a><span class="sd"> Examples:</span>
+</span><span id="func-6191"><a href="#func-6191"><span class="linenos">6191</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
+</span><span id="func-6192"><a href="#func-6192"><span class="linenos">6192</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
+</span><span id="func-6193"><a href="#func-6193"><span class="linenos">6193</span></a>
+</span><span id="func-6194"><a href="#func-6194"><span class="linenos">6194</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-6195"><a href="#func-6195"><span class="linenos">6195</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
+</span><span id="func-6196"><a href="#func-6196"><span class="linenos">6196</span></a>
+</span><span id="func-6197"><a href="#func-6197"><span class="linenos">6197</span></a><span class="sd"> Args:</span>
+</span><span id="func-6198"><a href="#func-6198"><span class="linenos">6198</span></a><span class="sd"> name: the name of the function to build.</span>
+</span><span id="func-6199"><a href="#func-6199"><span class="linenos">6199</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
+</span><span id="func-6200"><a href="#func-6200"><span class="linenos">6200</span></a><span class="sd"> dialect: the source dialect.</span>
+</span><span id="func-6201"><a href="#func-6201"><span class="linenos">6201</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
+</span><span id="func-6202"><a href="#func-6202"><span class="linenos">6202</span></a>
+</span><span id="func-6203"><a href="#func-6203"><span class="linenos">6203</span></a><span class="sd"> Note:</span>
+</span><span id="func-6204"><a href="#func-6204"><span class="linenos">6204</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
+</span><span id="func-6205"><a href="#func-6205"><span class="linenos">6205</span></a>
+</span><span id="func-6206"><a href="#func-6206"><span class="linenos">6206</span></a><span class="sd"> Returns:</span>
+</span><span id="func-6207"><a href="#func-6207"><span class="linenos">6207</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-6208"><a href="#func-6208"><span class="linenos">6208</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
+</span><span id="func-6209"><a href="#func-6209"><span class="linenos">6209</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="func-6210"><a href="#func-6210"><span class="linenos">6210</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-6211"><a href="#func-6211"><span class="linenos">6211</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-6212"><a href="#func-6212"><span class="linenos">6212</span></a>
+</span><span id="func-6213"><a href="#func-6213"><span class="linenos">6213</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-6214"><a href="#func-6214"><span class="linenos">6214</span></a>
+</span><span id="func-6215"><a href="#func-6215"><span class="linenos">6215</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-6216"><a href="#func-6216"><span class="linenos">6216</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-6217"><a href="#func-6217"><span class="linenos">6217</span></a>
+</span><span id="func-6218"><a href="#func-6218"><span class="linenos">6218</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-6219"><a href="#func-6219"><span class="linenos">6219</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-6220"><a href="#func-6220"><span class="linenos">6220</span></a>
+</span><span id="func-6221"><a href="#func-6221"><span class="linenos">6221</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
+</span><span id="func-6222"><a href="#func-6222"><span class="linenos">6222</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-6223"><a href="#func-6223"><span class="linenos">6223</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="func-6224"><a href="#func-6224"><span class="linenos">6224</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-6225"><a href="#func-6225"><span class="linenos">6225</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-6226"><a href="#func-6226"><span class="linenos">6226</span></a>
+</span><span id="func-6227"><a href="#func-6227"><span class="linenos">6227</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-6228"><a href="#func-6228"><span class="linenos">6228</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-6229"><a href="#func-6229"><span class="linenos">6229</span></a>
+</span><span id="func-6230"><a href="#func-6230"><span class="linenos">6230</span></a> <span class="k">return</span> <span class="n">function</span>
</span></pre></div>
@@ -71271,11 +73472,11 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#true"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="true-6056"><a href="#true-6056"><span class="linenos">6056</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
-</span><span id="true-6057"><a href="#true-6057"><span class="linenos">6057</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="true-6058"><a href="#true-6058"><span class="linenos">6058</span></a><span class="sd"> Returns a true Boolean expression.</span>
-</span><span id="true-6059"><a href="#true-6059"><span class="linenos">6059</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="true-6060"><a href="#true-6060"><span class="linenos">6060</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-6233"><a href="#true-6233"><span class="linenos">6233</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
+</span><span id="true-6234"><a href="#true-6234"><span class="linenos">6234</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="true-6235"><a href="#true-6235"><span class="linenos">6235</span></a><span class="sd"> Returns a true Boolean expression.</span>
+</span><span id="true-6236"><a href="#true-6236"><span class="linenos">6236</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="true-6237"><a href="#true-6237"><span class="linenos">6237</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>
@@ -71295,11 +73496,11 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#false"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="false-6063"><a href="#false-6063"><span class="linenos">6063</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
-</span><span id="false-6064"><a href="#false-6064"><span class="linenos">6064</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="false-6065"><a href="#false-6065"><span class="linenos">6065</span></a><span class="sd"> Returns a false Boolean expression.</span>
-</span><span id="false-6066"><a href="#false-6066"><span class="linenos">6066</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="false-6067"><a href="#false-6067"><span class="linenos">6067</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-6240"><a href="#false-6240"><span class="linenos">6240</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Boolean</span><span class="p">:</span>
+</span><span id="false-6241"><a href="#false-6241"><span class="linenos">6241</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="false-6242"><a href="#false-6242"><span class="linenos">6242</span></a><span class="sd"> Returns a false Boolean expression.</span>
+</span><span id="false-6243"><a href="#false-6243"><span class="linenos">6243</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="false-6244"><a href="#false-6244"><span class="linenos">6244</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>
@@ -71319,11 +73520,11 @@ If either are provided then an alias is also required.</li>
</div>
<a class="headerlink" href="#null"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="null-6070"><a href="#null-6070"><span class="linenos">6070</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Null</span><span class="p">:</span>
-</span><span id="null-6071"><a href="#null-6071"><span class="linenos">6071</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="null-6072"><a href="#null-6072"><span class="linenos">6072</span></a><span class="sd"> Returns a Null expression.</span>
-</span><span id="null-6073"><a href="#null-6073"><span class="linenos">6073</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="null-6074"><a href="#null-6074"><span class="linenos">6074</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-6247"><a href="#null-6247"><span class="linenos">6247</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Null</span><span class="p">:</span>
+</span><span id="null-6248"><a href="#null-6248"><span class="linenos">6248</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="null-6249"><a href="#null-6249"><span class="linenos">6249</span></a><span class="sd"> Returns a Null expression.</span>
+</span><span id="null-6250"><a href="#null-6250"><span class="linenos">6250</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="null-6251"><a href="#null-6251"><span class="linenos">6251</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 29d3c9a..04f3a62 100644
--- a/docs/sqlglot/generator.html
+++ b/docs/sqlglot/generator.html
@@ -115,12 +115,21 @@
<a class="variable" href="#Generator.EXTRACT_ALLOWS_QUOTES">EXTRACT_ALLOWS_QUOTES</a>
</li>
<li>
+ <a class="variable" href="#Generator.TZ_TO_WITH_TIME_ZONE">TZ_TO_WITH_TIME_ZONE</a>
+ </li>
+ <li>
+ <a class="variable" href="#Generator.NVL2_SUPPORTED">NVL2_SUPPORTED</a>
+ </li>
+ <li>
<a class="variable" href="#Generator.SELECT_KINDS">SELECT_KINDS</a>
</li>
<li>
<a class="variable" href="#Generator.VALUES_AS_TABLE">VALUES_AS_TABLE</a>
</li>
<li>
+ <a class="variable" href="#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a>
+ </li>
+ <li>
<a class="variable" href="#Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -199,10 +208,7 @@
<a class="variable" href="#Generator.IDENTIFIER_END">IDENTIFIER_END</a>
</li>
<li>
- <a class="variable" href="#Generator.STRING_ESCAPE">STRING_ESCAPE</a>
- </li>
- <li>
- <a class="variable" href="#Generator.IDENTIFIER_ESCAPE">IDENTIFIER_ESCAPE</a>
+ <a class="variable" href="#Generator.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
</li>
<li>
<a class="variable" href="#Generator.BIT_START">BIT_START</a>
@@ -310,6 +316,9 @@
<a class="function" href="#Generator.columnconstraint_sql">columnconstraint_sql</a>
</li>
<li>
+ <a class="function" href="#Generator.computedcolumnconstraint_sql">computedcolumnconstraint_sql</a>
+ </li>
+ <li>
<a class="function" href="#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a>
</li>
<li>
@@ -364,7 +373,7 @@
<a class="function" href="#Generator.rawstring_sql">rawstring_sql</a>
</li>
<li>
- <a class="function" href="#Generator.datatypesize_sql">datatypesize_sql</a>
+ <a class="function" href="#Generator.datatypeparam_sql">datatypeparam_sql</a>
</li>
<li>
<a class="function" href="#Generator.datatype_sql">datatype_sql</a>
@@ -499,6 +508,9 @@
<a class="function" href="#Generator.pivot_sql">pivot_sql</a>
</li>
<li>
+ <a class="function" href="#Generator.version_sql">version_sql</a>
+ </li>
+ <li>
<a class="function" href="#Generator.tuple_sql">tuple_sql</a>
</li>
<li>
@@ -523,6 +535,12 @@
<a class="function" href="#Generator.having_sql">having_sql</a>
</li>
<li>
+ <a class="function" href="#Generator.connect_sql">connect_sql</a>
+ </li>
+ <li>
+ <a class="function" href="#Generator.prior_sql">prior_sql</a>
+ </li>
+ <li>
<a class="function" href="#Generator.join_sql">join_sql</a>
</li>
<li>
@@ -999,6 +1017,12 @@
<li>
<a class="function" href="#Generator.indexcolumnconstraint_sql">indexcolumnconstraint_sql</a>
</li>
+ <li>
+ <a class="function" href="#Generator.nvl2_sql">nvl2_sql</a>
+ </li>
+ <li>
+ <a class="function" href="#Generator.comprehension_sql">comprehension_sql</a>
+ </li>
</ul>
</li>
@@ -1038,7 +1062,7 @@
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.errors</span> <span class="kn">import</span> <span class="n">ErrorLevel</span><span class="p">,</span> <span class="n">UnsupportedError</span><span class="p">,</span> <span class="n">concat_messages</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">apply_index_offset</span><span class="p">,</span> <span class="n">csv</span><span class="p">,</span> <span class="n">seq_get</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">from</span> <span class="nn">sqlglot.time</span> <span class="kn">import</span> <span class="n">format_time</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.tokens</span> <span class="kn">import</span> <span class="n">TokenType</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.tokens</span> <span class="kn">import</span> <span class="n">Tokenizer</span><span class="p">,</span> <span class="n">TokenType</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
@@ -1091,2560 +1115,2672 @@
</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">CharacterSetColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;DEFAULT &#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;default&#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">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COLLATE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span 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;COPY GRANTS&quot;</span><span class="p">,</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DEFAULT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EncodeColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ENCODE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span 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;EXTERNAL&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">HeapProperty</span><span class="p">:</span> <span 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;HEAP&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">InlineLengthColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;INLINE LENGTH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;NO &#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">LOG&quot;</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">MaterializedProperty</span><span class="p">:</span> <span 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;MATERIALIZED&quot;</span><span class="p">,</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span 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;NO PRIMARY INDEX&quot;</span><span class="p">,</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON COMMIT </span><span class="si">{</span><span class="s1">&#39;DELETE&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;delete&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;PRESERVE&#39;</span><span class="si">}</span><span class="s2"> ROWS&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">OnUpdateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON 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">e</span><span class="p">,</span><span 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-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PathColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PATH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;MULTI&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;multi&#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">SET&quot;</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">SettingsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SETTINGS</span><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="p">(</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="si">}</span><span class="s2">&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">SqlSecurityProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SQL SECURITY </span><span class="si">{</span><span class="s1">&#39;DEFINER&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;definer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;INVOKER&#39;</span><span class="si">}</span><span class="s2">&quot;</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">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="n">e</span><span class="o">.</span><span class="n">name</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">TemporaryProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TEMPORARY&quot;</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">ToTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span 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;TRANSIENT&quot;</span><span class="p">,</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">TitleColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TITLE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UppercaseColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UPPERCASE&quot;</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAP&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</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">VolatileProperty</span><span class="p">:</span> <span 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;VOLATILE&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">WithJournalTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH JOURNAL 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">e</span><span class="p">,</span><span 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-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="c1"># Whether or not null ordering is supported in order by</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not locking reads (i.e. SELECT ... FOR UPDATE/SHARE) are supported</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">False</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED (</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="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COLLATE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span 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;COPY GRANTS&quot;</span><span class="p">,</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DEFAULT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EncodeColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ENCODE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span 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;EXTERNAL&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">HeapProperty</span><span class="p">:</span> <span 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;HEAP&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">InlineLengthColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;INLINE LENGTH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalDayToSecondSpan</span><span class="p">:</span> <span class="s2">&quot;DAY TO SECOND&quot;</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">IntervalYearToMonthSpan</span><span class="p">:</span> <span class="s2">&quot;YEAR TO MONTH&quot;</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">LanguageProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;NO &#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">LOG&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">MaterializedProperty</span><span class="p">:</span> <span 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;MATERIALIZED&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">NoPrimaryIndexProperty</span><span class="p">:</span> <span 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;NO PRIMARY INDEX&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">NonClusteredColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;NONCLUSTERED (</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="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="si">}</span><span class="s2">)&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">NotForReplicationColumnConstraint</span><span class="p">:</span> <span 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;NOT FOR REPLICATION&quot;</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">OnCommitProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON COMMIT </span><span class="si">{</span><span class="s1">&#39;DELETE&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;delete&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;PRESERVE&#39;</span><span class="si">}</span><span class="s2"> ROWS&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">OnProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</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">e</span><span class="p">,</span><span 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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON 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">e</span><span class="p">,</span><span 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-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PathColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PATH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;MULTI&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;multi&#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">SET&quot;</span><span class="p">,</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">SettingsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SETTINGS</span><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="p">(</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="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SQL SECURITY </span><span class="si">{</span><span class="s1">&#39;DEFINER&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;definer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;INVOKER&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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="n">e</span><span class="o">.</span><span class="n">name</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">TemporaryProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TEMPORARY&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">ToTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">&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">TransientProperty</span><span class="p">:</span> <span 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;TRANSIENT&quot;</span><span class="p">,</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TITLE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UppercaseColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UPPERCASE&quot;</span><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">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAP&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]),</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span 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;VOLATILE&quot;</span><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">WithJournalTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH JOURNAL 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">e</span><span class="p">,</span><span 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-101"><a href="#L-101"><span class="linenos"> 101</span></a> <span class="p">}</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a>
-</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a> <span class="c1"># Always do union distinct or union all</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="n">EXPLICIT_UNION</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="c1"># Whether or not null ordering is supported in order by</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a>
-</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="c1"># Wrap derived values in parens, usually standard but spark doesn&#39;t support it</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">WRAP_DERIVED_VALUES</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="c1"># Whether or not locking reads (i.e. SELECT ... FOR UPDATE/SHARE) are supported</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">LOCKING_READS_SUPPORTED</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="c1"># Whether or not create function uses an AS before the RETURN</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="c1"># Always do union distinct or union all</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">False</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"># Whether or not MERGE ... WHEN MATCHED BY SOURCE is allowed</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a> <span class="c1"># Wrap derived values in parens, usually standard but spark doesn&#39;t support it</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not the INTERVAL expression works only with values like &#39;1 day&#39;</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a> <span class="c1"># Whether or not create function uses an AS before the RETURN</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not the plural form of date parts like day (i.e. &quot;days&quot;) is supported in INTERVALs</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="c1"># Whether or not MERGE ... WHEN MATCHED BY SOURCE is allowed</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a>
-</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="c1"># Whether or not the TABLESAMPLE clause supports a method name, like BERNOULLI</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="c1"># Whether or not the INTERVAL expression works only with values like &#39;1 day&#39;</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">False</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="c1"># Whether or not to treat the number in TABLESAMPLE (50) as a percentage</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="c1"># Whether or not the plural form of date parts like day (i.e. &quot;days&quot;) is supported in INTERVALs</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not limit and fetch are supported (possible values: &quot;ALL&quot;, &quot;LIMIT&quot;, &quot;FETCH&quot;)</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="c1"># Whether or not the TABLESAMPLE clause supports a method name, like BERNOULLI</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">True</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"># Whether or not a table is allowed to be renamed with a db</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="c1"># Whether or not to treat the number in TABLESAMPLE (50) as a percentage</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</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="c1"># The separator for grouping sets and rollups</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="c1"># Whether or not limit and fetch are supported (possible values: &quot;ALL&quot;, &quot;LIMIT&quot;, &quot;FETCH&quot;)</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;ALL&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="c1"># The string used for creating an index on a table</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a> <span class="c1"># Whether or not a table is allowed to be renamed with a db</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not join hints should be generated</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="c1"># The separator for grouping sets and rollups</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="c1"># Whether or not table hints should be generated</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="c1"># The string used for creating an index on a table</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</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="c1"># Whether or not query hints should be generated</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="c1"># Whether or not join hints should be generated</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">True</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"># What kind of separator to use for query hints</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="c1"># Whether or not table hints should be generated</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not comparing against booleans (e.g. x IS TRUE) is supported</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a> <span class="c1"># Whether or not query hints should be generated</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a> <span class="n">QUERY_HINTS</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="c1"># Whether or not to include the &quot;SET&quot; keyword in the &quot;INSERT ... ON DUPLICATE KEY UPDATE&quot; statement</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a> <span class="c1"># What kind of separator to use for query hints</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a>
-</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="c1"># Whether or not to generate the limit as TOP &lt;value&gt; instead of LIMIT &lt;value&gt;</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="n">LIMIT_IS_TOP</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="c1"># Whether or not comparing against booleans (e.g. x IS TRUE) is supported</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="n">IS_BOOL_ALLOWED</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="c1"># Whether or not to generate INSERT INTO ... RETURNING or INSERT INTO RETURNING ...</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="c1"># Whether or not to include the &quot;SET&quot; keyword in the &quot;INSERT ... ON DUPLICATE KEY UPDATE&quot; statement</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not to generate the (+) suffix for columns used in old-style join conditions</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="c1"># Whether or not to generate the limit as TOP &lt;value&gt; instead of LIMIT &lt;value&gt;</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">False</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="c1"># Whether or not to generate an unquoted value for EXTRACT&#39;s date part argument</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a> <span class="c1"># Whether or not to generate INSERT INTO ... RETURNING or INSERT INTO RETURNING ...</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">True</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="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="n">SELECT_KINDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="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-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="c1"># Whether or not to generate the (+) suffix for columns used in old-style join conditions</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</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="c1"># Whether or not VALUES statements can be used as derived tables.</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="c1"># MySQL 5 and Redshift do not allow this, so when False, it will convert</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="c1"># SELECT * VALUES into SELECT UNION</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a>
-</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">TYPE_MAPPING</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
-</span><span id="L-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">STAR_MAPPING</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="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</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-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="c1"># Whether or not to generate an unquoted value for EXTRACT&#39;s date part argument</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">True</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="c1"># Whether or not TIMETZ / TIMESTAMPTZ will be generated using the &quot;WITH TIME ZONE&quot; syntax</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">False</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="c1"># Whether or not the NVL2 function is supported</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</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"># https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="n">SELECT_KINDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="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-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="c1"># Whether or not VALUES statements can be used as derived tables.</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a> <span class="c1"># MySQL 5 and Redshift do not allow this, so when False, it will convert</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="c1"># SELECT * VALUES into SELECT UNION</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a> <span class="n">VALUES_AS_TABLE</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="c1"># Whether or not the word COLUMN is included when adding a column with ALTER TABLE</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a>
-</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="s2">&quot;microseconds&quot;</span><span class="p">:</span> <span class="s2">&quot;microsecond&quot;</span><span class="p">,</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="s2">&quot;seconds&quot;</span><span class="p">:</span> <span class="s2">&quot;second&quot;</span><span class="p">,</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="s2">&quot;minute&quot;</span><span class="p">,</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="s2">&quot;hour&quot;</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="s2">&quot;days&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="s2">&quot;weeks&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="s2">&quot;months&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="s2">&quot;quarters&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a> <span class="s2">&quot;years&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
-</span><span id="L-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">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a>
-</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
-</span><span id="L-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">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a>
-</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="p">}</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a>
-</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-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="c1"># Expressions whose comments are separated from them for better formatting</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</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">Drop</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">From</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">Insert</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">Select</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">Update</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">Where</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">With</span><span class="p">,</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="p">)</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a>
-</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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">Literal</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">Neg</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">Paren</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">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</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"># Autofilled</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</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">IDENTIFIERS_CAN_START_WITH_DIGIT</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">STRICT_STRING_CONCAT</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">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</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-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a>
-</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">can_identify</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="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="c1"># Delimiters for quotes, identifiers and the corresponding escape characters</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">STRING_ESCAPE</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">IDENTIFIER_ESCAPE</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</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="c1"># Delimiters for bit, hex, byte and raw literals</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="p">}</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">STAR_MAPPING</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="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&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;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</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="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="s2">&quot;microseconds&quot;</span><span class="p">:</span> <span class="s2">&quot;microsecond&quot;</span><span class="p">,</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="s2">&quot;seconds&quot;</span><span class="p">:</span> <span class="s2">&quot;second&quot;</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="s2">&quot;minute&quot;</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="s2">&quot;hour&quot;</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="s2">&quot;days&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="s2">&quot;weeks&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="s2">&quot;months&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="s2">&quot;quarters&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a> <span class="s2">&quot;years&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <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">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a>
+</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a>
+</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</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">PROPERTIES_LOCATION</span> <span class="o">=</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">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-252"><a href="#L-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">POST_SCHEMA</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">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-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="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a>
+</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a> <span class="c1"># Expressions whose comments are separated from them for better formatting</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</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">Delete</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">Drop</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">From</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">Insert</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">Join</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">Select</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">Update</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">Where</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">With</span><span class="p">,</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a>
+</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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">Literal</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">Neg</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">Paren</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="p">)</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a>
+</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a>
+</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="c1"># Autofilled</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</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-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">False</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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="s2">&quot;max_unsupported&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;leading_comma&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;max_text_width&quot;</span><span class="p">,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="s2">&quot;_cache&quot;</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="fm">__init__</span><span class="p">(</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-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="kn">import</span> <span class="nn">sqlglot</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="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</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-368"><a href="#L-368"><span class="linenos"> 368</span></a>
-</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
-</span><span id="L-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><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPE</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPE</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span 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">int</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-378"><a href="#L-378"><span class="linenos"> 378</span></a>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</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-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">cache</span><span 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">int</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-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</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="sd"> Args:</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a><span class="sd"> expression: The syntax tree.</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a><span class="sd"> cache: An optional sql string cache. This leverages the hash of an Expression</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a><span class="sd"> which can be slow to compute, so only use it if you set _hash on each node.</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="sd"> Returns:</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="n">cache</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="n">can_identify</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="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">],</span> <span class="nb">bool</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="c1"># Delimiters for quotes, identifiers and the corresponding escape characters</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="n">TOKENIZER_CLASS</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a>
+</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a> <span class="c1"># Delimiters for bit, hex, byte and raw literals</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="s2">&quot;_cache&quot;</span><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">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-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="kn">import</span> <span class="nn">sqlglot</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="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</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-385"><a href="#L-385"><span class="linenos"> 385</span></a>
+</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
+</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="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 class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <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 class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</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="bp">self</span><span class="o">.</span><span class="n">_cache</span><span 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">int</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-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="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a>
-</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="k">return</span> <span class="n">sql</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="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-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">cache</span><span 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">int</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-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</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="sd"> Args:</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a><span class="sd"> expression: The syntax tree.</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a><span class="sd"> cache: An optional sql string cache. This leverages the hash of an Expression</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a><span class="sd"> which can be slow to compute, so only use it if you set _hash on each node.</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a>
-</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a>
-</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="L-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">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
-</span><span id="L-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">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a>
-</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="k">return</span> <span class="n">comment</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">maybe_comment</span><span class="p">(</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="n">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-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="p">)</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a>
-</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</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">sql</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">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">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="p">)</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a>
-</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</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="n">sql</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a>
-</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="p">)</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a>
-</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a>
-</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="n">pad</span><span class="o">=</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="p">)</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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 SQL string corresponding to `expression`.</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="n">cache</span> <span class="ow">is</span> <span class="ow">not</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">_cache</span> <span class="o">=</span> <span class="n">cache</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="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a>
+</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a>
+</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="L-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">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
+</span><span id="L-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">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a>
+</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="k">return</span> <span class="n">comment</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a>
+</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="k">def</span> <span class="nf">maybe_comment</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="p">,</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="n">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-454"><a href="#L-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">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-455"><a href="#L-455"><span class="linenos"> 455</span></a> <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">comments</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="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="p">)</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a>
+</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</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">sql</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a>
+</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="n">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">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="p">)</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a>
+</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="k">return</span> <span class="n">sql</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">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="k">return</span> <span class="n">result</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">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="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-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-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">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</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="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="k">return</span> <span class="n">name</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a>
-</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="n">sql</span><span class="p">:</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="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="k">if</span> <span class="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-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a>
-</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="n">line</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="p">)</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a>
-</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</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-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="p">)</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="k">return</span> <span class="n">result</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">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-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&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="n">name</span><span class="o">.</span><span class="n">lower</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="n">name</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a>
+</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</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-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</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-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a>
-</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="k">if</span> <span class="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-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a>
-</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="n">expression_id</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a>
-</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="k">if</span> <span class="n">expression_id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a>
-</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a>
-</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="k">elif</span> <span class="n">transform</span><span class="p">:</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a>
-</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a>
-</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="n">sql</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">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a>
-</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">sql</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="k">def</span> <span class="nf">uncache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</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-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a>
-</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="k">def</span> <span class="nf">cache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">)</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</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-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="n">line</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="p">)</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a>
+</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="n">expression</span><span class="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-530"><a href="#L-530"><span class="linenos"> 530</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-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a>
+</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="k">if</span> <span class="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-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a>
+</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a>
+</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="n">expression_id</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a>
+</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="k">if</span> <span class="n">expression_id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a>
+</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a>
+</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="k">elif</span> <span class="n">transform</span><span class="p">:</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a>
+</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a>
+</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">sql</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">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a>
-</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="k">def</span> <span class="nf">characterset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a>
-</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="k">def</span> <span class="nf">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-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">sql</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a>
+</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="k">def</span> <span class="nf">uncache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</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-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a>
-</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</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-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</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-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="k">if</span> <span class="n">part</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="p">)</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a>
-</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a>
-</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="k">def</span> <span class="nf">columnposition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</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-602"><a href="#L-602"><span class="linenos"> 602</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-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="k">def</span> <span class="nf">cache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">)</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</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-591"><a href="#L-591"><span class="linenos"> 591</span></a>
+</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="k">def</span> <span class="nf">characterset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a>
+</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</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-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a>
+</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a>
-</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</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-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</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-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a>
-</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a>
-</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="k">def</span> <span class="nf">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-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</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-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</span></a>
-</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a>
-</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a>
-</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a>
-</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</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-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot;ON NULL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT </span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</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-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</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-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="p">)</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="p">)</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a>
+</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a>
+</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="k">def</span> <span class="nf">columnposition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a>
+</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</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-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</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-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a>
+</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a>
+</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="k">def</span> <span class="nf">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-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</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-639"><a href="#L-639"><span class="linenos"> 639</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-640"><a href="#L-640"><span class="linenos"> 640</span></a>
-</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="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-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</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-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">)</span>
-</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">)</span>
-</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="n">cycle</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">)</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a>
-</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
-</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a>
-</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a>
-</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a>
-</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a>
-</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a>
-</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY&quot;</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a>
-</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a>
-</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a>
-</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
-</span><span id="L-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;persisted&quot;</span><span class="p">):</span>
+</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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 class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a>
+</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a>
+</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a>
+</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</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-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a>
+</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</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-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">)</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">)</span>
+</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="n">cycle</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">)</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="L-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">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a>
-</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="p">):</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
-</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a> <span class="p">]</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="p">)</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="p">)</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a>
-</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a>
-</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
-</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
-</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
-</span><span id="L-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 class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="p">)</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a>
-</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
-</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
-</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="p">)</span>
-</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a>
-</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
+</span><span id="L-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">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a>
+</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a>
+</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</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-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY&quot;</span>
+</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a>
+</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a>
+</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
+</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a>
+</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="L-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="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
+</span><span id="L-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 class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="p">]</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <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">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
-</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
-</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</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-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="p">)</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
-</span><span id="L-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">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
-</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
-</span><span id="L-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 class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</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-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
+</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="p">),</span>
+</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</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 class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
+</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="p">)</span>
</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="p">)</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">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;clone&quot;</span><span class="p">)</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="k">def</span> <span class="nf">clone_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">when</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span><span class="p">)</span>
-</span><span id="L-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">if</span> <span class="n">when</span><span class="p">:</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</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-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLONE </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">when</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-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">return</span> <span class="sa">f</span><span class="s2">&quot;CLONE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="k">def</span> <span class="nf">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-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-781"><a href="#L-781"><span class="linenos"> 781</span></a>
-</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">)</span>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="k">return</span> <span class="n">sql</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="nf">with_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="s2">&quot;RECURSIVE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a>
-</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="L-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">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-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="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</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-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <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="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
+</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="p">),</span>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</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-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</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="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="n">no_schema_binding</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="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <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="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;clone&quot;</span><span class="p">)</span>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a>
-</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</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-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="k">def</span> <span class="nf">tablealias_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="k">def</span> <span class="nf">bitstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
+</span><span id="L-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">clone_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</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">shallow</span><span class="si">}</span><span class="s2">CLONE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">when</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="n">when</span><span class="p">:</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</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-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></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">when</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="k">return</span> <span class="n">this</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 class="k">def</span> <span class="nf">hexstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">bytestring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="k">return</span> <span class="n">this</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">def</span> <span class="nf">rawstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="k">return</span> <span class="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">string</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-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">def</span> <span class="nf">datatypesize_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">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-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
-</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="k">else</span> <span class="n">type_value</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 class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
-</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-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="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a>
-</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="k">def</span> <span class="nf">directory_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</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-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">)</span>
-</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a>
-</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="k">def</span> <span class="nf">delete_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</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-864"><a href="#L-864"><span class="linenos"> 864</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-865"><a href="#L-865"><span class="linenos"> 865</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-866"><a href="#L-866"><span class="linenos"> 866</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-867"><a href="#L-867"><span class="linenos"> 867</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-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-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 class="k">def</span> <span class="nf">drop_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</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-879"><a href="#L-879"><span class="linenos"> 879</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-880"><a href="#L-880"><span class="linenos"> 880</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-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">def</span> <span class="nf">except_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</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-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="p">)</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</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-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</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-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-812"><a href="#L-812"><span class="linenos"> 812</span></a>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">)</span>
+</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="k">return</span> <span class="n">sql</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">def</span> <span class="nf">with_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="s2">&quot;RECURSIVE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a>
+</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</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-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="k">def</span> <span class="nf">tablealias_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a>
+</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="k">def</span> <span class="nf">bitstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</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="bp">self</span><span class="o">.</span><span class="n">BIT_START</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a>
+</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="k">def</span> <span class="nf">hexstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
+</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="k">def</span> <span class="nf">bytestring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="k">return</span> <span class="n">this</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 class="k">def</span> <span class="nf">rawstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="k">return</span> <span class="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">string</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-856"><a href="#L-856"><span class="linenos"> 856</span></a>
+</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="k">def</span> <span class="nf">datatypeparam_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a>
+</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</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-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
+</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="n">type_sql</span> <span class="o">=</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="k">else</span> <span class="n">type_value</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><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="k">if</span> <span class="n">interior</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">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a>
+</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="p">):</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="k">def</span> <span class="nf">fetch_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;direction&quot;</span><span class="p">)</span>
-</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="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">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
-</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
-</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">filter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># where has a leading space</span>
-</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">hint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
-</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
-</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</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-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</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-929"><a href="#L-929"><span class="linenos"> 929</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-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</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">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</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">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
-</span><span id="L-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 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">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="k">return</span> <span class="n">text</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">inputoutputformat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</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-953"><a href="#L-953"><span class="linenos"> 953</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-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">)</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
-</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">def</span> <span class="nf">national_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a>
-</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="k">def</span> <span class="nf">partition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-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">properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
-</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
-</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
-</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
-</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a>
-</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">properties</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="p">,</span>
-</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</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-989"><a href="#L-989"><span class="linenos"> 989</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-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">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-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">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
-</span><span id="L-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">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
-</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">:</span>
-</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="n">properties_locs</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">def</span> <span class="nf">property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</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-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-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">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-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">def</span> <span class="nf">likeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</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-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LIKE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">journalproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">local</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
-</span><span id="L-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">freespaceproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="n">freespace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="k">return</span> <span class="n">type_sql</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a>
+</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="k">def</span> <span class="nf">directory_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</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-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">)</span>
+</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">delete_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</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-910"><a href="#L-910"><span class="linenos"> 910</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-911"><a href="#L-911"><span class="linenos"> 911</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-912"><a href="#L-912"><span class="linenos"> 912</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-913"><a href="#L-913"><span class="linenos"> 913</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-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a>
+</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="k">def</span> <span class="nf">drop_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</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-925"><a href="#L-925"><span class="linenos"> 925</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-926"><a href="#L-926"><span class="linenos"> 926</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-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="p">)</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="k">def</span> <span class="nf">except_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="p">)</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="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-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a>
+</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="k">def</span> <span class="nf">fetch_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;direction&quot;</span><span class="p">)</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="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">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
+</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">def</span> <span class="nf">filter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># where has a leading space</span>
+</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">hint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
+</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
+</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a>
+</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="k">def</span> <span class="nf">index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</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-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</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-975"><a href="#L-975"><span class="linenos"> 975</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-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</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">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
+</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
+</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
+</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
+</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="p">):</span>
+</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</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">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</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-999"><a href="#L-999"><span class="linenos"> 999</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-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">)</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
+</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">national_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>
+</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">def</span> <span class="nf">partition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="n">with_properties</span> <span class="o">=</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">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
+</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>
+</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
+</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
+</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-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">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">def</span> <span class="nf">properties</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="p">,</span>
+</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</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-1035"><a href="#L-1035"><span class="linenos">1035</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-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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="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-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
</span><span id="L-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="k">def</span> <span class="nf">checksumproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
-</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">:</span>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-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">mergeblockratioproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a>
-</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="n">minimum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minimum&quot;</span><span class="p">)</span>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">maximum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maximum&quot;</span><span class="p">)</span>
-</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="n">units</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;units&quot;</span><span class="p">)</span>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;autotemp&quot;</span><span class="p">)</span>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">always</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;always&quot;</span><span class="p">)</span>
-</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;manual&quot;</span><span class="p">)</span>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="n">never</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;never&quot;</span><span class="p">)</span>
+</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="k">return</span> <span class="n">properties_locs</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">def</span> <span class="nf">property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</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">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</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-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a>
+</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="k">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-1070"><a href="#L-1070"><span class="linenos">1070</span></a>
+</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">def</span> <span class="nf">likeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</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-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LIKE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">fallbackproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="k">def</span> <span class="nf">journalproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">local</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
</span><span id="L-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">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
-</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
-</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
-</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">isolatedloadingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">no</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;concurrent&quot;</span><span class="p">)</span>
-</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_insert&quot;</span><span class="p">):</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_none&quot;</span><span class="p">):</span>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="k">def</span> <span class="nf">lockingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</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-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_or_in&quot;</span><span class="p">)</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lock_type&quot;</span><span class="p">)</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="k">def</span> <span class="nf">withdataproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
-</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;statistics&quot;</span><span class="p">)</span>
-</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="k">def</span> <span class="nf">insert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="n">freespace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a>
+</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="k">def</span> <span class="nf">checksumproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
+</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
+</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
+</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</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="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">datablocksizeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
+</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="n">minimum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minimum&quot;</span><span class="p">)</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="n">maximum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maximum&quot;</span><span class="p">)</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
+</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&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">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="n">units</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;units&quot;</span><span class="p">)</span>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;autotemp&quot;</span><span class="p">)</span>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="n">always</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;always&quot;</span><span class="p">)</span>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;manual&quot;</span><span class="p">)</span>
+</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">never</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;never&quot;</span><span class="p">)</span>
</span><span id="L-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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
-</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE TABLE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="L-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 class="n">alternative</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;alternative&quot;</span><span class="p">)</span>
-</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="n">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-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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">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-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;conflict&quot;</span><span class="p">)</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a>
-</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-1164"><a href="#L-1164"><span class="linenos">1164</span></a>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">def</span> <span class="nf">intersect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <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="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="p">)</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
+</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
+</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
+</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a>
+</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="n">no</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span>
+</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;concurrent&quot;</span><span class="p">)</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-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="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_insert&quot;</span><span class="p">):</span>
+</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_none&quot;</span><span class="p">):</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="k">def</span> <span class="nf">lockingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</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-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_or_in&quot;</span><span class="p">)</span>
+</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lock_type&quot;</span><span class="p">)</span>
+</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">def</span> <span class="nf">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-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">introducer_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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">pseudotype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</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">onconflict_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
-</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;constraint&quot;</span><span class="p">)</span>
-</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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="k">def</span> <span class="nf">rowformatdelimitedproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;fields&quot;</span><span class="p">)</span>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;escaped&quot;</span><span class="p">)</span>
-</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a> <span class="n">items</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;collection_items&quot;</span><span class="p">)</span>
-</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
-</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lines&quot;</span><span class="p">)</span>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="n">null</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;null&quot;</span><span class="p">)</span>
-</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">def</span> <span class="nf">withdataproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;statistics&quot;</span><span class="p">)</span>
+</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
+</span><span id="L-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">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">insert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
+</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE TABLE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="L-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="n">alternative</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;alternative&quot;</span><span class="p">)</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-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="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a>
+</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</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-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="n">partition_sql</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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-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 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-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;conflict&quot;</span><span class="p">)</span>
+</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</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-1203"><a href="#L-1203"><span class="linenos">1203</span></a>
+</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-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">def</span> <span class="nf">withtablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a>
-</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="k">def</span> <span class="nf">indextablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> INDEX&quot;</span>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</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-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="k">def</span> <span class="nf">intersect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</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-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <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="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="p">)</span>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a>
+</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <span class="k">def</span> <span class="nf">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-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;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-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">table_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="n">part</span>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</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-1225"><a href="#L-1225"><span class="linenos">1225</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;catalog&quot;</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">sql</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-1227"><a href="#L-1227"><span class="linenos">1227</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;this&quot;</span><span class="p">),</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="p">]</span>
-</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="p">)</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a>
-</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</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-1233"><a href="#L-1233"><span class="linenos">1233</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-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">)</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="n">system_time</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;system_time&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">system_time</span> <span class="k">else</span> <span class="s2">&quot;&quot;</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">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">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</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-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</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-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-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">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</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-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</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-1257"><a href="#L-1257"><span class="linenos">1257</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-1258"><a href="#L-1258"><span class="linenos">1258</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-1259"><a href="#L-1259"><span class="linenos">1259</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-1260"><a href="#L-1260"><span class="linenos">1260</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-1261"><a href="#L-1261"><span class="linenos">1261</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-1262"><a href="#L-1262"><span class="linenos">1262</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-1263"><a href="#L-1263"><span class="linenos">1263</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-1264"><a href="#L-1264"><span class="linenos">1264</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-1265"><a href="#L-1265"><span class="linenos">1265</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-1266"><a href="#L-1266"><span class="linenos">1266</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-1267"><a href="#L-1267"><span class="linenos">1267</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-1268"><a href="#L-1268"><span class="linenos">1268</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-1269"><a href="#L-1269"><span class="linenos">1269</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-1270"><a href="#L-1270"><span class="linenos">1270</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-1271"><a href="#L-1271"><span class="linenos">1271</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-1272"><a href="#L-1272"><span class="linenos">1272</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-1273"><a href="#L-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">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-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">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-1276"><a href="#L-1276"><span class="linenos">1276</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-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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</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="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="L-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;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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="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-1287"><a href="#L-1287"><span class="linenos">1287</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-1288"><a href="#L-1288"><span class="linenos">1288</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-1289"><a href="#L-1289"><span class="linenos">1289</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-1290"><a href="#L-1290"><span class="linenos">1290</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-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="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-1292"><a href="#L-1292"><span class="linenos">1292</span></a>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</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-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="bp">self</span><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-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">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-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</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-1299"><a href="#L-1299"><span class="linenos">1299</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-1300"><a href="#L-1300"><span class="linenos">1300</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-1301"><a href="#L-1301"><span class="linenos">1301</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-1302"><a href="#L-1302"><span class="linenos">1302</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-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&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">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-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="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-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</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-1314"><a href="#L-1314"><span class="linenos">1314</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-1315"><a href="#L-1315"><span class="linenos">1315</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-1316"><a href="#L-1316"><span class="linenos">1316</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</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-1318"><a href="#L-1318"><span class="linenos">1318</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-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="p">)</span>
-</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</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-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"># Converts `VALUES...` expression into a series of select unions.</span>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="c1"># Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="c1"># evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
-</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="c1"># very slow.</span>
-</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</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-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</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">columns</span>
-</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</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">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-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">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
-</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="p">]</span>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a>
-</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
-</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a>
-</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">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-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="k">def</span> <span class="nf">introducer_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1222"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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">def</span> <span class="nf">pseudotype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</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="k">def</span> <span class="nf">onconflict_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;constraint&quot;</span><span class="p">)</span>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</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-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a>
+</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;fields&quot;</span><span class="p">)</span>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;escaped&quot;</span><span class="p">)</span>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="n">items</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;collection_items&quot;</span><span class="p">)</span>
+</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
+</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lines&quot;</span><span class="p">)</span>
+</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="n">null</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;null&quot;</span><span class="p">)</span>
+</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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 class="k">def</span> <span class="nf">withtablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="k">def</span> <span class="nf">indextablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> INDEX&quot;</span>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</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-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">table_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="n">part</span>
+</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</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-1272"><a href="#L-1272"><span class="linenos">1272</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;catalog&quot;</span><span class="p">),</span>
+</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</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-1274"><a href="#L-1274"><span class="linenos">1274</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;this&quot;</span><span class="p">),</span>
+</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="p">]</span>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="k">if</span> <span class="n">part</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="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;version&quot;</span><span class="p">)</span>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</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-1282"><a href="#L-1282"><span class="linenos">1282</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-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">version</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a>
+</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="bp">self</span><span class="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-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <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="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-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</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-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</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-1304"><a href="#L-1304"><span class="linenos">1304</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-1305"><a href="#L-1305"><span class="linenos">1305</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-1306"><a href="#L-1306"><span class="linenos">1306</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-1307"><a href="#L-1307"><span class="linenos">1307</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-1308"><a href="#L-1308"><span class="linenos">1308</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-1309"><a href="#L-1309"><span class="linenos">1309</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-1310"><a href="#L-1310"><span class="linenos">1310</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-1311"><a href="#L-1311"><span class="linenos">1311</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-1312"><a href="#L-1312"><span class="linenos">1312</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-1313"><a href="#L-1313"><span class="linenos">1313</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-1314"><a href="#L-1314"><span class="linenos">1314</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-1315"><a href="#L-1315"><span class="linenos">1315</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-1316"><a href="#L-1316"><span class="linenos">1316</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-1317"><a href="#L-1317"><span class="linenos">1317</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-1318"><a href="#L-1318"><span class="linenos">1318</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-1319"><a href="#L-1319"><span class="linenos">1319</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-1320"><a href="#L-1320"><span class="linenos">1320</span></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-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">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-1323"><a href="#L-1323"><span class="linenos">1323</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-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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="L-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;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="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-1334"><a href="#L-1334"><span class="linenos">1334</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-1335"><a href="#L-1335"><span class="linenos">1335</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-1336"><a href="#L-1336"><span class="linenos">1336</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-1337"><a href="#L-1337"><span class="linenos">1337</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-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;include_nulls&quot;</span><span class="p">)</span>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</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-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-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="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-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</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-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="k">return</span> <span class="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-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">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-1355"><a href="#L-1355"><span class="linenos">1355</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-1356"><a href="#L-1356"><span class="linenos">1356</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-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="k">return</span> <span class="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-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="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-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">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-1363"><a href="#L-1363"><span class="linenos">1363</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-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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
-</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
-</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a>
-</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="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-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</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-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <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="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-1374"><a href="#L-1374"><span class="linenos">1374</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-1375"><a href="#L-1375"><span class="linenos">1375</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-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</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-1378"><a href="#L-1378"><span class="linenos">1378</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-1379"><a href="#L-1379"><span class="linenos">1379</span></a>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="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-1381"><a href="#L-1381"><span class="linenos">1381</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-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="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-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</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-1385"><a href="#L-1385"><span class="linenos">1385</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-1386"><a href="#L-1386"><span class="linenos">1386</span></a>
-</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
-</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a> <span class="n">cube_sql</span><span class="p">,</span>
-</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="n">rollup_sql</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">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="p">)</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a>
-</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</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-1396"><a href="#L-1396"><span class="linenos">1396</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a>
-</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</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-1399"><a href="#L-1399"><span class="linenos">1399</span></a>
-</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="k">def</span> <span class="nf">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-1401"><a href="#L-1401"><span class="linenos">1401</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-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-1403"><a href="#L-1403"><span class="linenos">1403</span></a>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="k">def</span> <span class="nf">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-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="n">op</span>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</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-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
-</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</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-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="k">if</span> <span class="n">op</span>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="p">)</span>
-</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</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-1417"><a href="#L-1417"><span class="linenos">1417</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-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="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-1420"><a href="#L-1420"><span class="linenos">1420</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-1421"><a href="#L-1421"><span class="linenos">1421</span></a>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="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-1354"><a href="#L-1354"><span class="linenos">1354</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-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</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-1357"><a href="#L-1357"><span class="linenos">1357</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-1358"><a href="#L-1358"><span class="linenos">1358</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-1359"><a href="#L-1359"><span class="linenos">1359</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-1360"><a href="#L-1360"><span class="linenos">1360</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-1361"><a href="#L-1361"><span class="linenos">1361</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-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-1368"><a href="#L-1368"><span class="linenos">1368</span></a>
+</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</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-1370"><a href="#L-1370"><span class="linenos">1370</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
+</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</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-1373"><a href="#L-1373"><span class="linenos">1373</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-1374"><a href="#L-1374"><span class="linenos">1374</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-1375"><a href="#L-1375"><span class="linenos">1375</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</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-1377"><a href="#L-1377"><span class="linenos">1377</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-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="k">else</span> <span class="n">values</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="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-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="c1"># Converts `VALUES...` expression into a series of select unions.</span>
+</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="c1"># Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
+</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a> <span class="c1"># evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
+</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a> <span class="c1"># very slow.</span>
+</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</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-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</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">columns</span>
+</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a>
+</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a>
+</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a>
+</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
+</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="n">row</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="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
+</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <span class="p">]</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a>
+</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
+</span><span id="L-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="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="p">)</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">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-1409"><a href="#L-1409"><span class="linenos">1409</span></a>
+</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</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-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</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="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-1414"><a href="#L-1414"><span class="linenos">1414</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-1415"><a href="#L-1415"><span class="linenos">1415</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-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;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-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">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-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-1422"><a href="#L-1422"><span class="linenos">1422</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-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="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</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-1426"><a href="#L-1426"><span class="linenos">1426</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-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</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-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</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-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
-</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a>
-</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
-</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">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-1438"><a href="#L-1438"><span class="linenos">1438</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-1439"><a href="#L-1439"><span class="linenos">1439</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-1440"><a href="#L-1440"><span class="linenos">1440</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-1441"><a href="#L-1441"><span class="linenos">1441</span></a>
-</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</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-1443"><a href="#L-1443"><span class="linenos">1443</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</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 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-1446"><a href="#L-1446"><span class="linenos">1446</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-1447"><a href="#L-1447"><span class="linenos">1447</span></a>
-</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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-1449"><a href="#L-1449"><span class="linenos">1449</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-1450"><a href="#L-1450"><span class="linenos">1450</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-1451"><a href="#L-1451"><span class="linenos">1451</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-1452"><a href="#L-1452"><span class="linenos">1452</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-1453"><a href="#L-1453"><span class="linenos">1453</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-1454"><a href="#L-1454"><span class="linenos">1454</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-1455"><a href="#L-1455"><span class="linenos">1455</span></a>
-</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="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-1457"><a href="#L-1457"><span class="linenos">1457</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-1458"><a href="#L-1458"><span class="linenos">1458</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-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">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a> <span class="n">sql</span>
-</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</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;expression&quot;</span><span class="p">),</span>
-</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a> <span class="p">)</span>
-</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="k">if</span> <span class="n">sql</span>
-</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="p">)</span>
-</span><span id="L-1470"><a href="#L-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="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args</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><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</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-1473"><a href="#L-1473"><span class="linenos">1473</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></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-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">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-1477"><a href="#L-1477"><span class="linenos">1477</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-1478"><a href="#L-1478"><span class="linenos">1478</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-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</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-1481"><a href="#L-1481"><span class="linenos">1481</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-1482"><a href="#L-1482"><span class="linenos">1482</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-1483"><a href="#L-1483"><span class="linenos">1483</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-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="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-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">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-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</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-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 class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-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="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
+</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
+</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a>
+</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="n">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-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="n">grouping_sets</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="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-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="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-1433"><a href="#L-1433"><span class="linenos">1433</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-1434"><a href="#L-1434"><span class="linenos">1434</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-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</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-1437"><a href="#L-1437"><span class="linenos">1437</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-1438"><a href="#L-1438"><span class="linenos">1438</span></a>
+</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</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-1440"><a href="#L-1440"><span class="linenos">1440</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-1441"><a href="#L-1441"><span class="linenos">1441</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-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</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-1444"><a href="#L-1444"><span class="linenos">1444</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-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="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
+</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a> <span class="n">cube_sql</span><span class="p">,</span>
+</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
+</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
+</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a> <span class="p">)</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">if</span> <span class="n">expression</span><span class="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-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a>
+</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</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-1458"><a href="#L-1458"><span class="linenos">1458</span></a>
+</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</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-1460"><a href="#L-1460"><span class="linenos">1460</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-1461"><a href="#L-1461"><span class="linenos">1461</span></a> <span class="k">return</span> <span class="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-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="k">def</span> <span class="nf">connect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</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-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">)</span>
+</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
+</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a>
+</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="k">def</span> <span class="nf">prior_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-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;PRIOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-1474"><a href="#L-1474"><span class="linenos">1474</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a> <span class="n">op</span>
+</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</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-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
+</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
+</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</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-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 class="k">if</span> <span class="n">op</span>
+</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="p">)</span>
+</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</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-1486"><a href="#L-1486"><span class="linenos">1486</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-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">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-1489"><a href="#L-1489"><span class="linenos">1489</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-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="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-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">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-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;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-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">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-1497"><a href="#L-1497"><span class="linenos">1497</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</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-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a>
-</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
-</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wait&quot;</span><span class="p">)</span>
+</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</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-1495"><a href="#L-1495"><span class="linenos">1495</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-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</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-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</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-1500"><a href="#L-1500"><span class="linenos">1500</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
+</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
+</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a>
-</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
-</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a>
-</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</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-1507"><a href="#L-1507"><span class="linenos">1507</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-1508"><a href="#L-1508"><span class="linenos">1508</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-1509"><a href="#L-1509"><span class="linenos">1509</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-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">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-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">sql</span><span class="p">(</span><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><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</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-1515"><a href="#L-1515"><span class="linenos">1515</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-1516"><a href="#L-1516"><span class="linenos">1516</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-1517"><a href="#L-1517"><span class="linenos">1517</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="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a> <span class="k">return</span> <span class="n">text</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">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</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-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESCAPE_LINE_BREAK</span><span class="p">:</span>
-</span><span id="L-1523"><a href="#L-1523"><span class="linenos">1523</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="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-</span><span id="L-1524"><a href="#L-1524"><span class="linenos">1524</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</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-1526"><a href="#L-1526"><span class="linenos">1526</span></a> <span class="k">return</span> <span class="n">text</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">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-1529"><a href="#L-1529"><span class="linenos">1529</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-1530"><a href="#L-1530"><span class="linenos">1530</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-1531"><a href="#L-1531"><span class="linenos">1531</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-1532"><a href="#L-1532"><span class="linenos">1532</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-1533"><a href="#L-1533"><span class="linenos">1533</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-1534"><a href="#L-1534"><span class="linenos">1534</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-1535"><a href="#L-1535"><span class="linenos">1535</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-1536"><a href="#L-1536"><span class="linenos">1536</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-1537"><a href="#L-1537"><span class="linenos">1537</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-1538"><a href="#L-1538"><span class="linenos">1538</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-1539"><a href="#L-1539"><span class="linenos">1539</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-1514"><a href="#L-1514"><span class="linenos">1514</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-1515"><a href="#L-1515"><span class="linenos">1515</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-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">if</span> <span class="n">expression</span><span class="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-1518"><a href="#L-1518"><span class="linenos">1518</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-1519"><a href="#L-1519"><span class="linenos">1519</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-1520"><a href="#L-1520"><span class="linenos">1520</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-1521"><a href="#L-1521"><span class="linenos">1521</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-1522"><a href="#L-1522"><span class="linenos">1522</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-1523"><a href="#L-1523"><span class="linenos">1523</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">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-1524"><a href="#L-1524"><span class="linenos">1524</span></a>
+</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</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-1526"><a href="#L-1526"><span class="linenos">1526</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-1527"><a href="#L-1527"><span class="linenos">1527</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-1528"><a href="#L-1528"><span class="linenos">1528</span></a>
+</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="n">sql</span>
+</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</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;expression&quot;</span><span class="p">),</span>
+</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="p">)</span>
+</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="k">if</span> <span class="n">sql</span>
+</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</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="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-1542"><a href="#L-1542"><span class="linenos">1542</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&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">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-1545"><a href="#L-1545"><span class="linenos">1545</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-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="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-1541"><a href="#L-1541"><span class="linenos">1541</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-1542"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1543"><a href="#L-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="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-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="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-1546"><a href="#L-1546"><span class="linenos">1546</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-1547"><a href="#L-1547"><span class="linenos">1547</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-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</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-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">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-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">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-1553"><a href="#L-1553"><span class="linenos">1553</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-1549"><a href="#L-1549"><span class="linenos">1549</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-1550"><a href="#L-1550"><span class="linenos">1550</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-1551"><a href="#L-1551"><span class="linenos">1551</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-1552"><a href="#L-1552"><span class="linenos">1552</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-1553"><a href="#L-1553"><span class="linenos">1553</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-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">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-1556"><a href="#L-1556"><span class="linenos">1556</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-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">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-1559"><a href="#L-1559"><span class="linenos">1559</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-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">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-1562"><a href="#L-1562"><span class="linenos">1562</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-1563"><a href="#L-1563"><span class="linenos">1563</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-1555"><a href="#L-1555"><span class="linenos">1555</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-1556"><a href="#L-1556"><span class="linenos">1556</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</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-1558"><a href="#L-1558"><span class="linenos">1558</span></a> <span class="p">)</span>
+</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1560"><a href="#L-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="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</span></a>
+</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</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-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;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-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="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-1566"><a href="#L-1566"><span class="linenos">1566</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-1567"><a href="#L-1567"><span class="linenos">1567</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-1568"><a href="#L-1568"><span class="linenos">1568</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-1569"><a href="#L-1569"><span class="linenos">1569</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-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="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-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</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-1574"><a href="#L-1574"><span class="linenos">1574</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-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="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
-</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="n">nulls_last</span>
-</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</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-1580"><a href="#L-1580"><span class="linenos">1580</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a> <span class="p">):</span>
-</span><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</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-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">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-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</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-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="p">)</span>
-</span><span id="L-1588"><a href="#L-1588"><span class="linenos">1588</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</span></a>
-</span><span id="L-1590"><a href="#L-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span 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-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">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-1593"><a href="#L-1593"><span class="linenos">1593</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-1594"><a href="#L-1594"><span class="linenos">1594</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-1595"><a href="#L-1595"><span class="linenos">1595</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-1596"><a href="#L-1596"><span class="linenos">1596</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-1597"><a href="#L-1597"><span class="linenos">1597</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-1598"><a href="#L-1598"><span class="linenos">1598</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-1599"><a href="#L-1599"><span class="linenos">1599</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-1600"><a href="#L-1600"><span class="linenos">1600</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-1601"><a href="#L-1601"><span class="linenos">1601</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-1602"><a href="#L-1602"><span class="linenos">1602</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-1603"><a href="#L-1603"><span class="linenos">1603</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</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-1605"><a href="#L-1605"><span class="linenos">1605</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-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 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-1608"><a href="#L-1608"><span class="linenos">1608</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-1609"><a href="#L-1609"><span class="linenos">1609</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-1610"><a href="#L-1610"><span class="linenos">1610</span></a> <span class="p">(</span>
-</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="p">)</span>
-</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="p">)</span>
-</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</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-1621"><a href="#L-1621"><span class="linenos">1621</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-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="k">return</span> <span class="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-1565"><a href="#L-1565"><span class="linenos">1565</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-1566"><a href="#L-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">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-1567"><a href="#L-1567"><span class="linenos">1567</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-1568"><a href="#L-1568"><span class="linenos">1568</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a>
+</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
+</span><span id="L-1571"><a href="#L-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">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-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wait&quot;</span><span class="p">)</span>
+</span><span id="L-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 class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
+</span><span id="L-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">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-1584"><a href="#L-1584"><span class="linenos">1584</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-1585"><a href="#L-1585"><span class="linenos">1585</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-1586"><a href="#L-1586"><span class="linenos">1586</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="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="k">return</span> <span class="n">text</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">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</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-1591"><a href="#L-1591"><span class="linenos">1591</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESCAPE_LINE_BREAK</span><span class="p">:</span>
+</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</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="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
+</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</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-1595"><a href="#L-1595"><span class="linenos">1595</span></a> <span class="k">return</span> <span class="n">text</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">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-1598"><a href="#L-1598"><span class="linenos">1598</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-1599"><a href="#L-1599"><span class="linenos">1599</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-1600"><a href="#L-1600"><span class="linenos">1600</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-1601"><a href="#L-1601"><span class="linenos">1601</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-1602"><a href="#L-1602"><span class="linenos">1602</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-1603"><a href="#L-1603"><span class="linenos">1603</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-1604"><a href="#L-1604"><span class="linenos">1604</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-1605"><a href="#L-1605"><span class="linenos">1605</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-1606"><a href="#L-1606"><span class="linenos">1606</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-1607"><a href="#L-1607"><span class="linenos">1607</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-1608"><a href="#L-1608"><span class="linenos">1608</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-1609"><a href="#L-1609"><span class="linenos">1609</span></a>
+</span><span id="L-1610"><a href="#L-1610"><span class="linenos">1610</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-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</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 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-1614"><a href="#L-1614"><span class="linenos">1614</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-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">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-1617"><a href="#L-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="L-1618"><a href="#L-1618"><span class="linenos">1618</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-1619"><a href="#L-1619"><span class="linenos">1619</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-1620"><a href="#L-1620"><span class="linenos">1620</span></a>
+</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</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-1622"><a href="#L-1622"><span class="linenos">1622</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-1623"><a href="#L-1623"><span class="linenos">1623</span></a>
-</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</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-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</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-1625"><a href="#L-1625"><span class="linenos">1625</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-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="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
-</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</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-1628"><a href="#L-1628"><span class="linenos">1628</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-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">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-1631"><a href="#L-1631"><span class="linenos">1631</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)))</span>
-</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</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-1633"><a href="#L-1633"><span class="linenos">1633</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-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="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-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="n">offset_limit_modifiers</span> <span class="o">=</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">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
-</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
-</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a> <span class="p">)</span>
-</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a>
-</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</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-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</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-1649"><a href="#L-1649"><span class="linenos">1649</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-1650"><a href="#L-1650"><span class="linenos">1650</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-1651"><a href="#L-1651"><span class="linenos">1651</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</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-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
-</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</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-1656"><a href="#L-1656"><span class="linenos">1656</span></a> <span class="p">)</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 class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</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-1663"><a href="#L-1663"><span class="linenos">1663</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-1664"><a href="#L-1664"><span class="linenos">1664</span></a> <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 class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a> <span class="k">return</span> <span class="p">[</span>
-</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">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-1669"><a href="#L-1669"><span class="linenos">1669</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-1670"><a href="#L-1670"><span class="linenos">1670</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-1671"><a href="#L-1671"><span class="linenos">1671</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</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-1673"><a href="#L-1673"><span class="linenos">1673</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-1674"><a href="#L-1674"><span class="linenos">1674</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-1630"><a href="#L-1630"><span class="linenos">1630</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-1631"><a href="#L-1631"><span class="linenos">1631</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-1632"><a href="#L-1632"><span class="linenos">1632</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-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="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-1635"><a href="#L-1635"><span class="linenos">1635</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-1636"><a href="#L-1636"><span class="linenos">1636</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-1637"><a href="#L-1637"><span class="linenos">1637</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-1638"><a href="#L-1638"><span class="linenos">1638</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-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="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-1641"><a href="#L-1641"><span class="linenos">1641</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</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-1643"><a href="#L-1643"><span class="linenos">1643</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-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="p">):</span>
+</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</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-1646"><a href="#L-1646"><span class="linenos">1646</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="n">nulls_last</span>
+</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</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-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a> <span class="p">):</span>
+</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</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-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">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-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</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-1656"><a href="#L-1656"><span class="linenos">1656</span></a> <span class="p">)</span>
+</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</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 class="k">return</span> <span class="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-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">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-1662"><a href="#L-1662"><span class="linenos">1662</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-1663"><a href="#L-1663"><span class="linenos">1663</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-1664"><a href="#L-1664"><span class="linenos">1664</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-1665"><a href="#L-1665"><span class="linenos">1665</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-1666"><a href="#L-1666"><span class="linenos">1666</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-1667"><a href="#L-1667"><span class="linenos">1667</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-1668"><a href="#L-1668"><span class="linenos">1668</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-1669"><a href="#L-1669"><span class="linenos">1669</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-1670"><a href="#L-1670"><span class="linenos">1670</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-1671"><a href="#L-1671"><span class="linenos">1671</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-1672"><a href="#L-1672"><span class="linenos">1672</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</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-1674"><a href="#L-1674"><span class="linenos">1674</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-1675"><a href="#L-1675"><span class="linenos">1675</span></a> <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="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-1678"><a href="#L-1678"><span class="linenos">1678</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
-</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</span></a>
-</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="k">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-1683"><a href="#L-1683"><span class="linenos">1683</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-1684"><a href="#L-1684"><span class="linenos">1684</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-1685"><a href="#L-1685"><span class="linenos">1685</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-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</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-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="n">top</span> <span class="o">=</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">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="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="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-1676"><a href="#L-1676"><span class="linenos">1676</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-1677"><a href="#L-1677"><span class="linenos">1677</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-1678"><a href="#L-1678"><span class="linenos">1678</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-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 class="n">partition</span><span class="p">,</span>
+</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="L-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="p">)</span>
+</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="p">)</span>
+</span><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</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-1690"><a href="#L-1690"><span class="linenos">1690</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-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="k">return</span> <span class="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-1692"><a href="#L-1692"><span class="linenos">1692</span></a>
+</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</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-1694"><a href="#L-1694"><span class="linenos">1694</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
</span><span id="L-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 class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
-</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
-</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="L-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
-</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <span class="p">)</span>
-</span><span id="L-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-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 class="p">)</span>
-</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</span></a> <span class="p">)</span>
-</span><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <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 class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</span></a>
-</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="n">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-1718"><a href="#L-1718"><span class="linenos">1718</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-1719"><a href="#L-1719"><span class="linenos">1719</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</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-1722"><a href="#L-1722"><span class="linenos">1722</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-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <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">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-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 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-1727"><a href="#L-1727"><span class="linenos">1727</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</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-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a>
-</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="k">def</span> <span class="nf">schema_columns_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-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">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-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">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-1736"><a href="#L-1736"><span class="linenos">1736</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-1737"><a href="#L-1737"><span class="linenos">1737</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-1738"><a href="#L-1738"><span class="linenos">1738</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-1739"><a href="#L-1739"><span class="linenos">1739</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-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;*</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-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">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-1743"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1744"><a href="#L-1744"><span class="linenos">1744</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-1745"><a href="#L-1745"><span class="linenos">1745</span></a> <span class="k">return</span> <span class="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-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
+</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="L-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">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-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)))</span>
+</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</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-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="L-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 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-1705"><a href="#L-1705"><span class="linenos">1705</span></a>
+</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
+</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</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="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">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">),</span>
+</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</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-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</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-1719"><a href="#L-1719"><span class="linenos">1719</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-1720"><a href="#L-1720"><span class="linenos">1720</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-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</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-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
+</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</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-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">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</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-1733"><a href="#L-1733"><span class="linenos">1733</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-1734"><a href="#L-1734"><span class="linenos">1734</span></a> <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 class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</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-1739"><a href="#L-1739"><span class="linenos">1739</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;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-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
+</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</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-1743"><a href="#L-1743"><span class="linenos">1743</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-1744"><a href="#L-1744"><span class="linenos">1744</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-1745"><a href="#L-1745"><span class="linenos">1745</span></a> <span class="p">]</span>
</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</span></a>
-</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</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-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="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-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-1751"><a href="#L-1751"><span class="linenos">1751</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-1752"><a href="#L-1752"><span class="linenos">1752</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-1753"><a href="#L-1753"><span class="linenos">1753</span></a>
-</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</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-1755"><a href="#L-1755"><span class="linenos">1755</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-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">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-1758"><a href="#L-1758"><span class="linenos">1758</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-1759"><a href="#L-1759"><span class="linenos">1759</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-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="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
+</span><span id="L-1751"><a href="#L-1751"><span class="linenos">1751</span></a>
+</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</span></a> <span class="k">def</span> <span class="nf">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-1753"><a href="#L-1753"><span class="linenos">1753</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-1754"><a href="#L-1754"><span class="linenos">1754</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-1755"><a href="#L-1755"><span class="linenos">1755</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-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</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-1758"><a href="#L-1758"><span class="linenos">1758</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
+</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">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <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="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 class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
-</span><span id="L-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">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-1766"><a href="#L-1766"><span class="linenos">1766</span></a>
-</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</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-1768"><a href="#L-1768"><span class="linenos">1768</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-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="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-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">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-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">prepend_ctes</span><span class="p">(</span>
-</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</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-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="p">)</span>
-</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a>
-</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</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-1778"><a href="#L-1778"><span class="linenos">1778</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-1779"><a href="#L-1779"><span class="linenos">1779</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-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;UNION</span><span class="si">{</span><span class="n">kind</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">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-1783"><a href="#L-1783"><span class="linenos">1783</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-1784"><a href="#L-1784"><span class="linenos">1784</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-1785"><a href="#L-1785"><span class="linenos">1785</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-1786"><a href="#L-1786"><span class="linenos">1786</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-1787"><a href="#L-1787"><span class="linenos">1787</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-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <span class="k">else</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="bp">self</span><span class="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-1790"><a href="#L-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="n">alias</span>
-</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</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-1792"><a href="#L-1792"><span class="linenos">1792</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-1793"><a href="#L-1793"><span class="linenos">1793</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-1794"><a href="#L-1794"><span class="linenos">1794</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-1764"><a href="#L-1764"><span class="linenos">1764</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-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">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
+</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="k">else</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="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</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">expressions</span><span class="p">(</span>
+</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
+</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="L-1778"><a href="#L-1778"><span class="linenos">1778</span></a> <span class="p">)</span>
+</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="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-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="p">]</span>
+</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a> <span class="p">)</span>
+</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="p">)</span>
+</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="p">]</span>
+</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="p">)</span>
+</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&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="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-1788"><a href="#L-1788"><span class="linenos">1788</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-1789"><a href="#L-1789"><span class="linenos">1789</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</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-1792"><a href="#L-1792"><span class="linenos">1792</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-1793"><a href="#L-1793"><span class="linenos">1793</span></a> <span class="p">)</span>
+</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</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-1795"><a href="#L-1795"><span class="linenos">1795</span></a>
-</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</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-1797"><a href="#L-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">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-1798"><a href="#L-1798"><span class="linenos">1798</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="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-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">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-1801"><a href="#L-1801"><span class="linenos">1801</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</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-1803"><a href="#L-1803"><span class="linenos">1803</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-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;spec&quot;</span><span class="p">)</span>
-</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</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-1807"><a href="#L-1807"><span class="linenos">1807</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-1808"><a href="#L-1808"><span class="linenos">1808</span></a>
-</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="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-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="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-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</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-1796"><a href="#L-1796"><span class="linenos">1796</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-1797"><a href="#L-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="L-1798"><a href="#L-1798"><span class="linenos">1798</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-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</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="k">def</span> <span class="nf">schema_columns_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-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="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-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">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-1806"><a href="#L-1806"><span class="linenos">1806</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-1807"><a href="#L-1807"><span class="linenos">1807</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-1808"><a href="#L-1808"><span class="linenos">1808</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-1809"><a href="#L-1809"><span class="linenos">1809</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-1810"><a href="#L-1810"><span class="linenos">1810</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-1811"><a href="#L-1811"><span class="linenos">1811</span></a>
+</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="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-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</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-1815"><a href="#L-1815"><span class="linenos">1815</span></a> <span class="k">return</span> <span class="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-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">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-1818"><a href="#L-1818"><span class="linenos">1818</span></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-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="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-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">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-1824"><a href="#L-1824"><span class="linenos">1824</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-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;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-1817"><a href="#L-1817"><span class="linenos">1817</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-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1819"><a href="#L-1819"><span class="linenos">1819</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-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="k">if</span> <span class="n">kind</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="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-1822"><a href="#L-1822"><span class="linenos">1822</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-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">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-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="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-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">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-1828"><a href="#L-1828"><span class="linenos">1828</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-1829"><a href="#L-1829"><span class="linenos">1829</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-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</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-1832"><a href="#L-1832"><span class="linenos">1832</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</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="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-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">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-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">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-1839"><a href="#L-1839"><span class="linenos">1839</span></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-1827"><a href="#L-1827"><span class="linenos">1827</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-1828"><a href="#L-1828"><span class="linenos">1828</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-1829"><a href="#L-1829"><span class="linenos">1829</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-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 class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1832"><a href="#L-1832"><span class="linenos">1832</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1833"><a href="#L-1833"><span class="linenos">1833</span></a>
+</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
+</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</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-1836"><a href="#L-1836"><span class="linenos">1836</span></a>
+</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="k">def</span> <span class="nf">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-1838"><a href="#L-1838"><span class="linenos">1838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-1839"><a href="#L-1839"><span class="linenos">1839</span></a> <span class="k">return</span> <span class="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-1840"><a href="#L-1840"><span class="linenos">1840</span></a>
-</span><span id="L-1841"><a href="#L-1841"><span class="linenos">1841</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-1842"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</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-1844"><a href="#L-1844"><span class="linenos">1844</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-1845"><a href="#L-1845"><span class="linenos">1845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="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-1841"><a href="#L-1841"><span class="linenos">1841</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-1842"><a href="#L-1842"><span class="linenos">1842</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-1843"><a href="#L-1843"><span class="linenos">1843</span></a> <span class="n">expression</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">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-1845"><a href="#L-1845"><span class="linenos">1845</span></a> <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 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-1848"><a href="#L-1848"><span class="linenos">1848</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-1849"><a href="#L-1849"><span class="linenos">1849</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-1850"><a href="#L-1850"><span class="linenos">1850</span></a>
-</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span 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-1847"><a href="#L-1847"><span class="linenos">1847</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-1848"><a href="#L-1848"><span class="linenos">1848</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-1849"><a href="#L-1849"><span class="linenos">1849</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-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-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;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-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">safebracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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">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-1857"><a href="#L-1857"><span class="linenos">1857</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-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">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-1860"><a href="#L-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="L-1861"><a href="#L-1861"><span class="linenos">1861</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-1862"><a href="#L-1862"><span class="linenos">1862</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-1863"><a href="#L-1863"><span class="linenos">1863</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-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="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-1866"><a href="#L-1866"><span class="linenos">1866</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-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">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-1869"><a href="#L-1869"><span class="linenos">1869</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1870"><a href="#L-1870"><span class="linenos">1870</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-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">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-1873"><a href="#L-1873"><span class="linenos">1873</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-1874"><a href="#L-1874"><span class="linenos">1874</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-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="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-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">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</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-1880"><a href="#L-1880"><span class="linenos">1880</span></a>
-</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="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-1882"><a href="#L-1882"><span class="linenos">1882</span></a>
-</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</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-1884"><a href="#L-1884"><span class="linenos">1884</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-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="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-1853"><a href="#L-1853"><span class="linenos">1853</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-1854"><a href="#L-1854"><span class="linenos">1854</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-1855"><a href="#L-1855"><span class="linenos">1855</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-1856"><a href="#L-1856"><span class="linenos">1856</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-1857"><a href="#L-1857"><span class="linenos">1857</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-1858"><a href="#L-1858"><span class="linenos">1858</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-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1860"><a href="#L-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">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-1861"><a href="#L-1861"><span class="linenos">1861</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-1862"><a href="#L-1862"><span class="linenos">1862</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-1863"><a href="#L-1863"><span class="linenos">1863</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-1864"><a href="#L-1864"><span class="linenos">1864</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-1865"><a href="#L-1865"><span class="linenos">1865</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-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 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-1868"><a href="#L-1868"><span class="linenos">1868</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-1869"><a href="#L-1869"><span class="linenos">1869</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-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">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-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 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-1874"><a href="#L-1874"><span class="linenos">1874</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-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;spec&quot;</span><span class="p">)</span>
+</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</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-1878"><a href="#L-1878"><span class="linenos">1878</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-1879"><a href="#L-1879"><span class="linenos">1879</span></a>
+</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</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-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="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-1883"><a href="#L-1883"><span class="linenos">1883</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1886"><a href="#L-1886"><span class="linenos">1886</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-1887"><a href="#L-1887"><span class="linenos">1887</span></a>
-</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</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-1889"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</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-1891"><a href="#L-1891"><span class="linenos">1891</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-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">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-1894"><a href="#L-1894"><span class="linenos">1894</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-1895"><a href="#L-1895"><span class="linenos">1895</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-1896"><a href="#L-1896"><span class="linenos">1896</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-1888"><a href="#L-1888"><span class="linenos">1888</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-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;</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-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="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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="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-1895"><a href="#L-1895"><span class="linenos">1895</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-1896"><a href="#L-1896"><span class="linenos">1896</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-1897"><a href="#L-1897"><span class="linenos">1897</span></a>
-</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</span></a> <span class="k">def</span> <span class="nf">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-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</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-1901"><a href="#L-1901"><span class="linenos">1901</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-1902"><a href="#L-1902"><span class="linenos">1902</span></a>
-</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</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-1904"><a href="#L-1904"><span class="linenos">1904</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-1905"><a href="#L-1905"><span class="linenos">1905</span></a>
-</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="k">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-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <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-1908"><a href="#L-1908"><span class="linenos">1908</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-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <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-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="k">return</span> <span class="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-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">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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">expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
-</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</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">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a>
-</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="k">def</span> <span class="nf">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-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1921"><a href="#L-1921"><span class="linenos">1921</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-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">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-1924"><a href="#L-1924"><span class="linenos">1924</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-1925"><a href="#L-1925"><span class="linenos">1925</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-1926"><a href="#L-1926"><span class="linenos">1926</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-1927"><a href="#L-1927"><span class="linenos">1927</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-1928"><a href="#L-1928"><span class="linenos">1928</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-1929"><a href="#L-1929"><span class="linenos">1929</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-1930"><a href="#L-1930"><span class="linenos">1930</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-1931"><a href="#L-1931"><span class="linenos">1931</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-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 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-1934"><a href="#L-1934"><span class="linenos">1934</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-1935"><a href="#L-1935"><span class="linenos">1935</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-1936"><a href="#L-1936"><span class="linenos">1936</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-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-1898"><a href="#L-1898"><span class="linenos">1898</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-1899"><a href="#L-1899"><span class="linenos">1899</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-1900"><a href="#L-1900"><span class="linenos">1900</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-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</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-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="p">)</span>
+</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</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-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="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-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</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-1910"><a href="#L-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">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-1911"><a href="#L-1911"><span class="linenos">1911</span></a>
+</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</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-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</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-1915"><a href="#L-1915"><span class="linenos">1915</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-1916"><a href="#L-1916"><span class="linenos">1916</span></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-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">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-1919"><a href="#L-1919"><span class="linenos">1919</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-1920"><a href="#L-1920"><span class="linenos">1920</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-1921"><a href="#L-1921"><span class="linenos">1921</span></a>
+</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="k">return</span> <span class="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-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">safebracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</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="bp">self</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">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-1928"><a href="#L-1928"><span class="linenos">1928</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-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">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-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</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-1933"><a href="#L-1933"><span class="linenos">1933</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</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-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">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-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-1938"><a href="#L-1938"><span class="linenos">1938</span></a>
-</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a> <span class="k">def</span> <span class="nf">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-1940"><a href="#L-1940"><span class="linenos">1940</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-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">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)))</span>
+</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</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-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</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-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">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-1944"><a href="#L-1944"><span class="linenos">1944</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-1945"><a href="#L-1945"><span class="linenos">1945</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-1946"><a href="#L-1946"><span class="linenos">1946</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</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-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">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-1949"><a href="#L-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="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">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-1952"><a href="#L-1952"><span class="linenos">1952</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-1953"><a href="#L-1953"><span class="linenos">1953</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-1954"><a href="#L-1954"><span class="linenos">1954</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-1955"><a href="#L-1955"><span class="linenos">1955</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-1956"><a href="#L-1956"><span class="linenos">1956</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-1957"><a href="#L-1957"><span class="linenos">1957</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</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-1960"><a href="#L-1960"><span class="linenos">1960</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-1961"><a href="#L-1961"><span class="linenos">1961</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-1962"><a href="#L-1962"><span class="linenos">1962</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-1963"><a href="#L-1963"><span class="linenos">1963</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-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">func</span><span class="p">(</span>
-</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">,</span>
-</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1967"><a href="#L-1967"><span class="linenos">1967</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</span></a> <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">def</span> <span class="nf">openjsoncolumndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</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-1973"><a href="#L-1973"><span class="linenos">1973</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
-</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">openjson_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
-</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</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-1983"><a href="#L-1983"><span class="linenos">1983</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <span class="k">if</span> <span class="n">expressions</span>
-</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</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 class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</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-1944"><a href="#L-1944"><span class="linenos">1944</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-1945"><a href="#L-1945"><span class="linenos">1945</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-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="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-1948"><a href="#L-1948"><span class="linenos">1948</span></a>
+</span><span id="L-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</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-1951"><a href="#L-1951"><span class="linenos">1951</span></a>
+</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</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-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">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-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">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-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">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-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">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-1960"><a href="#L-1960"><span class="linenos">1960</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</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-1962"><a href="#L-1962"><span class="linenos">1962</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-1963"><a href="#L-1963"><span class="linenos">1963</span></a>
+</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</span></a> <span class="k">def</span> <span class="nf">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-1965"><a href="#L-1965"><span class="linenos">1965</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-1966"><a href="#L-1966"><span class="linenos">1966</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-1967"><a href="#L-1967"><span class="linenos">1967</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-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">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-1970"><a href="#L-1970"><span class="linenos">1970</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</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-1972"><a href="#L-1972"><span class="linenos">1972</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-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">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-1975"><a href="#L-1975"><span class="linenos">1975</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-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">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-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">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-1979"><a href="#L-1979"><span class="linenos">1979</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-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <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-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="k">else</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">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-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">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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="n">expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
+</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</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">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</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">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-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">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-1991"><a href="#L-1991"><span class="linenos">1991</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-1992"><a href="#L-1992"><span class="linenos">1992</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-1993"><a href="#L-1993"><span class="linenos">1993</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-1994"><a href="#L-1994"><span class="linenos">1994</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-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">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</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-1998"><a href="#L-1998"><span class="linenos">1998</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</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-2000"><a href="#L-2000"><span class="linenos">2000</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</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-2002"><a href="#L-2002"><span class="linenos">2002</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a> <span class="n">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-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">return</span> <span class="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-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">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-2008"><a href="#L-2008"><span class="linenos">2008</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-1990"><a href="#L-1990"><span class="linenos">1990</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-1991"><a href="#L-1991"><span class="linenos">1991</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1992"><a href="#L-1992"><span class="linenos">1992</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-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">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-1995"><a href="#L-1995"><span class="linenos">1995</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-1996"><a href="#L-1996"><span class="linenos">1996</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-1997"><a href="#L-1997"><span class="linenos">1997</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-1998"><a href="#L-1998"><span class="linenos">1998</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-1999"><a href="#L-1999"><span class="linenos">1999</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-2000"><a href="#L-2000"><span class="linenos">2000</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-2001"><a href="#L-2001"><span class="linenos">2001</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-2002"><a href="#L-2002"><span class="linenos">2002</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-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">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-2005"><a href="#L-2005"><span class="linenos">2005</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-2006"><a href="#L-2006"><span class="linenos">2006</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-2007"><a href="#L-2007"><span class="linenos">2007</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-2008"><a href="#L-2008"><span class="linenos">2008</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-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">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-2011"><a href="#L-2011"><span class="linenos">2011</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-2012"><a href="#L-2012"><span class="linenos">2012</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-2013"><a href="#L-2013"><span class="linenos">2013</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-2014"><a href="#L-2014"><span class="linenos">2014</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-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">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-2017"><a href="#L-2017"><span class="linenos">2017</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-2018"><a href="#L-2018"><span class="linenos">2018</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</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-2023"><a href="#L-2023"><span class="linenos">2023</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-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">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-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">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-2028"><a href="#L-2028"><span class="linenos">2028</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-2029"><a href="#L-2029"><span class="linenos">2029</span></a>
-</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</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-2031"><a href="#L-2031"><span class="linenos">2031</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</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-2034"><a href="#L-2034"><span class="linenos">2034</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-2035"><a href="#L-2035"><span class="linenos">2035</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-2036"><a href="#L-2036"><span class="linenos">2036</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-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">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-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <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-2010"><a href="#L-2010"><span class="linenos">2010</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-2011"><a href="#L-2011"><span class="linenos">2011</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-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">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)))</span>
+</span><span id="L-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">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-2015"><a href="#L-2015"><span class="linenos">2015</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-2016"><a href="#L-2016"><span class="linenos">2016</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-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="k">return</span> <span class="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-2018"><a href="#L-2018"><span class="linenos">2018</span></a>
+</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</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-2020"><a href="#L-2020"><span class="linenos">2020</span></a> <span class="k">return</span> <span class="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-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">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-2023"><a href="#L-2023"><span class="linenos">2023</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-2024"><a href="#L-2024"><span class="linenos">2024</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-2025"><a href="#L-2025"><span class="linenos">2025</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-2026"><a href="#L-2026"><span class="linenos">2026</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-2027"><a href="#L-2027"><span class="linenos">2027</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-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</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-2031"><a href="#L-2031"><span class="linenos">2031</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-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</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-2034"><a href="#L-2034"><span class="linenos">2034</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-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <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-2036"><a href="#L-2036"><span class="linenos">2036</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">,</span>
+</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a>
-</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</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-2042"><a href="#L-2042"><span class="linenos">2042</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-2043"><a href="#L-2043"><span class="linenos">2043</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-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</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-2046"><a href="#L-2046"><span class="linenos">2046</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-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="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-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">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-2051"><a href="#L-2051"><span class="linenos">2051</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-2052"><a href="#L-2052"><span class="linenos">2052</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-2053"><a href="#L-2053"><span class="linenos">2053</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-2054"><a href="#L-2054"><span class="linenos">2054</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-2055"><a href="#L-2055"><span class="linenos">2055</span></a>
-</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a> <span class="k">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-2057"><a href="#L-2057"><span class="linenos">2057</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-2058"><a href="#L-2058"><span class="linenos">2058</span></a>
-</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</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-2060"><a href="#L-2060"><span class="linenos">2060</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-2061"><a href="#L-2061"><span class="linenos">2061</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-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="k">return</span> <span class="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-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="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-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="k">return</span> <span class="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-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2042"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</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-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
+</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">openjson_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2050"><a href="#L-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
+</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</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-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a> <span class="k">if</span> <span class="n">expressions</span>
+</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</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">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</span></a>
+</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</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-2062"><a href="#L-2062"><span class="linenos">2062</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-2063"><a href="#L-2063"><span class="linenos">2063</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-2064"><a href="#L-2064"><span class="linenos">2064</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-2065"><a href="#L-2065"><span class="linenos">2065</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-2066"><a href="#L-2066"><span class="linenos">2066</span></a>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</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-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</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-2070"><a href="#L-2070"><span class="linenos">2070</span></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-2071"><a href="#L-2071"><span class="linenos">2071</span></a>
-</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="k">def</span> <span class="nf">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-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2074"><a href="#L-2074"><span class="linenos">2074</span></a>
-</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</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-2076"><a href="#L-2076"><span class="linenos">2076</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-2067"><a href="#L-2067"><span class="linenos">2067</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</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-2069"><a href="#L-2069"><span class="linenos">2069</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</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-2071"><a href="#L-2071"><span class="linenos">2071</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</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-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</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-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 class="k">return</span> <span class="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-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">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</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-2079"><a href="#L-2079"><span class="linenos">2079</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-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">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-2082"><a href="#L-2082"><span class="linenos">2082</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-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <span class="k">return</span> <span class="bp">self</span><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-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="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</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-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><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</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-2091"><a href="#L-2091"><span class="linenos">2091</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-2092"><a href="#L-2092"><span class="linenos">2092</span></a>
-</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</span></a> <span class="k">def</span> <span class="nf">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-2094"><a href="#L-2094"><span class="linenos">2094</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2081"><a href="#L-2081"><span class="linenos">2081</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-2082"><a href="#L-2082"><span class="linenos">2082</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-2083"><a href="#L-2083"><span class="linenos">2083</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-2084"><a href="#L-2084"><span class="linenos">2084</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-2085"><a href="#L-2085"><span class="linenos">2085</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-2086"><a href="#L-2086"><span class="linenos">2086</span></a>
+</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a> <span class="k">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-2088"><a href="#L-2088"><span class="linenos">2088</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-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a>
+</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</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-2094"><a href="#L-2094"><span class="linenos">2094</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-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 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-2097"><a href="#L-2097"><span class="linenos">2097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2098"><a href="#L-2098"><span class="linenos">2098</span></a>
-</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</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-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-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">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-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2104"><a href="#L-2104"><span class="linenos">2104</span></a>
-</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="k">def</span> <span class="nf">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-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">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-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">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-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2114"><a href="#L-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="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a>
-</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a> <span class="k">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-2117"><a href="#L-2117"><span class="linenos">2117</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-2118"><a href="#L-2118"><span class="linenos">2118</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-2119"><a href="#L-2119"><span class="linenos">2119</span></a>
-</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</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-2121"><a href="#L-2121"><span class="linenos">2121</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2122"><a href="#L-2122"><span class="linenos">2122</span></a>
-</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="k">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-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="k">return</span> <span class="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-2125"><a href="#L-2125"><span class="linenos">2125</span></a>
-</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</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-2127"><a href="#L-2127"><span class="linenos">2127</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</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-2129"><a href="#L-2129"><span class="linenos">2129</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-2130"><a href="#L-2130"><span class="linenos">2130</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-2131"><a href="#L-2131"><span class="linenos">2131</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-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="k">def</span> <span class="nf">mergetreettlaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;recompress&quot;</span><span class="p">)</span>
-</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_disk&quot;</span><span class="p">)</span>
-</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_volume&quot;</span><span class="p">)</span>
-</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a>
-</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="k">def</span> <span class="nf">mergetreettl_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</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-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
-</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</span></a>
-</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">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-2156"><a href="#L-2156"><span class="linenos">2156</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
-</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a>
-</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</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-2160"><a href="#L-2160"><span class="linenos">2160</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-2161"><a href="#L-2161"><span class="linenos">2161</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-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">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-2164"><a href="#L-2164"><span class="linenos">2164</span></a>
-</span><span id="L-2165"><a href="#L-2165"><span class="linenos">2165</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-2166"><a href="#L-2166"><span class="linenos">2166</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-2167"><a href="#L-2167"><span class="linenos">2167</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-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;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</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-2097"><a href="#L-2097"><span class="linenos">2097</span></a>
+</span><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="k">def</span> <span class="nf">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-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;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-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 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-2102"><a href="#L-2102"><span class="linenos">2102</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</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-2104"><a href="#L-2104"><span class="linenos">2104</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-2105"><a href="#L-2105"><span class="linenos">2105</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-2106"><a href="#L-2106"><span class="linenos">2106</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-2107"><a href="#L-2107"><span class="linenos">2107</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-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">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-2110"><a href="#L-2110"><span class="linenos">2110</span></a> <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-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">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-2113"><a href="#L-2113"><span class="linenos">2113</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-2114"><a href="#L-2114"><span class="linenos">2114</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-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</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-2117"><a href="#L-2117"><span class="linenos">2117</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-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">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-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">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-2122"><a href="#L-2122"><span class="linenos">2122</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-2123"><a href="#L-2123"><span class="linenos">2123</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-2124"><a href="#L-2124"><span class="linenos">2124</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-2125"><a href="#L-2125"><span class="linenos">2125</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-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">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-2128"><a href="#L-2128"><span class="linenos">2128</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-2129"><a href="#L-2129"><span class="linenos">2129</span></a>
+</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</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-2131"><a href="#L-2131"><span class="linenos">2131</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-2132"><a href="#L-2132"><span class="linenos">2132</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-2133"><a href="#L-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span 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-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="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-2136"><a href="#L-2136"><span class="linenos">2136</span></a> <span class="k">return</span> <span class="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-2137"><a href="#L-2137"><span class="linenos">2137</span></a>
+</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</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-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</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-2141"><a href="#L-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="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-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">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-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2147"><a href="#L-2147"><span class="linenos">2147</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-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="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+</span><span id="L-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="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-2153"><a href="#L-2153"><span class="linenos">2153</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-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="k">return</span> <span class="bp">self</span><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-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">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="p">)</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="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-2162"><a href="#L-2162"><span class="linenos">2162</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-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">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-2165"><a href="#L-2165"><span class="linenos">2165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-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-2170"><a href="#L-2170"><span class="linenos">2170</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-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-2172"><a href="#L-2172"><span class="linenos">2172</span></a>
-</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="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-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</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-2176"><a href="#L-2176"><span class="linenos">2176</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-2177"><a href="#L-2177"><span class="linenos">2177</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-2178"><a href="#L-2178"><span class="linenos">2178</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-2179"><a href="#L-2179"><span class="linenos">2179</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-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="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-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2184"><a href="#L-2184"><span class="linenos">2184</span></a>
-</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="k">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-2186"><a href="#L-2186"><span class="linenos">2186</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-2187"><a href="#L-2187"><span class="linenos">2187</span></a>
-</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</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-2189"><a href="#L-2189"><span class="linenos">2189</span></a>
-</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</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-2191"><a href="#L-2191"><span class="linenos">2191</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
-</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</span></a> <span class="c1"># Remove db from tables</span>
-</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</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-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
-</span><span id="L-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="p">)</span>
-</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2198"><a href="#L-2198"><span class="linenos">2198</span></a>
-</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a> <span class="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-2200"><a href="#L-2200"><span class="linenos">2200</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-2201"><a href="#L-2201"><span class="linenos">2201</span></a>
-</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a> <span class="k">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-2203"><a href="#L-2203"><span class="linenos">2203</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-2204"><a href="#L-2204"><span class="linenos">2204</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-2205"><a href="#L-2205"><span class="linenos">2205</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-2206"><a href="#L-2206"><span class="linenos">2206</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-2207"><a href="#L-2207"><span class="linenos">2207</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-2208"><a href="#L-2208"><span class="linenos">2208</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</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-2210"><a href="#L-2210"><span class="linenos">2210</span></a>
-</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</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-2212"><a href="#L-2212"><span class="linenos">2212</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-2213"><a href="#L-2213"><span class="linenos">2213</span></a>
-</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</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-2215"><a href="#L-2215"><span class="linenos">2215</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-2216"><a href="#L-2216"><span class="linenos">2216</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-2217"><a href="#L-2217"><span class="linenos">2217</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-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">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-2220"><a href="#L-2220"><span class="linenos">2220</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</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-2222"><a href="#L-2222"><span class="linenos">2222</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-2173"><a href="#L-2173"><span class="linenos">2173</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-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">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-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">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-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">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-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="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-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">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-2181"><a href="#L-2181"><span class="linenos">2181</span></a>
+</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</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="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-2188"><a href="#L-2188"><span class="linenos">2188</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-2189"><a href="#L-2189"><span class="linenos">2189</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-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 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-2192"><a href="#L-2192"><span class="linenos">2192</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2193"><a href="#L-2193"><span class="linenos">2193</span></a>
+</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</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-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="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-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="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-2198"><a href="#L-2198"><span class="linenos">2198</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</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-2200"><a href="#L-2200"><span class="linenos">2200</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-2201"><a href="#L-2201"><span class="linenos">2201</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-2202"><a href="#L-2202"><span class="linenos">2202</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-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="k">def</span> <span class="nf">mergetreettlaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;recompress&quot;</span><span class="p">)</span>
+</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_disk&quot;</span><span class="p">)</span>
+</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_volume&quot;</span><span class="p">)</span>
+</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">mergetreettl_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</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-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="L-2218"><a href="#L-2218"><span class="linenos">2218</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
+</span><span id="L-2219"><a href="#L-2219"><span class="linenos">2219</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a>
+</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-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="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-2225"><a href="#L-2225"><span class="linenos">2225</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-2226"><a href="#L-2226"><span class="linenos">2226</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-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">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-2229"><a href="#L-2229"><span class="linenos">2229</span></a>
-</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</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-2231"><a href="#L-2231"><span class="linenos">2231</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-2232"><a href="#L-2232"><span class="linenos">2232</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-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-2227"><a href="#L-2227"><span class="linenos">2227</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</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">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-2230"><a href="#L-2230"><span class="linenos">2230</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-2231"><a href="#L-2231"><span class="linenos">2231</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-2232"><a href="#L-2232"><span class="linenos">2232</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-2233"><a href="#L-2233"><span class="linenos">2233</span></a>
-</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a> <span class="n">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-2235"><a href="#L-2235"><span class="linenos">2235</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-2236"><a href="#L-2236"><span class="linenos">2236</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-2237"><a href="#L-2237"><span class="linenos">2237</span></a>
-</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</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-2239"><a href="#L-2239"><span class="linenos">2239</span></a> <span class="k">return</span> <span class="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-2234"><a href="#L-2234"><span class="linenos">2234</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-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">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-2237"><a href="#L-2237"><span class="linenos">2237</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-2238"><a href="#L-2238"><span class="linenos">2238</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-2239"><a href="#L-2239"><span class="linenos">2239</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-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">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-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="k">return</span> <span class="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-2241"><a href="#L-2241"><span class="linenos">2241</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-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</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="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-2245"><a href="#L-2245"><span class="linenos">2245</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-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
-</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</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-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="p">)</span>
-</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</span></a> <span class="p">)</span>
+</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</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-2245"><a href="#L-2245"><span class="linenos">2245</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</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-2247"><a href="#L-2247"><span class="linenos">2247</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-2248"><a href="#L-2248"><span class="linenos">2248</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-2249"><a href="#L-2249"><span class="linenos">2249</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-2250"><a href="#L-2250"><span class="linenos">2250</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-2251"><a href="#L-2251"><span class="linenos">2251</span></a>
-</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a> <span class="k">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-2253"><a href="#L-2253"><span class="linenos">2253</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2254"><a href="#L-2254"><span class="linenos">2254</span></a>
-</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <span class="k">def</span> <span class="nf">safedpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</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">STRICT_STRING_CONCAT</span><span class="p">:</span>
-</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
-</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dpipe_sql</span><span class="p">(</span><span class="n">expression</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">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-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2262"><a href="#L-2262"><span class="linenos">2262</span></a>
-</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</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-2264"><a href="#L-2264"><span class="linenos">2264</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2267"><a href="#L-2267"><span class="linenos">2267</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2268"><a href="#L-2268"><span class="linenos">2268</span></a>
-</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a> <span class="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-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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="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-2273"><a href="#L-2273"><span class="linenos">2273</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2274"><a href="#L-2274"><span class="linenos">2274</span></a>
-</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="k">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-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2277"><a href="#L-2277"><span class="linenos">2277</span></a>
-</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="k">def</span> <span class="nf">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-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2280"><a href="#L-2280"><span class="linenos">2280</span></a>
-</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="k">def</span> <span class="nf">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-2282"><a href="#L-2282"><span class="linenos">2282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="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-2291"><a href="#L-2291"><span class="linenos">2291</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2292"><a href="#L-2292"><span class="linenos">2292</span></a>
-</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</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-2294"><a href="#L-2294"><span class="linenos">2294</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
-</span><span id="L-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">sql</span><span class="p">(</span>
-</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-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 class="k">return</span> <span class="bp">self</span><span class="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-2299"><a href="#L-2299"><span class="linenos">2299</span></a>
-</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</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-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2252"><a href="#L-2252"><span class="linenos">2252</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-2253"><a href="#L-2253"><span class="linenos">2253</span></a> <span class="k">if</span> <span class="n">default</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="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-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="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-2257"><a href="#L-2257"><span class="linenos">2257</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-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="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-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">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-2262"><a href="#L-2262"><span class="linenos">2262</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
+</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="c1"># Remove db from tables</span>
+</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</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-2265"><a href="#L-2265"><span class="linenos">2265</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
+</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a> <span class="p">)</span>
+</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</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-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">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-2271"><a href="#L-2271"><span class="linenos">2271</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-2272"><a href="#L-2272"><span class="linenos">2272</span></a>
+</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</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-2274"><a href="#L-2274"><span class="linenos">2274</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span><span class="p">:</span>
+</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</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><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <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="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
+</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
+</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="p">)</span>
+</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</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-2283"><a href="#L-2283"><span class="linenos">2283</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-2284"><a href="#L-2284"><span class="linenos">2284</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-2285"><a href="#L-2285"><span class="linenos">2285</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-2286"><a href="#L-2286"><span class="linenos">2286</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</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-2288"><a href="#L-2288"><span class="linenos">2288</span></a>
+</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</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-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2291"><a href="#L-2291"><span class="linenos">2291</span></a>
+</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="k">def</span> <span class="nf">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-2293"><a href="#L-2293"><span class="linenos">2293</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-2294"><a href="#L-2294"><span class="linenos">2294</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-2295"><a href="#L-2295"><span class="linenos">2295</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-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="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-2298"><a href="#L-2298"><span class="linenos">2298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</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-2300"><a href="#L-2300"><span class="linenos">2300</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-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="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-2303"><a href="#L-2303"><span class="linenos">2303</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-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">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-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="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-2307"><a href="#L-2307"><span class="linenos">2307</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2308"><a href="#L-2308"><span class="linenos">2308</span></a>
-</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</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-2310"><a href="#L-2310"><span class="linenos">2310</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2306"><a href="#L-2306"><span class="linenos">2306</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-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="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-2309"><a href="#L-2309"><span class="linenos">2309</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-2310"><a href="#L-2310"><span class="linenos">2310</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-2311"><a href="#L-2311"><span class="linenos">2311</span></a>
-</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</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-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">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-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">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-2316"><a href="#L-2316"><span class="linenos">2316</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2317"><a href="#L-2317"><span class="linenos">2317</span></a>
-</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</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-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="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-2322"><a href="#L-2322"><span class="linenos">2322</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2323"><a href="#L-2323"><span class="linenos">2323</span></a>
-</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</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-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="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-2328"><a href="#L-2328"><span class="linenos">2328</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2312"><a href="#L-2312"><span class="linenos">2312</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-2313"><a href="#L-2313"><span class="linenos">2313</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-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2315"><a href="#L-2315"><span class="linenos">2315</span></a>
+</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a> <span class="k">def</span> <span class="nf">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-2317"><a href="#L-2317"><span class="linenos">2317</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-2318"><a href="#L-2318"><span class="linenos">2318</span></a>
+</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="k">def</span> <span class="nf">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-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="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-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">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-2323"><a href="#L-2323"><span class="linenos">2323</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-2324"><a href="#L-2324"><span class="linenos">2324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
+</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</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-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <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">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-2331"><a href="#L-2331"><span class="linenos">2331</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-2330"><a href="#L-2330"><span class="linenos">2330</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-2331"><a href="#L-2331"><span class="linenos">2331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2332"><a href="#L-2332"><span class="linenos">2332</span></a>
-</span><span id="L-2333"><a href="#L-2333"><span class="linenos">2333</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-2334"><a href="#L-2334"><span class="linenos">2334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2337"><a href="#L-2337"><span class="linenos">2337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2338"><a href="#L-2338"><span class="linenos">2338</span></a>
-</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a> <span class="k">def</span> <span class="nf">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-2340"><a href="#L-2340"><span class="linenos">2340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
-</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a>
-</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</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-2343"><a href="#L-2343"><span class="linenos">2343</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-2344"><a href="#L-2344"><span class="linenos">2344</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-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</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-2347"><a href="#L-2347"><span class="linenos">2347</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2348"><a href="#L-2348"><span class="linenos">2348</span></a>
-</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a> <span class="k">def</span> <span class="nf">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-2350"><a href="#L-2350"><span class="linenos">2350</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-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="k">return</span> <span class="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-2333"><a href="#L-2333"><span class="linenos">2333</span></a> <span class="k">def</span> <span class="nf">safedpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
+</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
+</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dpipe_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</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="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-2339"><a href="#L-2339"><span class="linenos">2339</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2340"><a href="#L-2340"><span class="linenos">2340</span></a>
+</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="k">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-2342"><a href="#L-2342"><span class="linenos">2342</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2343"><a href="#L-2343"><span class="linenos">2343</span></a>
+</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a> <span class="k">def</span> <span class="nf">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-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="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-2348"><a href="#L-2348"><span class="linenos">2348</span></a> <span class="k">return</span> <span class="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-2349"><a href="#L-2349"><span class="linenos">2349</span></a>
+</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</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-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2352"><a href="#L-2352"><span class="linenos">2352</span></a>
-</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</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-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</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-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a> <span class="n">arg_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</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-2357"><a href="#L-2357"><span class="linenos">2357</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2358"><a href="#L-2358"><span class="linenos">2358</span></a>
-</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</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-2360"><a href="#L-2360"><span class="linenos">2360</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-2361"><a href="#L-2361"><span class="linenos">2361</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-2362"><a href="#L-2362"><span class="linenos">2362</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</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-2359"><a href="#L-2359"><span class="linenos">2359</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-2360"><a href="#L-2360"><span class="linenos">2360</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2361"><a href="#L-2361"><span class="linenos">2361</span></a>
+</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</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-2363"><a href="#L-2363"><span class="linenos">2363</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2364"><a href="#L-2364"><span class="linenos">2364</span></a>
-</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
-</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a>
-</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a>
-</span><span id="L-2372"><a href="#L-2372"><span class="linenos">2372</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
-</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</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-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
-</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</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-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2367"><a href="#L-2367"><span class="linenos">2367</span></a>
+</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</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-2369"><a href="#L-2369"><span class="linenos">2369</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">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-2372"><a href="#L-2372"><span class="linenos">2372</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
+</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</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-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="p">)</span>
+</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2377"><a href="#L-2377"><span class="linenos">2377</span></a>
+</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</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-2379"><a href="#L-2379"><span class="linenos">2379</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2380"><a href="#L-2380"><span class="linenos">2380</span></a>
-</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</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-2382"><a href="#L-2382"><span class="linenos">2382</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-2383"><a href="#L-2383"><span class="linenos">2383</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-2384"><a href="#L-2384"><span class="linenos">2384</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2385"><a href="#L-2385"><span class="linenos">2385</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-2381"><a href="#L-2381"><span class="linenos">2381</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-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2383"><a href="#L-2383"><span class="linenos">2383</span></a>
+</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</span></a> <span class="k">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-2385"><a href="#L-2385"><span class="linenos">2385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2388"><a href="#L-2388"><span class="linenos">2388</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-2387"><a href="#L-2387"><span class="linenos">2387</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-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2389"><a href="#L-2389"><span class="linenos">2389</span></a>
-</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</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-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-2392"><a href="#L-2392"><span class="linenos">2392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span>
-</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="p">)</span>
-</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a>
-</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2397"><a href="#L-2397"><span class="linenos">2397</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-2398"><a href="#L-2398"><span class="linenos">2398</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-2399"><a href="#L-2399"><span class="linenos">2399</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-2400"><a href="#L-2400"><span class="linenos">2400</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-2401"><a href="#L-2401"><span class="linenos">2401</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-2402"><a href="#L-2402"><span class="linenos">2402</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</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-2404"><a href="#L-2404"><span class="linenos">2404</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-2405"><a href="#L-2405"><span class="linenos">2405</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">expression</span><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-2390"><a href="#L-2390"><span class="linenos">2390</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-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2392"><a href="#L-2392"><span class="linenos">2392</span></a>
+</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="k">def</span> <span class="nf">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-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">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-2397"><a href="#L-2397"><span class="linenos">2397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2401"><a href="#L-2401"><span class="linenos">2401</span></a>
+</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</span></a> <span class="k">def</span> <span class="nf">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-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2404"><a href="#L-2404"><span class="linenos">2404</span></a>
+</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</span></a> <span class="k">def</span> <span class="nf">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-2406"><a href="#L-2406"><span class="linenos">2406</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="n">expressions</span><span class="p">:</span>
-</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</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-2409"><a href="#L-2409"><span class="linenos">2409</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-2410"><a href="#L-2410"><span class="linenos">2410</span></a>
-</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</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-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2413"><a href="#L-2413"><span class="linenos">2413</span></a>
-</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="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-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="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
-</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</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-2418"><a href="#L-2418"><span class="linenos">2418</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-2414"><a href="#L-2414"><span class="linenos">2414</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-2415"><a href="#L-2415"><span class="linenos">2415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2416"><a href="#L-2416"><span class="linenos">2416</span></a>
+</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</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-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
</span><span id="L-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">result_sqls</span> <span class="o">=</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">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-2422"><a href="#L-2422"><span class="linenos">2422</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-2423"><a href="#L-2423"><span class="linenos">2423</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-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="k">continue</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="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-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="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-2429"><a href="#L-2429"><span class="linenos">2429</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-2430"><a href="#L-2430"><span class="linenos">2430</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-2431"><a href="#L-2431"><span class="linenos">2431</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</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-2433"><a href="#L-2433"><span class="linenos">2433</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-2434"><a href="#L-2434"><span class="linenos">2434</span></a> <span class="p">)</span>
-</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</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-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">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-2439"><a href="#L-2439"><span class="linenos">2439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
-</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a>
-</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</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-2442"><a href="#L-2442"><span class="linenos">2442</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-2443"><a href="#L-2443"><span class="linenos">2443</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-2444"><a href="#L-2444"><span class="linenos">2444</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</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-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="k">return</span> <span class="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-2420"><a href="#L-2420"><span class="linenos">2420</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-2421"><a href="#L-2421"><span class="linenos">2421</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-2422"><a href="#L-2422"><span class="linenos">2422</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-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</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-2425"><a href="#L-2425"><span class="linenos">2425</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-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="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-2428"><a href="#L-2428"><span class="linenos">2428</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-2429"><a href="#L-2429"><span class="linenos">2429</span></a> <span class="k">return</span> <span class="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-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">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-2432"><a href="#L-2432"><span class="linenos">2432</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a>
+</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="n">arg_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a>
+</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</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-2438"><a href="#L-2438"><span class="linenos">2438</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-2439"><a href="#L-2439"><span class="linenos">2439</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-2440"><a href="#L-2440"><span class="linenos">2440</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</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-2442"><a href="#L-2442"><span class="linenos">2442</span></a>
+</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
+</span><span id="L-2444"><a href="#L-2444"><span class="linenos">2444</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
</span><span id="L-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="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-2449"><a href="#L-2449"><span class="linenos">2449</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-2450"><a href="#L-2450"><span class="linenos">2450</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-2451"><a href="#L-2451"><span class="linenos">2451</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-2452"><a href="#L-2452"><span class="linenos">2452</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-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="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-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</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-2457"><a href="#L-2457"><span class="linenos">2457</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-2458"><a href="#L-2458"><span class="linenos">2458</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-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="p">)</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="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-2462"><a href="#L-2462"><span class="linenos">2462</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-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="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-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">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-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</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-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</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-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="p">)</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></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-2474"><a href="#L-2474"><span class="linenos">2474</span></a>
-</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</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-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</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-2478"><a href="#L-2478"><span class="linenos">2478</span></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-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">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-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2484"><a href="#L-2484"><span class="linenos">2484</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-2485"><a href="#L-2485"><span class="linenos">2485</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-2486"><a href="#L-2486"><span class="linenos">2486</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-2487"><a href="#L-2487"><span class="linenos">2487</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-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a>
+</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
+</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</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-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
+</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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="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-2460"><a href="#L-2460"><span class="linenos">2460</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-2461"><a href="#L-2461"><span class="linenos">2461</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-2462"><a href="#L-2462"><span class="linenos">2462</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-2463"><a href="#L-2463"><span class="linenos">2463</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-2464"><a href="#L-2464"><span class="linenos">2464</span></a>
+</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="k">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-2466"><a href="#L-2466"><span class="linenos">2466</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-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="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-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span>
+</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="p">)</span>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a>
+</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</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-2476"><a href="#L-2476"><span class="linenos">2476</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-2477"><a href="#L-2477"><span class="linenos">2477</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-2478"><a href="#L-2478"><span class="linenos">2478</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-2479"><a href="#L-2479"><span class="linenos">2479</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-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</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-2482"><a href="#L-2482"><span class="linenos">2482</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-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</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-2485"><a href="#L-2485"><span class="linenos">2485</span></a>
+</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</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="s2">&quot;&quot;</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="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-2490"><a href="#L-2490"><span class="linenos">2490</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-2491"><a href="#L-2491"><span class="linenos">2491</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-2492"><a href="#L-2492"><span class="linenos">2492</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-2493"><a href="#L-2493"><span class="linenos">2493</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-2494"><a href="#L-2494"><span class="linenos">2494</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-2495"><a href="#L-2495"><span class="linenos">2495</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-2496"><a href="#L-2496"><span class="linenos">2496</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-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</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-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</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-2501"><a href="#L-2501"><span class="linenos">2501</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-2502"><a href="#L-2502"><span class="linenos">2502</span></a>
-</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="k">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-2504"><a href="#L-2504"><span class="linenos">2504</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</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-2506"><a href="#L-2506"><span class="linenos">2506</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-2507"><a href="#L-2507"><span class="linenos">2507</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-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">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-2510"><a href="#L-2510"><span class="linenos">2510</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-2511"><a href="#L-2511"><span class="linenos">2511</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-2512"><a href="#L-2512"><span class="linenos">2512</span></a>
-</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="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-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">def</span> <span class="nf">dictproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</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-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="k">def</span> <span class="nf">dictrange_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">)</span>
-</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">)</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a>
-</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a>
-</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a>
-</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">)</span>
-</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a>
-</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;having&quot;</span><span class="p">)</span>
+</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a>
+</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</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-2493"><a href="#L-2493"><span class="linenos">2493</span></a>
+</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</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-2495"><a href="#L-2495"><span class="linenos">2495</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-2496"><a href="#L-2496"><span class="linenos">2496</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-2497"><a href="#L-2497"><span class="linenos">2497</span></a>
+</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</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-2500"><a href="#L-2500"><span class="linenos">2500</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-2501"><a href="#L-2501"><span class="linenos">2501</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-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="k">continue</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="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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</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-2508"><a href="#L-2508"><span class="linenos">2508</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-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</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-2511"><a href="#L-2511"><span class="linenos">2511</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-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 class="k">else</span><span class="p">:</span>
+</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</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-2515"><a href="#L-2515"><span class="linenos">2515</span></a>
+</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</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-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
+</span><span id="L-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">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-2520"><a href="#L-2520"><span class="linenos">2520</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-2521"><a href="#L-2521"><span class="linenos">2521</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-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="k">if</span> <span class="n">flat</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="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-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="k">return</span> <span class="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-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">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-2527"><a href="#L-2527"><span class="linenos">2527</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-2528"><a href="#L-2528"><span class="linenos">2528</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-2529"><a href="#L-2529"><span class="linenos">2529</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-2530"><a href="#L-2530"><span class="linenos">2530</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-2531"><a href="#L-2531"><span class="linenos">2531</span></a>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</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-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</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-2535"><a href="#L-2535"><span class="linenos">2535</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-2536"><a href="#L-2536"><span class="linenos">2536</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-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <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">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-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><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-2541"><a href="#L-2541"><span class="linenos">2541</span></a>
+</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="k">def</span> <span class="nf">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-2543"><a href="#L-2543"><span class="linenos">2543</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-2544"><a href="#L-2544"><span class="linenos">2544</span></a>
-</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a>
-</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="k">def</span> <span class="nf">querytransform_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_before&quot;</span><span class="p">)</span>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_writer&quot;</span><span class="p">)</span>
-</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
-</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_after&quot;</span><span class="p">)</span>
-</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_reader&quot;</span><span class="p">)</span>
-</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">def</span> <span class="nf">indexconstraintoption_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="n">key_block_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;key_block_size&quot;</span><span class="p">)</span>
-</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
-</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</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-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a>
-</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;parser&quot;</span><span class="p">)</span>
-</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;comment&quot;</span><span class="p">)</span>
-</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="k">if</span> <span class="n">comment</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="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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">visible</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;visible&quot;</span><span class="p">)</span>
-</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
-</span><span id="L-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="n">engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;engine_attr&quot;</span><span class="p">)</span>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="k">if</span> <span class="n">engine_attr</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="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="n">secondary_engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">)</span>
-</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
-</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a>
-</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</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-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</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-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="n">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;type&quot;</span><span class="p">)</span>
-</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">type_</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">type_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</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-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">type_</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</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-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">expressions</span> <span class="o">=</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">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-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="p">)</span>
+</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></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-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">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-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</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-2556"><a href="#L-2556"><span class="linenos">2556</span></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-2557"><a href="#L-2557"><span class="linenos">2557</span></a>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</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-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="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-2562"><a href="#L-2562"><span class="linenos">2562</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-2563"><a href="#L-2563"><span class="linenos">2563</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-2564"><a href="#L-2564"><span class="linenos">2564</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-2565"><a href="#L-2565"><span class="linenos">2565</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-2566"><a href="#L-2566"><span class="linenos">2566</span></a>
+</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="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-2568"><a href="#L-2568"><span class="linenos">2568</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-2569"><a href="#L-2569"><span class="linenos">2569</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-2570"><a href="#L-2570"><span class="linenos">2570</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-2571"><a href="#L-2571"><span class="linenos">2571</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-2572"><a href="#L-2572"><span class="linenos">2572</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-2573"><a href="#L-2573"><span class="linenos">2573</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-2574"><a href="#L-2574"><span class="linenos">2574</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-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="n">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-2577"><a href="#L-2577"><span class="linenos">2577</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</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-2579"><a href="#L-2579"><span class="linenos">2579</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-2580"><a href="#L-2580"><span class="linenos">2580</span></a>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</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-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="n">hints</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">)</span>
+</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
+</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
+</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</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-2593"><a href="#L-2593"><span class="linenos">2593</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-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</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="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">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-2599"><a href="#L-2599"><span class="linenos">2599</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-2600"><a href="#L-2600"><span class="linenos">2600</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-2601"><a href="#L-2601"><span class="linenos">2601</span></a>
+</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="k">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-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="k">def</span> <span class="nf">dictproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</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-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a>
-</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a><span class="k">def</span> <span class="nf">cached_generator</span><span class="p">(</span>
-</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="n">cache</span><span 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">int</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-2613"><a href="#L-2613"><span class="linenos">2613</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">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-2614"><a href="#L-2614"><span class="linenos">2614</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a cached generator.&quot;&quot;&quot;</span>
-</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="n">cache</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cache</span>
-</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="n">generator</span> <span class="o">=</span> <span class="n">Generator</span><span class="p">(</span><span class="n">normalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="s2">&quot;safe&quot;</span><span class="p">)</span>
-</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">e</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><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="k">def</span> <span class="nf">dictrange_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">)</span>
+</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">)</span>
+</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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">dictsubproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a>
+</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">)</span>
+</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;having&quot;</span><span class="p">)</span>
+</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a>
+</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">def</span> <span class="nf">querytransform_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_before&quot;</span><span class="p">)</span>
+</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_writer&quot;</span><span class="p">)</span>
+</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
+</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_after&quot;</span><span class="p">)</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_reader&quot;</span><span class="p">)</span>
+</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">indexconstraintoption_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="n">key_block_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;key_block_size&quot;</span><span class="p">)</span>
+</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
+</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a>
+</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="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-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a>
+</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;parser&quot;</span><span class="p">)</span>
+</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a>
+</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;comment&quot;</span><span class="p">)</span>
+</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a>
+</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;visible&quot;</span><span class="p">)</span>
+</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="n">engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;engine_attr&quot;</span><span class="p">)</span>
+</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a>
+</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="n">secondary_engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">)</span>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
+</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a>
+</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">indexcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</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-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
+</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</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-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="n">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;type&quot;</span><span class="p">)</span>
+</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">type_</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">type_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
+</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</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-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">type_</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="k">def</span> <span class="nf">nvl2_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</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><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="p">)</span>
+</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="n">else_cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
+</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="o">.</span><span class="n">copy</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
+</span><span id="L-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">comprehension_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;iterator&quot;</span><span class="p">)</span>
+</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</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-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a>
+</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a><span class="k">def</span> <span class="nf">cached_generator</span><span class="p">(</span>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="n">cache</span><span 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">int</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-2725"><a href="#L-2725"><span class="linenos">2725</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="nb">str</span><span class="p">]:</span>
+</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a cached generator.&quot;&quot;&quot;</span>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">cache</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cache</span>
+</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="n">generator</span> <span class="o">=</span> <span class="n">Generator</span><span class="p">(</span><span class="n">normalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="s2">&quot;safe&quot;</span><span class="p">)</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">e</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></pre></div>
@@ -3720,2551 +3856,2663 @@
</span><span id="Generator-62"><a href="#Generator-62"><span class="linenos"> 62</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-63"><a href="#Generator-63"><span class="linenos"> 63</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;DEFAULT &#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;default&#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">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-64"><a href="#Generator-64"><span class="linenos"> 64</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-65"><a href="#Generator-65"><span class="linenos"> 65</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COLLATE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-66"><a href="#Generator-66"><span class="linenos"> 66</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span 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;COPY GRANTS&quot;</span><span class="p">,</span>
-</span><span id="Generator-67"><a href="#Generator-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-68"><a href="#Generator-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-69"><a href="#Generator-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DEFAULT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-70"><a href="#Generator-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EncodeColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ENCODE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-71"><a href="#Generator-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-72"><a href="#Generator-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span 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;EXTERNAL&quot;</span><span class="p">,</span>
-</span><span id="Generator-73"><a href="#Generator-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span 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;HEAP&quot;</span><span class="p">,</span>
-</span><span id="Generator-74"><a href="#Generator-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;INLINE LENGTH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-75"><a href="#Generator-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-76"><a href="#Generator-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-77"><a href="#Generator-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;NO &#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">LOG&quot;</span><span class="p">,</span>
-</span><span id="Generator-78"><a href="#Generator-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span 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;MATERIALIZED&quot;</span><span class="p">,</span>
-</span><span id="Generator-79"><a href="#Generator-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span 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;NO PRIMARY INDEX&quot;</span><span class="p">,</span>
-</span><span id="Generator-80"><a href="#Generator-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON COMMIT </span><span class="si">{</span><span class="s1">&#39;DELETE&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;delete&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;PRESERVE&#39;</span><span class="si">}</span><span class="s2"> ROWS&quot;</span><span class="p">,</span>
-</span><span id="Generator-81"><a href="#Generator-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON 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">e</span><span class="p">,</span><span 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-82"><a href="#Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PathColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PATH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-83"><a href="#Generator-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-84"><a href="#Generator-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;MULTI&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;multi&#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">SET&quot;</span><span class="p">,</span>
-</span><span id="Generator-85"><a href="#Generator-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SETTINGS</span><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="p">(</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="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator-86"><a href="#Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SQL SECURITY </span><span class="si">{</span><span class="s1">&#39;DEFINER&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;definer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;INVOKER&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator-87"><a href="#Generator-87"><span class="linenos"> 87</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="n">e</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Generator-88"><a href="#Generator-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TEMPORARY&quot;</span><span class="p">,</span>
-</span><span id="Generator-89"><a href="#Generator-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator-90"><a href="#Generator-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span 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;TRANSIENT&quot;</span><span class="p">,</span>
-</span><span id="Generator-91"><a href="#Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TITLE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-92"><a href="#Generator-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UppercaseColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UPPERCASE&quot;</span><span class="p">,</span>
-</span><span id="Generator-93"><a href="#Generator-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAP&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]),</span>
-</span><span id="Generator-94"><a href="#Generator-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span 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;VOLATILE&quot;</span><span class="p">,</span>
-</span><span id="Generator-95"><a href="#Generator-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH JOURNAL 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">e</span><span class="p">,</span><span 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-96"><a href="#Generator-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
-</span><span id="Generator-97"><a href="#Generator-97"><span class="linenos"> 97</span></a>
-</span><span id="Generator-98"><a href="#Generator-98"><span class="linenos"> 98</span></a> <span class="c1"># Whether or not null ordering is supported in order by</span>
-</span><span id="Generator-99"><a href="#Generator-99"><span class="linenos"> 99</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Generator-100"><a href="#Generator-100"><span class="linenos"> 100</span></a>
-</span><span id="Generator-101"><a href="#Generator-101"><span class="linenos"> 101</span></a> <span class="c1"># Whether or not locking reads (i.e. SELECT ... FOR UPDATE/SHARE) are supported</span>
-</span><span id="Generator-102"><a href="#Generator-102"><span class="linenos"> 102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-65"><a href="#Generator-65"><span class="linenos"> 65</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED (</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="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator-66"><a href="#Generator-66"><span class="linenos"> 66</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COLLATE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-67"><a href="#Generator-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span 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;COPY GRANTS&quot;</span><span class="p">,</span>
+</span><span id="Generator-68"><a href="#Generator-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-69"><a href="#Generator-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-70"><a href="#Generator-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DEFAULT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-71"><a href="#Generator-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EncodeColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ENCODE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-72"><a href="#Generator-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-73"><a href="#Generator-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span 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;EXTERNAL&quot;</span><span class="p">,</span>
+</span><span id="Generator-74"><a href="#Generator-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span 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;HEAP&quot;</span><span class="p">,</span>
+</span><span id="Generator-75"><a href="#Generator-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;INLINE LENGTH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-76"><a href="#Generator-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalDayToSecondSpan</span><span class="p">:</span> <span class="s2">&quot;DAY TO SECOND&quot;</span><span class="p">,</span>
+</span><span id="Generator-77"><a href="#Generator-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalYearToMonthSpan</span><span class="p">:</span> <span class="s2">&quot;YEAR TO MONTH&quot;</span><span class="p">,</span>
+</span><span id="Generator-78"><a href="#Generator-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-79"><a href="#Generator-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-80"><a href="#Generator-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;NO &#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">LOG&quot;</span><span class="p">,</span>
+</span><span id="Generator-81"><a href="#Generator-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span 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;MATERIALIZED&quot;</span><span class="p">,</span>
+</span><span id="Generator-82"><a href="#Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span 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;NO PRIMARY INDEX&quot;</span><span class="p">,</span>
+</span><span id="Generator-83"><a href="#Generator-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NonClusteredColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;NONCLUSTERED (</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="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator-84"><a href="#Generator-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">:</span> <span 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;NOT FOR REPLICATION&quot;</span><span class="p">,</span>
+</span><span id="Generator-85"><a href="#Generator-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON COMMIT </span><span class="si">{</span><span class="s1">&#39;DELETE&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;delete&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;PRESERVE&#39;</span><span class="si">}</span><span class="s2"> ROWS&quot;</span><span class="p">,</span>
+</span><span id="Generator-86"><a href="#Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</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">e</span><span class="p">,</span><span 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-87"><a href="#Generator-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ON 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">e</span><span class="p">,</span><span 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-88"><a href="#Generator-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PathColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PATH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-89"><a href="#Generator-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="Generator-90"><a href="#Generator-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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;MULTI&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;multi&#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">SET&quot;</span><span class="p">,</span>
+</span><span id="Generator-91"><a href="#Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SETTINGS</span><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="p">(</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="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator-92"><a href="#Generator-92"><span class="linenos"> 92</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;SQL SECURITY </span><span class="si">{</span><span class="s1">&#39;DEFINER&#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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;definer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;INVOKER&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator-93"><a href="#Generator-93"><span class="linenos"> 93</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="n">e</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Generator-94"><a href="#Generator-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TEMPORARY&quot;</span><span class="p">,</span>
+</span><span id="Generator-95"><a href="#Generator-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator-96"><a href="#Generator-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span 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;TRANSIENT&quot;</span><span class="p">,</span>
+</span><span id="Generator-97"><a href="#Generator-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TITLE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span 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-98"><a href="#Generator-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UppercaseColumnConstraint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UPPERCASE&quot;</span><span class="p">,</span>
+</span><span id="Generator-99"><a href="#Generator-99"><span class="linenos"> 99</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;MAP&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]),</span>
+</span><span id="Generator-100"><a href="#Generator-100"><span class="linenos"> 100</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span 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;VOLATILE&quot;</span><span class="p">,</span>
+</span><span id="Generator-101"><a href="#Generator-101"><span class="linenos"> 101</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH JOURNAL 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">e</span><span class="p">,</span><span 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-102"><a href="#Generator-102"><span class="linenos"> 102</span></a> <span class="p">}</span>
</span><span id="Generator-103"><a href="#Generator-103"><span class="linenos"> 103</span></a>
-</span><span id="Generator-104"><a href="#Generator-104"><span class="linenos"> 104</span></a> <span class="c1"># Always do union distinct or union all</span>
-</span><span id="Generator-105"><a href="#Generator-105"><span class="linenos"> 105</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-104"><a href="#Generator-104"><span class="linenos"> 104</span></a> <span class="c1"># Whether or not null ordering is supported in order by</span>
+</span><span id="Generator-105"><a href="#Generator-105"><span class="linenos"> 105</span></a> <span class="n">NULL_ORDERING_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-106"><a href="#Generator-106"><span class="linenos"> 106</span></a>
-</span><span id="Generator-107"><a href="#Generator-107"><span class="linenos"> 107</span></a> <span class="c1"># Wrap derived values in parens, usually standard but spark doesn&#39;t support it</span>
-</span><span id="Generator-108"><a href="#Generator-108"><span class="linenos"> 108</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-107"><a href="#Generator-107"><span class="linenos"> 107</span></a> <span class="c1"># Whether or not locking reads (i.e. SELECT ... FOR UPDATE/SHARE) are supported</span>
+</span><span id="Generator-108"><a href="#Generator-108"><span class="linenos"> 108</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-109"><a href="#Generator-109"><span class="linenos"> 109</span></a>
-</span><span id="Generator-110"><a href="#Generator-110"><span class="linenos"> 110</span></a> <span class="c1"># Whether or not create function uses an AS before the RETURN</span>
-</span><span id="Generator-111"><a href="#Generator-111"><span class="linenos"> 111</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-110"><a href="#Generator-110"><span class="linenos"> 110</span></a> <span class="c1"># Always do union distinct or union all</span>
+</span><span id="Generator-111"><a href="#Generator-111"><span class="linenos"> 111</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-112"><a href="#Generator-112"><span class="linenos"> 112</span></a>
-</span><span id="Generator-113"><a href="#Generator-113"><span class="linenos"> 113</span></a> <span class="c1"># Whether or not MERGE ... WHEN MATCHED BY SOURCE is allowed</span>
-</span><span id="Generator-114"><a href="#Generator-114"><span class="linenos"> 114</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-113"><a href="#Generator-113"><span class="linenos"> 113</span></a> <span class="c1"># Wrap derived values in parens, usually standard but spark doesn&#39;t support it</span>
+</span><span id="Generator-114"><a href="#Generator-114"><span class="linenos"> 114</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-115"><a href="#Generator-115"><span class="linenos"> 115</span></a>
-</span><span id="Generator-116"><a href="#Generator-116"><span class="linenos"> 116</span></a> <span class="c1"># Whether or not the INTERVAL expression works only with values like &#39;1 day&#39;</span>
-</span><span id="Generator-117"><a href="#Generator-117"><span class="linenos"> 117</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-116"><a href="#Generator-116"><span class="linenos"> 116</span></a> <span class="c1"># Whether or not create function uses an AS before the RETURN</span>
+</span><span id="Generator-117"><a href="#Generator-117"><span class="linenos"> 117</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-118"><a href="#Generator-118"><span class="linenos"> 118</span></a>
-</span><span id="Generator-119"><a href="#Generator-119"><span class="linenos"> 119</span></a> <span class="c1"># Whether or not the plural form of date parts like day (i.e. &quot;days&quot;) is supported in INTERVALs</span>
-</span><span id="Generator-120"><a href="#Generator-120"><span class="linenos"> 120</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-119"><a href="#Generator-119"><span class="linenos"> 119</span></a> <span class="c1"># Whether or not MERGE ... WHEN MATCHED BY SOURCE is allowed</span>
+</span><span id="Generator-120"><a href="#Generator-120"><span class="linenos"> 120</span></a> <span class="n">MATCHED_BY_SOURCE</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-121"><a href="#Generator-121"><span class="linenos"> 121</span></a>
-</span><span id="Generator-122"><a href="#Generator-122"><span class="linenos"> 122</span></a> <span class="c1"># Whether or not the TABLESAMPLE clause supports a method name, like BERNOULLI</span>
-</span><span id="Generator-123"><a href="#Generator-123"><span class="linenos"> 123</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-122"><a href="#Generator-122"><span class="linenos"> 122</span></a> <span class="c1"># Whether or not the INTERVAL expression works only with values like &#39;1 day&#39;</span>
+</span><span id="Generator-123"><a href="#Generator-123"><span class="linenos"> 123</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-124"><a href="#Generator-124"><span class="linenos"> 124</span></a>
-</span><span id="Generator-125"><a href="#Generator-125"><span class="linenos"> 125</span></a> <span class="c1"># Whether or not to treat the number in TABLESAMPLE (50) as a percentage</span>
-</span><span id="Generator-126"><a href="#Generator-126"><span class="linenos"> 126</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-125"><a href="#Generator-125"><span class="linenos"> 125</span></a> <span class="c1"># Whether or not the plural form of date parts like day (i.e. &quot;days&quot;) is supported in INTERVALs</span>
+</span><span id="Generator-126"><a href="#Generator-126"><span class="linenos"> 126</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-127"><a href="#Generator-127"><span class="linenos"> 127</span></a>
-</span><span id="Generator-128"><a href="#Generator-128"><span class="linenos"> 128</span></a> <span class="c1"># Whether or not limit and fetch are supported (possible values: &quot;ALL&quot;, &quot;LIMIT&quot;, &quot;FETCH&quot;)</span>
-</span><span id="Generator-129"><a href="#Generator-129"><span class="linenos"> 129</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
+</span><span id="Generator-128"><a href="#Generator-128"><span class="linenos"> 128</span></a> <span class="c1"># Whether or not the TABLESAMPLE clause supports a method name, like BERNOULLI</span>
+</span><span id="Generator-129"><a href="#Generator-129"><span class="linenos"> 129</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-130"><a href="#Generator-130"><span class="linenos"> 130</span></a>
-</span><span id="Generator-131"><a href="#Generator-131"><span class="linenos"> 131</span></a> <span class="c1"># Whether or not a table is allowed to be renamed with a db</span>
-</span><span id="Generator-132"><a href="#Generator-132"><span class="linenos"> 132</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-131"><a href="#Generator-131"><span class="linenos"> 131</span></a> <span class="c1"># Whether or not to treat the number in TABLESAMPLE (50) as a percentage</span>
+</span><span id="Generator-132"><a href="#Generator-132"><span class="linenos"> 132</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-133"><a href="#Generator-133"><span class="linenos"> 133</span></a>
-</span><span id="Generator-134"><a href="#Generator-134"><span class="linenos"> 134</span></a> <span class="c1"># The separator for grouping sets and rollups</span>
-</span><span id="Generator-135"><a href="#Generator-135"><span class="linenos"> 135</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
+</span><span id="Generator-134"><a href="#Generator-134"><span class="linenos"> 134</span></a> <span class="c1"># Whether or not limit and fetch are supported (possible values: &quot;ALL&quot;, &quot;LIMIT&quot;, &quot;FETCH&quot;)</span>
+</span><span id="Generator-135"><a href="#Generator-135"><span class="linenos"> 135</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
</span><span id="Generator-136"><a href="#Generator-136"><span class="linenos"> 136</span></a>
-</span><span id="Generator-137"><a href="#Generator-137"><span class="linenos"> 137</span></a> <span class="c1"># The string used for creating an index on a table</span>
-</span><span id="Generator-138"><a href="#Generator-138"><span class="linenos"> 138</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="Generator-137"><a href="#Generator-137"><span class="linenos"> 137</span></a> <span class="c1"># Whether or not a table is allowed to be renamed with a db</span>
+</span><span id="Generator-138"><a href="#Generator-138"><span class="linenos"> 138</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-139"><a href="#Generator-139"><span class="linenos"> 139</span></a>
-</span><span id="Generator-140"><a href="#Generator-140"><span class="linenos"> 140</span></a> <span class="c1"># Whether or not join hints should be generated</span>
-</span><span id="Generator-141"><a href="#Generator-141"><span class="linenos"> 141</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-140"><a href="#Generator-140"><span class="linenos"> 140</span></a> <span class="c1"># The separator for grouping sets and rollups</span>
+</span><span id="Generator-141"><a href="#Generator-141"><span class="linenos"> 141</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
</span><span id="Generator-142"><a href="#Generator-142"><span class="linenos"> 142</span></a>
-</span><span id="Generator-143"><a href="#Generator-143"><span class="linenos"> 143</span></a> <span class="c1"># Whether or not table hints should be generated</span>
-</span><span id="Generator-144"><a href="#Generator-144"><span class="linenos"> 144</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-143"><a href="#Generator-143"><span class="linenos"> 143</span></a> <span class="c1"># The string used for creating an index on a table</span>
+</span><span id="Generator-144"><a href="#Generator-144"><span class="linenos"> 144</span></a> <span class="n">INDEX_ON</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
</span><span id="Generator-145"><a href="#Generator-145"><span class="linenos"> 145</span></a>
-</span><span id="Generator-146"><a href="#Generator-146"><span class="linenos"> 146</span></a> <span class="c1"># Whether or not query hints should be generated</span>
-</span><span id="Generator-147"><a href="#Generator-147"><span class="linenos"> 147</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-146"><a href="#Generator-146"><span class="linenos"> 146</span></a> <span class="c1"># Whether or not join hints should be generated</span>
+</span><span id="Generator-147"><a href="#Generator-147"><span class="linenos"> 147</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-148"><a href="#Generator-148"><span class="linenos"> 148</span></a>
-</span><span id="Generator-149"><a href="#Generator-149"><span class="linenos"> 149</span></a> <span class="c1"># What kind of separator to use for query hints</span>
-</span><span id="Generator-150"><a href="#Generator-150"><span class="linenos"> 150</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span>
+</span><span id="Generator-149"><a href="#Generator-149"><span class="linenos"> 149</span></a> <span class="c1"># Whether or not table hints should be generated</span>
+</span><span id="Generator-150"><a href="#Generator-150"><span class="linenos"> 150</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-151"><a href="#Generator-151"><span class="linenos"> 151</span></a>
-</span><span id="Generator-152"><a href="#Generator-152"><span class="linenos"> 152</span></a> <span class="c1"># Whether or not comparing against booleans (e.g. x IS TRUE) is supported</span>
-</span><span id="Generator-153"><a href="#Generator-153"><span class="linenos"> 153</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-152"><a href="#Generator-152"><span class="linenos"> 152</span></a> <span class="c1"># Whether or not query hints should be generated</span>
+</span><span id="Generator-153"><a href="#Generator-153"><span class="linenos"> 153</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-154"><a href="#Generator-154"><span class="linenos"> 154</span></a>
-</span><span id="Generator-155"><a href="#Generator-155"><span class="linenos"> 155</span></a> <span class="c1"># Whether or not to include the &quot;SET&quot; keyword in the &quot;INSERT ... ON DUPLICATE KEY UPDATE&quot; statement</span>
-</span><span id="Generator-156"><a href="#Generator-156"><span class="linenos"> 156</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-155"><a href="#Generator-155"><span class="linenos"> 155</span></a> <span class="c1"># What kind of separator to use for query hints</span>
+</span><span id="Generator-156"><a href="#Generator-156"><span class="linenos"> 156</span></a> <span class="n">QUERY_HINT_SEP</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span>
</span><span id="Generator-157"><a href="#Generator-157"><span class="linenos"> 157</span></a>
-</span><span id="Generator-158"><a href="#Generator-158"><span class="linenos"> 158</span></a> <span class="c1"># Whether or not to generate the limit as TOP &lt;value&gt; instead of LIMIT &lt;value&gt;</span>
-</span><span id="Generator-159"><a href="#Generator-159"><span class="linenos"> 159</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-158"><a href="#Generator-158"><span class="linenos"> 158</span></a> <span class="c1"># Whether or not comparing against booleans (e.g. x IS TRUE) is supported</span>
+</span><span id="Generator-159"><a href="#Generator-159"><span class="linenos"> 159</span></a> <span class="n">IS_BOOL_ALLOWED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-160"><a href="#Generator-160"><span class="linenos"> 160</span></a>
-</span><span id="Generator-161"><a href="#Generator-161"><span class="linenos"> 161</span></a> <span class="c1"># Whether or not to generate INSERT INTO ... RETURNING or INSERT INTO RETURNING ...</span>
-</span><span id="Generator-162"><a href="#Generator-162"><span class="linenos"> 162</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-161"><a href="#Generator-161"><span class="linenos"> 161</span></a> <span class="c1"># Whether or not to include the &quot;SET&quot; keyword in the &quot;INSERT ... ON DUPLICATE KEY UPDATE&quot; statement</span>
+</span><span id="Generator-162"><a href="#Generator-162"><span class="linenos"> 162</span></a> <span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-163"><a href="#Generator-163"><span class="linenos"> 163</span></a>
-</span><span id="Generator-164"><a href="#Generator-164"><span class="linenos"> 164</span></a> <span class="c1"># Whether or not to generate the (+) suffix for columns used in old-style join conditions</span>
-</span><span id="Generator-165"><a href="#Generator-165"><span class="linenos"> 165</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-164"><a href="#Generator-164"><span class="linenos"> 164</span></a> <span class="c1"># Whether or not to generate the limit as TOP &lt;value&gt; instead of LIMIT &lt;value&gt;</span>
+</span><span id="Generator-165"><a href="#Generator-165"><span class="linenos"> 165</span></a> <span class="n">LIMIT_IS_TOP</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-166"><a href="#Generator-166"><span class="linenos"> 166</span></a>
-</span><span id="Generator-167"><a href="#Generator-167"><span class="linenos"> 167</span></a> <span class="c1"># Whether or not to generate an unquoted value for EXTRACT&#39;s date part argument</span>
-</span><span id="Generator-168"><a href="#Generator-168"><span class="linenos"> 168</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-167"><a href="#Generator-167"><span class="linenos"> 167</span></a> <span class="c1"># Whether or not to generate INSERT INTO ... RETURNING or INSERT INTO RETURNING ...</span>
+</span><span id="Generator-168"><a href="#Generator-168"><span class="linenos"> 168</span></a> <span class="n">RETURNING_END</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-169"><a href="#Generator-169"><span class="linenos"> 169</span></a>
-</span><span id="Generator-170"><a href="#Generator-170"><span class="linenos"> 170</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax</span>
-</span><span id="Generator-171"><a href="#Generator-171"><span class="linenos"> 171</span></a> <span class="n">SELECT_KINDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="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="Generator-170"><a href="#Generator-170"><span class="linenos"> 170</span></a> <span class="c1"># Whether or not to generate the (+) suffix for columns used in old-style join conditions</span>
+</span><span id="Generator-171"><a href="#Generator-171"><span class="linenos"> 171</span></a> <span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-172"><a href="#Generator-172"><span class="linenos"> 172</span></a>
-</span><span id="Generator-173"><a href="#Generator-173"><span class="linenos"> 173</span></a> <span class="c1"># Whether or not VALUES statements can be used as derived tables.</span>
-</span><span id="Generator-174"><a href="#Generator-174"><span class="linenos"> 174</span></a> <span class="c1"># MySQL 5 and Redshift do not allow this, so when False, it will convert</span>
-</span><span id="Generator-175"><a href="#Generator-175"><span class="linenos"> 175</span></a> <span class="c1"># SELECT * VALUES into SELECT UNION</span>
-</span><span id="Generator-176"><a href="#Generator-176"><span class="linenos"> 176</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Generator-177"><a href="#Generator-177"><span class="linenos"> 177</span></a>
-</span><span id="Generator-178"><a href="#Generator-178"><span class="linenos"> 178</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-179"><a href="#Generator-179"><span class="linenos"> 179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="Generator-180"><a href="#Generator-180"><span class="linenos"> 180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Generator-181"><a href="#Generator-181"><span class="linenos"> 181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="Generator-182"><a href="#Generator-182"><span class="linenos"> 182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="Generator-183"><a href="#Generator-183"><span class="linenos"> 183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Generator-184"><a href="#Generator-184"><span class="linenos"> 184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Generator-185"><a href="#Generator-185"><span class="linenos"> 185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
-</span><span id="Generator-186"><a href="#Generator-186"><span class="linenos"> 186</span></a> <span class="p">}</span>
-</span><span id="Generator-187"><a href="#Generator-187"><span class="linenos"> 187</span></a>
-</span><span id="Generator-188"><a href="#Generator-188"><span class="linenos"> 188</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-189"><a href="#Generator-189"><span class="linenos"> 189</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span>
-</span><span id="Generator-190"><a href="#Generator-190"><span class="linenos"> 190</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span>
-</span><span id="Generator-191"><a href="#Generator-191"><span class="linenos"> 191</span></a> <span class="p">}</span>
+</span><span id="Generator-173"><a href="#Generator-173"><span class="linenos"> 173</span></a> <span class="c1"># Whether or not to generate an unquoted value for EXTRACT&#39;s date part argument</span>
+</span><span id="Generator-174"><a href="#Generator-174"><span class="linenos"> 174</span></a> <span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-175"><a href="#Generator-175"><span class="linenos"> 175</span></a>
+</span><span id="Generator-176"><a href="#Generator-176"><span class="linenos"> 176</span></a> <span class="c1"># Whether or not TIMETZ / TIMESTAMPTZ will be generated using the &quot;WITH TIME ZONE&quot; syntax</span>
+</span><span id="Generator-177"><a href="#Generator-177"><span class="linenos"> 177</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-178"><a href="#Generator-178"><span class="linenos"> 178</span></a>
+</span><span id="Generator-179"><a href="#Generator-179"><span class="linenos"> 179</span></a> <span class="c1"># Whether or not the NVL2 function is supported</span>
+</span><span id="Generator-180"><a href="#Generator-180"><span class="linenos"> 180</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-181"><a href="#Generator-181"><span class="linenos"> 181</span></a>
+</span><span id="Generator-182"><a href="#Generator-182"><span class="linenos"> 182</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax</span>
+</span><span id="Generator-183"><a href="#Generator-183"><span class="linenos"> 183</span></a> <span class="n">SELECT_KINDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="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="Generator-184"><a href="#Generator-184"><span class="linenos"> 184</span></a>
+</span><span id="Generator-185"><a href="#Generator-185"><span class="linenos"> 185</span></a> <span class="c1"># Whether or not VALUES statements can be used as derived tables.</span>
+</span><span id="Generator-186"><a href="#Generator-186"><span class="linenos"> 186</span></a> <span class="c1"># MySQL 5 and Redshift do not allow this, so when False, it will convert</span>
+</span><span id="Generator-187"><a href="#Generator-187"><span class="linenos"> 187</span></a> <span class="c1"># SELECT * VALUES into SELECT UNION</span>
+</span><span id="Generator-188"><a href="#Generator-188"><span class="linenos"> 188</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-189"><a href="#Generator-189"><span class="linenos"> 189</span></a>
+</span><span id="Generator-190"><a href="#Generator-190"><span class="linenos"> 190</span></a> <span class="c1"># Whether or not the word COLUMN is included when adding a column with ALTER TABLE</span>
+</span><span id="Generator-191"><a href="#Generator-191"><span class="linenos"> 191</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Generator-192"><a href="#Generator-192"><span class="linenos"> 192</span></a>
-</span><span id="Generator-193"><a href="#Generator-193"><span class="linenos"> 193</span></a> <span class="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-194"><a href="#Generator-194"><span class="linenos"> 194</span></a> <span class="s2">&quot;microseconds&quot;</span><span class="p">:</span> <span class="s2">&quot;microsecond&quot;</span><span class="p">,</span>
-</span><span id="Generator-195"><a href="#Generator-195"><span class="linenos"> 195</span></a> <span class="s2">&quot;seconds&quot;</span><span class="p">:</span> <span class="s2">&quot;second&quot;</span><span class="p">,</span>
-</span><span id="Generator-196"><a href="#Generator-196"><span class="linenos"> 196</span></a> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="s2">&quot;minute&quot;</span><span class="p">,</span>
-</span><span id="Generator-197"><a href="#Generator-197"><span class="linenos"> 197</span></a> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="s2">&quot;hour&quot;</span><span class="p">,</span>
-</span><span id="Generator-198"><a href="#Generator-198"><span class="linenos"> 198</span></a> <span class="s2">&quot;days&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
-</span><span id="Generator-199"><a href="#Generator-199"><span class="linenos"> 199</span></a> <span class="s2">&quot;weeks&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
-</span><span id="Generator-200"><a href="#Generator-200"><span class="linenos"> 200</span></a> <span class="s2">&quot;months&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
-</span><span id="Generator-201"><a href="#Generator-201"><span class="linenos"> 201</span></a> <span class="s2">&quot;quarters&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
-</span><span id="Generator-202"><a href="#Generator-202"><span class="linenos"> 202</span></a> <span class="s2">&quot;years&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
-</span><span id="Generator-203"><a href="#Generator-203"><span class="linenos"> 203</span></a> <span class="p">}</span>
-</span><span id="Generator-204"><a href="#Generator-204"><span class="linenos"> 204</span></a>
-</span><span id="Generator-205"><a href="#Generator-205"><span class="linenos"> 205</span></a> <span class="n">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Generator-206"><a href="#Generator-206"><span class="linenos"> 206</span></a>
-</span><span id="Generator-207"><a href="#Generator-207"><span class="linenos"> 207</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-208"><a href="#Generator-208"><span class="linenos"> 208</span></a>
-</span><span id="Generator-209"><a href="#Generator-209"><span class="linenos"> 209</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
-</span><span id="Generator-210"><a href="#Generator-210"><span class="linenos"> 210</span></a>
-</span><span id="Generator-211"><a href="#Generator-211"><span class="linenos"> 211</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-212"><a href="#Generator-212"><span class="linenos"> 212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-213"><a href="#Generator-213"><span class="linenos"> 213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-214"><a href="#Generator-214"><span class="linenos"> 214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-215"><a href="#Generator-215"><span class="linenos"> 215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-216"><a href="#Generator-216"><span class="linenos"> 216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-217"><a href="#Generator-217"><span class="linenos"> 217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-218"><a href="#Generator-218"><span class="linenos"> 218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-219"><a href="#Generator-219"><span class="linenos"> 219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-220"><a href="#Generator-220"><span class="linenos"> 220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-221"><a href="#Generator-221"><span class="linenos"> 221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-222"><a href="#Generator-222"><span class="linenos"> 222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-223"><a href="#Generator-223"><span class="linenos"> 223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-224"><a href="#Generator-224"><span class="linenos"> 224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-225"><a href="#Generator-225"><span class="linenos"> 225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-226"><a href="#Generator-226"><span class="linenos"> 226</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-227"><a href="#Generator-227"><span class="linenos"> 227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-228"><a href="#Generator-228"><span class="linenos"> 228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-229"><a href="#Generator-229"><span class="linenos"> 229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-230"><a href="#Generator-230"><span class="linenos"> 230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-231"><a href="#Generator-231"><span class="linenos"> 231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-232"><a href="#Generator-232"><span class="linenos"> 232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-233"><a href="#Generator-233"><span class="linenos"> 233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-234"><a href="#Generator-234"><span class="linenos"> 234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-235"><a href="#Generator-235"><span class="linenos"> 235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-236"><a href="#Generator-236"><span class="linenos"> 236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-237"><a href="#Generator-237"><span class="linenos"> 237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-238"><a href="#Generator-238"><span class="linenos"> 238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-239"><a href="#Generator-239"><span class="linenos"> 239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
-</span><span id="Generator-240"><a href="#Generator-240"><span class="linenos"> 240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-241"><a href="#Generator-241"><span class="linenos"> 241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-242"><a href="#Generator-242"><span class="linenos"> 242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-243"><a href="#Generator-243"><span class="linenos"> 243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="Generator-244"><a href="#Generator-244"><span class="linenos"> 244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="Generator-245"><a href="#Generator-245"><span class="linenos"> 245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-246"><a href="#Generator-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="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-247"><a href="#Generator-247"><span class="linenos"> 247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-248"><a href="#Generator-248"><span class="linenos"> 248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-249"><a href="#Generator-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">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-250"><a href="#Generator-250"><span class="linenos"> 250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-251"><a href="#Generator-251"><span class="linenos"> 251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-252"><a href="#Generator-252"><span class="linenos"> 252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-253"><a href="#Generator-253"><span class="linenos"> 253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-254"><a href="#Generator-254"><span class="linenos"> 254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-255"><a href="#Generator-255"><span class="linenos"> 255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-256"><a href="#Generator-256"><span class="linenos"> 256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-257"><a href="#Generator-257"><span class="linenos"> 257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-258"><a href="#Generator-258"><span class="linenos"> 258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-259"><a href="#Generator-259"><span class="linenos"> 259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-260"><a href="#Generator-260"><span class="linenos"> 260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-261"><a href="#Generator-261"><span class="linenos"> 261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-262"><a href="#Generator-262"><span class="linenos"> 262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-263"><a href="#Generator-263"><span class="linenos"> 263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-264"><a href="#Generator-264"><span class="linenos"> 264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-265"><a href="#Generator-265"><span class="linenos"> 265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-266"><a href="#Generator-266"><span class="linenos"> 266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="Generator-267"><a href="#Generator-267"><span class="linenos"> 267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-268"><a href="#Generator-268"><span class="linenos"> 268</span></a> <span class="p">}</span>
-</span><span id="Generator-269"><a href="#Generator-269"><span class="linenos"> 269</span></a>
-</span><span id="Generator-270"><a href="#Generator-270"><span class="linenos"> 270</span></a> <span class="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
-</span><span id="Generator-271"><a href="#Generator-271"><span class="linenos"> 271</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Generator-272"><a href="#Generator-272"><span class="linenos"> 272</span></a>
-</span><span id="Generator-273"><a href="#Generator-273"><span class="linenos"> 273</span></a> <span class="c1"># Expressions whose comments are separated from them for better formatting</span>
-</span><span id="Generator-274"><a href="#Generator-274"><span class="linenos"> 274</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-275"><a href="#Generator-275"><span class="linenos"> 275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
-</span><span id="Generator-276"><a href="#Generator-276"><span class="linenos"> 276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="Generator-277"><a href="#Generator-277"><span class="linenos"> 277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span>
-</span><span id="Generator-278"><a href="#Generator-278"><span class="linenos"> 278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Generator-279"><a href="#Generator-279"><span class="linenos"> 279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
-</span><span id="Generator-280"><a href="#Generator-280"><span class="linenos"> 280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Generator-281"><a href="#Generator-281"><span class="linenos"> 281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Generator-282"><a href="#Generator-282"><span class="linenos"> 282</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
-</span><span id="Generator-283"><a href="#Generator-283"><span class="linenos"> 283</span></a> <span class="p">)</span>
-</span><span id="Generator-284"><a href="#Generator-284"><span class="linenos"> 284</span></a>
-</span><span id="Generator-285"><a href="#Generator-285"><span class="linenos"> 285</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
-</span><span id="Generator-286"><a href="#Generator-286"><span class="linenos"> 286</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-287"><a href="#Generator-287"><span class="linenos"> 287</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="Generator-288"><a href="#Generator-288"><span class="linenos"> 288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
-</span><span id="Generator-289"><a href="#Generator-289"><span class="linenos"> 289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span>
-</span><span id="Generator-290"><a href="#Generator-290"><span class="linenos"> 290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span>
-</span><span id="Generator-291"><a href="#Generator-291"><span class="linenos"> 291</span></a> <span class="p">)</span>
-</span><span id="Generator-292"><a href="#Generator-292"><span class="linenos"> 292</span></a>
-</span><span id="Generator-293"><a href="#Generator-293"><span class="linenos"> 293</span></a> <span class="n">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
-</span><span id="Generator-294"><a href="#Generator-294"><span class="linenos"> 294</span></a>
-</span><span id="Generator-295"><a href="#Generator-295"><span class="linenos"> 295</span></a> <span class="c1"># Autofilled</span>
-</span><span id="Generator-296"><a href="#Generator-296"><span class="linenos"> 296</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Generator-297"><a href="#Generator-297"><span class="linenos"> 297</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Generator-298"><a href="#Generator-298"><span class="linenos"> 298</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Generator-299"><a href="#Generator-299"><span class="linenos"> 299</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-300"><a href="#Generator-300"><span class="linenos"> 300</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-301"><a href="#Generator-301"><span class="linenos"> 301</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-302"><a href="#Generator-302"><span class="linenos"> 302</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-303"><a href="#Generator-303"><span class="linenos"> 303</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="Generator-304"><a href="#Generator-304"><span class="linenos"> 304</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Generator-305"><a href="#Generator-305"><span class="linenos"> 305</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-306"><a href="#Generator-306"><span class="linenos"> 306</span></a>
-</span><span id="Generator-307"><a href="#Generator-307"><span class="linenos"> 307</span></a> <span class="n">can_identify</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="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span>
-</span><span id="Generator-308"><a href="#Generator-308"><span class="linenos"> 308</span></a>
-</span><span id="Generator-309"><a href="#Generator-309"><span class="linenos"> 309</span></a> <span class="c1"># Delimiters for quotes, identifiers and the corresponding escape characters</span>
-</span><span id="Generator-310"><a href="#Generator-310"><span class="linenos"> 310</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="Generator-311"><a href="#Generator-311"><span class="linenos"> 311</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="Generator-312"><a href="#Generator-312"><span class="linenos"> 312</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="Generator-313"><a href="#Generator-313"><span class="linenos"> 313</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="Generator-314"><a href="#Generator-314"><span class="linenos"> 314</span></a> <span class="n">STRING_ESCAPE</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="Generator-315"><a href="#Generator-315"><span class="linenos"> 315</span></a> <span class="n">IDENTIFIER_ESCAPE</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="Generator-316"><a href="#Generator-316"><span class="linenos"> 316</span></a>
-</span><span id="Generator-317"><a href="#Generator-317"><span class="linenos"> 317</span></a> <span class="c1"># Delimiters for bit, hex, byte and raw literals</span>
-</span><span id="Generator-318"><a href="#Generator-318"><span class="linenos"> 318</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-319"><a href="#Generator-319"><span class="linenos"> 319</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-320"><a href="#Generator-320"><span class="linenos"> 320</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-321"><a href="#Generator-321"><span class="linenos"> 321</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-322"><a href="#Generator-322"><span class="linenos"> 322</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-323"><a href="#Generator-323"><span class="linenos"> 323</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-193"><a href="#Generator-193"><span class="linenos"> 193</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-194"><a href="#Generator-194"><span class="linenos"> 194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
+</span><span id="Generator-195"><a href="#Generator-195"><span class="linenos"> 195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Generator-196"><a href="#Generator-196"><span class="linenos"> 196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="Generator-197"><a href="#Generator-197"><span class="linenos"> 197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="Generator-198"><a href="#Generator-198"><span class="linenos"> 198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Generator-199"><a href="#Generator-199"><span class="linenos"> 199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Generator-200"><a href="#Generator-200"><span class="linenos"> 200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
+</span><span id="Generator-201"><a href="#Generator-201"><span class="linenos"> 201</span></a> <span class="p">}</span>
+</span><span id="Generator-202"><a href="#Generator-202"><span class="linenos"> 202</span></a>
+</span><span id="Generator-203"><a href="#Generator-203"><span class="linenos"> 203</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-204"><a href="#Generator-204"><span class="linenos"> 204</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span>
+</span><span id="Generator-205"><a href="#Generator-205"><span class="linenos"> 205</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span>
+</span><span id="Generator-206"><a href="#Generator-206"><span class="linenos"> 206</span></a> <span class="p">}</span>
+</span><span id="Generator-207"><a href="#Generator-207"><span class="linenos"> 207</span></a>
+</span><span id="Generator-208"><a href="#Generator-208"><span class="linenos"> 208</span></a> <span class="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-209"><a href="#Generator-209"><span class="linenos"> 209</span></a> <span class="s2">&quot;microseconds&quot;</span><span class="p">:</span> <span class="s2">&quot;microsecond&quot;</span><span class="p">,</span>
+</span><span id="Generator-210"><a href="#Generator-210"><span class="linenos"> 210</span></a> <span class="s2">&quot;seconds&quot;</span><span class="p">:</span> <span class="s2">&quot;second&quot;</span><span class="p">,</span>
+</span><span id="Generator-211"><a href="#Generator-211"><span class="linenos"> 211</span></a> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="s2">&quot;minute&quot;</span><span class="p">,</span>
+</span><span id="Generator-212"><a href="#Generator-212"><span class="linenos"> 212</span></a> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="s2">&quot;hour&quot;</span><span class="p">,</span>
+</span><span id="Generator-213"><a href="#Generator-213"><span class="linenos"> 213</span></a> <span class="s2">&quot;days&quot;</span><span class="p">:</span> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="Generator-214"><a href="#Generator-214"><span class="linenos"> 214</span></a> <span class="s2">&quot;weeks&quot;</span><span class="p">:</span> <span class="s2">&quot;week&quot;</span><span class="p">,</span>
+</span><span id="Generator-215"><a href="#Generator-215"><span class="linenos"> 215</span></a> <span class="s2">&quot;months&quot;</span><span class="p">:</span> <span class="s2">&quot;month&quot;</span><span class="p">,</span>
+</span><span id="Generator-216"><a href="#Generator-216"><span class="linenos"> 216</span></a> <span class="s2">&quot;quarters&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
+</span><span id="Generator-217"><a href="#Generator-217"><span class="linenos"> 217</span></a> <span class="s2">&quot;years&quot;</span><span class="p">:</span> <span class="s2">&quot;year&quot;</span><span class="p">,</span>
+</span><span id="Generator-218"><a href="#Generator-218"><span class="linenos"> 218</span></a> <span class="p">}</span>
+</span><span id="Generator-219"><a href="#Generator-219"><span class="linenos"> 219</span></a>
+</span><span id="Generator-220"><a href="#Generator-220"><span class="linenos"> 220</span></a> <span class="n">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Generator-221"><a href="#Generator-221"><span class="linenos"> 221</span></a>
+</span><span id="Generator-222"><a href="#Generator-222"><span class="linenos"> 222</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-223"><a href="#Generator-223"><span class="linenos"> 223</span></a>
+</span><span id="Generator-224"><a href="#Generator-224"><span class="linenos"> 224</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
+</span><span id="Generator-225"><a href="#Generator-225"><span class="linenos"> 225</span></a>
+</span><span id="Generator-226"><a href="#Generator-226"><span class="linenos"> 226</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-227"><a href="#Generator-227"><span class="linenos"> 227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-228"><a href="#Generator-228"><span class="linenos"> 228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-229"><a href="#Generator-229"><span class="linenos"> 229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-230"><a href="#Generator-230"><span class="linenos"> 230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-231"><a href="#Generator-231"><span class="linenos"> 231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-232"><a href="#Generator-232"><span class="linenos"> 232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-233"><a href="#Generator-233"><span class="linenos"> 233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-234"><a href="#Generator-234"><span class="linenos"> 234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-235"><a href="#Generator-235"><span class="linenos"> 235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-236"><a href="#Generator-236"><span class="linenos"> 236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-237"><a href="#Generator-237"><span class="linenos"> 237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-238"><a href="#Generator-238"><span class="linenos"> 238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-239"><a href="#Generator-239"><span class="linenos"> 239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-240"><a href="#Generator-240"><span class="linenos"> 240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-241"><a href="#Generator-241"><span class="linenos"> 241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-242"><a href="#Generator-242"><span class="linenos"> 242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-243"><a href="#Generator-243"><span class="linenos"> 243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-244"><a href="#Generator-244"><span class="linenos"> 244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-245"><a href="#Generator-245"><span class="linenos"> 245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-246"><a href="#Generator-246"><span class="linenos"> 246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-247"><a href="#Generator-247"><span class="linenos"> 247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-248"><a href="#Generator-248"><span class="linenos"> 248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-249"><a href="#Generator-249"><span class="linenos"> 249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-250"><a href="#Generator-250"><span class="linenos"> 250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-251"><a href="#Generator-251"><span class="linenos"> 251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-252"><a href="#Generator-252"><span class="linenos"> 252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-253"><a href="#Generator-253"><span class="linenos"> 253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-254"><a href="#Generator-254"><span class="linenos"> 254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
+</span><span id="Generator-255"><a href="#Generator-255"><span class="linenos"> 255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-256"><a href="#Generator-256"><span class="linenos"> 256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-257"><a href="#Generator-257"><span class="linenos"> 257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-258"><a href="#Generator-258"><span class="linenos"> 258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="Generator-259"><a href="#Generator-259"><span class="linenos"> 259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-260"><a href="#Generator-260"><span class="linenos"> 260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="Generator-261"><a href="#Generator-261"><span class="linenos"> 261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-262"><a href="#Generator-262"><span class="linenos"> 262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-263"><a href="#Generator-263"><span class="linenos"> 263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-264"><a href="#Generator-264"><span class="linenos"> 264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-265"><a href="#Generator-265"><span class="linenos"> 265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-266"><a href="#Generator-266"><span class="linenos"> 266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-267"><a href="#Generator-267"><span class="linenos"> 267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-268"><a href="#Generator-268"><span class="linenos"> 268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-269"><a href="#Generator-269"><span class="linenos"> 269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-270"><a href="#Generator-270"><span class="linenos"> 270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-271"><a href="#Generator-271"><span class="linenos"> 271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-272"><a href="#Generator-272"><span class="linenos"> 272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-273"><a href="#Generator-273"><span class="linenos"> 273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-274"><a href="#Generator-274"><span class="linenos"> 274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-275"><a href="#Generator-275"><span class="linenos"> 275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-276"><a href="#Generator-276"><span class="linenos"> 276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-277"><a href="#Generator-277"><span class="linenos"> 277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-278"><a href="#Generator-278"><span class="linenos"> 278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-279"><a href="#Generator-279"><span class="linenos"> 279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-280"><a href="#Generator-280"><span class="linenos"> 280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-281"><a href="#Generator-281"><span class="linenos"> 281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-282"><a href="#Generator-282"><span class="linenos"> 282</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="Generator-283"><a href="#Generator-283"><span class="linenos"> 283</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-284"><a href="#Generator-284"><span class="linenos"> 284</span></a> <span class="p">}</span>
+</span><span id="Generator-285"><a href="#Generator-285"><span class="linenos"> 285</span></a>
+</span><span id="Generator-286"><a href="#Generator-286"><span class="linenos"> 286</span></a> <span class="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
+</span><span id="Generator-287"><a href="#Generator-287"><span class="linenos"> 287</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Generator-288"><a href="#Generator-288"><span class="linenos"> 288</span></a>
+</span><span id="Generator-289"><a href="#Generator-289"><span class="linenos"> 289</span></a> <span class="c1"># Expressions whose comments are separated from them for better formatting</span>
+</span><span id="Generator-290"><a href="#Generator-290"><span class="linenos"> 290</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-291"><a href="#Generator-291"><span class="linenos"> 291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
+</span><span id="Generator-292"><a href="#Generator-292"><span class="linenos"> 292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
+</span><span id="Generator-293"><a href="#Generator-293"><span class="linenos"> 293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="Generator-294"><a href="#Generator-294"><span class="linenos"> 294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span>
+</span><span id="Generator-295"><a href="#Generator-295"><span class="linenos"> 295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Generator-296"><a href="#Generator-296"><span class="linenos"> 296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span>
+</span><span id="Generator-297"><a href="#Generator-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><span id="Generator-298"><a href="#Generator-298"><span class="linenos"> 298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Generator-299"><a href="#Generator-299"><span class="linenos"> 299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Generator-300"><a href="#Generator-300"><span class="linenos"> 300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
+</span><span id="Generator-301"><a href="#Generator-301"><span class="linenos"> 301</span></a> <span class="p">)</span>
+</span><span id="Generator-302"><a href="#Generator-302"><span class="linenos"> 302</span></a>
+</span><span id="Generator-303"><a href="#Generator-303"><span class="linenos"> 303</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
+</span><span id="Generator-304"><a href="#Generator-304"><span class="linenos"> 304</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-305"><a href="#Generator-305"><span class="linenos"> 305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="Generator-306"><a href="#Generator-306"><span class="linenos"> 306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
+</span><span id="Generator-307"><a href="#Generator-307"><span class="linenos"> 307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span>
+</span><span id="Generator-308"><a href="#Generator-308"><span class="linenos"> 308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span>
+</span><span id="Generator-309"><a href="#Generator-309"><span class="linenos"> 309</span></a> <span class="p">)</span>
+</span><span id="Generator-310"><a href="#Generator-310"><span class="linenos"> 310</span></a>
+</span><span id="Generator-311"><a href="#Generator-311"><span class="linenos"> 311</span></a> <span class="n">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
+</span><span id="Generator-312"><a href="#Generator-312"><span class="linenos"> 312</span></a>
+</span><span id="Generator-313"><a href="#Generator-313"><span class="linenos"> 313</span></a> <span class="c1"># Autofilled</span>
+</span><span id="Generator-314"><a href="#Generator-314"><span class="linenos"> 314</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Generator-315"><a href="#Generator-315"><span class="linenos"> 315</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Generator-316"><a href="#Generator-316"><span class="linenos"> 316</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Generator-317"><a href="#Generator-317"><span class="linenos"> 317</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-318"><a href="#Generator-318"><span class="linenos"> 318</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-319"><a href="#Generator-319"><span class="linenos"> 319</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-320"><a href="#Generator-320"><span class="linenos"> 320</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-321"><a href="#Generator-321"><span class="linenos"> 321</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="Generator-322"><a href="#Generator-322"><span class="linenos"> 322</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Generator-323"><a href="#Generator-323"><span class="linenos"> 323</span></a> <span class="n">ESCAPE_LINE_BREAK</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-324"><a href="#Generator-324"><span class="linenos"> 324</span></a>
-</span><span id="Generator-325"><a href="#Generator-325"><span class="linenos"> 325</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-326"><a href="#Generator-326"><span class="linenos"> 326</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
-</span><span id="Generator-327"><a href="#Generator-327"><span class="linenos"> 327</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
-</span><span id="Generator-328"><a href="#Generator-328"><span class="linenos"> 328</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
-</span><span id="Generator-329"><a href="#Generator-329"><span class="linenos"> 329</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
-</span><span id="Generator-330"><a href="#Generator-330"><span class="linenos"> 330</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
-</span><span id="Generator-331"><a href="#Generator-331"><span class="linenos"> 331</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
-</span><span id="Generator-332"><a href="#Generator-332"><span class="linenos"> 332</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
-</span><span id="Generator-333"><a href="#Generator-333"><span class="linenos"> 333</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
-</span><span id="Generator-334"><a href="#Generator-334"><span class="linenos"> 334</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
-</span><span id="Generator-335"><a href="#Generator-335"><span class="linenos"> 335</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
-</span><span id="Generator-336"><a href="#Generator-336"><span class="linenos"> 336</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
-</span><span id="Generator-337"><a href="#Generator-337"><span class="linenos"> 337</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
-</span><span id="Generator-338"><a href="#Generator-338"><span class="linenos"> 338</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
-</span><span id="Generator-339"><a href="#Generator-339"><span class="linenos"> 339</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
-</span><span id="Generator-340"><a href="#Generator-340"><span class="linenos"> 340</span></a> <span class="s2">&quot;_cache&quot;</span><span class="p">,</span>
-</span><span id="Generator-341"><a href="#Generator-341"><span class="linenos"> 341</span></a> <span class="p">)</span>
-</span><span id="Generator-342"><a href="#Generator-342"><span class="linenos"> 342</span></a>
-</span><span id="Generator-343"><a href="#Generator-343"><span class="linenos"> 343</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Generator-344"><a href="#Generator-344"><span class="linenos"> 344</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-345"><a href="#Generator-345"><span class="linenos"> 345</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-346"><a href="#Generator-346"><span class="linenos"> 346</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-347"><a href="#Generator-347"><span class="linenos"> 347</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-348"><a href="#Generator-348"><span class="linenos"> 348</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator-349"><a href="#Generator-349"><span class="linenos"> 349</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator-350"><a href="#Generator-350"><span class="linenos"> 350</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-351"><a href="#Generator-351"><span class="linenos"> 351</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
-</span><span id="Generator-352"><a href="#Generator-352"><span class="linenos"> 352</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
-</span><span id="Generator-353"><a href="#Generator-353"><span class="linenos"> 353</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-354"><a href="#Generator-354"><span class="linenos"> 354</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
-</span><span id="Generator-355"><a href="#Generator-355"><span class="linenos"> 355</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator-356"><a href="#Generator-356"><span class="linenos"> 356</span></a> <span class="p">):</span>
-</span><span id="Generator-357"><a href="#Generator-357"><span class="linenos"> 357</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="Generator-358"><a href="#Generator-358"><span class="linenos"> 358</span></a>
-</span><span id="Generator-359"><a href="#Generator-359"><span class="linenos"> 359</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
-</span><span id="Generator-360"><a href="#Generator-360"><span class="linenos"> 360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
-</span><span id="Generator-361"><a href="#Generator-361"><span class="linenos"> 361</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="Generator-362"><a href="#Generator-362"><span class="linenos"> 362</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-</span><span id="Generator-363"><a href="#Generator-363"><span class="linenos"> 363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
-</span><span id="Generator-364"><a href="#Generator-364"><span class="linenos"> 364</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
-</span><span id="Generator-365"><a href="#Generator-365"><span class="linenos"> 365</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
-</span><span id="Generator-366"><a href="#Generator-366"><span class="linenos"> 366</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
-</span><span id="Generator-367"><a href="#Generator-367"><span class="linenos"> 367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
-</span><span id="Generator-368"><a href="#Generator-368"><span class="linenos"> 368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Generator-369"><a href="#Generator-369"><span class="linenos"> 369</span></a>
-</span><span id="Generator-370"><a href="#Generator-370"><span class="linenos"> 370</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
-</span><span id="Generator-371"><a href="#Generator-371"><span class="linenos"> 371</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-372"><a href="#Generator-372"><span class="linenos"> 372</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
-</span><span id="Generator-373"><a href="#Generator-373"><span class="linenos"> 373</span></a> <span class="p">)</span>
-</span><span id="Generator-374"><a href="#Generator-374"><span class="linenos"> 374</span></a>
-</span><span id="Generator-375"><a href="#Generator-375"><span class="linenos"> 375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-376"><a href="#Generator-376"><span class="linenos"> 376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPE</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span>
-</span><span id="Generator-377"><a href="#Generator-377"><span class="linenos"> 377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPE</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
-</span><span id="Generator-378"><a href="#Generator-378"><span class="linenos"> 378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span 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">int</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="Generator-379"><a href="#Generator-379"><span class="linenos"> 379</span></a>
-</span><span id="Generator-380"><a href="#Generator-380"><span class="linenos"> 380</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span>
-</span><span id="Generator-381"><a href="#Generator-381"><span class="linenos"> 381</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-382"><a href="#Generator-382"><span class="linenos"> 382</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="Generator-383"><a href="#Generator-383"><span class="linenos"> 383</span></a> <span class="n">cache</span><span 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">int</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-384"><a href="#Generator-384"><span class="linenos"> 384</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-385"><a href="#Generator-385"><span class="linenos"> 385</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Generator-386"><a href="#Generator-386"><span class="linenos"> 386</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
-</span><span id="Generator-387"><a href="#Generator-387"><span class="linenos"> 387</span></a>
-</span><span id="Generator-388"><a href="#Generator-388"><span class="linenos"> 388</span></a><span class="sd"> Args:</span>
-</span><span id="Generator-389"><a href="#Generator-389"><span class="linenos"> 389</span></a><span class="sd"> expression: The syntax tree.</span>
-</span><span id="Generator-390"><a href="#Generator-390"><span class="linenos"> 390</span></a><span class="sd"> cache: An optional sql string cache. This leverages the hash of an Expression</span>
-</span><span id="Generator-391"><a href="#Generator-391"><span class="linenos"> 391</span></a><span class="sd"> which can be slow to compute, so only use it if you set _hash on each node.</span>
-</span><span id="Generator-392"><a href="#Generator-392"><span class="linenos"> 392</span></a>
-</span><span id="Generator-393"><a href="#Generator-393"><span class="linenos"> 393</span></a><span class="sd"> Returns:</span>
-</span><span id="Generator-394"><a href="#Generator-394"><span class="linenos"> 394</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
-</span><span id="Generator-395"><a href="#Generator-395"><span class="linenos"> 395</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Generator-396"><a href="#Generator-396"><span class="linenos"> 396</span></a> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-397"><a href="#Generator-397"><span class="linenos"> 397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="n">cache</span>
+</span><span id="Generator-325"><a href="#Generator-325"><span class="linenos"> 325</span></a> <span class="n">can_identify</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="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span>
+</span><span id="Generator-326"><a href="#Generator-326"><span class="linenos"> 326</span></a>
+</span><span id="Generator-327"><a href="#Generator-327"><span class="linenos"> 327</span></a> <span class="c1"># Delimiters for quotes, identifiers and the corresponding escape characters</span>
+</span><span id="Generator-328"><a href="#Generator-328"><span class="linenos"> 328</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Generator-329"><a href="#Generator-329"><span class="linenos"> 329</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Generator-330"><a href="#Generator-330"><span class="linenos"> 330</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="Generator-331"><a href="#Generator-331"><span class="linenos"> 331</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="Generator-332"><a href="#Generator-332"><span class="linenos"> 332</span></a> <span class="n">TOKENIZER_CLASS</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="Generator-333"><a href="#Generator-333"><span class="linenos"> 333</span></a>
+</span><span id="Generator-334"><a href="#Generator-334"><span class="linenos"> 334</span></a> <span class="c1"># Delimiters for bit, hex, byte and raw literals</span>
+</span><span id="Generator-335"><a href="#Generator-335"><span class="linenos"> 335</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-336"><a href="#Generator-336"><span class="linenos"> 336</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-337"><a href="#Generator-337"><span class="linenos"> 337</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-338"><a href="#Generator-338"><span class="linenos"> 338</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-339"><a href="#Generator-339"><span class="linenos"> 339</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-340"><a href="#Generator-340"><span class="linenos"> 340</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-341"><a href="#Generator-341"><span class="linenos"> 341</span></a>
+</span><span id="Generator-342"><a href="#Generator-342"><span class="linenos"> 342</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-343"><a href="#Generator-343"><span class="linenos"> 343</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
+</span><span id="Generator-344"><a href="#Generator-344"><span class="linenos"> 344</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
+</span><span id="Generator-345"><a href="#Generator-345"><span class="linenos"> 345</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
+</span><span id="Generator-346"><a href="#Generator-346"><span class="linenos"> 346</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
+</span><span id="Generator-347"><a href="#Generator-347"><span class="linenos"> 347</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
+</span><span id="Generator-348"><a href="#Generator-348"><span class="linenos"> 348</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
+</span><span id="Generator-349"><a href="#Generator-349"><span class="linenos"> 349</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
+</span><span id="Generator-350"><a href="#Generator-350"><span class="linenos"> 350</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
+</span><span id="Generator-351"><a href="#Generator-351"><span class="linenos"> 351</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
+</span><span id="Generator-352"><a href="#Generator-352"><span class="linenos"> 352</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
+</span><span id="Generator-353"><a href="#Generator-353"><span class="linenos"> 353</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
+</span><span id="Generator-354"><a href="#Generator-354"><span class="linenos"> 354</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
+</span><span id="Generator-355"><a href="#Generator-355"><span class="linenos"> 355</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
+</span><span id="Generator-356"><a href="#Generator-356"><span class="linenos"> 356</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
+</span><span id="Generator-357"><a href="#Generator-357"><span class="linenos"> 357</span></a> <span class="s2">&quot;_cache&quot;</span><span class="p">,</span>
+</span><span id="Generator-358"><a href="#Generator-358"><span class="linenos"> 358</span></a> <span class="p">)</span>
+</span><span id="Generator-359"><a href="#Generator-359"><span class="linenos"> 359</span></a>
+</span><span id="Generator-360"><a href="#Generator-360"><span class="linenos"> 360</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Generator-361"><a href="#Generator-361"><span class="linenos"> 361</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-362"><a href="#Generator-362"><span class="linenos"> 362</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-363"><a href="#Generator-363"><span class="linenos"> 363</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-364"><a href="#Generator-364"><span class="linenos"> 364</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-365"><a href="#Generator-365"><span class="linenos"> 365</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator-366"><a href="#Generator-366"><span class="linenos"> 366</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator-367"><a href="#Generator-367"><span class="linenos"> 367</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-368"><a href="#Generator-368"><span class="linenos"> 368</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
+</span><span id="Generator-369"><a href="#Generator-369"><span class="linenos"> 369</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+</span><span id="Generator-370"><a href="#Generator-370"><span class="linenos"> 370</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-371"><a href="#Generator-371"><span class="linenos"> 371</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
+</span><span id="Generator-372"><a href="#Generator-372"><span class="linenos"> 372</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-373"><a href="#Generator-373"><span class="linenos"> 373</span></a> <span class="p">):</span>
+</span><span id="Generator-374"><a href="#Generator-374"><span class="linenos"> 374</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="Generator-375"><a href="#Generator-375"><span class="linenos"> 375</span></a>
+</span><span id="Generator-376"><a href="#Generator-376"><span class="linenos"> 376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
+</span><span id="Generator-377"><a href="#Generator-377"><span class="linenos"> 377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
+</span><span id="Generator-378"><a href="#Generator-378"><span class="linenos"> 378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="Generator-379"><a href="#Generator-379"><span class="linenos"> 379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
+</span><span id="Generator-380"><a href="#Generator-380"><span class="linenos"> 380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
+</span><span id="Generator-381"><a href="#Generator-381"><span class="linenos"> 381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
+</span><span id="Generator-382"><a href="#Generator-382"><span class="linenos"> 382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
+</span><span id="Generator-383"><a href="#Generator-383"><span class="linenos"> 383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
+</span><span id="Generator-384"><a href="#Generator-384"><span class="linenos"> 384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
+</span><span id="Generator-385"><a href="#Generator-385"><span class="linenos"> 385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Generator-386"><a href="#Generator-386"><span class="linenos"> 386</span></a>
+</span><span id="Generator-387"><a href="#Generator-387"><span class="linenos"> 387</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
+</span><span id="Generator-388"><a href="#Generator-388"><span class="linenos"> 388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-389"><a href="#Generator-389"><span class="linenos"> 389</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
+</span><span id="Generator-390"><a href="#Generator-390"><span class="linenos"> 390</span></a> <span class="p">)</span>
+</span><span id="Generator-391"><a href="#Generator-391"><span class="linenos"> 391</span></a>
+</span><span id="Generator-392"><a href="#Generator-392"><span class="linenos"> 392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-393"><a href="#Generator-393"><span class="linenos"> 393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="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 class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span>
+</span><span id="Generator-394"><a href="#Generator-394"><span class="linenos"> 394</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-395"><a href="#Generator-395"><span class="linenos"> 395</span></a> <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 class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
+</span><span id="Generator-396"><a href="#Generator-396"><span class="linenos"> 396</span></a> <span class="p">)</span>
+</span><span id="Generator-397"><a href="#Generator-397"><span class="linenos"> 397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span 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">int</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="Generator-398"><a href="#Generator-398"><span class="linenos"> 398</span></a>
-</span><span id="Generator-399"><a href="#Generator-399"><span class="linenos"> 399</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-400"><a href="#Generator-400"><span class="linenos"> 400</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator-401"><a href="#Generator-401"><span class="linenos"> 401</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-402"><a href="#Generator-402"><span class="linenos"> 402</span></a>
-</span><span id="Generator-403"><a href="#Generator-403"><span class="linenos"> 403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
-</span><span id="Generator-404"><a href="#Generator-404"><span class="linenos"> 404</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-405"><a href="#Generator-405"><span class="linenos"> 405</span></a>
-</span><span id="Generator-406"><a href="#Generator-406"><span class="linenos"> 406</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
-</span><span id="Generator-407"><a href="#Generator-407"><span class="linenos"> 407</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator-408"><a href="#Generator-408"><span class="linenos"> 408</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="Generator-409"><a href="#Generator-409"><span class="linenos"> 409</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator-410"><a href="#Generator-410"><span class="linenos"> 410</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="Generator-399"><a href="#Generator-399"><span class="linenos"> 399</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span>
+</span><span id="Generator-400"><a href="#Generator-400"><span class="linenos"> 400</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-401"><a href="#Generator-401"><span class="linenos"> 401</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="Generator-402"><a href="#Generator-402"><span class="linenos"> 402</span></a> <span class="n">cache</span><span 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">int</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-403"><a href="#Generator-403"><span class="linenos"> 403</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-404"><a href="#Generator-404"><span class="linenos"> 404</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Generator-405"><a href="#Generator-405"><span class="linenos"> 405</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="Generator-406"><a href="#Generator-406"><span class="linenos"> 406</span></a>
+</span><span id="Generator-407"><a href="#Generator-407"><span class="linenos"> 407</span></a><span class="sd"> Args:</span>
+</span><span id="Generator-408"><a href="#Generator-408"><span class="linenos"> 408</span></a><span class="sd"> expression: The syntax tree.</span>
+</span><span id="Generator-409"><a href="#Generator-409"><span class="linenos"> 409</span></a><span class="sd"> cache: An optional sql string cache. This leverages the hash of an Expression</span>
+</span><span id="Generator-410"><a href="#Generator-410"><span class="linenos"> 410</span></a><span class="sd"> which can be slow to compute, so only use it if you set _hash on each node.</span>
</span><span id="Generator-411"><a href="#Generator-411"><span class="linenos"> 411</span></a>
-</span><span id="Generator-412"><a href="#Generator-412"><span class="linenos"> 412</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-413"><a href="#Generator-413"><span class="linenos"> 413</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-414"><a href="#Generator-414"><span class="linenos"> 414</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-415"><a href="#Generator-415"><span class="linenos"> 415</span></a>
-</span><span id="Generator-416"><a href="#Generator-416"><span class="linenos"> 416</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-417"><a href="#Generator-417"><span class="linenos"> 417</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
-</span><span id="Generator-418"><a href="#Generator-418"><span class="linenos"> 418</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="Generator-419"><a href="#Generator-419"><span class="linenos"> 419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="Generator-420"><a href="#Generator-420"><span class="linenos"> 420</span></a>
-</span><span id="Generator-421"><a href="#Generator-421"><span class="linenos"> 421</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-422"><a href="#Generator-422"><span class="linenos"> 422</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
-</span><span id="Generator-423"><a href="#Generator-423"><span class="linenos"> 423</span></a>
-</span><span id="Generator-424"><a href="#Generator-424"><span class="linenos"> 424</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-425"><a href="#Generator-425"><span class="linenos"> 425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-426"><a href="#Generator-426"><span class="linenos"> 426</span></a>
-</span><span id="Generator-427"><a href="#Generator-427"><span class="linenos"> 427</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-428"><a href="#Generator-428"><span class="linenos"> 428</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator-429"><a href="#Generator-429"><span class="linenos"> 429</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator-430"><a href="#Generator-430"><span class="linenos"> 430</span></a> <span class="k">return</span> <span class="n">comment</span>
-</span><span id="Generator-431"><a href="#Generator-431"><span class="linenos"> 431</span></a>
-</span><span id="Generator-432"><a href="#Generator-432"><span class="linenos"> 432</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
-</span><span id="Generator-433"><a href="#Generator-433"><span class="linenos"> 433</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-434"><a href="#Generator-434"><span class="linenos"> 434</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator-435"><a href="#Generator-435"><span class="linenos"> 435</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-436"><a href="#Generator-436"><span class="linenos"> 436</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-437"><a href="#Generator-437"><span class="linenos"> 437</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-438"><a href="#Generator-438"><span class="linenos"> 438</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-439"><a href="#Generator-439"><span class="linenos"> 439</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Generator-440"><a href="#Generator-440"><span class="linenos"> 440</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Generator-441"><a href="#Generator-441"><span class="linenos"> 441</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Generator-442"><a href="#Generator-442"><span class="linenos"> 442</span></a> <span class="p">)</span>
-</span><span id="Generator-443"><a href="#Generator-443"><span class="linenos"> 443</span></a>
-</span><span id="Generator-444"><a href="#Generator-444"><span class="linenos"> 444</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Generator-445"><a href="#Generator-445"><span class="linenos"> 445</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-446"><a href="#Generator-446"><span class="linenos"> 446</span></a>
-</span><span id="Generator-447"><a href="#Generator-447"><span class="linenos"> 447</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">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator-448"><a href="#Generator-448"><span class="linenos"> 448</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-449"><a href="#Generator-449"><span class="linenos"> 449</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
-</span><span id="Generator-450"><a href="#Generator-450"><span class="linenos"> 450</span></a> <span class="p">)</span>
-</span><span id="Generator-451"><a href="#Generator-451"><span class="linenos"> 451</span></a>
-</span><span id="Generator-452"><a href="#Generator-452"><span class="linenos"> 452</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
-</span><span id="Generator-453"><a href="#Generator-453"><span class="linenos"> 453</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-454"><a href="#Generator-454"><span class="linenos"> 454</span></a>
-</span><span id="Generator-455"><a href="#Generator-455"><span class="linenos"> 455</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
-</span><span id="Generator-456"><a href="#Generator-456"><span class="linenos"> 456</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator-457"><a href="#Generator-457"><span class="linenos"> 457</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-458"><a href="#Generator-458"><span class="linenos"> 458</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
-</span><span id="Generator-459"><a href="#Generator-459"><span class="linenos"> 459</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-460"><a href="#Generator-460"><span class="linenos"> 460</span></a> <span class="p">)</span>
-</span><span id="Generator-461"><a href="#Generator-461"><span class="linenos"> 461</span></a>
-</span><span id="Generator-462"><a href="#Generator-462"><span class="linenos"> 462</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-463"><a href="#Generator-463"><span class="linenos"> 463</span></a>
-</span><span id="Generator-464"><a href="#Generator-464"><span class="linenos"> 464</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-465"><a href="#Generator-465"><span class="linenos"> 465</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
-</span><span id="Generator-466"><a href="#Generator-466"><span class="linenos"> 466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-467"><a href="#Generator-467"><span class="linenos"> 467</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
-</span><span id="Generator-468"><a href="#Generator-468"><span class="linenos"> 468</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="Generator-469"><a href="#Generator-469"><span class="linenos"> 469</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
-</span><span id="Generator-470"><a href="#Generator-470"><span class="linenos"> 470</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator-471"><a href="#Generator-471"><span class="linenos"> 471</span></a> <span class="p">)</span>
-</span><span id="Generator-472"><a href="#Generator-472"><span class="linenos"> 472</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-412"><a href="#Generator-412"><span class="linenos"> 412</span></a><span class="sd"> Returns:</span>
+</span><span id="Generator-413"><a href="#Generator-413"><span class="linenos"> 413</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
+</span><span id="Generator-414"><a href="#Generator-414"><span class="linenos"> 414</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Generator-415"><a href="#Generator-415"><span class="linenos"> 415</span></a> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-416"><a href="#Generator-416"><span class="linenos"> 416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="n">cache</span>
+</span><span id="Generator-417"><a href="#Generator-417"><span class="linenos"> 417</span></a>
+</span><span id="Generator-418"><a href="#Generator-418"><span class="linenos"> 418</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-419"><a href="#Generator-419"><span class="linenos"> 419</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator-420"><a href="#Generator-420"><span class="linenos"> 420</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-421"><a href="#Generator-421"><span class="linenos"> 421</span></a>
+</span><span id="Generator-422"><a href="#Generator-422"><span class="linenos"> 422</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
+</span><span id="Generator-423"><a href="#Generator-423"><span class="linenos"> 423</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-424"><a href="#Generator-424"><span class="linenos"> 424</span></a>
+</span><span id="Generator-425"><a href="#Generator-425"><span class="linenos"> 425</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
+</span><span id="Generator-426"><a href="#Generator-426"><span class="linenos"> 426</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator-427"><a href="#Generator-427"><span class="linenos"> 427</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="Generator-428"><a href="#Generator-428"><span class="linenos"> 428</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator-429"><a href="#Generator-429"><span class="linenos"> 429</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="Generator-430"><a href="#Generator-430"><span class="linenos"> 430</span></a>
+</span><span id="Generator-431"><a href="#Generator-431"><span class="linenos"> 431</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-432"><a href="#Generator-432"><span class="linenos"> 432</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-433"><a href="#Generator-433"><span class="linenos"> 433</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-434"><a href="#Generator-434"><span class="linenos"> 434</span></a>
+</span><span id="Generator-435"><a href="#Generator-435"><span class="linenos"> 435</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-436"><a href="#Generator-436"><span class="linenos"> 436</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
+</span><span id="Generator-437"><a href="#Generator-437"><span class="linenos"> 437</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="Generator-438"><a href="#Generator-438"><span class="linenos"> 438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="Generator-439"><a href="#Generator-439"><span class="linenos"> 439</span></a>
+</span><span id="Generator-440"><a href="#Generator-440"><span class="linenos"> 440</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-441"><a href="#Generator-441"><span class="linenos"> 441</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
+</span><span id="Generator-442"><a href="#Generator-442"><span class="linenos"> 442</span></a>
+</span><span id="Generator-443"><a href="#Generator-443"><span class="linenos"> 443</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-444"><a href="#Generator-444"><span class="linenos"> 444</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-445"><a href="#Generator-445"><span class="linenos"> 445</span></a>
+</span><span id="Generator-446"><a href="#Generator-446"><span class="linenos"> 446</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-447"><a href="#Generator-447"><span class="linenos"> 447</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator-448"><a href="#Generator-448"><span class="linenos"> 448</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator-449"><a href="#Generator-449"><span class="linenos"> 449</span></a> <span class="k">return</span> <span class="n">comment</span>
+</span><span id="Generator-450"><a href="#Generator-450"><span class="linenos"> 450</span></a>
+</span><span id="Generator-451"><a href="#Generator-451"><span class="linenos"> 451</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
+</span><span id="Generator-452"><a href="#Generator-452"><span class="linenos"> 452</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-453"><a href="#Generator-453"><span class="linenos"> 453</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator-454"><a href="#Generator-454"><span class="linenos"> 454</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-455"><a href="#Generator-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">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-456"><a href="#Generator-456"><span class="linenos"> 456</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-457"><a href="#Generator-457"><span class="linenos"> 457</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-458"><a href="#Generator-458"><span class="linenos"> 458</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Generator-459"><a href="#Generator-459"><span class="linenos"> 459</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Generator-460"><a href="#Generator-460"><span class="linenos"> 460</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Generator-461"><a href="#Generator-461"><span class="linenos"> 461</span></a> <span class="p">)</span>
+</span><span id="Generator-462"><a href="#Generator-462"><span class="linenos"> 462</span></a>
+</span><span id="Generator-463"><a href="#Generator-463"><span class="linenos"> 463</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Generator-464"><a href="#Generator-464"><span class="linenos"> 464</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-465"><a href="#Generator-465"><span class="linenos"> 465</span></a>
+</span><span id="Generator-466"><a href="#Generator-466"><span class="linenos"> 466</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">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator-467"><a href="#Generator-467"><span class="linenos"> 467</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-468"><a href="#Generator-468"><span class="linenos"> 468</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
+</span><span id="Generator-469"><a href="#Generator-469"><span class="linenos"> 469</span></a> <span class="p">)</span>
+</span><span id="Generator-470"><a href="#Generator-470"><span class="linenos"> 470</span></a>
+</span><span id="Generator-471"><a href="#Generator-471"><span class="linenos"> 471</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
+</span><span id="Generator-472"><a href="#Generator-472"><span class="linenos"> 472</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="Generator-473"><a href="#Generator-473"><span class="linenos"> 473</span></a>
-</span><span id="Generator-474"><a href="#Generator-474"><span class="linenos"> 474</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-475"><a href="#Generator-475"><span class="linenos"> 475</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
-</span><span id="Generator-476"><a href="#Generator-476"><span class="linenos"> 476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-477"><a href="#Generator-477"><span class="linenos"> 477</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Generator-478"><a href="#Generator-478"><span class="linenos"> 478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
-</span><span id="Generator-479"><a href="#Generator-479"><span class="linenos"> 479</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="Generator-474"><a href="#Generator-474"><span class="linenos"> 474</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
+</span><span id="Generator-475"><a href="#Generator-475"><span class="linenos"> 475</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator-476"><a href="#Generator-476"><span class="linenos"> 476</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-477"><a href="#Generator-477"><span class="linenos"> 477</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="Generator-478"><a href="#Generator-478"><span class="linenos"> 478</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-479"><a href="#Generator-479"><span class="linenos"> 479</span></a> <span class="p">)</span>
</span><span id="Generator-480"><a href="#Generator-480"><span class="linenos"> 480</span></a>
-</span><span id="Generator-481"><a href="#Generator-481"><span class="linenos"> 481</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-482"><a href="#Generator-482"><span class="linenos"> 482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator-483"><a href="#Generator-483"><span class="linenos"> 483</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator-484"><a href="#Generator-484"><span class="linenos"> 484</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
-</span><span id="Generator-485"><a href="#Generator-485"><span class="linenos"> 485</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator-486"><a href="#Generator-486"><span class="linenos"> 486</span></a> <span class="k">return</span> <span class="n">name</span>
-</span><span id="Generator-487"><a href="#Generator-487"><span class="linenos"> 487</span></a>
-</span><span id="Generator-488"><a href="#Generator-488"><span class="linenos"> 488</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
-</span><span id="Generator-489"><a href="#Generator-489"><span class="linenos"> 489</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-490"><a href="#Generator-490"><span class="linenos"> 490</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator-491"><a href="#Generator-491"><span class="linenos"> 491</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator-492"><a href="#Generator-492"><span class="linenos"> 492</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-493"><a href="#Generator-493"><span class="linenos"> 493</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-494"><a href="#Generator-494"><span class="linenos"> 494</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-495"><a href="#Generator-495"><span class="linenos"> 495</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-496"><a href="#Generator-496"><span class="linenos"> 496</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-497"><a href="#Generator-497"><span class="linenos"> 497</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-498"><a href="#Generator-498"><span class="linenos"> 498</span></a>
-</span><span id="Generator-499"><a href="#Generator-499"><span class="linenos"> 499</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
-</span><span id="Generator-500"><a href="#Generator-500"><span class="linenos"> 500</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-501"><a href="#Generator-501"><span class="linenos"> 501</span></a>
-</span><span id="Generator-502"><a href="#Generator-502"><span class="linenos"> 502</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-503"><a href="#Generator-503"><span class="linenos"> 503</span></a> <span class="n">line</span>
-</span><span id="Generator-504"><a href="#Generator-504"><span class="linenos"> 504</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Generator-505"><a href="#Generator-505"><span class="linenos"> 505</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-506"><a href="#Generator-506"><span class="linenos"> 506</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="Generator-507"><a href="#Generator-507"><span class="linenos"> 507</span></a> <span class="p">)</span>
-</span><span id="Generator-508"><a href="#Generator-508"><span class="linenos"> 508</span></a>
-</span><span id="Generator-509"><a href="#Generator-509"><span class="linenos"> 509</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
-</span><span id="Generator-510"><a href="#Generator-510"><span class="linenos"> 510</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-511"><a href="#Generator-511"><span class="linenos"> 511</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
-</span><span id="Generator-512"><a href="#Generator-512"><span class="linenos"> 512</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-513"><a href="#Generator-513"><span class="linenos"> 513</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-481"><a href="#Generator-481"><span class="linenos"> 481</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-482"><a href="#Generator-482"><span class="linenos"> 482</span></a>
+</span><span id="Generator-483"><a href="#Generator-483"><span class="linenos"> 483</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-484"><a href="#Generator-484"><span class="linenos"> 484</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
+</span><span id="Generator-485"><a href="#Generator-485"><span class="linenos"> 485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-486"><a href="#Generator-486"><span class="linenos"> 486</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
+</span><span id="Generator-487"><a href="#Generator-487"><span class="linenos"> 487</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="Generator-488"><a href="#Generator-488"><span class="linenos"> 488</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="Generator-489"><a href="#Generator-489"><span class="linenos"> 489</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator-490"><a href="#Generator-490"><span class="linenos"> 490</span></a> <span class="p">)</span>
+</span><span id="Generator-491"><a href="#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="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-492"><a href="#Generator-492"><span class="linenos"> 492</span></a>
+</span><span id="Generator-493"><a href="#Generator-493"><span class="linenos"> 493</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-494"><a href="#Generator-494"><span class="linenos"> 494</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
+</span><span id="Generator-495"><a href="#Generator-495"><span class="linenos"> 495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-496"><a href="#Generator-496"><span class="linenos"> 496</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Generator-497"><a href="#Generator-497"><span class="linenos"> 497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
+</span><span id="Generator-498"><a href="#Generator-498"><span class="linenos"> 498</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="Generator-499"><a href="#Generator-499"><span class="linenos"> 499</span></a>
+</span><span id="Generator-500"><a href="#Generator-500"><span class="linenos"> 500</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-501"><a href="#Generator-501"><span class="linenos"> 501</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator-502"><a href="#Generator-502"><span class="linenos"> 502</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator-503"><a href="#Generator-503"><span class="linenos"> 503</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
+</span><span id="Generator-504"><a href="#Generator-504"><span class="linenos"> 504</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator-505"><a href="#Generator-505"><span class="linenos"> 505</span></a> <span class="k">return</span> <span class="n">name</span>
+</span><span id="Generator-506"><a href="#Generator-506"><span class="linenos"> 506</span></a>
+</span><span id="Generator-507"><a href="#Generator-507"><span class="linenos"> 507</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
+</span><span id="Generator-508"><a href="#Generator-508"><span class="linenos"> 508</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-509"><a href="#Generator-509"><span class="linenos"> 509</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator-510"><a href="#Generator-510"><span class="linenos"> 510</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator-511"><a href="#Generator-511"><span class="linenos"> 511</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-512"><a href="#Generator-512"><span class="linenos"> 512</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-513"><a href="#Generator-513"><span class="linenos"> 513</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Generator-514"><a href="#Generator-514"><span class="linenos"> 514</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-515"><a href="#Generator-515"><span class="linenos"> 515</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Generator-516"><a href="#Generator-516"><span class="linenos"> 516</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-515"><a href="#Generator-515"><span class="linenos"> 515</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-516"><a href="#Generator-516"><span class="linenos"> 516</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="Generator-517"><a href="#Generator-517"><span class="linenos"> 517</span></a>
-</span><span id="Generator-518"><a href="#Generator-518"><span class="linenos"> 518</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Generator-519"><a href="#Generator-519"><span class="linenos"> 519</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator-518"><a href="#Generator-518"><span class="linenos"> 518</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
+</span><span id="Generator-519"><a href="#Generator-519"><span class="linenos"> 519</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Generator-520"><a href="#Generator-520"><span class="linenos"> 520</span></a>
-</span><span id="Generator-521"><a href="#Generator-521"><span class="linenos"> 521</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
-</span><span id="Generator-522"><a href="#Generator-522"><span class="linenos"> 522</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
-</span><span id="Generator-523"><a href="#Generator-523"><span class="linenos"> 523</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Generator-524"><a href="#Generator-524"><span class="linenos"> 524</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator-525"><a href="#Generator-525"><span class="linenos"> 525</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-526"><a href="#Generator-526"><span class="linenos"> 526</span></a>
-</span><span id="Generator-527"><a href="#Generator-527"><span class="linenos"> 527</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-528"><a href="#Generator-528"><span class="linenos"> 528</span></a> <span class="n">expression_id</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-529"><a href="#Generator-529"><span class="linenos"> 529</span></a>
-</span><span id="Generator-530"><a href="#Generator-530"><span class="linenos"> 530</span></a> <span class="k">if</span> <span class="n">expression_id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
-</span><span id="Generator-531"><a href="#Generator-531"><span class="linenos"> 531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span>
-</span><span id="Generator-532"><a href="#Generator-532"><span class="linenos"> 532</span></a>
-</span><span id="Generator-533"><a href="#Generator-533"><span class="linenos"> 533</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator-534"><a href="#Generator-534"><span class="linenos"> 534</span></a>
-</span><span id="Generator-535"><a href="#Generator-535"><span class="linenos"> 535</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="Generator-536"><a href="#Generator-536"><span class="linenos"> 536</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-537"><a href="#Generator-537"><span class="linenos"> 537</span></a> <span class="k">elif</span> <span class="n">transform</span><span class="p">:</span>
-</span><span id="Generator-538"><a href="#Generator-538"><span class="linenos"> 538</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span>
-</span><span id="Generator-539"><a href="#Generator-539"><span class="linenos"> 539</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Generator-540"><a href="#Generator-540"><span class="linenos"> 540</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
-</span><span id="Generator-541"><a href="#Generator-541"><span class="linenos"> 541</span></a>
-</span><span id="Generator-542"><a href="#Generator-542"><span class="linenos"> 542</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
-</span><span id="Generator-543"><a href="#Generator-543"><span class="linenos"> 543</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-544"><a href="#Generator-544"><span class="linenos"> 544</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Generator-545"><a href="#Generator-545"><span class="linenos"> 545</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-546"><a href="#Generator-546"><span class="linenos"> 546</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="Generator-547"><a href="#Generator-547"><span class="linenos"> 547</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-548"><a href="#Generator-548"><span class="linenos"> 548</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-549"><a href="#Generator-549"><span class="linenos"> 549</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-550"><a href="#Generator-550"><span class="linenos"> 550</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-551"><a href="#Generator-551"><span class="linenos"> 551</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-552"><a href="#Generator-552"><span class="linenos"> 552</span></a>
-</span><span id="Generator-553"><a href="#Generator-553"><span class="linenos"> 553</span></a> <span class="n">sql</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">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
-</span><span id="Generator-554"><a href="#Generator-554"><span class="linenos"> 554</span></a>
-</span><span id="Generator-555"><a href="#Generator-555"><span class="linenos"> 555</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-556"><a href="#Generator-556"><span class="linenos"> 556</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">sql</span>
-</span><span id="Generator-557"><a href="#Generator-557"><span class="linenos"> 557</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-558"><a href="#Generator-558"><span class="linenos"> 558</span></a>
-</span><span id="Generator-559"><a href="#Generator-559"><span class="linenos"> 559</span></a> <span class="k">def</span> <span class="nf">uncache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-560"><a href="#Generator-560"><span class="linenos"> 560</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-561"><a href="#Generator-561"><span class="linenos"> 561</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-562"><a href="#Generator-562"><span class="linenos"> 562</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-563"><a href="#Generator-563"><span class="linenos"> 563</span></a>
-</span><span id="Generator-564"><a href="#Generator-564"><span class="linenos"> 564</span></a> <span class="k">def</span> <span class="nf">cache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-565"><a href="#Generator-565"><span class="linenos"> 565</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-566"><a href="#Generator-566"><span class="linenos"> 566</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-567"><a href="#Generator-567"><span class="linenos"> 567</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">)</span>
-</span><span id="Generator-568"><a href="#Generator-568"><span class="linenos"> 568</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-569"><a href="#Generator-569"><span class="linenos"> 569</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator-570"><a href="#Generator-570"><span class="linenos"> 570</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-571"><a href="#Generator-571"><span class="linenos"> 571</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-572"><a href="#Generator-572"><span class="linenos"> 572</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-521"><a href="#Generator-521"><span class="linenos"> 521</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-522"><a href="#Generator-522"><span class="linenos"> 522</span></a> <span class="n">line</span>
+</span><span id="Generator-523"><a href="#Generator-523"><span class="linenos"> 523</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Generator-524"><a href="#Generator-524"><span class="linenos"> 524</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-525"><a href="#Generator-525"><span class="linenos"> 525</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+</span><span id="Generator-526"><a href="#Generator-526"><span class="linenos"> 526</span></a> <span class="p">)</span>
+</span><span id="Generator-527"><a href="#Generator-527"><span class="linenos"> 527</span></a>
+</span><span id="Generator-528"><a href="#Generator-528"><span class="linenos"> 528</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="Generator-529"><a href="#Generator-529"><span class="linenos"> 529</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-530"><a href="#Generator-530"><span class="linenos"> 530</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
+</span><span id="Generator-531"><a href="#Generator-531"><span class="linenos"> 531</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-532"><a href="#Generator-532"><span class="linenos"> 532</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-533"><a href="#Generator-533"><span class="linenos"> 533</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-534"><a href="#Generator-534"><span class="linenos"> 534</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Generator-535"><a href="#Generator-535"><span class="linenos"> 535</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-536"><a href="#Generator-536"><span class="linenos"> 536</span></a>
+</span><span id="Generator-537"><a href="#Generator-537"><span class="linenos"> 537</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Generator-538"><a href="#Generator-538"><span class="linenos"> 538</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator-539"><a href="#Generator-539"><span class="linenos"> 539</span></a>
+</span><span id="Generator-540"><a href="#Generator-540"><span class="linenos"> 540</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+</span><span id="Generator-541"><a href="#Generator-541"><span class="linenos"> 541</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="Generator-542"><a href="#Generator-542"><span class="linenos"> 542</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="Generator-543"><a href="#Generator-543"><span class="linenos"> 543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator-544"><a href="#Generator-544"><span class="linenos"> 544</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-545"><a href="#Generator-545"><span class="linenos"> 545</span></a>
+</span><span id="Generator-546"><a href="#Generator-546"><span class="linenos"> 546</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-547"><a href="#Generator-547"><span class="linenos"> 547</span></a> <span class="n">expression_id</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-548"><a href="#Generator-548"><span class="linenos"> 548</span></a>
+</span><span id="Generator-549"><a href="#Generator-549"><span class="linenos"> 549</span></a> <span class="k">if</span> <span class="n">expression_id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
+</span><span id="Generator-550"><a href="#Generator-550"><span class="linenos"> 550</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span>
+</span><span id="Generator-551"><a href="#Generator-551"><span class="linenos"> 551</span></a>
+</span><span id="Generator-552"><a href="#Generator-552"><span class="linenos"> 552</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator-553"><a href="#Generator-553"><span class="linenos"> 553</span></a>
+</span><span id="Generator-554"><a href="#Generator-554"><span class="linenos"> 554</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="Generator-555"><a href="#Generator-555"><span class="linenos"> 555</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-556"><a href="#Generator-556"><span class="linenos"> 556</span></a> <span class="k">elif</span> <span class="n">transform</span><span class="p">:</span>
+</span><span id="Generator-557"><a href="#Generator-557"><span class="linenos"> 557</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span>
+</span><span id="Generator-558"><a href="#Generator-558"><span class="linenos"> 558</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Generator-559"><a href="#Generator-559"><span class="linenos"> 559</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
+</span><span id="Generator-560"><a href="#Generator-560"><span class="linenos"> 560</span></a>
+</span><span id="Generator-561"><a href="#Generator-561"><span class="linenos"> 561</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
+</span><span id="Generator-562"><a href="#Generator-562"><span class="linenos"> 562</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-563"><a href="#Generator-563"><span class="linenos"> 563</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Generator-564"><a href="#Generator-564"><span class="linenos"> 564</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-565"><a href="#Generator-565"><span class="linenos"> 565</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="Generator-566"><a href="#Generator-566"><span class="linenos"> 566</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-567"><a href="#Generator-567"><span class="linenos"> 567</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-568"><a href="#Generator-568"><span class="linenos"> 568</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-569"><a href="#Generator-569"><span class="linenos"> 569</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-570"><a href="#Generator-570"><span class="linenos"> 570</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-571"><a href="#Generator-571"><span class="linenos"> 571</span></a>
+</span><span id="Generator-572"><a href="#Generator-572"><span class="linenos"> 572</span></a> <span class="n">sql</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">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
</span><span id="Generator-573"><a href="#Generator-573"><span class="linenos"> 573</span></a>
-</span><span id="Generator-574"><a href="#Generator-574"><span class="linenos"> 574</span></a> <span class="k">def</span> <span class="nf">characterset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-575"><a href="#Generator-575"><span class="linenos"> 575</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Generator-576"><a href="#Generator-576"><span class="linenos"> 576</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-577"><a href="#Generator-577"><span class="linenos"> 577</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-578"><a href="#Generator-578"><span class="linenos"> 578</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-579"><a href="#Generator-579"><span class="linenos"> 579</span></a>
-</span><span id="Generator-580"><a href="#Generator-580"><span class="linenos"> 580</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-581"><a href="#Generator-581"><span class="linenos"> 581</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-574"><a href="#Generator-574"><span class="linenos"> 574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-575"><a href="#Generator-575"><span class="linenos"> 575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">sql</span>
+</span><span id="Generator-576"><a href="#Generator-576"><span class="linenos"> 576</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-577"><a href="#Generator-577"><span class="linenos"> 577</span></a>
+</span><span id="Generator-578"><a href="#Generator-578"><span class="linenos"> 578</span></a> <span class="k">def</span> <span class="nf">uncache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-579"><a href="#Generator-579"><span class="linenos"> 579</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-580"><a href="#Generator-580"><span class="linenos"> 580</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-581"><a href="#Generator-581"><span class="linenos"> 581</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-582"><a href="#Generator-582"><span class="linenos"> 582</span></a>
-</span><span id="Generator-583"><a href="#Generator-583"><span class="linenos"> 583</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-584"><a href="#Generator-584"><span class="linenos"> 584</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-585"><a href="#Generator-585"><span class="linenos"> 585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
-</span><span id="Generator-586"><a href="#Generator-586"><span class="linenos"> 586</span></a>
-</span><span id="Generator-587"><a href="#Generator-587"><span class="linenos"> 587</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-588"><a href="#Generator-588"><span class="linenos"> 588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Generator-589"><a href="#Generator-589"><span class="linenos"> 589</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator-590"><a href="#Generator-590"><span class="linenos"> 590</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator-591"><a href="#Generator-591"><span class="linenos"> 591</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="Generator-592"><a href="#Generator-592"><span class="linenos"> 592</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
-</span><span id="Generator-593"><a href="#Generator-593"><span class="linenos"> 593</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="Generator-594"><a href="#Generator-594"><span class="linenos"> 594</span></a> <span class="p">)</span>
-</span><span id="Generator-595"><a href="#Generator-595"><span class="linenos"> 595</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="Generator-596"><a href="#Generator-596"><span class="linenos"> 596</span></a> <span class="p">)</span>
-</span><span id="Generator-597"><a href="#Generator-597"><span class="linenos"> 597</span></a>
-</span><span id="Generator-598"><a href="#Generator-598"><span class="linenos"> 598</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-599"><a href="#Generator-599"><span class="linenos"> 599</span></a>
-</span><span id="Generator-600"><a href="#Generator-600"><span class="linenos"> 600</span></a> <span class="k">def</span> <span class="nf">columnposition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-601"><a href="#Generator-601"><span class="linenos"> 601</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-602"><a href="#Generator-602"><span class="linenos"> 602</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-603"><a href="#Generator-603"><span class="linenos"> 603</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator-604"><a href="#Generator-604"><span class="linenos"> 604</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-583"><a href="#Generator-583"><span class="linenos"> 583</span></a> <span class="k">def</span> <span class="nf">cache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-584"><a href="#Generator-584"><span class="linenos"> 584</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-585"><a href="#Generator-585"><span class="linenos"> 585</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-586"><a href="#Generator-586"><span class="linenos"> 586</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">)</span>
+</span><span id="Generator-587"><a href="#Generator-587"><span class="linenos"> 587</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-588"><a href="#Generator-588"><span class="linenos"> 588</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator-589"><a href="#Generator-589"><span class="linenos"> 589</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-590"><a href="#Generator-590"><span class="linenos"> 590</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-591"><a href="#Generator-591"><span class="linenos"> 591</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-592"><a href="#Generator-592"><span class="linenos"> 592</span></a>
+</span><span id="Generator-593"><a href="#Generator-593"><span class="linenos"> 593</span></a> <span class="k">def</span> <span class="nf">characterset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-594"><a href="#Generator-594"><span class="linenos"> 594</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Generator-595"><a href="#Generator-595"><span class="linenos"> 595</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-596"><a href="#Generator-596"><span class="linenos"> 596</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-597"><a href="#Generator-597"><span class="linenos"> 597</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-598"><a href="#Generator-598"><span class="linenos"> 598</span></a>
+</span><span id="Generator-599"><a href="#Generator-599"><span class="linenos"> 599</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-600"><a href="#Generator-600"><span class="linenos"> 600</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-601"><a href="#Generator-601"><span class="linenos"> 601</span></a>
+</span><span id="Generator-602"><a href="#Generator-602"><span class="linenos"> 602</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-603"><a href="#Generator-603"><span class="linenos"> 603</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-604"><a href="#Generator-604"><span class="linenos"> 604</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
</span><span id="Generator-605"><a href="#Generator-605"><span class="linenos"> 605</span></a>
-</span><span id="Generator-606"><a href="#Generator-606"><span class="linenos"> 606</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-607"><a href="#Generator-607"><span class="linenos"> 607</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-608"><a href="#Generator-608"><span class="linenos"> 608</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-609"><a href="#Generator-609"><span class="linenos"> 609</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-610"><a href="#Generator-610"><span class="linenos"> 610</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-611"><a href="#Generator-611"><span class="linenos"> 611</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-612"><a href="#Generator-612"><span class="linenos"> 612</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-613"><a href="#Generator-613"><span class="linenos"> 613</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator-614"><a href="#Generator-614"><span class="linenos"> 614</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-615"><a href="#Generator-615"><span class="linenos"> 615</span></a>
-</span><span id="Generator-616"><a href="#Generator-616"><span class="linenos"> 616</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-617"><a href="#Generator-617"><span class="linenos"> 617</span></a>
-</span><span id="Generator-618"><a href="#Generator-618"><span class="linenos"> 618</span></a> <span class="k">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-619"><a href="#Generator-619"><span class="linenos"> 619</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-620"><a href="#Generator-620"><span class="linenos"> 620</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-621"><a href="#Generator-621"><span class="linenos"> 621</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-622"><a href="#Generator-622"><span class="linenos"> 622</span></a>
-</span><span id="Generator-623"><a href="#Generator-623"><span class="linenos"> 623</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-624"><a href="#Generator-624"><span class="linenos"> 624</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
-</span><span id="Generator-625"><a href="#Generator-625"><span class="linenos"> 625</span></a>
-</span><span id="Generator-626"><a href="#Generator-626"><span class="linenos"> 626</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-627"><a href="#Generator-627"><span class="linenos"> 627</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator-628"><a href="#Generator-628"><span class="linenos"> 628</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Generator-629"><a href="#Generator-629"><span class="linenos"> 629</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-630"><a href="#Generator-630"><span class="linenos"> 630</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-631"><a href="#Generator-631"><span class="linenos"> 631</span></a>
-</span><span id="Generator-632"><a href="#Generator-632"><span class="linenos"> 632</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-633"><a href="#Generator-633"><span class="linenos"> 633</span></a>
-</span><span id="Generator-634"><a href="#Generator-634"><span class="linenos"> 634</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator-635"><a href="#Generator-635"><span class="linenos"> 635</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="Generator-636"><a href="#Generator-636"><span class="linenos"> 636</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-637"><a href="#Generator-637"><span class="linenos"> 637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-638"><a href="#Generator-638"><span class="linenos"> 638</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-639"><a href="#Generator-639"><span class="linenos"> 639</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot;ON NULL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-640"><a href="#Generator-640"><span class="linenos"> 640</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT </span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-606"><a href="#Generator-606"><span class="linenos"> 606</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-607"><a href="#Generator-607"><span class="linenos"> 607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Generator-608"><a href="#Generator-608"><span class="linenos"> 608</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-609"><a href="#Generator-609"><span class="linenos"> 609</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator-610"><a href="#Generator-610"><span class="linenos"> 610</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="Generator-611"><a href="#Generator-611"><span class="linenos"> 611</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
+</span><span id="Generator-612"><a href="#Generator-612"><span class="linenos"> 612</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="Generator-613"><a href="#Generator-613"><span class="linenos"> 613</span></a> <span class="p">)</span>
+</span><span id="Generator-614"><a href="#Generator-614"><span class="linenos"> 614</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="Generator-615"><a href="#Generator-615"><span class="linenos"> 615</span></a> <span class="p">)</span>
+</span><span id="Generator-616"><a href="#Generator-616"><span class="linenos"> 616</span></a>
+</span><span id="Generator-617"><a href="#Generator-617"><span class="linenos"> 617</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-618"><a href="#Generator-618"><span class="linenos"> 618</span></a>
+</span><span id="Generator-619"><a href="#Generator-619"><span class="linenos"> 619</span></a> <span class="k">def</span> <span class="nf">columnposition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-620"><a href="#Generator-620"><span class="linenos"> 620</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-621"><a href="#Generator-621"><span class="linenos"> 621</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-622"><a href="#Generator-622"><span class="linenos"> 622</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator-623"><a href="#Generator-623"><span class="linenos"> 623</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-624"><a href="#Generator-624"><span class="linenos"> 624</span></a>
+</span><span id="Generator-625"><a href="#Generator-625"><span class="linenos"> 625</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-626"><a href="#Generator-626"><span class="linenos"> 626</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-627"><a href="#Generator-627"><span class="linenos"> 627</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-628"><a href="#Generator-628"><span class="linenos"> 628</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-629"><a href="#Generator-629"><span class="linenos"> 629</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-630"><a href="#Generator-630"><span class="linenos"> 630</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-631"><a href="#Generator-631"><span class="linenos"> 631</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-632"><a href="#Generator-632"><span class="linenos"> 632</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator-633"><a href="#Generator-633"><span class="linenos"> 633</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-634"><a href="#Generator-634"><span class="linenos"> 634</span></a>
+</span><span id="Generator-635"><a href="#Generator-635"><span class="linenos"> 635</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-636"><a href="#Generator-636"><span class="linenos"> 636</span></a>
+</span><span id="Generator-637"><a href="#Generator-637"><span class="linenos"> 637</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-638"><a href="#Generator-638"><span class="linenos"> 638</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-639"><a href="#Generator-639"><span class="linenos"> 639</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-640"><a href="#Generator-640"><span class="linenos"> 640</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-641"><a href="#Generator-641"><span class="linenos"> 641</span></a>
-</span><span id="Generator-642"><a href="#Generator-642"><span class="linenos"> 642</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span>
-</span><span id="Generator-643"><a href="#Generator-643"><span class="linenos"> 643</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-644"><a href="#Generator-644"><span class="linenos"> 644</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">)</span>
-</span><span id="Generator-645"><a href="#Generator-645"><span class="linenos"> 645</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-646"><a href="#Generator-646"><span class="linenos"> 646</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator-647"><a href="#Generator-647"><span class="linenos"> 647</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-648"><a href="#Generator-648"><span class="linenos"> 648</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator-649"><a href="#Generator-649"><span class="linenos"> 649</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-650"><a href="#Generator-650"><span class="linenos"> 650</span></a> <span class="n">cycle</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">)</span>
-</span><span id="Generator-651"><a href="#Generator-651"><span class="linenos"> 651</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-652"><a href="#Generator-652"><span class="linenos"> 652</span></a>
-</span><span id="Generator-653"><a href="#Generator-653"><span class="linenos"> 653</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-654"><a href="#Generator-654"><span class="linenos"> 654</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
-</span><span id="Generator-655"><a href="#Generator-655"><span class="linenos"> 655</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
-</span><span id="Generator-656"><a href="#Generator-656"><span class="linenos"> 656</span></a>
-</span><span id="Generator-657"><a href="#Generator-657"><span class="linenos"> 657</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-658"><a href="#Generator-658"><span class="linenos"> 658</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
-</span><span id="Generator-659"><a href="#Generator-659"><span class="linenos"> 659</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-660"><a href="#Generator-660"><span class="linenos"> 660</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-661"><a href="#Generator-661"><span class="linenos"> 661</span></a>
-</span><span id="Generator-662"><a href="#Generator-662"><span class="linenos"> 662</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator-663"><a href="#Generator-663"><span class="linenos"> 663</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
-</span><span id="Generator-664"><a href="#Generator-664"><span class="linenos"> 664</span></a>
-</span><span id="Generator-665"><a href="#Generator-665"><span class="linenos"> 665</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-666"><a href="#Generator-666"><span class="linenos"> 666</span></a>
-</span><span id="Generator-667"><a href="#Generator-667"><span class="linenos"> 667</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-668"><a href="#Generator-668"><span class="linenos"> 668</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
-</span><span id="Generator-669"><a href="#Generator-669"><span class="linenos"> 669</span></a>
-</span><span id="Generator-670"><a href="#Generator-670"><span class="linenos"> 670</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-671"><a href="#Generator-671"><span class="linenos"> 671</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-672"><a href="#Generator-672"><span class="linenos"> 672</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-673"><a href="#Generator-673"><span class="linenos"> 673</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-674"><a href="#Generator-674"><span class="linenos"> 674</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY&quot;</span>
-</span><span id="Generator-675"><a href="#Generator-675"><span class="linenos"> 675</span></a>
-</span><span id="Generator-676"><a href="#Generator-676"><span class="linenos"> 676</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-677"><a href="#Generator-677"><span class="linenos"> 677</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-678"><a href="#Generator-678"><span class="linenos"> 678</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-679"><a href="#Generator-679"><span class="linenos"> 679</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-680"><a href="#Generator-680"><span class="linenos"> 680</span></a>
-</span><span id="Generator-681"><a href="#Generator-681"><span class="linenos"> 681</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-682"><a href="#Generator-682"><span class="linenos"> 682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-683"><a href="#Generator-683"><span class="linenos"> 683</span></a>
-</span><span id="Generator-684"><a href="#Generator-684"><span class="linenos"> 684</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-685"><a href="#Generator-685"><span class="linenos"> 685</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator-686"><a href="#Generator-686"><span class="linenos"> 686</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
-</span><span id="Generator-687"><a href="#Generator-687"><span class="linenos"> 687</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
-</span><span id="Generator-688"><a href="#Generator-688"><span class="linenos"> 688</span></a>
-</span><span id="Generator-689"><a href="#Generator-689"><span class="linenos"> 689</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="Generator-642"><a href="#Generator-642"><span class="linenos"> 642</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-643"><a href="#Generator-643"><span class="linenos"> 643</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-644"><a href="#Generator-644"><span class="linenos"> 644</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
+</span><span id="Generator-645"><a href="#Generator-645"><span class="linenos"> 645</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
+</span><span id="Generator-646"><a href="#Generator-646"><span class="linenos"> 646</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;persisted&quot;</span><span class="p">):</span>
+</span><span id="Generator-647"><a href="#Generator-647"><span class="linenos"> 647</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
+</span><span id="Generator-648"><a href="#Generator-648"><span class="linenos"> 648</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-649"><a href="#Generator-649"><span class="linenos"> 649</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-650"><a href="#Generator-650"><span class="linenos"> 650</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-651"><a href="#Generator-651"><span class="linenos"> 651</span></a>
+</span><span id="Generator-652"><a href="#Generator-652"><span class="linenos"> 652</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-653"><a href="#Generator-653"><span class="linenos"> 653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
+</span><span id="Generator-654"><a href="#Generator-654"><span class="linenos"> 654</span></a>
+</span><span id="Generator-655"><a href="#Generator-655"><span class="linenos"> 655</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-656"><a href="#Generator-656"><span class="linenos"> 656</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator-657"><a href="#Generator-657"><span class="linenos"> 657</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Generator-658"><a href="#Generator-658"><span class="linenos"> 658</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-659"><a href="#Generator-659"><span class="linenos"> 659</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-660"><a href="#Generator-660"><span class="linenos"> 660</span></a>
+</span><span id="Generator-661"><a href="#Generator-661"><span class="linenos"> 661</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-662"><a href="#Generator-662"><span class="linenos"> 662</span></a>
+</span><span id="Generator-663"><a href="#Generator-663"><span class="linenos"> 663</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator-664"><a href="#Generator-664"><span class="linenos"> 664</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="Generator-665"><a href="#Generator-665"><span class="linenos"> 665</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-666"><a href="#Generator-666"><span class="linenos"> 666</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-667"><a href="#Generator-667"><span class="linenos"> 667</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-668"><a href="#Generator-668"><span class="linenos"> 668</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-669"><a href="#Generator-669"><span class="linenos"> 669</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-670"><a href="#Generator-670"><span class="linenos"> 670</span></a>
+</span><span id="Generator-671"><a href="#Generator-671"><span class="linenos"> 671</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span>
+</span><span id="Generator-672"><a href="#Generator-672"><span class="linenos"> 672</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-673"><a href="#Generator-673"><span class="linenos"> 673</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">)</span>
+</span><span id="Generator-674"><a href="#Generator-674"><span class="linenos"> 674</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-675"><a href="#Generator-675"><span class="linenos"> 675</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator-676"><a href="#Generator-676"><span class="linenos"> 676</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-677"><a href="#Generator-677"><span class="linenos"> 677</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator-678"><a href="#Generator-678"><span class="linenos"> 678</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-679"><a href="#Generator-679"><span class="linenos"> 679</span></a> <span class="n">cycle</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">)</span>
+</span><span id="Generator-680"><a href="#Generator-680"><span class="linenos"> 680</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-681"><a href="#Generator-681"><span class="linenos"> 681</span></a>
+</span><span id="Generator-682"><a href="#Generator-682"><span class="linenos"> 682</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-683"><a href="#Generator-683"><span class="linenos"> 683</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
+</span><span id="Generator-684"><a href="#Generator-684"><span class="linenos"> 684</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="Generator-685"><a href="#Generator-685"><span class="linenos"> 685</span></a>
+</span><span id="Generator-686"><a href="#Generator-686"><span class="linenos"> 686</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-687"><a href="#Generator-687"><span class="linenos"> 687</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
+</span><span id="Generator-688"><a href="#Generator-688"><span class="linenos"> 688</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-689"><a href="#Generator-689"><span class="linenos"> 689</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-690"><a href="#Generator-690"><span class="linenos"> 690</span></a>
-</span><span id="Generator-691"><a href="#Generator-691"><span class="linenos"> 691</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-692"><a href="#Generator-692"><span class="linenos"> 692</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
-</span><span id="Generator-693"><a href="#Generator-693"><span class="linenos"> 693</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
-</span><span id="Generator-694"><a href="#Generator-694"><span class="linenos"> 694</span></a> <span class="p">):</span>
-</span><span id="Generator-695"><a href="#Generator-695"><span class="linenos"> 695</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-696"><a href="#Generator-696"><span class="linenos"> 696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator-697"><a href="#Generator-697"><span class="linenos"> 697</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator-698"><a href="#Generator-698"><span class="linenos"> 698</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
-</span><span id="Generator-699"><a href="#Generator-699"><span class="linenos"> 699</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
-</span><span id="Generator-700"><a href="#Generator-700"><span class="linenos"> 700</span></a> <span class="p">]</span>
-</span><span id="Generator-701"><a href="#Generator-701"><span class="linenos"> 701</span></a> <span class="p">)</span>
-</span><span id="Generator-702"><a href="#Generator-702"><span class="linenos"> 702</span></a> <span class="p">)</span>
-</span><span id="Generator-703"><a href="#Generator-703"><span class="linenos"> 703</span></a>
-</span><span id="Generator-704"><a href="#Generator-704"><span class="linenos"> 704</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-705"><a href="#Generator-705"><span class="linenos"> 705</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-706"><a href="#Generator-706"><span class="linenos"> 706</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
-</span><span id="Generator-707"><a href="#Generator-707"><span class="linenos"> 707</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-708"><a href="#Generator-708"><span class="linenos"> 708</span></a>
-</span><span id="Generator-709"><a href="#Generator-709"><span class="linenos"> 709</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
-</span><span id="Generator-710"><a href="#Generator-710"><span class="linenos"> 710</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
-</span><span id="Generator-711"><a href="#Generator-711"><span class="linenos"> 711</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-712"><a href="#Generator-712"><span class="linenos"> 712</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator-713"><a href="#Generator-713"><span class="linenos"> 713</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
-</span><span id="Generator-714"><a href="#Generator-714"><span class="linenos"> 714</span></a> <span class="p">),</span>
-</span><span id="Generator-715"><a href="#Generator-715"><span class="linenos"> 715</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-716"><a href="#Generator-716"><span class="linenos"> 716</span></a> <span class="p">)</span>
-</span><span id="Generator-717"><a href="#Generator-717"><span class="linenos"> 717</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-718"><a href="#Generator-718"><span class="linenos"> 718</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-719"><a href="#Generator-719"><span class="linenos"> 719</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-720"><a href="#Generator-720"><span class="linenos"> 720</span></a>
-</span><span id="Generator-721"><a href="#Generator-721"><span class="linenos"> 721</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-722"><a href="#Generator-722"><span class="linenos"> 722</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
-</span><span id="Generator-723"><a href="#Generator-723"><span class="linenos"> 723</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-724"><a href="#Generator-724"><span class="linenos"> 724</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
-</span><span id="Generator-725"><a href="#Generator-725"><span class="linenos"> 725</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-726"><a href="#Generator-726"><span class="linenos"> 726</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-727"><a href="#Generator-727"><span class="linenos"> 727</span></a> <span class="p">)</span>
-</span><span id="Generator-728"><a href="#Generator-728"><span class="linenos"> 728</span></a>
-</span><span id="Generator-729"><a href="#Generator-729"><span class="linenos"> 729</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-730"><a href="#Generator-730"><span class="linenos"> 730</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-731"><a href="#Generator-731"><span class="linenos"> 731</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator-691"><a href="#Generator-691"><span class="linenos"> 691</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator-692"><a href="#Generator-692"><span class="linenos"> 692</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
+</span><span id="Generator-693"><a href="#Generator-693"><span class="linenos"> 693</span></a>
+</span><span id="Generator-694"><a href="#Generator-694"><span class="linenos"> 694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-695"><a href="#Generator-695"><span class="linenos"> 695</span></a>
+</span><span id="Generator-696"><a href="#Generator-696"><span class="linenos"> 696</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-697"><a href="#Generator-697"><span class="linenos"> 697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
+</span><span id="Generator-698"><a href="#Generator-698"><span class="linenos"> 698</span></a>
+</span><span id="Generator-699"><a href="#Generator-699"><span class="linenos"> 699</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-700"><a href="#Generator-700"><span class="linenos"> 700</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-701"><a href="#Generator-701"><span class="linenos"> 701</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-702"><a href="#Generator-702"><span class="linenos"> 702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-703"><a href="#Generator-703"><span class="linenos"> 703</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY&quot;</span>
+</span><span id="Generator-704"><a href="#Generator-704"><span class="linenos"> 704</span></a>
+</span><span id="Generator-705"><a href="#Generator-705"><span class="linenos"> 705</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-706"><a href="#Generator-706"><span class="linenos"> 706</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-707"><a href="#Generator-707"><span class="linenos"> 707</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-708"><a href="#Generator-708"><span class="linenos"> 708</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-709"><a href="#Generator-709"><span class="linenos"> 709</span></a>
+</span><span id="Generator-710"><a href="#Generator-710"><span class="linenos"> 710</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-711"><a href="#Generator-711"><span class="linenos"> 711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-712"><a href="#Generator-712"><span class="linenos"> 712</span></a>
+</span><span id="Generator-713"><a href="#Generator-713"><span class="linenos"> 713</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-714"><a href="#Generator-714"><span class="linenos"> 714</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator-715"><a href="#Generator-715"><span class="linenos"> 715</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="Generator-716"><a href="#Generator-716"><span class="linenos"> 716</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
+</span><span id="Generator-717"><a href="#Generator-717"><span class="linenos"> 717</span></a>
+</span><span id="Generator-718"><a href="#Generator-718"><span class="linenos"> 718</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="Generator-719"><a href="#Generator-719"><span class="linenos"> 719</span></a>
+</span><span id="Generator-720"><a href="#Generator-720"><span class="linenos"> 720</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-721"><a href="#Generator-721"><span class="linenos"> 721</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+</span><span id="Generator-722"><a href="#Generator-722"><span class="linenos"> 722</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
+</span><span id="Generator-723"><a href="#Generator-723"><span class="linenos"> 723</span></a> <span class="p">):</span>
+</span><span id="Generator-724"><a href="#Generator-724"><span class="linenos"> 724</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-725"><a href="#Generator-725"><span class="linenos"> 725</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator-726"><a href="#Generator-726"><span class="linenos"> 726</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator-727"><a href="#Generator-727"><span class="linenos"> 727</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
+</span><span id="Generator-728"><a href="#Generator-728"><span class="linenos"> 728</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
+</span><span id="Generator-729"><a href="#Generator-729"><span class="linenos"> 729</span></a> <span class="p">]</span>
+</span><span id="Generator-730"><a href="#Generator-730"><span class="linenos"> 730</span></a> <span class="p">)</span>
+</span><span id="Generator-731"><a href="#Generator-731"><span class="linenos"> 731</span></a> <span class="p">)</span>
</span><span id="Generator-732"><a href="#Generator-732"><span class="linenos"> 732</span></a>
-</span><span id="Generator-733"><a href="#Generator-733"><span class="linenos"> 733</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-734"><a href="#Generator-734"><span class="linenos"> 734</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-735"><a href="#Generator-735"><span class="linenos"> 735</span></a>
-</span><span id="Generator-736"><a href="#Generator-736"><span class="linenos"> 736</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-737"><a href="#Generator-737"><span class="linenos"> 737</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
-</span><span id="Generator-738"><a href="#Generator-738"><span class="linenos"> 738</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-739"><a href="#Generator-739"><span class="linenos"> 739</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
-</span><span id="Generator-740"><a href="#Generator-740"><span class="linenos"> 740</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-741"><a href="#Generator-741"><span class="linenos"> 741</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-742"><a href="#Generator-742"><span class="linenos"> 742</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-743"><a href="#Generator-743"><span class="linenos"> 743</span></a> <span class="p">)</span>
-</span><span id="Generator-744"><a href="#Generator-744"><span class="linenos"> 744</span></a>
-</span><span id="Generator-745"><a href="#Generator-745"><span class="linenos"> 745</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
-</span><span id="Generator-746"><a href="#Generator-746"><span class="linenos"> 746</span></a>
-</span><span id="Generator-747"><a href="#Generator-747"><span class="linenos"> 747</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-748"><a href="#Generator-748"><span class="linenos"> 748</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
-</span><span id="Generator-749"><a href="#Generator-749"><span class="linenos"> 749</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-750"><a href="#Generator-750"><span class="linenos"> 750</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator-751"><a href="#Generator-751"><span class="linenos"> 751</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
-</span><span id="Generator-752"><a href="#Generator-752"><span class="linenos"> 752</span></a> <span class="p">),</span>
-</span><span id="Generator-753"><a href="#Generator-753"><span class="linenos"> 753</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-754"><a href="#Generator-754"><span class="linenos"> 754</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-755"><a href="#Generator-755"><span class="linenos"> 755</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-733"><a href="#Generator-733"><span class="linenos"> 733</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-734"><a href="#Generator-734"><span class="linenos"> 734</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-735"><a href="#Generator-735"><span class="linenos"> 735</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
+</span><span id="Generator-736"><a href="#Generator-736"><span class="linenos"> 736</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-737"><a href="#Generator-737"><span class="linenos"> 737</span></a>
+</span><span id="Generator-738"><a href="#Generator-738"><span class="linenos"> 738</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
+</span><span id="Generator-739"><a href="#Generator-739"><span class="linenos"> 739</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
+</span><span id="Generator-740"><a href="#Generator-740"><span class="linenos"> 740</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-741"><a href="#Generator-741"><span class="linenos"> 741</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator-742"><a href="#Generator-742"><span class="linenos"> 742</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
+</span><span id="Generator-743"><a href="#Generator-743"><span class="linenos"> 743</span></a> <span class="p">),</span>
+</span><span id="Generator-744"><a href="#Generator-744"><span class="linenos"> 744</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-745"><a href="#Generator-745"><span class="linenos"> 745</span></a> <span class="p">)</span>
+</span><span id="Generator-746"><a href="#Generator-746"><span class="linenos"> 746</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-747"><a href="#Generator-747"><span class="linenos"> 747</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-748"><a href="#Generator-748"><span class="linenos"> 748</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-749"><a href="#Generator-749"><span class="linenos"> 749</span></a>
+</span><span id="Generator-750"><a href="#Generator-750"><span class="linenos"> 750</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-751"><a href="#Generator-751"><span class="linenos"> 751</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
+</span><span id="Generator-752"><a href="#Generator-752"><span class="linenos"> 752</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-753"><a href="#Generator-753"><span class="linenos"> 753</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
+</span><span id="Generator-754"><a href="#Generator-754"><span class="linenos"> 754</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-755"><a href="#Generator-755"><span class="linenos"> 755</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
</span><span id="Generator-756"><a href="#Generator-756"><span class="linenos"> 756</span></a> <span class="p">)</span>
</span><span id="Generator-757"><a href="#Generator-757"><span class="linenos"> 757</span></a>
-</span><span id="Generator-758"><a href="#Generator-758"><span class="linenos"> 758</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-759"><a href="#Generator-759"><span class="linenos"> 759</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-760"><a href="#Generator-760"><span class="linenos"> 760</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-761"><a href="#Generator-761"><span class="linenos"> 761</span></a> <span class="p">)</span>
-</span><span id="Generator-762"><a href="#Generator-762"><span class="linenos"> 762</span></a>
-</span><span id="Generator-763"><a href="#Generator-763"><span class="linenos"> 763</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;clone&quot;</span><span class="p">)</span>
-</span><span id="Generator-764"><a href="#Generator-764"><span class="linenos"> 764</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-765"><a href="#Generator-765"><span class="linenos"> 765</span></a>
-</span><span id="Generator-766"><a href="#Generator-766"><span class="linenos"> 766</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-767"><a href="#Generator-767"><span class="linenos"> 767</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
-</span><span id="Generator-768"><a href="#Generator-768"><span class="linenos"> 768</span></a>
-</span><span id="Generator-769"><a href="#Generator-769"><span class="linenos"> 769</span></a> <span class="k">def</span> <span class="nf">clone_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-770"><a href="#Generator-770"><span class="linenos"> 770</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-771"><a href="#Generator-771"><span class="linenos"> 771</span></a> <span class="n">when</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span><span class="p">)</span>
-</span><span id="Generator-772"><a href="#Generator-772"><span class="linenos"> 772</span></a>
-</span><span id="Generator-773"><a href="#Generator-773"><span class="linenos"> 773</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
-</span><span id="Generator-774"><a href="#Generator-774"><span class="linenos"> 774</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-775"><a href="#Generator-775"><span class="linenos"> 775</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator-776"><a href="#Generator-776"><span class="linenos"> 776</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLONE </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">when</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-777"><a href="#Generator-777"><span class="linenos"> 777</span></a>
-</span><span id="Generator-778"><a href="#Generator-778"><span class="linenos"> 778</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLONE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-779"><a href="#Generator-779"><span class="linenos"> 779</span></a>
-</span><span id="Generator-780"><a href="#Generator-780"><span class="linenos"> 780</span></a> <span class="k">def</span> <span class="nf">describe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-781"><a href="#Generator-781"><span class="linenos"> 781</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-782"><a href="#Generator-782"><span class="linenos"> 782</span></a>
-</span><span id="Generator-783"><a href="#Generator-783"><span class="linenos"> 783</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-784"><a href="#Generator-784"><span class="linenos"> 784</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">)</span>
-</span><span id="Generator-785"><a href="#Generator-785"><span class="linenos"> 785</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Generator-786"><a href="#Generator-786"><span class="linenos"> 786</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-787"><a href="#Generator-787"><span class="linenos"> 787</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-788"><a href="#Generator-788"><span class="linenos"> 788</span></a>
-</span><span id="Generator-789"><a href="#Generator-789"><span class="linenos"> 789</span></a> <span class="k">def</span> <span class="nf">with_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-790"><a href="#Generator-790"><span class="linenos"> 790</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-791"><a href="#Generator-791"><span class="linenos"> 791</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="s2">&quot;RECURSIVE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-792"><a href="#Generator-792"><span class="linenos"> 792</span></a>
-</span><span id="Generator-793"><a href="#Generator-793"><span class="linenos"> 793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-758"><a href="#Generator-758"><span class="linenos"> 758</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-759"><a href="#Generator-759"><span class="linenos"> 759</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-760"><a href="#Generator-760"><span class="linenos"> 760</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator-761"><a href="#Generator-761"><span class="linenos"> 761</span></a>
+</span><span id="Generator-762"><a href="#Generator-762"><span class="linenos"> 762</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-763"><a href="#Generator-763"><span class="linenos"> 763</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-764"><a href="#Generator-764"><span class="linenos"> 764</span></a>
+</span><span id="Generator-765"><a href="#Generator-765"><span class="linenos"> 765</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-766"><a href="#Generator-766"><span class="linenos"> 766</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
+</span><span id="Generator-767"><a href="#Generator-767"><span class="linenos"> 767</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-768"><a href="#Generator-768"><span class="linenos"> 768</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
+</span><span id="Generator-769"><a href="#Generator-769"><span class="linenos"> 769</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-770"><a href="#Generator-770"><span class="linenos"> 770</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-771"><a href="#Generator-771"><span class="linenos"> 771</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-772"><a href="#Generator-772"><span class="linenos"> 772</span></a> <span class="p">)</span>
+</span><span id="Generator-773"><a href="#Generator-773"><span class="linenos"> 773</span></a>
+</span><span id="Generator-774"><a href="#Generator-774"><span class="linenos"> 774</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
+</span><span id="Generator-775"><a href="#Generator-775"><span class="linenos"> 775</span></a>
+</span><span id="Generator-776"><a href="#Generator-776"><span class="linenos"> 776</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-777"><a href="#Generator-777"><span class="linenos"> 777</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
+</span><span id="Generator-778"><a href="#Generator-778"><span class="linenos"> 778</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-779"><a href="#Generator-779"><span class="linenos"> 779</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator-780"><a href="#Generator-780"><span class="linenos"> 780</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
+</span><span id="Generator-781"><a href="#Generator-781"><span class="linenos"> 781</span></a> <span class="p">),</span>
+</span><span id="Generator-782"><a href="#Generator-782"><span class="linenos"> 782</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-783"><a href="#Generator-783"><span class="linenos"> 783</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-784"><a href="#Generator-784"><span class="linenos"> 784</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-785"><a href="#Generator-785"><span class="linenos"> 785</span></a> <span class="p">)</span>
+</span><span id="Generator-786"><a href="#Generator-786"><span class="linenos"> 786</span></a>
+</span><span id="Generator-787"><a href="#Generator-787"><span class="linenos"> 787</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-788"><a href="#Generator-788"><span class="linenos"> 788</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-789"><a href="#Generator-789"><span class="linenos"> 789</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-790"><a href="#Generator-790"><span class="linenos"> 790</span></a> <span class="p">)</span>
+</span><span id="Generator-791"><a href="#Generator-791"><span class="linenos"> 791</span></a>
+</span><span id="Generator-792"><a href="#Generator-792"><span class="linenos"> 792</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;clone&quot;</span><span class="p">)</span>
+</span><span id="Generator-793"><a href="#Generator-793"><span class="linenos"> 793</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-794"><a href="#Generator-794"><span class="linenos"> 794</span></a>
-</span><span id="Generator-795"><a href="#Generator-795"><span class="linenos"> 795</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-796"><a href="#Generator-796"><span class="linenos"> 796</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-797"><a href="#Generator-797"><span class="linenos"> 797</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-798"><a href="#Generator-798"><span class="linenos"> 798</span></a>
-</span><span id="Generator-799"><a href="#Generator-799"><span class="linenos"> 799</span></a> <span class="k">def</span> <span class="nf">tablealias_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-800"><a href="#Generator-800"><span class="linenos"> 800</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-801"><a href="#Generator-801"><span class="linenos"> 801</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-802"><a href="#Generator-802"><span class="linenos"> 802</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-803"><a href="#Generator-803"><span class="linenos"> 803</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-804"><a href="#Generator-804"><span class="linenos"> 804</span></a>
-</span><span id="Generator-805"><a href="#Generator-805"><span class="linenos"> 805</span></a> <span class="k">def</span> <span class="nf">bitstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-806"><a href="#Generator-806"><span class="linenos"> 806</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-807"><a href="#Generator-807"><span class="linenos"> 807</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
-</span><span id="Generator-808"><a href="#Generator-808"><span class="linenos"> 808</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-809"><a href="#Generator-809"><span class="linenos"> 809</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-795"><a href="#Generator-795"><span class="linenos"> 795</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-796"><a href="#Generator-796"><span class="linenos"> 796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
+</span><span id="Generator-797"><a href="#Generator-797"><span class="linenos"> 797</span></a>
+</span><span id="Generator-798"><a href="#Generator-798"><span class="linenos"> 798</span></a> <span class="k">def</span> <span class="nf">clone_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-799"><a href="#Generator-799"><span class="linenos"> 799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-800"><a href="#Generator-800"><span class="linenos"> 800</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-801"><a href="#Generator-801"><span class="linenos"> 801</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">shallow</span><span class="si">}</span><span class="s2">CLONE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-802"><a href="#Generator-802"><span class="linenos"> 802</span></a> <span class="n">when</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span><span class="p">)</span>
+</span><span id="Generator-803"><a href="#Generator-803"><span class="linenos"> 803</span></a>
+</span><span id="Generator-804"><a href="#Generator-804"><span class="linenos"> 804</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
+</span><span id="Generator-805"><a href="#Generator-805"><span class="linenos"> 805</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-806"><a href="#Generator-806"><span class="linenos"> 806</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator-807"><a href="#Generator-807"><span class="linenos"> 807</span></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">when</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-808"><a href="#Generator-808"><span class="linenos"> 808</span></a>
+</span><span id="Generator-809"><a href="#Generator-809"><span class="linenos"> 809</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Generator-810"><a href="#Generator-810"><span class="linenos"> 810</span></a>
-</span><span id="Generator-811"><a href="#Generator-811"><span class="linenos"> 811</span></a> <span class="k">def</span> <span class="nf">hexstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-812"><a href="#Generator-812"><span class="linenos"> 812</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-813"><a href="#Generator-813"><span class="linenos"> 813</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
-</span><span id="Generator-814"><a href="#Generator-814"><span class="linenos"> 814</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-815"><a href="#Generator-815"><span class="linenos"> 815</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-816"><a href="#Generator-816"><span class="linenos"> 816</span></a>
-</span><span id="Generator-817"><a href="#Generator-817"><span class="linenos"> 817</span></a> <span class="k">def</span> <span class="nf">bytestring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-818"><a href="#Generator-818"><span class="linenos"> 818</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-819"><a href="#Generator-819"><span class="linenos"> 819</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
-</span><span id="Generator-820"><a href="#Generator-820"><span class="linenos"> 820</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-821"><a href="#Generator-821"><span class="linenos"> 821</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Generator-822"><a href="#Generator-822"><span class="linenos"> 822</span></a>
-</span><span id="Generator-823"><a href="#Generator-823"><span class="linenos"> 823</span></a> <span class="k">def</span> <span class="nf">rawstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-824"><a href="#Generator-824"><span class="linenos"> 824</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="Generator-825"><a href="#Generator-825"><span class="linenos"> 825</span></a> <span class="k">return</span> <span class="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">string</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-826"><a href="#Generator-826"><span class="linenos"> 826</span></a>
-</span><span id="Generator-827"><a href="#Generator-827"><span class="linenos"> 827</span></a> <span class="k">def</span> <span class="nf">datatypesize_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-828"><a href="#Generator-828"><span class="linenos"> 828</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-829"><a href="#Generator-829"><span class="linenos"> 829</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator-830"><a href="#Generator-830"><span class="linenos"> 830</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-831"><a href="#Generator-831"><span class="linenos"> 831</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-832"><a href="#Generator-832"><span class="linenos"> 832</span></a>
-</span><span id="Generator-833"><a href="#Generator-833"><span class="linenos"> 833</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-834"><a href="#Generator-834"><span class="linenos"> 834</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-835"><a href="#Generator-835"><span class="linenos"> 835</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-836"><a href="#Generator-836"><span class="linenos"> 836</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator-837"><a href="#Generator-837"><span class="linenos"> 837</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
-</span><span id="Generator-838"><a href="#Generator-838"><span class="linenos"> 838</span></a> <span class="k">else</span> <span class="n">type_value</span>
-</span><span id="Generator-839"><a href="#Generator-839"><span class="linenos"> 839</span></a> <span class="p">)</span>
-</span><span id="Generator-840"><a href="#Generator-840"><span class="linenos"> 840</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-841"><a href="#Generator-841"><span class="linenos"> 841</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-842"><a href="#Generator-842"><span class="linenos"> 842</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-843"><a href="#Generator-843"><span class="linenos"> 843</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
-</span><span id="Generator-844"><a href="#Generator-844"><span class="linenos"> 844</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
-</span><span id="Generator-845"><a href="#Generator-845"><span class="linenos"> 845</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-846"><a href="#Generator-846"><span class="linenos"> 846</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-847"><a href="#Generator-847"><span class="linenos"> 847</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="Generator-848"><a href="#Generator-848"><span class="linenos"> 848</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-849"><a href="#Generator-849"><span class="linenos"> 849</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-850"><a href="#Generator-850"><span class="linenos"> 850</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-851"><a href="#Generator-851"><span class="linenos"> 851</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-852"><a href="#Generator-852"><span class="linenos"> 852</span></a>
-</span><span id="Generator-853"><a href="#Generator-853"><span class="linenos"> 853</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-854"><a href="#Generator-854"><span class="linenos"> 854</span></a>
-</span><span id="Generator-855"><a href="#Generator-855"><span class="linenos"> 855</span></a> <span class="k">def</span> <span class="nf">directory_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-856"><a href="#Generator-856"><span class="linenos"> 856</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-857"><a href="#Generator-857"><span class="linenos"> 857</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">)</span>
-</span><span id="Generator-858"><a href="#Generator-858"><span class="linenos"> 858</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-859"><a href="#Generator-859"><span class="linenos"> 859</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-860"><a href="#Generator-860"><span class="linenos"> 860</span></a>
-</span><span id="Generator-861"><a href="#Generator-861"><span class="linenos"> 861</span></a> <span class="k">def</span> <span class="nf">delete_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-862"><a href="#Generator-862"><span class="linenos"> 862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-863"><a href="#Generator-863"><span class="linenos"> 863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-864"><a href="#Generator-864"><span class="linenos"> 864</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-865"><a href="#Generator-865"><span class="linenos"> 865</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-866"><a href="#Generator-866"><span class="linenos"> 866</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-867"><a href="#Generator-867"><span class="linenos"> 867</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-868"><a href="#Generator-868"><span class="linenos"> 868</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator-869"><a href="#Generator-869"><span class="linenos"> 869</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
-</span><span id="Generator-870"><a href="#Generator-870"><span class="linenos"> 870</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-871"><a href="#Generator-871"><span class="linenos"> 871</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator-872"><a href="#Generator-872"><span class="linenos"> 872</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-873"><a href="#Generator-873"><span class="linenos"> 873</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-874"><a href="#Generator-874"><span class="linenos"> 874</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-875"><a href="#Generator-875"><span class="linenos"> 875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-876"><a href="#Generator-876"><span class="linenos"> 876</span></a>
-</span><span id="Generator-877"><a href="#Generator-877"><span class="linenos"> 877</span></a> <span class="k">def</span> <span class="nf">drop_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-878"><a href="#Generator-878"><span class="linenos"> 878</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-879"><a href="#Generator-879"><span class="linenos"> 879</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-880"><a href="#Generator-880"><span class="linenos"> 880</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-881"><a href="#Generator-881"><span class="linenos"> 881</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-882"><a href="#Generator-882"><span class="linenos"> 882</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-883"><a href="#Generator-883"><span class="linenos"> 883</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-884"><a href="#Generator-884"><span class="linenos"> 884</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-885"><a href="#Generator-885"><span class="linenos"> 885</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-886"><a href="#Generator-886"><span class="linenos"> 886</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator-887"><a href="#Generator-887"><span class="linenos"> 887</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-888"><a href="#Generator-888"><span class="linenos"> 888</span></a> <span class="p">)</span>
-</span><span id="Generator-889"><a href="#Generator-889"><span class="linenos"> 889</span></a>
-</span><span id="Generator-890"><a href="#Generator-890"><span class="linenos"> 890</span></a> <span class="k">def</span> <span class="nf">except_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-891"><a href="#Generator-891"><span class="linenos"> 891</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-892"><a href="#Generator-892"><span class="linenos"> 892</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-893"><a href="#Generator-893"><span class="linenos"> 893</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator-894"><a href="#Generator-894"><span class="linenos"> 894</span></a> <span class="p">)</span>
-</span><span id="Generator-895"><a href="#Generator-895"><span class="linenos"> 895</span></a>
-</span><span id="Generator-896"><a href="#Generator-896"><span class="linenos"> 896</span></a> <span class="k">def</span> <span class="nf">except_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-897"><a href="#Generator-897"><span class="linenos"> 897</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-811"><a href="#Generator-811"><span class="linenos"> 811</span></a> <span class="k">def</span> <span class="nf">describe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-812"><a href="#Generator-812"><span class="linenos"> 812</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-813"><a href="#Generator-813"><span class="linenos"> 813</span></a>
+</span><span id="Generator-814"><a href="#Generator-814"><span class="linenos"> 814</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-815"><a href="#Generator-815"><span class="linenos"> 815</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">)</span>
+</span><span id="Generator-816"><a href="#Generator-816"><span class="linenos"> 816</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Generator-817"><a href="#Generator-817"><span class="linenos"> 817</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-818"><a href="#Generator-818"><span class="linenos"> 818</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-819"><a href="#Generator-819"><span class="linenos"> 819</span></a>
+</span><span id="Generator-820"><a href="#Generator-820"><span class="linenos"> 820</span></a> <span class="k">def</span> <span class="nf">with_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-821"><a href="#Generator-821"><span class="linenos"> 821</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-822"><a href="#Generator-822"><span class="linenos"> 822</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="s2">&quot;RECURSIVE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-823"><a href="#Generator-823"><span class="linenos"> 823</span></a>
+</span><span id="Generator-824"><a href="#Generator-824"><span class="linenos"> 824</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-825"><a href="#Generator-825"><span class="linenos"> 825</span></a>
+</span><span id="Generator-826"><a href="#Generator-826"><span class="linenos"> 826</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-827"><a href="#Generator-827"><span class="linenos"> 827</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-828"><a href="#Generator-828"><span class="linenos"> 828</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-829"><a href="#Generator-829"><span class="linenos"> 829</span></a>
+</span><span id="Generator-830"><a href="#Generator-830"><span class="linenos"> 830</span></a> <span class="k">def</span> <span class="nf">tablealias_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-831"><a href="#Generator-831"><span class="linenos"> 831</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-832"><a href="#Generator-832"><span class="linenos"> 832</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-833"><a href="#Generator-833"><span class="linenos"> 833</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-834"><a href="#Generator-834"><span class="linenos"> 834</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-835"><a href="#Generator-835"><span class="linenos"> 835</span></a>
+</span><span id="Generator-836"><a href="#Generator-836"><span class="linenos"> 836</span></a> <span class="k">def</span> <span class="nf">bitstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-837"><a href="#Generator-837"><span class="linenos"> 837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-838"><a href="#Generator-838"><span class="linenos"> 838</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
+</span><span id="Generator-839"><a href="#Generator-839"><span class="linenos"> 839</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-840"><a href="#Generator-840"><span class="linenos"> 840</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-841"><a href="#Generator-841"><span class="linenos"> 841</span></a>
+</span><span id="Generator-842"><a href="#Generator-842"><span class="linenos"> 842</span></a> <span class="k">def</span> <span class="nf">hexstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-843"><a href="#Generator-843"><span class="linenos"> 843</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-844"><a href="#Generator-844"><span class="linenos"> 844</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
+</span><span id="Generator-845"><a href="#Generator-845"><span class="linenos"> 845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-846"><a href="#Generator-846"><span class="linenos"> 846</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-847"><a href="#Generator-847"><span class="linenos"> 847</span></a>
+</span><span id="Generator-848"><a href="#Generator-848"><span class="linenos"> 848</span></a> <span class="k">def</span> <span class="nf">bytestring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-849"><a href="#Generator-849"><span class="linenos"> 849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-850"><a href="#Generator-850"><span class="linenos"> 850</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
+</span><span id="Generator-851"><a href="#Generator-851"><span class="linenos"> 851</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-852"><a href="#Generator-852"><span class="linenos"> 852</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Generator-853"><a href="#Generator-853"><span class="linenos"> 853</span></a>
+</span><span id="Generator-854"><a href="#Generator-854"><span class="linenos"> 854</span></a> <span class="k">def</span> <span class="nf">rawstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-855"><a href="#Generator-855"><span class="linenos"> 855</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="Generator-856"><a href="#Generator-856"><span class="linenos"> 856</span></a> <span class="k">return</span> <span class="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">string</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-857"><a href="#Generator-857"><span class="linenos"> 857</span></a>
+</span><span id="Generator-858"><a href="#Generator-858"><span class="linenos"> 858</span></a> <span class="k">def</span> <span class="nf">datatypeparam_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-859"><a href="#Generator-859"><span class="linenos"> 859</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-860"><a href="#Generator-860"><span class="linenos"> 860</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator-861"><a href="#Generator-861"><span class="linenos"> 861</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-862"><a href="#Generator-862"><span class="linenos"> 862</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-863"><a href="#Generator-863"><span class="linenos"> 863</span></a>
+</span><span id="Generator-864"><a href="#Generator-864"><span class="linenos"> 864</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-865"><a href="#Generator-865"><span class="linenos"> 865</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-866"><a href="#Generator-866"><span class="linenos"> 866</span></a>
+</span><span id="Generator-867"><a href="#Generator-867"><span class="linenos"> 867</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
+</span><span id="Generator-868"><a href="#Generator-868"><span class="linenos"> 868</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-869"><a href="#Generator-869"><span class="linenos"> 869</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-870"><a href="#Generator-870"><span class="linenos"> 870</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-871"><a href="#Generator-871"><span class="linenos"> 871</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator-872"><a href="#Generator-872"><span class="linenos"> 872</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
+</span><span id="Generator-873"><a href="#Generator-873"><span class="linenos"> 873</span></a> <span class="k">else</span> <span class="n">type_value</span>
+</span><span id="Generator-874"><a href="#Generator-874"><span class="linenos"> 874</span></a> <span class="p">)</span>
+</span><span id="Generator-875"><a href="#Generator-875"><span class="linenos"> 875</span></a>
+</span><span id="Generator-876"><a href="#Generator-876"><span class="linenos"> 876</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-877"><a href="#Generator-877"><span class="linenos"> 877</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-878"><a href="#Generator-878"><span class="linenos"> 878</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-879"><a href="#Generator-879"><span class="linenos"> 879</span></a>
+</span><span id="Generator-880"><a href="#Generator-880"><span class="linenos"> 880</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
+</span><span id="Generator-881"><a href="#Generator-881"><span class="linenos"> 881</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
+</span><span id="Generator-882"><a href="#Generator-882"><span class="linenos"> 882</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-883"><a href="#Generator-883"><span class="linenos"> 883</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-884"><a href="#Generator-884"><span class="linenos"> 884</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="Generator-885"><a href="#Generator-885"><span class="linenos"> 885</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-886"><a href="#Generator-886"><span class="linenos"> 886</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-887"><a href="#Generator-887"><span class="linenos"> 887</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="Generator-888"><a href="#Generator-888"><span class="linenos"> 888</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-889"><a href="#Generator-889"><span class="linenos"> 889</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-890"><a href="#Generator-890"><span class="linenos"> 890</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-891"><a href="#Generator-891"><span class="linenos"> 891</span></a>
+</span><span id="Generator-892"><a href="#Generator-892"><span class="linenos"> 892</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-893"><a href="#Generator-893"><span class="linenos"> 893</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-894"><a href="#Generator-894"><span class="linenos"> 894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Generator-895"><a href="#Generator-895"><span class="linenos"> 895</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Generator-896"><a href="#Generator-896"><span class="linenos"> 896</span></a> <span class="p">):</span>
+</span><span id="Generator-897"><a href="#Generator-897"><span class="linenos"> 897</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
</span><span id="Generator-898"><a href="#Generator-898"><span class="linenos"> 898</span></a>
-</span><span id="Generator-899"><a href="#Generator-899"><span class="linenos"> 899</span></a> <span class="k">def</span> <span class="nf">fetch_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-900"><a href="#Generator-900"><span class="linenos"> 900</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;direction&quot;</span><span class="p">)</span>
-</span><span id="Generator-901"><a href="#Generator-901"><span class="linenos"> 901</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="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">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-902"><a href="#Generator-902"><span class="linenos"> 902</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span>
-</span><span id="Generator-903"><a href="#Generator-903"><span class="linenos"> 903</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-904"><a href="#Generator-904"><span class="linenos"> 904</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
-</span><span id="Generator-905"><a href="#Generator-905"><span class="linenos"> 905</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
-</span><span id="Generator-906"><a href="#Generator-906"><span class="linenos"> 906</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
-</span><span id="Generator-907"><a href="#Generator-907"><span class="linenos"> 907</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-908"><a href="#Generator-908"><span class="linenos"> 908</span></a>
-</span><span id="Generator-909"><a href="#Generator-909"><span class="linenos"> 909</span></a> <span class="k">def</span> <span class="nf">filter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-910"><a href="#Generator-910"><span class="linenos"> 910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-911"><a href="#Generator-911"><span class="linenos"> 911</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># where has a leading space</span>
-</span><span id="Generator-912"><a href="#Generator-912"><span class="linenos"> 912</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-913"><a href="#Generator-913"><span class="linenos"> 913</span></a>
-</span><span id="Generator-914"><a href="#Generator-914"><span class="linenos"> 914</span></a> <span class="k">def</span> <span class="nf">hint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-915"><a href="#Generator-915"><span class="linenos"> 915</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
-</span><span id="Generator-916"><a href="#Generator-916"><span class="linenos"> 916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
-</span><span id="Generator-917"><a href="#Generator-917"><span class="linenos"> 917</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-918"><a href="#Generator-918"><span class="linenos"> 918</span></a>
-</span><span id="Generator-919"><a href="#Generator-919"><span class="linenos"> 919</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
-</span><span id="Generator-920"><a href="#Generator-920"><span class="linenos"> 920</span></a>
-</span><span id="Generator-921"><a href="#Generator-921"><span class="linenos"> 921</span></a> <span class="k">def</span> <span class="nf">index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-922"><a href="#Generator-922"><span class="linenos"> 922</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-923"><a href="#Generator-923"><span class="linenos"> 923</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-924"><a href="#Generator-924"><span class="linenos"> 924</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-925"><a href="#Generator-925"><span class="linenos"> 925</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-926"><a href="#Generator-926"><span class="linenos"> 926</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-927"><a href="#Generator-927"><span class="linenos"> 927</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="Generator-928"><a href="#Generator-928"><span class="linenos"> 928</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-929"><a href="#Generator-929"><span class="linenos"> 929</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-930"><a href="#Generator-930"><span class="linenos"> 930</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-931"><a href="#Generator-931"><span class="linenos"> 931</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-932"><a href="#Generator-932"><span class="linenos"> 932</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-933"><a href="#Generator-933"><span class="linenos"> 933</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-934"><a href="#Generator-934"><span class="linenos"> 934</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-935"><a href="#Generator-935"><span class="linenos"> 935</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-936"><a href="#Generator-936"><span class="linenos"> 936</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-937"><a href="#Generator-937"><span class="linenos"> 937</span></a>
-</span><span id="Generator-938"><a href="#Generator-938"><span class="linenos"> 938</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-939"><a href="#Generator-939"><span class="linenos"> 939</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-940"><a href="#Generator-940"><span class="linenos"> 940</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator-941"><a href="#Generator-941"><span class="linenos"> 941</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="Generator-942"><a href="#Generator-942"><span class="linenos"> 942</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">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
-</span><span id="Generator-943"><a href="#Generator-943"><span class="linenos"> 943</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Generator-944"><a href="#Generator-944"><span class="linenos"> 944</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Generator-945"><a href="#Generator-945"><span class="linenos"> 945</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
-</span><span id="Generator-946"><a href="#Generator-946"><span class="linenos"> 946</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
-</span><span id="Generator-947"><a href="#Generator-947"><span class="linenos"> 947</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
-</span><span id="Generator-948"><a href="#Generator-948"><span class="linenos"> 948</span></a> <span class="p">):</span>
-</span><span id="Generator-949"><a href="#Generator-949"><span class="linenos"> 949</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">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-950"><a href="#Generator-950"><span class="linenos"> 950</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-951"><a href="#Generator-951"><span class="linenos"> 951</span></a>
-</span><span id="Generator-952"><a href="#Generator-952"><span class="linenos"> 952</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-953"><a href="#Generator-953"><span class="linenos"> 953</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-954"><a href="#Generator-954"><span class="linenos"> 954</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-955"><a href="#Generator-955"><span class="linenos"> 955</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">)</span>
-</span><span id="Generator-956"><a href="#Generator-956"><span class="linenos"> 956</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-957"><a href="#Generator-957"><span class="linenos"> 957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
-</span><span id="Generator-958"><a href="#Generator-958"><span class="linenos"> 958</span></a>
-</span><span id="Generator-959"><a href="#Generator-959"><span class="linenos"> 959</span></a> <span class="k">def</span> <span class="nf">national_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-960"><a href="#Generator-960"><span class="linenos"> 960</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Generator-961"><a href="#Generator-961"><span class="linenos"> 961</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-962"><a href="#Generator-962"><span class="linenos"> 962</span></a>
-</span><span id="Generator-963"><a href="#Generator-963"><span class="linenos"> 963</span></a> <span class="k">def</span> <span class="nf">partition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-964"><a href="#Generator-964"><span class="linenos"> 964</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-965"><a href="#Generator-965"><span class="linenos"> 965</span></a>
-</span><span id="Generator-966"><a href="#Generator-966"><span class="linenos"> 966</span></a> <span class="k">def</span> <span class="nf">properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-967"><a href="#Generator-967"><span class="linenos"> 967</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-968"><a href="#Generator-968"><span class="linenos"> 968</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-969"><a href="#Generator-969"><span class="linenos"> 969</span></a>
-</span><span id="Generator-970"><a href="#Generator-970"><span class="linenos"> 970</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-971"><a href="#Generator-971"><span class="linenos"> 971</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator-972"><a href="#Generator-972"><span class="linenos"> 972</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
-</span><span id="Generator-973"><a href="#Generator-973"><span class="linenos"> 973</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="Generator-974"><a href="#Generator-974"><span class="linenos"> 974</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
-</span><span id="Generator-975"><a href="#Generator-975"><span class="linenos"> 975</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="Generator-976"><a href="#Generator-976"><span class="linenos"> 976</span></a>
-</span><span id="Generator-977"><a href="#Generator-977"><span class="linenos"> 977</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
-</span><span id="Generator-978"><a href="#Generator-978"><span class="linenos"> 978</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
-</span><span id="Generator-979"><a href="#Generator-979"><span class="linenos"> 979</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
-</span><span id="Generator-980"><a href="#Generator-980"><span class="linenos"> 980</span></a>
-</span><span id="Generator-981"><a href="#Generator-981"><span class="linenos"> 981</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-982"><a href="#Generator-982"><span class="linenos"> 982</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-983"><a href="#Generator-983"><span class="linenos"> 983</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-984"><a href="#Generator-984"><span class="linenos"> 984</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-985"><a href="#Generator-985"><span class="linenos"> 985</span></a>
-</span><span id="Generator-986"><a href="#Generator-986"><span class="linenos"> 986</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
-</span><span id="Generator-987"><a href="#Generator-987"><span class="linenos"> 987</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-988"><a href="#Generator-988"><span class="linenos"> 988</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
-</span><span id="Generator-989"><a href="#Generator-989"><span class="linenos"> 989</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-990"><a href="#Generator-990"><span class="linenos"> 990</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-991"><a href="#Generator-991"><span class="linenos"> 991</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-992"><a href="#Generator-992"><span class="linenos"> 992</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator-993"><a href="#Generator-993"><span class="linenos"> 993</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-994"><a href="#Generator-994"><span class="linenos"> 994</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-995"><a href="#Generator-995"><span class="linenos"> 995</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-996"><a href="#Generator-996"><span class="linenos"> 996</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-997"><a href="#Generator-997"><span class="linenos"> 997</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="Generator-998"><a href="#Generator-998"><span class="linenos"> 998</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-999"><a href="#Generator-999"><span class="linenos"> 999</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1000"><a href="#Generator-1000"><span class="linenos">1000</span></a>
-</span><span id="Generator-1001"><a href="#Generator-1001"><span class="linenos">1001</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1002"><a href="#Generator-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
-</span><span id="Generator-1003"><a href="#Generator-1003"><span class="linenos">1003</span></a>
-</span><span id="Generator-1004"><a href="#Generator-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
-</span><span id="Generator-1005"><a href="#Generator-1005"><span class="linenos">1005</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
-</span><span id="Generator-1006"><a href="#Generator-1006"><span class="linenos">1006</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1007"><a href="#Generator-1007"><span class="linenos">1007</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator-1008"><a href="#Generator-1008"><span class="linenos">1008</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-1009"><a href="#Generator-1009"><span class="linenos">1009</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="Generator-1010"><a href="#Generator-1010"><span class="linenos">1010</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1011"><a href="#Generator-1011"><span class="linenos">1011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1012"><a href="#Generator-1012"><span class="linenos">1012</span></a>
-</span><span id="Generator-1013"><a href="#Generator-1013"><span class="linenos">1013</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
-</span><span id="Generator-1014"><a href="#Generator-1014"><span class="linenos">1014</span></a>
-</span><span id="Generator-1015"><a href="#Generator-1015"><span class="linenos">1015</span></a> <span class="k">def</span> <span class="nf">property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1016"><a href="#Generator-1016"><span class="linenos">1016</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="Generator-1017"><a href="#Generator-1017"><span class="linenos">1017</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
-</span><span id="Generator-1018"><a href="#Generator-1018"><span class="linenos">1018</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">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1019"><a href="#Generator-1019"><span class="linenos">1019</span></a>
-</span><span id="Generator-1020"><a href="#Generator-1020"><span class="linenos">1020</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
-</span><span id="Generator-1021"><a href="#Generator-1021"><span class="linenos">1021</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-1022"><a href="#Generator-1022"><span class="linenos">1022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1023"><a href="#Generator-1023"><span class="linenos">1023</span></a>
-</span><span id="Generator-1024"><a href="#Generator-1024"><span class="linenos">1024</span></a> <span class="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-1025"><a href="#Generator-1025"><span class="linenos">1025</span></a>
-</span><span id="Generator-1026"><a href="#Generator-1026"><span class="linenos">1026</span></a> <span class="k">def</span> <span class="nf">likeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1027"><a href="#Generator-1027"><span class="linenos">1027</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-1028"><a href="#Generator-1028"><span class="linenos">1028</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-1029"><a href="#Generator-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LIKE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1030"><a href="#Generator-1030"><span class="linenos">1030</span></a>
-</span><span id="Generator-1031"><a href="#Generator-1031"><span class="linenos">1031</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1032"><a href="#Generator-1032"><span class="linenos">1032</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1033"><a href="#Generator-1033"><span class="linenos">1033</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1034"><a href="#Generator-1034"><span class="linenos">1034</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1035"><a href="#Generator-1035"><span class="linenos">1035</span></a>
-</span><span id="Generator-1036"><a href="#Generator-1036"><span class="linenos">1036</span></a> <span class="k">def</span> <span class="nf">journalproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1037"><a href="#Generator-1037"><span class="linenos">1037</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1038"><a href="#Generator-1038"><span class="linenos">1038</span></a> <span class="n">local</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span>
-</span><span id="Generator-1039"><a href="#Generator-1039"><span class="linenos">1039</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1040"><a href="#Generator-1040"><span class="linenos">1040</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1041"><a href="#Generator-1041"><span class="linenos">1041</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1042"><a href="#Generator-1042"><span class="linenos">1042</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1043"><a href="#Generator-1043"><span class="linenos">1043</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
-</span><span id="Generator-1044"><a href="#Generator-1044"><span class="linenos">1044</span></a>
-</span><span id="Generator-1045"><a href="#Generator-1045"><span class="linenos">1045</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1046"><a href="#Generator-1046"><span class="linenos">1046</span></a> <span class="n">freespace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1047"><a href="#Generator-1047"><span class="linenos">1047</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1048"><a href="#Generator-1048"><span class="linenos">1048</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-899"><a href="#Generator-899"><span class="linenos"> 899</span></a> <span class="k">return</span> <span class="n">type_sql</span>
+</span><span id="Generator-900"><a href="#Generator-900"><span class="linenos"> 900</span></a>
+</span><span id="Generator-901"><a href="#Generator-901"><span class="linenos"> 901</span></a> <span class="k">def</span> <span class="nf">directory_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-902"><a href="#Generator-902"><span class="linenos"> 902</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-903"><a href="#Generator-903"><span class="linenos"> 903</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">)</span>
+</span><span id="Generator-904"><a href="#Generator-904"><span class="linenos"> 904</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-905"><a href="#Generator-905"><span class="linenos"> 905</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-906"><a href="#Generator-906"><span class="linenos"> 906</span></a>
+</span><span id="Generator-907"><a href="#Generator-907"><span class="linenos"> 907</span></a> <span class="k">def</span> <span class="nf">delete_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-908"><a href="#Generator-908"><span class="linenos"> 908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-909"><a href="#Generator-909"><span class="linenos"> 909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-910"><a href="#Generator-910"><span class="linenos"> 910</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-911"><a href="#Generator-911"><span class="linenos"> 911</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-912"><a href="#Generator-912"><span class="linenos"> 912</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-913"><a href="#Generator-913"><span class="linenos"> 913</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-914"><a href="#Generator-914"><span class="linenos"> 914</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-915"><a href="#Generator-915"><span class="linenos"> 915</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
+</span><span id="Generator-916"><a href="#Generator-916"><span class="linenos"> 916</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-917"><a href="#Generator-917"><span class="linenos"> 917</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator-918"><a href="#Generator-918"><span class="linenos"> 918</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-919"><a href="#Generator-919"><span class="linenos"> 919</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-920"><a href="#Generator-920"><span class="linenos"> 920</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-921"><a href="#Generator-921"><span class="linenos"> 921</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-922"><a href="#Generator-922"><span class="linenos"> 922</span></a>
+</span><span id="Generator-923"><a href="#Generator-923"><span class="linenos"> 923</span></a> <span class="k">def</span> <span class="nf">drop_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-924"><a href="#Generator-924"><span class="linenos"> 924</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-925"><a href="#Generator-925"><span class="linenos"> 925</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-926"><a href="#Generator-926"><span class="linenos"> 926</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-927"><a href="#Generator-927"><span class="linenos"> 927</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-928"><a href="#Generator-928"><span class="linenos"> 928</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-929"><a href="#Generator-929"><span class="linenos"> 929</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-930"><a href="#Generator-930"><span class="linenos"> 930</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-931"><a href="#Generator-931"><span class="linenos"> 931</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-932"><a href="#Generator-932"><span class="linenos"> 932</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator-933"><a href="#Generator-933"><span class="linenos"> 933</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-934"><a href="#Generator-934"><span class="linenos"> 934</span></a> <span class="p">)</span>
+</span><span id="Generator-935"><a href="#Generator-935"><span class="linenos"> 935</span></a>
+</span><span id="Generator-936"><a href="#Generator-936"><span class="linenos"> 936</span></a> <span class="k">def</span> <span class="nf">except_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-937"><a href="#Generator-937"><span class="linenos"> 937</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-938"><a href="#Generator-938"><span class="linenos"> 938</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-939"><a href="#Generator-939"><span class="linenos"> 939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator-940"><a href="#Generator-940"><span class="linenos"> 940</span></a> <span class="p">)</span>
+</span><span id="Generator-941"><a href="#Generator-941"><span class="linenos"> 941</span></a>
+</span><span id="Generator-942"><a href="#Generator-942"><span class="linenos"> 942</span></a> <span class="k">def</span> <span class="nf">except_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-943"><a href="#Generator-943"><span class="linenos"> 943</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-944"><a href="#Generator-944"><span class="linenos"> 944</span></a>
+</span><span id="Generator-945"><a href="#Generator-945"><span class="linenos"> 945</span></a> <span class="k">def</span> <span class="nf">fetch_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-946"><a href="#Generator-946"><span class="linenos"> 946</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;direction&quot;</span><span class="p">)</span>
+</span><span id="Generator-947"><a href="#Generator-947"><span class="linenos"> 947</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="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">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-948"><a href="#Generator-948"><span class="linenos"> 948</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span>
+</span><span id="Generator-949"><a href="#Generator-949"><span class="linenos"> 949</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-950"><a href="#Generator-950"><span class="linenos"> 950</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
+</span><span id="Generator-951"><a href="#Generator-951"><span class="linenos"> 951</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="Generator-952"><a href="#Generator-952"><span class="linenos"> 952</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
+</span><span id="Generator-953"><a href="#Generator-953"><span class="linenos"> 953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-954"><a href="#Generator-954"><span class="linenos"> 954</span></a>
+</span><span id="Generator-955"><a href="#Generator-955"><span class="linenos"> 955</span></a> <span class="k">def</span> <span class="nf">filter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-956"><a href="#Generator-956"><span class="linenos"> 956</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-957"><a href="#Generator-957"><span class="linenos"> 957</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># where has a leading space</span>
+</span><span id="Generator-958"><a href="#Generator-958"><span class="linenos"> 958</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-959"><a href="#Generator-959"><span class="linenos"> 959</span></a>
+</span><span id="Generator-960"><a href="#Generator-960"><span class="linenos"> 960</span></a> <span class="k">def</span> <span class="nf">hint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-961"><a href="#Generator-961"><span class="linenos"> 961</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
+</span><span id="Generator-962"><a href="#Generator-962"><span class="linenos"> 962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
+</span><span id="Generator-963"><a href="#Generator-963"><span class="linenos"> 963</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-964"><a href="#Generator-964"><span class="linenos"> 964</span></a>
+</span><span id="Generator-965"><a href="#Generator-965"><span class="linenos"> 965</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
+</span><span id="Generator-966"><a href="#Generator-966"><span class="linenos"> 966</span></a>
+</span><span id="Generator-967"><a href="#Generator-967"><span class="linenos"> 967</span></a> <span class="k">def</span> <span class="nf">index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-968"><a href="#Generator-968"><span class="linenos"> 968</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-969"><a href="#Generator-969"><span class="linenos"> 969</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-970"><a href="#Generator-970"><span class="linenos"> 970</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-971"><a href="#Generator-971"><span class="linenos"> 971</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-972"><a href="#Generator-972"><span class="linenos"> 972</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-973"><a href="#Generator-973"><span class="linenos"> 973</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="Generator-974"><a href="#Generator-974"><span class="linenos"> 974</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-975"><a href="#Generator-975"><span class="linenos"> 975</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-976"><a href="#Generator-976"><span class="linenos"> 976</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-977"><a href="#Generator-977"><span class="linenos"> 977</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-978"><a href="#Generator-978"><span class="linenos"> 978</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-979"><a href="#Generator-979"><span class="linenos"> 979</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-980"><a href="#Generator-980"><span class="linenos"> 980</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-981"><a href="#Generator-981"><span class="linenos"> 981</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-982"><a href="#Generator-982"><span class="linenos"> 982</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-983"><a href="#Generator-983"><span class="linenos"> 983</span></a>
+</span><span id="Generator-984"><a href="#Generator-984"><span class="linenos"> 984</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-985"><a href="#Generator-985"><span class="linenos"> 985</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-986"><a href="#Generator-986"><span class="linenos"> 986</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator-987"><a href="#Generator-987"><span class="linenos"> 987</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="Generator-988"><a href="#Generator-988"><span class="linenos"> 988</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">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
+</span><span id="Generator-989"><a href="#Generator-989"><span class="linenos"> 989</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Generator-990"><a href="#Generator-990"><span class="linenos"> 990</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Generator-991"><a href="#Generator-991"><span class="linenos"> 991</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
+</span><span id="Generator-992"><a href="#Generator-992"><span class="linenos"> 992</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
+</span><span id="Generator-993"><a href="#Generator-993"><span class="linenos"> 993</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
+</span><span id="Generator-994"><a href="#Generator-994"><span class="linenos"> 994</span></a> <span class="p">):</span>
+</span><span id="Generator-995"><a href="#Generator-995"><span class="linenos"> 995</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">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-996"><a href="#Generator-996"><span class="linenos"> 996</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Generator-997"><a href="#Generator-997"><span class="linenos"> 997</span></a>
+</span><span id="Generator-998"><a href="#Generator-998"><span class="linenos"> 998</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-999"><a href="#Generator-999"><span class="linenos"> 999</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-1000"><a href="#Generator-1000"><span class="linenos">1000</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-1001"><a href="#Generator-1001"><span class="linenos">1001</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">)</span>
+</span><span id="Generator-1002"><a href="#Generator-1002"><span class="linenos">1002</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1003"><a href="#Generator-1003"><span class="linenos">1003</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
+</span><span id="Generator-1004"><a href="#Generator-1004"><span class="linenos">1004</span></a>
+</span><span id="Generator-1005"><a href="#Generator-1005"><span class="linenos">1005</span></a> <span class="k">def</span> <span class="nf">national_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1006"><a href="#Generator-1006"><span class="linenos">1006</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Generator-1007"><a href="#Generator-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1008"><a href="#Generator-1008"><span class="linenos">1008</span></a>
+</span><span id="Generator-1009"><a href="#Generator-1009"><span class="linenos">1009</span></a> <span class="k">def</span> <span class="nf">partition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1010"><a href="#Generator-1010"><span class="linenos">1010</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1011"><a href="#Generator-1011"><span class="linenos">1011</span></a>
+</span><span id="Generator-1012"><a href="#Generator-1012"><span class="linenos">1012</span></a> <span class="k">def</span> <span class="nf">properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1013"><a href="#Generator-1013"><span class="linenos">1013</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1014"><a href="#Generator-1014"><span class="linenos">1014</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1015"><a href="#Generator-1015"><span class="linenos">1015</span></a>
+</span><span id="Generator-1016"><a href="#Generator-1016"><span class="linenos">1016</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1017"><a href="#Generator-1017"><span class="linenos">1017</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator-1018"><a href="#Generator-1018"><span class="linenos">1018</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
+</span><span id="Generator-1019"><a href="#Generator-1019"><span class="linenos">1019</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="Generator-1020"><a href="#Generator-1020"><span class="linenos">1020</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
+</span><span id="Generator-1021"><a href="#Generator-1021"><span class="linenos">1021</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="Generator-1022"><a href="#Generator-1022"><span class="linenos">1022</span></a>
+</span><span id="Generator-1023"><a href="#Generator-1023"><span class="linenos">1023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
+</span><span id="Generator-1024"><a href="#Generator-1024"><span class="linenos">1024</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
+</span><span id="Generator-1025"><a href="#Generator-1025"><span class="linenos">1025</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+</span><span id="Generator-1026"><a href="#Generator-1026"><span class="linenos">1026</span></a>
+</span><span id="Generator-1027"><a href="#Generator-1027"><span class="linenos">1027</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1028"><a href="#Generator-1028"><span class="linenos">1028</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1029"><a href="#Generator-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-1030"><a href="#Generator-1030"><span class="linenos">1030</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1031"><a href="#Generator-1031"><span class="linenos">1031</span></a>
+</span><span id="Generator-1032"><a href="#Generator-1032"><span class="linenos">1032</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
+</span><span id="Generator-1033"><a href="#Generator-1033"><span class="linenos">1033</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-1034"><a href="#Generator-1034"><span class="linenos">1034</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
+</span><span id="Generator-1035"><a href="#Generator-1035"><span class="linenos">1035</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-1036"><a href="#Generator-1036"><span class="linenos">1036</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-1037"><a href="#Generator-1037"><span class="linenos">1037</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1038"><a href="#Generator-1038"><span class="linenos">1038</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-1039"><a href="#Generator-1039"><span class="linenos">1039</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1040"><a href="#Generator-1040"><span class="linenos">1040</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1041"><a href="#Generator-1041"><span class="linenos">1041</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-1042"><a href="#Generator-1042"><span class="linenos">1042</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1043"><a href="#Generator-1043"><span class="linenos">1043</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="Generator-1044"><a href="#Generator-1044"><span class="linenos">1044</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1045"><a href="#Generator-1045"><span class="linenos">1045</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1046"><a href="#Generator-1046"><span class="linenos">1046</span></a>
+</span><span id="Generator-1047"><a href="#Generator-1047"><span class="linenos">1047</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1048"><a href="#Generator-1048"><span class="linenos">1048</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
</span><span id="Generator-1049"><a href="#Generator-1049"><span class="linenos">1049</span></a>
-</span><span id="Generator-1050"><a href="#Generator-1050"><span class="linenos">1050</span></a> <span class="k">def</span> <span class="nf">checksumproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1051"><a href="#Generator-1051"><span class="linenos">1051</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator-1052"><a href="#Generator-1052"><span class="linenos">1052</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator-1053"><a href="#Generator-1053"><span class="linenos">1053</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
-</span><span id="Generator-1054"><a href="#Generator-1054"><span class="linenos">1054</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
-</span><span id="Generator-1055"><a href="#Generator-1055"><span class="linenos">1055</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1056"><a href="#Generator-1056"><span class="linenos">1056</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
-</span><span id="Generator-1057"><a href="#Generator-1057"><span class="linenos">1057</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1050"><a href="#Generator-1050"><span class="linenos">1050</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
+</span><span id="Generator-1051"><a href="#Generator-1051"><span class="linenos">1051</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Generator-1052"><a href="#Generator-1052"><span class="linenos">1052</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1053"><a href="#Generator-1053"><span class="linenos">1053</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator-1054"><a href="#Generator-1054"><span class="linenos">1054</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-1055"><a href="#Generator-1055"><span class="linenos">1055</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="Generator-1056"><a href="#Generator-1056"><span class="linenos">1056</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1057"><a href="#Generator-1057"><span class="linenos">1057</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Generator-1058"><a href="#Generator-1058"><span class="linenos">1058</span></a>
-</span><span id="Generator-1059"><a href="#Generator-1059"><span class="linenos">1059</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1060"><a href="#Generator-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
-</span><span id="Generator-1061"><a href="#Generator-1061"><span class="linenos">1061</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator-1062"><a href="#Generator-1062"><span class="linenos">1062</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator-1063"><a href="#Generator-1063"><span class="linenos">1063</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator-1064"><a href="#Generator-1064"><span class="linenos">1064</span></a>
-</span><span id="Generator-1065"><a href="#Generator-1065"><span class="linenos">1065</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1066"><a href="#Generator-1066"><span class="linenos">1066</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1067"><a href="#Generator-1067"><span class="linenos">1067</span></a>
-</span><span id="Generator-1068"><a href="#Generator-1068"><span class="linenos">1068</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1069"><a href="#Generator-1069"><span class="linenos">1069</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
-</span><span id="Generator-1070"><a href="#Generator-1070"><span class="linenos">1070</span></a> <span class="n">minimum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minimum&quot;</span><span class="p">)</span>
-</span><span id="Generator-1071"><a href="#Generator-1071"><span class="linenos">1071</span></a> <span class="n">maximum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maximum&quot;</span><span class="p">)</span>
-</span><span id="Generator-1072"><a href="#Generator-1072"><span class="linenos">1072</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
-</span><span id="Generator-1073"><a href="#Generator-1073"><span class="linenos">1073</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1074"><a href="#Generator-1074"><span class="linenos">1074</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator-1075"><a href="#Generator-1075"><span class="linenos">1075</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
-</span><span id="Generator-1076"><a href="#Generator-1076"><span class="linenos">1076</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
-</span><span id="Generator-1077"><a href="#Generator-1077"><span class="linenos">1077</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1078"><a href="#Generator-1078"><span class="linenos">1078</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
-</span><span id="Generator-1079"><a href="#Generator-1079"><span class="linenos">1079</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
-</span><span id="Generator-1080"><a href="#Generator-1080"><span class="linenos">1080</span></a> <span class="n">units</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;units&quot;</span><span class="p">)</span>
-</span><span id="Generator-1081"><a href="#Generator-1081"><span class="linenos">1081</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1082"><a href="#Generator-1082"><span class="linenos">1082</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1083"><a href="#Generator-1083"><span class="linenos">1083</span></a>
-</span><span id="Generator-1084"><a href="#Generator-1084"><span class="linenos">1084</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1085"><a href="#Generator-1085"><span class="linenos">1085</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;autotemp&quot;</span><span class="p">)</span>
-</span><span id="Generator-1086"><a href="#Generator-1086"><span class="linenos">1086</span></a> <span class="n">always</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;always&quot;</span><span class="p">)</span>
-</span><span id="Generator-1087"><a href="#Generator-1087"><span class="linenos">1087</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
-</span><span id="Generator-1088"><a href="#Generator-1088"><span class="linenos">1088</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;manual&quot;</span><span class="p">)</span>
-</span><span id="Generator-1089"><a href="#Generator-1089"><span class="linenos">1089</span></a> <span class="n">never</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;never&quot;</span><span class="p">)</span>
+</span><span id="Generator-1059"><a href="#Generator-1059"><span class="linenos">1059</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
+</span><span id="Generator-1060"><a href="#Generator-1060"><span class="linenos">1060</span></a>
+</span><span id="Generator-1061"><a href="#Generator-1061"><span class="linenos">1061</span></a> <span class="k">def</span> <span class="nf">property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1062"><a href="#Generator-1062"><span class="linenos">1062</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="Generator-1063"><a href="#Generator-1063"><span class="linenos">1063</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
+</span><span id="Generator-1064"><a href="#Generator-1064"><span class="linenos">1064</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">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1065"><a href="#Generator-1065"><span class="linenos">1065</span></a>
+</span><span id="Generator-1066"><a href="#Generator-1066"><span class="linenos">1066</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
+</span><span id="Generator-1067"><a href="#Generator-1067"><span class="linenos">1067</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-1068"><a href="#Generator-1068"><span class="linenos">1068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1069"><a href="#Generator-1069"><span class="linenos">1069</span></a>
+</span><span id="Generator-1070"><a href="#Generator-1070"><span class="linenos">1070</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-1071"><a href="#Generator-1071"><span class="linenos">1071</span></a>
+</span><span id="Generator-1072"><a href="#Generator-1072"><span class="linenos">1072</span></a> <span class="k">def</span> <span class="nf">likeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1073"><a href="#Generator-1073"><span class="linenos">1073</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-1074"><a href="#Generator-1074"><span class="linenos">1074</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-1075"><a href="#Generator-1075"><span class="linenos">1075</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LIKE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1076"><a href="#Generator-1076"><span class="linenos">1076</span></a>
+</span><span id="Generator-1077"><a href="#Generator-1077"><span class="linenos">1077</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1078"><a href="#Generator-1078"><span class="linenos">1078</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1079"><a href="#Generator-1079"><span class="linenos">1079</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1080"><a href="#Generator-1080"><span class="linenos">1080</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1081"><a href="#Generator-1081"><span class="linenos">1081</span></a>
+</span><span id="Generator-1082"><a href="#Generator-1082"><span class="linenos">1082</span></a> <span class="k">def</span> <span class="nf">journalproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1083"><a href="#Generator-1083"><span class="linenos">1083</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1084"><a href="#Generator-1084"><span class="linenos">1084</span></a> <span class="n">local</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span>
+</span><span id="Generator-1085"><a href="#Generator-1085"><span class="linenos">1085</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1086"><a href="#Generator-1086"><span class="linenos">1086</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1087"><a href="#Generator-1087"><span class="linenos">1087</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1088"><a href="#Generator-1088"><span class="linenos">1088</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1089"><a href="#Generator-1089"><span class="linenos">1089</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
</span><span id="Generator-1090"><a href="#Generator-1090"><span class="linenos">1090</span></a>
-</span><span id="Generator-1091"><a href="#Generator-1091"><span class="linenos">1091</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1092"><a href="#Generator-1092"><span class="linenos">1092</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1093"><a href="#Generator-1093"><span class="linenos">1093</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
-</span><span id="Generator-1094"><a href="#Generator-1094"><span class="linenos">1094</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
-</span><span id="Generator-1095"><a href="#Generator-1095"><span class="linenos">1095</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1096"><a href="#Generator-1096"><span class="linenos">1096</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator-1097"><a href="#Generator-1097"><span class="linenos">1097</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
-</span><span id="Generator-1098"><a href="#Generator-1098"><span class="linenos">1098</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
-</span><span id="Generator-1099"><a href="#Generator-1099"><span class="linenos">1099</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
-</span><span id="Generator-1100"><a href="#Generator-1100"><span class="linenos">1100</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
-</span><span id="Generator-1101"><a href="#Generator-1101"><span class="linenos">1101</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1102"><a href="#Generator-1102"><span class="linenos">1102</span></a>
-</span><span id="Generator-1103"><a href="#Generator-1103"><span class="linenos">1103</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1104"><a href="#Generator-1104"><span class="linenos">1104</span></a> <span class="n">no</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span>
-</span><span id="Generator-1105"><a href="#Generator-1105"><span class="linenos">1105</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1106"><a href="#Generator-1106"><span class="linenos">1106</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;concurrent&quot;</span><span class="p">)</span>
-</span><span id="Generator-1107"><a href="#Generator-1107"><span class="linenos">1107</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1108"><a href="#Generator-1108"><span class="linenos">1108</span></a>
-</span><span id="Generator-1109"><a href="#Generator-1109"><span class="linenos">1109</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1110"><a href="#Generator-1110"><span class="linenos">1110</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
-</span><span id="Generator-1111"><a href="#Generator-1111"><span class="linenos">1111</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
-</span><span id="Generator-1112"><a href="#Generator-1112"><span class="linenos">1112</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_insert&quot;</span><span class="p">):</span>
-</span><span id="Generator-1113"><a href="#Generator-1113"><span class="linenos">1113</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
-</span><span id="Generator-1114"><a href="#Generator-1114"><span class="linenos">1114</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_none&quot;</span><span class="p">):</span>
-</span><span id="Generator-1115"><a href="#Generator-1115"><span class="linenos">1115</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
-</span><span id="Generator-1116"><a href="#Generator-1116"><span class="linenos">1116</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1117"><a href="#Generator-1117"><span class="linenos">1117</span></a>
-</span><span id="Generator-1118"><a href="#Generator-1118"><span class="linenos">1118</span></a> <span class="k">def</span> <span class="nf">lockingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1119"><a href="#Generator-1119"><span class="linenos">1119</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-1120"><a href="#Generator-1120"><span class="linenos">1120</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1121"><a href="#Generator-1121"><span class="linenos">1121</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_or_in&quot;</span><span class="p">)</span>
-</span><span id="Generator-1122"><a href="#Generator-1122"><span class="linenos">1122</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lock_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-1123"><a href="#Generator-1123"><span class="linenos">1123</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1124"><a href="#Generator-1124"><span class="linenos">1124</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1125"><a href="#Generator-1125"><span class="linenos">1125</span></a>
-</span><span id="Generator-1126"><a href="#Generator-1126"><span class="linenos">1126</span></a> <span class="k">def</span> <span class="nf">withdataproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1127"><a href="#Generator-1127"><span class="linenos">1127</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
-</span><span id="Generator-1128"><a href="#Generator-1128"><span class="linenos">1128</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;statistics&quot;</span><span class="p">)</span>
-</span><span id="Generator-1129"><a href="#Generator-1129"><span class="linenos">1129</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1130"><a href="#Generator-1130"><span class="linenos">1130</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1131"><a href="#Generator-1131"><span class="linenos">1131</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
-</span><span id="Generator-1132"><a href="#Generator-1132"><span class="linenos">1132</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1133"><a href="#Generator-1133"><span class="linenos">1133</span></a>
-</span><span id="Generator-1134"><a href="#Generator-1134"><span class="linenos">1134</span></a> <span class="k">def</span> <span class="nf">insert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1135"><a href="#Generator-1135"><span class="linenos">1135</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span>
+</span><span id="Generator-1091"><a href="#Generator-1091"><span class="linenos">1091</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1092"><a href="#Generator-1092"><span class="linenos">1092</span></a> <span class="n">freespace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1093"><a href="#Generator-1093"><span class="linenos">1093</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1094"><a href="#Generator-1094"><span class="linenos">1094</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1095"><a href="#Generator-1095"><span class="linenos">1095</span></a>
+</span><span id="Generator-1096"><a href="#Generator-1096"><span class="linenos">1096</span></a> <span class="k">def</span> <span class="nf">checksumproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1097"><a href="#Generator-1097"><span class="linenos">1097</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator-1098"><a href="#Generator-1098"><span class="linenos">1098</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator-1099"><a href="#Generator-1099"><span class="linenos">1099</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
+</span><span id="Generator-1100"><a href="#Generator-1100"><span class="linenos">1100</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="Generator-1101"><a href="#Generator-1101"><span class="linenos">1101</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1102"><a href="#Generator-1102"><span class="linenos">1102</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
+</span><span id="Generator-1103"><a href="#Generator-1103"><span class="linenos">1103</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1104"><a href="#Generator-1104"><span class="linenos">1104</span></a>
+</span><span id="Generator-1105"><a href="#Generator-1105"><span class="linenos">1105</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1106"><a href="#Generator-1106"><span class="linenos">1106</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
+</span><span id="Generator-1107"><a href="#Generator-1107"><span class="linenos">1107</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator-1108"><a href="#Generator-1108"><span class="linenos">1108</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator-1109"><a href="#Generator-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator-1110"><a href="#Generator-1110"><span class="linenos">1110</span></a>
+</span><span id="Generator-1111"><a href="#Generator-1111"><span class="linenos">1111</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1112"><a href="#Generator-1112"><span class="linenos">1112</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1113"><a href="#Generator-1113"><span class="linenos">1113</span></a>
+</span><span id="Generator-1114"><a href="#Generator-1114"><span class="linenos">1114</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1115"><a href="#Generator-1115"><span class="linenos">1115</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
+</span><span id="Generator-1116"><a href="#Generator-1116"><span class="linenos">1116</span></a> <span class="n">minimum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minimum&quot;</span><span class="p">)</span>
+</span><span id="Generator-1117"><a href="#Generator-1117"><span class="linenos">1117</span></a> <span class="n">maximum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maximum&quot;</span><span class="p">)</span>
+</span><span id="Generator-1118"><a href="#Generator-1118"><span class="linenos">1118</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
+</span><span id="Generator-1119"><a href="#Generator-1119"><span class="linenos">1119</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-1120"><a href="#Generator-1120"><span class="linenos">1120</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator-1121"><a href="#Generator-1121"><span class="linenos">1121</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
+</span><span id="Generator-1122"><a href="#Generator-1122"><span class="linenos">1122</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&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">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
+</span><span id="Generator-1125"><a href="#Generator-1125"><span class="linenos">1125</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
+</span><span id="Generator-1126"><a href="#Generator-1126"><span class="linenos">1126</span></a> <span class="n">units</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;units&quot;</span><span class="p">)</span>
+</span><span id="Generator-1127"><a href="#Generator-1127"><span class="linenos">1127</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1128"><a href="#Generator-1128"><span class="linenos">1128</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1129"><a href="#Generator-1129"><span class="linenos">1129</span></a>
+</span><span id="Generator-1130"><a href="#Generator-1130"><span class="linenos">1130</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1131"><a href="#Generator-1131"><span class="linenos">1131</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;autotemp&quot;</span><span class="p">)</span>
+</span><span id="Generator-1132"><a href="#Generator-1132"><span class="linenos">1132</span></a> <span class="n">always</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;always&quot;</span><span class="p">)</span>
+</span><span id="Generator-1133"><a href="#Generator-1133"><span class="linenos">1133</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
+</span><span id="Generator-1134"><a href="#Generator-1134"><span class="linenos">1134</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;manual&quot;</span><span class="p">)</span>
+</span><span id="Generator-1135"><a href="#Generator-1135"><span class="linenos">1135</span></a> <span class="n">never</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;never&quot;</span><span class="p">)</span>
</span><span id="Generator-1136"><a href="#Generator-1136"><span class="linenos">1136</span></a>
-</span><span id="Generator-1137"><a href="#Generator-1137"><span class="linenos">1137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
-</span><span id="Generator-1138"><a href="#Generator-1138"><span class="linenos">1138</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator-1139"><a href="#Generator-1139"><span class="linenos">1139</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1140"><a href="#Generator-1140"><span class="linenos">1140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE TABLE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator-1141"><a href="#Generator-1141"><span class="linenos">1141</span></a>
-</span><span id="Generator-1142"><a href="#Generator-1142"><span class="linenos">1142</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;alternative&quot;</span><span class="p">)</span>
-</span><span id="Generator-1143"><a href="#Generator-1143"><span class="linenos">1143</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1144"><a href="#Generator-1144"><span class="linenos">1144</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1145"><a href="#Generator-1145"><span class="linenos">1145</span></a>
-</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1147"><a href="#Generator-1147"><span class="linenos">1147</span></a>
-</span><span id="Generator-1148"><a href="#Generator-1148"><span class="linenos">1148</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-1149"><a href="#Generator-1149"><span class="linenos">1149</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1150"><a href="#Generator-1150"><span class="linenos">1150</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1151"><a href="#Generator-1151"><span class="linenos">1151</span></a> <span class="p">)</span>
-</span><span id="Generator-1152"><a href="#Generator-1152"><span class="linenos">1152</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-1153"><a href="#Generator-1153"><span class="linenos">1153</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1154"><a href="#Generator-1154"><span class="linenos">1154</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1155"><a href="#Generator-1155"><span class="linenos">1155</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;conflict&quot;</span><span class="p">)</span>
-</span><span id="Generator-1156"><a href="#Generator-1156"><span class="linenos">1156</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator-1159"><a href="#Generator-1159"><span class="linenos">1159</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1160"><a href="#Generator-1160"><span class="linenos">1160</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1161"><a href="#Generator-1161"><span class="linenos">1161</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1162"><a href="#Generator-1162"><span class="linenos">1162</span></a>
-</span><span id="Generator-1163"><a href="#Generator-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;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1164"><a href="#Generator-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="Generator-1165"><a href="#Generator-1165"><span class="linenos">1165</span></a>
-</span><span id="Generator-1166"><a href="#Generator-1166"><span class="linenos">1166</span></a> <span class="k">def</span> <span class="nf">intersect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-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><span id="Generator-1168"><a href="#Generator-1168"><span class="linenos">1168</span></a> <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="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator-1170"><a href="#Generator-1170"><span class="linenos">1170</span></a> <span class="p">)</span>
+</span><span id="Generator-1137"><a href="#Generator-1137"><span class="linenos">1137</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1138"><a href="#Generator-1138"><span class="linenos">1138</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1139"><a href="#Generator-1139"><span class="linenos">1139</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
+</span><span id="Generator-1140"><a href="#Generator-1140"><span class="linenos">1140</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
+</span><span id="Generator-1141"><a href="#Generator-1141"><span class="linenos">1141</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-1142"><a href="#Generator-1142"><span class="linenos">1142</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator-1143"><a href="#Generator-1143"><span class="linenos">1143</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
+</span><span id="Generator-1144"><a href="#Generator-1144"><span class="linenos">1144</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
+</span><span id="Generator-1145"><a href="#Generator-1145"><span class="linenos">1145</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
+</span><span id="Generator-1146"><a href="#Generator-1146"><span class="linenos">1146</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
+</span><span id="Generator-1147"><a href="#Generator-1147"><span class="linenos">1147</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1148"><a href="#Generator-1148"><span class="linenos">1148</span></a>
+</span><span id="Generator-1149"><a href="#Generator-1149"><span class="linenos">1149</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1150"><a href="#Generator-1150"><span class="linenos">1150</span></a> <span class="n">no</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span>
+</span><span id="Generator-1151"><a href="#Generator-1151"><span class="linenos">1151</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1152"><a href="#Generator-1152"><span class="linenos">1152</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;concurrent&quot;</span><span class="p">)</span>
+</span><span id="Generator-1153"><a href="#Generator-1153"><span class="linenos">1153</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-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="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1156"><a href="#Generator-1156"><span class="linenos">1156</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
+</span><span id="Generator-1157"><a href="#Generator-1157"><span class="linenos">1157</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
+</span><span id="Generator-1158"><a href="#Generator-1158"><span class="linenos">1158</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_insert&quot;</span><span class="p">):</span>
+</span><span id="Generator-1159"><a href="#Generator-1159"><span class="linenos">1159</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
+</span><span id="Generator-1160"><a href="#Generator-1160"><span class="linenos">1160</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_none&quot;</span><span class="p">):</span>
+</span><span id="Generator-1161"><a href="#Generator-1161"><span class="linenos">1161</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
+</span><span id="Generator-1162"><a href="#Generator-1162"><span class="linenos">1162</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1163"><a href="#Generator-1163"><span class="linenos">1163</span></a>
+</span><span id="Generator-1164"><a href="#Generator-1164"><span class="linenos">1164</span></a> <span class="k">def</span> <span class="nf">lockingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1165"><a href="#Generator-1165"><span class="linenos">1165</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-1166"><a href="#Generator-1166"><span class="linenos">1166</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1167"><a href="#Generator-1167"><span class="linenos">1167</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_or_in&quot;</span><span class="p">)</span>
+</span><span id="Generator-1168"><a href="#Generator-1168"><span class="linenos">1168</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lock_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-1169"><a href="#Generator-1169"><span class="linenos">1169</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1170"><a href="#Generator-1170"><span class="linenos">1170</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1171"><a href="#Generator-1171"><span class="linenos">1171</span></a>
-</span><span id="Generator-1172"><a href="#Generator-1172"><span class="linenos">1172</span></a> <span class="k">def</span> <span class="nf">intersect_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1173"><a href="#Generator-1173"><span class="linenos">1173</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1174"><a href="#Generator-1174"><span class="linenos">1174</span></a>
-</span><span id="Generator-1175"><a href="#Generator-1175"><span class="linenos">1175</span></a> <span class="k">def</span> <span class="nf">introducer_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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">pseudotype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1179"><a href="#Generator-1179"><span class="linenos">1179</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</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">onconflict_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1182"><a href="#Generator-1182"><span class="linenos">1182</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
-</span><span id="Generator-1183"><a href="#Generator-1183"><span class="linenos">1183</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;constraint&quot;</span><span class="p">)</span>
-</span><span id="Generator-1184"><a href="#Generator-1184"><span class="linenos">1184</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Generator-1185"><a href="#Generator-1185"><span class="linenos">1185</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1186"><a href="#Generator-1186"><span class="linenos">1186</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1187"><a href="#Generator-1187"><span class="linenos">1187</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
-</span><span id="Generator-1188"><a href="#Generator-1188"><span class="linenos">1188</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-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="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1191"><a href="#Generator-1191"><span class="linenos">1191</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1192"><a href="#Generator-1192"><span class="linenos">1192</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1193"><a href="#Generator-1193"><span class="linenos">1193</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1194"><a href="#Generator-1194"><span class="linenos">1194</span></a>
-</span><span id="Generator-1195"><a href="#Generator-1195"><span class="linenos">1195</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1196"><a href="#Generator-1196"><span class="linenos">1196</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1197"><a href="#Generator-1197"><span class="linenos">1197</span></a>
-</span><span id="Generator-1198"><a href="#Generator-1198"><span class="linenos">1198</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1199"><a href="#Generator-1199"><span class="linenos">1199</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;fields&quot;</span><span class="p">)</span>
-</span><span id="Generator-1200"><a href="#Generator-1200"><span class="linenos">1200</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1201"><a href="#Generator-1201"><span class="linenos">1201</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;escaped&quot;</span><span class="p">)</span>
-</span><span id="Generator-1202"><a href="#Generator-1202"><span class="linenos">1202</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1203"><a href="#Generator-1203"><span class="linenos">1203</span></a> <span class="n">items</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;collection_items&quot;</span><span class="p">)</span>
-</span><span id="Generator-1204"><a href="#Generator-1204"><span class="linenos">1204</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1205"><a href="#Generator-1205"><span class="linenos">1205</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
-</span><span id="Generator-1206"><a href="#Generator-1206"><span class="linenos">1206</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1207"><a href="#Generator-1207"><span class="linenos">1207</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lines&quot;</span><span class="p">)</span>
-</span><span id="Generator-1208"><a href="#Generator-1208"><span class="linenos">1208</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1209"><a href="#Generator-1209"><span class="linenos">1209</span></a> <span class="n">null</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;null&quot;</span><span class="p">)</span>
-</span><span id="Generator-1210"><a href="#Generator-1210"><span class="linenos">1210</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1211"><a href="#Generator-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1172"><a href="#Generator-1172"><span class="linenos">1172</span></a> <span class="k">def</span> <span class="nf">withdataproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1173"><a href="#Generator-1173"><span class="linenos">1173</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
+</span><span id="Generator-1174"><a href="#Generator-1174"><span class="linenos">1174</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;statistics&quot;</span><span class="p">)</span>
+</span><span id="Generator-1175"><a href="#Generator-1175"><span class="linenos">1175</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1176"><a href="#Generator-1176"><span class="linenos">1176</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1177"><a href="#Generator-1177"><span class="linenos">1177</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
+</span><span id="Generator-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">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">insert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1181"><a href="#Generator-1181"><span class="linenos">1181</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span>
+</span><span id="Generator-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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
+</span><span id="Generator-1184"><a href="#Generator-1184"><span class="linenos">1184</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="Generator-1185"><a href="#Generator-1185"><span class="linenos">1185</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1186"><a href="#Generator-1186"><span class="linenos">1186</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE TABLE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="Generator-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="n">alternative</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;alternative&quot;</span><span class="p">)</span>
+</span><span id="Generator-1189"><a href="#Generator-1189"><span class="linenos">1189</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1190"><a href="#Generator-1190"><span class="linenos">1190</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-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="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1193"><a href="#Generator-1193"><span class="linenos">1193</span></a>
+</span><span id="Generator-1194"><a href="#Generator-1194"><span class="linenos">1194</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-1195"><a href="#Generator-1195"><span class="linenos">1195</span></a> <span class="n">partition_sql</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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-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 class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-1199"><a href="#Generator-1199"><span class="linenos">1199</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1200"><a href="#Generator-1200"><span class="linenos">1200</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1201"><a href="#Generator-1201"><span class="linenos">1201</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;conflict&quot;</span><span class="p">)</span>
+</span><span id="Generator-1202"><a href="#Generator-1202"><span class="linenos">1202</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1203"><a href="#Generator-1203"><span class="linenos">1203</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-1204"><a href="#Generator-1204"><span class="linenos">1204</span></a>
+</span><span id="Generator-1205"><a href="#Generator-1205"><span class="linenos">1205</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator-1206"><a href="#Generator-1206"><span class="linenos">1206</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1209"><a href="#Generator-1209"><span class="linenos">1209</span></a>
+</span><span id="Generator-1210"><a href="#Generator-1210"><span class="linenos">1210</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1211"><a href="#Generator-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">def</span> <span class="nf">withtablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1214"><a href="#Generator-1214"><span class="linenos">1214</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1215"><a href="#Generator-1215"><span class="linenos">1215</span></a>
-</span><span id="Generator-1216"><a href="#Generator-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">indextablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1217"><a href="#Generator-1217"><span class="linenos">1217</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> INDEX&quot;</span>
-</span><span id="Generator-1218"><a href="#Generator-1218"><span class="linenos">1218</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
-</span><span id="Generator-1219"><a href="#Generator-1219"><span class="linenos">1219</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-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="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1213"><a href="#Generator-1213"><span class="linenos">1213</span></a> <span class="k">def</span> <span class="nf">intersect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1214"><a href="#Generator-1214"><span class="linenos">1214</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-1215"><a href="#Generator-1215"><span class="linenos">1215</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1216"><a href="#Generator-1216"><span class="linenos">1216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator-1217"><a href="#Generator-1217"><span class="linenos">1217</span></a> <span class="p">)</span>
+</span><span id="Generator-1218"><a href="#Generator-1218"><span class="linenos">1218</span></a>
+</span><span id="Generator-1219"><a href="#Generator-1219"><span class="linenos">1219</span></a> <span class="k">def</span> <span class="nf">intersect_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-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;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-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">table_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1223"><a href="#Generator-1223"><span class="linenos">1223</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-1224"><a href="#Generator-1224"><span class="linenos">1224</span></a> <span class="n">part</span>
-</span><span id="Generator-1225"><a href="#Generator-1225"><span class="linenos">1225</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">[</span>
-</span><span id="Generator-1226"><a href="#Generator-1226"><span class="linenos">1226</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;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator-1227"><a href="#Generator-1227"><span class="linenos">1227</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;db&quot;</span><span class="p">),</span>
-</span><span id="Generator-1228"><a href="#Generator-1228"><span class="linenos">1228</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;this&quot;</span><span class="p">),</span>
-</span><span id="Generator-1229"><a href="#Generator-1229"><span class="linenos">1229</span></a> <span class="p">]</span>
-</span><span id="Generator-1230"><a href="#Generator-1230"><span class="linenos">1230</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="Generator-1231"><a href="#Generator-1231"><span class="linenos">1231</span></a> <span class="p">)</span>
-</span><span id="Generator-1232"><a href="#Generator-1232"><span class="linenos">1232</span></a>
-</span><span id="Generator-1233"><a href="#Generator-1233"><span class="linenos">1233</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-1234"><a href="#Generator-1234"><span class="linenos">1234</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-1235"><a href="#Generator-1235"><span class="linenos">1235</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-1236"><a href="#Generator-1236"><span class="linenos">1236</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1237"><a href="#Generator-1237"><span class="linenos">1237</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1238"><a href="#Generator-1238"><span class="linenos">1238</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1239"><a href="#Generator-1239"><span class="linenos">1239</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1240"><a href="#Generator-1240"><span class="linenos">1240</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator-1241"><a href="#Generator-1241"><span class="linenos">1241</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">)</span>
-</span><span id="Generator-1242"><a href="#Generator-1242"><span class="linenos">1242</span></a> <span class="n">system_time</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;system_time&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">system_time</span> <span class="k">else</span> <span class="s2">&quot;&quot;</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">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">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1245"><a href="#Generator-1245"><span class="linenos">1245</span></a>
-</span><span id="Generator-1246"><a href="#Generator-1246"><span class="linenos">1246</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="Generator-1247"><a href="#Generator-1247"><span class="linenos">1247</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-1248"><a href="#Generator-1248"><span class="linenos">1248</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1249"><a href="#Generator-1249"><span class="linenos">1249</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-1250"><a href="#Generator-1250"><span class="linenos">1250</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator-1251"><a href="#Generator-1251"><span class="linenos">1251</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Generator-1252"><a href="#Generator-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">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Generator-1253"><a href="#Generator-1253"><span class="linenos">1253</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-1254"><a href="#Generator-1254"><span class="linenos">1254</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1255"><a href="#Generator-1255"><span class="linenos">1255</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1256"><a href="#Generator-1256"><span class="linenos">1256</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1257"><a href="#Generator-1257"><span class="linenos">1257</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-1258"><a href="#Generator-1258"><span class="linenos">1258</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-1259"><a href="#Generator-1259"><span class="linenos">1259</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-1260"><a href="#Generator-1260"><span class="linenos">1260</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-1261"><a href="#Generator-1261"><span class="linenos">1261</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-1262"><a href="#Generator-1262"><span class="linenos">1262</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-1263"><a href="#Generator-1263"><span class="linenos">1263</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-1264"><a href="#Generator-1264"><span class="linenos">1264</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-1265"><a href="#Generator-1265"><span class="linenos">1265</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-1266"><a href="#Generator-1266"><span class="linenos">1266</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-1267"><a href="#Generator-1267"><span class="linenos">1267</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-1268"><a href="#Generator-1268"><span class="linenos">1268</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-1269"><a href="#Generator-1269"><span class="linenos">1269</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-1270"><a href="#Generator-1270"><span class="linenos">1270</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-1271"><a href="#Generator-1271"><span class="linenos">1271</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-1272"><a href="#Generator-1272"><span class="linenos">1272</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-1273"><a href="#Generator-1273"><span class="linenos">1273</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-1274"><a href="#Generator-1274"><span class="linenos">1274</span></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-1275"><a href="#Generator-1275"><span class="linenos">1275</span></a>
-</span><span id="Generator-1276"><a href="#Generator-1276"><span class="linenos">1276</span></a> <span class="k">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-1277"><a href="#Generator-1277"><span class="linenos">1277</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-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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</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="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1282"><a href="#Generator-1282"><span class="linenos">1282</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1283"><a href="#Generator-1283"><span class="linenos">1283</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1284"><a href="#Generator-1284"><span class="linenos">1284</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="Generator-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;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-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="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-1288"><a href="#Generator-1288"><span class="linenos">1288</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-1289"><a href="#Generator-1289"><span class="linenos">1289</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-1290"><a href="#Generator-1290"><span class="linenos">1290</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-1291"><a href="#Generator-1291"><span class="linenos">1291</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-1292"><a href="#Generator-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">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-1293"><a href="#Generator-1293"><span class="linenos">1293</span></a>
-</span><span id="Generator-1294"><a href="#Generator-1294"><span class="linenos">1294</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-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="bp">self</span><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-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">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-1298"><a href="#Generator-1298"><span class="linenos">1298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1299"><a href="#Generator-1299"><span class="linenos">1299</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-1300"><a href="#Generator-1300"><span class="linenos">1300</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-1301"><a href="#Generator-1301"><span class="linenos">1301</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-1302"><a href="#Generator-1302"><span class="linenos">1302</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-1303"><a href="#Generator-1303"><span class="linenos">1303</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator-1304"><a href="#Generator-1304"><span class="linenos">1304</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator-1305"><a href="#Generator-1305"><span class="linenos">1305</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1306"><a href="#Generator-1306"><span class="linenos">1306</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1307"><a href="#Generator-1307"><span class="linenos">1307</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1308"><a href="#Generator-1308"><span class="linenos">1308</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&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">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-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="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-1312"><a href="#Generator-1312"><span class="linenos">1312</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
-</span><span id="Generator-1313"><a href="#Generator-1313"><span class="linenos">1313</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="Generator-1314"><a href="#Generator-1314"><span class="linenos">1314</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-1315"><a href="#Generator-1315"><span class="linenos">1315</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-1316"><a href="#Generator-1316"><span class="linenos">1316</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-1317"><a href="#Generator-1317"><span class="linenos">1317</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1318"><a href="#Generator-1318"><span class="linenos">1318</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-1319"><a href="#Generator-1319"><span class="linenos">1319</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-1320"><a href="#Generator-1320"><span class="linenos">1320</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator-1321"><a href="#Generator-1321"><span class="linenos">1321</span></a> <span class="p">)</span>
-</span><span id="Generator-1322"><a href="#Generator-1322"><span class="linenos">1322</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-1323"><a href="#Generator-1323"><span class="linenos">1323</span></a>
-</span><span id="Generator-1324"><a href="#Generator-1324"><span class="linenos">1324</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
-</span><span id="Generator-1325"><a href="#Generator-1325"><span class="linenos">1325</span></a> <span class="c1"># Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
-</span><span id="Generator-1326"><a href="#Generator-1326"><span class="linenos">1326</span></a> <span class="c1"># evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
-</span><span id="Generator-1327"><a href="#Generator-1327"><span class="linenos">1327</span></a> <span class="c1"># very slow.</span>
-</span><span id="Generator-1328"><a href="#Generator-1328"><span class="linenos">1328</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator-1329"><a href="#Generator-1329"><span class="linenos">1329</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</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">columns</span>
-</span><span id="Generator-1330"><a href="#Generator-1330"><span class="linenos">1330</span></a>
-</span><span id="Generator-1331"><a href="#Generator-1331"><span class="linenos">1331</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-1332"><a href="#Generator-1332"><span class="linenos">1332</span></a>
-</span><span id="Generator-1333"><a href="#Generator-1333"><span class="linenos">1333</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Generator-1334"><a href="#Generator-1334"><span class="linenos">1334</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator-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">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
-</span><span id="Generator-1337"><a href="#Generator-1337"><span class="linenos">1337</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-1338"><a href="#Generator-1338"><span class="linenos">1338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
-</span><span id="Generator-1339"><a href="#Generator-1339"><span class="linenos">1339</span></a> <span class="p">]</span>
-</span><span id="Generator-1340"><a href="#Generator-1340"><span class="linenos">1340</span></a>
-</span><span id="Generator-1341"><a href="#Generator-1341"><span class="linenos">1341</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
-</span><span id="Generator-1342"><a href="#Generator-1342"><span class="linenos">1342</span></a>
-</span><span id="Generator-1343"><a href="#Generator-1343"><span class="linenos">1343</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Generator-1344"><a href="#Generator-1344"><span class="linenos">1344</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator-1345"><a href="#Generator-1345"><span class="linenos">1345</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="Generator-1346"><a href="#Generator-1346"><span class="linenos">1346</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
-</span><span id="Generator-1347"><a href="#Generator-1347"><span class="linenos">1347</span></a> <span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
-</span><span id="Generator-1348"><a href="#Generator-1348"><span class="linenos">1348</span></a> <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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">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="Generator-1222"><a href="#Generator-1222"><span class="linenos">1222</span></a> <span class="k">def</span> <span class="nf">introducer_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1223"><a href="#Generator-1223"><span class="linenos">1223</span></a> <span class="k">return</span> <span class="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-1224"><a href="#Generator-1224"><span class="linenos">1224</span></a>
+</span><span id="Generator-1225"><a href="#Generator-1225"><span class="linenos">1225</span></a> <span class="k">def</span> <span class="nf">pseudotype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1226"><a href="#Generator-1226"><span class="linenos">1226</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator-1227"><a href="#Generator-1227"><span class="linenos">1227</span></a>
+</span><span id="Generator-1228"><a href="#Generator-1228"><span class="linenos">1228</span></a> <span class="k">def</span> <span class="nf">onconflict_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1229"><a href="#Generator-1229"><span class="linenos">1229</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
+</span><span id="Generator-1230"><a href="#Generator-1230"><span class="linenos">1230</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;constraint&quot;</span><span class="p">)</span>
+</span><span id="Generator-1231"><a href="#Generator-1231"><span class="linenos">1231</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Generator-1232"><a href="#Generator-1232"><span class="linenos">1232</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1233"><a href="#Generator-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">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1234"><a href="#Generator-1234"><span class="linenos">1234</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
+</span><span id="Generator-1235"><a href="#Generator-1235"><span class="linenos">1235</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1236"><a href="#Generator-1236"><span class="linenos">1236</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-1237"><a href="#Generator-1237"><span class="linenos">1237</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1238"><a href="#Generator-1238"><span class="linenos">1238</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1239"><a href="#Generator-1239"><span class="linenos">1239</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1240"><a href="#Generator-1240"><span class="linenos">1240</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1243"><a href="#Generator-1243"><span class="linenos">1243</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1244"><a href="#Generator-1244"><span class="linenos">1244</span></a>
+</span><span id="Generator-1245"><a href="#Generator-1245"><span class="linenos">1245</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1246"><a href="#Generator-1246"><span class="linenos">1246</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;fields&quot;</span><span class="p">)</span>
+</span><span id="Generator-1247"><a href="#Generator-1247"><span class="linenos">1247</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1248"><a href="#Generator-1248"><span class="linenos">1248</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;escaped&quot;</span><span class="p">)</span>
+</span><span id="Generator-1249"><a href="#Generator-1249"><span class="linenos">1249</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1250"><a href="#Generator-1250"><span class="linenos">1250</span></a> <span class="n">items</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;collection_items&quot;</span><span class="p">)</span>
+</span><span id="Generator-1251"><a href="#Generator-1251"><span class="linenos">1251</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1252"><a href="#Generator-1252"><span class="linenos">1252</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
+</span><span id="Generator-1253"><a href="#Generator-1253"><span class="linenos">1253</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1254"><a href="#Generator-1254"><span class="linenos">1254</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lines&quot;</span><span class="p">)</span>
+</span><span id="Generator-1255"><a href="#Generator-1255"><span class="linenos">1255</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1256"><a href="#Generator-1256"><span class="linenos">1256</span></a> <span class="n">null</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;null&quot;</span><span class="p">)</span>
+</span><span id="Generator-1257"><a href="#Generator-1257"><span class="linenos">1257</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1258"><a href="#Generator-1258"><span class="linenos">1258</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1259"><a href="#Generator-1259"><span class="linenos">1259</span></a>
+</span><span id="Generator-1260"><a href="#Generator-1260"><span class="linenos">1260</span></a> <span class="k">def</span> <span class="nf">withtablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1261"><a href="#Generator-1261"><span class="linenos">1261</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1262"><a href="#Generator-1262"><span class="linenos">1262</span></a>
+</span><span id="Generator-1263"><a href="#Generator-1263"><span class="linenos">1263</span></a> <span class="k">def</span> <span class="nf">indextablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1264"><a href="#Generator-1264"><span class="linenos">1264</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> INDEX&quot;</span>
+</span><span id="Generator-1265"><a href="#Generator-1265"><span class="linenos">1265</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
+</span><span id="Generator-1266"><a href="#Generator-1266"><span class="linenos">1266</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1267"><a href="#Generator-1267"><span class="linenos">1267</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1268"><a href="#Generator-1268"><span class="linenos">1268</span></a>
+</span><span id="Generator-1269"><a href="#Generator-1269"><span class="linenos">1269</span></a> <span class="k">def</span> <span class="nf">table_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1270"><a href="#Generator-1270"><span class="linenos">1270</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-1271"><a href="#Generator-1271"><span class="linenos">1271</span></a> <span class="n">part</span>
+</span><span id="Generator-1272"><a href="#Generator-1272"><span class="linenos">1272</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">[</span>
+</span><span id="Generator-1273"><a href="#Generator-1273"><span class="linenos">1273</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;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator-1274"><a href="#Generator-1274"><span class="linenos">1274</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;db&quot;</span><span class="p">),</span>
+</span><span id="Generator-1275"><a href="#Generator-1275"><span class="linenos">1275</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;this&quot;</span><span class="p">),</span>
+</span><span id="Generator-1276"><a href="#Generator-1276"><span class="linenos">1276</span></a> <span class="p">]</span>
+</span><span id="Generator-1277"><a href="#Generator-1277"><span class="linenos">1277</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="Generator-1278"><a href="#Generator-1278"><span class="linenos">1278</span></a> <span class="p">)</span>
+</span><span id="Generator-1279"><a href="#Generator-1279"><span class="linenos">1279</span></a>
+</span><span id="Generator-1280"><a href="#Generator-1280"><span class="linenos">1280</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;version&quot;</span><span class="p">)</span>
+</span><span id="Generator-1281"><a href="#Generator-1281"><span class="linenos">1281</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1282"><a href="#Generator-1282"><span class="linenos">1282</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-1283"><a href="#Generator-1283"><span class="linenos">1283</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-1284"><a href="#Generator-1284"><span class="linenos">1284</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-1285"><a href="#Generator-1285"><span class="linenos">1285</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1286"><a href="#Generator-1286"><span class="linenos">1286</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1287"><a href="#Generator-1287"><span class="linenos">1287</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1288"><a href="#Generator-1288"><span class="linenos">1288</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1289"><a href="#Generator-1289"><span class="linenos">1289</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator-1290"><a href="#Generator-1290"><span class="linenos">1290</span></a>
+</span><span id="Generator-1291"><a href="#Generator-1291"><span class="linenos">1291</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">version</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1292"><a href="#Generator-1292"><span class="linenos">1292</span></a>
+</span><span id="Generator-1293"><a href="#Generator-1293"><span class="linenos">1293</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="Generator-1294"><a href="#Generator-1294"><span class="linenos">1294</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-1295"><a href="#Generator-1295"><span class="linenos">1295</span></a> <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="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-1297"><a href="#Generator-1297"><span class="linenos">1297</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-1298"><a href="#Generator-1298"><span class="linenos">1298</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator-1299"><a href="#Generator-1299"><span class="linenos">1299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator-1300"><a href="#Generator-1300"><span class="linenos">1300</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-1301"><a href="#Generator-1301"><span class="linenos">1301</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1302"><a href="#Generator-1302"><span class="linenos">1302</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1303"><a href="#Generator-1303"><span class="linenos">1303</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1304"><a href="#Generator-1304"><span class="linenos">1304</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-1305"><a href="#Generator-1305"><span class="linenos">1305</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-1306"><a href="#Generator-1306"><span class="linenos">1306</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-1307"><a href="#Generator-1307"><span class="linenos">1307</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-1308"><a href="#Generator-1308"><span class="linenos">1308</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-1309"><a href="#Generator-1309"><span class="linenos">1309</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-1310"><a href="#Generator-1310"><span class="linenos">1310</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-1311"><a href="#Generator-1311"><span class="linenos">1311</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-1312"><a href="#Generator-1312"><span class="linenos">1312</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-1313"><a href="#Generator-1313"><span class="linenos">1313</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-1314"><a href="#Generator-1314"><span class="linenos">1314</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-1315"><a href="#Generator-1315"><span class="linenos">1315</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-1316"><a href="#Generator-1316"><span class="linenos">1316</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-1317"><a href="#Generator-1317"><span class="linenos">1317</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-1318"><a href="#Generator-1318"><span class="linenos">1318</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-1319"><a href="#Generator-1319"><span class="linenos">1319</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-1320"><a href="#Generator-1320"><span class="linenos">1320</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-1321"><a href="#Generator-1321"><span class="linenos">1321</span></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-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">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-1324"><a href="#Generator-1324"><span class="linenos">1324</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-1325"><a href="#Generator-1325"><span class="linenos">1325</span></a>
+</span><span id="Generator-1326"><a href="#Generator-1326"><span class="linenos">1326</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-1327"><a href="#Generator-1327"><span class="linenos">1327</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1328"><a href="#Generator-1328"><span class="linenos">1328</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1329"><a href="#Generator-1329"><span class="linenos">1329</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1330"><a href="#Generator-1330"><span class="linenos">1330</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1331"><a href="#Generator-1331"><span class="linenos">1331</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="Generator-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;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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="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-1335"><a href="#Generator-1335"><span class="linenos">1335</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-1336"><a href="#Generator-1336"><span class="linenos">1336</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-1337"><a href="#Generator-1337"><span class="linenos">1337</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-1338"><a href="#Generator-1338"><span class="linenos">1338</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-1339"><a href="#Generator-1339"><span class="linenos">1339</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;include_nulls&quot;</span><span class="p">)</span>
+</span><span id="Generator-1340"><a href="#Generator-1340"><span class="linenos">1340</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1341"><a href="#Generator-1341"><span class="linenos">1341</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
+</span><span id="Generator-1342"><a href="#Generator-1342"><span class="linenos">1342</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1343"><a href="#Generator-1343"><span class="linenos">1343</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1344"><a href="#Generator-1344"><span class="linenos">1344</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1345"><a href="#Generator-1345"><span class="linenos">1345</span></a>
+</span><span id="Generator-1346"><a href="#Generator-1346"><span class="linenos">1346</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1347"><a href="#Generator-1347"><span class="linenos">1347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1348"><a href="#Generator-1348"><span class="linenos">1348</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-1349"><a href="#Generator-1349"><span class="linenos">1349</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator-1350"><a href="#Generator-1350"><span class="linenos">1350</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1351"><a href="#Generator-1351"><span class="linenos">1351</span></a>
-</span><span id="Generator-1352"><a href="#Generator-1352"><span class="linenos">1352</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-1353"><a href="#Generator-1353"><span class="linenos">1353</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-1352"><a href="#Generator-1352"><span class="linenos">1352</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-1353"><a href="#Generator-1353"><span class="linenos">1353</span></a> <span class="k">return</span> <span class="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-1354"><a href="#Generator-1354"><span class="linenos">1354</span></a>
-</span><span id="Generator-1355"><a href="#Generator-1355"><span class="linenos">1355</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-1356"><a href="#Generator-1356"><span class="linenos">1356</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-1357"><a href="#Generator-1357"><span class="linenos">1357</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-1358"><a href="#Generator-1358"><span class="linenos">1358</span></a> <span class="k">return</span> <span class="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-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="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-1361"><a href="#Generator-1361"><span class="linenos">1361</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1362"><a href="#Generator-1362"><span class="linenos">1362</span></a>
-</span><span id="Generator-1363"><a href="#Generator-1363"><span class="linenos">1363</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-1364"><a href="#Generator-1364"><span class="linenos">1364</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-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="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
-</span><span id="Generator-1367"><a href="#Generator-1367"><span class="linenos">1367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
-</span><span id="Generator-1368"><a href="#Generator-1368"><span class="linenos">1368</span></a>
-</span><span id="Generator-1369"><a href="#Generator-1369"><span class="linenos">1369</span></a> <span class="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-1370"><a href="#Generator-1370"><span class="linenos">1370</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1371"><a href="#Generator-1371"><span class="linenos">1371</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-1372"><a href="#Generator-1372"><span class="linenos">1372</span></a> <span class="p">)</span>
-</span><span id="Generator-1373"><a href="#Generator-1373"><span class="linenos">1373</span></a>
-</span><span id="Generator-1374"><a href="#Generator-1374"><span class="linenos">1374</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-1375"><a href="#Generator-1375"><span class="linenos">1375</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-1376"><a href="#Generator-1376"><span class="linenos">1376</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-1377"><a href="#Generator-1377"><span class="linenos">1377</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1378"><a href="#Generator-1378"><span class="linenos">1378</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-1379"><a href="#Generator-1379"><span class="linenos">1379</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-1380"><a href="#Generator-1380"><span class="linenos">1380</span></a>
-</span><span id="Generator-1381"><a href="#Generator-1381"><span class="linenos">1381</span></a> <span class="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-1382"><a href="#Generator-1382"><span class="linenos">1382</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-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="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-1384"><a href="#Generator-1384"><span class="linenos">1384</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1385"><a href="#Generator-1385"><span class="linenos">1385</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-1386"><a href="#Generator-1386"><span class="linenos">1386</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-1387"><a href="#Generator-1387"><span class="linenos">1387</span></a>
-</span><span id="Generator-1388"><a href="#Generator-1388"><span class="linenos">1388</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator-1389"><a href="#Generator-1389"><span class="linenos">1389</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
-</span><span id="Generator-1390"><a href="#Generator-1390"><span class="linenos">1390</span></a> <span class="n">cube_sql</span><span class="p">,</span>
-</span><span id="Generator-1391"><a href="#Generator-1391"><span class="linenos">1391</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
-</span><span id="Generator-1392"><a href="#Generator-1392"><span class="linenos">1392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-1393"><a href="#Generator-1393"><span class="linenos">1393</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
-</span><span id="Generator-1394"><a href="#Generator-1394"><span class="linenos">1394</span></a> <span class="p">)</span>
-</span><span id="Generator-1395"><a href="#Generator-1395"><span class="linenos">1395</span></a>
-</span><span id="Generator-1396"><a href="#Generator-1396"><span class="linenos">1396</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-1397"><a href="#Generator-1397"><span class="linenos">1397</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1398"><a href="#Generator-1398"><span class="linenos">1398</span></a>
-</span><span id="Generator-1399"><a href="#Generator-1399"><span class="linenos">1399</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</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-1400"><a href="#Generator-1400"><span class="linenos">1400</span></a>
-</span><span id="Generator-1401"><a href="#Generator-1401"><span class="linenos">1401</span></a> <span class="k">def</span> <span class="nf">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-1402"><a href="#Generator-1402"><span class="linenos">1402</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-1403"><a href="#Generator-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-1404"><a href="#Generator-1404"><span class="linenos">1404</span></a>
-</span><span id="Generator-1405"><a href="#Generator-1405"><span class="linenos">1405</span></a> <span class="k">def</span> <span class="nf">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-1406"><a href="#Generator-1406"><span class="linenos">1406</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-1407"><a href="#Generator-1407"><span class="linenos">1407</span></a> <span class="n">op</span>
-</span><span id="Generator-1408"><a href="#Generator-1408"><span class="linenos">1408</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-1409"><a href="#Generator-1409"><span class="linenos">1409</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Generator-1410"><a href="#Generator-1410"><span class="linenos">1410</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-1411"><a href="#Generator-1411"><span class="linenos">1411</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
-</span><span id="Generator-1412"><a href="#Generator-1412"><span class="linenos">1412</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Generator-1413"><a href="#Generator-1413"><span class="linenos">1413</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-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="k">if</span> <span class="n">op</span>
-</span><span id="Generator-1416"><a href="#Generator-1416"><span class="linenos">1416</span></a> <span class="p">)</span>
-</span><span id="Generator-1417"><a href="#Generator-1417"><span class="linenos">1417</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-1418"><a href="#Generator-1418"><span class="linenos">1418</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-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="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-1421"><a href="#Generator-1421"><span class="linenos">1421</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-1422"><a href="#Generator-1422"><span class="linenos">1422</span></a>
-</span><span id="Generator-1423"><a href="#Generator-1423"><span class="linenos">1423</span></a> <span class="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-1355"><a href="#Generator-1355"><span class="linenos">1355</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-1356"><a href="#Generator-1356"><span class="linenos">1356</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1357"><a href="#Generator-1357"><span class="linenos">1357</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-1358"><a href="#Generator-1358"><span class="linenos">1358</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-1359"><a href="#Generator-1359"><span class="linenos">1359</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-1360"><a href="#Generator-1360"><span class="linenos">1360</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-1361"><a href="#Generator-1361"><span class="linenos">1361</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-1362"><a href="#Generator-1362"><span class="linenos">1362</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-1363"><a href="#Generator-1363"><span class="linenos">1363</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator-1364"><a href="#Generator-1364"><span class="linenos">1364</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1365"><a href="#Generator-1365"><span class="linenos">1365</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1366"><a href="#Generator-1366"><span class="linenos">1366</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1367"><a href="#Generator-1367"><span class="linenos">1367</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1368"><a href="#Generator-1368"><span class="linenos">1368</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-1369"><a href="#Generator-1369"><span class="linenos">1369</span></a>
+</span><span id="Generator-1370"><a href="#Generator-1370"><span class="linenos">1370</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-1371"><a href="#Generator-1371"><span class="linenos">1371</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
+</span><span id="Generator-1372"><a href="#Generator-1372"><span class="linenos">1372</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="Generator-1373"><a href="#Generator-1373"><span class="linenos">1373</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-1374"><a href="#Generator-1374"><span class="linenos">1374</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-1375"><a href="#Generator-1375"><span class="linenos">1375</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-1376"><a href="#Generator-1376"><span class="linenos">1376</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1377"><a href="#Generator-1377"><span class="linenos">1377</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-1378"><a href="#Generator-1378"><span class="linenos">1378</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-1379"><a href="#Generator-1379"><span class="linenos">1379</span></a> <span class="k">else</span> <span class="n">values</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="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-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="c1"># Converts `VALUES...` expression into a series of select unions.</span>
+</span><span id="Generator-1384"><a href="#Generator-1384"><span class="linenos">1384</span></a> <span class="c1"># Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
+</span><span id="Generator-1385"><a href="#Generator-1385"><span class="linenos">1385</span></a> <span class="c1"># evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
+</span><span id="Generator-1386"><a href="#Generator-1386"><span class="linenos">1386</span></a> <span class="c1"># very slow.</span>
+</span><span id="Generator-1387"><a href="#Generator-1387"><span class="linenos">1387</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-1388"><a href="#Generator-1388"><span class="linenos">1388</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</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">columns</span>
+</span><span id="Generator-1389"><a href="#Generator-1389"><span class="linenos">1389</span></a>
+</span><span id="Generator-1390"><a href="#Generator-1390"><span class="linenos">1390</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1391"><a href="#Generator-1391"><span class="linenos">1391</span></a>
+</span><span id="Generator-1392"><a href="#Generator-1392"><span class="linenos">1392</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Generator-1393"><a href="#Generator-1393"><span class="linenos">1393</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator-1394"><a href="#Generator-1394"><span class="linenos">1394</span></a>
+</span><span id="Generator-1395"><a href="#Generator-1395"><span class="linenos">1395</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
+</span><span id="Generator-1396"><a href="#Generator-1396"><span class="linenos">1396</span></a> <span class="n">row</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="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
+</span><span id="Generator-1398"><a href="#Generator-1398"><span class="linenos">1398</span></a> <span class="p">]</span>
+</span><span id="Generator-1399"><a href="#Generator-1399"><span class="linenos">1399</span></a>
+</span><span id="Generator-1400"><a href="#Generator-1400"><span class="linenos">1400</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
+</span><span id="Generator-1401"><a href="#Generator-1401"><span class="linenos">1401</span></a>
+</span><span id="Generator-1402"><a href="#Generator-1402"><span class="linenos">1402</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Generator-1403"><a href="#Generator-1403"><span class="linenos">1403</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator-1404"><a href="#Generator-1404"><span class="linenos">1404</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="Generator-1405"><a href="#Generator-1405"><span class="linenos">1405</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
+</span><span id="Generator-1406"><a href="#Generator-1406"><span class="linenos">1406</span></a> <span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="Generator-1407"><a href="#Generator-1407"><span class="linenos">1407</span></a> <span class="p">)</span>
+</span><span id="Generator-1408"><a href="#Generator-1408"><span class="linenos">1408</span></a>
+</span><span id="Generator-1409"><a href="#Generator-1409"><span class="linenos">1409</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">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="Generator-1410"><a href="#Generator-1410"><span class="linenos">1410</span></a>
+</span><span id="Generator-1411"><a href="#Generator-1411"><span class="linenos">1411</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-1412"><a href="#Generator-1412"><span class="linenos">1412</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-1413"><a href="#Generator-1413"><span class="linenos">1413</span></a>
+</span><span id="Generator-1414"><a href="#Generator-1414"><span class="linenos">1414</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-1415"><a href="#Generator-1415"><span class="linenos">1415</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-1416"><a href="#Generator-1416"><span class="linenos">1416</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-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;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-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">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-1420"><a href="#Generator-1420"><span class="linenos">1420</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">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-1423"><a href="#Generator-1423"><span class="linenos">1423</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-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="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="Generator-1426"><a href="#Generator-1426"><span class="linenos">1426</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-1427"><a href="#Generator-1427"><span class="linenos">1427</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-1428"><a href="#Generator-1428"><span class="linenos">1428</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator-1429"><a href="#Generator-1429"><span class="linenos">1429</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-1430"><a href="#Generator-1430"><span class="linenos">1430</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1431"><a href="#Generator-1431"><span class="linenos">1431</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-1432"><a href="#Generator-1432"><span class="linenos">1432</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
-</span><span id="Generator-1433"><a href="#Generator-1433"><span class="linenos">1433</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1434"><a href="#Generator-1434"><span class="linenos">1434</span></a>
-</span><span id="Generator-1435"><a href="#Generator-1435"><span class="linenos">1435</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
-</span><span id="Generator-1436"><a href="#Generator-1436"><span class="linenos">1436</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1437"><a href="#Generator-1437"><span class="linenos">1437</span></a>
-</span><span id="Generator-1438"><a href="#Generator-1438"><span class="linenos">1438</span></a> <span class="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-1439"><a href="#Generator-1439"><span class="linenos">1439</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-1440"><a href="#Generator-1440"><span class="linenos">1440</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-1441"><a href="#Generator-1441"><span class="linenos">1441</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-1442"><a href="#Generator-1442"><span class="linenos">1442</span></a>
-</span><span id="Generator-1443"><a href="#Generator-1443"><span class="linenos">1443</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-1444"><a href="#Generator-1444"><span class="linenos">1444</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1445"><a href="#Generator-1445"><span class="linenos">1445</span></a>
-</span><span id="Generator-1446"><a href="#Generator-1446"><span class="linenos">1446</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-1447"><a href="#Generator-1447"><span class="linenos">1447</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-1448"><a href="#Generator-1448"><span class="linenos">1448</span></a>
-</span><span id="Generator-1449"><a href="#Generator-1449"><span class="linenos">1449</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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-1450"><a href="#Generator-1450"><span class="linenos">1450</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-1451"><a href="#Generator-1451"><span class="linenos">1451</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-1452"><a href="#Generator-1452"><span class="linenos">1452</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-1453"><a href="#Generator-1453"><span class="linenos">1453</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-1454"><a href="#Generator-1454"><span class="linenos">1454</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-1455"><a href="#Generator-1455"><span class="linenos">1455</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-1456"><a href="#Generator-1456"><span class="linenos">1456</span></a>
-</span><span id="Generator-1457"><a href="#Generator-1457"><span class="linenos">1457</span></a> <span class="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-1458"><a href="#Generator-1458"><span class="linenos">1458</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-1459"><a href="#Generator-1459"><span class="linenos">1459</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-1460"><a href="#Generator-1460"><span class="linenos">1460</span></a>
-</span><span id="Generator-1461"><a href="#Generator-1461"><span class="linenos">1461</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1462"><a href="#Generator-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1463"><a href="#Generator-1463"><span class="linenos">1463</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-1464"><a href="#Generator-1464"><span class="linenos">1464</span></a> <span class="n">sql</span>
-</span><span id="Generator-1465"><a href="#Generator-1465"><span class="linenos">1465</span></a> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator-1466"><a href="#Generator-1466"><span class="linenos">1466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Generator-1467"><a href="#Generator-1467"><span class="linenos">1467</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;expression&quot;</span><span class="p">),</span>
-</span><span id="Generator-1468"><a href="#Generator-1468"><span class="linenos">1468</span></a> <span class="p">)</span>
-</span><span id="Generator-1469"><a href="#Generator-1469"><span class="linenos">1469</span></a> <span class="k">if</span> <span class="n">sql</span>
-</span><span id="Generator-1470"><a href="#Generator-1470"><span class="linenos">1470</span></a> <span class="p">)</span>
-</span><span id="Generator-1471"><a href="#Generator-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="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args</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><span id="Generator-1473"><a href="#Generator-1473"><span class="linenos">1473</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-1474"><a href="#Generator-1474"><span class="linenos">1474</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1475"><a href="#Generator-1475"><span class="linenos">1475</span></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-1476"><a href="#Generator-1476"><span class="linenos">1476</span></a>
-</span><span id="Generator-1477"><a href="#Generator-1477"><span class="linenos">1477</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-1478"><a href="#Generator-1478"><span class="linenos">1478</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-1479"><a href="#Generator-1479"><span class="linenos">1479</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-1480"><a href="#Generator-1480"><span class="linenos">1480</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1481"><a href="#Generator-1481"><span class="linenos">1481</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-1482"><a href="#Generator-1482"><span class="linenos">1482</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-1483"><a href="#Generator-1483"><span class="linenos">1483</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-1484"><a href="#Generator-1484"><span class="linenos">1484</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-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="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-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">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-1488"><a href="#Generator-1488"><span class="linenos">1488</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1489"><a href="#Generator-1489"><span class="linenos">1489</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-1490"><a href="#Generator-1490"><span class="linenos">1490</span></a> <span class="p">)</span>
-</span><span id="Generator-1491"><a href="#Generator-1491"><span class="linenos">1491</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-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="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1425"><a href="#Generator-1425"><span class="linenos">1425</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
+</span><span id="Generator-1426"><a href="#Generator-1426"><span class="linenos">1426</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
+</span><span id="Generator-1427"><a href="#Generator-1427"><span class="linenos">1427</span></a>
+</span><span id="Generator-1428"><a href="#Generator-1428"><span class="linenos">1428</span></a> <span class="n">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-1429"><a href="#Generator-1429"><span class="linenos">1429</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1430"><a href="#Generator-1430"><span class="linenos">1430</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-1431"><a href="#Generator-1431"><span class="linenos">1431</span></a> <span class="p">)</span>
+</span><span id="Generator-1432"><a href="#Generator-1432"><span class="linenos">1432</span></a>
+</span><span id="Generator-1433"><a href="#Generator-1433"><span class="linenos">1433</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-1434"><a href="#Generator-1434"><span class="linenos">1434</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-1435"><a href="#Generator-1435"><span class="linenos">1435</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-1436"><a href="#Generator-1436"><span class="linenos">1436</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1437"><a href="#Generator-1437"><span class="linenos">1437</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-1438"><a href="#Generator-1438"><span class="linenos">1438</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-1439"><a href="#Generator-1439"><span class="linenos">1439</span></a>
+</span><span id="Generator-1440"><a href="#Generator-1440"><span class="linenos">1440</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-1441"><a href="#Generator-1441"><span class="linenos">1441</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-1442"><a href="#Generator-1442"><span class="linenos">1442</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-1443"><a href="#Generator-1443"><span class="linenos">1443</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1444"><a href="#Generator-1444"><span class="linenos">1444</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-1445"><a href="#Generator-1445"><span class="linenos">1445</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-1446"><a href="#Generator-1446"><span class="linenos">1446</span></a>
+</span><span id="Generator-1447"><a href="#Generator-1447"><span class="linenos">1447</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator-1448"><a href="#Generator-1448"><span class="linenos">1448</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
+</span><span id="Generator-1449"><a href="#Generator-1449"><span class="linenos">1449</span></a> <span class="n">cube_sql</span><span class="p">,</span>
+</span><span id="Generator-1450"><a href="#Generator-1450"><span class="linenos">1450</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
+</span><span id="Generator-1451"><a href="#Generator-1451"><span class="linenos">1451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1452"><a href="#Generator-1452"><span class="linenos">1452</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
+</span><span id="Generator-1453"><a href="#Generator-1453"><span class="linenos">1453</span></a> <span class="p">)</span>
+</span><span id="Generator-1454"><a href="#Generator-1454"><span class="linenos">1454</span></a>
+</span><span id="Generator-1455"><a href="#Generator-1455"><span class="linenos">1455</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-1456"><a href="#Generator-1456"><span class="linenos">1456</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1457"><a href="#Generator-1457"><span class="linenos">1457</span></a>
+</span><span id="Generator-1458"><a href="#Generator-1458"><span class="linenos">1458</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-1459"><a href="#Generator-1459"><span class="linenos">1459</span></a>
+</span><span id="Generator-1460"><a href="#Generator-1460"><span class="linenos">1460</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-1461"><a href="#Generator-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">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-1462"><a href="#Generator-1462"><span class="linenos">1462</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1463"><a href="#Generator-1463"><span class="linenos">1463</span></a>
+</span><span id="Generator-1464"><a href="#Generator-1464"><span class="linenos">1464</span></a> <span class="k">def</span> <span class="nf">connect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1465"><a href="#Generator-1465"><span class="linenos">1465</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">)</span>
+</span><span id="Generator-1466"><a href="#Generator-1466"><span class="linenos">1466</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1467"><a href="#Generator-1467"><span class="linenos">1467</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">)</span>
+</span><span id="Generator-1468"><a href="#Generator-1468"><span class="linenos">1468</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1469"><a href="#Generator-1469"><span class="linenos">1469</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
+</span><span id="Generator-1470"><a href="#Generator-1470"><span class="linenos">1470</span></a>
+</span><span id="Generator-1471"><a href="#Generator-1471"><span class="linenos">1471</span></a> <span class="k">def</span> <span class="nf">prior_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-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;PRIOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">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-1475"><a href="#Generator-1475"><span class="linenos">1475</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-1476"><a href="#Generator-1476"><span class="linenos">1476</span></a> <span class="n">op</span>
+</span><span id="Generator-1477"><a href="#Generator-1477"><span class="linenos">1477</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-1478"><a href="#Generator-1478"><span class="linenos">1478</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Generator-1479"><a href="#Generator-1479"><span class="linenos">1479</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-1480"><a href="#Generator-1480"><span class="linenos">1480</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
+</span><span id="Generator-1481"><a href="#Generator-1481"><span class="linenos">1481</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Generator-1482"><a href="#Generator-1482"><span class="linenos">1482</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-1483"><a href="#Generator-1483"><span class="linenos">1483</span></a> <span class="p">)</span>
+</span><span id="Generator-1484"><a href="#Generator-1484"><span class="linenos">1484</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="Generator-1485"><a href="#Generator-1485"><span class="linenos">1485</span></a> <span class="p">)</span>
+</span><span id="Generator-1486"><a href="#Generator-1486"><span class="linenos">1486</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-1487"><a href="#Generator-1487"><span class="linenos">1487</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-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">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-1490"><a href="#Generator-1490"><span class="linenos">1490</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-1491"><a href="#Generator-1491"><span class="linenos">1491</span></a>
+</span><span id="Generator-1492"><a href="#Generator-1492"><span class="linenos">1492</span></a> <span class="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-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">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-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;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-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">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-1498"><a href="#Generator-1498"><span class="linenos">1498</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-1499"><a href="#Generator-1499"><span class="linenos">1499</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-1500"><a href="#Generator-1500"><span class="linenos">1500</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1501"><a href="#Generator-1501"><span class="linenos">1501</span></a>
-</span><span id="Generator-1502"><a href="#Generator-1502"><span class="linenos">1502</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
-</span><span id="Generator-1503"><a href="#Generator-1503"><span class="linenos">1503</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-1504"><a href="#Generator-1504"><span class="linenos">1504</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1505"><a href="#Generator-1505"><span class="linenos">1505</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wait&quot;</span><span class="p">)</span>
+</span><span id="Generator-1494"><a href="#Generator-1494"><span class="linenos">1494</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="Generator-1495"><a href="#Generator-1495"><span class="linenos">1495</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-1496"><a href="#Generator-1496"><span class="linenos">1496</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-1497"><a href="#Generator-1497"><span class="linenos">1497</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator-1498"><a href="#Generator-1498"><span class="linenos">1498</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-1499"><a href="#Generator-1499"><span class="linenos">1499</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1500"><a href="#Generator-1500"><span class="linenos">1500</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-1501"><a href="#Generator-1501"><span class="linenos">1501</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
+</span><span id="Generator-1502"><a href="#Generator-1502"><span class="linenos">1502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1503"><a href="#Generator-1503"><span class="linenos">1503</span></a>
+</span><span id="Generator-1504"><a href="#Generator-1504"><span class="linenos">1504</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
+</span><span id="Generator-1505"><a href="#Generator-1505"><span class="linenos">1505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1506"><a href="#Generator-1506"><span class="linenos">1506</span></a>
-</span><span id="Generator-1507"><a href="#Generator-1507"><span class="linenos">1507</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1508"><a href="#Generator-1508"><span class="linenos">1508</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Generator-1509"><a href="#Generator-1509"><span class="linenos">1509</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1510"><a href="#Generator-1510"><span class="linenos">1510</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1511"><a href="#Generator-1511"><span class="linenos">1511</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
-</span><span id="Generator-1512"><a href="#Generator-1512"><span class="linenos">1512</span></a>
-</span><span id="Generator-1513"><a href="#Generator-1513"><span class="linenos">1513</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1507"><a href="#Generator-1507"><span class="linenos">1507</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-1508"><a href="#Generator-1508"><span class="linenos">1508</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-1509"><a href="#Generator-1509"><span class="linenos">1509</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-1510"><a href="#Generator-1510"><span class="linenos">1510</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-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">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-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">sql</span><span class="p">(</span><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><span id="Generator-1515"><a href="#Generator-1515"><span class="linenos">1515</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-1516"><a href="#Generator-1516"><span class="linenos">1516</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-1517"><a href="#Generator-1517"><span class="linenos">1517</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-1518"><a href="#Generator-1518"><span class="linenos">1518</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="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1519"><a href="#Generator-1519"><span class="linenos">1519</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-1520"><a href="#Generator-1520"><span class="linenos">1520</span></a>
-</span><span id="Generator-1521"><a href="#Generator-1521"><span class="linenos">1521</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1522"><a href="#Generator-1522"><span class="linenos">1522</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-1523"><a href="#Generator-1523"><span class="linenos">1523</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESCAPE_LINE_BREAK</span><span class="p">:</span>
-</span><span id="Generator-1524"><a href="#Generator-1524"><span class="linenos">1524</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="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-</span><span id="Generator-1525"><a href="#Generator-1525"><span class="linenos">1525</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-1526"><a href="#Generator-1526"><span class="linenos">1526</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-1527"><a href="#Generator-1527"><span class="linenos">1527</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-1528"><a href="#Generator-1528"><span class="linenos">1528</span></a>
-</span><span id="Generator-1529"><a href="#Generator-1529"><span class="linenos">1529</span></a> <span class="k">def</span> <span class="nf">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-1530"><a href="#Generator-1530"><span class="linenos">1530</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-1531"><a href="#Generator-1531"><span class="linenos">1531</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-1532"><a href="#Generator-1532"><span class="linenos">1532</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-1533"><a href="#Generator-1533"><span class="linenos">1533</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-1534"><a href="#Generator-1534"><span class="linenos">1534</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-1535"><a href="#Generator-1535"><span class="linenos">1535</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-1536"><a href="#Generator-1536"><span class="linenos">1536</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-1537"><a href="#Generator-1537"><span class="linenos">1537</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-1538"><a href="#Generator-1538"><span class="linenos">1538</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-1539"><a href="#Generator-1539"><span class="linenos">1539</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-1540"><a href="#Generator-1540"><span class="linenos">1540</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-1515"><a href="#Generator-1515"><span class="linenos">1515</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-1516"><a href="#Generator-1516"><span class="linenos">1516</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-1517"><a href="#Generator-1517"><span class="linenos">1517</span></a>
+</span><span id="Generator-1518"><a href="#Generator-1518"><span class="linenos">1518</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-1519"><a href="#Generator-1519"><span class="linenos">1519</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-1520"><a href="#Generator-1520"><span class="linenos">1520</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-1521"><a href="#Generator-1521"><span class="linenos">1521</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-1522"><a href="#Generator-1522"><span class="linenos">1522</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-1523"><a href="#Generator-1523"><span class="linenos">1523</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-1524"><a href="#Generator-1524"><span class="linenos">1524</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-1525"><a href="#Generator-1525"><span class="linenos">1525</span></a>
+</span><span id="Generator-1526"><a href="#Generator-1526"><span class="linenos">1526</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-1527"><a href="#Generator-1527"><span class="linenos">1527</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-1528"><a href="#Generator-1528"><span class="linenos">1528</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-1529"><a href="#Generator-1529"><span class="linenos">1529</span></a>
+</span><span id="Generator-1530"><a href="#Generator-1530"><span class="linenos">1530</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1531"><a href="#Generator-1531"><span class="linenos">1531</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1532"><a href="#Generator-1532"><span class="linenos">1532</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-1533"><a href="#Generator-1533"><span class="linenos">1533</span></a> <span class="n">sql</span>
+</span><span id="Generator-1534"><a href="#Generator-1534"><span class="linenos">1534</span></a> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-1535"><a href="#Generator-1535"><span class="linenos">1535</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Generator-1536"><a href="#Generator-1536"><span class="linenos">1536</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;expression&quot;</span><span class="p">),</span>
+</span><span id="Generator-1537"><a href="#Generator-1537"><span class="linenos">1537</span></a> <span class="p">)</span>
+</span><span id="Generator-1538"><a href="#Generator-1538"><span class="linenos">1538</span></a> <span class="k">if</span> <span class="n">sql</span>
+</span><span id="Generator-1539"><a href="#Generator-1539"><span class="linenos">1539</span></a> <span class="p">)</span>
+</span><span id="Generator-1540"><a href="#Generator-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="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1541"><a href="#Generator-1541"><span class="linenos">1541</span></a>
-</span><span id="Generator-1542"><a href="#Generator-1542"><span class="linenos">1542</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-1543"><a href="#Generator-1543"><span class="linenos">1543</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&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">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-1546"><a href="#Generator-1546"><span class="linenos">1546</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-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="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-1542"><a href="#Generator-1542"><span class="linenos">1542</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-1543"><a href="#Generator-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="Generator-1544"><a href="#Generator-1544"><span class="linenos">1544</span></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-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="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-1547"><a href="#Generator-1547"><span class="linenos">1547</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-1548"><a href="#Generator-1548"><span class="linenos">1548</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-1549"><a href="#Generator-1549"><span class="linenos">1549</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1550"><a href="#Generator-1550"><span class="linenos">1550</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-1551"><a href="#Generator-1551"><span class="linenos">1551</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-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="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-1554"><a href="#Generator-1554"><span class="linenos">1554</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-1550"><a href="#Generator-1550"><span class="linenos">1550</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-1551"><a href="#Generator-1551"><span class="linenos">1551</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-1552"><a href="#Generator-1552"><span class="linenos">1552</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-1553"><a href="#Generator-1553"><span class="linenos">1553</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-1554"><a href="#Generator-1554"><span class="linenos">1554</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-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="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-1557"><a href="#Generator-1557"><span class="linenos">1557</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-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">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-1560"><a href="#Generator-1560"><span class="linenos">1560</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-1561"><a href="#Generator-1561"><span class="linenos">1561</span></a>
-</span><span id="Generator-1562"><a href="#Generator-1562"><span class="linenos">1562</span></a> <span class="k">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-1563"><a href="#Generator-1563"><span class="linenos">1563</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-1564"><a href="#Generator-1564"><span class="linenos">1564</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-1556"><a href="#Generator-1556"><span class="linenos">1556</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-1557"><a href="#Generator-1557"><span class="linenos">1557</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1558"><a href="#Generator-1558"><span class="linenos">1558</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-1559"><a href="#Generator-1559"><span class="linenos">1559</span></a> <span class="p">)</span>
+</span><span id="Generator-1560"><a href="#Generator-1560"><span class="linenos">1560</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1561"><a href="#Generator-1561"><span class="linenos">1561</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1562"><a href="#Generator-1562"><span class="linenos">1562</span></a>
+</span><span id="Generator-1563"><a href="#Generator-1563"><span class="linenos">1563</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-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;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-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="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-1567"><a href="#Generator-1567"><span class="linenos">1567</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-1568"><a href="#Generator-1568"><span class="linenos">1568</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-1569"><a href="#Generator-1569"><span class="linenos">1569</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-1570"><a href="#Generator-1570"><span class="linenos">1570</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-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="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-1573"><a href="#Generator-1573"><span class="linenos">1573</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1574"><a href="#Generator-1574"><span class="linenos">1574</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-1575"><a href="#Generator-1575"><span class="linenos">1575</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-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="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
-</span><span id="Generator-1578"><a href="#Generator-1578"><span class="linenos">1578</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Generator-1579"><a href="#Generator-1579"><span class="linenos">1579</span></a> <span class="n">nulls_last</span>
-</span><span id="Generator-1580"><a href="#Generator-1580"><span class="linenos">1580</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-1581"><a href="#Generator-1581"><span class="linenos">1581</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="Generator-1582"><a href="#Generator-1582"><span class="linenos">1582</span></a> <span class="p">):</span>
-</span><span id="Generator-1583"><a href="#Generator-1583"><span class="linenos">1583</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-1584"><a href="#Generator-1584"><span class="linenos">1584</span></a>
-</span><span id="Generator-1585"><a href="#Generator-1585"><span class="linenos">1585</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-1586"><a href="#Generator-1586"><span class="linenos">1586</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="Generator-1587"><a href="#Generator-1587"><span class="linenos">1587</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-1588"><a href="#Generator-1588"><span class="linenos">1588</span></a> <span class="p">)</span>
-</span><span id="Generator-1589"><a href="#Generator-1589"><span class="linenos">1589</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1590"><a href="#Generator-1590"><span class="linenos">1590</span></a>
-</span><span id="Generator-1591"><a href="#Generator-1591"><span class="linenos">1591</span></a> <span class="k">return</span> <span class="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-1592"><a href="#Generator-1592"><span class="linenos">1592</span></a>
-</span><span id="Generator-1593"><a href="#Generator-1593"><span class="linenos">1593</span></a> <span class="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-1594"><a href="#Generator-1594"><span class="linenos">1594</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-1595"><a href="#Generator-1595"><span class="linenos">1595</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-1596"><a href="#Generator-1596"><span class="linenos">1596</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-1597"><a href="#Generator-1597"><span class="linenos">1597</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-1598"><a href="#Generator-1598"><span class="linenos">1598</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-1599"><a href="#Generator-1599"><span class="linenos">1599</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-1600"><a href="#Generator-1600"><span class="linenos">1600</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-1601"><a href="#Generator-1601"><span class="linenos">1601</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-1602"><a href="#Generator-1602"><span class="linenos">1602</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-1603"><a href="#Generator-1603"><span class="linenos">1603</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-1604"><a href="#Generator-1604"><span class="linenos">1604</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-1605"><a href="#Generator-1605"><span class="linenos">1605</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-1606"><a href="#Generator-1606"><span class="linenos">1606</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-1607"><a href="#Generator-1607"><span class="linenos">1607</span></a> <span class="p">]</span>
-</span><span id="Generator-1608"><a href="#Generator-1608"><span class="linenos">1608</span></a> <span 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-1609"><a href="#Generator-1609"><span class="linenos">1609</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-1610"><a href="#Generator-1610"><span class="linenos">1610</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-1611"><a href="#Generator-1611"><span class="linenos">1611</span></a> <span class="p">(</span>
-</span><span id="Generator-1612"><a href="#Generator-1612"><span class="linenos">1612</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="Generator-1613"><a href="#Generator-1613"><span class="linenos">1613</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="Generator-1614"><a href="#Generator-1614"><span class="linenos">1614</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="Generator-1615"><a href="#Generator-1615"><span class="linenos">1615</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="Generator-1616"><a href="#Generator-1616"><span class="linenos">1616</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="Generator-1617"><a href="#Generator-1617"><span class="linenos">1617</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="Generator-1618"><a href="#Generator-1618"><span class="linenos">1618</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="Generator-1619"><a href="#Generator-1619"><span class="linenos">1619</span></a> <span class="p">)</span>
-</span><span id="Generator-1620"><a href="#Generator-1620"><span class="linenos">1620</span></a> <span class="p">)</span>
-</span><span id="Generator-1621"><a href="#Generator-1621"><span class="linenos">1621</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-1622"><a href="#Generator-1622"><span class="linenos">1622</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-1623"><a href="#Generator-1623"><span class="linenos">1623</span></a> <span class="k">return</span> <span class="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-1566"><a href="#Generator-1566"><span class="linenos">1566</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-1567"><a href="#Generator-1567"><span class="linenos">1567</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-1568"><a href="#Generator-1568"><span class="linenos">1568</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-1569"><a href="#Generator-1569"><span class="linenos">1569</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1570"><a href="#Generator-1570"><span class="linenos">1570</span></a>
+</span><span id="Generator-1571"><a href="#Generator-1571"><span class="linenos">1571</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
+</span><span id="Generator-1572"><a href="#Generator-1572"><span class="linenos">1572</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-1573"><a href="#Generator-1573"><span class="linenos">1573</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1574"><a href="#Generator-1574"><span class="linenos">1574</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wait&quot;</span><span class="p">)</span>
+</span><span id="Generator-1575"><a href="#Generator-1575"><span class="linenos">1575</span></a>
+</span><span id="Generator-1576"><a href="#Generator-1576"><span class="linenos">1576</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1577"><a href="#Generator-1577"><span class="linenos">1577</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Generator-1578"><a href="#Generator-1578"><span class="linenos">1578</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1579"><a href="#Generator-1579"><span class="linenos">1579</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1580"><a href="#Generator-1580"><span class="linenos">1580</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
+</span><span id="Generator-1581"><a href="#Generator-1581"><span class="linenos">1581</span></a>
+</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">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">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-1585"><a href="#Generator-1585"><span class="linenos">1585</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-1586"><a href="#Generator-1586"><span class="linenos">1586</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-1587"><a href="#Generator-1587"><span class="linenos">1587</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="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1588"><a href="#Generator-1588"><span class="linenos">1588</span></a> <span class="k">return</span> <span class="n">text</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">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1591"><a href="#Generator-1591"><span class="linenos">1591</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-1592"><a href="#Generator-1592"><span class="linenos">1592</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESCAPE_LINE_BREAK</span><span class="p">:</span>
+</span><span id="Generator-1593"><a href="#Generator-1593"><span class="linenos">1593</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="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
+</span><span id="Generator-1594"><a href="#Generator-1594"><span class="linenos">1594</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-1595"><a href="#Generator-1595"><span class="linenos">1595</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-1596"><a href="#Generator-1596"><span class="linenos">1596</span></a> <span class="k">return</span> <span class="n">text</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">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-1599"><a href="#Generator-1599"><span class="linenos">1599</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-1600"><a href="#Generator-1600"><span class="linenos">1600</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-1601"><a href="#Generator-1601"><span class="linenos">1601</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-1602"><a href="#Generator-1602"><span class="linenos">1602</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-1603"><a href="#Generator-1603"><span class="linenos">1603</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-1604"><a href="#Generator-1604"><span class="linenos">1604</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-1605"><a href="#Generator-1605"><span class="linenos">1605</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-1606"><a href="#Generator-1606"><span class="linenos">1606</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-1607"><a href="#Generator-1607"><span class="linenos">1607</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-1608"><a href="#Generator-1608"><span class="linenos">1608</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-1609"><a href="#Generator-1609"><span class="linenos">1609</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-1610"><a href="#Generator-1610"><span class="linenos">1610</span></a>
+</span><span id="Generator-1611"><a href="#Generator-1611"><span class="linenos">1611</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-1612"><a href="#Generator-1612"><span class="linenos">1612</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="Generator-1613"><a href="#Generator-1613"><span class="linenos">1613</span></a>
+</span><span id="Generator-1614"><a href="#Generator-1614"><span class="linenos">1614</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-1615"><a href="#Generator-1615"><span class="linenos">1615</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-1616"><a href="#Generator-1616"><span class="linenos">1616</span></a>
+</span><span id="Generator-1617"><a href="#Generator-1617"><span class="linenos">1617</span></a> <span class="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-1618"><a href="#Generator-1618"><span class="linenos">1618</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1619"><a href="#Generator-1619"><span class="linenos">1619</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-1620"><a href="#Generator-1620"><span class="linenos">1620</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-1621"><a href="#Generator-1621"><span class="linenos">1621</span></a>
+</span><span id="Generator-1622"><a href="#Generator-1622"><span class="linenos">1622</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-1623"><a href="#Generator-1623"><span class="linenos">1623</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-1624"><a href="#Generator-1624"><span class="linenos">1624</span></a>
-</span><span id="Generator-1625"><a href="#Generator-1625"><span class="linenos">1625</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-1626"><a href="#Generator-1626"><span class="linenos">1626</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-1625"><a href="#Generator-1625"><span class="linenos">1625</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-1626"><a href="#Generator-1626"><span class="linenos">1626</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-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="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
-</span><span id="Generator-1629"><a href="#Generator-1629"><span class="linenos">1629</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator-1628"><a href="#Generator-1628"><span class="linenos">1628</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-1629"><a href="#Generator-1629"><span class="linenos">1629</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-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">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-1632"><a href="#Generator-1632"><span class="linenos">1632</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)))</span>
-</span><span id="Generator-1633"><a href="#Generator-1633"><span class="linenos">1633</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-1634"><a href="#Generator-1634"><span class="linenos">1634</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Generator-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="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-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="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1639"><a href="#Generator-1639"><span class="linenos">1639</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
-</span><span id="Generator-1640"><a href="#Generator-1640"><span class="linenos">1640</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
-</span><span id="Generator-1641"><a href="#Generator-1641"><span class="linenos">1641</span></a> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Generator-1642"><a href="#Generator-1642"><span class="linenos">1642</span></a> <span class="p">)</span>
-</span><span id="Generator-1643"><a href="#Generator-1643"><span class="linenos">1643</span></a>
-</span><span id="Generator-1644"><a href="#Generator-1644"><span class="linenos">1644</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator-1645"><a href="#Generator-1645"><span class="linenos">1645</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="Generator-1646"><a href="#Generator-1646"><span class="linenos">1646</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator-1647"><a href="#Generator-1647"><span class="linenos">1647</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-1648"><a href="#Generator-1648"><span class="linenos">1648</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator-1649"><a href="#Generator-1649"><span class="linenos">1649</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-1650"><a href="#Generator-1650"><span class="linenos">1650</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-1651"><a href="#Generator-1651"><span class="linenos">1651</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-1652"><a href="#Generator-1652"><span class="linenos">1652</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator-1653"><a href="#Generator-1653"><span class="linenos">1653</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-1654"><a href="#Generator-1654"><span class="linenos">1654</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
-</span><span id="Generator-1655"><a href="#Generator-1655"><span class="linenos">1655</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator-1656"><a href="#Generator-1656"><span class="linenos">1656</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-1657"><a href="#Generator-1657"><span class="linenos">1657</span></a> <span class="p">)</span>
-</span><span id="Generator-1658"><a href="#Generator-1658"><span class="linenos">1658</span></a>
-</span><span id="Generator-1659"><a href="#Generator-1659"><span class="linenos">1659</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Generator-1660"><a href="#Generator-1660"><span class="linenos">1660</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Generator-1661"><a href="#Generator-1661"><span class="linenos">1661</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-1662"><a href="#Generator-1662"><span class="linenos">1662</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator-1663"><a href="#Generator-1663"><span class="linenos">1663</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-1664"><a href="#Generator-1664"><span class="linenos">1664</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-1665"><a href="#Generator-1665"><span class="linenos">1665</span></a> <span class="p">]</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">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-1668"><a href="#Generator-1668"><span class="linenos">1668</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator-1669"><a href="#Generator-1669"><span class="linenos">1669</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-1670"><a href="#Generator-1670"><span class="linenos">1670</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-1671"><a href="#Generator-1671"><span class="linenos">1671</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-1672"><a href="#Generator-1672"><span class="linenos">1672</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-1673"><a href="#Generator-1673"><span class="linenos">1673</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-1674"><a href="#Generator-1674"><span class="linenos">1674</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-1675"><a href="#Generator-1675"><span class="linenos">1675</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-1631"><a href="#Generator-1631"><span class="linenos">1631</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-1632"><a href="#Generator-1632"><span class="linenos">1632</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-1633"><a href="#Generator-1633"><span class="linenos">1633</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-1634"><a href="#Generator-1634"><span class="linenos">1634</span></a>
+</span><span id="Generator-1635"><a href="#Generator-1635"><span class="linenos">1635</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-1636"><a href="#Generator-1636"><span class="linenos">1636</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-1637"><a href="#Generator-1637"><span class="linenos">1637</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-1638"><a href="#Generator-1638"><span class="linenos">1638</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-1639"><a href="#Generator-1639"><span class="linenos">1639</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-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="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-1642"><a href="#Generator-1642"><span class="linenos">1642</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1643"><a href="#Generator-1643"><span class="linenos">1643</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-1644"><a href="#Generator-1644"><span class="linenos">1644</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-1645"><a href="#Generator-1645"><span class="linenos">1645</span></a> <span class="p">):</span>
+</span><span id="Generator-1646"><a href="#Generator-1646"><span class="linenos">1646</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-1647"><a href="#Generator-1647"><span class="linenos">1647</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Generator-1648"><a href="#Generator-1648"><span class="linenos">1648</span></a> <span class="n">nulls_last</span>
+</span><span id="Generator-1649"><a href="#Generator-1649"><span class="linenos">1649</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-1650"><a href="#Generator-1650"><span class="linenos">1650</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="Generator-1651"><a href="#Generator-1651"><span class="linenos">1651</span></a> <span class="p">):</span>
+</span><span id="Generator-1652"><a href="#Generator-1652"><span class="linenos">1652</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-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">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-1655"><a href="#Generator-1655"><span class="linenos">1655</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="Generator-1656"><a href="#Generator-1656"><span class="linenos">1656</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-1657"><a href="#Generator-1657"><span class="linenos">1657</span></a> <span class="p">)</span>
+</span><span id="Generator-1658"><a href="#Generator-1658"><span class="linenos">1658</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1659"><a href="#Generator-1659"><span class="linenos">1659</span></a>
+</span><span id="Generator-1660"><a href="#Generator-1660"><span class="linenos">1660</span></a> <span class="k">return</span> <span class="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-1661"><a href="#Generator-1661"><span class="linenos">1661</span></a>
+</span><span id="Generator-1662"><a href="#Generator-1662"><span class="linenos">1662</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-1663"><a href="#Generator-1663"><span class="linenos">1663</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-1664"><a href="#Generator-1664"><span class="linenos">1664</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-1665"><a href="#Generator-1665"><span class="linenos">1665</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-1666"><a href="#Generator-1666"><span class="linenos">1666</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-1667"><a href="#Generator-1667"><span class="linenos">1667</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-1668"><a href="#Generator-1668"><span class="linenos">1668</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-1669"><a href="#Generator-1669"><span class="linenos">1669</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-1670"><a href="#Generator-1670"><span class="linenos">1670</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-1671"><a href="#Generator-1671"><span class="linenos">1671</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-1672"><a href="#Generator-1672"><span class="linenos">1672</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-1673"><a href="#Generator-1673"><span class="linenos">1673</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator-1674"><a href="#Generator-1674"><span class="linenos">1674</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-1675"><a href="#Generator-1675"><span class="linenos">1675</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-1676"><a href="#Generator-1676"><span class="linenos">1676</span></a> <span class="p">]</span>
-</span><span id="Generator-1677"><a href="#Generator-1677"><span class="linenos">1677</span></a>
-</span><span id="Generator-1678"><a href="#Generator-1678"><span class="linenos">1678</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-1679"><a href="#Generator-1679"><span class="linenos">1679</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-1680"><a href="#Generator-1680"><span class="linenos">1680</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1681"><a href="#Generator-1681"><span class="linenos">1681</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
-</span><span id="Generator-1682"><a href="#Generator-1682"><span class="linenos">1682</span></a>
-</span><span id="Generator-1683"><a href="#Generator-1683"><span class="linenos">1683</span></a> <span class="k">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-1684"><a href="#Generator-1684"><span class="linenos">1684</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-1685"><a href="#Generator-1685"><span class="linenos">1685</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-1686"><a href="#Generator-1686"><span class="linenos">1686</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-1687"><a href="#Generator-1687"><span class="linenos">1687</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator-1688"><a href="#Generator-1688"><span class="linenos">1688</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-1689"><a href="#Generator-1689"><span class="linenos">1689</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1690"><a href="#Generator-1690"><span class="linenos">1690</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1691"><a href="#Generator-1691"><span class="linenos">1691</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator-1692"><a href="#Generator-1692"><span class="linenos">1692</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1693"><a href="#Generator-1693"><span class="linenos">1693</span></a> <span class="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="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-1677"><a href="#Generator-1677"><span class="linenos">1677</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-1678"><a href="#Generator-1678"><span class="linenos">1678</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-1679"><a href="#Generator-1679"><span class="linenos">1679</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-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 class="n">partition</span><span class="p">,</span>
+</span><span id="Generator-1682"><a href="#Generator-1682"><span class="linenos">1682</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="Generator-1683"><a href="#Generator-1683"><span class="linenos">1683</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="Generator-1684"><a href="#Generator-1684"><span class="linenos">1684</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="Generator-1685"><a href="#Generator-1685"><span class="linenos">1685</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="Generator-1686"><a href="#Generator-1686"><span class="linenos">1686</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="Generator-1687"><a href="#Generator-1687"><span class="linenos">1687</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="Generator-1688"><a href="#Generator-1688"><span class="linenos">1688</span></a> <span class="p">)</span>
+</span><span id="Generator-1689"><a href="#Generator-1689"><span class="linenos">1689</span></a> <span class="p">)</span>
+</span><span id="Generator-1690"><a href="#Generator-1690"><span class="linenos">1690</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-1691"><a href="#Generator-1691"><span class="linenos">1691</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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-1692"><a href="#Generator-1692"><span class="linenos">1692</span></a> <span class="k">return</span> <span class="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-1693"><a href="#Generator-1693"><span class="linenos">1693</span></a>
+</span><span id="Generator-1694"><a href="#Generator-1694"><span class="linenos">1694</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-1695"><a href="#Generator-1695"><span class="linenos">1695</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
</span><span id="Generator-1696"><a href="#Generator-1696"><span class="linenos">1696</span></a>
-</span><span id="Generator-1697"><a href="#Generator-1697"><span class="linenos">1697</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator-1698"><a href="#Generator-1698"><span class="linenos">1698</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
-</span><span id="Generator-1699"><a href="#Generator-1699"><span class="linenos">1699</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1700"><a href="#Generator-1700"><span class="linenos">1700</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1701"><a href="#Generator-1701"><span class="linenos">1701</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
-</span><span id="Generator-1702"><a href="#Generator-1702"><span class="linenos">1702</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="Generator-1703"><a href="#Generator-1703"><span class="linenos">1703</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator-1704"><a href="#Generator-1704"><span class="linenos">1704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-1705"><a href="#Generator-1705"><span class="linenos">1705</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="Generator-1706"><a href="#Generator-1706"><span class="linenos">1706</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator-1707"><a href="#Generator-1707"><span class="linenos">1707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
-</span><span id="Generator-1708"><a href="#Generator-1708"><span class="linenos">1708</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="Generator-1709"><a href="#Generator-1709"><span class="linenos">1709</span></a> <span class="p">)</span>
-</span><span id="Generator-1710"><a href="#Generator-1710"><span class="linenos">1710</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator-1711"><a href="#Generator-1711"><span class="linenos">1711</span></a> <span class="p">]</span>
-</span><span id="Generator-1712"><a href="#Generator-1712"><span class="linenos">1712</span></a> <span class="p">)</span>
-</span><span id="Generator-1713"><a href="#Generator-1713"><span class="linenos">1713</span></a> <span class="p">)</span>
-</span><span id="Generator-1714"><a href="#Generator-1714"><span class="linenos">1714</span></a> <span class="p">]</span>
-</span><span id="Generator-1715"><a href="#Generator-1715"><span class="linenos">1715</span></a> <span class="p">)</span>
-</span><span id="Generator-1716"><a href="#Generator-1716"><span class="linenos">1716</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1717"><a href="#Generator-1717"><span class="linenos">1717</span></a>
-</span><span id="Generator-1718"><a href="#Generator-1718"><span class="linenos">1718</span></a> <span class="n">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-1719"><a href="#Generator-1719"><span class="linenos">1719</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-1720"><a href="#Generator-1720"><span class="linenos">1720</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-1721"><a href="#Generator-1721"><span class="linenos">1721</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator-1722"><a href="#Generator-1722"><span class="linenos">1722</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-1723"><a href="#Generator-1723"><span class="linenos">1723</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-1724"><a href="#Generator-1724"><span class="linenos">1724</span></a> <span class="p">)</span>
-</span><span id="Generator-1725"><a href="#Generator-1725"><span class="linenos">1725</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-1726"><a href="#Generator-1726"><span class="linenos">1726</span></a>
-</span><span id="Generator-1727"><a href="#Generator-1727"><span class="linenos">1727</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-1728"><a href="#Generator-1728"><span class="linenos">1728</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1729"><a href="#Generator-1729"><span class="linenos">1729</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-1730"><a href="#Generator-1730"><span class="linenos">1730</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1731"><a href="#Generator-1731"><span class="linenos">1731</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1732"><a href="#Generator-1732"><span class="linenos">1732</span></a>
-</span><span id="Generator-1733"><a href="#Generator-1733"><span class="linenos">1733</span></a> <span class="k">def</span> <span class="nf">schema_columns_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-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">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-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="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-1737"><a href="#Generator-1737"><span class="linenos">1737</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-1738"><a href="#Generator-1738"><span class="linenos">1738</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-1739"><a href="#Generator-1739"><span class="linenos">1739</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-1740"><a href="#Generator-1740"><span class="linenos">1740</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-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;*</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-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">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-1744"><a href="#Generator-1744"><span class="linenos">1744</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1745"><a href="#Generator-1745"><span class="linenos">1745</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-1746"><a href="#Generator-1746"><span class="linenos">1746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1697"><a href="#Generator-1697"><span class="linenos">1697</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
+</span><span id="Generator-1698"><a href="#Generator-1698"><span class="linenos">1698</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator-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">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-1701"><a href="#Generator-1701"><span class="linenos">1701</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)))</span>
+</span><span id="Generator-1702"><a href="#Generator-1702"><span class="linenos">1702</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-1703"><a href="#Generator-1703"><span class="linenos">1703</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Generator-1704"><a href="#Generator-1704"><span class="linenos">1704</span></a>
+</span><span id="Generator-1705"><a href="#Generator-1705"><span class="linenos">1705</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-1706"><a href="#Generator-1706"><span class="linenos">1706</span></a>
+</span><span id="Generator-1707"><a href="#Generator-1707"><span class="linenos">1707</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1708"><a href="#Generator-1708"><span class="linenos">1708</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
+</span><span id="Generator-1709"><a href="#Generator-1709"><span class="linenos">1709</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</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="p">)</span>
+</span><span id="Generator-1712"><a href="#Generator-1712"><span class="linenos">1712</span></a>
+</span><span id="Generator-1713"><a href="#Generator-1713"><span class="linenos">1713</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator-1714"><a href="#Generator-1714"><span class="linenos">1714</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="Generator-1715"><a href="#Generator-1715"><span class="linenos">1715</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator-1716"><a href="#Generator-1716"><span class="linenos">1716</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">),</span>
+</span><span id="Generator-1717"><a href="#Generator-1717"><span class="linenos">1717</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-1718"><a href="#Generator-1718"><span class="linenos">1718</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator-1719"><a href="#Generator-1719"><span class="linenos">1719</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-1720"><a href="#Generator-1720"><span class="linenos">1720</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-1721"><a href="#Generator-1721"><span class="linenos">1721</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-1722"><a href="#Generator-1722"><span class="linenos">1722</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator-1723"><a href="#Generator-1723"><span class="linenos">1723</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-1724"><a href="#Generator-1724"><span class="linenos">1724</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
+</span><span id="Generator-1725"><a href="#Generator-1725"><span class="linenos">1725</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator-1726"><a href="#Generator-1726"><span class="linenos">1726</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-1727"><a href="#Generator-1727"><span class="linenos">1727</span></a> <span class="p">)</span>
+</span><span id="Generator-1728"><a href="#Generator-1728"><span class="linenos">1728</span></a>
+</span><span id="Generator-1729"><a href="#Generator-1729"><span class="linenos">1729</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Generator-1730"><a href="#Generator-1730"><span class="linenos">1730</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Generator-1731"><a href="#Generator-1731"><span class="linenos">1731</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-1732"><a href="#Generator-1732"><span class="linenos">1732</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator-1733"><a href="#Generator-1733"><span class="linenos">1733</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-1734"><a href="#Generator-1734"><span class="linenos">1734</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-1735"><a href="#Generator-1735"><span class="linenos">1735</span></a> <span class="p">]</span>
+</span><span id="Generator-1736"><a href="#Generator-1736"><span class="linenos">1736</span></a>
+</span><span id="Generator-1737"><a href="#Generator-1737"><span class="linenos">1737</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-1738"><a href="#Generator-1738"><span class="linenos">1738</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator-1739"><a href="#Generator-1739"><span class="linenos">1739</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-1740"><a href="#Generator-1740"><span class="linenos">1740</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;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-1741"><a href="#Generator-1741"><span class="linenos">1741</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-1742"><a href="#Generator-1742"><span class="linenos">1742</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1743"><a href="#Generator-1743"><span class="linenos">1743</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-1744"><a href="#Generator-1744"><span class="linenos">1744</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-1745"><a href="#Generator-1745"><span class="linenos">1745</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-1746"><a href="#Generator-1746"><span class="linenos">1746</span></a> <span class="p">]</span>
</span><span id="Generator-1747"><a href="#Generator-1747"><span class="linenos">1747</span></a>
-</span><span id="Generator-1748"><a href="#Generator-1748"><span class="linenos">1748</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-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="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-1751"><a href="#Generator-1751"><span class="linenos">1751</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator-1752"><a href="#Generator-1752"><span class="linenos">1752</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-1753"><a href="#Generator-1753"><span class="linenos">1753</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-1754"><a href="#Generator-1754"><span class="linenos">1754</span></a>
-</span><span id="Generator-1755"><a href="#Generator-1755"><span class="linenos">1755</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-1756"><a href="#Generator-1756"><span class="linenos">1756</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-1757"><a href="#Generator-1757"><span class="linenos">1757</span></a>
-</span><span id="Generator-1758"><a href="#Generator-1758"><span class="linenos">1758</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-1759"><a href="#Generator-1759"><span class="linenos">1759</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-1760"><a href="#Generator-1760"><span class="linenos">1760</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-1761"><a href="#Generator-1761"><span class="linenos">1761</span></a>
-</span><span id="Generator-1762"><a href="#Generator-1762"><span class="linenos">1762</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1763"><a href="#Generator-1763"><span class="linenos">1763</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1748"><a href="#Generator-1748"><span class="linenos">1748</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-1749"><a href="#Generator-1749"><span class="linenos">1749</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-1750"><a href="#Generator-1750"><span class="linenos">1750</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1751"><a href="#Generator-1751"><span class="linenos">1751</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
+</span><span id="Generator-1752"><a href="#Generator-1752"><span class="linenos">1752</span></a>
+</span><span id="Generator-1753"><a href="#Generator-1753"><span class="linenos">1753</span></a> <span class="k">def</span> <span class="nf">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-1754"><a href="#Generator-1754"><span class="linenos">1754</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-1755"><a href="#Generator-1755"><span class="linenos">1755</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-1756"><a href="#Generator-1756"><span class="linenos">1756</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-1757"><a href="#Generator-1757"><span class="linenos">1757</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator-1758"><a href="#Generator-1758"><span class="linenos">1758</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-1759"><a href="#Generator-1759"><span class="linenos">1759</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1760"><a href="#Generator-1760"><span class="linenos">1760</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1761"><a href="#Generator-1761"><span class="linenos">1761</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator-1762"><a href="#Generator-1762"><span class="linenos">1762</span></a> <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="p">)</span>
</span><span id="Generator-1764"><a href="#Generator-1764"><span class="linenos">1764</span></a>
-</span><span id="Generator-1765"><a href="#Generator-1765"><span class="linenos">1765</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
-</span><span id="Generator-1766"><a href="#Generator-1766"><span class="linenos">1766</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-1767"><a href="#Generator-1767"><span class="linenos">1767</span></a>
-</span><span id="Generator-1768"><a href="#Generator-1768"><span class="linenos">1768</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-1769"><a href="#Generator-1769"><span class="linenos">1769</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-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="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-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">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-1773"><a href="#Generator-1773"><span class="linenos">1773</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-1774"><a href="#Generator-1774"><span class="linenos">1774</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-1775"><a href="#Generator-1775"><span class="linenos">1775</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-1776"><a href="#Generator-1776"><span class="linenos">1776</span></a> <span class="p">)</span>
-</span><span id="Generator-1777"><a href="#Generator-1777"><span class="linenos">1777</span></a>
-</span><span id="Generator-1778"><a href="#Generator-1778"><span class="linenos">1778</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-1779"><a href="#Generator-1779"><span class="linenos">1779</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-1780"><a href="#Generator-1780"><span class="linenos">1780</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-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;UNION</span><span class="si">{</span><span class="n">kind</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">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-1784"><a href="#Generator-1784"><span class="linenos">1784</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-1785"><a href="#Generator-1785"><span class="linenos">1785</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-1786"><a href="#Generator-1786"><span class="linenos">1786</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-1787"><a href="#Generator-1787"><span class="linenos">1787</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-1788"><a href="#Generator-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">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-1789"><a href="#Generator-1789"><span class="linenos">1789</span></a> <span class="k">else</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="bp">self</span><span class="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-1791"><a href="#Generator-1791"><span class="linenos">1791</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-1792"><a href="#Generator-1792"><span class="linenos">1792</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-1793"><a href="#Generator-1793"><span class="linenos">1793</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-1794"><a href="#Generator-1794"><span class="linenos">1794</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-1795"><a href="#Generator-1795"><span class="linenos">1795</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-1765"><a href="#Generator-1765"><span class="linenos">1765</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-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">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator-1768"><a href="#Generator-1768"><span class="linenos">1768</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
+</span><span id="Generator-1769"><a href="#Generator-1769"><span class="linenos">1769</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1770"><a href="#Generator-1770"><span class="linenos">1770</span></a> <span class="k">else</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="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
+</span><span id="Generator-1772"><a href="#Generator-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">expressions</span><span class="p">(</span>
+</span><span id="Generator-1773"><a href="#Generator-1773"><span class="linenos">1773</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator-1774"><a href="#Generator-1774"><span class="linenos">1774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-1775"><a href="#Generator-1775"><span class="linenos">1775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="Generator-1776"><a href="#Generator-1776"><span class="linenos">1776</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator-1777"><a href="#Generator-1777"><span class="linenos">1777</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
+</span><span id="Generator-1778"><a href="#Generator-1778"><span class="linenos">1778</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="Generator-1779"><a href="#Generator-1779"><span class="linenos">1779</span></a> <span class="p">)</span>
+</span><span id="Generator-1780"><a href="#Generator-1780"><span class="linenos">1780</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator-1781"><a href="#Generator-1781"><span class="linenos">1781</span></a> <span class="p">]</span>
+</span><span id="Generator-1782"><a href="#Generator-1782"><span class="linenos">1782</span></a> <span class="p">)</span>
+</span><span id="Generator-1783"><a href="#Generator-1783"><span class="linenos">1783</span></a> <span class="p">)</span>
+</span><span id="Generator-1784"><a href="#Generator-1784"><span class="linenos">1784</span></a> <span class="p">]</span>
+</span><span id="Generator-1785"><a href="#Generator-1785"><span class="linenos">1785</span></a> <span class="p">)</span>
+</span><span id="Generator-1786"><a href="#Generator-1786"><span class="linenos">1786</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&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="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-1789"><a href="#Generator-1789"><span class="linenos">1789</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-1790"><a href="#Generator-1790"><span class="linenos">1790</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1791"><a href="#Generator-1791"><span class="linenos">1791</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator-1792"><a href="#Generator-1792"><span class="linenos">1792</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-1793"><a href="#Generator-1793"><span class="linenos">1793</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-1794"><a href="#Generator-1794"><span class="linenos">1794</span></a> <span class="p">)</span>
+</span><span id="Generator-1795"><a href="#Generator-1795"><span class="linenos">1795</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-1796"><a href="#Generator-1796"><span class="linenos">1796</span></a>
-</span><span id="Generator-1797"><a href="#Generator-1797"><span class="linenos">1797</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-1798"><a href="#Generator-1798"><span class="linenos">1798</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-1799"><a href="#Generator-1799"><span class="linenos">1799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="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-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">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-1802"><a href="#Generator-1802"><span class="linenos">1802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1803"><a href="#Generator-1803"><span class="linenos">1803</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-1804"><a href="#Generator-1804"><span class="linenos">1804</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-1805"><a href="#Generator-1805"><span class="linenos">1805</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1806"><a href="#Generator-1806"><span class="linenos">1806</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;spec&quot;</span><span class="p">)</span>
-</span><span id="Generator-1807"><a href="#Generator-1807"><span class="linenos">1807</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-1808"><a href="#Generator-1808"><span class="linenos">1808</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-1809"><a href="#Generator-1809"><span class="linenos">1809</span></a>
-</span><span id="Generator-1810"><a href="#Generator-1810"><span class="linenos">1810</span></a> <span class="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-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="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-1813"><a href="#Generator-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1814"><a href="#Generator-1814"><span class="linenos">1814</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1815"><a href="#Generator-1815"><span class="linenos">1815</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1816"><a href="#Generator-1816"><span class="linenos">1816</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-1797"><a href="#Generator-1797"><span class="linenos">1797</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-1798"><a href="#Generator-1798"><span class="linenos">1798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1799"><a href="#Generator-1799"><span class="linenos">1799</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-1800"><a href="#Generator-1800"><span class="linenos">1800</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-1801"><a href="#Generator-1801"><span class="linenos">1801</span></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-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="k">def</span> <span class="nf">schema_columns_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-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="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-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">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-1807"><a href="#Generator-1807"><span class="linenos">1807</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-1808"><a href="#Generator-1808"><span class="linenos">1808</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-1809"><a href="#Generator-1809"><span class="linenos">1809</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-1810"><a href="#Generator-1810"><span class="linenos">1810</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-1811"><a href="#Generator-1811"><span class="linenos">1811</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-1812"><a href="#Generator-1812"><span class="linenos">1812</span></a>
+</span><span id="Generator-1813"><a href="#Generator-1813"><span class="linenos">1813</span></a> <span class="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-1814"><a href="#Generator-1814"><span class="linenos">1814</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1815"><a href="#Generator-1815"><span class="linenos">1815</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-1816"><a href="#Generator-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="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-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">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-1819"><a href="#Generator-1819"><span class="linenos">1819</span></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-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="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator-1822"><a href="#Generator-1822"><span class="linenos">1822</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-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">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-1825"><a href="#Generator-1825"><span class="linenos">1825</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-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;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-1818"><a href="#Generator-1818"><span class="linenos">1818</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-1819"><a href="#Generator-1819"><span class="linenos">1819</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1820"><a href="#Generator-1820"><span class="linenos">1820</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-1821"><a href="#Generator-1821"><span class="linenos">1821</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator-1822"><a href="#Generator-1822"><span class="linenos">1822</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-1823"><a href="#Generator-1823"><span class="linenos">1823</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-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">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-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="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-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">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-1829"><a href="#Generator-1829"><span class="linenos">1829</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-1830"><a href="#Generator-1830"><span class="linenos">1830</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-1831"><a href="#Generator-1831"><span class="linenos">1831</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1832"><a href="#Generator-1832"><span class="linenos">1832</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-1833"><a href="#Generator-1833"><span class="linenos">1833</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="Generator-1834"><a href="#Generator-1834"><span class="linenos">1834</span></a> <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="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-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">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-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">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-1840"><a href="#Generator-1840"><span class="linenos">1840</span></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-1828"><a href="#Generator-1828"><span class="linenos">1828</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-1829"><a href="#Generator-1829"><span class="linenos">1829</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-1830"><a href="#Generator-1830"><span class="linenos">1830</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</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-1831"><a href="#Generator-1831"><span class="linenos">1831</span></a>
+</span><span id="Generator-1832"><a href="#Generator-1832"><span class="linenos">1832</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1833"><a href="#Generator-1833"><span class="linenos">1833</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1834"><a href="#Generator-1834"><span class="linenos">1834</span></a>
+</span><span id="Generator-1835"><a href="#Generator-1835"><span class="linenos">1835</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
+</span><span id="Generator-1836"><a href="#Generator-1836"><span class="linenos">1836</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-1837"><a href="#Generator-1837"><span class="linenos">1837</span></a>
+</span><span id="Generator-1838"><a href="#Generator-1838"><span class="linenos">1838</span></a> <span class="k">def</span> <span class="nf">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-1839"><a href="#Generator-1839"><span class="linenos">1839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-1840"><a href="#Generator-1840"><span class="linenos">1840</span></a> <span class="k">return</span> <span class="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-1841"><a href="#Generator-1841"><span class="linenos">1841</span></a>
-</span><span id="Generator-1842"><a href="#Generator-1842"><span class="linenos">1842</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-1843"><a href="#Generator-1843"><span class="linenos">1843</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1844"><a href="#Generator-1844"><span class="linenos">1844</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-1845"><a href="#Generator-1845"><span class="linenos">1845</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-1846"><a href="#Generator-1846"><span class="linenos">1846</span></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-1842"><a href="#Generator-1842"><span class="linenos">1842</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-1843"><a href="#Generator-1843"><span class="linenos">1843</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-1844"><a href="#Generator-1844"><span class="linenos">1844</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1845"><a href="#Generator-1845"><span class="linenos">1845</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-1846"><a href="#Generator-1846"><span class="linenos">1846</span></a> <span class="p">)</span>
</span><span id="Generator-1847"><a href="#Generator-1847"><span class="linenos">1847</span></a>
-</span><span id="Generator-1848"><a href="#Generator-1848"><span class="linenos">1848</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-1849"><a href="#Generator-1849"><span class="linenos">1849</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-1850"><a href="#Generator-1850"><span class="linenos">1850</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-1851"><a href="#Generator-1851"><span class="linenos">1851</span></a>
-</span><span id="Generator-1852"><a href="#Generator-1852"><span class="linenos">1852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span 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-1848"><a href="#Generator-1848"><span class="linenos">1848</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-1849"><a href="#Generator-1849"><span class="linenos">1849</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-1850"><a href="#Generator-1850"><span class="linenos">1850</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-1851"><a href="#Generator-1851"><span class="linenos">1851</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-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;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-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">safebracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="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">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-1858"><a href="#Generator-1858"><span class="linenos">1858</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-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">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-1861"><a href="#Generator-1861"><span class="linenos">1861</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&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="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-1863"><a href="#Generator-1863"><span class="linenos">1863</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-1864"><a href="#Generator-1864"><span class="linenos">1864</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-1865"><a href="#Generator-1865"><span class="linenos">1865</span></a>
-</span><span id="Generator-1866"><a href="#Generator-1866"><span class="linenos">1866</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-1867"><a href="#Generator-1867"><span class="linenos">1867</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-1868"><a href="#Generator-1868"><span class="linenos">1868</span></a>
-</span><span id="Generator-1869"><a href="#Generator-1869"><span class="linenos">1869</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-1870"><a href="#Generator-1870"><span class="linenos">1870</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1871"><a href="#Generator-1871"><span class="linenos">1871</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-1872"><a href="#Generator-1872"><span class="linenos">1872</span></a>
-</span><span id="Generator-1873"><a href="#Generator-1873"><span class="linenos">1873</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-1874"><a href="#Generator-1874"><span class="linenos">1874</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-1875"><a href="#Generator-1875"><span class="linenos">1875</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-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="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-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">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1880"><a href="#Generator-1880"><span class="linenos">1880</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-1881"><a href="#Generator-1881"><span class="linenos">1881</span></a>
-</span><span id="Generator-1882"><a href="#Generator-1882"><span class="linenos">1882</span></a> <span class="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-1883"><a href="#Generator-1883"><span class="linenos">1883</span></a>
-</span><span id="Generator-1884"><a href="#Generator-1884"><span class="linenos">1884</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-1885"><a href="#Generator-1885"><span class="linenos">1885</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-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">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-1854"><a href="#Generator-1854"><span class="linenos">1854</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-1855"><a href="#Generator-1855"><span class="linenos">1855</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-1856"><a href="#Generator-1856"><span class="linenos">1856</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-1857"><a href="#Generator-1857"><span class="linenos">1857</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-1858"><a href="#Generator-1858"><span class="linenos">1858</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-1859"><a href="#Generator-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">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-1860"><a href="#Generator-1860"><span class="linenos">1860</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1861"><a href="#Generator-1861"><span class="linenos">1861</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-1862"><a href="#Generator-1862"><span class="linenos">1862</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-1863"><a href="#Generator-1863"><span class="linenos">1863</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-1864"><a href="#Generator-1864"><span class="linenos">1864</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-1865"><a href="#Generator-1865"><span class="linenos">1865</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-1866"><a href="#Generator-1866"><span class="linenos">1866</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-1867"><a href="#Generator-1867"><span class="linenos">1867</span></a>
+</span><span id="Generator-1868"><a href="#Generator-1868"><span class="linenos">1868</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-1869"><a href="#Generator-1869"><span class="linenos">1869</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-1870"><a href="#Generator-1870"><span class="linenos">1870</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-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">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-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 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-1875"><a href="#Generator-1875"><span class="linenos">1875</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-1876"><a href="#Generator-1876"><span class="linenos">1876</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1877"><a href="#Generator-1877"><span class="linenos">1877</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;spec&quot;</span><span class="p">)</span>
+</span><span id="Generator-1878"><a href="#Generator-1878"><span class="linenos">1878</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-1879"><a href="#Generator-1879"><span class="linenos">1879</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-1880"><a href="#Generator-1880"><span class="linenos">1880</span></a>
+</span><span id="Generator-1881"><a href="#Generator-1881"><span class="linenos">1881</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-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="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-1884"><a href="#Generator-1884"><span class="linenos">1884</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1885"><a href="#Generator-1885"><span class="linenos">1885</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1886"><a href="#Generator-1886"><span class="linenos">1886</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1887"><a href="#Generator-1887"><span class="linenos">1887</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-1888"><a href="#Generator-1888"><span class="linenos">1888</span></a>
-</span><span id="Generator-1889"><a href="#Generator-1889"><span class="linenos">1889</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-1890"><a href="#Generator-1890"><span class="linenos">1890</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1891"><a href="#Generator-1891"><span class="linenos">1891</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-1892"><a href="#Generator-1892"><span class="linenos">1892</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-1893"><a href="#Generator-1893"><span class="linenos">1893</span></a>
-</span><span id="Generator-1894"><a href="#Generator-1894"><span class="linenos">1894</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-1895"><a href="#Generator-1895"><span class="linenos">1895</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-1896"><a href="#Generator-1896"><span class="linenos">1896</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-1897"><a href="#Generator-1897"><span class="linenos">1897</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-1889"><a href="#Generator-1889"><span class="linenos">1889</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-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;</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-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="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator-1893"><a href="#Generator-1893"><span class="linenos">1893</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-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="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-1896"><a href="#Generator-1896"><span class="linenos">1896</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-1897"><a href="#Generator-1897"><span class="linenos">1897</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-1898"><a href="#Generator-1898"><span class="linenos">1898</span></a>
-</span><span id="Generator-1899"><a href="#Generator-1899"><span class="linenos">1899</span></a> <span class="k">def</span> <span class="nf">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-1900"><a href="#Generator-1900"><span class="linenos">1900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-1901"><a href="#Generator-1901"><span class="linenos">1901</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-1902"><a href="#Generator-1902"><span class="linenos">1902</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-1903"><a href="#Generator-1903"><span class="linenos">1903</span></a>
-</span><span id="Generator-1904"><a href="#Generator-1904"><span class="linenos">1904</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-1905"><a href="#Generator-1905"><span class="linenos">1905</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-1906"><a href="#Generator-1906"><span class="linenos">1906</span></a>
-</span><span id="Generator-1907"><a href="#Generator-1907"><span class="linenos">1907</span></a> <span class="k">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-1908"><a href="#Generator-1908"><span class="linenos">1908</span></a> <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-1909"><a href="#Generator-1909"><span class="linenos">1909</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-1910"><a href="#Generator-1910"><span class="linenos">1910</span></a> <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-1911"><a href="#Generator-1911"><span class="linenos">1911</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1912"><a href="#Generator-1912"><span class="linenos">1912</span></a> <span class="k">return</span> <span class="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-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">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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">expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator-1916"><a href="#Generator-1916"><span class="linenos">1916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
-</span><span id="Generator-1917"><a href="#Generator-1917"><span class="linenos">1917</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">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-1918"><a href="#Generator-1918"><span class="linenos">1918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-1919"><a href="#Generator-1919"><span class="linenos">1919</span></a>
-</span><span id="Generator-1920"><a href="#Generator-1920"><span class="linenos">1920</span></a> <span class="k">def</span> <span class="nf">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-1921"><a href="#Generator-1921"><span class="linenos">1921</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1922"><a href="#Generator-1922"><span class="linenos">1922</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-1923"><a href="#Generator-1923"><span class="linenos">1923</span></a>
-</span><span id="Generator-1924"><a href="#Generator-1924"><span class="linenos">1924</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-1925"><a href="#Generator-1925"><span class="linenos">1925</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-1926"><a href="#Generator-1926"><span class="linenos">1926</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-1927"><a href="#Generator-1927"><span class="linenos">1927</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-1928"><a href="#Generator-1928"><span class="linenos">1928</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-1929"><a href="#Generator-1929"><span class="linenos">1929</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-1930"><a href="#Generator-1930"><span class="linenos">1930</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-1931"><a href="#Generator-1931"><span class="linenos">1931</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-1932"><a href="#Generator-1932"><span class="linenos">1932</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-1933"><a href="#Generator-1933"><span class="linenos">1933</span></a>
-</span><span id="Generator-1934"><a href="#Generator-1934"><span class="linenos">1934</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-1935"><a href="#Generator-1935"><span class="linenos">1935</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-1936"><a href="#Generator-1936"><span class="linenos">1936</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-1937"><a href="#Generator-1937"><span class="linenos">1937</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-1938"><a href="#Generator-1938"><span class="linenos">1938</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-1899"><a href="#Generator-1899"><span class="linenos">1899</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-1900"><a href="#Generator-1900"><span class="linenos">1900</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-1901"><a href="#Generator-1901"><span class="linenos">1901</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-1902"><a href="#Generator-1902"><span class="linenos">1902</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1903"><a href="#Generator-1903"><span class="linenos">1903</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-1904"><a href="#Generator-1904"><span class="linenos">1904</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="Generator-1905"><a href="#Generator-1905"><span class="linenos">1905</span></a> <span class="p">)</span>
+</span><span id="Generator-1906"><a href="#Generator-1906"><span class="linenos">1906</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-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="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-1909"><a href="#Generator-1909"><span class="linenos">1909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1910"><a href="#Generator-1910"><span class="linenos">1910</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-1911"><a href="#Generator-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">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-1912"><a href="#Generator-1912"><span class="linenos">1912</span></a>
+</span><span id="Generator-1913"><a href="#Generator-1913"><span class="linenos">1913</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-1914"><a href="#Generator-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1915"><a href="#Generator-1915"><span class="linenos">1915</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-1916"><a href="#Generator-1916"><span class="linenos">1916</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-1917"><a href="#Generator-1917"><span class="linenos">1917</span></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-1918"><a href="#Generator-1918"><span class="linenos">1918</span></a>
+</span><span id="Generator-1919"><a href="#Generator-1919"><span class="linenos">1919</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-1920"><a href="#Generator-1920"><span class="linenos">1920</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-1921"><a href="#Generator-1921"><span class="linenos">1921</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-1922"><a href="#Generator-1922"><span class="linenos">1922</span></a>
+</span><span id="Generator-1923"><a href="#Generator-1923"><span class="linenos">1923</span></a> <span class="k">return</span> <span class="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-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">safebracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</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="bp">self</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="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">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-1929"><a href="#Generator-1929"><span class="linenos">1929</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-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="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-1932"><a href="#Generator-1932"><span class="linenos">1932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1933"><a href="#Generator-1933"><span class="linenos">1933</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-1934"><a href="#Generator-1934"><span class="linenos">1934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-1935"><a href="#Generator-1935"><span class="linenos">1935</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-1936"><a href="#Generator-1936"><span class="linenos">1936</span></a>
+</span><span id="Generator-1937"><a href="#Generator-1937"><span class="linenos">1937</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-1938"><a href="#Generator-1938"><span class="linenos">1938</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-1939"><a href="#Generator-1939"><span class="linenos">1939</span></a>
-</span><span id="Generator-1940"><a href="#Generator-1940"><span class="linenos">1940</span></a> <span class="k">def</span> <span class="nf">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-1941"><a href="#Generator-1941"><span class="linenos">1941</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator-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">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)))</span>
+</span><span id="Generator-1940"><a href="#Generator-1940"><span class="linenos">1940</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-1941"><a href="#Generator-1941"><span class="linenos">1941</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1942"><a href="#Generator-1942"><span class="linenos">1942</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-1943"><a href="#Generator-1943"><span class="linenos">1943</span></a>
-</span><span id="Generator-1944"><a href="#Generator-1944"><span class="linenos">1944</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-1945"><a href="#Generator-1945"><span class="linenos">1945</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-1946"><a href="#Generator-1946"><span class="linenos">1946</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-1947"><a href="#Generator-1947"><span class="linenos">1947</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</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-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">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-1950"><a href="#Generator-1950"><span class="linenos">1950</span></a> <span class="k">return</span> <span class="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-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">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-1953"><a href="#Generator-1953"><span class="linenos">1953</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-1954"><a href="#Generator-1954"><span class="linenos">1954</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-1955"><a href="#Generator-1955"><span class="linenos">1955</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-1956"><a href="#Generator-1956"><span class="linenos">1956</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-1957"><a href="#Generator-1957"><span class="linenos">1957</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-1958"><a href="#Generator-1958"><span class="linenos">1958</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1959"><a href="#Generator-1959"><span class="linenos">1959</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1960"><a href="#Generator-1960"><span class="linenos">1960</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-1961"><a href="#Generator-1961"><span class="linenos">1961</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-1962"><a href="#Generator-1962"><span class="linenos">1962</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-1963"><a href="#Generator-1963"><span class="linenos">1963</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-1964"><a href="#Generator-1964"><span class="linenos">1964</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-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">func</span><span class="p">(</span>
-</span><span id="Generator-1966"><a href="#Generator-1966"><span class="linenos">1966</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">,</span>
-</span><span id="Generator-1967"><a href="#Generator-1967"><span class="linenos">1967</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Generator-1968"><a href="#Generator-1968"><span class="linenos">1968</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Generator-1969"><a href="#Generator-1969"><span class="linenos">1969</span></a> <span class="p">)</span>
-</span><span id="Generator-1970"><a href="#Generator-1970"><span class="linenos">1970</span></a>
-</span><span id="Generator-1971"><a href="#Generator-1971"><span class="linenos">1971</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1972"><a href="#Generator-1972"><span class="linenos">1972</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1973"><a href="#Generator-1973"><span class="linenos">1973</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-1974"><a href="#Generator-1974"><span class="linenos">1974</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
-</span><span id="Generator-1975"><a href="#Generator-1975"><span class="linenos">1975</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1976"><a href="#Generator-1976"><span class="linenos">1976</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1977"><a href="#Generator-1977"><span class="linenos">1977</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-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">openjson_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1980"><a href="#Generator-1980"><span class="linenos">1980</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1981"><a href="#Generator-1981"><span class="linenos">1981</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
-</span><span id="Generator-1982"><a href="#Generator-1982"><span class="linenos">1982</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1983"><a href="#Generator-1983"><span class="linenos">1983</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-1984"><a href="#Generator-1984"><span class="linenos">1984</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1985"><a href="#Generator-1985"><span class="linenos">1985</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1986"><a href="#Generator-1986"><span class="linenos">1986</span></a> <span class="k">if</span> <span class="n">expressions</span>
-</span><span id="Generator-1987"><a href="#Generator-1987"><span class="linenos">1987</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1988"><a href="#Generator-1988"><span class="linenos">1988</span></a> <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="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1944"><a href="#Generator-1944"><span class="linenos">1944</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-1945"><a href="#Generator-1945"><span class="linenos">1945</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-1946"><a href="#Generator-1946"><span class="linenos">1946</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-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="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-1949"><a href="#Generator-1949"><span class="linenos">1949</span></a>
+</span><span id="Generator-1950"><a href="#Generator-1950"><span class="linenos">1950</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-1951"><a href="#Generator-1951"><span class="linenos">1951</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-1952"><a href="#Generator-1952"><span class="linenos">1952</span></a>
+</span><span id="Generator-1953"><a href="#Generator-1953"><span class="linenos">1953</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-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">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-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">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-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">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-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">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-1961"><a href="#Generator-1961"><span class="linenos">1961</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1962"><a href="#Generator-1962"><span class="linenos">1962</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-1963"><a href="#Generator-1963"><span class="linenos">1963</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-1964"><a href="#Generator-1964"><span class="linenos">1964</span></a>
+</span><span id="Generator-1965"><a href="#Generator-1965"><span class="linenos">1965</span></a> <span class="k">def</span> <span class="nf">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-1966"><a href="#Generator-1966"><span class="linenos">1966</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-1967"><a href="#Generator-1967"><span class="linenos">1967</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-1968"><a href="#Generator-1968"><span class="linenos">1968</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-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">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-1971"><a href="#Generator-1971"><span class="linenos">1971</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-1972"><a href="#Generator-1972"><span class="linenos">1972</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-1973"><a href="#Generator-1973"><span class="linenos">1973</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-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">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-1976"><a href="#Generator-1976"><span class="linenos">1976</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-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">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-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">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-1980"><a href="#Generator-1980"><span class="linenos">1980</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-1981"><a href="#Generator-1981"><span class="linenos">1981</span></a> <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-1982"><a href="#Generator-1982"><span class="linenos">1982</span></a> <span class="k">else</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">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-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">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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="n">expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator-1987"><a href="#Generator-1987"><span class="linenos">1987</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
+</span><span id="Generator-1988"><a href="#Generator-1988"><span class="linenos">1988</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">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</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">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Generator-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">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-1992"><a href="#Generator-1992"><span class="linenos">1992</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-1993"><a href="#Generator-1993"><span class="linenos">1993</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-1994"><a href="#Generator-1994"><span class="linenos">1994</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-1995"><a href="#Generator-1995"><span class="linenos">1995</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-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">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Generator-1998"><a href="#Generator-1998"><span class="linenos">1998</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-1999"><a href="#Generator-1999"><span class="linenos">1999</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Generator-2000"><a href="#Generator-2000"><span class="linenos">2000</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-2001"><a href="#Generator-2001"><span class="linenos">2001</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Generator-2002"><a href="#Generator-2002"><span class="linenos">2002</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-2003"><a href="#Generator-2003"><span class="linenos">2003</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2004"><a href="#Generator-2004"><span class="linenos">2004</span></a> <span class="n">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-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">return</span> <span class="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-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">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-2009"><a href="#Generator-2009"><span class="linenos">2009</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-1991"><a href="#Generator-1991"><span class="linenos">1991</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-1992"><a href="#Generator-1992"><span class="linenos">1992</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1993"><a href="#Generator-1993"><span class="linenos">1993</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-1994"><a href="#Generator-1994"><span class="linenos">1994</span></a>
+</span><span id="Generator-1995"><a href="#Generator-1995"><span class="linenos">1995</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-1996"><a href="#Generator-1996"><span class="linenos">1996</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-1997"><a href="#Generator-1997"><span class="linenos">1997</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-1998"><a href="#Generator-1998"><span class="linenos">1998</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-1999"><a href="#Generator-1999"><span class="linenos">1999</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-2000"><a href="#Generator-2000"><span class="linenos">2000</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-2001"><a href="#Generator-2001"><span class="linenos">2001</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-2002"><a href="#Generator-2002"><span class="linenos">2002</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-2003"><a href="#Generator-2003"><span class="linenos">2003</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-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">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-2006"><a href="#Generator-2006"><span class="linenos">2006</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-2007"><a href="#Generator-2007"><span class="linenos">2007</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-2008"><a href="#Generator-2008"><span class="linenos">2008</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-2009"><a href="#Generator-2009"><span class="linenos">2009</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-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">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-2012"><a href="#Generator-2012"><span class="linenos">2012</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-2013"><a href="#Generator-2013"><span class="linenos">2013</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-2014"><a href="#Generator-2014"><span class="linenos">2014</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-2015"><a href="#Generator-2015"><span class="linenos">2015</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-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">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-2018"><a href="#Generator-2018"><span class="linenos">2018</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-2019"><a href="#Generator-2019"><span class="linenos">2019</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2022"><a href="#Generator-2022"><span class="linenos">2022</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-2023"><a href="#Generator-2023"><span class="linenos">2023</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-2024"><a href="#Generator-2024"><span class="linenos">2024</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-2025"><a href="#Generator-2025"><span class="linenos">2025</span></a>
-</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;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-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">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-2029"><a href="#Generator-2029"><span class="linenos">2029</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-2030"><a href="#Generator-2030"><span class="linenos">2030</span></a>
-</span><span id="Generator-2031"><a href="#Generator-2031"><span class="linenos">2031</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-2032"><a href="#Generator-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="Generator-2033"><a href="#Generator-2033"><span class="linenos">2033</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-2034"><a href="#Generator-2034"><span class="linenos">2034</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-2035"><a href="#Generator-2035"><span class="linenos">2035</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-2036"><a href="#Generator-2036"><span class="linenos">2036</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-2037"><a href="#Generator-2037"><span class="linenos">2037</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-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">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-2040"><a href="#Generator-2040"><span class="linenos">2040</span></a> <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-2011"><a href="#Generator-2011"><span class="linenos">2011</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-2012"><a href="#Generator-2012"><span class="linenos">2012</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-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">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)))</span>
+</span><span id="Generator-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">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-2016"><a href="#Generator-2016"><span class="linenos">2016</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-2017"><a href="#Generator-2017"><span class="linenos">2017</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-2018"><a href="#Generator-2018"><span class="linenos">2018</span></a> <span class="k">return</span> <span class="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-2019"><a href="#Generator-2019"><span class="linenos">2019</span></a>
+</span><span id="Generator-2020"><a href="#Generator-2020"><span class="linenos">2020</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-2021"><a href="#Generator-2021"><span class="linenos">2021</span></a> <span class="k">return</span> <span class="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-2022"><a href="#Generator-2022"><span class="linenos">2022</span></a>
+</span><span id="Generator-2023"><a href="#Generator-2023"><span class="linenos">2023</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-2024"><a href="#Generator-2024"><span class="linenos">2024</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-2025"><a href="#Generator-2025"><span class="linenos">2025</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-2026"><a href="#Generator-2026"><span class="linenos">2026</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-2027"><a href="#Generator-2027"><span class="linenos">2027</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-2028"><a href="#Generator-2028"><span class="linenos">2028</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-2029"><a href="#Generator-2029"><span class="linenos">2029</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2030"><a href="#Generator-2030"><span class="linenos">2030</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2031"><a href="#Generator-2031"><span class="linenos">2031</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-2032"><a href="#Generator-2032"><span class="linenos">2032</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-2033"><a href="#Generator-2033"><span class="linenos">2033</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-2034"><a href="#Generator-2034"><span class="linenos">2034</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-2035"><a href="#Generator-2035"><span class="linenos">2035</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-2036"><a href="#Generator-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><span id="Generator-2037"><a href="#Generator-2037"><span class="linenos">2037</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">,</span>
+</span><span id="Generator-2038"><a href="#Generator-2038"><span class="linenos">2038</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Generator-2039"><a href="#Generator-2039"><span class="linenos">2039</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator-2040"><a href="#Generator-2040"><span class="linenos">2040</span></a> <span class="p">)</span>
</span><span id="Generator-2041"><a href="#Generator-2041"><span class="linenos">2041</span></a>
-</span><span id="Generator-2042"><a href="#Generator-2042"><span class="linenos">2042</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-2043"><a href="#Generator-2043"><span class="linenos">2043</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-2044"><a href="#Generator-2044"><span class="linenos">2044</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-2045"><a href="#Generator-2045"><span class="linenos">2045</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2046"><a href="#Generator-2046"><span class="linenos">2046</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-2047"><a href="#Generator-2047"><span class="linenos">2047</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-2048"><a href="#Generator-2048"><span class="linenos">2048</span></a>
-</span><span id="Generator-2049"><a href="#Generator-2049"><span class="linenos">2049</span></a> <span class="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-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">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-2052"><a href="#Generator-2052"><span class="linenos">2052</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-2053"><a href="#Generator-2053"><span class="linenos">2053</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-2054"><a href="#Generator-2054"><span class="linenos">2054</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-2055"><a href="#Generator-2055"><span class="linenos">2055</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-2056"><a href="#Generator-2056"><span class="linenos">2056</span></a>
-</span><span id="Generator-2057"><a href="#Generator-2057"><span class="linenos">2057</span></a> <span class="k">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-2058"><a href="#Generator-2058"><span class="linenos">2058</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-2059"><a href="#Generator-2059"><span class="linenos">2059</span></a>
-</span><span id="Generator-2060"><a href="#Generator-2060"><span class="linenos">2060</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-2061"><a href="#Generator-2061"><span class="linenos">2061</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-2062"><a href="#Generator-2062"><span class="linenos">2062</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-2063"><a href="#Generator-2063"><span class="linenos">2063</span></a> <span class="k">return</span> <span class="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-2064"><a href="#Generator-2064"><span class="linenos">2064</span></a>
-</span><span id="Generator-2065"><a href="#Generator-2065"><span class="linenos">2065</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-2066"><a href="#Generator-2066"><span class="linenos">2066</span></a> <span class="k">return</span> <span class="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-2042"><a href="#Generator-2042"><span class="linenos">2042</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2043"><a href="#Generator-2043"><span class="linenos">2043</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2044"><a href="#Generator-2044"><span class="linenos">2044</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-2045"><a href="#Generator-2045"><span class="linenos">2045</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
+</span><span id="Generator-2046"><a href="#Generator-2046"><span class="linenos">2046</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2047"><a href="#Generator-2047"><span class="linenos">2047</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2048"><a href="#Generator-2048"><span class="linenos">2048</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-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">def</span> <span class="nf">openjson_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2051"><a href="#Generator-2051"><span class="linenos">2051</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2052"><a href="#Generator-2052"><span class="linenos">2052</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
+</span><span id="Generator-2053"><a href="#Generator-2053"><span class="linenos">2053</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2054"><a href="#Generator-2054"><span class="linenos">2054</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-2055"><a href="#Generator-2055"><span class="linenos">2055</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2056"><a href="#Generator-2056"><span class="linenos">2056</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2057"><a href="#Generator-2057"><span class="linenos">2057</span></a> <span class="k">if</span> <span class="n">expressions</span>
+</span><span id="Generator-2058"><a href="#Generator-2058"><span class="linenos">2058</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2059"><a href="#Generator-2059"><span class="linenos">2059</span></a> <span class="p">)</span>
+</span><span id="Generator-2060"><a href="#Generator-2060"><span class="linenos">2060</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2061"><a href="#Generator-2061"><span class="linenos">2061</span></a>
+</span><span id="Generator-2062"><a href="#Generator-2062"><span class="linenos">2062</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-2063"><a href="#Generator-2063"><span class="linenos">2063</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-2064"><a href="#Generator-2064"><span class="linenos">2064</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-2065"><a href="#Generator-2065"><span class="linenos">2065</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-2066"><a href="#Generator-2066"><span class="linenos">2066</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-2067"><a href="#Generator-2067"><span class="linenos">2067</span></a>
-</span><span id="Generator-2068"><a href="#Generator-2068"><span class="linenos">2068</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-2069"><a href="#Generator-2069"><span class="linenos">2069</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2070"><a href="#Generator-2070"><span class="linenos">2070</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-2071"><a href="#Generator-2071"><span class="linenos">2071</span></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-2072"><a href="#Generator-2072"><span class="linenos">2072</span></a>
-</span><span id="Generator-2073"><a href="#Generator-2073"><span class="linenos">2073</span></a> <span class="k">def</span> <span class="nf">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-2074"><a href="#Generator-2074"><span class="linenos">2074</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2075"><a href="#Generator-2075"><span class="linenos">2075</span></a>
-</span><span id="Generator-2076"><a href="#Generator-2076"><span class="linenos">2076</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-2077"><a href="#Generator-2077"><span class="linenos">2077</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-2068"><a href="#Generator-2068"><span class="linenos">2068</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Generator-2069"><a href="#Generator-2069"><span class="linenos">2069</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-2070"><a href="#Generator-2070"><span class="linenos">2070</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Generator-2071"><a href="#Generator-2071"><span class="linenos">2071</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-2072"><a href="#Generator-2072"><span class="linenos">2072</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Generator-2073"><a href="#Generator-2073"><span class="linenos">2073</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-2074"><a href="#Generator-2074"><span class="linenos">2074</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2075"><a href="#Generator-2075"><span class="linenos">2075</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-2076"><a href="#Generator-2076"><span class="linenos">2076</span></a>
+</span><span id="Generator-2077"><a href="#Generator-2077"><span class="linenos">2077</span></a> <span class="k">return</span> <span class="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-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">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2080"><a href="#Generator-2080"><span class="linenos">2080</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+</span><span id="Generator-2079"><a href="#Generator-2079"><span class="linenos">2079</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-2080"><a href="#Generator-2080"><span class="linenos">2080</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-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">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-2083"><a href="#Generator-2083"><span class="linenos">2083</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-2084"><a href="#Generator-2084"><span class="linenos">2084</span></a> <span class="k">return</span> <span class="bp">self</span><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-2085"><a href="#Generator-2085"><span class="linenos">2085</span></a>
-</span><span id="Generator-2086"><a href="#Generator-2086"><span class="linenos">2086</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Generator-2087"><a href="#Generator-2087"><span class="linenos">2087</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="Generator-2088"><a href="#Generator-2088"><span class="linenos">2088</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-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><span id="Generator-2091"><a href="#Generator-2091"><span class="linenos">2091</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-2092"><a href="#Generator-2092"><span class="linenos">2092</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-2093"><a href="#Generator-2093"><span class="linenos">2093</span></a>
-</span><span id="Generator-2094"><a href="#Generator-2094"><span class="linenos">2094</span></a> <span class="k">def</span> <span class="nf">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-2095"><a href="#Generator-2095"><span class="linenos">2095</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2082"><a href="#Generator-2082"><span class="linenos">2082</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-2083"><a href="#Generator-2083"><span class="linenos">2083</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-2084"><a href="#Generator-2084"><span class="linenos">2084</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-2085"><a href="#Generator-2085"><span class="linenos">2085</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-2086"><a href="#Generator-2086"><span class="linenos">2086</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-2087"><a href="#Generator-2087"><span class="linenos">2087</span></a>
+</span><span id="Generator-2088"><a href="#Generator-2088"><span class="linenos">2088</span></a> <span class="k">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-2089"><a href="#Generator-2089"><span class="linenos">2089</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-2090"><a href="#Generator-2090"><span class="linenos">2090</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2091"><a href="#Generator-2091"><span class="linenos">2091</span></a>
+</span><span id="Generator-2092"><a href="#Generator-2092"><span class="linenos">2092</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2093"><a href="#Generator-2093"><span class="linenos">2093</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-2094"><a href="#Generator-2094"><span class="linenos">2094</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-2095"><a href="#Generator-2095"><span class="linenos">2095</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-2096"><a href="#Generator-2096"><span class="linenos">2096</span></a>
-</span><span id="Generator-2097"><a href="#Generator-2097"><span class="linenos">2097</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-2098"><a href="#Generator-2098"><span class="linenos">2098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2099"><a href="#Generator-2099"><span class="linenos">2099</span></a>
-</span><span id="Generator-2100"><a href="#Generator-2100"><span class="linenos">2100</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-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-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">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-2104"><a href="#Generator-2104"><span class="linenos">2104</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2105"><a href="#Generator-2105"><span class="linenos">2105</span></a>
-</span><span id="Generator-2106"><a href="#Generator-2106"><span class="linenos">2106</span></a> <span class="k">def</span> <span class="nf">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-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">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-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">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-2110"><a href="#Generator-2110"><span class="linenos">2110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2111"><a href="#Generator-2111"><span class="linenos">2111</span></a>
-</span><span id="Generator-2112"><a href="#Generator-2112"><span class="linenos">2112</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2113"><a href="#Generator-2113"><span class="linenos">2113</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="Generator-2114"><a href="#Generator-2114"><span class="linenos">2114</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2115"><a href="#Generator-2115"><span class="linenos">2115</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2116"><a href="#Generator-2116"><span class="linenos">2116</span></a>
-</span><span id="Generator-2117"><a href="#Generator-2117"><span class="linenos">2117</span></a> <span class="k">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-2118"><a href="#Generator-2118"><span class="linenos">2118</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-2119"><a href="#Generator-2119"><span class="linenos">2119</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-2120"><a href="#Generator-2120"><span class="linenos">2120</span></a>
-</span><span id="Generator-2121"><a href="#Generator-2121"><span class="linenos">2121</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-2122"><a href="#Generator-2122"><span class="linenos">2122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2123"><a href="#Generator-2123"><span class="linenos">2123</span></a>
-</span><span id="Generator-2124"><a href="#Generator-2124"><span class="linenos">2124</span></a> <span class="k">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-2125"><a href="#Generator-2125"><span class="linenos">2125</span></a> <span class="k">return</span> <span class="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-2126"><a href="#Generator-2126"><span class="linenos">2126</span></a>
-</span><span id="Generator-2127"><a href="#Generator-2127"><span class="linenos">2127</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-2128"><a href="#Generator-2128"><span class="linenos">2128</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2129"><a href="#Generator-2129"><span class="linenos">2129</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-2130"><a href="#Generator-2130"><span class="linenos">2130</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-2131"><a href="#Generator-2131"><span class="linenos">2131</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-2132"><a href="#Generator-2132"><span class="linenos">2132</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-2133"><a href="#Generator-2133"><span class="linenos">2133</span></a>
-</span><span id="Generator-2134"><a href="#Generator-2134"><span class="linenos">2134</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2135"><a href="#Generator-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="Generator-2136"><a href="#Generator-2136"><span class="linenos">2136</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2137"><a href="#Generator-2137"><span class="linenos">2137</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;recompress&quot;</span><span class="p">)</span>
-</span><span id="Generator-2138"><a href="#Generator-2138"><span class="linenos">2138</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2139"><a href="#Generator-2139"><span class="linenos">2139</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_disk&quot;</span><span class="p">)</span>
-</span><span id="Generator-2140"><a href="#Generator-2140"><span class="linenos">2140</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2141"><a href="#Generator-2141"><span class="linenos">2141</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_volume&quot;</span><span class="p">)</span>
-</span><span id="Generator-2142"><a href="#Generator-2142"><span class="linenos">2142</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2143"><a href="#Generator-2143"><span class="linenos">2143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2144"><a href="#Generator-2144"><span class="linenos">2144</span></a>
-</span><span id="Generator-2145"><a href="#Generator-2145"><span class="linenos">2145</span></a> <span class="k">def</span> <span class="nf">mergetreettl_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2146"><a href="#Generator-2146"><span class="linenos">2146</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-2147"><a href="#Generator-2147"><span class="linenos">2147</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="Generator-2148"><a href="#Generator-2148"><span class="linenos">2148</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
-</span><span id="Generator-2149"><a href="#Generator-2149"><span class="linenos">2149</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2150"><a href="#Generator-2150"><span class="linenos">2150</span></a>
-</span><span id="Generator-2151"><a href="#Generator-2151"><span class="linenos">2151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator-2152"><a href="#Generator-2152"><span class="linenos">2152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2153"><a href="#Generator-2153"><span class="linenos">2153</span></a>
-</span><span id="Generator-2154"><a href="#Generator-2154"><span class="linenos">2154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2155"><a href="#Generator-2155"><span class="linenos">2155</span></a>
-</span><span id="Generator-2156"><a href="#Generator-2156"><span class="linenos">2156</span></a> <span class="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-2157"><a href="#Generator-2157"><span class="linenos">2157</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
-</span><span id="Generator-2158"><a href="#Generator-2158"><span class="linenos">2158</span></a>
-</span><span id="Generator-2159"><a href="#Generator-2159"><span class="linenos">2159</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-2160"><a href="#Generator-2160"><span class="linenos">2160</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-2161"><a href="#Generator-2161"><span class="linenos">2161</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-2162"><a href="#Generator-2162"><span class="linenos">2162</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-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">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-2165"><a href="#Generator-2165"><span class="linenos">2165</span></a>
-</span><span id="Generator-2166"><a href="#Generator-2166"><span class="linenos">2166</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-2167"><a href="#Generator-2167"><span class="linenos">2167</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-2168"><a href="#Generator-2168"><span class="linenos">2168</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-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;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2097"><a href="#Generator-2097"><span class="linenos">2097</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-2098"><a href="#Generator-2098"><span class="linenos">2098</span></a>
+</span><span id="Generator-2099"><a href="#Generator-2099"><span class="linenos">2099</span></a> <span class="k">def</span> <span class="nf">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-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;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-2101"><a href="#Generator-2101"><span class="linenos">2101</span></a>
+</span><span id="Generator-2102"><a href="#Generator-2102"><span class="linenos">2102</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-2103"><a href="#Generator-2103"><span class="linenos">2103</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2104"><a href="#Generator-2104"><span class="linenos">2104</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-2105"><a href="#Generator-2105"><span class="linenos">2105</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-2106"><a href="#Generator-2106"><span class="linenos">2106</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-2107"><a href="#Generator-2107"><span class="linenos">2107</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-2108"><a href="#Generator-2108"><span class="linenos">2108</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-2109"><a href="#Generator-2109"><span class="linenos">2109</span></a>
+</span><span id="Generator-2110"><a href="#Generator-2110"><span class="linenos">2110</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-2111"><a href="#Generator-2111"><span class="linenos">2111</span></a> <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-2112"><a href="#Generator-2112"><span class="linenos">2112</span></a>
+</span><span id="Generator-2113"><a href="#Generator-2113"><span class="linenos">2113</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-2114"><a href="#Generator-2114"><span class="linenos">2114</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-2115"><a href="#Generator-2115"><span class="linenos">2115</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-2116"><a href="#Generator-2116"><span class="linenos">2116</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2117"><a href="#Generator-2117"><span class="linenos">2117</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-2118"><a href="#Generator-2118"><span class="linenos">2118</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-2119"><a href="#Generator-2119"><span class="linenos">2119</span></a>
+</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">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-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">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-2123"><a href="#Generator-2123"><span class="linenos">2123</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-2124"><a href="#Generator-2124"><span class="linenos">2124</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-2125"><a href="#Generator-2125"><span class="linenos">2125</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-2126"><a href="#Generator-2126"><span class="linenos">2126</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-2127"><a href="#Generator-2127"><span class="linenos">2127</span></a>
+</span><span id="Generator-2128"><a href="#Generator-2128"><span class="linenos">2128</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-2129"><a href="#Generator-2129"><span class="linenos">2129</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-2130"><a href="#Generator-2130"><span class="linenos">2130</span></a>
+</span><span id="Generator-2131"><a href="#Generator-2131"><span class="linenos">2131</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-2132"><a href="#Generator-2132"><span class="linenos">2132</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-2133"><a href="#Generator-2133"><span class="linenos">2133</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-2134"><a href="#Generator-2134"><span class="linenos">2134</span></a> <span class="k">return</span> <span class="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-2135"><a href="#Generator-2135"><span class="linenos">2135</span></a>
+</span><span id="Generator-2136"><a href="#Generator-2136"><span class="linenos">2136</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-2137"><a href="#Generator-2137"><span class="linenos">2137</span></a> <span class="k">return</span> <span class="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-2138"><a href="#Generator-2138"><span class="linenos">2138</span></a>
+</span><span id="Generator-2139"><a href="#Generator-2139"><span class="linenos">2139</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-2140"><a href="#Generator-2140"><span class="linenos">2140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2141"><a href="#Generator-2141"><span class="linenos">2141</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-2142"><a href="#Generator-2142"><span class="linenos">2142</span></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-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="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-2145"><a href="#Generator-2145"><span class="linenos">2145</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2146"><a href="#Generator-2146"><span class="linenos">2146</span></a>
+</span><span id="Generator-2147"><a href="#Generator-2147"><span class="linenos">2147</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-2148"><a href="#Generator-2148"><span class="linenos">2148</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-2149"><a href="#Generator-2149"><span class="linenos">2149</span></a>
+</span><span id="Generator-2150"><a href="#Generator-2150"><span class="linenos">2150</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2151"><a href="#Generator-2151"><span class="linenos">2151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+</span><span id="Generator-2152"><a href="#Generator-2152"><span class="linenos">2152</span></a>
+</span><span id="Generator-2153"><a href="#Generator-2153"><span class="linenos">2153</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-2154"><a href="#Generator-2154"><span class="linenos">2154</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-2155"><a href="#Generator-2155"><span class="linenos">2155</span></a> <span class="k">return</span> <span class="bp">self</span><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-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">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Generator-2158"><a href="#Generator-2158"><span class="linenos">2158</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="Generator-2159"><a href="#Generator-2159"><span class="linenos">2159</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-2160"><a href="#Generator-2160"><span class="linenos">2160</span></a> <span class="p">)</span>
+</span><span id="Generator-2161"><a href="#Generator-2161"><span class="linenos">2161</span></a>
+</span><span id="Generator-2162"><a href="#Generator-2162"><span class="linenos">2162</span></a> <span class="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-2163"><a href="#Generator-2163"><span class="linenos">2163</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-2164"><a href="#Generator-2164"><span class="linenos">2164</span></a>
+</span><span id="Generator-2165"><a href="#Generator-2165"><span class="linenos">2165</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-2166"><a href="#Generator-2166"><span class="linenos">2166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2169"><a href="#Generator-2169"><span class="linenos">2169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-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-2171"><a href="#Generator-2171"><span class="linenos">2171</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-2172"><a href="#Generator-2172"><span class="linenos">2172</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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-2173"><a href="#Generator-2173"><span class="linenos">2173</span></a>
-</span><span id="Generator-2174"><a href="#Generator-2174"><span class="linenos">2174</span></a> <span class="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-2175"><a href="#Generator-2175"><span class="linenos">2175</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="Generator-2176"><a href="#Generator-2176"><span class="linenos">2176</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-2177"><a href="#Generator-2177"><span class="linenos">2177</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-2178"><a href="#Generator-2178"><span class="linenos">2178</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-2179"><a href="#Generator-2179"><span class="linenos">2179</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-2180"><a href="#Generator-2180"><span class="linenos">2180</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-2181"><a href="#Generator-2181"><span class="linenos">2181</span></a>
-</span><span id="Generator-2182"><a href="#Generator-2182"><span class="linenos">2182</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-2183"><a href="#Generator-2183"><span class="linenos">2183</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-2184"><a href="#Generator-2184"><span class="linenos">2184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2185"><a href="#Generator-2185"><span class="linenos">2185</span></a>
-</span><span id="Generator-2186"><a href="#Generator-2186"><span class="linenos">2186</span></a> <span class="k">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-2187"><a href="#Generator-2187"><span class="linenos">2187</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-2188"><a href="#Generator-2188"><span class="linenos">2188</span></a>
-</span><span id="Generator-2189"><a href="#Generator-2189"><span class="linenos">2189</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-2190"><a href="#Generator-2190"><span class="linenos">2190</span></a>
-</span><span id="Generator-2191"><a href="#Generator-2191"><span class="linenos">2191</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-2192"><a href="#Generator-2192"><span class="linenos">2192</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
-</span><span id="Generator-2193"><a href="#Generator-2193"><span class="linenos">2193</span></a> <span class="c1"># Remove db from tables</span>
-</span><span id="Generator-2194"><a href="#Generator-2194"><span class="linenos">2194</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Generator-2195"><a href="#Generator-2195"><span class="linenos">2195</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
-</span><span id="Generator-2196"><a href="#Generator-2196"><span class="linenos">2196</span></a> <span class="p">)</span>
-</span><span id="Generator-2197"><a href="#Generator-2197"><span class="linenos">2197</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2198"><a href="#Generator-2198"><span class="linenos">2198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2199"><a href="#Generator-2199"><span class="linenos">2199</span></a>
-</span><span id="Generator-2200"><a href="#Generator-2200"><span class="linenos">2200</span></a> <span class="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-2201"><a href="#Generator-2201"><span class="linenos">2201</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-2202"><a href="#Generator-2202"><span class="linenos">2202</span></a>
-</span><span id="Generator-2203"><a href="#Generator-2203"><span class="linenos">2203</span></a> <span class="k">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-2204"><a href="#Generator-2204"><span class="linenos">2204</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-2205"><a href="#Generator-2205"><span class="linenos">2205</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-2206"><a href="#Generator-2206"><span class="linenos">2206</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-2207"><a href="#Generator-2207"><span class="linenos">2207</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-2208"><a href="#Generator-2208"><span class="linenos">2208</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-2209"><a href="#Generator-2209"><span class="linenos">2209</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2210"><a href="#Generator-2210"><span class="linenos">2210</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-2211"><a href="#Generator-2211"><span class="linenos">2211</span></a>
-</span><span id="Generator-2212"><a href="#Generator-2212"><span class="linenos">2212</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-2213"><a href="#Generator-2213"><span class="linenos">2213</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-2214"><a href="#Generator-2214"><span class="linenos">2214</span></a>
-</span><span id="Generator-2215"><a href="#Generator-2215"><span class="linenos">2215</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-2216"><a href="#Generator-2216"><span class="linenos">2216</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-2217"><a href="#Generator-2217"><span class="linenos">2217</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-2218"><a href="#Generator-2218"><span class="linenos">2218</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-2219"><a href="#Generator-2219"><span class="linenos">2219</span></a>
-</span><span id="Generator-2220"><a href="#Generator-2220"><span class="linenos">2220</span></a> <span class="k">def</span> <span class="nf">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-2221"><a href="#Generator-2221"><span class="linenos">2221</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2222"><a href="#Generator-2222"><span class="linenos">2222</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-2223"><a href="#Generator-2223"><span class="linenos">2223</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-2174"><a href="#Generator-2174"><span class="linenos">2174</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-2175"><a href="#Generator-2175"><span class="linenos">2175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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">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-2178"><a href="#Generator-2178"><span class="linenos">2178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2179"><a href="#Generator-2179"><span class="linenos">2179</span></a>
+</span><span id="Generator-2180"><a href="#Generator-2180"><span class="linenos">2180</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-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">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-2182"><a href="#Generator-2182"><span class="linenos">2182</span></a>
+</span><span id="Generator-2183"><a href="#Generator-2183"><span class="linenos">2183</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2184"><a href="#Generator-2184"><span class="linenos">2184</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="Generator-2185"><a href="#Generator-2185"><span class="linenos">2185</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2186"><a href="#Generator-2186"><span class="linenos">2186</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2187"><a href="#Generator-2187"><span class="linenos">2187</span></a>
+</span><span id="Generator-2188"><a href="#Generator-2188"><span class="linenos">2188</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-2189"><a href="#Generator-2189"><span class="linenos">2189</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-2190"><a href="#Generator-2190"><span class="linenos">2190</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-2191"><a href="#Generator-2191"><span class="linenos">2191</span></a>
+</span><span id="Generator-2192"><a href="#Generator-2192"><span class="linenos">2192</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-2193"><a href="#Generator-2193"><span class="linenos">2193</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2194"><a href="#Generator-2194"><span class="linenos">2194</span></a>
+</span><span id="Generator-2195"><a href="#Generator-2195"><span class="linenos">2195</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-2196"><a href="#Generator-2196"><span class="linenos">2196</span></a> <span class="k">return</span> <span class="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-2197"><a href="#Generator-2197"><span class="linenos">2197</span></a>
+</span><span id="Generator-2198"><a href="#Generator-2198"><span class="linenos">2198</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-2199"><a href="#Generator-2199"><span class="linenos">2199</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2200"><a href="#Generator-2200"><span class="linenos">2200</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-2201"><a href="#Generator-2201"><span class="linenos">2201</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-2202"><a href="#Generator-2202"><span class="linenos">2202</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-2203"><a href="#Generator-2203"><span class="linenos">2203</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-2204"><a href="#Generator-2204"><span class="linenos">2204</span></a>
+</span><span id="Generator-2205"><a href="#Generator-2205"><span class="linenos">2205</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2206"><a href="#Generator-2206"><span class="linenos">2206</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2207"><a href="#Generator-2207"><span class="linenos">2207</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2208"><a href="#Generator-2208"><span class="linenos">2208</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;recompress&quot;</span><span class="p">)</span>
+</span><span id="Generator-2209"><a href="#Generator-2209"><span class="linenos">2209</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2210"><a href="#Generator-2210"><span class="linenos">2210</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_disk&quot;</span><span class="p">)</span>
+</span><span id="Generator-2211"><a href="#Generator-2211"><span class="linenos">2211</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2212"><a href="#Generator-2212"><span class="linenos">2212</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_volume&quot;</span><span class="p">)</span>
+</span><span id="Generator-2213"><a href="#Generator-2213"><span class="linenos">2213</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2214"><a href="#Generator-2214"><span class="linenos">2214</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2215"><a href="#Generator-2215"><span class="linenos">2215</span></a>
+</span><span id="Generator-2216"><a href="#Generator-2216"><span class="linenos">2216</span></a> <span class="k">def</span> <span class="nf">mergetreettl_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2217"><a href="#Generator-2217"><span class="linenos">2217</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-2218"><a href="#Generator-2218"><span class="linenos">2218</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="Generator-2219"><a href="#Generator-2219"><span class="linenos">2219</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
+</span><span id="Generator-2220"><a href="#Generator-2220"><span class="linenos">2220</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2221"><a href="#Generator-2221"><span class="linenos">2221</span></a>
+</span><span id="Generator-2222"><a href="#Generator-2222"><span class="linenos">2222</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator-2223"><a href="#Generator-2223"><span class="linenos">2223</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2224"><a href="#Generator-2224"><span class="linenos">2224</span></a>
-</span><span id="Generator-2225"><a href="#Generator-2225"><span class="linenos">2225</span></a> <span class="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-2226"><a href="#Generator-2226"><span class="linenos">2226</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-2227"><a href="#Generator-2227"><span class="linenos">2227</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-2228"><a href="#Generator-2228"><span class="linenos">2228</span></a>
-</span><span id="Generator-2229"><a href="#Generator-2229"><span class="linenos">2229</span></a> <span class="k">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-2230"><a href="#Generator-2230"><span class="linenos">2230</span></a>
-</span><span id="Generator-2231"><a href="#Generator-2231"><span class="linenos">2231</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-2232"><a href="#Generator-2232"><span class="linenos">2232</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-2233"><a href="#Generator-2233"><span class="linenos">2233</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-2225"><a href="#Generator-2225"><span class="linenos">2225</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2226"><a href="#Generator-2226"><span class="linenos">2226</span></a>
+</span><span id="Generator-2227"><a href="#Generator-2227"><span class="linenos">2227</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-2228"><a href="#Generator-2228"><span class="linenos">2228</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
+</span><span id="Generator-2229"><a href="#Generator-2229"><span class="linenos">2229</span></a>
+</span><span id="Generator-2230"><a href="#Generator-2230"><span class="linenos">2230</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-2231"><a href="#Generator-2231"><span class="linenos">2231</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-2232"><a href="#Generator-2232"><span class="linenos">2232</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-2233"><a href="#Generator-2233"><span class="linenos">2233</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-2234"><a href="#Generator-2234"><span class="linenos">2234</span></a>
-</span><span id="Generator-2235"><a href="#Generator-2235"><span class="linenos">2235</span></a> <span class="n">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-2236"><a href="#Generator-2236"><span class="linenos">2236</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-2237"><a href="#Generator-2237"><span class="linenos">2237</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-2238"><a href="#Generator-2238"><span class="linenos">2238</span></a>
-</span><span id="Generator-2239"><a href="#Generator-2239"><span class="linenos">2239</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-2240"><a href="#Generator-2240"><span class="linenos">2240</span></a> <span class="k">return</span> <span class="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-2235"><a href="#Generator-2235"><span class="linenos">2235</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-2236"><a href="#Generator-2236"><span class="linenos">2236</span></a>
+</span><span id="Generator-2237"><a href="#Generator-2237"><span class="linenos">2237</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-2238"><a href="#Generator-2238"><span class="linenos">2238</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-2239"><a href="#Generator-2239"><span class="linenos">2239</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-2240"><a href="#Generator-2240"><span class="linenos">2240</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-2241"><a href="#Generator-2241"><span class="linenos">2241</span></a>
-</span><span id="Generator-2242"><a href="#Generator-2242"><span class="linenos">2242</span></a> <span class="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-2243"><a href="#Generator-2243"><span class="linenos">2243</span></a> <span class="k">return</span> <span class="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-2242"><a href="#Generator-2242"><span class="linenos">2242</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-2243"><a href="#Generator-2243"><span class="linenos">2243</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Generator-2244"><a href="#Generator-2244"><span class="linenos">2244</span></a>
-</span><span id="Generator-2245"><a href="#Generator-2245"><span class="linenos">2245</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-2246"><a href="#Generator-2246"><span class="linenos">2246</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-2247"><a href="#Generator-2247"><span class="linenos">2247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="Generator-2248"><a href="#Generator-2248"><span class="linenos">2248</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
-</span><span id="Generator-2249"><a href="#Generator-2249"><span class="linenos">2249</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-2250"><a href="#Generator-2250"><span class="linenos">2250</span></a> <span class="p">)</span>
-</span><span id="Generator-2251"><a href="#Generator-2251"><span class="linenos">2251</span></a> <span class="p">)</span>
+</span><span id="Generator-2245"><a href="#Generator-2245"><span class="linenos">2245</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-2246"><a href="#Generator-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="Generator-2247"><a href="#Generator-2247"><span class="linenos">2247</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-2248"><a href="#Generator-2248"><span class="linenos">2248</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-2249"><a href="#Generator-2249"><span class="linenos">2249</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-2250"><a href="#Generator-2250"><span class="linenos">2250</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-2251"><a href="#Generator-2251"><span class="linenos">2251</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-2252"><a href="#Generator-2252"><span class="linenos">2252</span></a>
-</span><span id="Generator-2253"><a href="#Generator-2253"><span class="linenos">2253</span></a> <span class="k">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-2254"><a href="#Generator-2254"><span class="linenos">2254</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2255"><a href="#Generator-2255"><span class="linenos">2255</span></a>
-</span><span id="Generator-2256"><a href="#Generator-2256"><span class="linenos">2256</span></a> <span class="k">def</span> <span class="nf">safedpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2257"><a href="#Generator-2257"><span class="linenos">2257</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
-</span><span id="Generator-2258"><a href="#Generator-2258"><span class="linenos">2258</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
-</span><span id="Generator-2259"><a href="#Generator-2259"><span class="linenos">2259</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dpipe_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2260"><a href="#Generator-2260"><span class="linenos">2260</span></a>
-</span><span id="Generator-2261"><a href="#Generator-2261"><span class="linenos">2261</span></a> <span class="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-2262"><a href="#Generator-2262"><span class="linenos">2262</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2263"><a href="#Generator-2263"><span class="linenos">2263</span></a>
-</span><span id="Generator-2264"><a href="#Generator-2264"><span class="linenos">2264</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-2265"><a href="#Generator-2265"><span class="linenos">2265</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2266"><a href="#Generator-2266"><span class="linenos">2266</span></a>
-</span><span id="Generator-2267"><a href="#Generator-2267"><span class="linenos">2267</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-2268"><a href="#Generator-2268"><span class="linenos">2268</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2269"><a href="#Generator-2269"><span class="linenos">2269</span></a>
-</span><span id="Generator-2270"><a href="#Generator-2270"><span class="linenos">2270</span></a> <span class="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-2271"><a href="#Generator-2271"><span class="linenos">2271</span></a> <span class="k">return</span> <span class="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-2272"><a href="#Generator-2272"><span class="linenos">2272</span></a>
-</span><span id="Generator-2273"><a href="#Generator-2273"><span class="linenos">2273</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-2274"><a href="#Generator-2274"><span class="linenos">2274</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2275"><a href="#Generator-2275"><span class="linenos">2275</span></a>
-</span><span id="Generator-2276"><a href="#Generator-2276"><span class="linenos">2276</span></a> <span class="k">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-2277"><a href="#Generator-2277"><span class="linenos">2277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2278"><a href="#Generator-2278"><span class="linenos">2278</span></a>
-</span><span id="Generator-2279"><a href="#Generator-2279"><span class="linenos">2279</span></a> <span class="k">def</span> <span class="nf">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-2280"><a href="#Generator-2280"><span class="linenos">2280</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2281"><a href="#Generator-2281"><span class="linenos">2281</span></a>
-</span><span id="Generator-2282"><a href="#Generator-2282"><span class="linenos">2282</span></a> <span class="k">def</span> <span class="nf">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-2283"><a href="#Generator-2283"><span class="linenos">2283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2284"><a href="#Generator-2284"><span class="linenos">2284</span></a>
-</span><span id="Generator-2285"><a href="#Generator-2285"><span class="linenos">2285</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-2286"><a href="#Generator-2286"><span class="linenos">2286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2287"><a href="#Generator-2287"><span class="linenos">2287</span></a>
-</span><span id="Generator-2288"><a href="#Generator-2288"><span class="linenos">2288</span></a> <span class="k">def</span> <span class="nf">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-2289"><a href="#Generator-2289"><span class="linenos">2289</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2290"><a href="#Generator-2290"><span class="linenos">2290</span></a>
-</span><span id="Generator-2291"><a href="#Generator-2291"><span class="linenos">2291</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-2292"><a href="#Generator-2292"><span class="linenos">2292</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2293"><a href="#Generator-2293"><span class="linenos">2293</span></a>
-</span><span id="Generator-2294"><a href="#Generator-2294"><span class="linenos">2294</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-2295"><a href="#Generator-2295"><span class="linenos">2295</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
-</span><span id="Generator-2296"><a href="#Generator-2296"><span class="linenos">2296</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-2297"><a href="#Generator-2297"><span class="linenos">2297</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-2298"><a href="#Generator-2298"><span class="linenos">2298</span></a> <span class="p">)</span>
-</span><span id="Generator-2299"><a href="#Generator-2299"><span class="linenos">2299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2300"><a href="#Generator-2300"><span class="linenos">2300</span></a>
-</span><span id="Generator-2301"><a href="#Generator-2301"><span class="linenos">2301</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-2302"><a href="#Generator-2302"><span class="linenos">2302</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2303"><a href="#Generator-2303"><span class="linenos">2303</span></a>
-</span><span id="Generator-2304"><a href="#Generator-2304"><span class="linenos">2304</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-2305"><a href="#Generator-2305"><span class="linenos">2305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2253"><a href="#Generator-2253"><span class="linenos">2253</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-2254"><a href="#Generator-2254"><span class="linenos">2254</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-2255"><a href="#Generator-2255"><span class="linenos">2255</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-2256"><a href="#Generator-2256"><span class="linenos">2256</span></a>
+</span><span id="Generator-2257"><a href="#Generator-2257"><span class="linenos">2257</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-2258"><a href="#Generator-2258"><span class="linenos">2258</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-2259"><a href="#Generator-2259"><span class="linenos">2259</span></a>
+</span><span id="Generator-2260"><a href="#Generator-2260"><span class="linenos">2260</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-2261"><a href="#Generator-2261"><span class="linenos">2261</span></a>
+</span><span id="Generator-2262"><a href="#Generator-2262"><span class="linenos">2262</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-2263"><a href="#Generator-2263"><span class="linenos">2263</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
+</span><span id="Generator-2264"><a href="#Generator-2264"><span class="linenos">2264</span></a> <span class="c1"># Remove db from tables</span>
+</span><span id="Generator-2265"><a href="#Generator-2265"><span class="linenos">2265</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Generator-2266"><a href="#Generator-2266"><span class="linenos">2266</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
+</span><span id="Generator-2267"><a href="#Generator-2267"><span class="linenos">2267</span></a> <span class="p">)</span>
+</span><span id="Generator-2268"><a href="#Generator-2268"><span class="linenos">2268</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2269"><a href="#Generator-2269"><span class="linenos">2269</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-2270"><a href="#Generator-2270"><span class="linenos">2270</span></a>
+</span><span id="Generator-2271"><a href="#Generator-2271"><span class="linenos">2271</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-2272"><a href="#Generator-2272"><span class="linenos">2272</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-2273"><a href="#Generator-2273"><span class="linenos">2273</span></a>
+</span><span id="Generator-2274"><a href="#Generator-2274"><span class="linenos">2274</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-2275"><a href="#Generator-2275"><span class="linenos">2275</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span><span class="p">:</span>
+</span><span id="Generator-2276"><a href="#Generator-2276"><span class="linenos">2276</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><span id="Generator-2277"><a href="#Generator-2277"><span class="linenos">2277</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-2278"><a href="#Generator-2278"><span class="linenos">2278</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
+</span><span id="Generator-2279"><a href="#Generator-2279"><span class="linenos">2279</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
+</span><span id="Generator-2280"><a href="#Generator-2280"><span class="linenos">2280</span></a> <span class="p">)</span>
+</span><span id="Generator-2281"><a href="#Generator-2281"><span class="linenos">2281</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2282"><a href="#Generator-2282"><span class="linenos">2282</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2283"><a href="#Generator-2283"><span class="linenos">2283</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-2284"><a href="#Generator-2284"><span class="linenos">2284</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-2285"><a href="#Generator-2285"><span class="linenos">2285</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-2286"><a href="#Generator-2286"><span class="linenos">2286</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-2287"><a href="#Generator-2287"><span class="linenos">2287</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2288"><a href="#Generator-2288"><span class="linenos">2288</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-2289"><a href="#Generator-2289"><span class="linenos">2289</span></a>
+</span><span id="Generator-2290"><a href="#Generator-2290"><span class="linenos">2290</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-2291"><a href="#Generator-2291"><span class="linenos">2291</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2292"><a href="#Generator-2292"><span class="linenos">2292</span></a>
+</span><span id="Generator-2293"><a href="#Generator-2293"><span class="linenos">2293</span></a> <span class="k">def</span> <span class="nf">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-2294"><a href="#Generator-2294"><span class="linenos">2294</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-2295"><a href="#Generator-2295"><span class="linenos">2295</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-2296"><a href="#Generator-2296"><span class="linenos">2296</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-2297"><a href="#Generator-2297"><span class="linenos">2297</span></a>
+</span><span id="Generator-2298"><a href="#Generator-2298"><span class="linenos">2298</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-2299"><a href="#Generator-2299"><span class="linenos">2299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2300"><a href="#Generator-2300"><span class="linenos">2300</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-2301"><a href="#Generator-2301"><span class="linenos">2301</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-2302"><a href="#Generator-2302"><span class="linenos">2302</span></a>
+</span><span id="Generator-2303"><a href="#Generator-2303"><span class="linenos">2303</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-2304"><a href="#Generator-2304"><span class="linenos">2304</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-2305"><a href="#Generator-2305"><span class="linenos">2305</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-2306"><a href="#Generator-2306"><span class="linenos">2306</span></a>
-</span><span id="Generator-2307"><a href="#Generator-2307"><span class="linenos">2307</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-2308"><a href="#Generator-2308"><span class="linenos">2308</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2309"><a href="#Generator-2309"><span class="linenos">2309</span></a>
-</span><span id="Generator-2310"><a href="#Generator-2310"><span class="linenos">2310</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-2311"><a href="#Generator-2311"><span class="linenos">2311</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2307"><a href="#Generator-2307"><span class="linenos">2307</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-2308"><a href="#Generator-2308"><span class="linenos">2308</span></a>
+</span><span id="Generator-2309"><a href="#Generator-2309"><span class="linenos">2309</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-2310"><a href="#Generator-2310"><span class="linenos">2310</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-2311"><a href="#Generator-2311"><span class="linenos">2311</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-2312"><a href="#Generator-2312"><span class="linenos">2312</span></a>
-</span><span id="Generator-2313"><a href="#Generator-2313"><span class="linenos">2313</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-2314"><a href="#Generator-2314"><span class="linenos">2314</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2315"><a href="#Generator-2315"><span class="linenos">2315</span></a>
-</span><span id="Generator-2316"><a href="#Generator-2316"><span class="linenos">2316</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-2317"><a href="#Generator-2317"><span class="linenos">2317</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2318"><a href="#Generator-2318"><span class="linenos">2318</span></a>
-</span><span id="Generator-2319"><a href="#Generator-2319"><span class="linenos">2319</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-2320"><a href="#Generator-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2321"><a href="#Generator-2321"><span class="linenos">2321</span></a>
-</span><span id="Generator-2322"><a href="#Generator-2322"><span class="linenos">2322</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-2323"><a href="#Generator-2323"><span class="linenos">2323</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2324"><a href="#Generator-2324"><span class="linenos">2324</span></a>
-</span><span id="Generator-2325"><a href="#Generator-2325"><span class="linenos">2325</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-2326"><a href="#Generator-2326"><span class="linenos">2326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2327"><a href="#Generator-2327"><span class="linenos">2327</span></a>
-</span><span id="Generator-2328"><a href="#Generator-2328"><span class="linenos">2328</span></a> <span class="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-2329"><a href="#Generator-2329"><span class="linenos">2329</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2313"><a href="#Generator-2313"><span class="linenos">2313</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-2314"><a href="#Generator-2314"><span class="linenos">2314</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-2315"><a href="#Generator-2315"><span class="linenos">2315</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2316"><a href="#Generator-2316"><span class="linenos">2316</span></a>
+</span><span id="Generator-2317"><a href="#Generator-2317"><span class="linenos">2317</span></a> <span class="k">def</span> <span class="nf">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-2318"><a href="#Generator-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-2319"><a href="#Generator-2319"><span class="linenos">2319</span></a>
+</span><span id="Generator-2320"><a href="#Generator-2320"><span class="linenos">2320</span></a> <span class="k">def</span> <span class="nf">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-2321"><a href="#Generator-2321"><span class="linenos">2321</span></a> <span class="k">return</span> <span class="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-2322"><a href="#Generator-2322"><span class="linenos">2322</span></a>
+</span><span id="Generator-2323"><a href="#Generator-2323"><span class="linenos">2323</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-2324"><a href="#Generator-2324"><span class="linenos">2324</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-2325"><a href="#Generator-2325"><span class="linenos">2325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="Generator-2326"><a href="#Generator-2326"><span class="linenos">2326</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
+</span><span id="Generator-2327"><a href="#Generator-2327"><span class="linenos">2327</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-2328"><a href="#Generator-2328"><span class="linenos">2328</span></a> <span class="p">)</span>
+</span><span id="Generator-2329"><a href="#Generator-2329"><span class="linenos">2329</span></a> <span class="p">)</span>
</span><span id="Generator-2330"><a href="#Generator-2330"><span class="linenos">2330</span></a>
-</span><span id="Generator-2331"><a href="#Generator-2331"><span class="linenos">2331</span></a> <span class="k">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-2332"><a href="#Generator-2332"><span class="linenos">2332</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-2331"><a href="#Generator-2331"><span class="linenos">2331</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-2332"><a href="#Generator-2332"><span class="linenos">2332</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2333"><a href="#Generator-2333"><span class="linenos">2333</span></a>
-</span><span id="Generator-2334"><a href="#Generator-2334"><span class="linenos">2334</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-2335"><a href="#Generator-2335"><span class="linenos">2335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2336"><a href="#Generator-2336"><span class="linenos">2336</span></a>
-</span><span id="Generator-2337"><a href="#Generator-2337"><span class="linenos">2337</span></a> <span class="k">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-2338"><a href="#Generator-2338"><span class="linenos">2338</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2339"><a href="#Generator-2339"><span class="linenos">2339</span></a>
-</span><span id="Generator-2340"><a href="#Generator-2340"><span class="linenos">2340</span></a> <span class="k">def</span> <span class="nf">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-2341"><a href="#Generator-2341"><span class="linenos">2341</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
-</span><span id="Generator-2342"><a href="#Generator-2342"><span class="linenos">2342</span></a>
-</span><span id="Generator-2343"><a href="#Generator-2343"><span class="linenos">2343</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-2344"><a href="#Generator-2344"><span class="linenos">2344</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-2345"><a href="#Generator-2345"><span class="linenos">2345</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-2346"><a href="#Generator-2346"><span class="linenos">2346</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2347"><a href="#Generator-2347"><span class="linenos">2347</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-2348"><a href="#Generator-2348"><span class="linenos">2348</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;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-2349"><a href="#Generator-2349"><span class="linenos">2349</span></a>
-</span><span id="Generator-2350"><a href="#Generator-2350"><span class="linenos">2350</span></a> <span class="k">def</span> <span class="nf">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-2351"><a href="#Generator-2351"><span class="linenos">2351</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-2352"><a href="#Generator-2352"><span class="linenos">2352</span></a> <span class="k">return</span> <span class="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-2334"><a href="#Generator-2334"><span class="linenos">2334</span></a> <span class="k">def</span> <span class="nf">safedpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2335"><a href="#Generator-2335"><span class="linenos">2335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
+</span><span id="Generator-2336"><a href="#Generator-2336"><span class="linenos">2336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
+</span><span id="Generator-2337"><a href="#Generator-2337"><span class="linenos">2337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dpipe_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2338"><a href="#Generator-2338"><span class="linenos">2338</span></a>
+</span><span id="Generator-2339"><a href="#Generator-2339"><span class="linenos">2339</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-2340"><a href="#Generator-2340"><span class="linenos">2340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2341"><a href="#Generator-2341"><span class="linenos">2341</span></a>
+</span><span id="Generator-2342"><a href="#Generator-2342"><span class="linenos">2342</span></a> <span class="k">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-2343"><a href="#Generator-2343"><span class="linenos">2343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2344"><a href="#Generator-2344"><span class="linenos">2344</span></a>
+</span><span id="Generator-2345"><a href="#Generator-2345"><span class="linenos">2345</span></a> <span class="k">def</span> <span class="nf">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-2346"><a href="#Generator-2346"><span class="linenos">2346</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2347"><a href="#Generator-2347"><span class="linenos">2347</span></a>
+</span><span id="Generator-2348"><a href="#Generator-2348"><span class="linenos">2348</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-2349"><a href="#Generator-2349"><span class="linenos">2349</span></a> <span class="k">return</span> <span class="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-2350"><a href="#Generator-2350"><span class="linenos">2350</span></a>
+</span><span id="Generator-2351"><a href="#Generator-2351"><span class="linenos">2351</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-2352"><a href="#Generator-2352"><span class="linenos">2352</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2353"><a href="#Generator-2353"><span class="linenos">2353</span></a>
-</span><span id="Generator-2354"><a href="#Generator-2354"><span class="linenos">2354</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-2355"><a href="#Generator-2355"><span class="linenos">2355</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-2354"><a href="#Generator-2354"><span class="linenos">2354</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-2355"><a href="#Generator-2355"><span class="linenos">2355</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2356"><a href="#Generator-2356"><span class="linenos">2356</span></a>
-</span><span id="Generator-2357"><a href="#Generator-2357"><span class="linenos">2357</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="Generator-2358"><a href="#Generator-2358"><span class="linenos">2358</span></a> <span class="n">arg_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="Generator-2357"><a href="#Generator-2357"><span class="linenos">2357</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-2358"><a href="#Generator-2358"><span class="linenos">2358</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2359"><a href="#Generator-2359"><span class="linenos">2359</span></a>
-</span><span id="Generator-2360"><a href="#Generator-2360"><span class="linenos">2360</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-2361"><a href="#Generator-2361"><span class="linenos">2361</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-2362"><a href="#Generator-2362"><span class="linenos">2362</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-2363"><a href="#Generator-2363"><span class="linenos">2363</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-2364"><a href="#Generator-2364"><span class="linenos">2364</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-2360"><a href="#Generator-2360"><span class="linenos">2360</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-2361"><a href="#Generator-2361"><span class="linenos">2361</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2362"><a href="#Generator-2362"><span class="linenos">2362</span></a>
+</span><span id="Generator-2363"><a href="#Generator-2363"><span class="linenos">2363</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-2364"><a href="#Generator-2364"><span class="linenos">2364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2365"><a href="#Generator-2365"><span class="linenos">2365</span></a>
-</span><span id="Generator-2366"><a href="#Generator-2366"><span class="linenos">2366</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
-</span><span id="Generator-2367"><a href="#Generator-2367"><span class="linenos">2367</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="Generator-2368"><a href="#Generator-2368"><span class="linenos">2368</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2369"><a href="#Generator-2369"><span class="linenos">2369</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="Generator-2370"><a href="#Generator-2370"><span class="linenos">2370</span></a>
-</span><span id="Generator-2371"><a href="#Generator-2371"><span class="linenos">2371</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Generator-2372"><a href="#Generator-2372"><span class="linenos">2372</span></a>
-</span><span id="Generator-2373"><a href="#Generator-2373"><span class="linenos">2373</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
-</span><span id="Generator-2374"><a href="#Generator-2374"><span class="linenos">2374</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-2375"><a href="#Generator-2375"><span class="linenos">2375</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator-2376"><a href="#Generator-2376"><span class="linenos">2376</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="Generator-2377"><a href="#Generator-2377"><span class="linenos">2377</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-2378"><a href="#Generator-2378"><span class="linenos">2378</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
-</span><span id="Generator-2379"><a href="#Generator-2379"><span class="linenos">2379</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2380"><a href="#Generator-2380"><span class="linenos">2380</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2366"><a href="#Generator-2366"><span class="linenos">2366</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-2367"><a href="#Generator-2367"><span class="linenos">2367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2368"><a href="#Generator-2368"><span class="linenos">2368</span></a>
+</span><span id="Generator-2369"><a href="#Generator-2369"><span class="linenos">2369</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-2370"><a href="#Generator-2370"><span class="linenos">2370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2371"><a href="#Generator-2371"><span class="linenos">2371</span></a>
+</span><span id="Generator-2372"><a href="#Generator-2372"><span class="linenos">2372</span></a> <span class="k">def</span> <span class="nf">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-2373"><a href="#Generator-2373"><span class="linenos">2373</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
+</span><span id="Generator-2374"><a href="#Generator-2374"><span class="linenos">2374</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-2375"><a href="#Generator-2375"><span class="linenos">2375</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2376"><a href="#Generator-2376"><span class="linenos">2376</span></a> <span class="p">)</span>
+</span><span id="Generator-2377"><a href="#Generator-2377"><span class="linenos">2377</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2378"><a href="#Generator-2378"><span class="linenos">2378</span></a>
+</span><span id="Generator-2379"><a href="#Generator-2379"><span class="linenos">2379</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-2380"><a href="#Generator-2380"><span class="linenos">2380</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2381"><a href="#Generator-2381"><span class="linenos">2381</span></a>
-</span><span id="Generator-2382"><a href="#Generator-2382"><span class="linenos">2382</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-2383"><a href="#Generator-2383"><span class="linenos">2383</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-2384"><a href="#Generator-2384"><span class="linenos">2384</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-2385"><a href="#Generator-2385"><span class="linenos">2385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2386"><a href="#Generator-2386"><span class="linenos">2386</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-2382"><a href="#Generator-2382"><span class="linenos">2382</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-2383"><a href="#Generator-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2384"><a href="#Generator-2384"><span class="linenos">2384</span></a>
+</span><span id="Generator-2385"><a href="#Generator-2385"><span class="linenos">2385</span></a> <span class="k">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-2386"><a href="#Generator-2386"><span class="linenos">2386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2387"><a href="#Generator-2387"><span class="linenos">2387</span></a>
-</span><span id="Generator-2388"><a href="#Generator-2388"><span class="linenos">2388</span></a> <span class="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-2389"><a href="#Generator-2389"><span class="linenos">2389</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-2388"><a href="#Generator-2388"><span class="linenos">2388</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-2389"><a href="#Generator-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2390"><a href="#Generator-2390"><span class="linenos">2390</span></a>
-</span><span id="Generator-2391"><a href="#Generator-2391"><span class="linenos">2391</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-2392"><a href="#Generator-2392"><span class="linenos">2392</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Generator-2393"><a href="#Generator-2393"><span class="linenos">2393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span>
-</span><span id="Generator-2394"><a href="#Generator-2394"><span class="linenos">2394</span></a> <span class="p">)</span>
-</span><span id="Generator-2395"><a href="#Generator-2395"><span class="linenos">2395</span></a>
-</span><span id="Generator-2396"><a href="#Generator-2396"><span class="linenos">2396</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="Generator-2397"><a href="#Generator-2397"><span class="linenos">2397</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-2398"><a href="#Generator-2398"><span class="linenos">2398</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-2399"><a href="#Generator-2399"><span class="linenos">2399</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-2400"><a href="#Generator-2400"><span class="linenos">2400</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-2401"><a href="#Generator-2401"><span class="linenos">2401</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-2402"><a href="#Generator-2402"><span class="linenos">2402</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-2403"><a href="#Generator-2403"><span class="linenos">2403</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-2404"><a href="#Generator-2404"><span class="linenos">2404</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-2405"><a href="#Generator-2405"><span class="linenos">2405</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-2406"><a href="#Generator-2406"><span class="linenos">2406</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2407"><a href="#Generator-2407"><span class="linenos">2407</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">expression</span><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-2391"><a href="#Generator-2391"><span class="linenos">2391</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-2392"><a href="#Generator-2392"><span class="linenos">2392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2393"><a href="#Generator-2393"><span class="linenos">2393</span></a>
+</span><span id="Generator-2394"><a href="#Generator-2394"><span class="linenos">2394</span></a> <span class="k">def</span> <span class="nf">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-2395"><a href="#Generator-2395"><span class="linenos">2395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2396"><a href="#Generator-2396"><span class="linenos">2396</span></a>
+</span><span id="Generator-2397"><a href="#Generator-2397"><span class="linenos">2397</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-2398"><a href="#Generator-2398"><span class="linenos">2398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2399"><a href="#Generator-2399"><span class="linenos">2399</span></a>
+</span><span id="Generator-2400"><a href="#Generator-2400"><span class="linenos">2400</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-2401"><a href="#Generator-2401"><span class="linenos">2401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2402"><a href="#Generator-2402"><span class="linenos">2402</span></a>
+</span><span id="Generator-2403"><a href="#Generator-2403"><span class="linenos">2403</span></a> <span class="k">def</span> <span class="nf">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-2404"><a href="#Generator-2404"><span class="linenos">2404</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2405"><a href="#Generator-2405"><span class="linenos">2405</span></a>
+</span><span id="Generator-2406"><a href="#Generator-2406"><span class="linenos">2406</span></a> <span class="k">def</span> <span class="nf">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-2407"><a href="#Generator-2407"><span class="linenos">2407</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2408"><a href="#Generator-2408"><span class="linenos">2408</span></a>
-</span><span id="Generator-2409"><a href="#Generator-2409"><span class="linenos">2409</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-2410"><a href="#Generator-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2409"><a href="#Generator-2409"><span class="linenos">2409</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-2410"><a href="#Generator-2410"><span class="linenos">2410</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-2411"><a href="#Generator-2411"><span class="linenos">2411</span></a>
-</span><span id="Generator-2412"><a href="#Generator-2412"><span class="linenos">2412</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator-2413"><a href="#Generator-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-2412"><a href="#Generator-2412"><span class="linenos">2412</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-2413"><a href="#Generator-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2414"><a href="#Generator-2414"><span class="linenos">2414</span></a>
-</span><span id="Generator-2415"><a href="#Generator-2415"><span class="linenos">2415</span></a> <span class="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-2416"><a href="#Generator-2416"><span class="linenos">2416</span></a>
-</span><span id="Generator-2417"><a href="#Generator-2417"><span class="linenos">2417</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-2418"><a href="#Generator-2418"><span class="linenos">2418</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-2419"><a href="#Generator-2419"><span class="linenos">2419</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-2415"><a href="#Generator-2415"><span class="linenos">2415</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-2416"><a href="#Generator-2416"><span class="linenos">2416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2417"><a href="#Generator-2417"><span class="linenos">2417</span></a>
+</span><span id="Generator-2418"><a href="#Generator-2418"><span class="linenos">2418</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-2419"><a href="#Generator-2419"><span class="linenos">2419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
</span><span id="Generator-2420"><a href="#Generator-2420"><span class="linenos">2420</span></a>
-</span><span id="Generator-2421"><a href="#Generator-2421"><span class="linenos">2421</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-2422"><a href="#Generator-2422"><span class="linenos">2422</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-2423"><a href="#Generator-2423"><span class="linenos">2423</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-2424"><a href="#Generator-2424"><span class="linenos">2424</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="Generator-2425"><a href="#Generator-2425"><span class="linenos">2425</span></a> <span class="k">continue</span>
-</span><span id="Generator-2426"><a href="#Generator-2426"><span class="linenos">2426</span></a>
-</span><span id="Generator-2427"><a href="#Generator-2427"><span class="linenos">2427</span></a> <span class="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-2428"><a href="#Generator-2428"><span class="linenos">2428</span></a>
-</span><span id="Generator-2429"><a href="#Generator-2429"><span class="linenos">2429</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-2430"><a href="#Generator-2430"><span class="linenos">2430</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-2431"><a href="#Generator-2431"><span class="linenos">2431</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-2432"><a href="#Generator-2432"><span class="linenos">2432</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2433"><a href="#Generator-2433"><span class="linenos">2433</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-2434"><a href="#Generator-2434"><span class="linenos">2434</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-2435"><a href="#Generator-2435"><span class="linenos">2435</span></a> <span class="p">)</span>
-</span><span id="Generator-2436"><a href="#Generator-2436"><span class="linenos">2436</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2437"><a href="#Generator-2437"><span class="linenos">2437</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-2438"><a href="#Generator-2438"><span class="linenos">2438</span></a>
-</span><span id="Generator-2439"><a href="#Generator-2439"><span class="linenos">2439</span></a> <span class="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-2440"><a href="#Generator-2440"><span class="linenos">2440</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
-</span><span id="Generator-2441"><a href="#Generator-2441"><span class="linenos">2441</span></a>
-</span><span id="Generator-2442"><a href="#Generator-2442"><span class="linenos">2442</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-2443"><a href="#Generator-2443"><span class="linenos">2443</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-2444"><a href="#Generator-2444"><span class="linenos">2444</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-2445"><a href="#Generator-2445"><span class="linenos">2445</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator-2446"><a href="#Generator-2446"><span class="linenos">2446</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-2447"><a href="#Generator-2447"><span class="linenos">2447</span></a> <span class="k">return</span> <span class="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-2421"><a href="#Generator-2421"><span class="linenos">2421</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-2422"><a href="#Generator-2422"><span class="linenos">2422</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-2423"><a href="#Generator-2423"><span class="linenos">2423</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-2424"><a href="#Generator-2424"><span class="linenos">2424</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2425"><a href="#Generator-2425"><span class="linenos">2425</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-2426"><a href="#Generator-2426"><span class="linenos">2426</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-2427"><a href="#Generator-2427"><span class="linenos">2427</span></a>
+</span><span id="Generator-2428"><a href="#Generator-2428"><span class="linenos">2428</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-2429"><a href="#Generator-2429"><span class="linenos">2429</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-2430"><a href="#Generator-2430"><span class="linenos">2430</span></a> <span class="k">return</span> <span class="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-2431"><a href="#Generator-2431"><span class="linenos">2431</span></a>
+</span><span id="Generator-2432"><a href="#Generator-2432"><span class="linenos">2432</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-2433"><a href="#Generator-2433"><span class="linenos">2433</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-2434"><a href="#Generator-2434"><span class="linenos">2434</span></a>
+</span><span id="Generator-2435"><a href="#Generator-2435"><span class="linenos">2435</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="Generator-2436"><a href="#Generator-2436"><span class="linenos">2436</span></a> <span class="n">arg_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="Generator-2437"><a href="#Generator-2437"><span class="linenos">2437</span></a>
+</span><span id="Generator-2438"><a href="#Generator-2438"><span class="linenos">2438</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-2439"><a href="#Generator-2439"><span class="linenos">2439</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-2440"><a href="#Generator-2440"><span class="linenos">2440</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-2441"><a href="#Generator-2441"><span class="linenos">2441</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-2442"><a href="#Generator-2442"><span class="linenos">2442</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-2443"><a href="#Generator-2443"><span class="linenos">2443</span></a>
+</span><span id="Generator-2444"><a href="#Generator-2444"><span class="linenos">2444</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
+</span><span id="Generator-2445"><a href="#Generator-2445"><span class="linenos">2445</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator-2446"><a href="#Generator-2446"><span class="linenos">2446</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2447"><a href="#Generator-2447"><span class="linenos">2447</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
</span><span id="Generator-2448"><a href="#Generator-2448"><span class="linenos">2448</span></a>
-</span><span id="Generator-2449"><a href="#Generator-2449"><span class="linenos">2449</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-2450"><a href="#Generator-2450"><span class="linenos">2450</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-2451"><a href="#Generator-2451"><span class="linenos">2451</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-2452"><a href="#Generator-2452"><span class="linenos">2452</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-2453"><a href="#Generator-2453"><span class="linenos">2453</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-2454"><a href="#Generator-2454"><span class="linenos">2454</span></a>
-</span><span id="Generator-2455"><a href="#Generator-2455"><span class="linenos">2455</span></a> <span class="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-2456"><a href="#Generator-2456"><span class="linenos">2456</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2457"><a href="#Generator-2457"><span class="linenos">2457</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-2458"><a href="#Generator-2458"><span class="linenos">2458</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-2459"><a href="#Generator-2459"><span class="linenos">2459</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-2460"><a href="#Generator-2460"><span class="linenos">2460</span></a> <span class="p">)</span>
-</span><span id="Generator-2461"><a href="#Generator-2461"><span class="linenos">2461</span></a>
-</span><span id="Generator-2462"><a href="#Generator-2462"><span class="linenos">2462</span></a> <span class="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-2463"><a href="#Generator-2463"><span class="linenos">2463</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-2464"><a href="#Generator-2464"><span class="linenos">2464</span></a>
-</span><span id="Generator-2465"><a href="#Generator-2465"><span class="linenos">2465</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-2466"><a href="#Generator-2466"><span class="linenos">2466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2467"><a href="#Generator-2467"><span class="linenos">2467</span></a>
-</span><span id="Generator-2468"><a href="#Generator-2468"><span class="linenos">2468</span></a> <span class="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-2469"><a href="#Generator-2469"><span class="linenos">2469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2470"><a href="#Generator-2470"><span class="linenos">2470</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-2471"><a href="#Generator-2471"><span class="linenos">2471</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-2472"><a href="#Generator-2472"><span class="linenos">2472</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-2473"><a href="#Generator-2473"><span class="linenos">2473</span></a> <span class="p">)</span>
-</span><span id="Generator-2474"><a href="#Generator-2474"><span class="linenos">2474</span></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-2475"><a href="#Generator-2475"><span class="linenos">2475</span></a>
-</span><span id="Generator-2476"><a href="#Generator-2476"><span class="linenos">2476</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-2477"><a href="#Generator-2477"><span class="linenos">2477</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2478"><a href="#Generator-2478"><span class="linenos">2478</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-2479"><a href="#Generator-2479"><span class="linenos">2479</span></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-2480"><a href="#Generator-2480"><span class="linenos">2480</span></a>
-</span><span id="Generator-2481"><a href="#Generator-2481"><span class="linenos">2481</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-2482"><a href="#Generator-2482"><span class="linenos">2482</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2483"><a href="#Generator-2483"><span class="linenos">2483</span></a>
-</span><span id="Generator-2484"><a href="#Generator-2484"><span class="linenos">2484</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-2485"><a href="#Generator-2485"><span class="linenos">2485</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-2486"><a href="#Generator-2486"><span class="linenos">2486</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-2487"><a href="#Generator-2487"><span class="linenos">2487</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-2488"><a href="#Generator-2488"><span class="linenos">2488</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-2449"><a href="#Generator-2449"><span class="linenos">2449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Generator-2450"><a href="#Generator-2450"><span class="linenos">2450</span></a>
+</span><span id="Generator-2451"><a href="#Generator-2451"><span class="linenos">2451</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
+</span><span id="Generator-2452"><a href="#Generator-2452"><span class="linenos">2452</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-2453"><a href="#Generator-2453"><span class="linenos">2453</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator-2454"><a href="#Generator-2454"><span class="linenos">2454</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="Generator-2455"><a href="#Generator-2455"><span class="linenos">2455</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-2456"><a href="#Generator-2456"><span class="linenos">2456</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
+</span><span id="Generator-2457"><a href="#Generator-2457"><span class="linenos">2457</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2458"><a href="#Generator-2458"><span class="linenos">2458</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2459"><a href="#Generator-2459"><span class="linenos">2459</span></a>
+</span><span id="Generator-2460"><a href="#Generator-2460"><span class="linenos">2460</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-2461"><a href="#Generator-2461"><span class="linenos">2461</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-2462"><a href="#Generator-2462"><span class="linenos">2462</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-2463"><a href="#Generator-2463"><span class="linenos">2463</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-2464"><a href="#Generator-2464"><span class="linenos">2464</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-2465"><a href="#Generator-2465"><span class="linenos">2465</span></a>
+</span><span id="Generator-2466"><a href="#Generator-2466"><span class="linenos">2466</span></a> <span class="k">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-2467"><a href="#Generator-2467"><span class="linenos">2467</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-2468"><a href="#Generator-2468"><span class="linenos">2468</span></a>
+</span><span id="Generator-2469"><a href="#Generator-2469"><span class="linenos">2469</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-2470"><a href="#Generator-2470"><span class="linenos">2470</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Generator-2471"><a href="#Generator-2471"><span class="linenos">2471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span>
+</span><span id="Generator-2472"><a href="#Generator-2472"><span class="linenos">2472</span></a> <span class="p">)</span>
+</span><span id="Generator-2473"><a href="#Generator-2473"><span class="linenos">2473</span></a>
+</span><span id="Generator-2474"><a href="#Generator-2474"><span class="linenos">2474</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="Generator-2475"><a href="#Generator-2475"><span class="linenos">2475</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-2476"><a href="#Generator-2476"><span class="linenos">2476</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-2477"><a href="#Generator-2477"><span class="linenos">2477</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-2478"><a href="#Generator-2478"><span class="linenos">2478</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-2479"><a href="#Generator-2479"><span class="linenos">2479</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-2480"><a href="#Generator-2480"><span class="linenos">2480</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-2481"><a href="#Generator-2481"><span class="linenos">2481</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-2482"><a href="#Generator-2482"><span class="linenos">2482</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-2483"><a href="#Generator-2483"><span class="linenos">2483</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-2484"><a href="#Generator-2484"><span class="linenos">2484</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2485"><a href="#Generator-2485"><span class="linenos">2485</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-2486"><a href="#Generator-2486"><span class="linenos">2486</span></a>
+</span><span id="Generator-2487"><a href="#Generator-2487"><span class="linenos">2487</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-2488"><a href="#Generator-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-2489"><a href="#Generator-2489"><span class="linenos">2489</span></a>
-</span><span id="Generator-2490"><a href="#Generator-2490"><span class="linenos">2490</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-2491"><a href="#Generator-2491"><span class="linenos">2491</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-2492"><a href="#Generator-2492"><span class="linenos">2492</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-2493"><a href="#Generator-2493"><span class="linenos">2493</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-2494"><a href="#Generator-2494"><span class="linenos">2494</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-2495"><a href="#Generator-2495"><span class="linenos">2495</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-2496"><a href="#Generator-2496"><span class="linenos">2496</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-2497"><a href="#Generator-2497"><span class="linenos">2497</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-2498"><a href="#Generator-2498"><span class="linenos">2498</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2499"><a href="#Generator-2499"><span class="linenos">2499</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-2500"><a href="#Generator-2500"><span class="linenos">2500</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2501"><a href="#Generator-2501"><span class="linenos">2501</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-2502"><a href="#Generator-2502"><span class="linenos">2502</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-2503"><a href="#Generator-2503"><span class="linenos">2503</span></a>
-</span><span id="Generator-2504"><a href="#Generator-2504"><span class="linenos">2504</span></a> <span class="k">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-2505"><a href="#Generator-2505"><span class="linenos">2505</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2506"><a href="#Generator-2506"><span class="linenos">2506</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-2507"><a href="#Generator-2507"><span class="linenos">2507</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-2508"><a href="#Generator-2508"><span class="linenos">2508</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-2509"><a href="#Generator-2509"><span class="linenos">2509</span></a>
-</span><span id="Generator-2510"><a href="#Generator-2510"><span class="linenos">2510</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-2511"><a href="#Generator-2511"><span class="linenos">2511</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-2512"><a href="#Generator-2512"><span class="linenos">2512</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-2513"><a href="#Generator-2513"><span class="linenos">2513</span></a>
-</span><span id="Generator-2514"><a href="#Generator-2514"><span class="linenos">2514</span></a> <span class="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-2515"><a href="#Generator-2515"><span class="linenos">2515</span></a>
-</span><span id="Generator-2516"><a href="#Generator-2516"><span class="linenos">2516</span></a> <span class="k">def</span> <span class="nf">dictproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2517"><a href="#Generator-2517"><span class="linenos">2517</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2518"><a href="#Generator-2518"><span class="linenos">2518</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-2519"><a href="#Generator-2519"><span class="linenos">2519</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2520"><a href="#Generator-2520"><span class="linenos">2520</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
-</span><span id="Generator-2521"><a href="#Generator-2521"><span class="linenos">2521</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2522"><a href="#Generator-2522"><span class="linenos">2522</span></a>
-</span><span id="Generator-2523"><a href="#Generator-2523"><span class="linenos">2523</span></a> <span class="k">def</span> <span class="nf">dictrange_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2524"><a href="#Generator-2524"><span class="linenos">2524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2525"><a href="#Generator-2525"><span class="linenos">2525</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">)</span>
-</span><span id="Generator-2526"><a href="#Generator-2526"><span class="linenos">2526</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">)</span>
-</span><span id="Generator-2527"><a href="#Generator-2527"><span class="linenos">2527</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2528"><a href="#Generator-2528"><span class="linenos">2528</span></a>
-</span><span id="Generator-2529"><a href="#Generator-2529"><span class="linenos">2529</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2530"><a href="#Generator-2530"><span class="linenos">2530</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2531"><a href="#Generator-2531"><span class="linenos">2531</span></a>
-</span><span id="Generator-2532"><a href="#Generator-2532"><span class="linenos">2532</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2533"><a href="#Generator-2533"><span class="linenos">2533</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2534"><a href="#Generator-2534"><span class="linenos">2534</span></a>
-</span><span id="Generator-2535"><a href="#Generator-2535"><span class="linenos">2535</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2536"><a href="#Generator-2536"><span class="linenos">2536</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2537"><a href="#Generator-2537"><span class="linenos">2537</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2538"><a href="#Generator-2538"><span class="linenos">2538</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2539"><a href="#Generator-2539"><span class="linenos">2539</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">)</span>
-</span><span id="Generator-2540"><a href="#Generator-2540"><span class="linenos">2540</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
-</span><span id="Generator-2541"><a href="#Generator-2541"><span class="linenos">2541</span></a>
-</span><span id="Generator-2542"><a href="#Generator-2542"><span class="linenos">2542</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2543"><a href="#Generator-2543"><span class="linenos">2543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2544"><a href="#Generator-2544"><span class="linenos">2544</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;having&quot;</span><span class="p">)</span>
+</span><span id="Generator-2490"><a href="#Generator-2490"><span class="linenos">2490</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator-2491"><a href="#Generator-2491"><span class="linenos">2491</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-2492"><a href="#Generator-2492"><span class="linenos">2492</span></a>
+</span><span id="Generator-2493"><a href="#Generator-2493"><span class="linenos">2493</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-2494"><a href="#Generator-2494"><span class="linenos">2494</span></a>
+</span><span id="Generator-2495"><a href="#Generator-2495"><span class="linenos">2495</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-2496"><a href="#Generator-2496"><span class="linenos">2496</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-2497"><a href="#Generator-2497"><span class="linenos">2497</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-2498"><a href="#Generator-2498"><span class="linenos">2498</span></a>
+</span><span id="Generator-2499"><a href="#Generator-2499"><span class="linenos">2499</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-2500"><a href="#Generator-2500"><span class="linenos">2500</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-2501"><a href="#Generator-2501"><span class="linenos">2501</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-2502"><a href="#Generator-2502"><span class="linenos">2502</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="Generator-2503"><a href="#Generator-2503"><span class="linenos">2503</span></a> <span class="k">continue</span>
+</span><span id="Generator-2504"><a href="#Generator-2504"><span class="linenos">2504</span></a>
+</span><span id="Generator-2505"><a href="#Generator-2505"><span class="linenos">2505</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-2506"><a href="#Generator-2506"><span class="linenos">2506</span></a>
+</span><span id="Generator-2507"><a href="#Generator-2507"><span class="linenos">2507</span></a> <span class="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-2508"><a href="#Generator-2508"><span class="linenos">2508</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-2509"><a href="#Generator-2509"><span class="linenos">2509</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-2510"><a href="#Generator-2510"><span class="linenos">2510</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2511"><a href="#Generator-2511"><span class="linenos">2511</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-2512"><a href="#Generator-2512"><span class="linenos">2512</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-2513"><a href="#Generator-2513"><span class="linenos">2513</span></a> <span class="p">)</span>
+</span><span id="Generator-2514"><a href="#Generator-2514"><span class="linenos">2514</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2515"><a href="#Generator-2515"><span class="linenos">2515</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-2516"><a href="#Generator-2516"><span class="linenos">2516</span></a>
+</span><span id="Generator-2517"><a href="#Generator-2517"><span class="linenos">2517</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-2518"><a href="#Generator-2518"><span class="linenos">2518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
+</span><span id="Generator-2519"><a href="#Generator-2519"><span class="linenos">2519</span></a>
+</span><span id="Generator-2520"><a href="#Generator-2520"><span class="linenos">2520</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-2521"><a href="#Generator-2521"><span class="linenos">2521</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-2522"><a href="#Generator-2522"><span class="linenos">2522</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-2523"><a href="#Generator-2523"><span class="linenos">2523</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator-2524"><a href="#Generator-2524"><span class="linenos">2524</span></a> <span class="k">return</span> <span class="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-2525"><a href="#Generator-2525"><span class="linenos">2525</span></a> <span class="k">return</span> <span class="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-2526"><a href="#Generator-2526"><span class="linenos">2526</span></a>
+</span><span id="Generator-2527"><a href="#Generator-2527"><span class="linenos">2527</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-2528"><a href="#Generator-2528"><span class="linenos">2528</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-2529"><a href="#Generator-2529"><span class="linenos">2529</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-2530"><a href="#Generator-2530"><span class="linenos">2530</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-2531"><a href="#Generator-2531"><span class="linenos">2531</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-2532"><a href="#Generator-2532"><span class="linenos">2532</span></a>
+</span><span id="Generator-2533"><a href="#Generator-2533"><span class="linenos">2533</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-2534"><a href="#Generator-2534"><span class="linenos">2534</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2535"><a href="#Generator-2535"><span class="linenos">2535</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-2536"><a href="#Generator-2536"><span class="linenos">2536</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-2537"><a href="#Generator-2537"><span class="linenos">2537</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-2538"><a href="#Generator-2538"><span class="linenos">2538</span></a> <span class="p">)</span>
+</span><span id="Generator-2539"><a href="#Generator-2539"><span class="linenos">2539</span></a>
+</span><span id="Generator-2540"><a href="#Generator-2540"><span class="linenos">2540</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-2541"><a href="#Generator-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><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-2542"><a href="#Generator-2542"><span class="linenos">2542</span></a>
+</span><span id="Generator-2543"><a href="#Generator-2543"><span class="linenos">2543</span></a> <span class="k">def</span> <span class="nf">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-2544"><a href="#Generator-2544"><span class="linenos">2544</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-2545"><a href="#Generator-2545"><span class="linenos">2545</span></a>
-</span><span id="Generator-2546"><a href="#Generator-2546"><span class="linenos">2546</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="Generator-2547"><a href="#Generator-2547"><span class="linenos">2547</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2548"><a href="#Generator-2548"><span class="linenos">2548</span></a>
-</span><span id="Generator-2549"><a href="#Generator-2549"><span class="linenos">2549</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-2550"><a href="#Generator-2550"><span class="linenos">2550</span></a>
-</span><span id="Generator-2551"><a href="#Generator-2551"><span class="linenos">2551</span></a> <span class="k">def</span> <span class="nf">querytransform_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2552"><a href="#Generator-2552"><span class="linenos">2552</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-2553"><a href="#Generator-2553"><span class="linenos">2553</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_before&quot;</span><span class="p">)</span>
-</span><span id="Generator-2554"><a href="#Generator-2554"><span class="linenos">2554</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2555"><a href="#Generator-2555"><span class="linenos">2555</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_writer&quot;</span><span class="p">)</span>
-</span><span id="Generator-2556"><a href="#Generator-2556"><span class="linenos">2556</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2557"><a href="#Generator-2557"><span class="linenos">2557</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2558"><a href="#Generator-2558"><span class="linenos">2558</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator-2559"><a href="#Generator-2559"><span class="linenos">2559</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2560"><a href="#Generator-2560"><span class="linenos">2560</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_after&quot;</span><span class="p">)</span>
-</span><span id="Generator-2561"><a href="#Generator-2561"><span class="linenos">2561</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2562"><a href="#Generator-2562"><span class="linenos">2562</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_reader&quot;</span><span class="p">)</span>
-</span><span id="Generator-2563"><a href="#Generator-2563"><span class="linenos">2563</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2564"><a href="#Generator-2564"><span class="linenos">2564</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2565"><a href="#Generator-2565"><span class="linenos">2565</span></a>
-</span><span id="Generator-2566"><a href="#Generator-2566"><span class="linenos">2566</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2567"><a href="#Generator-2567"><span class="linenos">2567</span></a> <span class="n">key_block_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;key_block_size&quot;</span><span class="p">)</span>
-</span><span id="Generator-2568"><a href="#Generator-2568"><span class="linenos">2568</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
-</span><span id="Generator-2569"><a href="#Generator-2569"><span class="linenos">2569</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2570"><a href="#Generator-2570"><span class="linenos">2570</span></a>
-</span><span id="Generator-2571"><a href="#Generator-2571"><span class="linenos">2571</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-2572"><a href="#Generator-2572"><span class="linenos">2572</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator-2573"><a href="#Generator-2573"><span class="linenos">2573</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2574"><a href="#Generator-2574"><span class="linenos">2574</span></a>
-</span><span id="Generator-2575"><a href="#Generator-2575"><span class="linenos">2575</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;parser&quot;</span><span class="p">)</span>
-</span><span id="Generator-2576"><a href="#Generator-2576"><span class="linenos">2576</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Generator-2577"><a href="#Generator-2577"><span class="linenos">2577</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2578"><a href="#Generator-2578"><span class="linenos">2578</span></a>
-</span><span id="Generator-2579"><a href="#Generator-2579"><span class="linenos">2579</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;comment&quot;</span><span class="p">)</span>
-</span><span id="Generator-2580"><a href="#Generator-2580"><span class="linenos">2580</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="Generator-2581"><a href="#Generator-2581"><span class="linenos">2581</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2582"><a href="#Generator-2582"><span class="linenos">2582</span></a>
-</span><span id="Generator-2583"><a href="#Generator-2583"><span class="linenos">2583</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;visible&quot;</span><span class="p">)</span>
-</span><span id="Generator-2584"><a href="#Generator-2584"><span class="linenos">2584</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-2585"><a href="#Generator-2585"><span class="linenos">2585</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
-</span><span id="Generator-2586"><a href="#Generator-2586"><span class="linenos">2586</span></a>
-</span><span id="Generator-2587"><a href="#Generator-2587"><span class="linenos">2587</span></a> <span class="n">engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator-2588"><a href="#Generator-2588"><span class="linenos">2588</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
-</span><span id="Generator-2589"><a href="#Generator-2589"><span class="linenos">2589</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2590"><a href="#Generator-2590"><span class="linenos">2590</span></a>
-</span><span id="Generator-2591"><a href="#Generator-2591"><span class="linenos">2591</span></a> <span class="n">secondary_engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator-2592"><a href="#Generator-2592"><span class="linenos">2592</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
-</span><span id="Generator-2593"><a href="#Generator-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2594"><a href="#Generator-2594"><span class="linenos">2594</span></a>
-</span><span id="Generator-2595"><a href="#Generator-2595"><span class="linenos">2595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
-</span><span id="Generator-2596"><a href="#Generator-2596"><span class="linenos">2596</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2597"><a href="#Generator-2597"><span class="linenos">2597</span></a>
-</span><span id="Generator-2598"><a href="#Generator-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2599"><a href="#Generator-2599"><span class="linenos">2599</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-2600"><a href="#Generator-2600"><span class="linenos">2600</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
-</span><span id="Generator-2601"><a href="#Generator-2601"><span class="linenos">2601</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2602"><a href="#Generator-2602"><span class="linenos">2602</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-2603"><a href="#Generator-2603"><span class="linenos">2603</span></a> <span class="n">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;type&quot;</span><span class="p">)</span>
-</span><span id="Generator-2604"><a href="#Generator-2604"><span class="linenos">2604</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">type_</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">type_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2605"><a href="#Generator-2605"><span class="linenos">2605</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator-2606"><a href="#Generator-2606"><span class="linenos">2606</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2607"><a href="#Generator-2607"><span class="linenos">2607</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2608"><a href="#Generator-2608"><span class="linenos">2608</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-2609"><a href="#Generator-2609"><span class="linenos">2609</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">type_</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2546"><a href="#Generator-2546"><span class="linenos">2546</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-2547"><a href="#Generator-2547"><span class="linenos">2547</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2548"><a href="#Generator-2548"><span class="linenos">2548</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-2549"><a href="#Generator-2549"><span class="linenos">2549</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2550"><a href="#Generator-2550"><span class="linenos">2550</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-2551"><a href="#Generator-2551"><span class="linenos">2551</span></a> <span class="p">)</span>
+</span><span id="Generator-2552"><a href="#Generator-2552"><span class="linenos">2552</span></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-2553"><a href="#Generator-2553"><span class="linenos">2553</span></a>
+</span><span id="Generator-2554"><a href="#Generator-2554"><span class="linenos">2554</span></a> <span class="k">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-2555"><a href="#Generator-2555"><span class="linenos">2555</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2556"><a href="#Generator-2556"><span class="linenos">2556</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-2557"><a href="#Generator-2557"><span class="linenos">2557</span></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-2558"><a href="#Generator-2558"><span class="linenos">2558</span></a>
+</span><span id="Generator-2559"><a href="#Generator-2559"><span class="linenos">2559</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-2560"><a href="#Generator-2560"><span class="linenos">2560</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2561"><a href="#Generator-2561"><span class="linenos">2561</span></a>
+</span><span id="Generator-2562"><a href="#Generator-2562"><span class="linenos">2562</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-2563"><a href="#Generator-2563"><span class="linenos">2563</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-2564"><a href="#Generator-2564"><span class="linenos">2564</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-2565"><a href="#Generator-2565"><span class="linenos">2565</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-2566"><a href="#Generator-2566"><span class="linenos">2566</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-2567"><a href="#Generator-2567"><span class="linenos">2567</span></a>
+</span><span id="Generator-2568"><a href="#Generator-2568"><span class="linenos">2568</span></a> <span class="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-2569"><a href="#Generator-2569"><span class="linenos">2569</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-2570"><a href="#Generator-2570"><span class="linenos">2570</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-2571"><a href="#Generator-2571"><span class="linenos">2571</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-2572"><a href="#Generator-2572"><span class="linenos">2572</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-2573"><a href="#Generator-2573"><span class="linenos">2573</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-2574"><a href="#Generator-2574"><span class="linenos">2574</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-2575"><a href="#Generator-2575"><span class="linenos">2575</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-2576"><a href="#Generator-2576"><span class="linenos">2576</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2577"><a href="#Generator-2577"><span class="linenos">2577</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-2578"><a href="#Generator-2578"><span class="linenos">2578</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2579"><a href="#Generator-2579"><span class="linenos">2579</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-2580"><a href="#Generator-2580"><span class="linenos">2580</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-2581"><a href="#Generator-2581"><span class="linenos">2581</span></a>
+</span><span id="Generator-2582"><a href="#Generator-2582"><span class="linenos">2582</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-2583"><a href="#Generator-2583"><span class="linenos">2583</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-2584"><a href="#Generator-2584"><span class="linenos">2584</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2585"><a href="#Generator-2585"><span class="linenos">2585</span></a>
+</span><span id="Generator-2586"><a href="#Generator-2586"><span class="linenos">2586</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">)</span>
+</span><span id="Generator-2587"><a href="#Generator-2587"><span class="linenos">2587</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
+</span><span id="Generator-2588"><a href="#Generator-2588"><span class="linenos">2588</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
+</span><span id="Generator-2589"><a href="#Generator-2589"><span class="linenos">2589</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-2590"><a href="#Generator-2590"><span class="linenos">2590</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2591"><a href="#Generator-2591"><span class="linenos">2591</span></a>
+</span><span id="Generator-2592"><a href="#Generator-2592"><span class="linenos">2592</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator-2593"><a href="#Generator-2593"><span class="linenos">2593</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-2594"><a href="#Generator-2594"><span class="linenos">2594</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-2595"><a href="#Generator-2595"><span class="linenos">2595</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2596"><a href="#Generator-2596"><span class="linenos">2596</span></a>
+</span><span id="Generator-2597"><a href="#Generator-2597"><span class="linenos">2597</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="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2598"><a href="#Generator-2598"><span class="linenos">2598</span></a>
+</span><span id="Generator-2599"><a href="#Generator-2599"><span class="linenos">2599</span></a> <span class="k">def</span> <span class="nf">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-2600"><a href="#Generator-2600"><span class="linenos">2600</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-2601"><a href="#Generator-2601"><span class="linenos">2601</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-2602"><a href="#Generator-2602"><span class="linenos">2602</span></a>
+</span><span id="Generator-2603"><a href="#Generator-2603"><span class="linenos">2603</span></a> <span class="k">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-2604"><a href="#Generator-2604"><span class="linenos">2604</span></a>
+</span><span id="Generator-2605"><a href="#Generator-2605"><span class="linenos">2605</span></a> <span class="k">def</span> <span class="nf">dictproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2606"><a href="#Generator-2606"><span class="linenos">2606</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2607"><a href="#Generator-2607"><span class="linenos">2607</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-2608"><a href="#Generator-2608"><span class="linenos">2608</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2609"><a href="#Generator-2609"><span class="linenos">2609</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
+</span><span id="Generator-2610"><a href="#Generator-2610"><span class="linenos">2610</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2611"><a href="#Generator-2611"><span class="linenos">2611</span></a>
+</span><span id="Generator-2612"><a href="#Generator-2612"><span class="linenos">2612</span></a> <span class="k">def</span> <span class="nf">dictrange_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2613"><a href="#Generator-2613"><span class="linenos">2613</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2614"><a href="#Generator-2614"><span class="linenos">2614</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">)</span>
+</span><span id="Generator-2615"><a href="#Generator-2615"><span class="linenos">2615</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">)</span>
+</span><span id="Generator-2616"><a href="#Generator-2616"><span class="linenos">2616</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2617"><a href="#Generator-2617"><span class="linenos">2617</span></a>
+</span><span id="Generator-2618"><a href="#Generator-2618"><span class="linenos">2618</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2619"><a href="#Generator-2619"><span class="linenos">2619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2620"><a href="#Generator-2620"><span class="linenos">2620</span></a>
+</span><span id="Generator-2621"><a href="#Generator-2621"><span class="linenos">2621</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2622"><a href="#Generator-2622"><span class="linenos">2622</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2623"><a href="#Generator-2623"><span class="linenos">2623</span></a>
+</span><span id="Generator-2624"><a href="#Generator-2624"><span class="linenos">2624</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2625"><a href="#Generator-2625"><span class="linenos">2625</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2626"><a href="#Generator-2626"><span class="linenos">2626</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2627"><a href="#Generator-2627"><span class="linenos">2627</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2628"><a href="#Generator-2628"><span class="linenos">2628</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">)</span>
+</span><span id="Generator-2629"><a href="#Generator-2629"><span class="linenos">2629</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
+</span><span id="Generator-2630"><a href="#Generator-2630"><span class="linenos">2630</span></a>
+</span><span id="Generator-2631"><a href="#Generator-2631"><span class="linenos">2631</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2632"><a href="#Generator-2632"><span class="linenos">2632</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2633"><a href="#Generator-2633"><span class="linenos">2633</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;having&quot;</span><span class="p">)</span>
+</span><span id="Generator-2634"><a href="#Generator-2634"><span class="linenos">2634</span></a>
+</span><span id="Generator-2635"><a href="#Generator-2635"><span class="linenos">2635</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="Generator-2636"><a href="#Generator-2636"><span class="linenos">2636</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2637"><a href="#Generator-2637"><span class="linenos">2637</span></a>
+</span><span id="Generator-2638"><a href="#Generator-2638"><span class="linenos">2638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2639"><a href="#Generator-2639"><span class="linenos">2639</span></a>
+</span><span id="Generator-2640"><a href="#Generator-2640"><span class="linenos">2640</span></a> <span class="k">def</span> <span class="nf">querytransform_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2641"><a href="#Generator-2641"><span class="linenos">2641</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-2642"><a href="#Generator-2642"><span class="linenos">2642</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_before&quot;</span><span class="p">)</span>
+</span><span id="Generator-2643"><a href="#Generator-2643"><span class="linenos">2643</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2644"><a href="#Generator-2644"><span class="linenos">2644</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_writer&quot;</span><span class="p">)</span>
+</span><span id="Generator-2645"><a href="#Generator-2645"><span class="linenos">2645</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2646"><a href="#Generator-2646"><span class="linenos">2646</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2647"><a href="#Generator-2647"><span class="linenos">2647</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator-2648"><a href="#Generator-2648"><span class="linenos">2648</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2649"><a href="#Generator-2649"><span class="linenos">2649</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_after&quot;</span><span class="p">)</span>
+</span><span id="Generator-2650"><a href="#Generator-2650"><span class="linenos">2650</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2651"><a href="#Generator-2651"><span class="linenos">2651</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_reader&quot;</span><span class="p">)</span>
+</span><span id="Generator-2652"><a href="#Generator-2652"><span class="linenos">2652</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2653"><a href="#Generator-2653"><span class="linenos">2653</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2654"><a href="#Generator-2654"><span class="linenos">2654</span></a>
+</span><span id="Generator-2655"><a href="#Generator-2655"><span class="linenos">2655</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2656"><a href="#Generator-2656"><span class="linenos">2656</span></a> <span class="n">key_block_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;key_block_size&quot;</span><span class="p">)</span>
+</span><span id="Generator-2657"><a href="#Generator-2657"><span class="linenos">2657</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
+</span><span id="Generator-2658"><a href="#Generator-2658"><span class="linenos">2658</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2659"><a href="#Generator-2659"><span class="linenos">2659</span></a>
+</span><span id="Generator-2660"><a href="#Generator-2660"><span class="linenos">2660</span></a> <span class="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-2661"><a href="#Generator-2661"><span class="linenos">2661</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator-2662"><a href="#Generator-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2663"><a href="#Generator-2663"><span class="linenos">2663</span></a>
+</span><span id="Generator-2664"><a href="#Generator-2664"><span class="linenos">2664</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;parser&quot;</span><span class="p">)</span>
+</span><span id="Generator-2665"><a href="#Generator-2665"><span class="linenos">2665</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Generator-2666"><a href="#Generator-2666"><span class="linenos">2666</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2667"><a href="#Generator-2667"><span class="linenos">2667</span></a>
+</span><span id="Generator-2668"><a href="#Generator-2668"><span class="linenos">2668</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;comment&quot;</span><span class="p">)</span>
+</span><span id="Generator-2669"><a href="#Generator-2669"><span class="linenos">2669</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="Generator-2670"><a href="#Generator-2670"><span class="linenos">2670</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2671"><a href="#Generator-2671"><span class="linenos">2671</span></a>
+</span><span id="Generator-2672"><a href="#Generator-2672"><span class="linenos">2672</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;visible&quot;</span><span class="p">)</span>
+</span><span id="Generator-2673"><a href="#Generator-2673"><span class="linenos">2673</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-2674"><a href="#Generator-2674"><span class="linenos">2674</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
+</span><span id="Generator-2675"><a href="#Generator-2675"><span class="linenos">2675</span></a>
+</span><span id="Generator-2676"><a href="#Generator-2676"><span class="linenos">2676</span></a> <span class="n">engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator-2677"><a href="#Generator-2677"><span class="linenos">2677</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
+</span><span id="Generator-2678"><a href="#Generator-2678"><span class="linenos">2678</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2679"><a href="#Generator-2679"><span class="linenos">2679</span></a>
+</span><span id="Generator-2680"><a href="#Generator-2680"><span class="linenos">2680</span></a> <span class="n">secondary_engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator-2681"><a href="#Generator-2681"><span class="linenos">2681</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
+</span><span id="Generator-2682"><a href="#Generator-2682"><span class="linenos">2682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2683"><a href="#Generator-2683"><span class="linenos">2683</span></a>
+</span><span id="Generator-2684"><a href="#Generator-2684"><span class="linenos">2684</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
+</span><span id="Generator-2685"><a href="#Generator-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2686"><a href="#Generator-2686"><span class="linenos">2686</span></a>
+</span><span id="Generator-2687"><a href="#Generator-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2688"><a href="#Generator-2688"><span class="linenos">2688</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-2689"><a href="#Generator-2689"><span class="linenos">2689</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
+</span><span id="Generator-2690"><a href="#Generator-2690"><span class="linenos">2690</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2691"><a href="#Generator-2691"><span class="linenos">2691</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-2692"><a href="#Generator-2692"><span class="linenos">2692</span></a> <span class="n">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;type&quot;</span><span class="p">)</span>
+</span><span id="Generator-2693"><a href="#Generator-2693"><span class="linenos">2693</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">type_</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">type_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2694"><a href="#Generator-2694"><span class="linenos">2694</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator-2695"><a href="#Generator-2695"><span class="linenos">2695</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2696"><a href="#Generator-2696"><span class="linenos">2696</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2697"><a href="#Generator-2697"><span class="linenos">2697</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-2698"><a href="#Generator-2698"><span class="linenos">2698</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">type_</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2699"><a href="#Generator-2699"><span class="linenos">2699</span></a>
+</span><span id="Generator-2700"><a href="#Generator-2700"><span class="linenos">2700</span></a> <span class="k">def</span> <span class="nf">nvl2_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2701"><a href="#Generator-2701"><span class="linenos">2701</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-2702"><a href="#Generator-2702"><span class="linenos">2702</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2703"><a href="#Generator-2703"><span class="linenos">2703</span></a>
+</span><span id="Generator-2704"><a href="#Generator-2704"><span class="linenos">2704</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="Generator-2705"><a href="#Generator-2705"><span class="linenos">2705</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator-2706"><a href="#Generator-2706"><span class="linenos">2706</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="Generator-2707"><a href="#Generator-2707"><span class="linenos">2707</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-2708"><a href="#Generator-2708"><span class="linenos">2708</span></a> <span class="p">)</span>
+</span><span id="Generator-2709"><a href="#Generator-2709"><span class="linenos">2709</span></a> <span class="n">else_cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
+</span><span id="Generator-2710"><a href="#Generator-2710"><span class="linenos">2710</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
+</span><span id="Generator-2711"><a href="#Generator-2711"><span class="linenos">2711</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-2712"><a href="#Generator-2712"><span class="linenos">2712</span></a>
+</span><span id="Generator-2713"><a href="#Generator-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
+</span><span id="Generator-2714"><a href="#Generator-2714"><span class="linenos">2714</span></a>
+</span><span id="Generator-2715"><a href="#Generator-2715"><span class="linenos">2715</span></a> <span class="k">def</span> <span class="nf">comprehension_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2716"><a href="#Generator-2716"><span class="linenos">2716</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2717"><a href="#Generator-2717"><span class="linenos">2717</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator-2718"><a href="#Generator-2718"><span class="linenos">2718</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;iterator&quot;</span><span class="p">)</span>
+</span><span id="Generator-2719"><a href="#Generator-2719"><span class="linenos">2719</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-2720"><a href="#Generator-2720"><span class="linenos">2720</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2721"><a href="#Generator-2721"><span class="linenos">2721</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -6317,42 +6565,44 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.__init__-343"><a href="#Generator.__init__-343"><span class="linenos">343</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Generator.__init__-344"><a href="#Generator.__init__-344"><span class="linenos">344</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.__init__-345"><a href="#Generator.__init__-345"><span class="linenos">345</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.__init__-346"><a href="#Generator.__init__-346"><span class="linenos">346</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.__init__-347"><a href="#Generator.__init__-347"><span class="linenos">347</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.__init__-348"><a href="#Generator.__init__-348"><span class="linenos">348</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator.__init__-349"><a href="#Generator.__init__-349"><span class="linenos">349</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator.__init__-350"><a href="#Generator.__init__-350"><span class="linenos">350</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.__init__-351"><a href="#Generator.__init__-351"><span class="linenos">351</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
-</span><span id="Generator.__init__-352"><a href="#Generator.__init__-352"><span class="linenos">352</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
-</span><span id="Generator.__init__-353"><a href="#Generator.__init__-353"><span class="linenos">353</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.__init__-354"><a href="#Generator.__init__-354"><span class="linenos">354</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
-</span><span id="Generator.__init__-355"><a href="#Generator.__init__-355"><span class="linenos">355</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.__init__-356"><a href="#Generator.__init__-356"><span class="linenos">356</span></a> <span class="p">):</span>
-</span><span id="Generator.__init__-357"><a href="#Generator.__init__-357"><span class="linenos">357</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="Generator.__init__-358"><a href="#Generator.__init__-358"><span class="linenos">358</span></a>
-</span><span id="Generator.__init__-359"><a href="#Generator.__init__-359"><span class="linenos">359</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
-</span><span id="Generator.__init__-360"><a href="#Generator.__init__-360"><span class="linenos">360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
-</span><span id="Generator.__init__-361"><a href="#Generator.__init__-361"><span class="linenos">361</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="Generator.__init__-362"><a href="#Generator.__init__-362"><span class="linenos">362</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-</span><span id="Generator.__init__-363"><a href="#Generator.__init__-363"><span class="linenos">363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
-</span><span id="Generator.__init__-364"><a href="#Generator.__init__-364"><span class="linenos">364</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
-</span><span id="Generator.__init__-365"><a href="#Generator.__init__-365"><span class="linenos">365</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
-</span><span id="Generator.__init__-366"><a href="#Generator.__init__-366"><span class="linenos">366</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
-</span><span id="Generator.__init__-367"><a href="#Generator.__init__-367"><span class="linenos">367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
-</span><span id="Generator.__init__-368"><a href="#Generator.__init__-368"><span class="linenos">368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Generator.__init__-369"><a href="#Generator.__init__-369"><span class="linenos">369</span></a>
-</span><span id="Generator.__init__-370"><a href="#Generator.__init__-370"><span class="linenos">370</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
-</span><span id="Generator.__init__-371"><a href="#Generator.__init__-371"><span class="linenos">371</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.__init__-372"><a href="#Generator.__init__-372"><span class="linenos">372</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
-</span><span id="Generator.__init__-373"><a href="#Generator.__init__-373"><span class="linenos">373</span></a> <span class="p">)</span>
-</span><span id="Generator.__init__-374"><a href="#Generator.__init__-374"><span class="linenos">374</span></a>
-</span><span id="Generator.__init__-375"><a href="#Generator.__init__-375"><span class="linenos">375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.__init__-376"><a href="#Generator.__init__-376"><span class="linenos">376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPE</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span>
-</span><span id="Generator.__init__-377"><a href="#Generator.__init__-377"><span class="linenos">377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPE</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
-</span><span id="Generator.__init__-378"><a href="#Generator.__init__-378"><span class="linenos">378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span 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">int</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="Generator.__init__-360"><a href="#Generator.__init__-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Generator.__init__-361"><a href="#Generator.__init__-361"><span class="linenos">361</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.__init__-362"><a href="#Generator.__init__-362"><span class="linenos">362</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.__init__-363"><a href="#Generator.__init__-363"><span class="linenos">363</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.__init__-364"><a href="#Generator.__init__-364"><span class="linenos">364</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.__init__-365"><a href="#Generator.__init__-365"><span class="linenos">365</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator.__init__-366"><a href="#Generator.__init__-366"><span class="linenos">366</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator.__init__-367"><a href="#Generator.__init__-367"><span class="linenos">367</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.__init__-368"><a href="#Generator.__init__-368"><span class="linenos">368</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
+</span><span id="Generator.__init__-369"><a href="#Generator.__init__-369"><span class="linenos">369</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+</span><span id="Generator.__init__-370"><a href="#Generator.__init__-370"><span class="linenos">370</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.__init__-371"><a href="#Generator.__init__-371"><span class="linenos">371</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
+</span><span id="Generator.__init__-372"><a href="#Generator.__init__-372"><span class="linenos">372</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.__init__-373"><a href="#Generator.__init__-373"><span class="linenos">373</span></a> <span class="p">):</span>
+</span><span id="Generator.__init__-374"><a href="#Generator.__init__-374"><span class="linenos">374</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="Generator.__init__-375"><a href="#Generator.__init__-375"><span class="linenos">375</span></a>
+</span><span id="Generator.__init__-376"><a href="#Generator.__init__-376"><span class="linenos">376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
+</span><span id="Generator.__init__-377"><a href="#Generator.__init__-377"><span class="linenos">377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
+</span><span id="Generator.__init__-378"><a href="#Generator.__init__-378"><span class="linenos">378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="Generator.__init__-379"><a href="#Generator.__init__-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
+</span><span id="Generator.__init__-380"><a href="#Generator.__init__-380"><span class="linenos">380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
+</span><span id="Generator.__init__-381"><a href="#Generator.__init__-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
+</span><span id="Generator.__init__-382"><a href="#Generator.__init__-382"><span class="linenos">382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
+</span><span id="Generator.__init__-383"><a href="#Generator.__init__-383"><span class="linenos">383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
+</span><span id="Generator.__init__-384"><a href="#Generator.__init__-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
+</span><span id="Generator.__init__-385"><a href="#Generator.__init__-385"><span class="linenos">385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Generator.__init__-386"><a href="#Generator.__init__-386"><span class="linenos">386</span></a>
+</span><span id="Generator.__init__-387"><a href="#Generator.__init__-387"><span class="linenos">387</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
+</span><span id="Generator.__init__-388"><a href="#Generator.__init__-388"><span class="linenos">388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.__init__-389"><a href="#Generator.__init__-389"><span class="linenos">389</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
+</span><span id="Generator.__init__-390"><a href="#Generator.__init__-390"><span class="linenos">390</span></a> <span class="p">)</span>
+</span><span id="Generator.__init__-391"><a href="#Generator.__init__-391"><span class="linenos">391</span></a>
+</span><span id="Generator.__init__-392"><a href="#Generator.__init__-392"><span class="linenos">392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.__init__-393"><a href="#Generator.__init__-393"><span class="linenos">393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="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 class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span>
+</span><span id="Generator.__init__-394"><a href="#Generator.__init__-394"><span class="linenos">394</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.__init__-395"><a href="#Generator.__init__-395"><span class="linenos">395</span></a> <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 class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
+</span><span id="Generator.__init__-396"><a href="#Generator.__init__-396"><span class="linenos">396</span></a> <span class="p">)</span>
+</span><span id="Generator.__init__-397"><a href="#Generator.__init__-397"><span class="linenos">397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span 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">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
@@ -6363,7 +6613,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#IntervalDayToSecondSpan">sqlglot.expressions.IntervalDayToSecondSpan</a>&#39;&gt;: &#39;DAY TO SECOND&#39;, &lt;class &#39;<a href="expressions.html#IntervalYearToMonthSpan">sqlglot.expressions.IntervalYearToMonthSpan</a>&#39;&gt;: &#39;YEAR TO MONTH&#39;, &lt;class &#39;<a href="expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;}</span>
</div>
@@ -6660,6 +6910,30 @@ Default: True</li>
</div>
+ <div id="Generator.TZ_TO_WITH_TIME_ZONE" class="classattr">
+ <div class="attr variable">
+ <span class="name">TZ_TO_WITH_TIME_ZONE</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Generator.TZ_TO_WITH_TIME_ZONE"></a>
+
+
+
+ </div>
+ <div id="Generator.NVL2_SUPPORTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NVL2_SUPPORTED</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Generator.NVL2_SUPPORTED"></a>
+
+
+
+ </div>
<div id="Generator.SELECT_KINDS" class="classattr">
<div class="attr variable">
<span class="name">SELECT_KINDS</span><span class="annotation">: Tuple[str, ...]</span> =
@@ -6684,6 +6958,18 @@ Default: True</li>
</div>
+ <div id="Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="classattr">
+ <div class="attr variable">
+ <span class="name">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Generator.ALTER_TABLE_ADD_COLUMN_KEYWORD"></a>
+
+
+
+ </div>
<div id="Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
@@ -6762,7 +7048,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
<input id="Generator.PROPERTIES_LOCATION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Generator.PROPERTIES_LOCATION-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#AlgorithmProperty">sqlglot.expressions.AlgorithmProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#AutoIncrementProperty">sqlglot.expressions.AutoIncrementProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#BlockCompressionProperty">sqlglot.expressions.BlockCompressionProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ChecksumProperty">sqlglot.expressions.ChecksumProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#CollateProperty">sqlglot.expressions.CollateProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ClusteredByProperty">sqlglot.expressions.ClusteredByProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DataBlocksizeProperty">sqlglot.expressions.DataBlocksizeProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#DefinerProperty">sqlglot.expressions.DefinerProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#DictRange">sqlglot.expressions.DictRange</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DictProperty">sqlglot.expressions.DictProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#EngineProperty">sqlglot.expressions.EngineProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#FallbackProperty">sqlglot.expressions.FallbackProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#FileFormatProperty">sqlglot.expressions.FileFormatProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#FreespaceProperty">sqlglot.expressions.FreespaceProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#IsolatedLoadingProperty">sqlglot.expressions.IsolatedLoadingProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#JournalProperty">sqlglot.expressions.JournalProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#LikeProperty">sqlglot.expressions.LikeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#LockingProperty">sqlglot.expressions.LockingProperty</a>&#39;&gt;: &lt;Location.POST_ALIAS: &#39;POST_ALIAS&#39;&gt;, &lt;class &#39;<a href="expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#MergeBlockRatioProperty">sqlglot.expressions.MergeBlockRatioProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;, &lt;class &#39;<a href="expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#PrimaryKey">sqlglot.expressions.PrimaryKey</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#Property">sqlglot.expressions.Property</a>&#39;&gt;: &lt;Location.POST_WITH: &#39;POST_WITH&#39;&gt;, &lt;class &#39;<a href="expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#RowFormatProperty">sqlglot.expressions.RowFormatProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#RowFormatDelimitedProperty">sqlglot.expressions.RowFormatDelimitedProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#RowFormatSerdeProperty">sqlglot.expressions.RowFormatSerdeProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SchemaCommentProperty">sqlglot.expressions.SchemaCommentProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SerdeProperties">sqlglot.expressions.SerdeProperties</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#Set">sqlglot.expressions.Set</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#MergeTreeTTL">sqlglot.expressions.MergeTreeTTL</a>&#39;&gt;: &lt;Location.POST_SCHEMA: &#39;POST_SCHEMA&#39;&gt;, &lt;class &#39;<a href="expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;Location.POST_CREATE: &#39;POST_CREATE&#39;&gt;, &lt;class &#39;<a href="expressions.html#WithDataProperty">sqlglot.expressions.WithDataProperty</a>&#39;&gt;: &lt;Location.POST_EXPRESSION: &#39;POST_EXPRESSION&#39;&gt;, &lt;class &#39;<a href="expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;Location.POST_NAME: &#39;POST_NAME&#39;&gt;}</span>
</div>
@@ -6787,7 +7073,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">WITH_SEPARATED_COMMENTS</span><span class="annotation">: Tuple[Type[<a href="expressions.html#Expression">sqlglot.expressions.Expression</a>], ...]</span> =
<input id="Generator.WITH_SEPARATED_COMMENTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Generator.WITH_SEPARATED_COMMENTS-view-value"></label><span class="default_value">(&lt;class &#39;<a href="expressions.html#Delete">sqlglot.expressions.Delete</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Drop">sqlglot.expressions.Drop</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Update">sqlglot.expressions.Update</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Where">sqlglot.expressions.Where</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;)</span>
+ <label class="view-value-button pdoc-button" for="Generator.WITH_SEPARATED_COMMENTS-view-value"></label><span class="default_value">(&lt;class &#39;<a href="expressions.html#Create">sqlglot.expressions.Create</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Delete">sqlglot.expressions.Delete</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Drop">sqlglot.expressions.Drop</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Join">sqlglot.expressions.Join</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Update">sqlglot.expressions.Update</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Where">sqlglot.expressions.Where</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;)</span>
</div>
@@ -6953,26 +7239,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.can_identify-253"><a href="#Generator.can_identify-253"><span class="linenos">253</span></a> <span class="nd">@classmethod</span>
-</span><span id="Generator.can_identify-254"><a href="#Generator.can_identify-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Generator.can_identify-255"><a href="#Generator.can_identify-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Generator.can_identify-256"><a href="#Generator.can_identify-256"><span class="linenos">256</span></a>
-</span><span id="Generator.can_identify-257"><a href="#Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Args:</span>
-</span><span id="Generator.can_identify-258"><a href="#Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Generator.can_identify-259"><a href="#Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> identify:</span>
-</span><span id="Generator.can_identify-260"><a href="#Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
-</span><span id="Generator.can_identify-261"><a href="#Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
-</span><span id="Generator.can_identify-262"><a href="#Generator.can_identify-262"><span class="linenos">262</span></a>
-</span><span id="Generator.can_identify-263"><a href="#Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> Returns:</span>
-</span><span id="Generator.can_identify-264"><a href="#Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Generator.can_identify-265"><a href="#Generator.can_identify-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Generator.can_identify-266"><a href="#Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Generator.can_identify-267"><a href="#Generator.can_identify-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Generator.can_identify-268"><a href="#Generator.can_identify-268"><span class="linenos">268</span></a>
-</span><span id="Generator.can_identify-269"><a href="#Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Generator.can_identify-270"><a href="#Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.can_identify-256"><a href="#Generator.can_identify-256"><span class="linenos">256</span></a> <span class="nd">@classmethod</span>
+</span><span id="Generator.can_identify-257"><a href="#Generator.can_identify-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Generator.can_identify-258"><a href="#Generator.can_identify-258"><span class="linenos">258</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Generator.can_identify-259"><a href="#Generator.can_identify-259"><span class="linenos">259</span></a>
+</span><span id="Generator.can_identify-260"><a href="#Generator.can_identify-260"><span class="linenos">260</span></a><span class="sd"> Args:</span>
+</span><span id="Generator.can_identify-261"><a href="#Generator.can_identify-261"><span class="linenos">261</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Generator.can_identify-262"><a href="#Generator.can_identify-262"><span class="linenos">262</span></a><span class="sd"> identify:</span>
+</span><span id="Generator.can_identify-263"><a href="#Generator.can_identify-263"><span class="linenos">263</span></a><span class="sd"> &quot;always&quot; or `True`: Always returns true.</span>
+</span><span id="Generator.can_identify-264"><a href="#Generator.can_identify-264"><span class="linenos">264</span></a><span class="sd"> &quot;safe&quot;: True if the identifier is case-insensitive.</span>
+</span><span id="Generator.can_identify-265"><a href="#Generator.can_identify-265"><span class="linenos">265</span></a>
+</span><span id="Generator.can_identify-266"><a href="#Generator.can_identify-266"><span class="linenos">266</span></a><span class="sd"> Returns:</span>
+</span><span id="Generator.can_identify-267"><a href="#Generator.can_identify-267"><span class="linenos">267</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Generator.can_identify-268"><a href="#Generator.can_identify-268"><span class="linenos">268</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Generator.can_identify-269"><a href="#Generator.can_identify-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Generator.can_identify-270"><a href="#Generator.can_identify-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Generator.can_identify-271"><a href="#Generator.can_identify-271"><span class="linenos">271</span></a>
-</span><span id="Generator.can_identify-272"><a href="#Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Generator.can_identify-272"><a href="#Generator.can_identify-272"><span class="linenos">272</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Generator.can_identify-273"><a href="#Generator.can_identify-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Generator.can_identify-274"><a href="#Generator.can_identify-274"><span class="linenos">274</span></a>
+</span><span id="Generator.can_identify-275"><a href="#Generator.can_identify-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -7043,26 +7329,14 @@ Default: True</li>
</div>
- <div id="Generator.STRING_ESCAPE" class="classattr">
- <div class="attr variable">
- <span class="name">STRING_ESCAPE</span> =
-<span class="default_value">&#34;&#39;&#34;</span>
-
-
- </div>
- <a class="headerlink" href="#Generator.STRING_ESCAPE"></a>
-
-
-
- </div>
- <div id="Generator.IDENTIFIER_ESCAPE" class="classattr">
+ <div id="Generator.TOKENIZER_CLASS" class="classattr">
<div class="attr variable">
- <span class="name">IDENTIFIER_ESCAPE</span> =
-<span class="default_value">&#39;&#34;&#39;</span>
+ <span class="name">TOKENIZER_CLASS</span> =
+<span class="default_value">&lt;class &#39;<a href="tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>&#39;&gt;</span>
</div>
- <a class="headerlink" href="#Generator.IDENTIFIER_ESCAPE"></a>
+ <a class="headerlink" href="#Generator.TOKENIZER_CLASS"></a>
@@ -7271,41 +7545,41 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.generate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generate-380"><a href="#Generator.generate-380"><span class="linenos">380</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span>
-</span><span id="Generator.generate-381"><a href="#Generator.generate-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.generate-382"><a href="#Generator.generate-382"><span class="linenos">382</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="Generator.generate-383"><a href="#Generator.generate-383"><span class="linenos">383</span></a> <span class="n">cache</span><span 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">int</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.generate-384"><a href="#Generator.generate-384"><span class="linenos">384</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.generate-385"><a href="#Generator.generate-385"><span class="linenos">385</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Generator.generate-386"><a href="#Generator.generate-386"><span class="linenos">386</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
-</span><span id="Generator.generate-387"><a href="#Generator.generate-387"><span class="linenos">387</span></a>
-</span><span id="Generator.generate-388"><a href="#Generator.generate-388"><span class="linenos">388</span></a><span class="sd"> Args:</span>
-</span><span id="Generator.generate-389"><a href="#Generator.generate-389"><span class="linenos">389</span></a><span class="sd"> expression: The syntax tree.</span>
-</span><span id="Generator.generate-390"><a href="#Generator.generate-390"><span class="linenos">390</span></a><span class="sd"> cache: An optional sql string cache. This leverages the hash of an Expression</span>
-</span><span id="Generator.generate-391"><a href="#Generator.generate-391"><span class="linenos">391</span></a><span class="sd"> which can be slow to compute, so only use it if you set _hash on each node.</span>
-</span><span id="Generator.generate-392"><a href="#Generator.generate-392"><span class="linenos">392</span></a>
-</span><span id="Generator.generate-393"><a href="#Generator.generate-393"><span class="linenos">393</span></a><span class="sd"> Returns:</span>
-</span><span id="Generator.generate-394"><a href="#Generator.generate-394"><span class="linenos">394</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
-</span><span id="Generator.generate-395"><a href="#Generator.generate-395"><span class="linenos">395</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Generator.generate-396"><a href="#Generator.generate-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.generate-397"><a href="#Generator.generate-397"><span class="linenos">397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="n">cache</span>
-</span><span id="Generator.generate-398"><a href="#Generator.generate-398"><span class="linenos">398</span></a>
-</span><span id="Generator.generate-399"><a href="#Generator.generate-399"><span class="linenos">399</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.generate-400"><a href="#Generator.generate-400"><span class="linenos">400</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator.generate-401"><a href="#Generator.generate-401"><span class="linenos">401</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator.generate-402"><a href="#Generator.generate-402"><span class="linenos">402</span></a>
-</span><span id="Generator.generate-403"><a href="#Generator.generate-403"><span class="linenos">403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
-</span><span id="Generator.generate-404"><a href="#Generator.generate-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.generate-405"><a href="#Generator.generate-405"><span class="linenos">405</span></a>
-</span><span id="Generator.generate-406"><a href="#Generator.generate-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
-</span><span id="Generator.generate-407"><a href="#Generator.generate-407"><span class="linenos">407</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator.generate-408"><a href="#Generator.generate-408"><span class="linenos">408</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="Generator.generate-409"><a href="#Generator.generate-409"><span class="linenos">409</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator.generate-410"><a href="#Generator.generate-410"><span class="linenos">410</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generate-399"><a href="#Generator.generate-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span>
+</span><span id="Generator.generate-400"><a href="#Generator.generate-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.generate-401"><a href="#Generator.generate-401"><span class="linenos">401</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="Generator.generate-402"><a href="#Generator.generate-402"><span class="linenos">402</span></a> <span class="n">cache</span><span 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">int</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.generate-403"><a href="#Generator.generate-403"><span class="linenos">403</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.generate-404"><a href="#Generator.generate-404"><span class="linenos">404</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Generator.generate-405"><a href="#Generator.generate-405"><span class="linenos">405</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="Generator.generate-406"><a href="#Generator.generate-406"><span class="linenos">406</span></a>
+</span><span id="Generator.generate-407"><a href="#Generator.generate-407"><span class="linenos">407</span></a><span class="sd"> Args:</span>
+</span><span id="Generator.generate-408"><a href="#Generator.generate-408"><span class="linenos">408</span></a><span class="sd"> expression: The syntax tree.</span>
+</span><span id="Generator.generate-409"><a href="#Generator.generate-409"><span class="linenos">409</span></a><span class="sd"> cache: An optional sql string cache. This leverages the hash of an Expression</span>
+</span><span id="Generator.generate-410"><a href="#Generator.generate-410"><span class="linenos">410</span></a><span class="sd"> which can be slow to compute, so only use it if you set _hash on each node.</span>
</span><span id="Generator.generate-411"><a href="#Generator.generate-411"><span class="linenos">411</span></a>
-</span><span id="Generator.generate-412"><a href="#Generator.generate-412"><span class="linenos">412</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.generate-413"><a href="#Generator.generate-413"><span class="linenos">413</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.generate-414"><a href="#Generator.generate-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.generate-412"><a href="#Generator.generate-412"><span class="linenos">412</span></a><span class="sd"> Returns:</span>
+</span><span id="Generator.generate-413"><a href="#Generator.generate-413"><span class="linenos">413</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
+</span><span id="Generator.generate-414"><a href="#Generator.generate-414"><span class="linenos">414</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Generator.generate-415"><a href="#Generator.generate-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.generate-416"><a href="#Generator.generate-416"><span class="linenos">416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="n">cache</span>
+</span><span id="Generator.generate-417"><a href="#Generator.generate-417"><span class="linenos">417</span></a>
+</span><span id="Generator.generate-418"><a href="#Generator.generate-418"><span class="linenos">418</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.generate-419"><a href="#Generator.generate-419"><span class="linenos">419</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator.generate-420"><a href="#Generator.generate-420"><span class="linenos">420</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator.generate-421"><a href="#Generator.generate-421"><span class="linenos">421</span></a>
+</span><span id="Generator.generate-422"><a href="#Generator.generate-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
+</span><span id="Generator.generate-423"><a href="#Generator.generate-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.generate-424"><a href="#Generator.generate-424"><span class="linenos">424</span></a>
+</span><span id="Generator.generate-425"><a href="#Generator.generate-425"><span class="linenos">425</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
+</span><span id="Generator.generate-426"><a href="#Generator.generate-426"><span class="linenos">426</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator.generate-427"><a href="#Generator.generate-427"><span class="linenos">427</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="Generator.generate-428"><a href="#Generator.generate-428"><span class="linenos">428</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator.generate-429"><a href="#Generator.generate-429"><span class="linenos">429</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="Generator.generate-430"><a href="#Generator.generate-430"><span class="linenos">430</span></a>
+</span><span id="Generator.generate-431"><a href="#Generator.generate-431"><span class="linenos">431</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.generate-432"><a href="#Generator.generate-432"><span class="linenos">432</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.generate-433"><a href="#Generator.generate-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -7339,10 +7613,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.unsupported"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unsupported-416"><a href="#Generator.unsupported-416"><span class="linenos">416</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.unsupported-417"><a href="#Generator.unsupported-417"><span class="linenos">417</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
-</span><span id="Generator.unsupported-418"><a href="#Generator.unsupported-418"><span class="linenos">418</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="Generator.unsupported-419"><a href="#Generator.unsupported-419"><span class="linenos">419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unsupported-435"><a href="#Generator.unsupported-435"><span class="linenos">435</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.unsupported-436"><a href="#Generator.unsupported-436"><span class="linenos">436</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
+</span><span id="Generator.unsupported-437"><a href="#Generator.unsupported-437"><span class="linenos">437</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="Generator.unsupported-438"><a href="#Generator.unsupported-438"><span class="linenos">438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span></pre></div>
@@ -7360,8 +7634,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.sep"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sep-421"><a href="#Generator.sep-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sep-422"><a href="#Generator.sep-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sep-440"><a href="#Generator.sep-440"><span class="linenos">440</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sep-441"><a href="#Generator.sep-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
</span></pre></div>
@@ -7379,8 +7653,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.seg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.seg-424"><a href="#Generator.seg-424"><span class="linenos">424</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.seg-425"><a href="#Generator.seg-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.seg-443"><a href="#Generator.seg-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.seg-444"><a href="#Generator.seg-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7398,10 +7672,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.pad_comment"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pad_comment-427"><a href="#Generator.pad_comment-427"><span class="linenos">427</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pad_comment-428"><a href="#Generator.pad_comment-428"><span class="linenos">428</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator.pad_comment-429"><a href="#Generator.pad_comment-429"><span class="linenos">429</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator.pad_comment-430"><a href="#Generator.pad_comment-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="n">comment</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pad_comment-446"><a href="#Generator.pad_comment-446"><span class="linenos">446</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pad_comment-447"><a href="#Generator.pad_comment-447"><span class="linenos">447</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator.pad_comment-448"><a href="#Generator.pad_comment-448"><span class="linenos">448</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator.pad_comment-449"><a href="#Generator.pad_comment-449"><span class="linenos">449</span></a> <span class="k">return</span> <span class="n">comment</span>
</span></pre></div>
@@ -7419,37 +7693,37 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.maybe_comment"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.maybe_comment-432"><a href="#Generator.maybe_comment-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
-</span><span id="Generator.maybe_comment-433"><a href="#Generator.maybe_comment-433"><span class="linenos">433</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-434"><a href="#Generator.maybe_comment-434"><span class="linenos">434</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-435"><a href="#Generator.maybe_comment-435"><span class="linenos">435</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-436"><a href="#Generator.maybe_comment-436"><span class="linenos">436</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-437"><a href="#Generator.maybe_comment-437"><span class="linenos">437</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.maybe_comment-438"><a href="#Generator.maybe_comment-438"><span class="linenos">438</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.maybe_comment-439"><a href="#Generator.maybe_comment-439"><span class="linenos">439</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Generator.maybe_comment-440"><a href="#Generator.maybe_comment-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Generator.maybe_comment-441"><a href="#Generator.maybe_comment-441"><span class="linenos">441</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Generator.maybe_comment-442"><a href="#Generator.maybe_comment-442"><span class="linenos">442</span></a> <span class="p">)</span>
-</span><span id="Generator.maybe_comment-443"><a href="#Generator.maybe_comment-443"><span class="linenos">443</span></a>
-</span><span id="Generator.maybe_comment-444"><a href="#Generator.maybe_comment-444"><span class="linenos">444</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Generator.maybe_comment-445"><a href="#Generator.maybe_comment-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.maybe_comment-446"><a href="#Generator.maybe_comment-446"><span class="linenos">446</span></a>
-</span><span id="Generator.maybe_comment-447"><a href="#Generator.maybe_comment-447"><span class="linenos">447</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">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.maybe_comment-448"><a href="#Generator.maybe_comment-448"><span class="linenos">448</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.maybe_comment-449"><a href="#Generator.maybe_comment-449"><span class="linenos">449</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
-</span><span id="Generator.maybe_comment-450"><a href="#Generator.maybe_comment-450"><span class="linenos">450</span></a> <span class="p">)</span>
-</span><span id="Generator.maybe_comment-451"><a href="#Generator.maybe_comment-451"><span class="linenos">451</span></a>
-</span><span id="Generator.maybe_comment-452"><a href="#Generator.maybe_comment-452"><span class="linenos">452</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
-</span><span id="Generator.maybe_comment-453"><a href="#Generator.maybe_comment-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.maybe_comment-454"><a href="#Generator.maybe_comment-454"><span class="linenos">454</span></a>
-</span><span id="Generator.maybe_comment-455"><a href="#Generator.maybe_comment-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
-</span><span id="Generator.maybe_comment-456"><a href="#Generator.maybe_comment-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator.maybe_comment-457"><a href="#Generator.maybe_comment-457"><span class="linenos">457</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.maybe_comment-458"><a href="#Generator.maybe_comment-458"><span class="linenos">458</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
-</span><span id="Generator.maybe_comment-459"><a href="#Generator.maybe_comment-459"><span class="linenos">459</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.maybe_comment-460"><a href="#Generator.maybe_comment-460"><span class="linenos">460</span></a> <span class="p">)</span>
-</span><span id="Generator.maybe_comment-461"><a href="#Generator.maybe_comment-461"><span class="linenos">461</span></a>
-</span><span id="Generator.maybe_comment-462"><a href="#Generator.maybe_comment-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.maybe_comment-451"><a href="#Generator.maybe_comment-451"><span class="linenos">451</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
+</span><span id="Generator.maybe_comment-452"><a href="#Generator.maybe_comment-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-453"><a href="#Generator.maybe_comment-453"><span class="linenos">453</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-454"><a href="#Generator.maybe_comment-454"><span class="linenos">454</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-455"><a href="#Generator.maybe_comment-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">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-456"><a href="#Generator.maybe_comment-456"><span class="linenos">456</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.maybe_comment-457"><a href="#Generator.maybe_comment-457"><span class="linenos">457</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.maybe_comment-458"><a href="#Generator.maybe_comment-458"><span class="linenos">458</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Generator.maybe_comment-459"><a href="#Generator.maybe_comment-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Generator.maybe_comment-460"><a href="#Generator.maybe_comment-460"><span class="linenos">460</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Generator.maybe_comment-461"><a href="#Generator.maybe_comment-461"><span class="linenos">461</span></a> <span class="p">)</span>
+</span><span id="Generator.maybe_comment-462"><a href="#Generator.maybe_comment-462"><span class="linenos">462</span></a>
+</span><span id="Generator.maybe_comment-463"><a href="#Generator.maybe_comment-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Generator.maybe_comment-464"><a href="#Generator.maybe_comment-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.maybe_comment-465"><a href="#Generator.maybe_comment-465"><span class="linenos">465</span></a>
+</span><span id="Generator.maybe_comment-466"><a href="#Generator.maybe_comment-466"><span class="linenos">466</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">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.maybe_comment-467"><a href="#Generator.maybe_comment-467"><span class="linenos">467</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.maybe_comment-468"><a href="#Generator.maybe_comment-468"><span class="linenos">468</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
+</span><span id="Generator.maybe_comment-469"><a href="#Generator.maybe_comment-469"><span class="linenos">469</span></a> <span class="p">)</span>
+</span><span id="Generator.maybe_comment-470"><a href="#Generator.maybe_comment-470"><span class="linenos">470</span></a>
+</span><span id="Generator.maybe_comment-471"><a href="#Generator.maybe_comment-471"><span class="linenos">471</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
+</span><span id="Generator.maybe_comment-472"><a href="#Generator.maybe_comment-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.maybe_comment-473"><a href="#Generator.maybe_comment-473"><span class="linenos">473</span></a>
+</span><span id="Generator.maybe_comment-474"><a href="#Generator.maybe_comment-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
+</span><span id="Generator.maybe_comment-475"><a href="#Generator.maybe_comment-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator.maybe_comment-476"><a href="#Generator.maybe_comment-476"><span class="linenos">476</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.maybe_comment-477"><a href="#Generator.maybe_comment-477"><span class="linenos">477</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="Generator.maybe_comment-478"><a href="#Generator.maybe_comment-478"><span class="linenos">478</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.maybe_comment-479"><a href="#Generator.maybe_comment-479"><span class="linenos">479</span></a> <span class="p">)</span>
+</span><span id="Generator.maybe_comment-480"><a href="#Generator.maybe_comment-480"><span class="linenos">480</span></a>
+</span><span id="Generator.maybe_comment-481"><a href="#Generator.maybe_comment-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7467,15 +7741,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.wrap"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.wrap-464"><a href="#Generator.wrap-464"><span class="linenos">464</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.wrap-465"><a href="#Generator.wrap-465"><span class="linenos">465</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
-</span><span id="Generator.wrap-466"><a href="#Generator.wrap-466"><span class="linenos">466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.wrap-467"><a href="#Generator.wrap-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
-</span><span id="Generator.wrap-468"><a href="#Generator.wrap-468"><span class="linenos">468</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="Generator.wrap-469"><a href="#Generator.wrap-469"><span class="linenos">469</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
-</span><span id="Generator.wrap-470"><a href="#Generator.wrap-470"><span class="linenos">470</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator.wrap-471"><a href="#Generator.wrap-471"><span class="linenos">471</span></a> <span class="p">)</span>
-</span><span id="Generator.wrap-472"><a href="#Generator.wrap-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.wrap-483"><a href="#Generator.wrap-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.wrap-484"><a href="#Generator.wrap-484"><span class="linenos">484</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
+</span><span id="Generator.wrap-485"><a href="#Generator.wrap-485"><span class="linenos">485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.wrap-486"><a href="#Generator.wrap-486"><span class="linenos">486</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
+</span><span id="Generator.wrap-487"><a href="#Generator.wrap-487"><span class="linenos">487</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="Generator.wrap-488"><a href="#Generator.wrap-488"><span class="linenos">488</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="Generator.wrap-489"><a href="#Generator.wrap-489"><span class="linenos">489</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator.wrap-490"><a href="#Generator.wrap-490"><span class="linenos">490</span></a> <span class="p">)</span>
+</span><span id="Generator.wrap-491"><a href="#Generator.wrap-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="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7493,12 +7767,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.no_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.no_identify-474"><a href="#Generator.no_identify-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.no_identify-475"><a href="#Generator.no_identify-475"><span class="linenos">475</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
-</span><span id="Generator.no_identify-476"><a href="#Generator.no_identify-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator.no_identify-477"><a href="#Generator.no_identify-477"><span class="linenos">477</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Generator.no_identify-478"><a href="#Generator.no_identify-478"><span class="linenos">478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
-</span><span id="Generator.no_identify-479"><a href="#Generator.no_identify-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="n">result</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.no_identify-493"><a href="#Generator.no_identify-493"><span class="linenos">493</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.no_identify-494"><a href="#Generator.no_identify-494"><span class="linenos">494</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
+</span><span id="Generator.no_identify-495"><a href="#Generator.no_identify-495"><span class="linenos">495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator.no_identify-496"><a href="#Generator.no_identify-496"><span class="linenos">496</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Generator.no_identify-497"><a href="#Generator.no_identify-497"><span class="linenos">497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
+</span><span id="Generator.no_identify-498"><a href="#Generator.no_identify-498"><span class="linenos">498</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -7516,12 +7790,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.normalize_func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.normalize_func-481"><a href="#Generator.normalize_func-481"><span class="linenos">481</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.normalize_func-482"><a href="#Generator.normalize_func-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator.normalize_func-483"><a href="#Generator.normalize_func-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator.normalize_func-484"><a href="#Generator.normalize_func-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
-</span><span id="Generator.normalize_func-485"><a href="#Generator.normalize_func-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator.normalize_func-486"><a href="#Generator.normalize_func-486"><span class="linenos">486</span></a> <span class="k">return</span> <span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.normalize_func-500"><a href="#Generator.normalize_func-500"><span class="linenos">500</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.normalize_func-501"><a href="#Generator.normalize_func-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator.normalize_func-502"><a href="#Generator.normalize_func-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator.normalize_func-503"><a href="#Generator.normalize_func-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
+</span><span id="Generator.normalize_func-504"><a href="#Generator.normalize_func-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator.normalize_func-505"><a href="#Generator.normalize_func-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">name</span>
</span></pre></div>
@@ -7539,26 +7813,26 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.indent"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indent-488"><a href="#Generator.indent-488"><span class="linenos">488</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
-</span><span id="Generator.indent-489"><a href="#Generator.indent-489"><span class="linenos">489</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.indent-490"><a href="#Generator.indent-490"><span class="linenos">490</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator.indent-491"><a href="#Generator.indent-491"><span class="linenos">491</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator.indent-492"><a href="#Generator.indent-492"><span class="linenos">492</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.indent-493"><a href="#Generator.indent-493"><span class="linenos">493</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.indent-494"><a href="#Generator.indent-494"><span class="linenos">494</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.indent-495"><a href="#Generator.indent-495"><span class="linenos">495</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indent-496"><a href="#Generator.indent-496"><span class="linenos">496</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.indent-497"><a href="#Generator.indent-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.indent-498"><a href="#Generator.indent-498"><span class="linenos">498</span></a>
-</span><span id="Generator.indent-499"><a href="#Generator.indent-499"><span class="linenos">499</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
-</span><span id="Generator.indent-500"><a href="#Generator.indent-500"><span class="linenos">500</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.indent-501"><a href="#Generator.indent-501"><span class="linenos">501</span></a>
-</span><span id="Generator.indent-502"><a href="#Generator.indent-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.indent-503"><a href="#Generator.indent-503"><span class="linenos">503</span></a> <span class="n">line</span>
-</span><span id="Generator.indent-504"><a href="#Generator.indent-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Generator.indent-505"><a href="#Generator.indent-505"><span class="linenos">505</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indent-506"><a href="#Generator.indent-506"><span class="linenos">506</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="Generator.indent-507"><a href="#Generator.indent-507"><span class="linenos">507</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indent-507"><a href="#Generator.indent-507"><span class="linenos">507</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
+</span><span id="Generator.indent-508"><a href="#Generator.indent-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.indent-509"><a href="#Generator.indent-509"><span class="linenos">509</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator.indent-510"><a href="#Generator.indent-510"><span class="linenos">510</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator.indent-511"><a href="#Generator.indent-511"><span class="linenos">511</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.indent-512"><a href="#Generator.indent-512"><span class="linenos">512</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.indent-513"><a href="#Generator.indent-513"><span class="linenos">513</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.indent-514"><a href="#Generator.indent-514"><span class="linenos">514</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indent-515"><a href="#Generator.indent-515"><span class="linenos">515</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.indent-516"><a href="#Generator.indent-516"><span class="linenos">516</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.indent-517"><a href="#Generator.indent-517"><span class="linenos">517</span></a>
+</span><span id="Generator.indent-518"><a href="#Generator.indent-518"><span class="linenos">518</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
+</span><span id="Generator.indent-519"><a href="#Generator.indent-519"><span class="linenos">519</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.indent-520"><a href="#Generator.indent-520"><span class="linenos">520</span></a>
+</span><span id="Generator.indent-521"><a href="#Generator.indent-521"><span class="linenos">521</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.indent-522"><a href="#Generator.indent-522"><span class="linenos">522</span></a> <span class="n">line</span>
+</span><span id="Generator.indent-523"><a href="#Generator.indent-523"><span class="linenos">523</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Generator.indent-524"><a href="#Generator.indent-524"><span class="linenos">524</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indent-525"><a href="#Generator.indent-525"><span class="linenos">525</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+</span><span id="Generator.indent-526"><a href="#Generator.indent-526"><span class="linenos">526</span></a> <span class="p">)</span>
</span></pre></div>
@@ -7576,55 +7850,55 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sql-509"><a href="#Generator.sql-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
-</span><span id="Generator.sql-510"><a href="#Generator.sql-510"><span class="linenos">510</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.sql-511"><a href="#Generator.sql-511"><span class="linenos">511</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
-</span><span id="Generator.sql-512"><a href="#Generator.sql-512"><span class="linenos">512</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.sql-513"><a href="#Generator.sql-513"><span class="linenos">513</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.sql-514"><a href="#Generator.sql-514"><span class="linenos">514</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sql-515"><a href="#Generator.sql-515"><span class="linenos">515</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Generator.sql-516"><a href="#Generator.sql-516"><span class="linenos">516</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.sql-517"><a href="#Generator.sql-517"><span class="linenos">517</span></a>
-</span><span id="Generator.sql-518"><a href="#Generator.sql-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Generator.sql-519"><a href="#Generator.sql-519"><span class="linenos">519</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Generator.sql-520"><a href="#Generator.sql-520"><span class="linenos">520</span></a>
-</span><span id="Generator.sql-521"><a href="#Generator.sql-521"><span class="linenos">521</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
-</span><span id="Generator.sql-522"><a href="#Generator.sql-522"><span class="linenos">522</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
-</span><span id="Generator.sql-523"><a href="#Generator.sql-523"><span class="linenos">523</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Generator.sql-524"><a href="#Generator.sql-524"><span class="linenos">524</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator.sql-525"><a href="#Generator.sql-525"><span class="linenos">525</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.sql-526"><a href="#Generator.sql-526"><span class="linenos">526</span></a>
-</span><span id="Generator.sql-527"><a href="#Generator.sql-527"><span class="linenos">527</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.sql-528"><a href="#Generator.sql-528"><span class="linenos">528</span></a> <span class="n">expression_id</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-529"><a href="#Generator.sql-529"><span class="linenos">529</span></a>
-</span><span id="Generator.sql-530"><a href="#Generator.sql-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">expression_id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
-</span><span id="Generator.sql-531"><a href="#Generator.sql-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span>
-</span><span id="Generator.sql-532"><a href="#Generator.sql-532"><span class="linenos">532</span></a>
-</span><span id="Generator.sql-533"><a href="#Generator.sql-533"><span class="linenos">533</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator.sql-534"><a href="#Generator.sql-534"><span class="linenos">534</span></a>
-</span><span id="Generator.sql-535"><a href="#Generator.sql-535"><span class="linenos">535</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="Generator.sql-536"><a href="#Generator.sql-536"><span class="linenos">536</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-537"><a href="#Generator.sql-537"><span class="linenos">537</span></a> <span class="k">elif</span> <span class="n">transform</span><span class="p">:</span>
-</span><span id="Generator.sql-538"><a href="#Generator.sql-538"><span class="linenos">538</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span>
-</span><span id="Generator.sql-539"><a href="#Generator.sql-539"><span class="linenos">539</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Generator.sql-540"><a href="#Generator.sql-540"><span class="linenos">540</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
-</span><span id="Generator.sql-541"><a href="#Generator.sql-541"><span class="linenos">541</span></a>
-</span><span id="Generator.sql-542"><a href="#Generator.sql-542"><span class="linenos">542</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
-</span><span id="Generator.sql-543"><a href="#Generator.sql-543"><span class="linenos">543</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-544"><a href="#Generator.sql-544"><span class="linenos">544</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Generator.sql-545"><a href="#Generator.sql-545"><span class="linenos">545</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-546"><a href="#Generator.sql-546"><span class="linenos">546</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="Generator.sql-547"><a href="#Generator.sql-547"><span class="linenos">547</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-548"><a href="#Generator.sql-548"><span class="linenos">548</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.sql-549"><a href="#Generator.sql-549"><span class="linenos">549</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.sql-550"><a href="#Generator.sql-550"><span class="linenos">550</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.sql-551"><a href="#Generator.sql-551"><span class="linenos">551</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.sql-552"><a href="#Generator.sql-552"><span class="linenos">552</span></a>
-</span><span id="Generator.sql-553"><a href="#Generator.sql-553"><span class="linenos">553</span></a> <span class="n">sql</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">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
-</span><span id="Generator.sql-554"><a href="#Generator.sql-554"><span class="linenos">554</span></a>
-</span><span id="Generator.sql-555"><a href="#Generator.sql-555"><span class="linenos">555</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.sql-556"><a href="#Generator.sql-556"><span class="linenos">556</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">sql</span>
-</span><span id="Generator.sql-557"><a href="#Generator.sql-557"><span class="linenos">557</span></a> <span class="k">return</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sql-528"><a href="#Generator.sql-528"><span class="linenos">528</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="Generator.sql-529"><a href="#Generator.sql-529"><span class="linenos">529</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.sql-530"><a href="#Generator.sql-530"><span class="linenos">530</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
+</span><span id="Generator.sql-531"><a href="#Generator.sql-531"><span class="linenos">531</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.sql-532"><a href="#Generator.sql-532"><span class="linenos">532</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.sql-533"><a href="#Generator.sql-533"><span class="linenos">533</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sql-534"><a href="#Generator.sql-534"><span class="linenos">534</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Generator.sql-535"><a href="#Generator.sql-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.sql-536"><a href="#Generator.sql-536"><span class="linenos">536</span></a>
+</span><span id="Generator.sql-537"><a href="#Generator.sql-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Generator.sql-538"><a href="#Generator.sql-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator.sql-539"><a href="#Generator.sql-539"><span class="linenos">539</span></a>
+</span><span id="Generator.sql-540"><a href="#Generator.sql-540"><span class="linenos">540</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+</span><span id="Generator.sql-541"><a href="#Generator.sql-541"><span class="linenos">541</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="Generator.sql-542"><a href="#Generator.sql-542"><span class="linenos">542</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="Generator.sql-543"><a href="#Generator.sql-543"><span class="linenos">543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator.sql-544"><a href="#Generator.sql-544"><span class="linenos">544</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.sql-545"><a href="#Generator.sql-545"><span class="linenos">545</span></a>
+</span><span id="Generator.sql-546"><a href="#Generator.sql-546"><span class="linenos">546</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.sql-547"><a href="#Generator.sql-547"><span class="linenos">547</span></a> <span class="n">expression_id</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-548"><a href="#Generator.sql-548"><span class="linenos">548</span></a>
+</span><span id="Generator.sql-549"><a href="#Generator.sql-549"><span class="linenos">549</span></a> <span class="k">if</span> <span class="n">expression_id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
+</span><span id="Generator.sql-550"><a href="#Generator.sql-550"><span class="linenos">550</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span>
+</span><span id="Generator.sql-551"><a href="#Generator.sql-551"><span class="linenos">551</span></a>
+</span><span id="Generator.sql-552"><a href="#Generator.sql-552"><span class="linenos">552</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator.sql-553"><a href="#Generator.sql-553"><span class="linenos">553</span></a>
+</span><span id="Generator.sql-554"><a href="#Generator.sql-554"><span class="linenos">554</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="Generator.sql-555"><a href="#Generator.sql-555"><span class="linenos">555</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-556"><a href="#Generator.sql-556"><span class="linenos">556</span></a> <span class="k">elif</span> <span class="n">transform</span><span class="p">:</span>
+</span><span id="Generator.sql-557"><a href="#Generator.sql-557"><span class="linenos">557</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span>
+</span><span id="Generator.sql-558"><a href="#Generator.sql-558"><span class="linenos">558</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Generator.sql-559"><a href="#Generator.sql-559"><span class="linenos">559</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
+</span><span id="Generator.sql-560"><a href="#Generator.sql-560"><span class="linenos">560</span></a>
+</span><span id="Generator.sql-561"><a href="#Generator.sql-561"><span class="linenos">561</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
+</span><span id="Generator.sql-562"><a href="#Generator.sql-562"><span class="linenos">562</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-563"><a href="#Generator.sql-563"><span class="linenos">563</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Generator.sql-564"><a href="#Generator.sql-564"><span class="linenos">564</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-565"><a href="#Generator.sql-565"><span class="linenos">565</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="Generator.sql-566"><a href="#Generator.sql-566"><span class="linenos">566</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-567"><a href="#Generator.sql-567"><span class="linenos">567</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.sql-568"><a href="#Generator.sql-568"><span class="linenos">568</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.sql-569"><a href="#Generator.sql-569"><span class="linenos">569</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.sql-570"><a href="#Generator.sql-570"><span class="linenos">570</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.sql-571"><a href="#Generator.sql-571"><span class="linenos">571</span></a>
+</span><span id="Generator.sql-572"><a href="#Generator.sql-572"><span class="linenos">572</span></a> <span class="n">sql</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">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
+</span><span id="Generator.sql-573"><a href="#Generator.sql-573"><span class="linenos">573</span></a>
+</span><span id="Generator.sql-574"><a href="#Generator.sql-574"><span class="linenos">574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.sql-575"><a href="#Generator.sql-575"><span class="linenos">575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">expression_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">sql</span>
+</span><span id="Generator.sql-576"><a href="#Generator.sql-576"><span class="linenos">576</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -7642,10 +7916,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.uncache_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uncache_sql-559"><a href="#Generator.uncache_sql-559"><span class="linenos">559</span></a> <span class="k">def</span> <span class="nf">uncache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.uncache_sql-560"><a href="#Generator.uncache_sql-560"><span class="linenos">560</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.uncache_sql-561"><a href="#Generator.uncache_sql-561"><span class="linenos">561</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.uncache_sql-562"><a href="#Generator.uncache_sql-562"><span class="linenos">562</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uncache_sql-578"><a href="#Generator.uncache_sql-578"><span class="linenos">578</span></a> <span class="k">def</span> <span class="nf">uncache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.uncache_sql-579"><a href="#Generator.uncache_sql-579"><span class="linenos">579</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.uncache_sql-580"><a href="#Generator.uncache_sql-580"><span class="linenos">580</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.uncache_sql-581"><a href="#Generator.uncache_sql-581"><span class="linenos">581</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7663,15 +7937,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.cache_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cache_sql-564"><a href="#Generator.cache_sql-564"><span class="linenos">564</span></a> <span class="k">def</span> <span class="nf">cache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cache_sql-565"><a href="#Generator.cache_sql-565"><span class="linenos">565</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cache_sql-566"><a href="#Generator.cache_sql-566"><span class="linenos">566</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.cache_sql-567"><a href="#Generator.cache_sql-567"><span class="linenos">567</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">)</span>
-</span><span id="Generator.cache_sql-568"><a href="#Generator.cache_sql-568"><span class="linenos">568</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cache_sql-569"><a href="#Generator.cache_sql-569"><span class="linenos">569</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator.cache_sql-570"><a href="#Generator.cache_sql-570"><span class="linenos">570</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cache_sql-571"><a href="#Generator.cache_sql-571"><span class="linenos">571</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.cache_sql-572"><a href="#Generator.cache_sql-572"><span class="linenos">572</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cache_sql-583"><a href="#Generator.cache_sql-583"><span class="linenos">583</span></a> <span class="k">def</span> <span class="nf">cache_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cache_sql-584"><a href="#Generator.cache_sql-584"><span class="linenos">584</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cache_sql-585"><a href="#Generator.cache_sql-585"><span class="linenos">585</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.cache_sql-586"><a href="#Generator.cache_sql-586"><span class="linenos">586</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">)</span>
+</span><span id="Generator.cache_sql-587"><a href="#Generator.cache_sql-587"><span class="linenos">587</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cache_sql-588"><a href="#Generator.cache_sql-588"><span class="linenos">588</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.cache_sql-589"><a href="#Generator.cache_sql-589"><span class="linenos">589</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cache_sql-590"><a href="#Generator.cache_sql-590"><span class="linenos">590</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.cache_sql-591"><a href="#Generator.cache_sql-591"><span class="linenos">591</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>
@@ -7689,11 +7963,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.characterset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.characterset_sql-574"><a href="#Generator.characterset_sql-574"><span class="linenos">574</span></a> <span class="k">def</span> <span class="nf">characterset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.characterset_sql-575"><a href="#Generator.characterset_sql-575"><span class="linenos">575</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Generator.characterset_sql-576"><a href="#Generator.characterset_sql-576"><span class="linenos">576</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.characterset_sql-577"><a href="#Generator.characterset_sql-577"><span class="linenos">577</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.characterset_sql-578"><a href="#Generator.characterset_sql-578"><span class="linenos">578</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.characterset_sql-593"><a href="#Generator.characterset_sql-593"><span class="linenos">593</span></a> <span class="k">def</span> <span class="nf">characterset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.characterset_sql-594"><a href="#Generator.characterset_sql-594"><span class="linenos">594</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Generator.characterset_sql-595"><a href="#Generator.characterset_sql-595"><span class="linenos">595</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.characterset_sql-596"><a href="#Generator.characterset_sql-596"><span class="linenos">596</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.characterset_sql-597"><a href="#Generator.characterset_sql-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7711,25 +7985,25 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.column_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.column_sql-580"><a href="#Generator.column_sql-580"><span class="linenos">580</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.column_sql-581"><a href="#Generator.column_sql-581"><span class="linenos">581</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.column_sql-582"><a href="#Generator.column_sql-582"><span class="linenos">582</span></a>
-</span><span id="Generator.column_sql-583"><a href="#Generator.column_sql-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.column_sql-584"><a href="#Generator.column_sql-584"><span class="linenos">584</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.column_sql-585"><a href="#Generator.column_sql-585"><span class="linenos">585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
-</span><span id="Generator.column_sql-586"><a href="#Generator.column_sql-586"><span class="linenos">586</span></a>
-</span><span id="Generator.column_sql-587"><a href="#Generator.column_sql-587"><span class="linenos">587</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.column_sql-588"><a href="#Generator.column_sql-588"><span class="linenos">588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Generator.column_sql-589"><a href="#Generator.column_sql-589"><span class="linenos">589</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator.column_sql-590"><a href="#Generator.column_sql-590"><span class="linenos">590</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-591"><a href="#Generator.column_sql-591"><span class="linenos">591</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-592"><a href="#Generator.column_sql-592"><span class="linenos">592</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-593"><a href="#Generator.column_sql-593"><span class="linenos">593</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-594"><a href="#Generator.column_sql-594"><span class="linenos">594</span></a> <span class="p">)</span>
-</span><span id="Generator.column_sql-595"><a href="#Generator.column_sql-595"><span class="linenos">595</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="Generator.column_sql-596"><a href="#Generator.column_sql-596"><span class="linenos">596</span></a> <span class="p">)</span>
-</span><span id="Generator.column_sql-597"><a href="#Generator.column_sql-597"><span class="linenos">597</span></a>
-</span><span id="Generator.column_sql-598"><a href="#Generator.column_sql-598"><span class="linenos">598</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.column_sql-599"><a href="#Generator.column_sql-599"><span class="linenos">599</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.column_sql-600"><a href="#Generator.column_sql-600"><span class="linenos">600</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.column_sql-601"><a href="#Generator.column_sql-601"><span class="linenos">601</span></a>
+</span><span id="Generator.column_sql-602"><a href="#Generator.column_sql-602"><span class="linenos">602</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.column_sql-603"><a href="#Generator.column_sql-603"><span class="linenos">603</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.column_sql-604"><a href="#Generator.column_sql-604"><span class="linenos">604</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+</span><span id="Generator.column_sql-605"><a href="#Generator.column_sql-605"><span class="linenos">605</span></a>
+</span><span id="Generator.column_sql-606"><a href="#Generator.column_sql-606"><span class="linenos">606</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.column_sql-607"><a href="#Generator.column_sql-607"><span class="linenos">607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Generator.column_sql-608"><a href="#Generator.column_sql-608"><span class="linenos">608</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.column_sql-609"><a href="#Generator.column_sql-609"><span class="linenos">609</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-610"><a href="#Generator.column_sql-610"><span class="linenos">610</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-611"><a href="#Generator.column_sql-611"><span class="linenos">611</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-612"><a href="#Generator.column_sql-612"><span class="linenos">612</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-613"><a href="#Generator.column_sql-613"><span class="linenos">613</span></a> <span class="p">)</span>
+</span><span id="Generator.column_sql-614"><a href="#Generator.column_sql-614"><span class="linenos">614</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="Generator.column_sql-615"><a href="#Generator.column_sql-615"><span class="linenos">615</span></a> <span class="p">)</span>
+</span><span id="Generator.column_sql-616"><a href="#Generator.column_sql-616"><span class="linenos">616</span></a>
+</span><span id="Generator.column_sql-617"><a href="#Generator.column_sql-617"><span class="linenos">617</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7747,11 +8021,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.columnposition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnposition_sql-600"><a href="#Generator.columnposition_sql-600"><span class="linenos">600</span></a> <span class="k">def</span> <span class="nf">columnposition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.columnposition_sql-601"><a href="#Generator.columnposition_sql-601"><span class="linenos">601</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.columnposition_sql-602"><a href="#Generator.columnposition_sql-602"><span class="linenos">602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columnposition_sql-603"><a href="#Generator.columnposition_sql-603"><span class="linenos">603</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator.columnposition_sql-604"><a href="#Generator.columnposition_sql-604"><span class="linenos">604</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnposition_sql-619"><a href="#Generator.columnposition_sql-619"><span class="linenos">619</span></a> <span class="k">def</span> <span class="nf">columnposition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.columnposition_sql-620"><a href="#Generator.columnposition_sql-620"><span class="linenos">620</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.columnposition_sql-621"><a href="#Generator.columnposition_sql-621"><span class="linenos">621</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columnposition_sql-622"><a href="#Generator.columnposition_sql-622"><span class="linenos">622</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator.columnposition_sql-623"><a href="#Generator.columnposition_sql-623"><span class="linenos">623</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7769,17 +8043,17 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.columndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columndef_sql-606"><a href="#Generator.columndef_sql-606"><span class="linenos">606</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.columndef_sql-607"><a href="#Generator.columndef_sql-607"><span class="linenos">607</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-608"><a href="#Generator.columndef_sql-608"><span class="linenos">608</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-609"><a href="#Generator.columndef_sql-609"><span class="linenos">609</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-610"><a href="#Generator.columndef_sql-610"><span class="linenos">610</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-611"><a href="#Generator.columndef_sql-611"><span class="linenos">611</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-612"><a href="#Generator.columndef_sql-612"><span class="linenos">612</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-613"><a href="#Generator.columndef_sql-613"><span class="linenos">613</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-614"><a href="#Generator.columndef_sql-614"><span class="linenos">614</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-615"><a href="#Generator.columndef_sql-615"><span class="linenos">615</span></a>
-</span><span id="Generator.columndef_sql-616"><a href="#Generator.columndef_sql-616"><span class="linenos">616</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columndef_sql-625"><a href="#Generator.columndef_sql-625"><span class="linenos">625</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.columndef_sql-626"><a href="#Generator.columndef_sql-626"><span class="linenos">626</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-627"><a href="#Generator.columndef_sql-627"><span class="linenos">627</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-628"><a href="#Generator.columndef_sql-628"><span class="linenos">628</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-629"><a href="#Generator.columndef_sql-629"><span class="linenos">629</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-630"><a href="#Generator.columndef_sql-630"><span class="linenos">630</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-631"><a href="#Generator.columndef_sql-631"><span class="linenos">631</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-632"><a href="#Generator.columndef_sql-632"><span class="linenos">632</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-633"><a href="#Generator.columndef_sql-633"><span class="linenos">633</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-634"><a href="#Generator.columndef_sql-634"><span class="linenos">634</span></a>
+</span><span id="Generator.columndef_sql-635"><a href="#Generator.columndef_sql-635"><span class="linenos">635</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7797,10 +8071,36 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.columnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnconstraint_sql-618"><a href="#Generator.columnconstraint_sql-618"><span class="linenos">618</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-619"><a href="#Generator.columnconstraint_sql-619"><span class="linenos">619</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-620"><a href="#Generator.columnconstraint_sql-620"><span class="linenos">620</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-621"><a href="#Generator.columnconstraint_sql-621"><span class="linenos">621</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnconstraint_sql-637"><a href="#Generator.columnconstraint_sql-637"><span class="linenos">637</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-638"><a href="#Generator.columnconstraint_sql-638"><span class="linenos">638</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-639"><a href="#Generator.columnconstraint_sql-639"><span class="linenos">639</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-640"><a href="#Generator.columnconstraint_sql-640"><span class="linenos">640</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>
+
+
+
+
+ </div>
+ <div id="Generator.computedcolumnconstraint_sql" class="classattr">
+ <input id="Generator.computedcolumnconstraint_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">computedcolumnconstraint_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#ComputedColumnConstraint">sqlglot.expressions.ComputedColumnConstraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.computedcolumnconstraint_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.computedcolumnconstraint_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.computedcolumnconstraint_sql-642"><a href="#Generator.computedcolumnconstraint_sql-642"><span class="linenos">642</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.computedcolumnconstraint_sql-643"><a href="#Generator.computedcolumnconstraint_sql-643"><span class="linenos">643</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.computedcolumnconstraint_sql-644"><a href="#Generator.computedcolumnconstraint_sql-644"><span class="linenos">644</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
+</span><span id="Generator.computedcolumnconstraint_sql-645"><a href="#Generator.computedcolumnconstraint_sql-645"><span class="linenos">645</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
+</span><span id="Generator.computedcolumnconstraint_sql-646"><a href="#Generator.computedcolumnconstraint_sql-646"><span class="linenos">646</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;persisted&quot;</span><span class="p">):</span>
+</span><span id="Generator.computedcolumnconstraint_sql-647"><a href="#Generator.computedcolumnconstraint_sql-647"><span class="linenos">647</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
+</span><span id="Generator.computedcolumnconstraint_sql-648"><a href="#Generator.computedcolumnconstraint_sql-648"><span class="linenos">648</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.computedcolumnconstraint_sql-649"><a href="#Generator.computedcolumnconstraint_sql-649"><span class="linenos">649</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.computedcolumnconstraint_sql-650"><a href="#Generator.computedcolumnconstraint_sql-650"><span class="linenos">650</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7818,8 +8118,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.autoincrementcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.autoincrementcolumnconstraint_sql-623"><a href="#Generator.autoincrementcolumnconstraint_sql-623"><span class="linenos">623</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.autoincrementcolumnconstraint_sql-624"><a href="#Generator.autoincrementcolumnconstraint_sql-624"><span class="linenos">624</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.autoincrementcolumnconstraint_sql-652"><a href="#Generator.autoincrementcolumnconstraint_sql-652"><span class="linenos">652</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.autoincrementcolumnconstraint_sql-653"><a href="#Generator.autoincrementcolumnconstraint_sql-653"><span class="linenos">653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
</span></pre></div>
@@ -7837,13 +8137,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.compresscolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.compresscolumnconstraint_sql-626"><a href="#Generator.compresscolumnconstraint_sql-626"><span class="linenos">626</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.compresscolumnconstraint_sql-627"><a href="#Generator.compresscolumnconstraint_sql-627"><span class="linenos">627</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator.compresscolumnconstraint_sql-628"><a href="#Generator.compresscolumnconstraint_sql-628"><span class="linenos">628</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Generator.compresscolumnconstraint_sql-629"><a href="#Generator.compresscolumnconstraint_sql-629"><span class="linenos">629</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.compresscolumnconstraint_sql-630"><a href="#Generator.compresscolumnconstraint_sql-630"><span class="linenos">630</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.compresscolumnconstraint_sql-631"><a href="#Generator.compresscolumnconstraint_sql-631"><span class="linenos">631</span></a>
-</span><span id="Generator.compresscolumnconstraint_sql-632"><a href="#Generator.compresscolumnconstraint_sql-632"><span class="linenos">632</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.compresscolumnconstraint_sql-655"><a href="#Generator.compresscolumnconstraint_sql-655"><span class="linenos">655</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.compresscolumnconstraint_sql-656"><a href="#Generator.compresscolumnconstraint_sql-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator.compresscolumnconstraint_sql-657"><a href="#Generator.compresscolumnconstraint_sql-657"><span class="linenos">657</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Generator.compresscolumnconstraint_sql-658"><a href="#Generator.compresscolumnconstraint_sql-658"><span class="linenos">658</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.compresscolumnconstraint_sql-659"><a href="#Generator.compresscolumnconstraint_sql-659"><span class="linenos">659</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.compresscolumnconstraint_sql-660"><a href="#Generator.compresscolumnconstraint_sql-660"><span class="linenos">660</span></a>
+</span><span id="Generator.compresscolumnconstraint_sql-661"><a href="#Generator.compresscolumnconstraint_sql-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7861,38 +8161,38 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.generatedasidentitycolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generatedasidentitycolumnconstraint_sql-634"><a href="#Generator.generatedasidentitycolumnconstraint_sql-634"><span class="linenos">634</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-635"><a href="#Generator.generatedasidentitycolumnconstraint_sql-635"><span class="linenos">635</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-636"><a href="#Generator.generatedasidentitycolumnconstraint_sql-636"><span class="linenos">636</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-637"><a href="#Generator.generatedasidentitycolumnconstraint_sql-637"><span class="linenos">637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-638"><a href="#Generator.generatedasidentitycolumnconstraint_sql-638"><span class="linenos">638</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-639"><a href="#Generator.generatedasidentitycolumnconstraint_sql-639"><span class="linenos">639</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot;ON NULL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-640"><a href="#Generator.generatedasidentitycolumnconstraint_sql-640"><span class="linenos">640</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT </span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-641"><a href="#Generator.generatedasidentitycolumnconstraint_sql-641"><span class="linenos">641</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-642"><a href="#Generator.generatedasidentitycolumnconstraint_sql-642"><span class="linenos">642</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-643"><a href="#Generator.generatedasidentitycolumnconstraint_sql-643"><span class="linenos">643</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-644"><a href="#Generator.generatedasidentitycolumnconstraint_sql-644"><span class="linenos">644</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-645"><a href="#Generator.generatedasidentitycolumnconstraint_sql-645"><span class="linenos">645</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-646"><a href="#Generator.generatedasidentitycolumnconstraint_sql-646"><span class="linenos">646</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-647"><a href="#Generator.generatedasidentitycolumnconstraint_sql-647"><span class="linenos">647</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-648"><a href="#Generator.generatedasidentitycolumnconstraint_sql-648"><span class="linenos">648</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-649"><a href="#Generator.generatedasidentitycolumnconstraint_sql-649"><span class="linenos">649</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-650"><a href="#Generator.generatedasidentitycolumnconstraint_sql-650"><span class="linenos">650</span></a> <span class="n">cycle</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-651"><a href="#Generator.generatedasidentitycolumnconstraint_sql-651"><span class="linenos">651</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-652"><a href="#Generator.generatedasidentitycolumnconstraint_sql-652"><span class="linenos">652</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-653"><a href="#Generator.generatedasidentitycolumnconstraint_sql-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-654"><a href="#Generator.generatedasidentitycolumnconstraint_sql-654"><span class="linenos">654</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-655"><a href="#Generator.generatedasidentitycolumnconstraint_sql-655"><span class="linenos">655</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-656"><a href="#Generator.generatedasidentitycolumnconstraint_sql-656"><span class="linenos">656</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-657"><a href="#Generator.generatedasidentitycolumnconstraint_sql-657"><span class="linenos">657</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-658"><a href="#Generator.generatedasidentitycolumnconstraint_sql-658"><span class="linenos">658</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-659"><a href="#Generator.generatedasidentitycolumnconstraint_sql-659"><span class="linenos">659</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-660"><a href="#Generator.generatedasidentitycolumnconstraint_sql-660"><span class="linenos">660</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-661"><a href="#Generator.generatedasidentitycolumnconstraint_sql-661"><span class="linenos">661</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-662"><a href="#Generator.generatedasidentitycolumnconstraint_sql-662"><span class="linenos">662</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-663"><a href="#Generator.generatedasidentitycolumnconstraint_sql-663"><span class="linenos">663</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-664"><a href="#Generator.generatedasidentitycolumnconstraint_sql-664"><span class="linenos">664</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-665"><a href="#Generator.generatedasidentitycolumnconstraint_sql-665"><span class="linenos">665</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generatedasidentitycolumnconstraint_sql-663"><a href="#Generator.generatedasidentitycolumnconstraint_sql-663"><span class="linenos">663</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-664"><a href="#Generator.generatedasidentitycolumnconstraint_sql-664"><span class="linenos">664</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-665"><a href="#Generator.generatedasidentitycolumnconstraint_sql-665"><span class="linenos">665</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-666"><a href="#Generator.generatedasidentitycolumnconstraint_sql-666"><span class="linenos">666</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-667"><a href="#Generator.generatedasidentitycolumnconstraint_sql-667"><span class="linenos">667</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-668"><a href="#Generator.generatedasidentitycolumnconstraint_sql-668"><span class="linenos">668</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-669"><a href="#Generator.generatedasidentitycolumnconstraint_sql-669"><span class="linenos">669</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-670"><a href="#Generator.generatedasidentitycolumnconstraint_sql-670"><span class="linenos">670</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-671"><a href="#Generator.generatedasidentitycolumnconstraint_sql-671"><span class="linenos">671</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-672"><a href="#Generator.generatedasidentitycolumnconstraint_sql-672"><span class="linenos">672</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-673"><a href="#Generator.generatedasidentitycolumnconstraint_sql-673"><span class="linenos">673</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-674"><a href="#Generator.generatedasidentitycolumnconstraint_sql-674"><span class="linenos">674</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-675"><a href="#Generator.generatedasidentitycolumnconstraint_sql-675"><span class="linenos">675</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-676"><a href="#Generator.generatedasidentitycolumnconstraint_sql-676"><span class="linenos">676</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-677"><a href="#Generator.generatedasidentitycolumnconstraint_sql-677"><span class="linenos">677</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-678"><a href="#Generator.generatedasidentitycolumnconstraint_sql-678"><span class="linenos">678</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-679"><a href="#Generator.generatedasidentitycolumnconstraint_sql-679"><span class="linenos">679</span></a> <span class="n">cycle</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-680"><a href="#Generator.generatedasidentitycolumnconstraint_sql-680"><span class="linenos">680</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-681"><a href="#Generator.generatedasidentitycolumnconstraint_sql-681"><span class="linenos">681</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-682"><a href="#Generator.generatedasidentitycolumnconstraint_sql-682"><span class="linenos">682</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-683"><a href="#Generator.generatedasidentitycolumnconstraint_sql-683"><span class="linenos">683</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-684"><a href="#Generator.generatedasidentitycolumnconstraint_sql-684"><span class="linenos">684</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-685"><a href="#Generator.generatedasidentitycolumnconstraint_sql-685"><span class="linenos">685</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-686"><a href="#Generator.generatedasidentitycolumnconstraint_sql-686"><span class="linenos">686</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-687"><a href="#Generator.generatedasidentitycolumnconstraint_sql-687"><span class="linenos">687</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-688"><a href="#Generator.generatedasidentitycolumnconstraint_sql-688"><span class="linenos">688</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-689"><a href="#Generator.generatedasidentitycolumnconstraint_sql-689"><span class="linenos">689</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-690"><a href="#Generator.generatedasidentitycolumnconstraint_sql-690"><span class="linenos">690</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-691"><a href="#Generator.generatedasidentitycolumnconstraint_sql-691"><span class="linenos">691</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-692"><a href="#Generator.generatedasidentitycolumnconstraint_sql-692"><span class="linenos">692</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-693"><a href="#Generator.generatedasidentitycolumnconstraint_sql-693"><span class="linenos">693</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-694"><a href="#Generator.generatedasidentitycolumnconstraint_sql-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7910,8 +8210,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.notnullcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.notnullcolumnconstraint_sql-667"><a href="#Generator.notnullcolumnconstraint_sql-667"><span class="linenos">667</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.notnullcolumnconstraint_sql-668"><a href="#Generator.notnullcolumnconstraint_sql-668"><span class="linenos">668</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.notnullcolumnconstraint_sql-696"><a href="#Generator.notnullcolumnconstraint_sql-696"><span class="linenos">696</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.notnullcolumnconstraint_sql-697"><a href="#Generator.notnullcolumnconstraint_sql-697"><span class="linenos">697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
</span></pre></div>
@@ -7929,11 +8229,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.primarykeycolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykeycolumnconstraint_sql-670"><a href="#Generator.primarykeycolumnconstraint_sql-670"><span class="linenos">670</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-671"><a href="#Generator.primarykeycolumnconstraint_sql-671"><span class="linenos">671</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;desc&quot;</span><span class="p">)</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-672"><a href="#Generator.primarykeycolumnconstraint_sql-672"><span class="linenos">672</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-673"><a href="#Generator.primarykeycolumnconstraint_sql-673"><span class="linenos">673</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-674"><a href="#Generator.primarykeycolumnconstraint_sql-674"><span class="linenos">674</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykeycolumnconstraint_sql-699"><a href="#Generator.primarykeycolumnconstraint_sql-699"><span class="linenos">699</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-700"><a href="#Generator.primarykeycolumnconstraint_sql-700"><span class="linenos">700</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;desc&quot;</span><span class="p">)</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-701"><a href="#Generator.primarykeycolumnconstraint_sql-701"><span class="linenos">701</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-702"><a href="#Generator.primarykeycolumnconstraint_sql-702"><span class="linenos">702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-703"><a href="#Generator.primarykeycolumnconstraint_sql-703"><span class="linenos">703</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY&quot;</span>
</span></pre></div>
@@ -7951,10 +8251,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.uniquecolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uniquecolumnconstraint_sql-676"><a href="#Generator.uniquecolumnconstraint_sql-676"><span class="linenos">676</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-677"><a href="#Generator.uniquecolumnconstraint_sql-677"><span class="linenos">677</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-678"><a href="#Generator.uniquecolumnconstraint_sql-678"><span class="linenos">678</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-679"><a href="#Generator.uniquecolumnconstraint_sql-679"><span class="linenos">679</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uniquecolumnconstraint_sql-705"><a href="#Generator.uniquecolumnconstraint_sql-705"><span class="linenos">705</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-706"><a href="#Generator.uniquecolumnconstraint_sql-706"><span class="linenos">706</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-707"><a href="#Generator.uniquecolumnconstraint_sql-707"><span class="linenos">707</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-708"><a href="#Generator.uniquecolumnconstraint_sql-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7972,8 +8272,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.createable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.createable_sql-681"><a href="#Generator.createable_sql-681"><span class="linenos">681</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.createable_sql-682"><a href="#Generator.createable_sql-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.createable_sql-710"><a href="#Generator.createable_sql-710"><span class="linenos">710</span></a> <span class="k">def</span> <span class="nf">createable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.createable_sql-711"><a href="#Generator.createable_sql-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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>
@@ -7991,90 +8291,90 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.create_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.create_sql-684"><a href="#Generator.create_sql-684"><span class="linenos">684</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.create_sql-685"><a href="#Generator.create_sql-685"><span class="linenos">685</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator.create_sql-686"><a href="#Generator.create_sql-686"><span class="linenos">686</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-687"><a href="#Generator.create_sql-687"><span class="linenos">687</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
-</span><span id="Generator.create_sql-688"><a href="#Generator.create_sql-688"><span class="linenos">688</span></a>
-</span><span id="Generator.create_sql-689"><a href="#Generator.create_sql-689"><span class="linenos">689</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
-</span><span id="Generator.create_sql-690"><a href="#Generator.create_sql-690"><span class="linenos">690</span></a>
-</span><span id="Generator.create_sql-691"><a href="#Generator.create_sql-691"><span class="linenos">691</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-692"><a href="#Generator.create_sql-692"><span class="linenos">692</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
-</span><span id="Generator.create_sql-693"><a href="#Generator.create_sql-693"><span class="linenos">693</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
-</span><span id="Generator.create_sql-694"><a href="#Generator.create_sql-694"><span class="linenos">694</span></a> <span class="p">):</span>
-</span><span id="Generator.create_sql-695"><a href="#Generator.create_sql-695"><span class="linenos">695</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.create_sql-696"><a href="#Generator.create_sql-696"><span class="linenos">696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-697"><a href="#Generator.create_sql-697"><span class="linenos">697</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator.create_sql-698"><a href="#Generator.create_sql-698"><span class="linenos">698</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
-</span><span id="Generator.create_sql-699"><a href="#Generator.create_sql-699"><span class="linenos">699</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
-</span><span id="Generator.create_sql-700"><a href="#Generator.create_sql-700"><span class="linenos">700</span></a> <span class="p">]</span>
-</span><span id="Generator.create_sql-701"><a href="#Generator.create_sql-701"><span class="linenos">701</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-702"><a href="#Generator.create_sql-702"><span class="linenos">702</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-703"><a href="#Generator.create_sql-703"><span class="linenos">703</span></a>
-</span><span id="Generator.create_sql-704"><a href="#Generator.create_sql-704"><span class="linenos">704</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-705"><a href="#Generator.create_sql-705"><span class="linenos">705</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-706"><a href="#Generator.create_sql-706"><span class="linenos">706</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
-</span><span id="Generator.create_sql-707"><a href="#Generator.create_sql-707"><span class="linenos">707</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-708"><a href="#Generator.create_sql-708"><span class="linenos">708</span></a>
-</span><span id="Generator.create_sql-709"><a href="#Generator.create_sql-709"><span class="linenos">709</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
-</span><span id="Generator.create_sql-710"><a href="#Generator.create_sql-710"><span class="linenos">710</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
-</span><span id="Generator.create_sql-711"><a href="#Generator.create_sql-711"><span class="linenos">711</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-712"><a href="#Generator.create_sql-712"><span class="linenos">712</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-713"><a href="#Generator.create_sql-713"><span class="linenos">713</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
-</span><span id="Generator.create_sql-714"><a href="#Generator.create_sql-714"><span class="linenos">714</span></a> <span class="p">),</span>
-</span><span id="Generator.create_sql-715"><a href="#Generator.create_sql-715"><span class="linenos">715</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-716"><a href="#Generator.create_sql-716"><span class="linenos">716</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-717"><a href="#Generator.create_sql-717"><span class="linenos">717</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-718"><a href="#Generator.create_sql-718"><span class="linenos">718</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.create_sql-719"><a href="#Generator.create_sql-719"><span class="linenos">719</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-720"><a href="#Generator.create_sql-720"><span class="linenos">720</span></a>
-</span><span id="Generator.create_sql-721"><a href="#Generator.create_sql-721"><span class="linenos">721</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-722"><a href="#Generator.create_sql-722"><span class="linenos">722</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
-</span><span id="Generator.create_sql-723"><a href="#Generator.create_sql-723"><span class="linenos">723</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-724"><a href="#Generator.create_sql-724"><span class="linenos">724</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
-</span><span id="Generator.create_sql-725"><a href="#Generator.create_sql-725"><span class="linenos">725</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-726"><a href="#Generator.create_sql-726"><span class="linenos">726</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-727"><a href="#Generator.create_sql-727"><span class="linenos">727</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-728"><a href="#Generator.create_sql-728"><span class="linenos">728</span></a>
-</span><span id="Generator.create_sql-729"><a href="#Generator.create_sql-729"><span class="linenos">729</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-730"><a href="#Generator.create_sql-730"><span class="linenos">730</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-731"><a href="#Generator.create_sql-731"><span class="linenos">731</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.create_sql-713"><a href="#Generator.create_sql-713"><span class="linenos">713</span></a> <span class="k">def</span> <span class="nf">create_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.create_sql-714"><a href="#Generator.create_sql-714"><span class="linenos">714</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator.create_sql-715"><a href="#Generator.create_sql-715"><span class="linenos">715</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-716"><a href="#Generator.create_sql-716"><span class="linenos">716</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
+</span><span id="Generator.create_sql-717"><a href="#Generator.create_sql-717"><span class="linenos">717</span></a>
+</span><span id="Generator.create_sql-718"><a href="#Generator.create_sql-718"><span class="linenos">718</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="Generator.create_sql-719"><a href="#Generator.create_sql-719"><span class="linenos">719</span></a>
+</span><span id="Generator.create_sql-720"><a href="#Generator.create_sql-720"><span class="linenos">720</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-721"><a href="#Generator.create_sql-721"><span class="linenos">721</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+</span><span id="Generator.create_sql-722"><a href="#Generator.create_sql-722"><span class="linenos">722</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
+</span><span id="Generator.create_sql-723"><a href="#Generator.create_sql-723"><span class="linenos">723</span></a> <span class="p">):</span>
+</span><span id="Generator.create_sql-724"><a href="#Generator.create_sql-724"><span class="linenos">724</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.create_sql-725"><a href="#Generator.create_sql-725"><span class="linenos">725</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-726"><a href="#Generator.create_sql-726"><span class="linenos">726</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator.create_sql-727"><a href="#Generator.create_sql-727"><span class="linenos">727</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
+</span><span id="Generator.create_sql-728"><a href="#Generator.create_sql-728"><span class="linenos">728</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
+</span><span id="Generator.create_sql-729"><a href="#Generator.create_sql-729"><span class="linenos">729</span></a> <span class="p">]</span>
+</span><span id="Generator.create_sql-730"><a href="#Generator.create_sql-730"><span class="linenos">730</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-731"><a href="#Generator.create_sql-731"><span class="linenos">731</span></a> <span class="p">)</span>
</span><span id="Generator.create_sql-732"><a href="#Generator.create_sql-732"><span class="linenos">732</span></a>
-</span><span id="Generator.create_sql-733"><a href="#Generator.create_sql-733"><span class="linenos">733</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-734"><a href="#Generator.create_sql-734"><span class="linenos">734</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-735"><a href="#Generator.create_sql-735"><span class="linenos">735</span></a>
-</span><span id="Generator.create_sql-736"><a href="#Generator.create_sql-736"><span class="linenos">736</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-737"><a href="#Generator.create_sql-737"><span class="linenos">737</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
-</span><span id="Generator.create_sql-738"><a href="#Generator.create_sql-738"><span class="linenos">738</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-739"><a href="#Generator.create_sql-739"><span class="linenos">739</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
-</span><span id="Generator.create_sql-740"><a href="#Generator.create_sql-740"><span class="linenos">740</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-741"><a href="#Generator.create_sql-741"><span class="linenos">741</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-742"><a href="#Generator.create_sql-742"><span class="linenos">742</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-743"><a href="#Generator.create_sql-743"><span class="linenos">743</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-744"><a href="#Generator.create_sql-744"><span class="linenos">744</span></a>
-</span><span id="Generator.create_sql-745"><a href="#Generator.create_sql-745"><span class="linenos">745</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
-</span><span id="Generator.create_sql-746"><a href="#Generator.create_sql-746"><span class="linenos">746</span></a>
-</span><span id="Generator.create_sql-747"><a href="#Generator.create_sql-747"><span class="linenos">747</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-748"><a href="#Generator.create_sql-748"><span class="linenos">748</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
-</span><span id="Generator.create_sql-749"><a href="#Generator.create_sql-749"><span class="linenos">749</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-750"><a href="#Generator.create_sql-750"><span class="linenos">750</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-751"><a href="#Generator.create_sql-751"><span class="linenos">751</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
-</span><span id="Generator.create_sql-752"><a href="#Generator.create_sql-752"><span class="linenos">752</span></a> <span class="p">),</span>
-</span><span id="Generator.create_sql-753"><a href="#Generator.create_sql-753"><span class="linenos">753</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-754"><a href="#Generator.create_sql-754"><span class="linenos">754</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-755"><a href="#Generator.create_sql-755"><span class="linenos">755</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-733"><a href="#Generator.create_sql-733"><span class="linenos">733</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-734"><a href="#Generator.create_sql-734"><span class="linenos">734</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-735"><a href="#Generator.create_sql-735"><span class="linenos">735</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
+</span><span id="Generator.create_sql-736"><a href="#Generator.create_sql-736"><span class="linenos">736</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-737"><a href="#Generator.create_sql-737"><span class="linenos">737</span></a>
+</span><span id="Generator.create_sql-738"><a href="#Generator.create_sql-738"><span class="linenos">738</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
+</span><span id="Generator.create_sql-739"><a href="#Generator.create_sql-739"><span class="linenos">739</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
+</span><span id="Generator.create_sql-740"><a href="#Generator.create_sql-740"><span class="linenos">740</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-741"><a href="#Generator.create_sql-741"><span class="linenos">741</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-742"><a href="#Generator.create_sql-742"><span class="linenos">742</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
+</span><span id="Generator.create_sql-743"><a href="#Generator.create_sql-743"><span class="linenos">743</span></a> <span class="p">),</span>
+</span><span id="Generator.create_sql-744"><a href="#Generator.create_sql-744"><span class="linenos">744</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-745"><a href="#Generator.create_sql-745"><span class="linenos">745</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-746"><a href="#Generator.create_sql-746"><span class="linenos">746</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-747"><a href="#Generator.create_sql-747"><span class="linenos">747</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.create_sql-748"><a href="#Generator.create_sql-748"><span class="linenos">748</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-749"><a href="#Generator.create_sql-749"><span class="linenos">749</span></a>
+</span><span id="Generator.create_sql-750"><a href="#Generator.create_sql-750"><span class="linenos">750</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-751"><a href="#Generator.create_sql-751"><span class="linenos">751</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
+</span><span id="Generator.create_sql-752"><a href="#Generator.create_sql-752"><span class="linenos">752</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-753"><a href="#Generator.create_sql-753"><span class="linenos">753</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
+</span><span id="Generator.create_sql-754"><a href="#Generator.create_sql-754"><span class="linenos">754</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-755"><a href="#Generator.create_sql-755"><span class="linenos">755</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
</span><span id="Generator.create_sql-756"><a href="#Generator.create_sql-756"><span class="linenos">756</span></a> <span class="p">)</span>
</span><span id="Generator.create_sql-757"><a href="#Generator.create_sql-757"><span class="linenos">757</span></a>
-</span><span id="Generator.create_sql-758"><a href="#Generator.create_sql-758"><span class="linenos">758</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-759"><a href="#Generator.create_sql-759"><span class="linenos">759</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.create_sql-760"><a href="#Generator.create_sql-760"><span class="linenos">760</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-761"><a href="#Generator.create_sql-761"><span class="linenos">761</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-762"><a href="#Generator.create_sql-762"><span class="linenos">762</span></a>
-</span><span id="Generator.create_sql-763"><a href="#Generator.create_sql-763"><span class="linenos">763</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;clone&quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-764"><a href="#Generator.create_sql-764"><span class="linenos">764</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-765"><a href="#Generator.create_sql-765"><span class="linenos">765</span></a>
-</span><span id="Generator.create_sql-766"><a href="#Generator.create_sql-766"><span class="linenos">766</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-767"><a href="#Generator.create_sql-767"><span class="linenos">767</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
+</span><span id="Generator.create_sql-758"><a href="#Generator.create_sql-758"><span class="linenos">758</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-759"><a href="#Generator.create_sql-759"><span class="linenos">759</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-760"><a href="#Generator.create_sql-760"><span class="linenos">760</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator.create_sql-761"><a href="#Generator.create_sql-761"><span class="linenos">761</span></a>
+</span><span id="Generator.create_sql-762"><a href="#Generator.create_sql-762"><span class="linenos">762</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-763"><a href="#Generator.create_sql-763"><span class="linenos">763</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-764"><a href="#Generator.create_sql-764"><span class="linenos">764</span></a>
+</span><span id="Generator.create_sql-765"><a href="#Generator.create_sql-765"><span class="linenos">765</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-766"><a href="#Generator.create_sql-766"><span class="linenos">766</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
+</span><span id="Generator.create_sql-767"><a href="#Generator.create_sql-767"><span class="linenos">767</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-768"><a href="#Generator.create_sql-768"><span class="linenos">768</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
+</span><span id="Generator.create_sql-769"><a href="#Generator.create_sql-769"><span class="linenos">769</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-770"><a href="#Generator.create_sql-770"><span class="linenos">770</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-771"><a href="#Generator.create_sql-771"><span class="linenos">771</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-772"><a href="#Generator.create_sql-772"><span class="linenos">772</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-773"><a href="#Generator.create_sql-773"><span class="linenos">773</span></a>
+</span><span id="Generator.create_sql-774"><a href="#Generator.create_sql-774"><span class="linenos">774</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
+</span><span id="Generator.create_sql-775"><a href="#Generator.create_sql-775"><span class="linenos">775</span></a>
+</span><span id="Generator.create_sql-776"><a href="#Generator.create_sql-776"><span class="linenos">776</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-777"><a href="#Generator.create_sql-777"><span class="linenos">777</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
+</span><span id="Generator.create_sql-778"><a href="#Generator.create_sql-778"><span class="linenos">778</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-779"><a href="#Generator.create_sql-779"><span class="linenos">779</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-780"><a href="#Generator.create_sql-780"><span class="linenos">780</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
+</span><span id="Generator.create_sql-781"><a href="#Generator.create_sql-781"><span class="linenos">781</span></a> <span class="p">),</span>
+</span><span id="Generator.create_sql-782"><a href="#Generator.create_sql-782"><span class="linenos">782</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-783"><a href="#Generator.create_sql-783"><span class="linenos">783</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-784"><a href="#Generator.create_sql-784"><span class="linenos">784</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-785"><a href="#Generator.create_sql-785"><span class="linenos">785</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-786"><a href="#Generator.create_sql-786"><span class="linenos">786</span></a>
+</span><span id="Generator.create_sql-787"><a href="#Generator.create_sql-787"><span class="linenos">787</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-788"><a href="#Generator.create_sql-788"><span class="linenos">788</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.create_sql-789"><a href="#Generator.create_sql-789"><span class="linenos">789</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-790"><a href="#Generator.create_sql-790"><span class="linenos">790</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-791"><a href="#Generator.create_sql-791"><span class="linenos">791</span></a>
+</span><span id="Generator.create_sql-792"><a href="#Generator.create_sql-792"><span class="linenos">792</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;clone&quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-793"><a href="#Generator.create_sql-793"><span class="linenos">793</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-794"><a href="#Generator.create_sql-794"><span class="linenos">794</span></a>
+</span><span id="Generator.create_sql-795"><a href="#Generator.create_sql-795"><span class="linenos">795</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-796"><a href="#Generator.create_sql-796"><span class="linenos">796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
</span></pre></div>
@@ -8092,16 +8392,18 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.clone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clone_sql-769"><a href="#Generator.clone_sql-769"><span class="linenos">769</span></a> <span class="k">def</span> <span class="nf">clone_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.clone_sql-770"><a href="#Generator.clone_sql-770"><span class="linenos">770</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.clone_sql-771"><a href="#Generator.clone_sql-771"><span class="linenos">771</span></a> <span class="n">when</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span><span class="p">)</span>
-</span><span id="Generator.clone_sql-772"><a href="#Generator.clone_sql-772"><span class="linenos">772</span></a>
-</span><span id="Generator.clone_sql-773"><a href="#Generator.clone_sql-773"><span class="linenos">773</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
-</span><span id="Generator.clone_sql-774"><a href="#Generator.clone_sql-774"><span class="linenos">774</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.clone_sql-775"><a href="#Generator.clone_sql-775"><span class="linenos">775</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator.clone_sql-776"><a href="#Generator.clone_sql-776"><span class="linenos">776</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLONE </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">when</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.clone_sql-777"><a href="#Generator.clone_sql-777"><span class="linenos">777</span></a>
-</span><span id="Generator.clone_sql-778"><a href="#Generator.clone_sql-778"><span class="linenos">778</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLONE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clone_sql-798"><a href="#Generator.clone_sql-798"><span class="linenos">798</span></a> <span class="k">def</span> <span class="nf">clone_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.clone_sql-799"><a href="#Generator.clone_sql-799"><span class="linenos">799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.clone_sql-800"><a href="#Generator.clone_sql-800"><span class="linenos">800</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.clone_sql-801"><a href="#Generator.clone_sql-801"><span class="linenos">801</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">shallow</span><span class="si">}</span><span class="s2">CLONE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.clone_sql-802"><a href="#Generator.clone_sql-802"><span class="linenos">802</span></a> <span class="n">when</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span><span class="p">)</span>
+</span><span id="Generator.clone_sql-803"><a href="#Generator.clone_sql-803"><span class="linenos">803</span></a>
+</span><span id="Generator.clone_sql-804"><a href="#Generator.clone_sql-804"><span class="linenos">804</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
+</span><span id="Generator.clone_sql-805"><a href="#Generator.clone_sql-805"><span class="linenos">805</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.clone_sql-806"><a href="#Generator.clone_sql-806"><span class="linenos">806</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.clone_sql-807"><a href="#Generator.clone_sql-807"><span class="linenos">807</span></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">when</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.clone_sql-808"><a href="#Generator.clone_sql-808"><span class="linenos">808</span></a>
+</span><span id="Generator.clone_sql-809"><a href="#Generator.clone_sql-809"><span class="linenos">809</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@@ -8119,8 +8421,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.describe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.describe_sql-780"><a href="#Generator.describe_sql-780"><span class="linenos">780</span></a> <span class="k">def</span> <span class="nf">describe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.describe_sql-781"><a href="#Generator.describe_sql-781"><span class="linenos">781</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.describe_sql-811"><a href="#Generator.describe_sql-811"><span class="linenos">811</span></a> <span class="k">def</span> <span class="nf">describe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.describe_sql-812"><a href="#Generator.describe_sql-812"><span class="linenos">812</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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>
@@ -8138,11 +8440,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.prepend_ctes"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.prepend_ctes-783"><a href="#Generator.prepend_ctes-783"><span class="linenos">783</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.prepend_ctes-784"><a href="#Generator.prepend_ctes-784"><span class="linenos">784</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">)</span>
-</span><span id="Generator.prepend_ctes-785"><a href="#Generator.prepend_ctes-785"><span class="linenos">785</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Generator.prepend_ctes-786"><a href="#Generator.prepend_ctes-786"><span class="linenos">786</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.prepend_ctes-787"><a href="#Generator.prepend_ctes-787"><span class="linenos">787</span></a> <span class="k">return</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.prepend_ctes-814"><a href="#Generator.prepend_ctes-814"><span class="linenos">814</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.prepend_ctes-815"><a href="#Generator.prepend_ctes-815"><span class="linenos">815</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">)</span>
+</span><span id="Generator.prepend_ctes-816"><a href="#Generator.prepend_ctes-816"><span class="linenos">816</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Generator.prepend_ctes-817"><a href="#Generator.prepend_ctes-817"><span class="linenos">817</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.prepend_ctes-818"><a href="#Generator.prepend_ctes-818"><span class="linenos">818</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -8160,11 +8462,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.with_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_sql-789"><a href="#Generator.with_sql-789"><span class="linenos">789</span></a> <span class="k">def</span> <span class="nf">with_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.with_sql-790"><a href="#Generator.with_sql-790"><span class="linenos">790</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.with_sql-791"><a href="#Generator.with_sql-791"><span class="linenos">791</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="s2">&quot;RECURSIVE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.with_sql-792"><a href="#Generator.with_sql-792"><span class="linenos">792</span></a>
-</span><span id="Generator.with_sql-793"><a href="#Generator.with_sql-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_sql-820"><a href="#Generator.with_sql-820"><span class="linenos">820</span></a> <span class="k">def</span> <span class="nf">with_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.with_sql-821"><a href="#Generator.with_sql-821"><span class="linenos">821</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.with_sql-822"><a href="#Generator.with_sql-822"><span class="linenos">822</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="s2">&quot;RECURSIVE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.with_sql-823"><a href="#Generator.with_sql-823"><span class="linenos">823</span></a>
+</span><span id="Generator.with_sql-824"><a href="#Generator.with_sql-824"><span class="linenos">824</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8182,9 +8484,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cte_sql-795"><a href="#Generator.cte_sql-795"><span class="linenos">795</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cte_sql-796"><a href="#Generator.cte_sql-796"><span class="linenos">796</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.cte_sql-797"><a href="#Generator.cte_sql-797"><span class="linenos">797</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cte_sql-826"><a href="#Generator.cte_sql-826"><span class="linenos">826</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cte_sql-827"><a href="#Generator.cte_sql-827"><span class="linenos">827</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.cte_sql-828"><a href="#Generator.cte_sql-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8202,11 +8504,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.tablealias_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablealias_sql-799"><a href="#Generator.tablealias_sql-799"><span class="linenos">799</span></a> <span class="k">def</span> <span class="nf">tablealias_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tablealias_sql-800"><a href="#Generator.tablealias_sql-800"><span class="linenos">800</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablealias_sql-801"><a href="#Generator.tablealias_sql-801"><span class="linenos">801</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.tablealias_sql-802"><a href="#Generator.tablealias_sql-802"><span class="linenos">802</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablealias_sql-803"><a href="#Generator.tablealias_sql-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablealias_sql-830"><a href="#Generator.tablealias_sql-830"><span class="linenos">830</span></a> <span class="k">def</span> <span class="nf">tablealias_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tablealias_sql-831"><a href="#Generator.tablealias_sql-831"><span class="linenos">831</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablealias_sql-832"><a href="#Generator.tablealias_sql-832"><span class="linenos">832</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.tablealias_sql-833"><a href="#Generator.tablealias_sql-833"><span class="linenos">833</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablealias_sql-834"><a href="#Generator.tablealias_sql-834"><span class="linenos">834</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8224,11 +8526,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitstring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitstring_sql-805"><a href="#Generator.bitstring_sql-805"><span class="linenos">805</span></a> <span class="k">def</span> <span class="nf">bitstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitstring_sql-806"><a href="#Generator.bitstring_sql-806"><span class="linenos">806</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.bitstring_sql-807"><a href="#Generator.bitstring_sql-807"><span class="linenos">807</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
-</span><span id="Generator.bitstring_sql-808"><a href="#Generator.bitstring_sql-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.bitstring_sql-809"><a href="#Generator.bitstring_sql-809"><span class="linenos">809</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitstring_sql-836"><a href="#Generator.bitstring_sql-836"><span class="linenos">836</span></a> <span class="k">def</span> <span class="nf">bitstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitstring_sql-837"><a href="#Generator.bitstring_sql-837"><span class="linenos">837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.bitstring_sql-838"><a href="#Generator.bitstring_sql-838"><span class="linenos">838</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
+</span><span id="Generator.bitstring_sql-839"><a href="#Generator.bitstring_sql-839"><span class="linenos">839</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.bitstring_sql-840"><a href="#Generator.bitstring_sql-840"><span class="linenos">840</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8246,11 +8548,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.hexstring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hexstring_sql-811"><a href="#Generator.hexstring_sql-811"><span class="linenos">811</span></a> <span class="k">def</span> <span class="nf">hexstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.hexstring_sql-812"><a href="#Generator.hexstring_sql-812"><span class="linenos">812</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.hexstring_sql-813"><a href="#Generator.hexstring_sql-813"><span class="linenos">813</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
-</span><span id="Generator.hexstring_sql-814"><a href="#Generator.hexstring_sql-814"><span class="linenos">814</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.hexstring_sql-815"><a href="#Generator.hexstring_sql-815"><span class="linenos">815</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hexstring_sql-842"><a href="#Generator.hexstring_sql-842"><span class="linenos">842</span></a> <span class="k">def</span> <span class="nf">hexstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.hexstring_sql-843"><a href="#Generator.hexstring_sql-843"><span class="linenos">843</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.hexstring_sql-844"><a href="#Generator.hexstring_sql-844"><span class="linenos">844</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
+</span><span id="Generator.hexstring_sql-845"><a href="#Generator.hexstring_sql-845"><span class="linenos">845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.hexstring_sql-846"><a href="#Generator.hexstring_sql-846"><span class="linenos">846</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8268,11 +8570,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bytestring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bytestring_sql-817"><a href="#Generator.bytestring_sql-817"><span class="linenos">817</span></a> <span class="k">def</span> <span class="nf">bytestring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bytestring_sql-818"><a href="#Generator.bytestring_sql-818"><span class="linenos">818</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.bytestring_sql-819"><a href="#Generator.bytestring_sql-819"><span class="linenos">819</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
-</span><span id="Generator.bytestring_sql-820"><a href="#Generator.bytestring_sql-820"><span class="linenos">820</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.bytestring_sql-821"><a href="#Generator.bytestring_sql-821"><span class="linenos">821</span></a> <span class="k">return</span> <span class="n">this</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bytestring_sql-848"><a href="#Generator.bytestring_sql-848"><span class="linenos">848</span></a> <span class="k">def</span> <span class="nf">bytestring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bytestring_sql-849"><a href="#Generator.bytestring_sql-849"><span class="linenos">849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.bytestring_sql-850"><a href="#Generator.bytestring_sql-850"><span class="linenos">850</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
+</span><span id="Generator.bytestring_sql-851"><a href="#Generator.bytestring_sql-851"><span class="linenos">851</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.bytestring_sql-852"><a href="#Generator.bytestring_sql-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@@ -8290,31 +8592,31 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.rawstring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rawstring_sql-823"><a href="#Generator.rawstring_sql-823"><span class="linenos">823</span></a> <span class="k">def</span> <span class="nf">rawstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.rawstring_sql-824"><a href="#Generator.rawstring_sql-824"><span class="linenos">824</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="Generator.rawstring_sql-825"><a href="#Generator.rawstring_sql-825"><span class="linenos">825</span></a> <span class="k">return</span> <span class="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">string</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rawstring_sql-854"><a href="#Generator.rawstring_sql-854"><span class="linenos">854</span></a> <span class="k">def</span> <span class="nf">rawstring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.rawstring_sql-855"><a href="#Generator.rawstring_sql-855"><span class="linenos">855</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="Generator.rawstring_sql-856"><a href="#Generator.rawstring_sql-856"><span class="linenos">856</span></a> <span class="k">return</span> <span class="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">string</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></pre></div>
</div>
- <div id="Generator.datatypesize_sql" class="classattr">
- <input id="Generator.datatypesize_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <div id="Generator.datatypeparam_sql" class="classattr">
+ <input id="Generator.datatypeparam_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">datatypesize_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#DataTypeSize">sqlglot.expressions.DataTypeSize</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">datatypeparam_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#DataTypeParam">sqlglot.expressions.DataTypeParam</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
- <label class="view-source-button" for="Generator.datatypesize_sql-view-source"><span>View Source</span></label>
+ <label class="view-source-button" for="Generator.datatypeparam_sql-view-source"><span>View Source</span></label>
</div>
- <a class="headerlink" href="#Generator.datatypesize_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatypesize_sql-827"><a href="#Generator.datatypesize_sql-827"><span class="linenos">827</span></a> <span class="k">def</span> <span class="nf">datatypesize_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.datatypesize_sql-828"><a href="#Generator.datatypesize_sql-828"><span class="linenos">828</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.datatypesize_sql-829"><a href="#Generator.datatypesize_sql-829"><span class="linenos">829</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="Generator.datatypesize_sql-830"><a href="#Generator.datatypesize_sql-830"><span class="linenos">830</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datatypesize_sql-831"><a href="#Generator.datatypesize_sql-831"><span class="linenos">831</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
+ <a class="headerlink" href="#Generator.datatypeparam_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatypeparam_sql-858"><a href="#Generator.datatypeparam_sql-858"><span class="linenos">858</span></a> <span class="k">def</span> <span class="nf">datatypeparam_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.datatypeparam_sql-859"><a href="#Generator.datatypeparam_sql-859"><span class="linenos">859</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.datatypeparam_sql-860"><a href="#Generator.datatypeparam_sql-860"><span class="linenos">860</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.datatypeparam_sql-861"><a href="#Generator.datatypeparam_sql-861"><span class="linenos">861</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datatypeparam_sql-862"><a href="#Generator.datatypeparam_sql-862"><span class="linenos">862</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8332,27 +8634,42 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatype_sql-833"><a href="#Generator.datatype_sql-833"><span class="linenos">833</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-834"><a href="#Generator.datatype_sql-834"><span class="linenos">834</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.datatype_sql-835"><a href="#Generator.datatype_sql-835"><span class="linenos">835</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.datatype_sql-836"><a href="#Generator.datatype_sql-836"><span class="linenos">836</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-837"><a href="#Generator.datatype_sql-837"><span class="linenos">837</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-838"><a href="#Generator.datatype_sql-838"><span class="linenos">838</span></a> <span class="k">else</span> <span class="n">type_value</span>
-</span><span id="Generator.datatype_sql-839"><a href="#Generator.datatype_sql-839"><span class="linenos">839</span></a> <span class="p">)</span>
-</span><span id="Generator.datatype_sql-840"><a href="#Generator.datatype_sql-840"><span class="linenos">840</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datatype_sql-841"><a href="#Generator.datatype_sql-841"><span class="linenos">841</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-842"><a href="#Generator.datatype_sql-842"><span class="linenos">842</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datatype_sql-843"><a href="#Generator.datatype_sql-843"><span class="linenos">843</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-844"><a href="#Generator.datatype_sql-844"><span class="linenos">844</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
-</span><span id="Generator.datatype_sql-845"><a href="#Generator.datatype_sql-845"><span class="linenos">845</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.datatype_sql-846"><a href="#Generator.datatype_sql-846"><span class="linenos">846</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-847"><a href="#Generator.datatype_sql-847"><span class="linenos">847</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-848"><a href="#Generator.datatype_sql-848"><span class="linenos">848</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-849"><a href="#Generator.datatype_sql-849"><span class="linenos">849</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.datatype_sql-850"><a href="#Generator.datatype_sql-850"><span class="linenos">850</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-851"><a href="#Generator.datatype_sql-851"><span class="linenos">851</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.datatype_sql-852"><a href="#Generator.datatype_sql-852"><span class="linenos">852</span></a>
-</span><span id="Generator.datatype_sql-853"><a href="#Generator.datatype_sql-853"><span class="linenos">853</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatype_sql-864"><a href="#Generator.datatype_sql-864"><span class="linenos">864</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-865"><a href="#Generator.datatype_sql-865"><span class="linenos">865</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.datatype_sql-866"><a href="#Generator.datatype_sql-866"><span class="linenos">866</span></a>
+</span><span id="Generator.datatype_sql-867"><a href="#Generator.datatype_sql-867"><span class="linenos">867</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
+</span><span id="Generator.datatype_sql-868"><a href="#Generator.datatype_sql-868"><span class="linenos">868</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-869"><a href="#Generator.datatype_sql-869"><span class="linenos">869</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-870"><a href="#Generator.datatype_sql-870"><span class="linenos">870</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.datatype_sql-871"><a href="#Generator.datatype_sql-871"><span class="linenos">871</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-872"><a href="#Generator.datatype_sql-872"><span class="linenos">872</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-873"><a href="#Generator.datatype_sql-873"><span class="linenos">873</span></a> <span class="k">else</span> <span class="n">type_value</span>
+</span><span id="Generator.datatype_sql-874"><a href="#Generator.datatype_sql-874"><span class="linenos">874</span></a> <span class="p">)</span>
+</span><span id="Generator.datatype_sql-875"><a href="#Generator.datatype_sql-875"><span class="linenos">875</span></a>
+</span><span id="Generator.datatype_sql-876"><a href="#Generator.datatype_sql-876"><span class="linenos">876</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datatype_sql-877"><a href="#Generator.datatype_sql-877"><span class="linenos">877</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-878"><a href="#Generator.datatype_sql-878"><span class="linenos">878</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datatype_sql-879"><a href="#Generator.datatype_sql-879"><span class="linenos">879</span></a>
+</span><span id="Generator.datatype_sql-880"><a href="#Generator.datatype_sql-880"><span class="linenos">880</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-881"><a href="#Generator.datatype_sql-881"><span class="linenos">881</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
+</span><span id="Generator.datatype_sql-882"><a href="#Generator.datatype_sql-882"><span class="linenos">882</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-883"><a href="#Generator.datatype_sql-883"><span class="linenos">883</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-884"><a href="#Generator.datatype_sql-884"><span class="linenos">884</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-885"><a href="#Generator.datatype_sql-885"><span class="linenos">885</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-886"><a href="#Generator.datatype_sql-886"><span class="linenos">886</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-887"><a href="#Generator.datatype_sql-887"><span class="linenos">887</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-888"><a href="#Generator.datatype_sql-888"><span class="linenos">888</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-889"><a href="#Generator.datatype_sql-889"><span class="linenos">889</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-890"><a href="#Generator.datatype_sql-890"><span class="linenos">890</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.datatype_sql-891"><a href="#Generator.datatype_sql-891"><span class="linenos">891</span></a>
+</span><span id="Generator.datatype_sql-892"><a href="#Generator.datatype_sql-892"><span class="linenos">892</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-893"><a href="#Generator.datatype_sql-893"><span class="linenos">893</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.datatype_sql-894"><a href="#Generator.datatype_sql-894"><span class="linenos">894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Generator.datatype_sql-895"><a href="#Generator.datatype_sql-895"><span class="linenos">895</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Generator.datatype_sql-896"><a href="#Generator.datatype_sql-896"><span class="linenos">896</span></a> <span class="p">):</span>
+</span><span id="Generator.datatype_sql-897"><a href="#Generator.datatype_sql-897"><span class="linenos">897</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
+</span><span id="Generator.datatype_sql-898"><a href="#Generator.datatype_sql-898"><span class="linenos">898</span></a>
+</span><span id="Generator.datatype_sql-899"><a href="#Generator.datatype_sql-899"><span class="linenos">899</span></a> <span class="k">return</span> <span class="n">type_sql</span>
</span></pre></div>
@@ -8370,11 +8687,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.directory_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.directory_sql-855"><a href="#Generator.directory_sql-855"><span class="linenos">855</span></a> <span class="k">def</span> <span class="nf">directory_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.directory_sql-856"><a href="#Generator.directory_sql-856"><span class="linenos">856</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.directory_sql-857"><a href="#Generator.directory_sql-857"><span class="linenos">857</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.directory_sql-858"><a href="#Generator.directory_sql-858"><span class="linenos">858</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.directory_sql-859"><a href="#Generator.directory_sql-859"><span class="linenos">859</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.directory_sql-901"><a href="#Generator.directory_sql-901"><span class="linenos">901</span></a> <span class="k">def</span> <span class="nf">directory_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.directory_sql-902"><a href="#Generator.directory_sql-902"><span class="linenos">902</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.directory_sql-903"><a href="#Generator.directory_sql-903"><span class="linenos">903</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.directory_sql-904"><a href="#Generator.directory_sql-904"><span class="linenos">904</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.directory_sql-905"><a href="#Generator.directory_sql-905"><span class="linenos">905</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8392,21 +8709,21 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.delete_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.delete_sql-861"><a href="#Generator.delete_sql-861"><span class="linenos">861</span></a> <span class="k">def</span> <span class="nf">delete_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.delete_sql-862"><a href="#Generator.delete_sql-862"><span class="linenos">862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-863"><a href="#Generator.delete_sql-863"><span class="linenos">863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.delete_sql-864"><a href="#Generator.delete_sql-864"><span class="linenos">864</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-865"><a href="#Generator.delete_sql-865"><span class="linenos">865</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.delete_sql-866"><a href="#Generator.delete_sql-866"><span class="linenos">866</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-867"><a href="#Generator.delete_sql-867"><span class="linenos">867</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-868"><a href="#Generator.delete_sql-868"><span class="linenos">868</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-869"><a href="#Generator.delete_sql-869"><span class="linenos">869</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-870"><a href="#Generator.delete_sql-870"><span class="linenos">870</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.delete_sql-871"><a href="#Generator.delete_sql-871"><span class="linenos">871</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator.delete_sql-872"><a href="#Generator.delete_sql-872"><span class="linenos">872</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.delete_sql-873"><a href="#Generator.delete_sql-873"><span class="linenos">873</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.delete_sql-874"><a href="#Generator.delete_sql-874"><span class="linenos">874</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.delete_sql-875"><a href="#Generator.delete_sql-875"><span class="linenos">875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.delete_sql-907"><a href="#Generator.delete_sql-907"><span class="linenos">907</span></a> <span class="k">def</span> <span class="nf">delete_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.delete_sql-908"><a href="#Generator.delete_sql-908"><span class="linenos">908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-909"><a href="#Generator.delete_sql-909"><span class="linenos">909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.delete_sql-910"><a href="#Generator.delete_sql-910"><span class="linenos">910</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-911"><a href="#Generator.delete_sql-911"><span class="linenos">911</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.delete_sql-912"><a href="#Generator.delete_sql-912"><span class="linenos">912</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-913"><a href="#Generator.delete_sql-913"><span class="linenos">913</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-914"><a href="#Generator.delete_sql-914"><span class="linenos">914</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-915"><a href="#Generator.delete_sql-915"><span class="linenos">915</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-916"><a href="#Generator.delete_sql-916"><span class="linenos">916</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.delete_sql-917"><a href="#Generator.delete_sql-917"><span class="linenos">917</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator.delete_sql-918"><a href="#Generator.delete_sql-918"><span class="linenos">918</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.delete_sql-919"><a href="#Generator.delete_sql-919"><span class="linenos">919</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.delete_sql-920"><a href="#Generator.delete_sql-920"><span class="linenos">920</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.delete_sql-921"><a href="#Generator.delete_sql-921"><span class="linenos">921</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -8424,18 +8741,18 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.drop_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.drop_sql-877"><a href="#Generator.drop_sql-877"><span class="linenos">877</span></a> <span class="k">def</span> <span class="nf">drop_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.drop_sql-878"><a href="#Generator.drop_sql-878"><span class="linenos">878</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.drop_sql-879"><a href="#Generator.drop_sql-879"><span class="linenos">879</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
-</span><span id="Generator.drop_sql-880"><a href="#Generator.drop_sql-880"><span class="linenos">880</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.drop_sql-881"><a href="#Generator.drop_sql-881"><span class="linenos">881</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-882"><a href="#Generator.drop_sql-882"><span class="linenos">882</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-883"><a href="#Generator.drop_sql-883"><span class="linenos">883</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-884"><a href="#Generator.drop_sql-884"><span class="linenos">884</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-885"><a href="#Generator.drop_sql-885"><span class="linenos">885</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-886"><a href="#Generator.drop_sql-886"><span class="linenos">886</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator.drop_sql-887"><a href="#Generator.drop_sql-887"><span class="linenos">887</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.drop_sql-888"><a href="#Generator.drop_sql-888"><span class="linenos">888</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.drop_sql-923"><a href="#Generator.drop_sql-923"><span class="linenos">923</span></a> <span class="k">def</span> <span class="nf">drop_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.drop_sql-924"><a href="#Generator.drop_sql-924"><span class="linenos">924</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.drop_sql-925"><a href="#Generator.drop_sql-925"><span class="linenos">925</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
+</span><span id="Generator.drop_sql-926"><a href="#Generator.drop_sql-926"><span class="linenos">926</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.drop_sql-927"><a href="#Generator.drop_sql-927"><span class="linenos">927</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-928"><a href="#Generator.drop_sql-928"><span class="linenos">928</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-929"><a href="#Generator.drop_sql-929"><span class="linenos">929</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-930"><a href="#Generator.drop_sql-930"><span class="linenos">930</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-931"><a href="#Generator.drop_sql-931"><span class="linenos">931</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-932"><a href="#Generator.drop_sql-932"><span class="linenos">932</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator.drop_sql-933"><a href="#Generator.drop_sql-933"><span class="linenos">933</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.drop_sql-934"><a href="#Generator.drop_sql-934"><span class="linenos">934</span></a> <span class="p">)</span>
</span></pre></div>
@@ -8453,11 +8770,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.except_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_sql-890"><a href="#Generator.except_sql-890"><span class="linenos">890</span></a> <span class="k">def</span> <span class="nf">except_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.except_sql-891"><a href="#Generator.except_sql-891"><span class="linenos">891</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator.except_sql-892"><a href="#Generator.except_sql-892"><span class="linenos">892</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.except_sql-893"><a href="#Generator.except_sql-893"><span class="linenos">893</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator.except_sql-894"><a href="#Generator.except_sql-894"><span class="linenos">894</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_sql-936"><a href="#Generator.except_sql-936"><span class="linenos">936</span></a> <span class="k">def</span> <span class="nf">except_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.except_sql-937"><a href="#Generator.except_sql-937"><span class="linenos">937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator.except_sql-938"><a href="#Generator.except_sql-938"><span class="linenos">938</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.except_sql-939"><a href="#Generator.except_sql-939"><span class="linenos">939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator.except_sql-940"><a href="#Generator.except_sql-940"><span class="linenos">940</span></a> <span class="p">)</span>
</span></pre></div>
@@ -8475,8 +8792,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.except_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_op-896"><a href="#Generator.except_op-896"><span class="linenos">896</span></a> <span class="k">def</span> <span class="nf">except_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.except_op-897"><a href="#Generator.except_op-897"><span class="linenos">897</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_op-942"><a href="#Generator.except_op-942"><span class="linenos">942</span></a> <span class="k">def</span> <span class="nf">except_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.except_op-943"><a href="#Generator.except_op-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8494,15 +8811,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.fetch_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fetch_sql-899"><a href="#Generator.fetch_sql-899"><span class="linenos">899</span></a> <span class="k">def</span> <span class="nf">fetch_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.fetch_sql-900"><a href="#Generator.fetch_sql-900"><span class="linenos">900</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;direction&quot;</span><span class="p">)</span>
-</span><span id="Generator.fetch_sql-901"><a href="#Generator.fetch_sql-901"><span class="linenos">901</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="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">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fetch_sql-902"><a href="#Generator.fetch_sql-902"><span class="linenos">902</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span>
-</span><span id="Generator.fetch_sql-903"><a href="#Generator.fetch_sql-903"><span class="linenos">903</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fetch_sql-904"><a href="#Generator.fetch_sql-904"><span class="linenos">904</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
-</span><span id="Generator.fetch_sql-905"><a href="#Generator.fetch_sql-905"><span class="linenos">905</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
-</span><span id="Generator.fetch_sql-906"><a href="#Generator.fetch_sql-906"><span class="linenos">906</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
-</span><span id="Generator.fetch_sql-907"><a href="#Generator.fetch_sql-907"><span class="linenos">907</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fetch_sql-945"><a href="#Generator.fetch_sql-945"><span class="linenos">945</span></a> <span class="k">def</span> <span class="nf">fetch_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.fetch_sql-946"><a href="#Generator.fetch_sql-946"><span class="linenos">946</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;direction&quot;</span><span class="p">)</span>
+</span><span id="Generator.fetch_sql-947"><a href="#Generator.fetch_sql-947"><span class="linenos">947</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="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">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fetch_sql-948"><a href="#Generator.fetch_sql-948"><span class="linenos">948</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span>
+</span><span id="Generator.fetch_sql-949"><a href="#Generator.fetch_sql-949"><span class="linenos">949</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fetch_sql-950"><a href="#Generator.fetch_sql-950"><span class="linenos">950</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
+</span><span id="Generator.fetch_sql-951"><a href="#Generator.fetch_sql-951"><span class="linenos">951</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="Generator.fetch_sql-952"><a href="#Generator.fetch_sql-952"><span class="linenos">952</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
+</span><span id="Generator.fetch_sql-953"><a href="#Generator.fetch_sql-953"><span class="linenos">953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8520,10 +8837,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.filter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.filter_sql-909"><a href="#Generator.filter_sql-909"><span class="linenos">909</span></a> <span class="k">def</span> <span class="nf">filter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.filter_sql-910"><a href="#Generator.filter_sql-910"><span class="linenos">910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.filter_sql-911"><a href="#Generator.filter_sql-911"><span class="linenos">911</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># where has a leading space</span>
-</span><span id="Generator.filter_sql-912"><a href="#Generator.filter_sql-912"><span class="linenos">912</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.filter_sql-955"><a href="#Generator.filter_sql-955"><span class="linenos">955</span></a> <span class="k">def</span> <span class="nf">filter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.filter_sql-956"><a href="#Generator.filter_sql-956"><span class="linenos">956</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.filter_sql-957"><a href="#Generator.filter_sql-957"><span class="linenos">957</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># where has a leading space</span>
+</span><span id="Generator.filter_sql-958"><a href="#Generator.filter_sql-958"><span class="linenos">958</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -8541,12 +8858,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.hint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hint_sql-914"><a href="#Generator.hint_sql-914"><span class="linenos">914</span></a> <span class="k">def</span> <span class="nf">hint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.hint_sql-915"><a href="#Generator.hint_sql-915"><span class="linenos">915</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
-</span><span id="Generator.hint_sql-916"><a href="#Generator.hint_sql-916"><span class="linenos">916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
-</span><span id="Generator.hint_sql-917"><a href="#Generator.hint_sql-917"><span class="linenos">917</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.hint_sql-918"><a href="#Generator.hint_sql-918"><span class="linenos">918</span></a>
-</span><span id="Generator.hint_sql-919"><a href="#Generator.hint_sql-919"><span class="linenos">919</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hint_sql-960"><a href="#Generator.hint_sql-960"><span class="linenos">960</span></a> <span class="k">def</span> <span class="nf">hint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.hint_sql-961"><a href="#Generator.hint_sql-961"><span class="linenos">961</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
+</span><span id="Generator.hint_sql-962"><a href="#Generator.hint_sql-962"><span class="linenos">962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
+</span><span id="Generator.hint_sql-963"><a href="#Generator.hint_sql-963"><span class="linenos">963</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.hint_sql-964"><a href="#Generator.hint_sql-964"><span class="linenos">964</span></a>
+</span><span id="Generator.hint_sql-965"><a href="#Generator.hint_sql-965"><span class="linenos">965</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
</span></pre></div>
@@ -8564,22 +8881,22 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.index_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.index_sql-921"><a href="#Generator.index_sql-921"><span class="linenos">921</span></a> <span class="k">def</span> <span class="nf">index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.index_sql-922"><a href="#Generator.index_sql-922"><span class="linenos">922</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-923"><a href="#Generator.index_sql-923"><span class="linenos">923</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-924"><a href="#Generator.index_sql-924"><span class="linenos">924</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-925"><a href="#Generator.index_sql-925"><span class="linenos">925</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.index_sql-926"><a href="#Generator.index_sql-926"><span class="linenos">926</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-927"><a href="#Generator.index_sql-927"><span class="linenos">927</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="Generator.index_sql-928"><a href="#Generator.index_sql-928"><span class="linenos">928</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-929"><a href="#Generator.index_sql-929"><span class="linenos">929</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.index_sql-930"><a href="#Generator.index_sql-930"><span class="linenos">930</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-931"><a href="#Generator.index_sql-931"><span class="linenos">931</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-932"><a href="#Generator.index_sql-932"><span class="linenos">932</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.index_sql-933"><a href="#Generator.index_sql-933"><span class="linenos">933</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-934"><a href="#Generator.index_sql-934"><span class="linenos">934</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.index_sql-935"><a href="#Generator.index_sql-935"><span class="linenos">935</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-936"><a href="#Generator.index_sql-936"><span class="linenos">936</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.index_sql-967"><a href="#Generator.index_sql-967"><span class="linenos">967</span></a> <span class="k">def</span> <span class="nf">index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.index_sql-968"><a href="#Generator.index_sql-968"><span class="linenos">968</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-969"><a href="#Generator.index_sql-969"><span class="linenos">969</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-970"><a href="#Generator.index_sql-970"><span class="linenos">970</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-971"><a href="#Generator.index_sql-971"><span class="linenos">971</span></a> <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.index_sql-972"><a href="#Generator.index_sql-972"><span class="linenos">972</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-973"><a href="#Generator.index_sql-973"><span class="linenos">973</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="Generator.index_sql-974"><a href="#Generator.index_sql-974"><span class="linenos">974</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-975"><a href="#Generator.index_sql-975"><span class="linenos">975</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.index_sql-976"><a href="#Generator.index_sql-976"><span class="linenos">976</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-977"><a href="#Generator.index_sql-977"><span class="linenos">977</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-978"><a href="#Generator.index_sql-978"><span class="linenos">978</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.index_sql-979"><a href="#Generator.index_sql-979"><span class="linenos">979</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-980"><a href="#Generator.index_sql-980"><span class="linenos">980</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.index_sql-981"><a href="#Generator.index_sql-981"><span class="linenos">981</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-982"><a href="#Generator.index_sql-982"><span class="linenos">982</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8597,19 +8914,19 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.identifier_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.identifier_sql-938"><a href="#Generator.identifier_sql-938"><span class="linenos">938</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.identifier_sql-939"><a href="#Generator.identifier_sql-939"><span class="linenos">939</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator.identifier_sql-940"><a href="#Generator.identifier_sql-940"><span class="linenos">940</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator.identifier_sql-941"><a href="#Generator.identifier_sql-941"><span class="linenos">941</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="Generator.identifier_sql-942"><a href="#Generator.identifier_sql-942"><span class="linenos">942</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">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
-</span><span id="Generator.identifier_sql-943"><a href="#Generator.identifier_sql-943"><span class="linenos">943</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Generator.identifier_sql-944"><a href="#Generator.identifier_sql-944"><span class="linenos">944</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Generator.identifier_sql-945"><a href="#Generator.identifier_sql-945"><span class="linenos">945</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
-</span><span id="Generator.identifier_sql-946"><a href="#Generator.identifier_sql-946"><span class="linenos">946</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
-</span><span id="Generator.identifier_sql-947"><a href="#Generator.identifier_sql-947"><span class="linenos">947</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
-</span><span id="Generator.identifier_sql-948"><a href="#Generator.identifier_sql-948"><span class="linenos">948</span></a> <span class="p">):</span>
-</span><span id="Generator.identifier_sql-949"><a href="#Generator.identifier_sql-949"><span class="linenos">949</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">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.identifier_sql-950"><a href="#Generator.identifier_sql-950"><span class="linenos">950</span></a> <span class="k">return</span> <span class="n">text</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.identifier_sql-984"><a href="#Generator.identifier_sql-984"><span class="linenos">984</span></a> <span class="k">def</span> <span class="nf">identifier_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.identifier_sql-985"><a href="#Generator.identifier_sql-985"><span class="linenos">985</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator.identifier_sql-986"><a href="#Generator.identifier_sql-986"><span class="linenos">986</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator.identifier_sql-987"><a href="#Generator.identifier_sql-987"><span class="linenos">987</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="Generator.identifier_sql-988"><a href="#Generator.identifier_sql-988"><span class="linenos">988</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">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
+</span><span id="Generator.identifier_sql-989"><a href="#Generator.identifier_sql-989"><span class="linenos">989</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Generator.identifier_sql-990"><a href="#Generator.identifier_sql-990"><span class="linenos">990</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Generator.identifier_sql-991"><a href="#Generator.identifier_sql-991"><span class="linenos">991</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
+</span><span id="Generator.identifier_sql-992"><a href="#Generator.identifier_sql-992"><span class="linenos">992</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
+</span><span id="Generator.identifier_sql-993"><a href="#Generator.identifier_sql-993"><span class="linenos">993</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
+</span><span id="Generator.identifier_sql-994"><a href="#Generator.identifier_sql-994"><span class="linenos">994</span></a> <span class="p">):</span>
+</span><span id="Generator.identifier_sql-995"><a href="#Generator.identifier_sql-995"><span class="linenos">995</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">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.identifier_sql-996"><a href="#Generator.identifier_sql-996"><span class="linenos">996</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -8627,12 +8944,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.inputoutputformat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.inputoutputformat_sql-952"><a href="#Generator.inputoutputformat_sql-952"><span class="linenos">952</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.inputoutputformat_sql-953"><a href="#Generator.inputoutputformat_sql-953"><span class="linenos">953</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;input_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.inputoutputformat_sql-954"><a href="#Generator.inputoutputformat_sql-954"><span class="linenos">954</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.inputoutputformat_sql-955"><a href="#Generator.inputoutputformat_sql-955"><span class="linenos">955</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.inputoutputformat_sql-956"><a href="#Generator.inputoutputformat_sql-956"><span class="linenos">956</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.inputoutputformat_sql-957"><a href="#Generator.inputoutputformat_sql-957"><span class="linenos">957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.inputoutputformat_sql-998"><a href="#Generator.inputoutputformat_sql-998"><span class="linenos"> 998</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.inputoutputformat_sql-999"><a href="#Generator.inputoutputformat_sql-999"><span class="linenos"> 999</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;input_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.inputoutputformat_sql-1000"><a href="#Generator.inputoutputformat_sql-1000"><span class="linenos">1000</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.inputoutputformat_sql-1001"><a href="#Generator.inputoutputformat_sql-1001"><span class="linenos">1001</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.inputoutputformat_sql-1002"><a href="#Generator.inputoutputformat_sql-1002"><span class="linenos">1002</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.inputoutputformat_sql-1003"><a href="#Generator.inputoutputformat_sql-1003"><span class="linenos">1003</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
</span></pre></div>
@@ -8650,9 +8967,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.national_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.national_sql-959"><a href="#Generator.national_sql-959"><span class="linenos">959</span></a> <span class="k">def</span> <span class="nf">national_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.national_sql-960"><a href="#Generator.national_sql-960"><span class="linenos">960</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Generator.national_sql-961"><a href="#Generator.national_sql-961"><span class="linenos">961</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.national_sql-1005"><a href="#Generator.national_sql-1005"><span class="linenos">1005</span></a> <span class="k">def</span> <span class="nf">national_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.national_sql-1006"><a href="#Generator.national_sql-1006"><span class="linenos">1006</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Generator.national_sql-1007"><a href="#Generator.national_sql-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8670,8 +8987,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.partition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partition_sql-963"><a href="#Generator.partition_sql-963"><span class="linenos">963</span></a> <span class="k">def</span> <span class="nf">partition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.partition_sql-964"><a href="#Generator.partition_sql-964"><span class="linenos">964</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partition_sql-1009"><a href="#Generator.partition_sql-1009"><span class="linenos">1009</span></a> <span class="k">def</span> <span class="nf">partition_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.partition_sql-1010"><a href="#Generator.partition_sql-1010"><span class="linenos">1010</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -8689,20 +9006,20 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.properties_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties_sql-966"><a href="#Generator.properties_sql-966"><span class="linenos">966</span></a> <span class="k">def</span> <span class="nf">properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-967"><a href="#Generator.properties_sql-967"><span class="linenos">967</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.properties_sql-968"><a href="#Generator.properties_sql-968"><span class="linenos">968</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.properties_sql-969"><a href="#Generator.properties_sql-969"><span class="linenos">969</span></a>
-</span><span id="Generator.properties_sql-970"><a href="#Generator.properties_sql-970"><span class="linenos">970</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-971"><a href="#Generator.properties_sql-971"><span class="linenos">971</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator.properties_sql-972"><a href="#Generator.properties_sql-972"><span class="linenos">972</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-973"><a href="#Generator.properties_sql-973"><span class="linenos">973</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="Generator.properties_sql-974"><a href="#Generator.properties_sql-974"><span class="linenos">974</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-975"><a href="#Generator.properties_sql-975"><span class="linenos">975</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="Generator.properties_sql-976"><a href="#Generator.properties_sql-976"><span class="linenos">976</span></a>
-</span><span id="Generator.properties_sql-977"><a href="#Generator.properties_sql-977"><span class="linenos">977</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
-</span><span id="Generator.properties_sql-978"><a href="#Generator.properties_sql-978"><span class="linenos">978</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
-</span><span id="Generator.properties_sql-979"><a href="#Generator.properties_sql-979"><span class="linenos">979</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties_sql-1012"><a href="#Generator.properties_sql-1012"><span class="linenos">1012</span></a> <span class="k">def</span> <span class="nf">properties_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1013"><a href="#Generator.properties_sql-1013"><span class="linenos">1013</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.properties_sql-1014"><a href="#Generator.properties_sql-1014"><span class="linenos">1014</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.properties_sql-1015"><a href="#Generator.properties_sql-1015"><span class="linenos">1015</span></a>
+</span><span id="Generator.properties_sql-1016"><a href="#Generator.properties_sql-1016"><span class="linenos">1016</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1017"><a href="#Generator.properties_sql-1017"><span class="linenos">1017</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator.properties_sql-1018"><a href="#Generator.properties_sql-1018"><span class="linenos">1018</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1019"><a href="#Generator.properties_sql-1019"><span class="linenos">1019</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="Generator.properties_sql-1020"><a href="#Generator.properties_sql-1020"><span class="linenos">1020</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1021"><a href="#Generator.properties_sql-1021"><span class="linenos">1021</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="Generator.properties_sql-1022"><a href="#Generator.properties_sql-1022"><span class="linenos">1022</span></a>
+</span><span id="Generator.properties_sql-1023"><a href="#Generator.properties_sql-1023"><span class="linenos">1023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
+</span><span id="Generator.properties_sql-1024"><a href="#Generator.properties_sql-1024"><span class="linenos">1024</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
+</span><span id="Generator.properties_sql-1025"><a href="#Generator.properties_sql-1025"><span class="linenos">1025</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
</span></pre></div>
@@ -8720,10 +9037,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.root_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.root_properties-981"><a href="#Generator.root_properties-981"><span class="linenos">981</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.root_properties-982"><a href="#Generator.root_properties-982"><span class="linenos">982</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.root_properties-983"><a href="#Generator.root_properties-983"><span class="linenos">983</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.root_properties-984"><a href="#Generator.root_properties-984"><span class="linenos">984</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.root_properties-1027"><a href="#Generator.root_properties-1027"><span class="linenos">1027</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.root_properties-1028"><a href="#Generator.root_properties-1028"><span class="linenos">1028</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.root_properties-1029"><a href="#Generator.root_properties-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.root_properties-1030"><a href="#Generator.root_properties-1030"><span class="linenos">1030</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -8741,20 +9058,20 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties-986"><a href="#Generator.properties-986"><span class="linenos">986</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
-</span><span id="Generator.properties-987"><a href="#Generator.properties-987"><span class="linenos">987</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.properties-988"><a href="#Generator.properties-988"><span class="linenos">988</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
-</span><span id="Generator.properties-989"><a href="#Generator.properties-989"><span class="linenos">989</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.properties-990"><a href="#Generator.properties-990"><span class="linenos">990</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="Generator.properties-991"><a href="#Generator.properties-991"><span class="linenos">991</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.properties-992"><a href="#Generator.properties-992"><span class="linenos">992</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.properties-993"><a href="#Generator.properties-993"><span class="linenos">993</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.properties-994"><a href="#Generator.properties-994"><span class="linenos">994</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.properties-995"><a href="#Generator.properties-995"><span class="linenos">995</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.properties-996"><a href="#Generator.properties-996"><span class="linenos">996</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.properties-997"><a href="#Generator.properties-997"><span class="linenos">997</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="Generator.properties-998"><a href="#Generator.properties-998"><span class="linenos">998</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.properties-999"><a href="#Generator.properties-999"><span class="linenos">999</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties-1032"><a href="#Generator.properties-1032"><span class="linenos">1032</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
+</span><span id="Generator.properties-1033"><a href="#Generator.properties-1033"><span class="linenos">1033</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.properties-1034"><a href="#Generator.properties-1034"><span class="linenos">1034</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
+</span><span id="Generator.properties-1035"><a href="#Generator.properties-1035"><span class="linenos">1035</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.properties-1036"><a href="#Generator.properties-1036"><span class="linenos">1036</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="Generator.properties-1037"><a href="#Generator.properties-1037"><span class="linenos">1037</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.properties-1038"><a href="#Generator.properties-1038"><span class="linenos">1038</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.properties-1039"><a href="#Generator.properties-1039"><span class="linenos">1039</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.properties-1040"><a href="#Generator.properties-1040"><span class="linenos">1040</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.properties-1041"><a href="#Generator.properties-1041"><span class="linenos">1041</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.properties-1042"><a href="#Generator.properties-1042"><span class="linenos">1042</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.properties-1043"><a href="#Generator.properties-1043"><span class="linenos">1043</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="Generator.properties-1044"><a href="#Generator.properties-1044"><span class="linenos">1044</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.properties-1045"><a href="#Generator.properties-1045"><span class="linenos">1045</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -8772,8 +9089,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.with_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_properties-1001"><a href="#Generator.with_properties-1001"><span class="linenos">1001</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.with_properties-1002"><a href="#Generator.with_properties-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_properties-1047"><a href="#Generator.with_properties-1047"><span class="linenos">1047</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.with_properties-1048"><a href="#Generator.with_properties-1048"><span class="linenos">1048</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -8791,16 +9108,16 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.locate_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.locate_properties-1004"><a href="#Generator.locate_properties-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1005"><a href="#Generator.locate_properties-1005"><span class="linenos">1005</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
-</span><span id="Generator.locate_properties-1006"><a href="#Generator.locate_properties-1006"><span class="linenos">1006</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1007"><a href="#Generator.locate_properties-1007"><span class="linenos">1007</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator.locate_properties-1008"><a href="#Generator.locate_properties-1008"><span class="linenos">1008</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1009"><a href="#Generator.locate_properties-1009"><span class="linenos">1009</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="Generator.locate_properties-1010"><a href="#Generator.locate_properties-1010"><span class="linenos">1010</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1011"><a href="#Generator.locate_properties-1011"><span class="linenos">1011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.locate_properties-1012"><a href="#Generator.locate_properties-1012"><span class="linenos">1012</span></a>
-</span><span id="Generator.locate_properties-1013"><a href="#Generator.locate_properties-1013"><span class="linenos">1013</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.locate_properties-1050"><a href="#Generator.locate_properties-1050"><span class="linenos">1050</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1051"><a href="#Generator.locate_properties-1051"><span class="linenos">1051</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Generator.locate_properties-1052"><a href="#Generator.locate_properties-1052"><span class="linenos">1052</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1053"><a href="#Generator.locate_properties-1053"><span class="linenos">1053</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator.locate_properties-1054"><a href="#Generator.locate_properties-1054"><span class="linenos">1054</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1055"><a href="#Generator.locate_properties-1055"><span class="linenos">1055</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="Generator.locate_properties-1056"><a href="#Generator.locate_properties-1056"><span class="linenos">1056</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1057"><a href="#Generator.locate_properties-1057"><span class="linenos">1057</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.locate_properties-1058"><a href="#Generator.locate_properties-1058"><span class="linenos">1058</span></a>
+</span><span id="Generator.locate_properties-1059"><a href="#Generator.locate_properties-1059"><span class="linenos">1059</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
</span></pre></div>
@@ -8818,16 +9135,16 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.property_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.property_sql-1015"><a href="#Generator.property_sql-1015"><span class="linenos">1015</span></a> <span class="k">def</span> <span class="nf">property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.property_sql-1016"><a href="#Generator.property_sql-1016"><span class="linenos">1016</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="Generator.property_sql-1017"><a href="#Generator.property_sql-1017"><span class="linenos">1017</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
-</span><span id="Generator.property_sql-1018"><a href="#Generator.property_sql-1018"><span class="linenos">1018</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">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.property_sql-1019"><a href="#Generator.property_sql-1019"><span class="linenos">1019</span></a>
-</span><span id="Generator.property_sql-1020"><a href="#Generator.property_sql-1020"><span class="linenos">1020</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
-</span><span id="Generator.property_sql-1021"><a href="#Generator.property_sql-1021"><span class="linenos">1021</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="Generator.property_sql-1022"><a href="#Generator.property_sql-1022"><span class="linenos">1022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.property_sql-1023"><a href="#Generator.property_sql-1023"><span class="linenos">1023</span></a>
-</span><span id="Generator.property_sql-1024"><a href="#Generator.property_sql-1024"><span class="linenos">1024</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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.property_sql-1061"><a href="#Generator.property_sql-1061"><span class="linenos">1061</span></a> <span class="k">def</span> <span class="nf">property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.property_sql-1062"><a href="#Generator.property_sql-1062"><span class="linenos">1062</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="Generator.property_sql-1063"><a href="#Generator.property_sql-1063"><span class="linenos">1063</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
+</span><span id="Generator.property_sql-1064"><a href="#Generator.property_sql-1064"><span class="linenos">1064</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">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.property_sql-1065"><a href="#Generator.property_sql-1065"><span class="linenos">1065</span></a>
+</span><span id="Generator.property_sql-1066"><a href="#Generator.property_sql-1066"><span class="linenos">1066</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
+</span><span id="Generator.property_sql-1067"><a href="#Generator.property_sql-1067"><span class="linenos">1067</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="Generator.property_sql-1068"><a href="#Generator.property_sql-1068"><span class="linenos">1068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.property_sql-1069"><a href="#Generator.property_sql-1069"><span class="linenos">1069</span></a>
+</span><span id="Generator.property_sql-1070"><a href="#Generator.property_sql-1070"><span class="linenos">1070</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>
@@ -8845,10 +9162,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.likeproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeproperty_sql-1026"><a href="#Generator.likeproperty_sql-1026"><span class="linenos">1026</span></a> <span class="k">def</span> <span class="nf">likeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.likeproperty_sql-1027"><a href="#Generator.likeproperty_sql-1027"><span class="linenos">1027</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.likeproperty_sql-1028"><a href="#Generator.likeproperty_sql-1028"><span class="linenos">1028</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.likeproperty_sql-1029"><a href="#Generator.likeproperty_sql-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LIKE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeproperty_sql-1072"><a href="#Generator.likeproperty_sql-1072"><span class="linenos">1072</span></a> <span class="k">def</span> <span class="nf">likeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.likeproperty_sql-1073"><a href="#Generator.likeproperty_sql-1073"><span class="linenos">1073</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.likeproperty_sql-1074"><a href="#Generator.likeproperty_sql-1074"><span class="linenos">1074</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.likeproperty_sql-1075"><a href="#Generator.likeproperty_sql-1075"><span class="linenos">1075</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LIKE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8866,10 +9183,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.fallbackproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fallbackproperty_sql-1031"><a href="#Generator.fallbackproperty_sql-1031"><span class="linenos">1031</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.fallbackproperty_sql-1032"><a href="#Generator.fallbackproperty_sql-1032"><span class="linenos">1032</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fallbackproperty_sql-1033"><a href="#Generator.fallbackproperty_sql-1033"><span class="linenos">1033</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fallbackproperty_sql-1034"><a href="#Generator.fallbackproperty_sql-1034"><span class="linenos">1034</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fallbackproperty_sql-1077"><a href="#Generator.fallbackproperty_sql-1077"><span class="linenos">1077</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.fallbackproperty_sql-1078"><a href="#Generator.fallbackproperty_sql-1078"><span class="linenos">1078</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fallbackproperty_sql-1079"><a href="#Generator.fallbackproperty_sql-1079"><span class="linenos">1079</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fallbackproperty_sql-1080"><a href="#Generator.fallbackproperty_sql-1080"><span class="linenos">1080</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8887,14 +9204,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.journalproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.journalproperty_sql-1036"><a href="#Generator.journalproperty_sql-1036"><span class="linenos">1036</span></a> <span class="k">def</span> <span class="nf">journalproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.journalproperty_sql-1037"><a href="#Generator.journalproperty_sql-1037"><span class="linenos">1037</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1038"><a href="#Generator.journalproperty_sql-1038"><span class="linenos">1038</span></a> <span class="n">local</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span>
-</span><span id="Generator.journalproperty_sql-1039"><a href="#Generator.journalproperty_sql-1039"><span class="linenos">1039</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1040"><a href="#Generator.journalproperty_sql-1040"><span class="linenos">1040</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1041"><a href="#Generator.journalproperty_sql-1041"><span class="linenos">1041</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1042"><a href="#Generator.journalproperty_sql-1042"><span class="linenos">1042</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1043"><a href="#Generator.journalproperty_sql-1043"><span class="linenos">1043</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.journalproperty_sql-1082"><a href="#Generator.journalproperty_sql-1082"><span class="linenos">1082</span></a> <span class="k">def</span> <span class="nf">journalproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.journalproperty_sql-1083"><a href="#Generator.journalproperty_sql-1083"><span class="linenos">1083</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1084"><a href="#Generator.journalproperty_sql-1084"><span class="linenos">1084</span></a> <span class="n">local</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span>
+</span><span id="Generator.journalproperty_sql-1085"><a href="#Generator.journalproperty_sql-1085"><span class="linenos">1085</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1086"><a href="#Generator.journalproperty_sql-1086"><span class="linenos">1086</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1087"><a href="#Generator.journalproperty_sql-1087"><span class="linenos">1087</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1088"><a href="#Generator.journalproperty_sql-1088"><span class="linenos">1088</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1089"><a href="#Generator.journalproperty_sql-1089"><span class="linenos">1089</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
</span></pre></div>
@@ -8912,10 +9229,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.freespaceproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.freespaceproperty_sql-1045"><a href="#Generator.freespaceproperty_sql-1045"><span class="linenos">1045</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.freespaceproperty_sql-1046"><a href="#Generator.freespaceproperty_sql-1046"><span class="linenos">1046</span></a> <span class="n">freespace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.freespaceproperty_sql-1047"><a href="#Generator.freespaceproperty_sql-1047"><span class="linenos">1047</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.freespaceproperty_sql-1048"><a href="#Generator.freespaceproperty_sql-1048"><span class="linenos">1048</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.freespaceproperty_sql-1091"><a href="#Generator.freespaceproperty_sql-1091"><span class="linenos">1091</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.freespaceproperty_sql-1092"><a href="#Generator.freespaceproperty_sql-1092"><span class="linenos">1092</span></a> <span class="n">freespace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.freespaceproperty_sql-1093"><a href="#Generator.freespaceproperty_sql-1093"><span class="linenos">1093</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.freespaceproperty_sql-1094"><a href="#Generator.freespaceproperty_sql-1094"><span class="linenos">1094</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8933,14 +9250,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.checksumproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.checksumproperty_sql-1050"><a href="#Generator.checksumproperty_sql-1050"><span class="linenos">1050</span></a> <span class="k">def</span> <span class="nf">checksumproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.checksumproperty_sql-1051"><a href="#Generator.checksumproperty_sql-1051"><span class="linenos">1051</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator.checksumproperty_sql-1052"><a href="#Generator.checksumproperty_sql-1052"><span class="linenos">1052</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator.checksumproperty_sql-1053"><a href="#Generator.checksumproperty_sql-1053"><span class="linenos">1053</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
-</span><span id="Generator.checksumproperty_sql-1054"><a href="#Generator.checksumproperty_sql-1054"><span class="linenos">1054</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
-</span><span id="Generator.checksumproperty_sql-1055"><a href="#Generator.checksumproperty_sql-1055"><span class="linenos">1055</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.checksumproperty_sql-1056"><a href="#Generator.checksumproperty_sql-1056"><span class="linenos">1056</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
-</span><span id="Generator.checksumproperty_sql-1057"><a href="#Generator.checksumproperty_sql-1057"><span class="linenos">1057</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.checksumproperty_sql-1096"><a href="#Generator.checksumproperty_sql-1096"><span class="linenos">1096</span></a> <span class="k">def</span> <span class="nf">checksumproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.checksumproperty_sql-1097"><a href="#Generator.checksumproperty_sql-1097"><span class="linenos">1097</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator.checksumproperty_sql-1098"><a href="#Generator.checksumproperty_sql-1098"><span class="linenos">1098</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator.checksumproperty_sql-1099"><a href="#Generator.checksumproperty_sql-1099"><span class="linenos">1099</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
+</span><span id="Generator.checksumproperty_sql-1100"><a href="#Generator.checksumproperty_sql-1100"><span class="linenos">1100</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="Generator.checksumproperty_sql-1101"><a href="#Generator.checksumproperty_sql-1101"><span class="linenos">1101</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.checksumproperty_sql-1102"><a href="#Generator.checksumproperty_sql-1102"><span class="linenos">1102</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
+</span><span id="Generator.checksumproperty_sql-1103"><a href="#Generator.checksumproperty_sql-1103"><span class="linenos">1103</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8958,14 +9275,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.mergeblockratioproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergeblockratioproperty_sql-1059"><a href="#Generator.mergeblockratioproperty_sql-1059"><span class="linenos">1059</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1060"><a href="#Generator.mergeblockratioproperty_sql-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1061"><a href="#Generator.mergeblockratioproperty_sql-1061"><span class="linenos">1061</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1062"><a href="#Generator.mergeblockratioproperty_sql-1062"><span class="linenos">1062</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1063"><a href="#Generator.mergeblockratioproperty_sql-1063"><span class="linenos">1063</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1064"><a href="#Generator.mergeblockratioproperty_sql-1064"><span class="linenos">1064</span></a>
-</span><span id="Generator.mergeblockratioproperty_sql-1065"><a href="#Generator.mergeblockratioproperty_sql-1065"><span class="linenos">1065</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1066"><a href="#Generator.mergeblockratioproperty_sql-1066"><span class="linenos">1066</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergeblockratioproperty_sql-1105"><a href="#Generator.mergeblockratioproperty_sql-1105"><span class="linenos">1105</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1106"><a href="#Generator.mergeblockratioproperty_sql-1106"><span class="linenos">1106</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1107"><a href="#Generator.mergeblockratioproperty_sql-1107"><span class="linenos">1107</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1108"><a href="#Generator.mergeblockratioproperty_sql-1108"><span class="linenos">1108</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1109"><a href="#Generator.mergeblockratioproperty_sql-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1110"><a href="#Generator.mergeblockratioproperty_sql-1110"><span class="linenos">1110</span></a>
+</span><span id="Generator.mergeblockratioproperty_sql-1111"><a href="#Generator.mergeblockratioproperty_sql-1111"><span class="linenos">1111</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1112"><a href="#Generator.mergeblockratioproperty_sql-1112"><span class="linenos">1112</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8983,21 +9300,21 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.datablocksizeproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datablocksizeproperty_sql-1068"><a href="#Generator.datablocksizeproperty_sql-1068"><span class="linenos">1068</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1069"><a href="#Generator.datablocksizeproperty_sql-1069"><span class="linenos">1069</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1070"><a href="#Generator.datablocksizeproperty_sql-1070"><span class="linenos">1070</span></a> <span class="n">minimum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minimum&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1071"><a href="#Generator.datablocksizeproperty_sql-1071"><span class="linenos">1071</span></a> <span class="n">maximum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maximum&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1072"><a href="#Generator.datablocksizeproperty_sql-1072"><span class="linenos">1072</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1073"><a href="#Generator.datablocksizeproperty_sql-1073"><span class="linenos">1073</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1074"><a href="#Generator.datablocksizeproperty_sql-1074"><span class="linenos">1074</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1075"><a href="#Generator.datablocksizeproperty_sql-1075"><span class="linenos">1075</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1076"><a href="#Generator.datablocksizeproperty_sql-1076"><span class="linenos">1076</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1077"><a href="#Generator.datablocksizeproperty_sql-1077"><span class="linenos">1077</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1078"><a href="#Generator.datablocksizeproperty_sql-1078"><span class="linenos">1078</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1079"><a href="#Generator.datablocksizeproperty_sql-1079"><span class="linenos">1079</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1080"><a href="#Generator.datablocksizeproperty_sql-1080"><span class="linenos">1080</span></a> <span class="n">units</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;units&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1081"><a href="#Generator.datablocksizeproperty_sql-1081"><span class="linenos">1081</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1082"><a href="#Generator.datablocksizeproperty_sql-1082"><span class="linenos">1082</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datablocksizeproperty_sql-1114"><a href="#Generator.datablocksizeproperty_sql-1114"><span class="linenos">1114</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1115"><a href="#Generator.datablocksizeproperty_sql-1115"><span class="linenos">1115</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1116"><a href="#Generator.datablocksizeproperty_sql-1116"><span class="linenos">1116</span></a> <span class="n">minimum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;minimum&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1117"><a href="#Generator.datablocksizeproperty_sql-1117"><span class="linenos">1117</span></a> <span class="n">maximum</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;maximum&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1118"><a href="#Generator.datablocksizeproperty_sql-1118"><span class="linenos">1118</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1119"><a href="#Generator.datablocksizeproperty_sql-1119"><span class="linenos">1119</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1120"><a href="#Generator.datablocksizeproperty_sql-1120"><span class="linenos">1120</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1121"><a href="#Generator.datablocksizeproperty_sql-1121"><span class="linenos">1121</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1122"><a href="#Generator.datablocksizeproperty_sql-1122"><span class="linenos">1122</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1123"><a href="#Generator.datablocksizeproperty_sql-1123"><span class="linenos">1123</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1124"><a href="#Generator.datablocksizeproperty_sql-1124"><span class="linenos">1124</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1125"><a href="#Generator.datablocksizeproperty_sql-1125"><span class="linenos">1125</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1126"><a href="#Generator.datablocksizeproperty_sql-1126"><span class="linenos">1126</span></a> <span class="n">units</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;units&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1127"><a href="#Generator.datablocksizeproperty_sql-1127"><span class="linenos">1127</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1128"><a href="#Generator.datablocksizeproperty_sql-1128"><span class="linenos">1128</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9015,24 +9332,24 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.blockcompressionproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.blockcompressionproperty_sql-1084"><a href="#Generator.blockcompressionproperty_sql-1084"><span class="linenos">1084</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1085"><a href="#Generator.blockcompressionproperty_sql-1085"><span class="linenos">1085</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;autotemp&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1086"><a href="#Generator.blockcompressionproperty_sql-1086"><span class="linenos">1086</span></a> <span class="n">always</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;always&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1087"><a href="#Generator.blockcompressionproperty_sql-1087"><span class="linenos">1087</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1088"><a href="#Generator.blockcompressionproperty_sql-1088"><span class="linenos">1088</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;manual&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1089"><a href="#Generator.blockcompressionproperty_sql-1089"><span class="linenos">1089</span></a> <span class="n">never</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;never&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1090"><a href="#Generator.blockcompressionproperty_sql-1090"><span class="linenos">1090</span></a>
-</span><span id="Generator.blockcompressionproperty_sql-1091"><a href="#Generator.blockcompressionproperty_sql-1091"><span class="linenos">1091</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1092"><a href="#Generator.blockcompressionproperty_sql-1092"><span class="linenos">1092</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1093"><a href="#Generator.blockcompressionproperty_sql-1093"><span class="linenos">1093</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1094"><a href="#Generator.blockcompressionproperty_sql-1094"><span class="linenos">1094</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1095"><a href="#Generator.blockcompressionproperty_sql-1095"><span class="linenos">1095</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1096"><a href="#Generator.blockcompressionproperty_sql-1096"><span class="linenos">1096</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1097"><a href="#Generator.blockcompressionproperty_sql-1097"><span class="linenos">1097</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1098"><a href="#Generator.blockcompressionproperty_sql-1098"><span class="linenos">1098</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1099"><a href="#Generator.blockcompressionproperty_sql-1099"><span class="linenos">1099</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1100"><a href="#Generator.blockcompressionproperty_sql-1100"><span class="linenos">1100</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1101"><a href="#Generator.blockcompressionproperty_sql-1101"><span class="linenos">1101</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.blockcompressionproperty_sql-1130"><a href="#Generator.blockcompressionproperty_sql-1130"><span class="linenos">1130</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1131"><a href="#Generator.blockcompressionproperty_sql-1131"><span class="linenos">1131</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;autotemp&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1132"><a href="#Generator.blockcompressionproperty_sql-1132"><span class="linenos">1132</span></a> <span class="n">always</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;always&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1133"><a href="#Generator.blockcompressionproperty_sql-1133"><span class="linenos">1133</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1134"><a href="#Generator.blockcompressionproperty_sql-1134"><span class="linenos">1134</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;manual&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1135"><a href="#Generator.blockcompressionproperty_sql-1135"><span class="linenos">1135</span></a> <span class="n">never</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;never&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1136"><a href="#Generator.blockcompressionproperty_sql-1136"><span class="linenos">1136</span></a>
+</span><span id="Generator.blockcompressionproperty_sql-1137"><a href="#Generator.blockcompressionproperty_sql-1137"><span class="linenos">1137</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1138"><a href="#Generator.blockcompressionproperty_sql-1138"><span class="linenos">1138</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1139"><a href="#Generator.blockcompressionproperty_sql-1139"><span class="linenos">1139</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1140"><a href="#Generator.blockcompressionproperty_sql-1140"><span class="linenos">1140</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1141"><a href="#Generator.blockcompressionproperty_sql-1141"><span class="linenos">1141</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1142"><a href="#Generator.blockcompressionproperty_sql-1142"><span class="linenos">1142</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1143"><a href="#Generator.blockcompressionproperty_sql-1143"><span class="linenos">1143</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1144"><a href="#Generator.blockcompressionproperty_sql-1144"><span class="linenos">1144</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1145"><a href="#Generator.blockcompressionproperty_sql-1145"><span class="linenos">1145</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1146"><a href="#Generator.blockcompressionproperty_sql-1146"><span class="linenos">1146</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1147"><a href="#Generator.blockcompressionproperty_sql-1147"><span class="linenos">1147</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9050,20 +9367,20 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.isolatedloadingproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.isolatedloadingproperty_sql-1103"><a href="#Generator.isolatedloadingproperty_sql-1103"><span class="linenos">1103</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1104"><a href="#Generator.isolatedloadingproperty_sql-1104"><span class="linenos">1104</span></a> <span class="n">no</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1105"><a href="#Generator.isolatedloadingproperty_sql-1105"><span class="linenos">1105</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1106"><a href="#Generator.isolatedloadingproperty_sql-1106"><span class="linenos">1106</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;concurrent&quot;</span><span class="p">)</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1107"><a href="#Generator.isolatedloadingproperty_sql-1107"><span class="linenos">1107</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1108"><a href="#Generator.isolatedloadingproperty_sql-1108"><span class="linenos">1108</span></a>
-</span><span id="Generator.isolatedloadingproperty_sql-1109"><a href="#Generator.isolatedloadingproperty_sql-1109"><span class="linenos">1109</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1110"><a href="#Generator.isolatedloadingproperty_sql-1110"><span class="linenos">1110</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1111"><a href="#Generator.isolatedloadingproperty_sql-1111"><span class="linenos">1111</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1112"><a href="#Generator.isolatedloadingproperty_sql-1112"><span class="linenos">1112</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_insert&quot;</span><span class="p">):</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1113"><a href="#Generator.isolatedloadingproperty_sql-1113"><span class="linenos">1113</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1114"><a href="#Generator.isolatedloadingproperty_sql-1114"><span class="linenos">1114</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_none&quot;</span><span class="p">):</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1115"><a href="#Generator.isolatedloadingproperty_sql-1115"><span class="linenos">1115</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1116"><a href="#Generator.isolatedloadingproperty_sql-1116"><span class="linenos">1116</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.isolatedloadingproperty_sql-1149"><a href="#Generator.isolatedloadingproperty_sql-1149"><span class="linenos">1149</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1150"><a href="#Generator.isolatedloadingproperty_sql-1150"><span class="linenos">1150</span></a> <span class="n">no</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1151"><a href="#Generator.isolatedloadingproperty_sql-1151"><span class="linenos">1151</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1152"><a href="#Generator.isolatedloadingproperty_sql-1152"><span class="linenos">1152</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;concurrent&quot;</span><span class="p">)</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1153"><a href="#Generator.isolatedloadingproperty_sql-1153"><span class="linenos">1153</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1154"><a href="#Generator.isolatedloadingproperty_sql-1154"><span class="linenos">1154</span></a>
+</span><span id="Generator.isolatedloadingproperty_sql-1155"><a href="#Generator.isolatedloadingproperty_sql-1155"><span class="linenos">1155</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1156"><a href="#Generator.isolatedloadingproperty_sql-1156"><span class="linenos">1156</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1157"><a href="#Generator.isolatedloadingproperty_sql-1157"><span class="linenos">1157</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1158"><a href="#Generator.isolatedloadingproperty_sql-1158"><span class="linenos">1158</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_insert&quot;</span><span class="p">):</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1159"><a href="#Generator.isolatedloadingproperty_sql-1159"><span class="linenos">1159</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1160"><a href="#Generator.isolatedloadingproperty_sql-1160"><span class="linenos">1160</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_none&quot;</span><span class="p">):</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1161"><a href="#Generator.isolatedloadingproperty_sql-1161"><span class="linenos">1161</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1162"><a href="#Generator.isolatedloadingproperty_sql-1162"><span class="linenos">1162</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9081,13 +9398,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.lockingproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lockingproperty_sql-1118"><a href="#Generator.lockingproperty_sql-1118"><span class="linenos">1118</span></a> <span class="k">def</span> <span class="nf">lockingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lockingproperty_sql-1119"><a href="#Generator.lockingproperty_sql-1119"><span class="linenos">1119</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.lockingproperty_sql-1120"><a href="#Generator.lockingproperty_sql-1120"><span class="linenos">1120</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lockingproperty_sql-1121"><a href="#Generator.lockingproperty_sql-1121"><span class="linenos">1121</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_or_in&quot;</span><span class="p">)</span>
-</span><span id="Generator.lockingproperty_sql-1122"><a href="#Generator.lockingproperty_sql-1122"><span class="linenos">1122</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lock_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.lockingproperty_sql-1123"><a href="#Generator.lockingproperty_sql-1123"><span class="linenos">1123</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lockingproperty_sql-1124"><a href="#Generator.lockingproperty_sql-1124"><span class="linenos">1124</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lockingproperty_sql-1164"><a href="#Generator.lockingproperty_sql-1164"><span class="linenos">1164</span></a> <span class="k">def</span> <span class="nf">lockingproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lockingproperty_sql-1165"><a href="#Generator.lockingproperty_sql-1165"><span class="linenos">1165</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.lockingproperty_sql-1166"><a href="#Generator.lockingproperty_sql-1166"><span class="linenos">1166</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lockingproperty_sql-1167"><a href="#Generator.lockingproperty_sql-1167"><span class="linenos">1167</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_or_in&quot;</span><span class="p">)</span>
+</span><span id="Generator.lockingproperty_sql-1168"><a href="#Generator.lockingproperty_sql-1168"><span class="linenos">1168</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lock_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.lockingproperty_sql-1169"><a href="#Generator.lockingproperty_sql-1169"><span class="linenos">1169</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lockingproperty_sql-1170"><a href="#Generator.lockingproperty_sql-1170"><span class="linenos">1170</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9105,13 +9422,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.withdataproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withdataproperty_sql-1126"><a href="#Generator.withdataproperty_sql-1126"><span class="linenos">1126</span></a> <span class="k">def</span> <span class="nf">withdataproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withdataproperty_sql-1127"><a href="#Generator.withdataproperty_sql-1127"><span class="linenos">1127</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
-</span><span id="Generator.withdataproperty_sql-1128"><a href="#Generator.withdataproperty_sql-1128"><span class="linenos">1128</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;statistics&quot;</span><span class="p">)</span>
-</span><span id="Generator.withdataproperty_sql-1129"><a href="#Generator.withdataproperty_sql-1129"><span class="linenos">1129</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.withdataproperty_sql-1130"><a href="#Generator.withdataproperty_sql-1130"><span class="linenos">1130</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.withdataproperty_sql-1131"><a href="#Generator.withdataproperty_sql-1131"><span class="linenos">1131</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
-</span><span id="Generator.withdataproperty_sql-1132"><a href="#Generator.withdataproperty_sql-1132"><span class="linenos">1132</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withdataproperty_sql-1172"><a href="#Generator.withdataproperty_sql-1172"><span class="linenos">1172</span></a> <span class="k">def</span> <span class="nf">withdataproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withdataproperty_sql-1173"><a href="#Generator.withdataproperty_sql-1173"><span class="linenos">1173</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
+</span><span id="Generator.withdataproperty_sql-1174"><a href="#Generator.withdataproperty_sql-1174"><span class="linenos">1174</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;statistics&quot;</span><span class="p">)</span>
+</span><span id="Generator.withdataproperty_sql-1175"><a href="#Generator.withdataproperty_sql-1175"><span class="linenos">1175</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.withdataproperty_sql-1176"><a href="#Generator.withdataproperty_sql-1176"><span class="linenos">1176</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.withdataproperty_sql-1177"><a href="#Generator.withdataproperty_sql-1177"><span class="linenos">1177</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
+</span><span id="Generator.withdataproperty_sql-1178"><a href="#Generator.withdataproperty_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">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9129,37 +9446,38 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.insert_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.insert_sql-1134"><a href="#Generator.insert_sql-1134"><span class="linenos">1134</span></a> <span class="k">def</span> <span class="nf">insert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1135"><a href="#Generator.insert_sql-1135"><span class="linenos">1135</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1136"><a href="#Generator.insert_sql-1136"><span class="linenos">1136</span></a>
-</span><span id="Generator.insert_sql-1137"><a href="#Generator.insert_sql-1137"><span class="linenos">1137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
-</span><span id="Generator.insert_sql-1138"><a href="#Generator.insert_sql-1138"><span class="linenos">1138</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator.insert_sql-1139"><a href="#Generator.insert_sql-1139"><span class="linenos">1139</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1140"><a href="#Generator.insert_sql-1140"><span class="linenos">1140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE TABLE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator.insert_sql-1141"><a href="#Generator.insert_sql-1141"><span class="linenos">1141</span></a>
-</span><span id="Generator.insert_sql-1142"><a href="#Generator.insert_sql-1142"><span class="linenos">1142</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;alternative&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1143"><a href="#Generator.insert_sql-1143"><span class="linenos">1143</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1144"><a href="#Generator.insert_sql-1144"><span class="linenos">1144</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1145"><a href="#Generator.insert_sql-1145"><span class="linenos">1145</span></a>
-</span><span id="Generator.insert_sql-1146"><a href="#Generator.insert_sql-1146"><span class="linenos">1146</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1147"><a href="#Generator.insert_sql-1147"><span class="linenos">1147</span></a>
-</span><span id="Generator.insert_sql-1148"><a href="#Generator.insert_sql-1148"><span class="linenos">1148</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1149"><a href="#Generator.insert_sql-1149"><span class="linenos">1149</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.insert_sql-1150"><a href="#Generator.insert_sql-1150"><span class="linenos">1150</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1151"><a href="#Generator.insert_sql-1151"><span class="linenos">1151</span></a> <span class="p">)</span>
-</span><span id="Generator.insert_sql-1152"><a href="#Generator.insert_sql-1152"><span class="linenos">1152</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1153"><a href="#Generator.insert_sql-1153"><span class="linenos">1153</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1154"><a href="#Generator.insert_sql-1154"><span class="linenos">1154</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1155"><a href="#Generator.insert_sql-1155"><span class="linenos">1155</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;conflict&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1156"><a href="#Generator.insert_sql-1156"><span class="linenos">1156</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1157"><a href="#Generator.insert_sql-1157"><span class="linenos">1157</span></a>
-</span><span id="Generator.insert_sql-1158"><a href="#Generator.insert_sql-1158"><span class="linenos">1158</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1159"><a href="#Generator.insert_sql-1159"><span class="linenos">1159</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1160"><a href="#Generator.insert_sql-1160"><span class="linenos">1160</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1161"><a href="#Generator.insert_sql-1161"><span class="linenos">1161</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1162"><a href="#Generator.insert_sql-1162"><span class="linenos">1162</span></a>
-</span><span id="Generator.insert_sql-1163"><a href="#Generator.insert_sql-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;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1164"><a href="#Generator.insert_sql-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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.insert_sql-1180"><a href="#Generator.insert_sql-1180"><span class="linenos">1180</span></a> <span class="k">def</span> <span class="nf">insert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1181"><a href="#Generator.insert_sql-1181"><span class="linenos">1181</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1182"><a href="#Generator.insert_sql-1182"><span class="linenos">1182</span></a>
+</span><span id="Generator.insert_sql-1183"><a href="#Generator.insert_sql-1183"><span class="linenos">1183</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
+</span><span id="Generator.insert_sql-1184"><a href="#Generator.insert_sql-1184"><span class="linenos">1184</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="Generator.insert_sql-1185"><a href="#Generator.insert_sql-1185"><span class="linenos">1185</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1186"><a href="#Generator.insert_sql-1186"><span class="linenos">1186</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE TABLE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="Generator.insert_sql-1187"><a href="#Generator.insert_sql-1187"><span class="linenos">1187</span></a>
+</span><span id="Generator.insert_sql-1188"><a href="#Generator.insert_sql-1188"><span class="linenos">1188</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;alternative&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1189"><a href="#Generator.insert_sql-1189"><span class="linenos">1189</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1190"><a href="#Generator.insert_sql-1190"><span class="linenos">1190</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1191"><a href="#Generator.insert_sql-1191"><span class="linenos">1191</span></a>
+</span><span id="Generator.insert_sql-1192"><a href="#Generator.insert_sql-1192"><span class="linenos">1192</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1193"><a href="#Generator.insert_sql-1193"><span class="linenos">1193</span></a>
+</span><span id="Generator.insert_sql-1194"><a href="#Generator.insert_sql-1194"><span class="linenos">1194</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1195"><a href="#Generator.insert_sql-1195"><span class="linenos">1195</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.insert_sql-1196"><a href="#Generator.insert_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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1197"><a href="#Generator.insert_sql-1197"><span class="linenos">1197</span></a> <span class="p">)</span>
+</span><span id="Generator.insert_sql-1198"><a href="#Generator.insert_sql-1198"><span class="linenos">1198</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1199"><a href="#Generator.insert_sql-1199"><span class="linenos">1199</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1200"><a href="#Generator.insert_sql-1200"><span class="linenos">1200</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1201"><a href="#Generator.insert_sql-1201"><span class="linenos">1201</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;conflict&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1202"><a href="#Generator.insert_sql-1202"><span class="linenos">1202</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1203"><a href="#Generator.insert_sql-1203"><span class="linenos">1203</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1204"><a href="#Generator.insert_sql-1204"><span class="linenos">1204</span></a>
+</span><span id="Generator.insert_sql-1205"><a href="#Generator.insert_sql-1205"><span class="linenos">1205</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1206"><a href="#Generator.insert_sql-1206"><span class="linenos">1206</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1207"><a href="#Generator.insert_sql-1207"><span class="linenos">1207</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1208"><a href="#Generator.insert_sql-1208"><span class="linenos">1208</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1209"><a href="#Generator.insert_sql-1209"><span class="linenos">1209</span></a>
+</span><span id="Generator.insert_sql-1210"><a href="#Generator.insert_sql-1210"><span class="linenos">1210</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1211"><a href="#Generator.insert_sql-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -9177,11 +9495,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.intersect_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_sql-1166"><a href="#Generator.intersect_sql-1166"><span class="linenos">1166</span></a> <span class="k">def</span> <span class="nf">intersect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.intersect_sql-1167"><a href="#Generator.intersect_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><span id="Generator.intersect_sql-1168"><a href="#Generator.intersect_sql-1168"><span class="linenos">1168</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.intersect_sql-1169"><a href="#Generator.intersect_sql-1169"><span class="linenos">1169</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator.intersect_sql-1170"><a href="#Generator.intersect_sql-1170"><span class="linenos">1170</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_sql-1213"><a href="#Generator.intersect_sql-1213"><span class="linenos">1213</span></a> <span class="k">def</span> <span class="nf">intersect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.intersect_sql-1214"><a href="#Generator.intersect_sql-1214"><span class="linenos">1214</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator.intersect_sql-1215"><a href="#Generator.intersect_sql-1215"><span class="linenos">1215</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.intersect_sql-1216"><a href="#Generator.intersect_sql-1216"><span class="linenos">1216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator.intersect_sql-1217"><a href="#Generator.intersect_sql-1217"><span class="linenos">1217</span></a> <span class="p">)</span>
</span></pre></div>
@@ -9199,8 +9517,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.intersect_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_op-1172"><a href="#Generator.intersect_op-1172"><span class="linenos">1172</span></a> <span class="k">def</span> <span class="nf">intersect_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.intersect_op-1173"><a href="#Generator.intersect_op-1173"><span class="linenos">1173</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_op-1219"><a href="#Generator.intersect_op-1219"><span class="linenos">1219</span></a> <span class="k">def</span> <span class="nf">intersect_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.intersect_op-1220"><a href="#Generator.intersect_op-1220"><span class="linenos">1220</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9218,8 +9536,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.introducer_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.introducer_sql-1175"><a href="#Generator.introducer_sql-1175"><span class="linenos">1175</span></a> <span class="k">def</span> <span class="nf">introducer_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.introducer_sql-1176"><a href="#Generator.introducer_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.introducer_sql-1222"><a href="#Generator.introducer_sql-1222"><span class="linenos">1222</span></a> <span class="k">def</span> <span class="nf">introducer_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.introducer_sql-1223"><a href="#Generator.introducer_sql-1223"><span class="linenos">1223</span></a> <span class="k">return</span> <span class="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>
@@ -9237,8 +9555,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.pseudotype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pseudotype_sql-1178"><a href="#Generator.pseudotype_sql-1178"><span class="linenos">1178</span></a> <span class="k">def</span> <span class="nf">pseudotype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pseudotype_sql-1179"><a href="#Generator.pseudotype_sql-1179"><span class="linenos">1179</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pseudotype_sql-1225"><a href="#Generator.pseudotype_sql-1225"><span class="linenos">1225</span></a> <span class="k">def</span> <span class="nf">pseudotype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pseudotype_sql-1226"><a href="#Generator.pseudotype_sql-1226"><span class="linenos">1226</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span></pre></div>
@@ -9256,19 +9574,19 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.onconflict_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.onconflict_sql-1181"><a href="#Generator.onconflict_sql-1181"><span class="linenos">1181</span></a> <span class="k">def</span> <span class="nf">onconflict_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.onconflict_sql-1182"><a href="#Generator.onconflict_sql-1182"><span class="linenos">1182</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
-</span><span id="Generator.onconflict_sql-1183"><a href="#Generator.onconflict_sql-1183"><span class="linenos">1183</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;constraint&quot;</span><span class="p">)</span>
-</span><span id="Generator.onconflict_sql-1184"><a href="#Generator.onconflict_sql-1184"><span class="linenos">1184</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Generator.onconflict_sql-1185"><a href="#Generator.onconflict_sql-1185"><span class="linenos">1185</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.onconflict_sql-1186"><a href="#Generator.onconflict_sql-1186"><span class="linenos">1186</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.onconflict_sql-1187"><a href="#Generator.onconflict_sql-1187"><span class="linenos">1187</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
-</span><span id="Generator.onconflict_sql-1188"><a href="#Generator.onconflict_sql-1188"><span class="linenos">1188</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.onconflict_sql-1189"><a href="#Generator.onconflict_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.onconflict_sql-1190"><a href="#Generator.onconflict_sql-1190"><span class="linenos">1190</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.onconflict_sql-1191"><a href="#Generator.onconflict_sql-1191"><span class="linenos">1191</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.onconflict_sql-1192"><a href="#Generator.onconflict_sql-1192"><span class="linenos">1192</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.onconflict_sql-1193"><a href="#Generator.onconflict_sql-1193"><span class="linenos">1193</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.onconflict_sql-1228"><a href="#Generator.onconflict_sql-1228"><span class="linenos">1228</span></a> <span class="k">def</span> <span class="nf">onconflict_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.onconflict_sql-1229"><a href="#Generator.onconflict_sql-1229"><span class="linenos">1229</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
+</span><span id="Generator.onconflict_sql-1230"><a href="#Generator.onconflict_sql-1230"><span class="linenos">1230</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;constraint&quot;</span><span class="p">)</span>
+</span><span id="Generator.onconflict_sql-1231"><a href="#Generator.onconflict_sql-1231"><span class="linenos">1231</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Generator.onconflict_sql-1232"><a href="#Generator.onconflict_sql-1232"><span class="linenos">1232</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.onconflict_sql-1233"><a href="#Generator.onconflict_sql-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">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.onconflict_sql-1234"><a href="#Generator.onconflict_sql-1234"><span class="linenos">1234</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
+</span><span id="Generator.onconflict_sql-1235"><a href="#Generator.onconflict_sql-1235"><span class="linenos">1235</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.onconflict_sql-1236"><a href="#Generator.onconflict_sql-1236"><span class="linenos">1236</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.onconflict_sql-1237"><a href="#Generator.onconflict_sql-1237"><span class="linenos">1237</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.onconflict_sql-1238"><a href="#Generator.onconflict_sql-1238"><span class="linenos">1238</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.onconflict_sql-1239"><a href="#Generator.onconflict_sql-1239"><span class="linenos">1239</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.onconflict_sql-1240"><a href="#Generator.onconflict_sql-1240"><span class="linenos">1240</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9286,8 +9604,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.returning_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.returning_sql-1195"><a href="#Generator.returning_sql-1195"><span class="linenos">1195</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.returning_sql-1196"><a href="#Generator.returning_sql-1196"><span class="linenos">1196</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.returning_sql-1242"><a href="#Generator.returning_sql-1242"><span class="linenos">1242</span></a> <span class="k">def</span> <span class="nf">returning_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.returning_sql-1243"><a href="#Generator.returning_sql-1243"><span class="linenos">1243</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9305,20 +9623,20 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.rowformatdelimitedproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rowformatdelimitedproperty_sql-1198"><a href="#Generator.rowformatdelimitedproperty_sql-1198"><span class="linenos">1198</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1199"><a href="#Generator.rowformatdelimitedproperty_sql-1199"><span class="linenos">1199</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;fields&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1200"><a href="#Generator.rowformatdelimitedproperty_sql-1200"><span class="linenos">1200</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1201"><a href="#Generator.rowformatdelimitedproperty_sql-1201"><span class="linenos">1201</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;escaped&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1202"><a href="#Generator.rowformatdelimitedproperty_sql-1202"><span class="linenos">1202</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1203"><a href="#Generator.rowformatdelimitedproperty_sql-1203"><span class="linenos">1203</span></a> <span class="n">items</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;collection_items&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1204"><a href="#Generator.rowformatdelimitedproperty_sql-1204"><span class="linenos">1204</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1205"><a href="#Generator.rowformatdelimitedproperty_sql-1205"><span class="linenos">1205</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1206"><a href="#Generator.rowformatdelimitedproperty_sql-1206"><span class="linenos">1206</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1207"><a href="#Generator.rowformatdelimitedproperty_sql-1207"><span class="linenos">1207</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lines&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1208"><a href="#Generator.rowformatdelimitedproperty_sql-1208"><span class="linenos">1208</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1209"><a href="#Generator.rowformatdelimitedproperty_sql-1209"><span class="linenos">1209</span></a> <span class="n">null</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;null&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1210"><a href="#Generator.rowformatdelimitedproperty_sql-1210"><span class="linenos">1210</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1211"><a href="#Generator.rowformatdelimitedproperty_sql-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rowformatdelimitedproperty_sql-1245"><a href="#Generator.rowformatdelimitedproperty_sql-1245"><span class="linenos">1245</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1246"><a href="#Generator.rowformatdelimitedproperty_sql-1246"><span class="linenos">1246</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;fields&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1247"><a href="#Generator.rowformatdelimitedproperty_sql-1247"><span class="linenos">1247</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1248"><a href="#Generator.rowformatdelimitedproperty_sql-1248"><span class="linenos">1248</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;escaped&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1249"><a href="#Generator.rowformatdelimitedproperty_sql-1249"><span class="linenos">1249</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1250"><a href="#Generator.rowformatdelimitedproperty_sql-1250"><span class="linenos">1250</span></a> <span class="n">items</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;collection_items&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1251"><a href="#Generator.rowformatdelimitedproperty_sql-1251"><span class="linenos">1251</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1252"><a href="#Generator.rowformatdelimitedproperty_sql-1252"><span class="linenos">1252</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1253"><a href="#Generator.rowformatdelimitedproperty_sql-1253"><span class="linenos">1253</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1254"><a href="#Generator.rowformatdelimitedproperty_sql-1254"><span class="linenos">1254</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lines&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1255"><a href="#Generator.rowformatdelimitedproperty_sql-1255"><span class="linenos">1255</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1256"><a href="#Generator.rowformatdelimitedproperty_sql-1256"><span class="linenos">1256</span></a> <span class="n">null</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;null&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1257"><a href="#Generator.rowformatdelimitedproperty_sql-1257"><span class="linenos">1257</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1258"><a href="#Generator.rowformatdelimitedproperty_sql-1258"><span class="linenos">1258</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9336,8 +9654,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.withtablehint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withtablehint_sql-1213"><a href="#Generator.withtablehint_sql-1213"><span class="linenos">1213</span></a> <span class="k">def</span> <span class="nf">withtablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withtablehint_sql-1214"><a href="#Generator.withtablehint_sql-1214"><span class="linenos">1214</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withtablehint_sql-1260"><a href="#Generator.withtablehint_sql-1260"><span class="linenos">1260</span></a> <span class="k">def</span> <span class="nf">withtablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withtablehint_sql-1261"><a href="#Generator.withtablehint_sql-1261"><span class="linenos">1261</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -9355,11 +9673,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.indextablehint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indextablehint_sql-1216"><a href="#Generator.indextablehint_sql-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">indextablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indextablehint_sql-1217"><a href="#Generator.indextablehint_sql-1217"><span class="linenos">1217</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> INDEX&quot;</span>
-</span><span id="Generator.indextablehint_sql-1218"><a href="#Generator.indextablehint_sql-1218"><span class="linenos">1218</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
-</span><span id="Generator.indextablehint_sql-1219"><a href="#Generator.indextablehint_sql-1219"><span class="linenos">1219</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indextablehint_sql-1220"><a href="#Generator.indextablehint_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="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indextablehint_sql-1263"><a href="#Generator.indextablehint_sql-1263"><span class="linenos">1263</span></a> <span class="k">def</span> <span class="nf">indextablehint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indextablehint_sql-1264"><a href="#Generator.indextablehint_sql-1264"><span class="linenos">1264</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> INDEX&quot;</span>
+</span><span id="Generator.indextablehint_sql-1265"><a href="#Generator.indextablehint_sql-1265"><span class="linenos">1265</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
+</span><span id="Generator.indextablehint_sql-1266"><a href="#Generator.indextablehint_sql-1266"><span class="linenos">1266</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indextablehint_sql-1267"><a href="#Generator.indextablehint_sql-1267"><span class="linenos">1267</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -9377,29 +9695,29 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.table_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.table_sql-1222"><a href="#Generator.table_sql-1222"><span class="linenos">1222</span></a> <span class="k">def</span> <span class="nf">table_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.table_sql-1223"><a href="#Generator.table_sql-1223"><span class="linenos">1223</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.table_sql-1224"><a href="#Generator.table_sql-1224"><span class="linenos">1224</span></a> <span class="n">part</span>
-</span><span id="Generator.table_sql-1225"><a href="#Generator.table_sql-1225"><span class="linenos">1225</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">[</span>
-</span><span id="Generator.table_sql-1226"><a href="#Generator.table_sql-1226"><span class="linenos">1226</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;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator.table_sql-1227"><a href="#Generator.table_sql-1227"><span class="linenos">1227</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;db&quot;</span><span class="p">),</span>
-</span><span id="Generator.table_sql-1228"><a href="#Generator.table_sql-1228"><span class="linenos">1228</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;this&quot;</span><span class="p">),</span>
-</span><span id="Generator.table_sql-1229"><a href="#Generator.table_sql-1229"><span class="linenos">1229</span></a> <span class="p">]</span>
-</span><span id="Generator.table_sql-1230"><a href="#Generator.table_sql-1230"><span class="linenos">1230</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="Generator.table_sql-1231"><a href="#Generator.table_sql-1231"><span class="linenos">1231</span></a> <span class="p">)</span>
-</span><span id="Generator.table_sql-1232"><a href="#Generator.table_sql-1232"><span class="linenos">1232</span></a>
-</span><span id="Generator.table_sql-1233"><a href="#Generator.table_sql-1233"><span class="linenos">1233</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1234"><a href="#Generator.table_sql-1234"><span class="linenos">1234</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1235"><a href="#Generator.table_sql-1235"><span class="linenos">1235</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1236"><a href="#Generator.table_sql-1236"><span class="linenos">1236</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1237"><a href="#Generator.table_sql-1237"><span class="linenos">1237</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1238"><a href="#Generator.table_sql-1238"><span class="linenos">1238</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1239"><a href="#Generator.table_sql-1239"><span class="linenos">1239</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1240"><a href="#Generator.table_sql-1240"><span class="linenos">1240</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1241"><a href="#Generator.table_sql-1241"><span class="linenos">1241</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1242"><a href="#Generator.table_sql-1242"><span class="linenos">1242</span></a> <span class="n">system_time</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;system_time&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">system_time</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1243"><a href="#Generator.table_sql-1243"><span class="linenos">1243</span></a>
-</span><span id="Generator.table_sql-1244"><a href="#Generator.table_sql-1244"><span class="linenos">1244</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">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.table_sql-1269"><a href="#Generator.table_sql-1269"><span class="linenos">1269</span></a> <span class="k">def</span> <span class="nf">table_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.table_sql-1270"><a href="#Generator.table_sql-1270"><span class="linenos">1270</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.table_sql-1271"><a href="#Generator.table_sql-1271"><span class="linenos">1271</span></a> <span class="n">part</span>
+</span><span id="Generator.table_sql-1272"><a href="#Generator.table_sql-1272"><span class="linenos">1272</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">[</span>
+</span><span id="Generator.table_sql-1273"><a href="#Generator.table_sql-1273"><span class="linenos">1273</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;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator.table_sql-1274"><a href="#Generator.table_sql-1274"><span class="linenos">1274</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;db&quot;</span><span class="p">),</span>
+</span><span id="Generator.table_sql-1275"><a href="#Generator.table_sql-1275"><span class="linenos">1275</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;this&quot;</span><span class="p">),</span>
+</span><span id="Generator.table_sql-1276"><a href="#Generator.table_sql-1276"><span class="linenos">1276</span></a> <span class="p">]</span>
+</span><span id="Generator.table_sql-1277"><a href="#Generator.table_sql-1277"><span class="linenos">1277</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="Generator.table_sql-1278"><a href="#Generator.table_sql-1278"><span class="linenos">1278</span></a> <span class="p">)</span>
+</span><span id="Generator.table_sql-1279"><a href="#Generator.table_sql-1279"><span class="linenos">1279</span></a>
+</span><span id="Generator.table_sql-1280"><a href="#Generator.table_sql-1280"><span class="linenos">1280</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;version&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1281"><a href="#Generator.table_sql-1281"><span class="linenos">1281</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1282"><a href="#Generator.table_sql-1282"><span class="linenos">1282</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1283"><a href="#Generator.table_sql-1283"><span class="linenos">1283</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1284"><a href="#Generator.table_sql-1284"><span class="linenos">1284</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1285"><a href="#Generator.table_sql-1285"><span class="linenos">1285</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1286"><a href="#Generator.table_sql-1286"><span class="linenos">1286</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1287"><a href="#Generator.table_sql-1287"><span class="linenos">1287</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1288"><a href="#Generator.table_sql-1288"><span class="linenos">1288</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1289"><a href="#Generator.table_sql-1289"><span class="linenos">1289</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1290"><a href="#Generator.table_sql-1290"><span class="linenos">1290</span></a>
+</span><span id="Generator.table_sql-1291"><a href="#Generator.table_sql-1291"><span class="linenos">1291</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">version</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9417,35 +9735,35 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablesample_sql-1246"><a href="#Generator.tablesample_sql-1246"><span class="linenos">1246</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="Generator.tablesample_sql-1247"><a href="#Generator.tablesample_sql-1247"><span class="linenos">1247</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-1248"><a href="#Generator.tablesample_sql-1248"><span class="linenos">1248</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-1249"><a href="#Generator.tablesample_sql-1249"><span class="linenos">1249</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-1250"><a href="#Generator.tablesample_sql-1250"><span class="linenos">1250</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator.tablesample_sql-1251"><a href="#Generator.tablesample_sql-1251"><span class="linenos">1251</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1252"><a href="#Generator.tablesample_sql-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">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1253"><a href="#Generator.tablesample_sql-1253"><span class="linenos">1253</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-1254"><a href="#Generator.tablesample_sql-1254"><span class="linenos">1254</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1255"><a href="#Generator.tablesample_sql-1255"><span class="linenos">1255</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1256"><a href="#Generator.tablesample_sql-1256"><span class="linenos">1256</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1257"><a href="#Generator.tablesample_sql-1257"><span class="linenos">1257</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-1258"><a href="#Generator.tablesample_sql-1258"><span class="linenos">1258</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-1259"><a href="#Generator.tablesample_sql-1259"><span class="linenos">1259</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-1260"><a href="#Generator.tablesample_sql-1260"><span class="linenos">1260</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-1261"><a href="#Generator.tablesample_sql-1261"><span class="linenos">1261</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-1262"><a href="#Generator.tablesample_sql-1262"><span class="linenos">1262</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-1263"><a href="#Generator.tablesample_sql-1263"><span class="linenos">1263</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-1264"><a href="#Generator.tablesample_sql-1264"><span class="linenos">1264</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-1265"><a href="#Generator.tablesample_sql-1265"><span class="linenos">1265</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-1266"><a href="#Generator.tablesample_sql-1266"><span class="linenos">1266</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-1267"><a href="#Generator.tablesample_sql-1267"><span class="linenos">1267</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-1268"><a href="#Generator.tablesample_sql-1268"><span class="linenos">1268</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-1269"><a href="#Generator.tablesample_sql-1269"><span class="linenos">1269</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-1270"><a href="#Generator.tablesample_sql-1270"><span class="linenos">1270</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-1271"><a href="#Generator.tablesample_sql-1271"><span class="linenos">1271</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-1272"><a href="#Generator.tablesample_sql-1272"><span class="linenos">1272</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-1273"><a href="#Generator.tablesample_sql-1273"><span class="linenos">1273</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-1274"><a href="#Generator.tablesample_sql-1274"><span class="linenos">1274</span></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-1293"><a href="#Generator.tablesample_sql-1293"><span class="linenos">1293</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="Generator.tablesample_sql-1294"><a href="#Generator.tablesample_sql-1294"><span class="linenos">1294</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-1295"><a href="#Generator.tablesample_sql-1295"><span class="linenos">1295</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-1296"><a href="#Generator.tablesample_sql-1296"><span class="linenos">1296</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-1297"><a href="#Generator.tablesample_sql-1297"><span class="linenos">1297</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator.tablesample_sql-1298"><a href="#Generator.tablesample_sql-1298"><span class="linenos">1298</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1299"><a href="#Generator.tablesample_sql-1299"><span class="linenos">1299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1300"><a href="#Generator.tablesample_sql-1300"><span class="linenos">1300</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-1301"><a href="#Generator.tablesample_sql-1301"><span class="linenos">1301</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1302"><a href="#Generator.tablesample_sql-1302"><span class="linenos">1302</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1303"><a href="#Generator.tablesample_sql-1303"><span class="linenos">1303</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1304"><a href="#Generator.tablesample_sql-1304"><span class="linenos">1304</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-1305"><a href="#Generator.tablesample_sql-1305"><span class="linenos">1305</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-1306"><a href="#Generator.tablesample_sql-1306"><span class="linenos">1306</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-1307"><a href="#Generator.tablesample_sql-1307"><span class="linenos">1307</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-1308"><a href="#Generator.tablesample_sql-1308"><span class="linenos">1308</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-1309"><a href="#Generator.tablesample_sql-1309"><span class="linenos">1309</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-1310"><a href="#Generator.tablesample_sql-1310"><span class="linenos">1310</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-1311"><a href="#Generator.tablesample_sql-1311"><span class="linenos">1311</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-1312"><a href="#Generator.tablesample_sql-1312"><span class="linenos">1312</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-1313"><a href="#Generator.tablesample_sql-1313"><span class="linenos">1313</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-1314"><a href="#Generator.tablesample_sql-1314"><span class="linenos">1314</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-1315"><a href="#Generator.tablesample_sql-1315"><span class="linenos">1315</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-1316"><a href="#Generator.tablesample_sql-1316"><span class="linenos">1316</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-1317"><a href="#Generator.tablesample_sql-1317"><span class="linenos">1317</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-1318"><a href="#Generator.tablesample_sql-1318"><span class="linenos">1318</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-1319"><a href="#Generator.tablesample_sql-1319"><span class="linenos">1319</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-1320"><a href="#Generator.tablesample_sql-1320"><span class="linenos">1320</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-1321"><a href="#Generator.tablesample_sql-1321"><span class="linenos">1321</span></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>
@@ -9463,23 +9781,50 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.pivot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pivot_sql-1276"><a href="#Generator.pivot_sql-1276"><span class="linenos">1276</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-1277"><a href="#Generator.pivot_sql-1277"><span class="linenos">1277</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1278"><a href="#Generator.pivot_sql-1278"><span class="linenos">1278</span></a>
-</span><span id="Generator.pivot_sql-1279"><a href="#Generator.pivot_sql-1279"><span class="linenos">1279</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.pivot_sql-1280"><a href="#Generator.pivot_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.pivot_sql-1281"><a href="#Generator.pivot_sql-1281"><span class="linenos">1281</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.pivot_sql-1282"><a href="#Generator.pivot_sql-1282"><span class="linenos">1282</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1283"><a href="#Generator.pivot_sql-1283"><span class="linenos">1283</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.pivot_sql-1284"><a href="#Generator.pivot_sql-1284"><span class="linenos">1284</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1285"><a href="#Generator.pivot_sql-1285"><span class="linenos">1285</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.pivot_sql-1286"><a href="#Generator.pivot_sql-1286"><span class="linenos">1286</span></a>
-</span><span id="Generator.pivot_sql-1287"><a href="#Generator.pivot_sql-1287"><span class="linenos">1287</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-1288"><a href="#Generator.pivot_sql-1288"><span class="linenos">1288</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-1289"><a href="#Generator.pivot_sql-1289"><span class="linenos">1289</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-1290"><a href="#Generator.pivot_sql-1290"><span class="linenos">1290</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-1291"><a href="#Generator.pivot_sql-1291"><span class="linenos">1291</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-1292"><a href="#Generator.pivot_sql-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">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-1323"><a href="#Generator.pivot_sql-1323"><span class="linenos">1323</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-1324"><a href="#Generator.pivot_sql-1324"><span class="linenos">1324</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1325"><a href="#Generator.pivot_sql-1325"><span class="linenos">1325</span></a>
+</span><span id="Generator.pivot_sql-1326"><a href="#Generator.pivot_sql-1326"><span class="linenos">1326</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1327"><a href="#Generator.pivot_sql-1327"><span class="linenos">1327</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1328"><a href="#Generator.pivot_sql-1328"><span class="linenos">1328</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.pivot_sql-1329"><a href="#Generator.pivot_sql-1329"><span class="linenos">1329</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1330"><a href="#Generator.pivot_sql-1330"><span class="linenos">1330</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.pivot_sql-1331"><a href="#Generator.pivot_sql-1331"><span class="linenos">1331</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1332"><a href="#Generator.pivot_sql-1332"><span class="linenos">1332</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.pivot_sql-1333"><a href="#Generator.pivot_sql-1333"><span class="linenos">1333</span></a>
+</span><span id="Generator.pivot_sql-1334"><a href="#Generator.pivot_sql-1334"><span class="linenos">1334</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-1335"><a href="#Generator.pivot_sql-1335"><span class="linenos">1335</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-1336"><a href="#Generator.pivot_sql-1336"><span class="linenos">1336</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-1337"><a href="#Generator.pivot_sql-1337"><span class="linenos">1337</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-1338"><a href="#Generator.pivot_sql-1338"><span class="linenos">1338</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-1339"><a href="#Generator.pivot_sql-1339"><span class="linenos">1339</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;include_nulls&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1340"><a href="#Generator.pivot_sql-1340"><span class="linenos">1340</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1341"><a href="#Generator.pivot_sql-1341"><span class="linenos">1341</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
+</span><span id="Generator.pivot_sql-1342"><a href="#Generator.pivot_sql-1342"><span class="linenos">1342</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1343"><a href="#Generator.pivot_sql-1343"><span class="linenos">1343</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.pivot_sql-1344"><a href="#Generator.pivot_sql-1344"><span class="linenos">1344</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Generator.version_sql" class="classattr">
+ <input id="Generator.version_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">version_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#Version">sqlglot.expressions.Version</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.version_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.version_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.version_sql-1346"><a href="#Generator.version_sql-1346"><span class="linenos">1346</span></a> <span class="k">def</span> <span class="nf">version_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.version_sql-1347"><a href="#Generator.version_sql-1347"><span class="linenos">1347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.version_sql-1348"><a href="#Generator.version_sql-1348"><span class="linenos">1348</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.version_sql-1349"><a href="#Generator.version_sql-1349"><span class="linenos">1349</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.version_sql-1350"><a href="#Generator.version_sql-1350"><span class="linenos">1350</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9497,8 +9842,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.tuple_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tuple_sql-1294"><a href="#Generator.tuple_sql-1294"><span class="linenos">1294</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-1295"><a href="#Generator.tuple_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="bp">self</span><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-1352"><a href="#Generator.tuple_sql-1352"><span class="linenos">1352</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-1353"><a href="#Generator.tuple_sql-1353"><span class="linenos">1353</span></a> <span class="k">return</span> <span class="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>
@@ -9516,19 +9861,20 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.update_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.update_sql-1297"><a href="#Generator.update_sql-1297"><span class="linenos">1297</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-1298"><a href="#Generator.update_sql-1298"><span class="linenos">1298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1299"><a href="#Generator.update_sql-1299"><span class="linenos">1299</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-1300"><a href="#Generator.update_sql-1300"><span class="linenos">1300</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-1301"><a href="#Generator.update_sql-1301"><span class="linenos">1301</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-1302"><a href="#Generator.update_sql-1302"><span class="linenos">1302</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-1303"><a href="#Generator.update_sql-1303"><span class="linenos">1303</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1304"><a href="#Generator.update_sql-1304"><span class="linenos">1304</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator.update_sql-1305"><a href="#Generator.update_sql-1305"><span class="linenos">1305</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.update_sql-1306"><a href="#Generator.update_sql-1306"><span class="linenos">1306</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.update_sql-1307"><a href="#Generator.update_sql-1307"><span class="linenos">1307</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.update_sql-1308"><a href="#Generator.update_sql-1308"><span class="linenos">1308</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.update_sql-1309"><a href="#Generator.update_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">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-1355"><a href="#Generator.update_sql-1355"><span class="linenos">1355</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-1356"><a href="#Generator.update_sql-1356"><span class="linenos">1356</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1357"><a href="#Generator.update_sql-1357"><span class="linenos">1357</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-1358"><a href="#Generator.update_sql-1358"><span class="linenos">1358</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-1359"><a href="#Generator.update_sql-1359"><span class="linenos">1359</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-1360"><a href="#Generator.update_sql-1360"><span class="linenos">1360</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-1361"><a href="#Generator.update_sql-1361"><span class="linenos">1361</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;order&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1362"><a href="#Generator.update_sql-1362"><span class="linenos">1362</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1363"><a href="#Generator.update_sql-1363"><span class="linenos">1363</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator.update_sql-1364"><a href="#Generator.update_sql-1364"><span class="linenos">1364</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.update_sql-1365"><a href="#Generator.update_sql-1365"><span class="linenos">1365</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.update_sql-1366"><a href="#Generator.update_sql-1366"><span class="linenos">1366</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.update_sql-1367"><a href="#Generator.update_sql-1367"><span class="linenos">1367</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.update_sql-1368"><a href="#Generator.update_sql-1368"><span class="linenos">1368</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>
@@ -9546,46 +9892,46 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.values_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.values_sql-1311"><a href="#Generator.values_sql-1311"><span class="linenos">1311</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-1312"><a href="#Generator.values_sql-1312"><span class="linenos">1312</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
-</span><span id="Generator.values_sql-1313"><a href="#Generator.values_sql-1313"><span class="linenos">1313</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="Generator.values_sql-1314"><a href="#Generator.values_sql-1314"><span class="linenos">1314</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-1315"><a href="#Generator.values_sql-1315"><span class="linenos">1315</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-1316"><a href="#Generator.values_sql-1316"><span class="linenos">1316</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-1317"><a href="#Generator.values_sql-1317"><span class="linenos">1317</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.values_sql-1318"><a href="#Generator.values_sql-1318"><span class="linenos">1318</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-1319"><a href="#Generator.values_sql-1319"><span class="linenos">1319</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-1320"><a href="#Generator.values_sql-1320"><span class="linenos">1320</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator.values_sql-1321"><a href="#Generator.values_sql-1321"><span class="linenos">1321</span></a> <span class="p">)</span>
-</span><span id="Generator.values_sql-1322"><a href="#Generator.values_sql-1322"><span class="linenos">1322</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator.values_sql-1323"><a href="#Generator.values_sql-1323"><span class="linenos">1323</span></a>
-</span><span id="Generator.values_sql-1324"><a href="#Generator.values_sql-1324"><span class="linenos">1324</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
-</span><span id="Generator.values_sql-1325"><a href="#Generator.values_sql-1325"><span class="linenos">1325</span></a> <span class="c1"># Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
-</span><span id="Generator.values_sql-1326"><a href="#Generator.values_sql-1326"><span class="linenos">1326</span></a> <span class="c1"># evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
-</span><span id="Generator.values_sql-1327"><a href="#Generator.values_sql-1327"><span class="linenos">1327</span></a> <span class="c1"># very slow.</span>
-</span><span id="Generator.values_sql-1328"><a href="#Generator.values_sql-1328"><span class="linenos">1328</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator.values_sql-1329"><a href="#Generator.values_sql-1329"><span class="linenos">1329</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</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">columns</span>
-</span><span id="Generator.values_sql-1330"><a href="#Generator.values_sql-1330"><span class="linenos">1330</span></a>
-</span><span id="Generator.values_sql-1331"><a href="#Generator.values_sql-1331"><span class="linenos">1331</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.values_sql-1332"><a href="#Generator.values_sql-1332"><span class="linenos">1332</span></a>
-</span><span id="Generator.values_sql-1333"><a href="#Generator.values_sql-1333"><span class="linenos">1333</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Generator.values_sql-1334"><a href="#Generator.values_sql-1334"><span class="linenos">1334</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator.values_sql-1335"><a href="#Generator.values_sql-1335"><span class="linenos">1335</span></a>
-</span><span id="Generator.values_sql-1336"><a href="#Generator.values_sql-1336"><span class="linenos">1336</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
-</span><span id="Generator.values_sql-1337"><a href="#Generator.values_sql-1337"><span class="linenos">1337</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.values_sql-1338"><a href="#Generator.values_sql-1338"><span class="linenos">1338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1339"><a href="#Generator.values_sql-1339"><span class="linenos">1339</span></a> <span class="p">]</span>
-</span><span id="Generator.values_sql-1340"><a href="#Generator.values_sql-1340"><span class="linenos">1340</span></a>
-</span><span id="Generator.values_sql-1341"><a href="#Generator.values_sql-1341"><span class="linenos">1341</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
-</span><span id="Generator.values_sql-1342"><a href="#Generator.values_sql-1342"><span class="linenos">1342</span></a>
-</span><span id="Generator.values_sql-1343"><a href="#Generator.values_sql-1343"><span class="linenos">1343</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Generator.values_sql-1344"><a href="#Generator.values_sql-1344"><span class="linenos">1344</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator.values_sql-1345"><a href="#Generator.values_sql-1345"><span class="linenos">1345</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="Generator.values_sql-1346"><a href="#Generator.values_sql-1346"><span class="linenos">1346</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
-</span><span id="Generator.values_sql-1347"><a href="#Generator.values_sql-1347"><span class="linenos">1347</span></a> <span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
-</span><span id="Generator.values_sql-1348"><a href="#Generator.values_sql-1348"><span class="linenos">1348</span></a> <span class="p">)</span>
-</span><span id="Generator.values_sql-1349"><a href="#Generator.values_sql-1349"><span class="linenos">1349</span></a>
-</span><span id="Generator.values_sql-1350"><a href="#Generator.values_sql-1350"><span class="linenos">1350</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.values_sql-1370"><a href="#Generator.values_sql-1370"><span class="linenos">1370</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-1371"><a href="#Generator.values_sql-1371"><span class="linenos">1371</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
+</span><span id="Generator.values_sql-1372"><a href="#Generator.values_sql-1372"><span class="linenos">1372</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="Generator.values_sql-1373"><a href="#Generator.values_sql-1373"><span class="linenos">1373</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-1374"><a href="#Generator.values_sql-1374"><span class="linenos">1374</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-1375"><a href="#Generator.values_sql-1375"><span class="linenos">1375</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-1376"><a href="#Generator.values_sql-1376"><span class="linenos">1376</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.values_sql-1377"><a href="#Generator.values_sql-1377"><span class="linenos">1377</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-1378"><a href="#Generator.values_sql-1378"><span class="linenos">1378</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-1379"><a href="#Generator.values_sql-1379"><span class="linenos">1379</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="Generator.values_sql-1380"><a href="#Generator.values_sql-1380"><span class="linenos">1380</span></a> <span class="p">)</span>
+</span><span id="Generator.values_sql-1381"><a href="#Generator.values_sql-1381"><span class="linenos">1381</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
+</span><span id="Generator.values_sql-1382"><a href="#Generator.values_sql-1382"><span class="linenos">1382</span></a>
+</span><span id="Generator.values_sql-1383"><a href="#Generator.values_sql-1383"><span class="linenos">1383</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
+</span><span id="Generator.values_sql-1384"><a href="#Generator.values_sql-1384"><span class="linenos">1384</span></a> <span class="c1"># Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
+</span><span id="Generator.values_sql-1385"><a href="#Generator.values_sql-1385"><span class="linenos">1385</span></a> <span class="c1"># evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
+</span><span id="Generator.values_sql-1386"><a href="#Generator.values_sql-1386"><span class="linenos">1386</span></a> <span class="c1"># very slow.</span>
+</span><span id="Generator.values_sql-1387"><a href="#Generator.values_sql-1387"><span class="linenos">1387</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator.values_sql-1388"><a href="#Generator.values_sql-1388"><span class="linenos">1388</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</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">columns</span>
+</span><span id="Generator.values_sql-1389"><a href="#Generator.values_sql-1389"><span class="linenos">1389</span></a>
+</span><span id="Generator.values_sql-1390"><a href="#Generator.values_sql-1390"><span class="linenos">1390</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.values_sql-1391"><a href="#Generator.values_sql-1391"><span class="linenos">1391</span></a>
+</span><span id="Generator.values_sql-1392"><a href="#Generator.values_sql-1392"><span class="linenos">1392</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Generator.values_sql-1393"><a href="#Generator.values_sql-1393"><span class="linenos">1393</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator.values_sql-1394"><a href="#Generator.values_sql-1394"><span class="linenos">1394</span></a>
+</span><span id="Generator.values_sql-1395"><a href="#Generator.values_sql-1395"><span class="linenos">1395</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
+</span><span id="Generator.values_sql-1396"><a href="#Generator.values_sql-1396"><span class="linenos">1396</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.values_sql-1397"><a href="#Generator.values_sql-1397"><span class="linenos">1397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1398"><a href="#Generator.values_sql-1398"><span class="linenos">1398</span></a> <span class="p">]</span>
+</span><span id="Generator.values_sql-1399"><a href="#Generator.values_sql-1399"><span class="linenos">1399</span></a>
+</span><span id="Generator.values_sql-1400"><a href="#Generator.values_sql-1400"><span class="linenos">1400</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
+</span><span id="Generator.values_sql-1401"><a href="#Generator.values_sql-1401"><span class="linenos">1401</span></a>
+</span><span id="Generator.values_sql-1402"><a href="#Generator.values_sql-1402"><span class="linenos">1402</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Generator.values_sql-1403"><a href="#Generator.values_sql-1403"><span class="linenos">1403</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator.values_sql-1404"><a href="#Generator.values_sql-1404"><span class="linenos">1404</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="Generator.values_sql-1405"><a href="#Generator.values_sql-1405"><span class="linenos">1405</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
+</span><span id="Generator.values_sql-1406"><a href="#Generator.values_sql-1406"><span class="linenos">1406</span></a> <span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="Generator.values_sql-1407"><a href="#Generator.values_sql-1407"><span class="linenos">1407</span></a> <span class="p">)</span>
+</span><span id="Generator.values_sql-1408"><a href="#Generator.values_sql-1408"><span class="linenos">1408</span></a>
+</span><span id="Generator.values_sql-1409"><a href="#Generator.values_sql-1409"><span class="linenos">1409</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">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></pre></div>
@@ -9603,8 +9949,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.var_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.var_sql-1352"><a href="#Generator.var_sql-1352"><span class="linenos">1352</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-1353"><a href="#Generator.var_sql-1353"><span class="linenos">1353</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-1411"><a href="#Generator.var_sql-1411"><span class="linenos">1411</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-1412"><a href="#Generator.var_sql-1412"><span class="linenos">1412</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>
@@ -9622,10 +9968,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.into_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.into_sql-1355"><a href="#Generator.into_sql-1355"><span class="linenos">1355</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-1356"><a href="#Generator.into_sql-1356"><span class="linenos">1356</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-1357"><a href="#Generator.into_sql-1357"><span class="linenos">1357</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-1358"><a href="#Generator.into_sql-1358"><span class="linenos">1358</span></a> <span class="k">return</span> <span class="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-1414"><a href="#Generator.into_sql-1414"><span class="linenos">1414</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-1415"><a href="#Generator.into_sql-1415"><span class="linenos">1415</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-1416"><a href="#Generator.into_sql-1416"><span class="linenos">1416</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-1417"><a href="#Generator.into_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;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>
@@ -9643,8 +9989,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.from_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.from_sql-1360"><a href="#Generator.from_sql-1360"><span class="linenos">1360</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-1361"><a href="#Generator.from_sql-1361"><span class="linenos">1361</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.from_sql-1419"><a href="#Generator.from_sql-1419"><span class="linenos">1419</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-1420"><a href="#Generator.from_sql-1420"><span class="linenos">1420</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9662,43 +10008,43 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.group_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.group_sql-1363"><a href="#Generator.group_sql-1363"><span class="linenos">1363</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-1364"><a href="#Generator.group_sql-1364"><span class="linenos">1364</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-1365"><a href="#Generator.group_sql-1365"><span class="linenos">1365</span></a>
-</span><span id="Generator.group_sql-1366"><a href="#Generator.group_sql-1366"><span class="linenos">1366</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
-</span><span id="Generator.group_sql-1367"><a href="#Generator.group_sql-1367"><span class="linenos">1367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
-</span><span id="Generator.group_sql-1368"><a href="#Generator.group_sql-1368"><span class="linenos">1368</span></a>
-</span><span id="Generator.group_sql-1369"><a href="#Generator.group_sql-1369"><span class="linenos">1369</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-1370"><a href="#Generator.group_sql-1370"><span class="linenos">1370</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.group_sql-1371"><a href="#Generator.group_sql-1371"><span class="linenos">1371</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-1372"><a href="#Generator.group_sql-1372"><span class="linenos">1372</span></a> <span class="p">)</span>
-</span><span id="Generator.group_sql-1373"><a href="#Generator.group_sql-1373"><span class="linenos">1373</span></a>
-</span><span id="Generator.group_sql-1374"><a href="#Generator.group_sql-1374"><span class="linenos">1374</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-1375"><a href="#Generator.group_sql-1375"><span class="linenos">1375</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-1376"><a href="#Generator.group_sql-1376"><span class="linenos">1376</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-1377"><a href="#Generator.group_sql-1377"><span class="linenos">1377</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1378"><a href="#Generator.group_sql-1378"><span class="linenos">1378</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-1379"><a href="#Generator.group_sql-1379"><span class="linenos">1379</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-1380"><a href="#Generator.group_sql-1380"><span class="linenos">1380</span></a>
-</span><span id="Generator.group_sql-1381"><a href="#Generator.group_sql-1381"><span class="linenos">1381</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-1382"><a href="#Generator.group_sql-1382"><span class="linenos">1382</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-1383"><a href="#Generator.group_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="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-1384"><a href="#Generator.group_sql-1384"><span class="linenos">1384</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1385"><a href="#Generator.group_sql-1385"><span class="linenos">1385</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-1386"><a href="#Generator.group_sql-1386"><span class="linenos">1386</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-1387"><a href="#Generator.group_sql-1387"><span class="linenos">1387</span></a>
-</span><span id="Generator.group_sql-1388"><a href="#Generator.group_sql-1388"><span class="linenos">1388</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator.group_sql-1389"><a href="#Generator.group_sql-1389"><span class="linenos">1389</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1390"><a href="#Generator.group_sql-1390"><span class="linenos">1390</span></a> <span class="n">cube_sql</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1391"><a href="#Generator.group_sql-1391"><span class="linenos">1391</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1392"><a href="#Generator.group_sql-1392"><span class="linenos">1392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1393"><a href="#Generator.group_sql-1393"><span class="linenos">1393</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1394"><a href="#Generator.group_sql-1394"><span class="linenos">1394</span></a> <span class="p">)</span>
-</span><span id="Generator.group_sql-1395"><a href="#Generator.group_sql-1395"><span class="linenos">1395</span></a>
-</span><span id="Generator.group_sql-1396"><a href="#Generator.group_sql-1396"><span class="linenos">1396</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-1397"><a href="#Generator.group_sql-1397"><span class="linenos">1397</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.group_sql-1398"><a href="#Generator.group_sql-1398"><span class="linenos">1398</span></a>
-</span><span id="Generator.group_sql-1399"><a href="#Generator.group_sql-1399"><span class="linenos">1399</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.group_sql-1422"><a href="#Generator.group_sql-1422"><span class="linenos">1422</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-1423"><a href="#Generator.group_sql-1423"><span class="linenos">1423</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-1424"><a href="#Generator.group_sql-1424"><span class="linenos">1424</span></a>
+</span><span id="Generator.group_sql-1425"><a href="#Generator.group_sql-1425"><span class="linenos">1425</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
+</span><span id="Generator.group_sql-1426"><a href="#Generator.group_sql-1426"><span class="linenos">1426</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
+</span><span id="Generator.group_sql-1427"><a href="#Generator.group_sql-1427"><span class="linenos">1427</span></a>
+</span><span id="Generator.group_sql-1428"><a href="#Generator.group_sql-1428"><span class="linenos">1428</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-1429"><a href="#Generator.group_sql-1429"><span class="linenos">1429</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.group_sql-1430"><a href="#Generator.group_sql-1430"><span class="linenos">1430</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-1431"><a href="#Generator.group_sql-1431"><span class="linenos">1431</span></a> <span class="p">)</span>
+</span><span id="Generator.group_sql-1432"><a href="#Generator.group_sql-1432"><span class="linenos">1432</span></a>
+</span><span id="Generator.group_sql-1433"><a href="#Generator.group_sql-1433"><span class="linenos">1433</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-1434"><a href="#Generator.group_sql-1434"><span class="linenos">1434</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-1435"><a href="#Generator.group_sql-1435"><span class="linenos">1435</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-1436"><a href="#Generator.group_sql-1436"><span class="linenos">1436</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1437"><a href="#Generator.group_sql-1437"><span class="linenos">1437</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-1438"><a href="#Generator.group_sql-1438"><span class="linenos">1438</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-1439"><a href="#Generator.group_sql-1439"><span class="linenos">1439</span></a>
+</span><span id="Generator.group_sql-1440"><a href="#Generator.group_sql-1440"><span class="linenos">1440</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-1441"><a href="#Generator.group_sql-1441"><span class="linenos">1441</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-1442"><a href="#Generator.group_sql-1442"><span class="linenos">1442</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-1443"><a href="#Generator.group_sql-1443"><span class="linenos">1443</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1444"><a href="#Generator.group_sql-1444"><span class="linenos">1444</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-1445"><a href="#Generator.group_sql-1445"><span class="linenos">1445</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-1446"><a href="#Generator.group_sql-1446"><span class="linenos">1446</span></a>
+</span><span id="Generator.group_sql-1447"><a href="#Generator.group_sql-1447"><span class="linenos">1447</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator.group_sql-1448"><a href="#Generator.group_sql-1448"><span class="linenos">1448</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1449"><a href="#Generator.group_sql-1449"><span class="linenos">1449</span></a> <span class="n">cube_sql</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1450"><a href="#Generator.group_sql-1450"><span class="linenos">1450</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1451"><a href="#Generator.group_sql-1451"><span class="linenos">1451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1452"><a href="#Generator.group_sql-1452"><span class="linenos">1452</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1453"><a href="#Generator.group_sql-1453"><span class="linenos">1453</span></a> <span class="p">)</span>
+</span><span id="Generator.group_sql-1454"><a href="#Generator.group_sql-1454"><span class="linenos">1454</span></a>
+</span><span id="Generator.group_sql-1455"><a href="#Generator.group_sql-1455"><span class="linenos">1455</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-1456"><a href="#Generator.group_sql-1456"><span class="linenos">1456</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.group_sql-1457"><a href="#Generator.group_sql-1457"><span class="linenos">1457</span></a>
+</span><span id="Generator.group_sql-1458"><a href="#Generator.group_sql-1458"><span class="linenos">1458</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>
@@ -9716,9 +10062,51 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.having_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.having_sql-1401"><a href="#Generator.having_sql-1401"><span class="linenos">1401</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-1402"><a href="#Generator.having_sql-1402"><span class="linenos">1402</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-1403"><a href="#Generator.having_sql-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-1460"><a href="#Generator.having_sql-1460"><span class="linenos">1460</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-1461"><a href="#Generator.having_sql-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">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-1462"><a href="#Generator.having_sql-1462"><span class="linenos">1462</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
+
+
+
+
+ </div>
+ <div id="Generator.connect_sql" class="classattr">
+ <input id="Generator.connect_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">connect_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#Connect">sqlglot.expressions.Connect</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.connect_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.connect_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connect_sql-1464"><a href="#Generator.connect_sql-1464"><span class="linenos">1464</span></a> <span class="k">def</span> <span class="nf">connect_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.connect_sql-1465"><a href="#Generator.connect_sql-1465"><span class="linenos">1465</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">)</span>
+</span><span id="Generator.connect_sql-1466"><a href="#Generator.connect_sql-1466"><span class="linenos">1466</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.connect_sql-1467"><a href="#Generator.connect_sql-1467"><span class="linenos">1467</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">)</span>
+</span><span id="Generator.connect_sql-1468"><a href="#Generator.connect_sql-1468"><span class="linenos">1468</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.connect_sql-1469"><a href="#Generator.connect_sql-1469"><span class="linenos">1469</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Generator.prior_sql" class="classattr">
+ <input id="Generator.prior_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">prior_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#Prior">sqlglot.expressions.Prior</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.prior_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.prior_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.prior_sql-1471"><a href="#Generator.prior_sql-1471"><span class="linenos">1471</span></a> <span class="k">def</span> <span class="nf">prior_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.prior_sql-1472"><a href="#Generator.prior_sql-1472"><span class="linenos">1472</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9736,38 +10124,38 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.join_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.join_sql-1405"><a href="#Generator.join_sql-1405"><span class="linenos">1405</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-1406"><a href="#Generator.join_sql-1406"><span class="linenos">1406</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.join_sql-1407"><a href="#Generator.join_sql-1407"><span class="linenos">1407</span></a> <span class="n">op</span>
-</span><span id="Generator.join_sql-1408"><a href="#Generator.join_sql-1408"><span class="linenos">1408</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-1409"><a href="#Generator.join_sql-1409"><span class="linenos">1409</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1410"><a href="#Generator.join_sql-1410"><span class="linenos">1410</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1411"><a href="#Generator.join_sql-1411"><span class="linenos">1411</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-1412"><a href="#Generator.join_sql-1412"><span class="linenos">1412</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-1413"><a href="#Generator.join_sql-1413"><span class="linenos">1413</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-1414"><a href="#Generator.join_sql-1414"><span class="linenos">1414</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1415"><a href="#Generator.join_sql-1415"><span class="linenos">1415</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="Generator.join_sql-1416"><a href="#Generator.join_sql-1416"><span class="linenos">1416</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1417"><a href="#Generator.join_sql-1417"><span class="linenos">1417</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-1418"><a href="#Generator.join_sql-1418"><span class="linenos">1418</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-1419"><a href="#Generator.join_sql-1419"><span class="linenos">1419</span></a>
-</span><span id="Generator.join_sql-1420"><a href="#Generator.join_sql-1420"><span class="linenos">1420</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-1421"><a href="#Generator.join_sql-1421"><span class="linenos">1421</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-1422"><a href="#Generator.join_sql-1422"><span class="linenos">1422</span></a>
-</span><span id="Generator.join_sql-1423"><a href="#Generator.join_sql-1423"><span class="linenos">1423</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-1424"><a href="#Generator.join_sql-1424"><span class="linenos">1424</span></a>
-</span><span id="Generator.join_sql-1425"><a href="#Generator.join_sql-1425"><span class="linenos">1425</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1426"><a href="#Generator.join_sql-1426"><span class="linenos">1426</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-1427"><a href="#Generator.join_sql-1427"><span class="linenos">1427</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-1428"><a href="#Generator.join_sql-1428"><span class="linenos">1428</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1429"><a href="#Generator.join_sql-1429"><span class="linenos">1429</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-1430"><a href="#Generator.join_sql-1430"><span class="linenos">1430</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1431"><a href="#Generator.join_sql-1431"><span class="linenos">1431</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-1432"><a href="#Generator.join_sql-1432"><span class="linenos">1432</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1433"><a href="#Generator.join_sql-1433"><span class="linenos">1433</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.join_sql-1434"><a href="#Generator.join_sql-1434"><span class="linenos">1434</span></a>
-</span><span id="Generator.join_sql-1435"><a href="#Generator.join_sql-1435"><span class="linenos">1435</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
-</span><span id="Generator.join_sql-1436"><a href="#Generator.join_sql-1436"><span class="linenos">1436</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.join_sql-1474"><a href="#Generator.join_sql-1474"><span class="linenos">1474</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-1475"><a href="#Generator.join_sql-1475"><span class="linenos">1475</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.join_sql-1476"><a href="#Generator.join_sql-1476"><span class="linenos">1476</span></a> <span class="n">op</span>
+</span><span id="Generator.join_sql-1477"><a href="#Generator.join_sql-1477"><span class="linenos">1477</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-1478"><a href="#Generator.join_sql-1478"><span class="linenos">1478</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1479"><a href="#Generator.join_sql-1479"><span class="linenos">1479</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1480"><a href="#Generator.join_sql-1480"><span class="linenos">1480</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-1481"><a href="#Generator.join_sql-1481"><span class="linenos">1481</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-1482"><a href="#Generator.join_sql-1482"><span class="linenos">1482</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-1483"><a href="#Generator.join_sql-1483"><span class="linenos">1483</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1484"><a href="#Generator.join_sql-1484"><span class="linenos">1484</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="Generator.join_sql-1485"><a href="#Generator.join_sql-1485"><span class="linenos">1485</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1486"><a href="#Generator.join_sql-1486"><span class="linenos">1486</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-1487"><a href="#Generator.join_sql-1487"><span class="linenos">1487</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-1488"><a href="#Generator.join_sql-1488"><span class="linenos">1488</span></a>
+</span><span id="Generator.join_sql-1489"><a href="#Generator.join_sql-1489"><span class="linenos">1489</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-1490"><a href="#Generator.join_sql-1490"><span class="linenos">1490</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-1491"><a href="#Generator.join_sql-1491"><span class="linenos">1491</span></a>
+</span><span id="Generator.join_sql-1492"><a href="#Generator.join_sql-1492"><span class="linenos">1492</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-1493"><a href="#Generator.join_sql-1493"><span class="linenos">1493</span></a>
+</span><span id="Generator.join_sql-1494"><a href="#Generator.join_sql-1494"><span class="linenos">1494</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1495"><a href="#Generator.join_sql-1495"><span class="linenos">1495</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-1496"><a href="#Generator.join_sql-1496"><span class="linenos">1496</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-1497"><a href="#Generator.join_sql-1497"><span class="linenos">1497</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1498"><a href="#Generator.join_sql-1498"><span class="linenos">1498</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-1499"><a href="#Generator.join_sql-1499"><span class="linenos">1499</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1500"><a href="#Generator.join_sql-1500"><span class="linenos">1500</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-1501"><a href="#Generator.join_sql-1501"><span class="linenos">1501</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1502"><a href="#Generator.join_sql-1502"><span class="linenos">1502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.join_sql-1503"><a href="#Generator.join_sql-1503"><span class="linenos">1503</span></a>
+</span><span id="Generator.join_sql-1504"><a href="#Generator.join_sql-1504"><span class="linenos">1504</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
+</span><span id="Generator.join_sql-1505"><a href="#Generator.join_sql-1505"><span class="linenos">1505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9785,10 +10173,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.lambda_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lambda_sql-1438"><a href="#Generator.lambda_sql-1438"><span class="linenos">1438</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-1439"><a href="#Generator.lambda_sql-1439"><span class="linenos">1439</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-1440"><a href="#Generator.lambda_sql-1440"><span class="linenos">1440</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-1441"><a href="#Generator.lambda_sql-1441"><span class="linenos">1441</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-1507"><a href="#Generator.lambda_sql-1507"><span class="linenos">1507</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-1508"><a href="#Generator.lambda_sql-1508"><span class="linenos">1508</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-1509"><a href="#Generator.lambda_sql-1509"><span class="linenos">1509</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-1510"><a href="#Generator.lambda_sql-1510"><span class="linenos">1510</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>
@@ -9806,23 +10194,23 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.lateral_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lateral_sql-1443"><a href="#Generator.lateral_sql-1443"><span class="linenos">1443</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-1444"><a href="#Generator.lateral_sql-1444"><span class="linenos">1444</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1445"><a href="#Generator.lateral_sql-1445"><span class="linenos">1445</span></a>
-</span><span id="Generator.lateral_sql-1446"><a href="#Generator.lateral_sql-1446"><span class="linenos">1446</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-1447"><a href="#Generator.lateral_sql-1447"><span class="linenos">1447</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-1448"><a href="#Generator.lateral_sql-1448"><span class="linenos">1448</span></a>
-</span><span id="Generator.lateral_sql-1449"><a href="#Generator.lateral_sql-1449"><span class="linenos">1449</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-1450"><a href="#Generator.lateral_sql-1450"><span class="linenos">1450</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-1451"><a href="#Generator.lateral_sql-1451"><span class="linenos">1451</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-1452"><a href="#Generator.lateral_sql-1452"><span class="linenos">1452</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-1453"><a href="#Generator.lateral_sql-1453"><span class="linenos">1453</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-1454"><a href="#Generator.lateral_sql-1454"><span class="linenos">1454</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-1455"><a href="#Generator.lateral_sql-1455"><span class="linenos">1455</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-1456"><a href="#Generator.lateral_sql-1456"><span class="linenos">1456</span></a>
-</span><span id="Generator.lateral_sql-1457"><a href="#Generator.lateral_sql-1457"><span class="linenos">1457</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-1458"><a href="#Generator.lateral_sql-1458"><span class="linenos">1458</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-1459"><a href="#Generator.lateral_sql-1459"><span class="linenos">1459</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-1512"><a href="#Generator.lateral_sql-1512"><span class="linenos">1512</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-1513"><a href="#Generator.lateral_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">sql</span><span class="p">(</span><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-1514"><a href="#Generator.lateral_sql-1514"><span class="linenos">1514</span></a>
+</span><span id="Generator.lateral_sql-1515"><a href="#Generator.lateral_sql-1515"><span class="linenos">1515</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-1516"><a href="#Generator.lateral_sql-1516"><span class="linenos">1516</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-1517"><a href="#Generator.lateral_sql-1517"><span class="linenos">1517</span></a>
+</span><span id="Generator.lateral_sql-1518"><a href="#Generator.lateral_sql-1518"><span class="linenos">1518</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-1519"><a href="#Generator.lateral_sql-1519"><span class="linenos">1519</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-1520"><a href="#Generator.lateral_sql-1520"><span class="linenos">1520</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-1521"><a href="#Generator.lateral_sql-1521"><span class="linenos">1521</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-1522"><a href="#Generator.lateral_sql-1522"><span class="linenos">1522</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-1523"><a href="#Generator.lateral_sql-1523"><span class="linenos">1523</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-1524"><a href="#Generator.lateral_sql-1524"><span class="linenos">1524</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-1525"><a href="#Generator.lateral_sql-1525"><span class="linenos">1525</span></a>
+</span><span id="Generator.lateral_sql-1526"><a href="#Generator.lateral_sql-1526"><span class="linenos">1526</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-1527"><a href="#Generator.lateral_sql-1527"><span class="linenos">1527</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-1528"><a href="#Generator.lateral_sql-1528"><span class="linenos">1528</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>
@@ -9840,17 +10228,17 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.limit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.limit_sql-1461"><a href="#Generator.limit_sql-1461"><span class="linenos">1461</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.limit_sql-1462"><a href="#Generator.limit_sql-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">sql</span><span class="p">(</span><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-1463"><a href="#Generator.limit_sql-1463"><span class="linenos">1463</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.limit_sql-1464"><a href="#Generator.limit_sql-1464"><span class="linenos">1464</span></a> <span class="n">sql</span>
-</span><span id="Generator.limit_sql-1465"><a href="#Generator.limit_sql-1465"><span class="linenos">1465</span></a> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator.limit_sql-1466"><a href="#Generator.limit_sql-1466"><span class="linenos">1466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Generator.limit_sql-1467"><a href="#Generator.limit_sql-1467"><span class="linenos">1467</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;expression&quot;</span><span class="p">),</span>
-</span><span id="Generator.limit_sql-1468"><a href="#Generator.limit_sql-1468"><span class="linenos">1468</span></a> <span class="p">)</span>
-</span><span id="Generator.limit_sql-1469"><a href="#Generator.limit_sql-1469"><span class="linenos">1469</span></a> <span class="k">if</span> <span class="n">sql</span>
-</span><span id="Generator.limit_sql-1470"><a href="#Generator.limit_sql-1470"><span class="linenos">1470</span></a> <span class="p">)</span>
-</span><span id="Generator.limit_sql-1471"><a href="#Generator.limit_sql-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="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.limit_sql-1530"><a href="#Generator.limit_sql-1530"><span class="linenos">1530</span></a> <span class="k">def</span> <span class="nf">limit_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.limit_sql-1531"><a href="#Generator.limit_sql-1531"><span class="linenos">1531</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1532"><a href="#Generator.limit_sql-1532"><span class="linenos">1532</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.limit_sql-1533"><a href="#Generator.limit_sql-1533"><span class="linenos">1533</span></a> <span class="n">sql</span>
+</span><span id="Generator.limit_sql-1534"><a href="#Generator.limit_sql-1534"><span class="linenos">1534</span></a> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.limit_sql-1535"><a href="#Generator.limit_sql-1535"><span class="linenos">1535</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Generator.limit_sql-1536"><a href="#Generator.limit_sql-1536"><span class="linenos">1536</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;expression&quot;</span><span class="p">),</span>
+</span><span id="Generator.limit_sql-1537"><a href="#Generator.limit_sql-1537"><span class="linenos">1537</span></a> <span class="p">)</span>
+</span><span id="Generator.limit_sql-1538"><a href="#Generator.limit_sql-1538"><span class="linenos">1538</span></a> <span class="k">if</span> <span class="n">sql</span>
+</span><span id="Generator.limit_sql-1539"><a href="#Generator.limit_sql-1539"><span class="linenos">1539</span></a> <span class="p">)</span>
+</span><span id="Generator.limit_sql-1540"><a href="#Generator.limit_sql-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="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9868,9 +10256,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_sql-1473"><a href="#Generator.offset_sql-1473"><span class="linenos">1473</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-1474"><a href="#Generator.offset_sql-1474"><span class="linenos">1474</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1475"><a href="#Generator.offset_sql-1475"><span class="linenos">1475</span></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-1542"><a href="#Generator.offset_sql-1542"><span class="linenos">1542</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-1543"><a href="#Generator.offset_sql-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="Generator.offset_sql-1544"><a href="#Generator.offset_sql-1544"><span class="linenos">1544</span></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>
@@ -9888,15 +10276,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.setitem_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.setitem_sql-1477"><a href="#Generator.setitem_sql-1477"><span class="linenos">1477</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-1478"><a href="#Generator.setitem_sql-1478"><span class="linenos">1478</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-1479"><a href="#Generator.setitem_sql-1479"><span class="linenos">1479</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-1480"><a href="#Generator.setitem_sql-1480"><span class="linenos">1480</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1481"><a href="#Generator.setitem_sql-1481"><span class="linenos">1481</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-1482"><a href="#Generator.setitem_sql-1482"><span class="linenos">1482</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-1483"><a href="#Generator.setitem_sql-1483"><span class="linenos">1483</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-1484"><a href="#Generator.setitem_sql-1484"><span class="linenos">1484</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-1485"><a href="#Generator.setitem_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="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-1546"><a href="#Generator.setitem_sql-1546"><span class="linenos">1546</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-1547"><a href="#Generator.setitem_sql-1547"><span class="linenos">1547</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-1548"><a href="#Generator.setitem_sql-1548"><span class="linenos">1548</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-1549"><a href="#Generator.setitem_sql-1549"><span class="linenos">1549</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1550"><a href="#Generator.setitem_sql-1550"><span class="linenos">1550</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-1551"><a href="#Generator.setitem_sql-1551"><span class="linenos">1551</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-1552"><a href="#Generator.setitem_sql-1552"><span class="linenos">1552</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-1553"><a href="#Generator.setitem_sql-1553"><span class="linenos">1553</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-1554"><a href="#Generator.setitem_sql-1554"><span class="linenos">1554</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>
@@ -9914,12 +10302,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.set_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_sql-1487"><a href="#Generator.set_sql-1487"><span class="linenos">1487</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-1488"><a href="#Generator.set_sql-1488"><span class="linenos">1488</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.set_sql-1489"><a href="#Generator.set_sql-1489"><span class="linenos">1489</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-1490"><a href="#Generator.set_sql-1490"><span class="linenos">1490</span></a> <span class="p">)</span>
-</span><span id="Generator.set_sql-1491"><a href="#Generator.set_sql-1491"><span class="linenos">1491</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.set_sql-1492"><a href="#Generator.set_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="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_sql-1556"><a href="#Generator.set_sql-1556"><span class="linenos">1556</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-1557"><a href="#Generator.set_sql-1557"><span class="linenos">1557</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.set_sql-1558"><a href="#Generator.set_sql-1558"><span class="linenos">1558</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-1559"><a href="#Generator.set_sql-1559"><span class="linenos">1559</span></a> <span class="p">)</span>
+</span><span id="Generator.set_sql-1560"><a href="#Generator.set_sql-1560"><span class="linenos">1560</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.set_sql-1561"><a href="#Generator.set_sql-1561"><span class="linenos">1561</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9937,8 +10325,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.pragma_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pragma_sql-1494"><a href="#Generator.pragma_sql-1494"><span class="linenos">1494</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-1495"><a href="#Generator.pragma_sql-1495"><span class="linenos">1495</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-1563"><a href="#Generator.pragma_sql-1563"><span class="linenos">1563</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-1564"><a href="#Generator.pragma_sql-1564"><span class="linenos">1564</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>
@@ -9956,23 +10344,23 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.lock_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lock_sql-1497"><a href="#Generator.lock_sql-1497"><span class="linenos">1497</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-1498"><a href="#Generator.lock_sql-1498"><span class="linenos">1498</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1499"><a href="#Generator.lock_sql-1499"><span class="linenos">1499</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-1500"><a href="#Generator.lock_sql-1500"><span class="linenos">1500</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lock_sql-1501"><a href="#Generator.lock_sql-1501"><span class="linenos">1501</span></a>
-</span><span id="Generator.lock_sql-1502"><a href="#Generator.lock_sql-1502"><span class="linenos">1502</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
-</span><span id="Generator.lock_sql-1503"><a href="#Generator.lock_sql-1503"><span class="linenos">1503</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.lock_sql-1504"><a href="#Generator.lock_sql-1504"><span class="linenos">1504</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lock_sql-1505"><a href="#Generator.lock_sql-1505"><span class="linenos">1505</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wait&quot;</span><span class="p">)</span>
-</span><span id="Generator.lock_sql-1506"><a href="#Generator.lock_sql-1506"><span class="linenos">1506</span></a>
-</span><span id="Generator.lock_sql-1507"><a href="#Generator.lock_sql-1507"><span class="linenos">1507</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1508"><a href="#Generator.lock_sql-1508"><span class="linenos">1508</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Generator.lock_sql-1509"><a href="#Generator.lock_sql-1509"><span class="linenos">1509</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.lock_sql-1510"><a href="#Generator.lock_sql-1510"><span class="linenos">1510</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1511"><a href="#Generator.lock_sql-1511"><span class="linenos">1511</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
-</span><span id="Generator.lock_sql-1512"><a href="#Generator.lock_sql-1512"><span class="linenos">1512</span></a>
-</span><span id="Generator.lock_sql-1513"><a href="#Generator.lock_sql-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="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lock_sql-1566"><a href="#Generator.lock_sql-1566"><span class="linenos">1566</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-1567"><a href="#Generator.lock_sql-1567"><span class="linenos">1567</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1568"><a href="#Generator.lock_sql-1568"><span class="linenos">1568</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-1569"><a href="#Generator.lock_sql-1569"><span class="linenos">1569</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lock_sql-1570"><a href="#Generator.lock_sql-1570"><span class="linenos">1570</span></a>
+</span><span id="Generator.lock_sql-1571"><a href="#Generator.lock_sql-1571"><span class="linenos">1571</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
+</span><span id="Generator.lock_sql-1572"><a href="#Generator.lock_sql-1572"><span class="linenos">1572</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.lock_sql-1573"><a href="#Generator.lock_sql-1573"><span class="linenos">1573</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lock_sql-1574"><a href="#Generator.lock_sql-1574"><span class="linenos">1574</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wait&quot;</span><span class="p">)</span>
+</span><span id="Generator.lock_sql-1575"><a href="#Generator.lock_sql-1575"><span class="linenos">1575</span></a>
+</span><span id="Generator.lock_sql-1576"><a href="#Generator.lock_sql-1576"><span class="linenos">1576</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1577"><a href="#Generator.lock_sql-1577"><span class="linenos">1577</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Generator.lock_sql-1578"><a href="#Generator.lock_sql-1578"><span class="linenos">1578</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.lock_sql-1579"><a href="#Generator.lock_sql-1579"><span class="linenos">1579</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1580"><a href="#Generator.lock_sql-1580"><span class="linenos">1580</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
+</span><span id="Generator.lock_sql-1581"><a href="#Generator.lock_sql-1581"><span class="linenos">1581</span></a>
+</span><span id="Generator.lock_sql-1582"><a href="#Generator.lock_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">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9990,11 +10378,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.literal_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.literal_sql-1515"><a href="#Generator.literal_sql-1515"><span class="linenos">1515</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-1516"><a href="#Generator.literal_sql-1516"><span class="linenos">1516</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-1517"><a href="#Generator.literal_sql-1517"><span class="linenos">1517</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-1518"><a href="#Generator.literal_sql-1518"><span class="linenos">1518</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="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.literal_sql-1519"><a href="#Generator.literal_sql-1519"><span class="linenos">1519</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-1584"><a href="#Generator.literal_sql-1584"><span class="linenos">1584</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-1585"><a href="#Generator.literal_sql-1585"><span class="linenos">1585</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-1586"><a href="#Generator.literal_sql-1586"><span class="linenos">1586</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-1587"><a href="#Generator.literal_sql-1587"><span class="linenos">1587</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="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.literal_sql-1588"><a href="#Generator.literal_sql-1588"><span class="linenos">1588</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -10012,13 +10400,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.escape_str"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_str-1521"><a href="#Generator.escape_str-1521"><span class="linenos">1521</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.escape_str-1522"><a href="#Generator.escape_str-1522"><span class="linenos">1522</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.escape_str-1523"><a href="#Generator.escape_str-1523"><span class="linenos">1523</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESCAPE_LINE_BREAK</span><span class="p">:</span>
-</span><span id="Generator.escape_str-1524"><a href="#Generator.escape_str-1524"><span class="linenos">1524</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="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-</span><span id="Generator.escape_str-1525"><a href="#Generator.escape_str-1525"><span class="linenos">1525</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.escape_str-1526"><a href="#Generator.escape_str-1526"><span class="linenos">1526</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
-</span><span id="Generator.escape_str-1527"><a href="#Generator.escape_str-1527"><span class="linenos">1527</span></a> <span class="k">return</span> <span class="n">text</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_str-1590"><a href="#Generator.escape_str-1590"><span class="linenos">1590</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.escape_str-1591"><a href="#Generator.escape_str-1591"><span class="linenos">1591</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.escape_str-1592"><a href="#Generator.escape_str-1592"><span class="linenos">1592</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESCAPE_LINE_BREAK</span><span class="p">:</span>
+</span><span id="Generator.escape_str-1593"><a href="#Generator.escape_str-1593"><span class="linenos">1593</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="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
+</span><span id="Generator.escape_str-1594"><a href="#Generator.escape_str-1594"><span class="linenos">1594</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.escape_str-1595"><a href="#Generator.escape_str-1595"><span class="linenos">1595</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
+</span><span id="Generator.escape_str-1596"><a href="#Generator.escape_str-1596"><span class="linenos">1596</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -10036,18 +10424,18 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.loaddata_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.loaddata_sql-1529"><a href="#Generator.loaddata_sql-1529"><span class="linenos">1529</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-1530"><a href="#Generator.loaddata_sql-1530"><span class="linenos">1530</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-1531"><a href="#Generator.loaddata_sql-1531"><span class="linenos">1531</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-1532"><a href="#Generator.loaddata_sql-1532"><span class="linenos">1532</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-1533"><a href="#Generator.loaddata_sql-1533"><span class="linenos">1533</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-1534"><a href="#Generator.loaddata_sql-1534"><span class="linenos">1534</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-1535"><a href="#Generator.loaddata_sql-1535"><span class="linenos">1535</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-1536"><a href="#Generator.loaddata_sql-1536"><span class="linenos">1536</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-1537"><a href="#Generator.loaddata_sql-1537"><span class="linenos">1537</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-1538"><a href="#Generator.loaddata_sql-1538"><span class="linenos">1538</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-1539"><a href="#Generator.loaddata_sql-1539"><span class="linenos">1539</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-1540"><a href="#Generator.loaddata_sql-1540"><span class="linenos">1540</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-1598"><a href="#Generator.loaddata_sql-1598"><span class="linenos">1598</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-1599"><a href="#Generator.loaddata_sql-1599"><span class="linenos">1599</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-1600"><a href="#Generator.loaddata_sql-1600"><span class="linenos">1600</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-1601"><a href="#Generator.loaddata_sql-1601"><span class="linenos">1601</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-1602"><a href="#Generator.loaddata_sql-1602"><span class="linenos">1602</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-1603"><a href="#Generator.loaddata_sql-1603"><span class="linenos">1603</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-1604"><a href="#Generator.loaddata_sql-1604"><span class="linenos">1604</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-1605"><a href="#Generator.loaddata_sql-1605"><span class="linenos">1605</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-1606"><a href="#Generator.loaddata_sql-1606"><span class="linenos">1606</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-1607"><a href="#Generator.loaddata_sql-1607"><span class="linenos">1607</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-1608"><a href="#Generator.loaddata_sql-1608"><span class="linenos">1608</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-1609"><a href="#Generator.loaddata_sql-1609"><span class="linenos">1609</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>
@@ -10065,8 +10453,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.null_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.null_sql-1542"><a href="#Generator.null_sql-1542"><span class="linenos">1542</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-1543"><a href="#Generator.null_sql-1543"><span class="linenos">1543</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-1611"><a href="#Generator.null_sql-1611"><span class="linenos">1611</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-1612"><a href="#Generator.null_sql-1612"><span class="linenos">1612</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
</span></pre></div>
@@ -10084,8 +10472,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.boolean_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.boolean_sql-1545"><a href="#Generator.boolean_sql-1545"><span class="linenos">1545</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-1546"><a href="#Generator.boolean_sql-1546"><span class="linenos">1546</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-1614"><a href="#Generator.boolean_sql-1614"><span class="linenos">1614</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-1615"><a href="#Generator.boolean_sql-1615"><span class="linenos">1615</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>
@@ -10103,10 +10491,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.order_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.order_sql-1548"><a href="#Generator.order_sql-1548"><span class="linenos">1548</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-1549"><a href="#Generator.order_sql-1549"><span class="linenos">1549</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1550"><a href="#Generator.order_sql-1550"><span class="linenos">1550</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-1551"><a href="#Generator.order_sql-1551"><span class="linenos">1551</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-1617"><a href="#Generator.order_sql-1617"><span class="linenos">1617</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-1618"><a href="#Generator.order_sql-1618"><span class="linenos">1618</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1619"><a href="#Generator.order_sql-1619"><span class="linenos">1619</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-1620"><a href="#Generator.order_sql-1620"><span class="linenos">1620</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>
@@ -10124,8 +10512,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.cluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cluster_sql-1553"><a href="#Generator.cluster_sql-1553"><span class="linenos">1553</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-1554"><a href="#Generator.cluster_sql-1554"><span class="linenos">1554</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-1622"><a href="#Generator.cluster_sql-1622"><span class="linenos">1622</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-1623"><a href="#Generator.cluster_sql-1623"><span class="linenos">1623</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>
@@ -10143,8 +10531,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.distribute_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distribute_sql-1556"><a href="#Generator.distribute_sql-1556"><span class="linenos">1556</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-1557"><a href="#Generator.distribute_sql-1557"><span class="linenos">1557</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-1625"><a href="#Generator.distribute_sql-1625"><span class="linenos">1625</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-1626"><a href="#Generator.distribute_sql-1626"><span class="linenos">1626</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>
@@ -10162,8 +10550,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.sort_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sort_sql-1559"><a href="#Generator.sort_sql-1559"><span class="linenos">1559</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-1560"><a href="#Generator.sort_sql-1560"><span class="linenos">1560</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-1628"><a href="#Generator.sort_sql-1628"><span class="linenos">1628</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-1629"><a href="#Generator.sort_sql-1629"><span class="linenos">1629</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>
@@ -10181,36 +10569,36 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.ordered_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ordered_sql-1562"><a href="#Generator.ordered_sql-1562"><span class="linenos">1562</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-1563"><a href="#Generator.ordered_sql-1563"><span class="linenos">1563</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-1564"><a href="#Generator.ordered_sql-1564"><span class="linenos">1564</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-1565"><a href="#Generator.ordered_sql-1565"><span class="linenos">1565</span></a>
-</span><span id="Generator.ordered_sql-1566"><a href="#Generator.ordered_sql-1566"><span class="linenos">1566</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-1567"><a href="#Generator.ordered_sql-1567"><span class="linenos">1567</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-1568"><a href="#Generator.ordered_sql-1568"><span class="linenos">1568</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-1569"><a href="#Generator.ordered_sql-1569"><span class="linenos">1569</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-1570"><a href="#Generator.ordered_sql-1570"><span class="linenos">1570</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-1571"><a href="#Generator.ordered_sql-1571"><span class="linenos">1571</span></a>
-</span><span id="Generator.ordered_sql-1572"><a href="#Generator.ordered_sql-1572"><span class="linenos">1572</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-1573"><a href="#Generator.ordered_sql-1573"><span class="linenos">1573</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-1574"><a href="#Generator.ordered_sql-1574"><span class="linenos">1574</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-1575"><a href="#Generator.ordered_sql-1575"><span class="linenos">1575</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-1576"><a href="#Generator.ordered_sql-1576"><span class="linenos">1576</span></a> <span class="p">):</span>
-</span><span id="Generator.ordered_sql-1577"><a href="#Generator.ordered_sql-1577"><span class="linenos">1577</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-1578"><a href="#Generator.ordered_sql-1578"><span class="linenos">1578</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Generator.ordered_sql-1579"><a href="#Generator.ordered_sql-1579"><span class="linenos">1579</span></a> <span class="n">nulls_last</span>
-</span><span id="Generator.ordered_sql-1580"><a href="#Generator.ordered_sql-1580"><span class="linenos">1580</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-1581"><a href="#Generator.ordered_sql-1581"><span class="linenos">1581</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-1582"><a href="#Generator.ordered_sql-1582"><span class="linenos">1582</span></a> <span class="p">):</span>
-</span><span id="Generator.ordered_sql-1583"><a href="#Generator.ordered_sql-1583"><span class="linenos">1583</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-1584"><a href="#Generator.ordered_sql-1584"><span class="linenos">1584</span></a>
-</span><span id="Generator.ordered_sql-1585"><a href="#Generator.ordered_sql-1585"><span class="linenos">1585</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-1586"><a href="#Generator.ordered_sql-1586"><span class="linenos">1586</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-1587"><a href="#Generator.ordered_sql-1587"><span class="linenos">1587</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-1588"><a href="#Generator.ordered_sql-1588"><span class="linenos">1588</span></a> <span class="p">)</span>
-</span><span id="Generator.ordered_sql-1589"><a href="#Generator.ordered_sql-1589"><span class="linenos">1589</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-1590"><a href="#Generator.ordered_sql-1590"><span class="linenos">1590</span></a>
-</span><span id="Generator.ordered_sql-1591"><a href="#Generator.ordered_sql-1591"><span class="linenos">1591</span></a> <span class="k">return</span> <span class="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-1631"><a href="#Generator.ordered_sql-1631"><span class="linenos">1631</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-1632"><a href="#Generator.ordered_sql-1632"><span class="linenos">1632</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-1633"><a href="#Generator.ordered_sql-1633"><span class="linenos">1633</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-1634"><a href="#Generator.ordered_sql-1634"><span class="linenos">1634</span></a>
+</span><span id="Generator.ordered_sql-1635"><a href="#Generator.ordered_sql-1635"><span class="linenos">1635</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-1636"><a href="#Generator.ordered_sql-1636"><span class="linenos">1636</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-1637"><a href="#Generator.ordered_sql-1637"><span class="linenos">1637</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-1638"><a href="#Generator.ordered_sql-1638"><span class="linenos">1638</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-1639"><a href="#Generator.ordered_sql-1639"><span class="linenos">1639</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-1640"><a href="#Generator.ordered_sql-1640"><span class="linenos">1640</span></a>
+</span><span id="Generator.ordered_sql-1641"><a href="#Generator.ordered_sql-1641"><span class="linenos">1641</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-1642"><a href="#Generator.ordered_sql-1642"><span class="linenos">1642</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-1643"><a href="#Generator.ordered_sql-1643"><span class="linenos">1643</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-1644"><a href="#Generator.ordered_sql-1644"><span class="linenos">1644</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-1645"><a href="#Generator.ordered_sql-1645"><span class="linenos">1645</span></a> <span class="p">):</span>
+</span><span id="Generator.ordered_sql-1646"><a href="#Generator.ordered_sql-1646"><span class="linenos">1646</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-1647"><a href="#Generator.ordered_sql-1647"><span class="linenos">1647</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Generator.ordered_sql-1648"><a href="#Generator.ordered_sql-1648"><span class="linenos">1648</span></a> <span class="n">nulls_last</span>
+</span><span id="Generator.ordered_sql-1649"><a href="#Generator.ordered_sql-1649"><span class="linenos">1649</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-1650"><a href="#Generator.ordered_sql-1650"><span class="linenos">1650</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-1651"><a href="#Generator.ordered_sql-1651"><span class="linenos">1651</span></a> <span class="p">):</span>
+</span><span id="Generator.ordered_sql-1652"><a href="#Generator.ordered_sql-1652"><span class="linenos">1652</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-1653"><a href="#Generator.ordered_sql-1653"><span class="linenos">1653</span></a>
+</span><span id="Generator.ordered_sql-1654"><a href="#Generator.ordered_sql-1654"><span class="linenos">1654</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-1655"><a href="#Generator.ordered_sql-1655"><span class="linenos">1655</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-1656"><a href="#Generator.ordered_sql-1656"><span class="linenos">1656</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-1657"><a href="#Generator.ordered_sql-1657"><span class="linenos">1657</span></a> <span class="p">)</span>
+</span><span id="Generator.ordered_sql-1658"><a href="#Generator.ordered_sql-1658"><span class="linenos">1658</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-1659"><a href="#Generator.ordered_sql-1659"><span class="linenos">1659</span></a>
+</span><span id="Generator.ordered_sql-1660"><a href="#Generator.ordered_sql-1660"><span class="linenos">1660</span></a> <span class="k">return</span> <span class="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>
@@ -10228,37 +10616,37 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.matchrecognize_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchrecognize_sql-1593"><a href="#Generator.matchrecognize_sql-1593"><span class="linenos">1593</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-1594"><a href="#Generator.matchrecognize_sql-1594"><span class="linenos">1594</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-1595"><a href="#Generator.matchrecognize_sql-1595"><span class="linenos">1595</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-1596"><a href="#Generator.matchrecognize_sql-1596"><span class="linenos">1596</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-1597"><a href="#Generator.matchrecognize_sql-1597"><span class="linenos">1597</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-1598"><a href="#Generator.matchrecognize_sql-1598"><span class="linenos">1598</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-1599"><a href="#Generator.matchrecognize_sql-1599"><span class="linenos">1599</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-1600"><a href="#Generator.matchrecognize_sql-1600"><span class="linenos">1600</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-1601"><a href="#Generator.matchrecognize_sql-1601"><span class="linenos">1601</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-1602"><a href="#Generator.matchrecognize_sql-1602"><span class="linenos">1602</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-1603"><a href="#Generator.matchrecognize_sql-1603"><span class="linenos">1603</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-1604"><a href="#Generator.matchrecognize_sql-1604"><span class="linenos">1604</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.matchrecognize_sql-1605"><a href="#Generator.matchrecognize_sql-1605"><span class="linenos">1605</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-1606"><a href="#Generator.matchrecognize_sql-1606"><span class="linenos">1606</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-1607"><a href="#Generator.matchrecognize_sql-1607"><span class="linenos">1607</span></a> <span class="p">]</span>
-</span><span id="Generator.matchrecognize_sql-1608"><a href="#Generator.matchrecognize_sql-1608"><span class="linenos">1608</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-1609"><a href="#Generator.matchrecognize_sql-1609"><span class="linenos">1609</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-1610"><a href="#Generator.matchrecognize_sql-1610"><span class="linenos">1610</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-1611"><a href="#Generator.matchrecognize_sql-1611"><span class="linenos">1611</span></a> <span class="p">(</span>
-</span><span id="Generator.matchrecognize_sql-1612"><a href="#Generator.matchrecognize_sql-1612"><span class="linenos">1612</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1613"><a href="#Generator.matchrecognize_sql-1613"><span class="linenos">1613</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1614"><a href="#Generator.matchrecognize_sql-1614"><span class="linenos">1614</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1615"><a href="#Generator.matchrecognize_sql-1615"><span class="linenos">1615</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1616"><a href="#Generator.matchrecognize_sql-1616"><span class="linenos">1616</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1617"><a href="#Generator.matchrecognize_sql-1617"><span class="linenos">1617</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1618"><a href="#Generator.matchrecognize_sql-1618"><span class="linenos">1618</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1619"><a href="#Generator.matchrecognize_sql-1619"><span class="linenos">1619</span></a> <span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-1620"><a href="#Generator.matchrecognize_sql-1620"><span class="linenos">1620</span></a> <span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-1621"><a href="#Generator.matchrecognize_sql-1621"><span class="linenos">1621</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-1622"><a href="#Generator.matchrecognize_sql-1622"><span class="linenos">1622</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-1623"><a href="#Generator.matchrecognize_sql-1623"><span class="linenos">1623</span></a> <span class="k">return</span> <span class="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-1662"><a href="#Generator.matchrecognize_sql-1662"><span class="linenos">1662</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-1663"><a href="#Generator.matchrecognize_sql-1663"><span class="linenos">1663</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-1664"><a href="#Generator.matchrecognize_sql-1664"><span class="linenos">1664</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-1665"><a href="#Generator.matchrecognize_sql-1665"><span class="linenos">1665</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-1666"><a href="#Generator.matchrecognize_sql-1666"><span class="linenos">1666</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-1667"><a href="#Generator.matchrecognize_sql-1667"><span class="linenos">1667</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-1668"><a href="#Generator.matchrecognize_sql-1668"><span class="linenos">1668</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-1669"><a href="#Generator.matchrecognize_sql-1669"><span class="linenos">1669</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-1670"><a href="#Generator.matchrecognize_sql-1670"><span class="linenos">1670</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-1671"><a href="#Generator.matchrecognize_sql-1671"><span class="linenos">1671</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-1672"><a href="#Generator.matchrecognize_sql-1672"><span class="linenos">1672</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-1673"><a href="#Generator.matchrecognize_sql-1673"><span class="linenos">1673</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.matchrecognize_sql-1674"><a href="#Generator.matchrecognize_sql-1674"><span class="linenos">1674</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-1675"><a href="#Generator.matchrecognize_sql-1675"><span class="linenos">1675</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-1676"><a href="#Generator.matchrecognize_sql-1676"><span class="linenos">1676</span></a> <span class="p">]</span>
+</span><span id="Generator.matchrecognize_sql-1677"><a href="#Generator.matchrecognize_sql-1677"><span class="linenos">1677</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-1678"><a href="#Generator.matchrecognize_sql-1678"><span class="linenos">1678</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-1679"><a href="#Generator.matchrecognize_sql-1679"><span class="linenos">1679</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-1680"><a href="#Generator.matchrecognize_sql-1680"><span class="linenos">1680</span></a> <span class="p">(</span>
+</span><span id="Generator.matchrecognize_sql-1681"><a href="#Generator.matchrecognize_sql-1681"><span class="linenos">1681</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1682"><a href="#Generator.matchrecognize_sql-1682"><span class="linenos">1682</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1683"><a href="#Generator.matchrecognize_sql-1683"><span class="linenos">1683</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1684"><a href="#Generator.matchrecognize_sql-1684"><span class="linenos">1684</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1685"><a href="#Generator.matchrecognize_sql-1685"><span class="linenos">1685</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1686"><a href="#Generator.matchrecognize_sql-1686"><span class="linenos">1686</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1687"><a href="#Generator.matchrecognize_sql-1687"><span class="linenos">1687</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1688"><a href="#Generator.matchrecognize_sql-1688"><span class="linenos">1688</span></a> <span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-1689"><a href="#Generator.matchrecognize_sql-1689"><span class="linenos">1689</span></a> <span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-1690"><a href="#Generator.matchrecognize_sql-1690"><span class="linenos">1690</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-1691"><a href="#Generator.matchrecognize_sql-1691"><span class="linenos">1691</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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-1692"><a href="#Generator.matchrecognize_sql-1692"><span class="linenos">1692</span></a> <span class="k">return</span> <span class="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>
@@ -10276,39 +10664,40 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.query_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.query_modifiers-1625"><a href="#Generator.query_modifiers-1625"><span class="linenos">1625</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-1626"><a href="#Generator.query_modifiers-1626"><span class="linenos">1626</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.query_modifiers-1627"><a href="#Generator.query_modifiers-1627"><span class="linenos">1627</span></a>
-</span><span id="Generator.query_modifiers-1628"><a href="#Generator.query_modifiers-1628"><span class="linenos">1628</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
-</span><span id="Generator.query_modifiers-1629"><a href="#Generator.query_modifiers-1629"><span class="linenos">1629</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator.query_modifiers-1630"><a href="#Generator.query_modifiers-1630"><span class="linenos">1630</span></a>
-</span><span id="Generator.query_modifiers-1631"><a href="#Generator.query_modifiers-1631"><span class="linenos">1631</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-1632"><a href="#Generator.query_modifiers-1632"><span class="linenos">1632</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)))</span>
-</span><span id="Generator.query_modifiers-1633"><a href="#Generator.query_modifiers-1633"><span class="linenos">1633</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-1634"><a href="#Generator.query_modifiers-1634"><span class="linenos">1634</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Generator.query_modifiers-1635"><a href="#Generator.query_modifiers-1635"><span class="linenos">1635</span></a>
-</span><span id="Generator.query_modifiers-1636"><a href="#Generator.query_modifiers-1636"><span class="linenos">1636</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-1637"><a href="#Generator.query_modifiers-1637"><span class="linenos">1637</span></a>
-</span><span id="Generator.query_modifiers-1638"><a href="#Generator.query_modifiers-1638"><span class="linenos">1638</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.query_modifiers-1639"><a href="#Generator.query_modifiers-1639"><span class="linenos">1639</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
-</span><span id="Generator.query_modifiers-1640"><a href="#Generator.query_modifiers-1640"><span class="linenos">1640</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
-</span><span id="Generator.query_modifiers-1641"><a href="#Generator.query_modifiers-1641"><span class="linenos">1641</span></a> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Generator.query_modifiers-1642"><a href="#Generator.query_modifiers-1642"><span class="linenos">1642</span></a> <span class="p">)</span>
-</span><span id="Generator.query_modifiers-1643"><a href="#Generator.query_modifiers-1643"><span class="linenos">1643</span></a>
-</span><span id="Generator.query_modifiers-1644"><a href="#Generator.query_modifiers-1644"><span class="linenos">1644</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator.query_modifiers-1645"><a href="#Generator.query_modifiers-1645"><span class="linenos">1645</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-1646"><a href="#Generator.query_modifiers-1646"><span class="linenos">1646</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator.query_modifiers-1647"><a href="#Generator.query_modifiers-1647"><span class="linenos">1647</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-1648"><a href="#Generator.query_modifiers-1648"><span class="linenos">1648</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator.query_modifiers-1649"><a href="#Generator.query_modifiers-1649"><span class="linenos">1649</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-1650"><a href="#Generator.query_modifiers-1650"><span class="linenos">1650</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-1651"><a href="#Generator.query_modifiers-1651"><span class="linenos">1651</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-1652"><a href="#Generator.query_modifiers-1652"><span class="linenos">1652</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-1653"><a href="#Generator.query_modifiers-1653"><span class="linenos">1653</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-1654"><a href="#Generator.query_modifiers-1654"><span class="linenos">1654</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-1655"><a href="#Generator.query_modifiers-1655"><span class="linenos">1655</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-1656"><a href="#Generator.query_modifiers-1656"><span class="linenos">1656</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-1657"><a href="#Generator.query_modifiers-1657"><span class="linenos">1657</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.query_modifiers-1694"><a href="#Generator.query_modifiers-1694"><span class="linenos">1694</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-1695"><a href="#Generator.query_modifiers-1695"><span class="linenos">1695</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.query_modifiers-1696"><a href="#Generator.query_modifiers-1696"><span class="linenos">1696</span></a>
+</span><span id="Generator.query_modifiers-1697"><a href="#Generator.query_modifiers-1697"><span class="linenos">1697</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
+</span><span id="Generator.query_modifiers-1698"><a href="#Generator.query_modifiers-1698"><span class="linenos">1698</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator.query_modifiers-1699"><a href="#Generator.query_modifiers-1699"><span class="linenos">1699</span></a>
+</span><span id="Generator.query_modifiers-1700"><a href="#Generator.query_modifiers-1700"><span class="linenos">1700</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-1701"><a href="#Generator.query_modifiers-1701"><span class="linenos">1701</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)))</span>
+</span><span id="Generator.query_modifiers-1702"><a href="#Generator.query_modifiers-1702"><span class="linenos">1702</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-1703"><a href="#Generator.query_modifiers-1703"><span class="linenos">1703</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Generator.query_modifiers-1704"><a href="#Generator.query_modifiers-1704"><span class="linenos">1704</span></a>
+</span><span id="Generator.query_modifiers-1705"><a href="#Generator.query_modifiers-1705"><span class="linenos">1705</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-1706"><a href="#Generator.query_modifiers-1706"><span class="linenos">1706</span></a>
+</span><span id="Generator.query_modifiers-1707"><a href="#Generator.query_modifiers-1707"><span class="linenos">1707</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.query_modifiers-1708"><a href="#Generator.query_modifiers-1708"><span class="linenos">1708</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
+</span><span id="Generator.query_modifiers-1709"><a href="#Generator.query_modifiers-1709"><span class="linenos">1709</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
+</span><span id="Generator.query_modifiers-1710"><a href="#Generator.query_modifiers-1710"><span class="linenos">1710</span></a> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="Generator.query_modifiers-1711"><a href="#Generator.query_modifiers-1711"><span class="linenos">1711</span></a> <span class="p">)</span>
+</span><span id="Generator.query_modifiers-1712"><a href="#Generator.query_modifiers-1712"><span class="linenos">1712</span></a>
+</span><span id="Generator.query_modifiers-1713"><a href="#Generator.query_modifiers-1713"><span class="linenos">1713</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator.query_modifiers-1714"><a href="#Generator.query_modifiers-1714"><span class="linenos">1714</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-1715"><a href="#Generator.query_modifiers-1715"><span class="linenos">1715</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator.query_modifiers-1716"><a href="#Generator.query_modifiers-1716"><span class="linenos">1716</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;connect&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-1717"><a href="#Generator.query_modifiers-1717"><span class="linenos">1717</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-1718"><a href="#Generator.query_modifiers-1718"><span class="linenos">1718</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator.query_modifiers-1719"><a href="#Generator.query_modifiers-1719"><span class="linenos">1719</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-1720"><a href="#Generator.query_modifiers-1720"><span class="linenos">1720</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-1721"><a href="#Generator.query_modifiers-1721"><span class="linenos">1721</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-1722"><a href="#Generator.query_modifiers-1722"><span class="linenos">1722</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-1723"><a href="#Generator.query_modifiers-1723"><span class="linenos">1723</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-1724"><a href="#Generator.query_modifiers-1724"><span class="linenos">1724</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-1725"><a href="#Generator.query_modifiers-1725"><span class="linenos">1725</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-1726"><a href="#Generator.query_modifiers-1726"><span class="linenos">1726</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-1727"><a href="#Generator.query_modifiers-1727"><span class="linenos">1727</span></a> <span class="p">)</span>
</span></pre></div>
@@ -10326,13 +10715,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.offset_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_limit_modifiers-1659"><a href="#Generator.offset_limit_modifiers-1659"><span class="linenos">1659</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Generator.offset_limit_modifiers-1660"><a href="#Generator.offset_limit_modifiers-1660"><span class="linenos">1660</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Generator.offset_limit_modifiers-1661"><a href="#Generator.offset_limit_modifiers-1661"><span class="linenos">1661</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.offset_limit_modifiers-1662"><a href="#Generator.offset_limit_modifiers-1662"><span class="linenos">1662</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator.offset_limit_modifiers-1663"><a href="#Generator.offset_limit_modifiers-1663"><span class="linenos">1663</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Generator.offset_limit_modifiers-1664"><a href="#Generator.offset_limit_modifiers-1664"><span class="linenos">1664</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Generator.offset_limit_modifiers-1665"><a href="#Generator.offset_limit_modifiers-1665"><span class="linenos">1665</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_limit_modifiers-1729"><a href="#Generator.offset_limit_modifiers-1729"><span class="linenos">1729</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Generator.offset_limit_modifiers-1730"><a href="#Generator.offset_limit_modifiers-1730"><span class="linenos">1730</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Generator.offset_limit_modifiers-1731"><a href="#Generator.offset_limit_modifiers-1731"><span class="linenos">1731</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.offset_limit_modifiers-1732"><a href="#Generator.offset_limit_modifiers-1732"><span class="linenos">1732</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator.offset_limit_modifiers-1733"><a href="#Generator.offset_limit_modifiers-1733"><span class="linenos">1733</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Generator.offset_limit_modifiers-1734"><a href="#Generator.offset_limit_modifiers-1734"><span class="linenos">1734</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Generator.offset_limit_modifiers-1735"><a href="#Generator.offset_limit_modifiers-1735"><span class="linenos">1735</span></a> <span class="p">]</span>
</span></pre></div>
@@ -10350,16 +10739,16 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.after_having_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_having_modifiers-1667"><a href="#Generator.after_having_modifiers-1667"><span class="linenos">1667</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.after_having_modifiers-1668"><a href="#Generator.after_having_modifiers-1668"><span class="linenos">1668</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator.after_having_modifiers-1669"><a href="#Generator.after_having_modifiers-1669"><span class="linenos">1669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;qualify&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-1670"><a href="#Generator.after_having_modifiers-1670"><span class="linenos">1670</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.after_having_modifiers-1671"><a href="#Generator.after_having_modifiers-1671"><span class="linenos">1671</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
-</span><span id="Generator.after_having_modifiers-1672"><a href="#Generator.after_having_modifiers-1672"><span class="linenos">1672</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.after_having_modifiers-1673"><a href="#Generator.after_having_modifiers-1673"><span class="linenos">1673</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;distribute&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-1674"><a href="#Generator.after_having_modifiers-1674"><span class="linenos">1674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sort&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-1675"><a href="#Generator.after_having_modifiers-1675"><span class="linenos">1675</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;cluster&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-1676"><a href="#Generator.after_having_modifiers-1676"><span class="linenos">1676</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_having_modifiers-1737"><a href="#Generator.after_having_modifiers-1737"><span class="linenos">1737</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.after_having_modifiers-1738"><a href="#Generator.after_having_modifiers-1738"><span class="linenos">1738</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator.after_having_modifiers-1739"><a href="#Generator.after_having_modifiers-1739"><span class="linenos">1739</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;qualify&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-1740"><a href="#Generator.after_having_modifiers-1740"><span class="linenos">1740</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.after_having_modifiers-1741"><a href="#Generator.after_having_modifiers-1741"><span class="linenos">1741</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
+</span><span id="Generator.after_having_modifiers-1742"><a href="#Generator.after_having_modifiers-1742"><span class="linenos">1742</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.after_having_modifiers-1743"><a href="#Generator.after_having_modifiers-1743"><span class="linenos">1743</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;distribute&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-1744"><a href="#Generator.after_having_modifiers-1744"><span class="linenos">1744</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sort&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-1745"><a href="#Generator.after_having_modifiers-1745"><span class="linenos">1745</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;cluster&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-1746"><a href="#Generator.after_having_modifiers-1746"><span class="linenos">1746</span></a> <span class="p">]</span>
</span></pre></div>
@@ -10377,10 +10766,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.after_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_limit_modifiers-1678"><a href="#Generator.after_limit_modifiers-1678"><span class="linenos">1678</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.after_limit_modifiers-1679"><a href="#Generator.after_limit_modifiers-1679"><span class="linenos">1679</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.after_limit_modifiers-1680"><a href="#Generator.after_limit_modifiers-1680"><span class="linenos">1680</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.after_limit_modifiers-1681"><a href="#Generator.after_limit_modifiers-1681"><span class="linenos">1681</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_limit_modifiers-1748"><a href="#Generator.after_limit_modifiers-1748"><span class="linenos">1748</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.after_limit_modifiers-1749"><a href="#Generator.after_limit_modifiers-1749"><span class="linenos">1749</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.after_limit_modifiers-1750"><a href="#Generator.after_limit_modifiers-1750"><span class="linenos">1750</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.after_limit_modifiers-1751"><a href="#Generator.after_limit_modifiers-1751"><span class="linenos">1751</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
</span></pre></div>
@@ -10398,49 +10787,49 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.select_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.select_sql-1683"><a href="#Generator.select_sql-1683"><span class="linenos">1683</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-1684"><a href="#Generator.select_sql-1684"><span class="linenos">1684</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-1685"><a href="#Generator.select_sql-1685"><span class="linenos">1685</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-1686"><a href="#Generator.select_sql-1686"><span class="linenos">1686</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-1687"><a href="#Generator.select_sql-1687"><span class="linenos">1687</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator.select_sql-1688"><a href="#Generator.select_sql-1688"><span class="linenos">1688</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.select_sql-1689"><a href="#Generator.select_sql-1689"><span class="linenos">1689</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.select_sql-1690"><a href="#Generator.select_sql-1690"><span class="linenos">1690</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.select_sql-1691"><a href="#Generator.select_sql-1691"><span class="linenos">1691</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator.select_sql-1692"><a href="#Generator.select_sql-1692"><span class="linenos">1692</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-1693"><a href="#Generator.select_sql-1693"><span class="linenos">1693</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1694"><a href="#Generator.select_sql-1694"><span class="linenos">1694</span></a>
-</span><span id="Generator.select_sql-1695"><a href="#Generator.select_sql-1695"><span class="linenos">1695</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-1696"><a href="#Generator.select_sql-1696"><span class="linenos">1696</span></a>
-</span><span id="Generator.select_sql-1697"><a href="#Generator.select_sql-1697"><span class="linenos">1697</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator.select_sql-1698"><a href="#Generator.select_sql-1698"><span class="linenos">1698</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
-</span><span id="Generator.select_sql-1699"><a href="#Generator.select_sql-1699"><span class="linenos">1699</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.select_sql-1700"><a href="#Generator.select_sql-1700"><span class="linenos">1700</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.select_sql-1701"><a href="#Generator.select_sql-1701"><span class="linenos">1701</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
-</span><span id="Generator.select_sql-1702"><a href="#Generator.select_sql-1702"><span class="linenos">1702</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="Generator.select_sql-1703"><a href="#Generator.select_sql-1703"><span class="linenos">1703</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator.select_sql-1704"><a href="#Generator.select_sql-1704"><span class="linenos">1704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.select_sql-1705"><a href="#Generator.select_sql-1705"><span class="linenos">1705</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="Generator.select_sql-1706"><a href="#Generator.select_sql-1706"><span class="linenos">1706</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator.select_sql-1707"><a href="#Generator.select_sql-1707"><span class="linenos">1707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
-</span><span id="Generator.select_sql-1708"><a href="#Generator.select_sql-1708"><span class="linenos">1708</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="Generator.select_sql-1709"><a href="#Generator.select_sql-1709"><span class="linenos">1709</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1710"><a href="#Generator.select_sql-1710"><span class="linenos">1710</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator.select_sql-1711"><a href="#Generator.select_sql-1711"><span class="linenos">1711</span></a> <span class="p">]</span>
-</span><span id="Generator.select_sql-1712"><a href="#Generator.select_sql-1712"><span class="linenos">1712</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1713"><a href="#Generator.select_sql-1713"><span class="linenos">1713</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1714"><a href="#Generator.select_sql-1714"><span class="linenos">1714</span></a> <span class="p">]</span>
-</span><span id="Generator.select_sql-1715"><a href="#Generator.select_sql-1715"><span class="linenos">1715</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1716"><a href="#Generator.select_sql-1716"><span class="linenos">1716</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-1717"><a href="#Generator.select_sql-1717"><span class="linenos">1717</span></a>
-</span><span id="Generator.select_sql-1718"><a href="#Generator.select_sql-1718"><span class="linenos">1718</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-1719"><a href="#Generator.select_sql-1719"><span class="linenos">1719</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-1720"><a href="#Generator.select_sql-1720"><span class="linenos">1720</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.select_sql-1721"><a href="#Generator.select_sql-1721"><span class="linenos">1721</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator.select_sql-1722"><a href="#Generator.select_sql-1722"><span class="linenos">1722</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-1723"><a href="#Generator.select_sql-1723"><span class="linenos">1723</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-1724"><a href="#Generator.select_sql-1724"><span class="linenos">1724</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1725"><a href="#Generator.select_sql-1725"><span class="linenos">1725</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-1753"><a href="#Generator.select_sql-1753"><span class="linenos">1753</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-1754"><a href="#Generator.select_sql-1754"><span class="linenos">1754</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-1755"><a href="#Generator.select_sql-1755"><span class="linenos">1755</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-1756"><a href="#Generator.select_sql-1756"><span class="linenos">1756</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-1757"><a href="#Generator.select_sql-1757"><span class="linenos">1757</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator.select_sql-1758"><a href="#Generator.select_sql-1758"><span class="linenos">1758</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.select_sql-1759"><a href="#Generator.select_sql-1759"><span class="linenos">1759</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.select_sql-1760"><a href="#Generator.select_sql-1760"><span class="linenos">1760</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.select_sql-1761"><a href="#Generator.select_sql-1761"><span class="linenos">1761</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator.select_sql-1762"><a href="#Generator.select_sql-1762"><span class="linenos">1762</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-1763"><a href="#Generator.select_sql-1763"><span class="linenos">1763</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1764"><a href="#Generator.select_sql-1764"><span class="linenos">1764</span></a>
+</span><span id="Generator.select_sql-1765"><a href="#Generator.select_sql-1765"><span class="linenos">1765</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-1766"><a href="#Generator.select_sql-1766"><span class="linenos">1766</span></a>
+</span><span id="Generator.select_sql-1767"><a href="#Generator.select_sql-1767"><span class="linenos">1767</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator.select_sql-1768"><a href="#Generator.select_sql-1768"><span class="linenos">1768</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
+</span><span id="Generator.select_sql-1769"><a href="#Generator.select_sql-1769"><span class="linenos">1769</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.select_sql-1770"><a href="#Generator.select_sql-1770"><span class="linenos">1770</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.select_sql-1771"><a href="#Generator.select_sql-1771"><span class="linenos">1771</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
+</span><span id="Generator.select_sql-1772"><a href="#Generator.select_sql-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">expressions</span><span class="p">(</span>
+</span><span id="Generator.select_sql-1773"><a href="#Generator.select_sql-1773"><span class="linenos">1773</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator.select_sql-1774"><a href="#Generator.select_sql-1774"><span class="linenos">1774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.select_sql-1775"><a href="#Generator.select_sql-1775"><span class="linenos">1775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="Generator.select_sql-1776"><a href="#Generator.select_sql-1776"><span class="linenos">1776</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator.select_sql-1777"><a href="#Generator.select_sql-1777"><span class="linenos">1777</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
+</span><span id="Generator.select_sql-1778"><a href="#Generator.select_sql-1778"><span class="linenos">1778</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="Generator.select_sql-1779"><a href="#Generator.select_sql-1779"><span class="linenos">1779</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1780"><a href="#Generator.select_sql-1780"><span class="linenos">1780</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator.select_sql-1781"><a href="#Generator.select_sql-1781"><span class="linenos">1781</span></a> <span class="p">]</span>
+</span><span id="Generator.select_sql-1782"><a href="#Generator.select_sql-1782"><span class="linenos">1782</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1783"><a href="#Generator.select_sql-1783"><span class="linenos">1783</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1784"><a href="#Generator.select_sql-1784"><span class="linenos">1784</span></a> <span class="p">]</span>
+</span><span id="Generator.select_sql-1785"><a href="#Generator.select_sql-1785"><span class="linenos">1785</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1786"><a href="#Generator.select_sql-1786"><span class="linenos">1786</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-1787"><a href="#Generator.select_sql-1787"><span class="linenos">1787</span></a>
+</span><span id="Generator.select_sql-1788"><a href="#Generator.select_sql-1788"><span class="linenos">1788</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-1789"><a href="#Generator.select_sql-1789"><span class="linenos">1789</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-1790"><a href="#Generator.select_sql-1790"><span class="linenos">1790</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.select_sql-1791"><a href="#Generator.select_sql-1791"><span class="linenos">1791</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator.select_sql-1792"><a href="#Generator.select_sql-1792"><span class="linenos">1792</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-1793"><a href="#Generator.select_sql-1793"><span class="linenos">1793</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-1794"><a href="#Generator.select_sql-1794"><span class="linenos">1794</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1795"><a href="#Generator.select_sql-1795"><span class="linenos">1795</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>
@@ -10458,11 +10847,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.schema_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_sql-1727"><a href="#Generator.schema_sql-1727"><span class="linenos">1727</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-1728"><a href="#Generator.schema_sql-1728"><span class="linenos">1728</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1729"><a href="#Generator.schema_sql-1729"><span class="linenos">1729</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-1730"><a href="#Generator.schema_sql-1730"><span class="linenos">1730</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.schema_sql-1731"><a href="#Generator.schema_sql-1731"><span class="linenos">1731</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">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-1797"><a href="#Generator.schema_sql-1797"><span class="linenos">1797</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-1798"><a href="#Generator.schema_sql-1798"><span class="linenos">1798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1799"><a href="#Generator.schema_sql-1799"><span class="linenos">1799</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-1800"><a href="#Generator.schema_sql-1800"><span class="linenos">1800</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.schema_sql-1801"><a href="#Generator.schema_sql-1801"><span class="linenos">1801</span></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>
@@ -10480,8 +10869,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.schema_columns_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_columns_sql-1733"><a href="#Generator.schema_columns_sql-1733"><span class="linenos">1733</span></a> <span class="k">def</span> <span class="nf">schema_columns_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.schema_columns_sql-1734"><a href="#Generator.schema_columns_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">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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_columns_sql-1803"><a href="#Generator.schema_columns_sql-1803"><span class="linenos">1803</span></a> <span class="k">def</span> <span class="nf">schema_columns_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.schema_columns_sql-1804"><a href="#Generator.schema_columns_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="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></pre></div>
@@ -10499,12 +10888,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.star_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.star_sql-1736"><a href="#Generator.star_sql-1736"><span class="linenos">1736</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-1737"><a href="#Generator.star_sql-1737"><span class="linenos">1737</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-1738"><a href="#Generator.star_sql-1738"><span class="linenos">1738</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-1739"><a href="#Generator.star_sql-1739"><span class="linenos">1739</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-1740"><a href="#Generator.star_sql-1740"><span class="linenos">1740</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-1741"><a href="#Generator.star_sql-1741"><span class="linenos">1741</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-1806"><a href="#Generator.star_sql-1806"><span class="linenos">1806</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-1807"><a href="#Generator.star_sql-1807"><span class="linenos">1807</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-1808"><a href="#Generator.star_sql-1808"><span class="linenos">1808</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-1809"><a href="#Generator.star_sql-1809"><span class="linenos">1809</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-1810"><a href="#Generator.star_sql-1810"><span class="linenos">1810</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-1811"><a href="#Generator.star_sql-1811"><span class="linenos">1811</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>
@@ -10522,10 +10911,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.parameter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.parameter_sql-1743"><a href="#Generator.parameter_sql-1743"><span class="linenos">1743</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-1744"><a href="#Generator.parameter_sql-1744"><span class="linenos">1744</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1745"><a href="#Generator.parameter_sql-1745"><span class="linenos">1745</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-1746"><a href="#Generator.parameter_sql-1746"><span class="linenos">1746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1813"><a href="#Generator.parameter_sql-1813"><span class="linenos">1813</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-1814"><a href="#Generator.parameter_sql-1814"><span class="linenos">1814</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1815"><a href="#Generator.parameter_sql-1815"><span class="linenos">1815</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-1816"><a href="#Generator.parameter_sql-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="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>
@@ -10543,12 +10932,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.sessionparameter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sessionparameter_sql-1748"><a href="#Generator.sessionparameter_sql-1748"><span class="linenos">1748</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-1749"><a href="#Generator.sessionparameter_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.sessionparameter_sql-1750"><a href="#Generator.sessionparameter_sql-1750"><span class="linenos">1750</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-1751"><a href="#Generator.sessionparameter_sql-1751"><span class="linenos">1751</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator.sessionparameter_sql-1752"><a href="#Generator.sessionparameter_sql-1752"><span class="linenos">1752</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-1753"><a href="#Generator.sessionparameter_sql-1753"><span class="linenos">1753</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-1818"><a href="#Generator.sessionparameter_sql-1818"><span class="linenos">1818</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-1819"><a href="#Generator.sessionparameter_sql-1819"><span class="linenos">1819</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.sessionparameter_sql-1820"><a href="#Generator.sessionparameter_sql-1820"><span class="linenos">1820</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-1821"><a href="#Generator.sessionparameter_sql-1821"><span class="linenos">1821</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator.sessionparameter_sql-1822"><a href="#Generator.sessionparameter_sql-1822"><span class="linenos">1822</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-1823"><a href="#Generator.sessionparameter_sql-1823"><span class="linenos">1823</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>
@@ -10566,8 +10955,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.placeholder_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.placeholder_sql-1755"><a href="#Generator.placeholder_sql-1755"><span class="linenos">1755</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-1756"><a href="#Generator.placeholder_sql-1756"><span class="linenos">1756</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-1825"><a href="#Generator.placeholder_sql-1825"><span class="linenos">1825</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-1826"><a href="#Generator.placeholder_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="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>
@@ -10585,15 +10974,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.subquery_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.subquery_sql-1758"><a href="#Generator.subquery_sql-1758"><span class="linenos">1758</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-1759"><a href="#Generator.subquery_sql-1759"><span class="linenos">1759</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-1760"><a href="#Generator.subquery_sql-1760"><span class="linenos">1760</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-1761"><a href="#Generator.subquery_sql-1761"><span class="linenos">1761</span></a>
-</span><span id="Generator.subquery_sql-1762"><a href="#Generator.subquery_sql-1762"><span class="linenos">1762</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.subquery_sql-1763"><a href="#Generator.subquery_sql-1763"><span class="linenos">1763</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.subquery_sql-1764"><a href="#Generator.subquery_sql-1764"><span class="linenos">1764</span></a>
-</span><span id="Generator.subquery_sql-1765"><a href="#Generator.subquery_sql-1765"><span class="linenos">1765</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
-</span><span id="Generator.subquery_sql-1766"><a href="#Generator.subquery_sql-1766"><span class="linenos">1766</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-1828"><a href="#Generator.subquery_sql-1828"><span class="linenos">1828</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-1829"><a href="#Generator.subquery_sql-1829"><span class="linenos">1829</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.subquery_sql-1830"><a href="#Generator.subquery_sql-1830"><span class="linenos">1830</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</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-1831"><a href="#Generator.subquery_sql-1831"><span class="linenos">1831</span></a>
+</span><span id="Generator.subquery_sql-1832"><a href="#Generator.subquery_sql-1832"><span class="linenos">1832</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.subquery_sql-1833"><a href="#Generator.subquery_sql-1833"><span class="linenos">1833</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.subquery_sql-1834"><a href="#Generator.subquery_sql-1834"><span class="linenos">1834</span></a>
+</span><span id="Generator.subquery_sql-1835"><a href="#Generator.subquery_sql-1835"><span class="linenos">1835</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
+</span><span id="Generator.subquery_sql-1836"><a href="#Generator.subquery_sql-1836"><span class="linenos">1836</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>
@@ -10611,9 +11000,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.qualify_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.qualify_sql-1768"><a href="#Generator.qualify_sql-1768"><span class="linenos">1768</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-1769"><a href="#Generator.qualify_sql-1769"><span class="linenos">1769</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-1770"><a href="#Generator.qualify_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="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-1838"><a href="#Generator.qualify_sql-1838"><span class="linenos">1838</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-1839"><a href="#Generator.qualify_sql-1839"><span class="linenos">1839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-1840"><a href="#Generator.qualify_sql-1840"><span class="linenos">1840</span></a> <span class="k">return</span> <span class="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>
@@ -10631,11 +11020,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.union_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_sql-1772"><a href="#Generator.union_sql-1772"><span class="linenos">1772</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-1773"><a href="#Generator.union_sql-1773"><span class="linenos">1773</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-1774"><a href="#Generator.union_sql-1774"><span class="linenos">1774</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.union_sql-1775"><a href="#Generator.union_sql-1775"><span class="linenos">1775</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-1776"><a href="#Generator.union_sql-1776"><span class="linenos">1776</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_sql-1842"><a href="#Generator.union_sql-1842"><span class="linenos">1842</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-1843"><a href="#Generator.union_sql-1843"><span class="linenos">1843</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-1844"><a href="#Generator.union_sql-1844"><span class="linenos">1844</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.union_sql-1845"><a href="#Generator.union_sql-1845"><span class="linenos">1845</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-1846"><a href="#Generator.union_sql-1846"><span class="linenos">1846</span></a> <span class="p">)</span>
</span></pre></div>
@@ -10653,10 +11042,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.union_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_op-1778"><a href="#Generator.union_op-1778"><span class="linenos">1778</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-1779"><a href="#Generator.union_op-1779"><span class="linenos">1779</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-1780"><a href="#Generator.union_op-1780"><span class="linenos">1780</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-1781"><a href="#Generator.union_op-1781"><span class="linenos">1781</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-1848"><a href="#Generator.union_op-1848"><span class="linenos">1848</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-1849"><a href="#Generator.union_op-1849"><span class="linenos">1849</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-1850"><a href="#Generator.union_op-1850"><span class="linenos">1850</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-1851"><a href="#Generator.union_op-1851"><span class="linenos">1851</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.union_op-1852"><a href="#Generator.union_op-1852"><span class="linenos">1852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10674,19 +11064,19 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.unnest_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unnest_sql-1783"><a href="#Generator.unnest_sql-1783"><span class="linenos">1783</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-1784"><a href="#Generator.unnest_sql-1784"><span class="linenos">1784</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-1785"><a href="#Generator.unnest_sql-1785"><span class="linenos">1785</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-1786"><a href="#Generator.unnest_sql-1786"><span class="linenos">1786</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-1787"><a href="#Generator.unnest_sql-1787"><span class="linenos">1787</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-1788"><a href="#Generator.unnest_sql-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">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-1789"><a href="#Generator.unnest_sql-1789"><span class="linenos">1789</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-1790"><a href="#Generator.unnest_sql-1790"><span class="linenos">1790</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-1791"><a href="#Generator.unnest_sql-1791"><span class="linenos">1791</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-1792"><a href="#Generator.unnest_sql-1792"><span class="linenos">1792</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-1793"><a href="#Generator.unnest_sql-1793"><span class="linenos">1793</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-1794"><a href="#Generator.unnest_sql-1794"><span class="linenos">1794</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-1795"><a href="#Generator.unnest_sql-1795"><span class="linenos">1795</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-1854"><a href="#Generator.unnest_sql-1854"><span class="linenos">1854</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-1855"><a href="#Generator.unnest_sql-1855"><span class="linenos">1855</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-1856"><a href="#Generator.unnest_sql-1856"><span class="linenos">1856</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-1857"><a href="#Generator.unnest_sql-1857"><span class="linenos">1857</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-1858"><a href="#Generator.unnest_sql-1858"><span class="linenos">1858</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-1859"><a href="#Generator.unnest_sql-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">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-1860"><a href="#Generator.unnest_sql-1860"><span class="linenos">1860</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-1861"><a href="#Generator.unnest_sql-1861"><span class="linenos">1861</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-1862"><a href="#Generator.unnest_sql-1862"><span class="linenos">1862</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-1863"><a href="#Generator.unnest_sql-1863"><span class="linenos">1863</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-1864"><a href="#Generator.unnest_sql-1864"><span class="linenos">1864</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-1865"><a href="#Generator.unnest_sql-1865"><span class="linenos">1865</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-1866"><a href="#Generator.unnest_sql-1866"><span class="linenos">1866</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>
@@ -10704,9 +11094,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.where_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.where_sql-1797"><a href="#Generator.where_sql-1797"><span class="linenos">1797</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-1798"><a href="#Generator.where_sql-1798"><span class="linenos">1798</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-1799"><a href="#Generator.where_sql-1799"><span class="linenos">1799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="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-1868"><a href="#Generator.where_sql-1868"><span class="linenos">1868</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-1869"><a href="#Generator.where_sql-1869"><span class="linenos">1869</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-1870"><a href="#Generator.where_sql-1870"><span class="linenos">1870</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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>
@@ -10724,28 +11114,28 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.window_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_sql-1801"><a href="#Generator.window_sql-1801"><span class="linenos">1801</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-1802"><a href="#Generator.window_sql-1802"><span class="linenos">1802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1803"><a href="#Generator.window_sql-1803"><span class="linenos">1803</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-1804"><a href="#Generator.window_sql-1804"><span class="linenos">1804</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-1805"><a href="#Generator.window_sql-1805"><span class="linenos">1805</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.window_sql-1806"><a href="#Generator.window_sql-1806"><span class="linenos">1806</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;spec&quot;</span><span class="p">)</span>
-</span><span id="Generator.window_sql-1807"><a href="#Generator.window_sql-1807"><span class="linenos">1807</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-1808"><a href="#Generator.window_sql-1808"><span class="linenos">1808</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-1809"><a href="#Generator.window_sql-1809"><span class="linenos">1809</span></a>
-</span><span id="Generator.window_sql-1810"><a href="#Generator.window_sql-1810"><span class="linenos">1810</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-1811"><a href="#Generator.window_sql-1811"><span class="linenos">1811</span></a>
-</span><span id="Generator.window_sql-1812"><a href="#Generator.window_sql-1812"><span class="linenos">1812</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-1813"><a href="#Generator.window_sql-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.window_sql-1814"><a href="#Generator.window_sql-1814"><span class="linenos">1814</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.window_sql-1815"><a href="#Generator.window_sql-1815"><span class="linenos">1815</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.window_sql-1816"><a href="#Generator.window_sql-1816"><span class="linenos">1816</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-1817"><a href="#Generator.window_sql-1817"><span class="linenos">1817</span></a>
-</span><span id="Generator.window_sql-1818"><a href="#Generator.window_sql-1818"><span class="linenos">1818</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-1819"><a href="#Generator.window_sql-1819"><span class="linenos">1819</span></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-1820"><a href="#Generator.window_sql-1820"><span class="linenos">1820</span></a>
-</span><span id="Generator.window_sql-1821"><a href="#Generator.window_sql-1821"><span class="linenos">1821</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator.window_sql-1822"><a href="#Generator.window_sql-1822"><span class="linenos">1822</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_sql-1872"><a href="#Generator.window_sql-1872"><span class="linenos">1872</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-1873"><a href="#Generator.window_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.window_sql-1874"><a href="#Generator.window_sql-1874"><span class="linenos">1874</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-1875"><a href="#Generator.window_sql-1875"><span class="linenos">1875</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-1876"><a href="#Generator.window_sql-1876"><span class="linenos">1876</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.window_sql-1877"><a href="#Generator.window_sql-1877"><span class="linenos">1877</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;spec&quot;</span><span class="p">)</span>
+</span><span id="Generator.window_sql-1878"><a href="#Generator.window_sql-1878"><span class="linenos">1878</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-1879"><a href="#Generator.window_sql-1879"><span class="linenos">1879</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-1880"><a href="#Generator.window_sql-1880"><span class="linenos">1880</span></a>
+</span><span id="Generator.window_sql-1881"><a href="#Generator.window_sql-1881"><span class="linenos">1881</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-1882"><a href="#Generator.window_sql-1882"><span class="linenos">1882</span></a>
+</span><span id="Generator.window_sql-1883"><a href="#Generator.window_sql-1883"><span class="linenos">1883</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-1884"><a href="#Generator.window_sql-1884"><span class="linenos">1884</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.window_sql-1885"><a href="#Generator.window_sql-1885"><span class="linenos">1885</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.window_sql-1886"><a href="#Generator.window_sql-1886"><span class="linenos">1886</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.window_sql-1887"><a href="#Generator.window_sql-1887"><span class="linenos">1887</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-1888"><a href="#Generator.window_sql-1888"><span class="linenos">1888</span></a>
+</span><span id="Generator.window_sql-1889"><a href="#Generator.window_sql-1889"><span class="linenos">1889</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-1890"><a href="#Generator.window_sql-1890"><span class="linenos">1890</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">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-1891"><a href="#Generator.window_sql-1891"><span class="linenos">1891</span></a>
+</span><span id="Generator.window_sql-1892"><a href="#Generator.window_sql-1892"><span class="linenos">1892</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator.window_sql-1893"><a href="#Generator.window_sql-1893"><span class="linenos">1893</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -10763,9 +11153,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</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-1824"><a href="#Generator.partition_by_sql-1824"><span class="linenos">1824</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-1825"><a href="#Generator.partition_by_sql-1825"><span class="linenos">1825</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-1826"><a href="#Generator.partition_by_sql-1826"><span class="linenos">1826</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-1895"><a href="#Generator.partition_by_sql-1895"><span class="linenos">1895</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-1896"><a href="#Generator.partition_by_sql-1896"><span class="linenos">1896</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-1897"><a href="#Generator.partition_by_sql-1897"><span class="linenos">1897</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>
@@ -10783,14 +11173,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.windowspec_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.windowspec_sql-1828"><a href="#Generator.windowspec_sql-1828"><span class="linenos">1828</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-1829"><a href="#Generator.windowspec_sql-1829"><span class="linenos">1829</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-1830"><a href="#Generator.windowspec_sql-1830"><span class="linenos">1830</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-1831"><a href="#Generator.windowspec_sql-1831"><span class="linenos">1831</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.windowspec_sql-1832"><a href="#Generator.windowspec_sql-1832"><span class="linenos">1832</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-1833"><a href="#Generator.windowspec_sql-1833"><span class="linenos">1833</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="Generator.windowspec_sql-1834"><a href="#Generator.windowspec_sql-1834"><span class="linenos">1834</span></a> <span class="p">)</span>
-</span><span id="Generator.windowspec_sql-1835"><a href="#Generator.windowspec_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="n">kind</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.windowspec_sql-1899"><a href="#Generator.windowspec_sql-1899"><span class="linenos">1899</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-1900"><a href="#Generator.windowspec_sql-1900"><span class="linenos">1900</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-1901"><a href="#Generator.windowspec_sql-1901"><span class="linenos">1901</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-1902"><a href="#Generator.windowspec_sql-1902"><span class="linenos">1902</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.windowspec_sql-1903"><a href="#Generator.windowspec_sql-1903"><span class="linenos">1903</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-1904"><a href="#Generator.windowspec_sql-1904"><span class="linenos">1904</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="Generator.windowspec_sql-1905"><a href="#Generator.windowspec_sql-1905"><span class="linenos">1905</span></a> <span class="p">)</span>
+</span><span id="Generator.windowspec_sql-1906"><a href="#Generator.windowspec_sql-1906"><span class="linenos">1906</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>
@@ -10808,10 +11198,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.withingroup_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withingroup_sql-1837"><a href="#Generator.withingroup_sql-1837"><span class="linenos">1837</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-1838"><a href="#Generator.withingroup_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.withingroup_sql-1839"><a href="#Generator.withingroup_sql-1839"><span class="linenos">1839</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-1840"><a href="#Generator.withingroup_sql-1840"><span class="linenos">1840</span></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-1908"><a href="#Generator.withingroup_sql-1908"><span class="linenos">1908</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-1909"><a href="#Generator.withingroup_sql-1909"><span class="linenos">1909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1910"><a href="#Generator.withingroup_sql-1910"><span class="linenos">1910</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-1911"><a href="#Generator.withingroup_sql-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">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>
@@ -10829,11 +11219,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.between_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.between_sql-1842"><a href="#Generator.between_sql-1842"><span class="linenos">1842</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-1843"><a href="#Generator.between_sql-1843"><span class="linenos">1843</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1844"><a href="#Generator.between_sql-1844"><span class="linenos">1844</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-1845"><a href="#Generator.between_sql-1845"><span class="linenos">1845</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-1846"><a href="#Generator.between_sql-1846"><span class="linenos">1846</span></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-1913"><a href="#Generator.between_sql-1913"><span class="linenos">1913</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-1914"><a href="#Generator.between_sql-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">sql</span><span class="p">(</span><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-1915"><a href="#Generator.between_sql-1915"><span class="linenos">1915</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-1916"><a href="#Generator.between_sql-1916"><span class="linenos">1916</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-1917"><a href="#Generator.between_sql-1917"><span class="linenos">1917</span></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>
@@ -10851,11 +11241,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bracket_sql-1848"><a href="#Generator.bracket_sql-1848"><span class="linenos">1848</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-1849"><a href="#Generator.bracket_sql-1849"><span class="linenos">1849</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-1850"><a href="#Generator.bracket_sql-1850"><span class="linenos">1850</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-1851"><a href="#Generator.bracket_sql-1851"><span class="linenos">1851</span></a>
-</span><span id="Generator.bracket_sql-1852"><a href="#Generator.bracket_sql-1852"><span class="linenos">1852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span 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-1919"><a href="#Generator.bracket_sql-1919"><span class="linenos">1919</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-1920"><a href="#Generator.bracket_sql-1920"><span class="linenos">1920</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-1921"><a href="#Generator.bracket_sql-1921"><span class="linenos">1921</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-1922"><a href="#Generator.bracket_sql-1922"><span class="linenos">1922</span></a>
+</span><span id="Generator.bracket_sql-1923"><a href="#Generator.bracket_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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
</span></pre></div>
@@ -10873,8 +11263,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.safebracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.safebracket_sql-1854"><a href="#Generator.safebracket_sql-1854"><span class="linenos">1854</span></a> <span class="k">def</span> <span class="nf">safebracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.safebracket_sql-1855"><a href="#Generator.safebracket_sql-1855"><span class="linenos">1855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.safebracket_sql-1925"><a href="#Generator.safebracket_sql-1925"><span class="linenos">1925</span></a> <span class="k">def</span> <span class="nf">safebracket_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeBracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.safebracket_sql-1926"><a href="#Generator.safebracket_sql-1926"><span class="linenos">1926</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -10892,8 +11282,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.all_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.all_sql-1857"><a href="#Generator.all_sql-1857"><span class="linenos">1857</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-1858"><a href="#Generator.all_sql-1858"><span class="linenos">1858</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-1928"><a href="#Generator.all_sql-1928"><span class="linenos">1928</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-1929"><a href="#Generator.all_sql-1929"><span class="linenos">1929</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>
@@ -10911,11 +11301,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.any_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.any_sql-1860"><a href="#Generator.any_sql-1860"><span class="linenos">1860</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-1861"><a href="#Generator.any_sql-1861"><span class="linenos">1861</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1862"><a href="#Generator.any_sql-1862"><span class="linenos">1862</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-1863"><a href="#Generator.any_sql-1863"><span class="linenos">1863</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-1864"><a href="#Generator.any_sql-1864"><span class="linenos">1864</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-1931"><a href="#Generator.any_sql-1931"><span class="linenos">1931</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-1932"><a href="#Generator.any_sql-1932"><span class="linenos">1932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1933"><a href="#Generator.any_sql-1933"><span class="linenos">1933</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-1934"><a href="#Generator.any_sql-1934"><span class="linenos">1934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.any_sql-1935"><a href="#Generator.any_sql-1935"><span class="linenos">1935</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>
@@ -10933,8 +11323,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.exists_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.exists_sql-1866"><a href="#Generator.exists_sql-1866"><span class="linenos">1866</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-1867"><a href="#Generator.exists_sql-1867"><span class="linenos">1867</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-1937"><a href="#Generator.exists_sql-1937"><span class="linenos">1937</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-1938"><a href="#Generator.exists_sql-1938"><span class="linenos">1938</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>
@@ -10952,25 +11342,25 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.case_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.case_sql-1869"><a href="#Generator.case_sql-1869"><span class="linenos">1869</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-1870"><a href="#Generator.case_sql-1870"><span class="linenos">1870</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1871"><a href="#Generator.case_sql-1871"><span class="linenos">1871</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-1872"><a href="#Generator.case_sql-1872"><span class="linenos">1872</span></a>
-</span><span id="Generator.case_sql-1873"><a href="#Generator.case_sql-1873"><span class="linenos">1873</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-1874"><a href="#Generator.case_sql-1874"><span class="linenos">1874</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-1875"><a href="#Generator.case_sql-1875"><span class="linenos">1875</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-1876"><a href="#Generator.case_sql-1876"><span class="linenos">1876</span></a>
-</span><span id="Generator.case_sql-1877"><a href="#Generator.case_sql-1877"><span class="linenos">1877</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-1878"><a href="#Generator.case_sql-1878"><span class="linenos">1878</span></a>
-</span><span id="Generator.case_sql-1879"><a href="#Generator.case_sql-1879"><span class="linenos">1879</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.case_sql-1880"><a href="#Generator.case_sql-1880"><span class="linenos">1880</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-1881"><a href="#Generator.case_sql-1881"><span class="linenos">1881</span></a>
-</span><span id="Generator.case_sql-1882"><a href="#Generator.case_sql-1882"><span class="linenos">1882</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-1883"><a href="#Generator.case_sql-1883"><span class="linenos">1883</span></a>
-</span><span id="Generator.case_sql-1884"><a href="#Generator.case_sql-1884"><span class="linenos">1884</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-1885"><a href="#Generator.case_sql-1885"><span class="linenos">1885</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-1886"><a href="#Generator.case_sql-1886"><span class="linenos">1886</span></a>
-</span><span id="Generator.case_sql-1887"><a href="#Generator.case_sql-1887"><span class="linenos">1887</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.case_sql-1940"><a href="#Generator.case_sql-1940"><span class="linenos">1940</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-1941"><a href="#Generator.case_sql-1941"><span class="linenos">1941</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1942"><a href="#Generator.case_sql-1942"><span class="linenos">1942</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-1943"><a href="#Generator.case_sql-1943"><span class="linenos">1943</span></a>
+</span><span id="Generator.case_sql-1944"><a href="#Generator.case_sql-1944"><span class="linenos">1944</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-1945"><a href="#Generator.case_sql-1945"><span class="linenos">1945</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-1946"><a href="#Generator.case_sql-1946"><span class="linenos">1946</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-1947"><a href="#Generator.case_sql-1947"><span class="linenos">1947</span></a>
+</span><span id="Generator.case_sql-1948"><a href="#Generator.case_sql-1948"><span class="linenos">1948</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-1949"><a href="#Generator.case_sql-1949"><span class="linenos">1949</span></a>
+</span><span id="Generator.case_sql-1950"><a href="#Generator.case_sql-1950"><span class="linenos">1950</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.case_sql-1951"><a href="#Generator.case_sql-1951"><span class="linenos">1951</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-1952"><a href="#Generator.case_sql-1952"><span class="linenos">1952</span></a>
+</span><span id="Generator.case_sql-1953"><a href="#Generator.case_sql-1953"><span class="linenos">1953</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-1954"><a href="#Generator.case_sql-1954"><span class="linenos">1954</span></a>
+</span><span id="Generator.case_sql-1955"><a href="#Generator.case_sql-1955"><span class="linenos">1955</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-1956"><a href="#Generator.case_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">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-1957"><a href="#Generator.case_sql-1957"><span class="linenos">1957</span></a>
+</span><span id="Generator.case_sql-1958"><a href="#Generator.case_sql-1958"><span class="linenos">1958</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>
@@ -10988,10 +11378,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.constraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.constraint_sql-1889"><a href="#Generator.constraint_sql-1889"><span class="linenos">1889</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-1890"><a href="#Generator.constraint_sql-1890"><span class="linenos">1890</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1891"><a href="#Generator.constraint_sql-1891"><span class="linenos">1891</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-1892"><a href="#Generator.constraint_sql-1892"><span class="linenos">1892</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-1960"><a href="#Generator.constraint_sql-1960"><span class="linenos">1960</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-1961"><a href="#Generator.constraint_sql-1961"><span class="linenos">1961</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1962"><a href="#Generator.constraint_sql-1962"><span class="linenos">1962</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-1963"><a href="#Generator.constraint_sql-1963"><span class="linenos">1963</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>
@@ -11009,10 +11399,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.nextvaluefor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nextvaluefor_sql-1894"><a href="#Generator.nextvaluefor_sql-1894"><span class="linenos">1894</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-1895"><a href="#Generator.nextvaluefor_sql-1895"><span class="linenos">1895</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-1896"><a href="#Generator.nextvaluefor_sql-1896"><span class="linenos">1896</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-1897"><a href="#Generator.nextvaluefor_sql-1897"><span class="linenos">1897</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nextvaluefor_sql-1965"><a href="#Generator.nextvaluefor_sql-1965"><span class="linenos">1965</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-1966"><a href="#Generator.nextvaluefor_sql-1966"><span class="linenos">1966</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-1967"><a href="#Generator.nextvaluefor_sql-1967"><span class="linenos">1967</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-1968"><a href="#Generator.nextvaluefor_sql-1968"><span class="linenos">1968</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>
@@ -11030,10 +11420,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.extract_sql-1899"><a href="#Generator.extract_sql-1899"><span class="linenos">1899</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-1900"><a href="#Generator.extract_sql-1900"><span class="linenos">1900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator.extract_sql-1901"><a href="#Generator.extract_sql-1901"><span class="linenos">1901</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-1902"><a href="#Generator.extract_sql-1902"><span class="linenos">1902</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-1970"><a href="#Generator.extract_sql-1970"><span class="linenos">1970</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-1971"><a href="#Generator.extract_sql-1971"><span class="linenos">1971</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator.extract_sql-1972"><a href="#Generator.extract_sql-1972"><span class="linenos">1972</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-1973"><a href="#Generator.extract_sql-1973"><span class="linenos">1973</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>
@@ -11051,15 +11441,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.trim_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trim_sql-1904"><a href="#Generator.trim_sql-1904"><span class="linenos">1904</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-1905"><a href="#Generator.trim_sql-1905"><span class="linenos">1905</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-1906"><a href="#Generator.trim_sql-1906"><span class="linenos">1906</span></a>
-</span><span id="Generator.trim_sql-1907"><a href="#Generator.trim_sql-1907"><span class="linenos">1907</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-1908"><a href="#Generator.trim_sql-1908"><span class="linenos">1908</span></a> <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-1909"><a href="#Generator.trim_sql-1909"><span class="linenos">1909</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-1910"><a href="#Generator.trim_sql-1910"><span class="linenos">1910</span></a> <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-1911"><a href="#Generator.trim_sql-1911"><span class="linenos">1911</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.trim_sql-1912"><a href="#Generator.trim_sql-1912"><span class="linenos">1912</span></a> <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-1975"><a href="#Generator.trim_sql-1975"><span class="linenos">1975</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-1976"><a href="#Generator.trim_sql-1976"><span class="linenos">1976</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-1977"><a href="#Generator.trim_sql-1977"><span class="linenos">1977</span></a>
+</span><span id="Generator.trim_sql-1978"><a href="#Generator.trim_sql-1978"><span class="linenos">1978</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-1979"><a href="#Generator.trim_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">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-1980"><a href="#Generator.trim_sql-1980"><span class="linenos">1980</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-1981"><a href="#Generator.trim_sql-1981"><span class="linenos">1981</span></a> <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-1982"><a href="#Generator.trim_sql-1982"><span class="linenos">1982</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.trim_sql-1983"><a href="#Generator.trim_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">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>
@@ -11077,11 +11467,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.safeconcat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.safeconcat_sql-1914"><a href="#Generator.safeconcat_sql-1914"><span class="linenos">1914</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.safeconcat_sql-1915"><a href="#Generator.safeconcat_sql-1915"><span class="linenos">1915</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator.safeconcat_sql-1916"><a href="#Generator.safeconcat_sql-1916"><span class="linenos">1916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
-</span><span id="Generator.safeconcat_sql-1917"><a href="#Generator.safeconcat_sql-1917"><span class="linenos">1917</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">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.safeconcat_sql-1918"><a href="#Generator.safeconcat_sql-1918"><span class="linenos">1918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.safeconcat_sql-1985"><a href="#Generator.safeconcat_sql-1985"><span class="linenos">1985</span></a> <span class="k">def</span> <span class="nf">safeconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.safeconcat_sql-1986"><a href="#Generator.safeconcat_sql-1986"><span class="linenos">1986</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator.safeconcat_sql-1987"><a href="#Generator.safeconcat_sql-1987"><span class="linenos">1987</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
+</span><span id="Generator.safeconcat_sql-1988"><a href="#Generator.safeconcat_sql-1988"><span class="linenos">1988</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">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.safeconcat_sql-1989"><a href="#Generator.safeconcat_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">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -11099,9 +11489,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.check_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.check_sql-1920"><a href="#Generator.check_sql-1920"><span class="linenos">1920</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-1921"><a href="#Generator.check_sql-1921"><span class="linenos">1921</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1922"><a href="#Generator.check_sql-1922"><span class="linenos">1922</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-1991"><a href="#Generator.check_sql-1991"><span class="linenos">1991</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-1992"><a href="#Generator.check_sql-1992"><span class="linenos">1992</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1993"><a href="#Generator.check_sql-1993"><span class="linenos">1993</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>
@@ -11119,15 +11509,15 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.foreignkey_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.foreignkey_sql-1924"><a href="#Generator.foreignkey_sql-1924"><span class="linenos">1924</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-1925"><a href="#Generator.foreignkey_sql-1925"><span class="linenos">1925</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-1926"><a href="#Generator.foreignkey_sql-1926"><span class="linenos">1926</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-1927"><a href="#Generator.foreignkey_sql-1927"><span class="linenos">1927</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-1928"><a href="#Generator.foreignkey_sql-1928"><span class="linenos">1928</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-1929"><a href="#Generator.foreignkey_sql-1929"><span class="linenos">1929</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-1930"><a href="#Generator.foreignkey_sql-1930"><span class="linenos">1930</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-1931"><a href="#Generator.foreignkey_sql-1931"><span class="linenos">1931</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-1932"><a href="#Generator.foreignkey_sql-1932"><span class="linenos">1932</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-1995"><a href="#Generator.foreignkey_sql-1995"><span class="linenos">1995</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-1996"><a href="#Generator.foreignkey_sql-1996"><span class="linenos">1996</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-1997"><a href="#Generator.foreignkey_sql-1997"><span class="linenos">1997</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-1998"><a href="#Generator.foreignkey_sql-1998"><span class="linenos">1998</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-1999"><a href="#Generator.foreignkey_sql-1999"><span class="linenos">1999</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-2000"><a href="#Generator.foreignkey_sql-2000"><span class="linenos">2000</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-2001"><a href="#Generator.foreignkey_sql-2001"><span class="linenos">2001</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-2002"><a href="#Generator.foreignkey_sql-2002"><span class="linenos">2002</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-2003"><a href="#Generator.foreignkey_sql-2003"><span class="linenos">2003</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>
@@ -11145,11 +11535,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.primarykey_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykey_sql-1934"><a href="#Generator.primarykey_sql-1934"><span class="linenos">1934</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-1935"><a href="#Generator.primarykey_sql-1935"><span class="linenos">1935</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-1936"><a href="#Generator.primarykey_sql-1936"><span class="linenos">1936</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-1937"><a href="#Generator.primarykey_sql-1937"><span class="linenos">1937</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-1938"><a href="#Generator.primarykey_sql-1938"><span class="linenos">1938</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-2005"><a href="#Generator.primarykey_sql-2005"><span class="linenos">2005</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-2006"><a href="#Generator.primarykey_sql-2006"><span class="linenos">2006</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-2007"><a href="#Generator.primarykey_sql-2007"><span class="linenos">2007</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-2008"><a href="#Generator.primarykey_sql-2008"><span class="linenos">2008</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-2009"><a href="#Generator.primarykey_sql-2009"><span class="linenos">2009</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>
@@ -11167,9 +11557,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.if_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.if_sql-1940"><a href="#Generator.if_sql-1940"><span class="linenos">1940</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-1941"><a href="#Generator.if_sql-1941"><span class="linenos">1941</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator.if_sql-1942"><a href="#Generator.if_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">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.if_sql-2011"><a href="#Generator.if_sql-2011"><span class="linenos">2011</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-2012"><a href="#Generator.if_sql-2012"><span class="linenos">2012</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator.if_sql-2013"><a href="#Generator.if_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">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)))</span>
</span></pre></div>
@@ -11187,10 +11577,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.matchagainst_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchagainst_sql-1944"><a href="#Generator.matchagainst_sql-1944"><span class="linenos">1944</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-1945"><a href="#Generator.matchagainst_sql-1945"><span class="linenos">1945</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-1946"><a href="#Generator.matchagainst_sql-1946"><span class="linenos">1946</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-1947"><a href="#Generator.matchagainst_sql-1947"><span class="linenos">1947</span></a> <span class="k">return</span> <span class="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-2015"><a href="#Generator.matchagainst_sql-2015"><span class="linenos">2015</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-2016"><a href="#Generator.matchagainst_sql-2016"><span class="linenos">2016</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-2017"><a href="#Generator.matchagainst_sql-2017"><span class="linenos">2017</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-2018"><a href="#Generator.matchagainst_sql-2018"><span class="linenos">2018</span></a> <span class="k">return</span> <span class="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>
@@ -11208,8 +11598,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.jsonkeyvalue_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonkeyvalue_sql-1949"><a href="#Generator.jsonkeyvalue_sql-1949"><span class="linenos">1949</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-1950"><a href="#Generator.jsonkeyvalue_sql-1950"><span class="linenos">1950</span></a> <span class="k">return</span> <span class="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-2020"><a href="#Generator.jsonkeyvalue_sql-2020"><span class="linenos">2020</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-2021"><a href="#Generator.jsonkeyvalue_sql-2021"><span class="linenos">2021</span></a> <span class="k">return</span> <span class="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>
@@ -11227,24 +11617,24 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.jsonobject_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobject_sql-1952"><a href="#Generator.jsonobject_sql-1952"><span class="linenos">1952</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-1953"><a href="#Generator.jsonobject_sql-1953"><span class="linenos">1953</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-1954"><a href="#Generator.jsonobject_sql-1954"><span class="linenos">1954</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-1955"><a href="#Generator.jsonobject_sql-1955"><span class="linenos">1955</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-1956"><a href="#Generator.jsonobject_sql-1956"><span class="linenos">1956</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-1957"><a href="#Generator.jsonobject_sql-1957"><span class="linenos">1957</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-1958"><a href="#Generator.jsonobject_sql-1958"><span class="linenos">1958</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.jsonobject_sql-1959"><a href="#Generator.jsonobject_sql-1959"><span class="linenos">1959</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-1960"><a href="#Generator.jsonobject_sql-1960"><span class="linenos">1960</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-1961"><a href="#Generator.jsonobject_sql-1961"><span class="linenos">1961</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-1962"><a href="#Generator.jsonobject_sql-1962"><span class="linenos">1962</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-1963"><a href="#Generator.jsonobject_sql-1963"><span class="linenos">1963</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-1964"><a href="#Generator.jsonobject_sql-1964"><span class="linenos">1964</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-1965"><a href="#Generator.jsonobject_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">func</span><span class="p">(</span>
-</span><span id="Generator.jsonobject_sql-1966"><a href="#Generator.jsonobject_sql-1966"><span class="linenos">1966</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">,</span>
-</span><span id="Generator.jsonobject_sql-1967"><a href="#Generator.jsonobject_sql-1967"><span class="linenos">1967</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Generator.jsonobject_sql-1968"><a href="#Generator.jsonobject_sql-1968"><span class="linenos">1968</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Generator.jsonobject_sql-1969"><a href="#Generator.jsonobject_sql-1969"><span class="linenos">1969</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobject_sql-2023"><a href="#Generator.jsonobject_sql-2023"><span class="linenos">2023</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-2024"><a href="#Generator.jsonobject_sql-2024"><span class="linenos">2024</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-2025"><a href="#Generator.jsonobject_sql-2025"><span class="linenos">2025</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-2026"><a href="#Generator.jsonobject_sql-2026"><span class="linenos">2026</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-2027"><a href="#Generator.jsonobject_sql-2027"><span class="linenos">2027</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-2028"><a href="#Generator.jsonobject_sql-2028"><span class="linenos">2028</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-2029"><a href="#Generator.jsonobject_sql-2029"><span class="linenos">2029</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.jsonobject_sql-2030"><a href="#Generator.jsonobject_sql-2030"><span class="linenos">2030</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-2031"><a href="#Generator.jsonobject_sql-2031"><span class="linenos">2031</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-2032"><a href="#Generator.jsonobject_sql-2032"><span class="linenos">2032</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-2033"><a href="#Generator.jsonobject_sql-2033"><span class="linenos">2033</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-2034"><a href="#Generator.jsonobject_sql-2034"><span class="linenos">2034</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-2035"><a href="#Generator.jsonobject_sql-2035"><span class="linenos">2035</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-2036"><a href="#Generator.jsonobject_sql-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><span id="Generator.jsonobject_sql-2037"><a href="#Generator.jsonobject_sql-2037"><span class="linenos">2037</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">,</span>
+</span><span id="Generator.jsonobject_sql-2038"><a href="#Generator.jsonobject_sql-2038"><span class="linenos">2038</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Generator.jsonobject_sql-2039"><a href="#Generator.jsonobject_sql-2039"><span class="linenos">2039</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator.jsonobject_sql-2040"><a href="#Generator.jsonobject_sql-2040"><span class="linenos">2040</span></a> <span class="p">)</span>
</span></pre></div>
@@ -11262,13 +11652,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.openjsoncolumndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjsoncolumndef_sql-1971"><a href="#Generator.openjsoncolumndef_sql-1971"><span class="linenos">1971</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.openjsoncolumndef_sql-1972"><a href="#Generator.openjsoncolumndef_sql-1972"><span class="linenos">1972</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjsoncolumndef_sql-1973"><a href="#Generator.openjsoncolumndef_sql-1973"><span class="linenos">1973</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjsoncolumndef_sql-1974"><a href="#Generator.openjsoncolumndef_sql-1974"><span class="linenos">1974</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjsoncolumndef_sql-1975"><a href="#Generator.openjsoncolumndef_sql-1975"><span class="linenos">1975</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjsoncolumndef_sql-1976"><a href="#Generator.openjsoncolumndef_sql-1976"><span class="linenos">1976</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjsoncolumndef_sql-1977"><a href="#Generator.openjsoncolumndef_sql-1977"><span class="linenos">1977</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjsoncolumndef_sql-2042"><a href="#Generator.openjsoncolumndef_sql-2042"><span class="linenos">2042</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.openjsoncolumndef_sql-2043"><a href="#Generator.openjsoncolumndef_sql-2043"><span class="linenos">2043</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjsoncolumndef_sql-2044"><a href="#Generator.openjsoncolumndef_sql-2044"><span class="linenos">2044</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjsoncolumndef_sql-2045"><a href="#Generator.openjsoncolumndef_sql-2045"><span class="linenos">2045</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjsoncolumndef_sql-2046"><a href="#Generator.openjsoncolumndef_sql-2046"><span class="linenos">2046</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjsoncolumndef_sql-2047"><a href="#Generator.openjsoncolumndef_sql-2047"><span class="linenos">2047</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjsoncolumndef_sql-2048"><a href="#Generator.openjsoncolumndef_sql-2048"><span class="linenos">2048</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11286,17 +11676,17 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.openjson_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjson_sql-1979"><a href="#Generator.openjson_sql-1979"><span class="linenos">1979</span></a> <span class="k">def</span> <span class="nf">openjson_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.openjson_sql-1980"><a href="#Generator.openjson_sql-1980"><span class="linenos">1980</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjson_sql-1981"><a href="#Generator.openjson_sql-1981"><span class="linenos">1981</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjson_sql-1982"><a href="#Generator.openjson_sql-1982"><span class="linenos">1982</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjson_sql-1983"><a href="#Generator.openjson_sql-1983"><span class="linenos">1983</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.openjson_sql-1984"><a href="#Generator.openjson_sql-1984"><span class="linenos">1984</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.openjson_sql-1985"><a href="#Generator.openjson_sql-1985"><span class="linenos">1985</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.openjson_sql-1986"><a href="#Generator.openjson_sql-1986"><span class="linenos">1986</span></a> <span class="k">if</span> <span class="n">expressions</span>
-</span><span id="Generator.openjson_sql-1987"><a href="#Generator.openjson_sql-1987"><span class="linenos">1987</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjson_sql-1988"><a href="#Generator.openjson_sql-1988"><span class="linenos">1988</span></a> <span class="p">)</span>
-</span><span id="Generator.openjson_sql-1989"><a href="#Generator.openjson_sql-1989"><span class="linenos">1989</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjson_sql-2050"><a href="#Generator.openjson_sql-2050"><span class="linenos">2050</span></a> <span class="k">def</span> <span class="nf">openjson_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.openjson_sql-2051"><a href="#Generator.openjson_sql-2051"><span class="linenos">2051</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjson_sql-2052"><a href="#Generator.openjson_sql-2052"><span class="linenos">2052</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;path&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjson_sql-2053"><a href="#Generator.openjson_sql-2053"><span class="linenos">2053</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjson_sql-2054"><a href="#Generator.openjson_sql-2054"><span class="linenos">2054</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.openjson_sql-2055"><a href="#Generator.openjson_sql-2055"><span class="linenos">2055</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.openjson_sql-2056"><a href="#Generator.openjson_sql-2056"><span class="linenos">2056</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.openjson_sql-2057"><a href="#Generator.openjson_sql-2057"><span class="linenos">2057</span></a> <span class="k">if</span> <span class="n">expressions</span>
+</span><span id="Generator.openjson_sql-2058"><a href="#Generator.openjson_sql-2058"><span class="linenos">2058</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjson_sql-2059"><a href="#Generator.openjson_sql-2059"><span class="linenos">2059</span></a> <span class="p">)</span>
+</span><span id="Generator.openjson_sql-2060"><a href="#Generator.openjson_sql-2060"><span class="linenos">2060</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11314,22 +11704,22 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.in_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.in_sql-1991"><a href="#Generator.in_sql-1991"><span class="linenos">1991</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-1992"><a href="#Generator.in_sql-1992"><span class="linenos">1992</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-1993"><a href="#Generator.in_sql-1993"><span class="linenos">1993</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-1994"><a href="#Generator.in_sql-1994"><span class="linenos">1994</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-1995"><a href="#Generator.in_sql-1995"><span class="linenos">1995</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-1996"><a href="#Generator.in_sql-1996"><span class="linenos">1996</span></a>
-</span><span id="Generator.in_sql-1997"><a href="#Generator.in_sql-1997"><span class="linenos">1997</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Generator.in_sql-1998"><a href="#Generator.in_sql-1998"><span class="linenos">1998</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-1999"><a href="#Generator.in_sql-1999"><span class="linenos">1999</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2000"><a href="#Generator.in_sql-2000"><span class="linenos">2000</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-2001"><a href="#Generator.in_sql-2001"><span class="linenos">2001</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2002"><a href="#Generator.in_sql-2002"><span class="linenos">2002</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-2003"><a href="#Generator.in_sql-2003"><span class="linenos">2003</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2004"><a href="#Generator.in_sql-2004"><span class="linenos">2004</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-2005"><a href="#Generator.in_sql-2005"><span class="linenos">2005</span></a>
-</span><span id="Generator.in_sql-2006"><a href="#Generator.in_sql-2006"><span class="linenos">2006</span></a> <span class="k">return</span> <span class="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-2062"><a href="#Generator.in_sql-2062"><span class="linenos">2062</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-2063"><a href="#Generator.in_sql-2063"><span class="linenos">2063</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-2064"><a href="#Generator.in_sql-2064"><span class="linenos">2064</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-2065"><a href="#Generator.in_sql-2065"><span class="linenos">2065</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-2066"><a href="#Generator.in_sql-2066"><span class="linenos">2066</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-2067"><a href="#Generator.in_sql-2067"><span class="linenos">2067</span></a>
+</span><span id="Generator.in_sql-2068"><a href="#Generator.in_sql-2068"><span class="linenos">2068</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2069"><a href="#Generator.in_sql-2069"><span class="linenos">2069</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-2070"><a href="#Generator.in_sql-2070"><span class="linenos">2070</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2071"><a href="#Generator.in_sql-2071"><span class="linenos">2071</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-2072"><a href="#Generator.in_sql-2072"><span class="linenos">2072</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2073"><a href="#Generator.in_sql-2073"><span class="linenos">2073</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-2074"><a href="#Generator.in_sql-2074"><span class="linenos">2074</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2075"><a href="#Generator.in_sql-2075"><span class="linenos">2075</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-2076"><a href="#Generator.in_sql-2076"><span class="linenos">2076</span></a>
+</span><span id="Generator.in_sql-2077"><a href="#Generator.in_sql-2077"><span class="linenos">2077</span></a> <span class="k">return</span> <span class="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>
@@ -11347,8 +11737,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</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-2008"><a href="#Generator.in_unnest_op-2008"><span class="linenos">2008</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-2009"><a href="#Generator.in_unnest_op-2009"><span class="linenos">2009</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-2079"><a href="#Generator.in_unnest_op-2079"><span class="linenos">2079</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-2080"><a href="#Generator.in_unnest_op-2080"><span class="linenos">2080</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>
@@ -11366,22 +11756,22 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.interval_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.interval_sql-2011"><a href="#Generator.interval_sql-2011"><span class="linenos">2011</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-2012"><a href="#Generator.interval_sql-2012"><span class="linenos">2012</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-2013"><a href="#Generator.interval_sql-2013"><span class="linenos">2013</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-2014"><a href="#Generator.interval_sql-2014"><span class="linenos">2014</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-2015"><a href="#Generator.interval_sql-2015"><span class="linenos">2015</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-2016"><a href="#Generator.interval_sql-2016"><span class="linenos">2016</span></a>
-</span><span id="Generator.interval_sql-2017"><a href="#Generator.interval_sql-2017"><span class="linenos">2017</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-2018"><a href="#Generator.interval_sql-2018"><span class="linenos">2018</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-2019"><a href="#Generator.interval_sql-2019"><span class="linenos">2019</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.interval_sql-2020"><a href="#Generator.interval_sql-2020"><span class="linenos">2020</span></a>
-</span><span id="Generator.interval_sql-2021"><a href="#Generator.interval_sql-2021"><span class="linenos">2021</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2022"><a href="#Generator.interval_sql-2022"><span class="linenos">2022</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.interval_sql-2023"><a href="#Generator.interval_sql-2023"><span class="linenos">2023</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-2024"><a href="#Generator.interval_sql-2024"><span class="linenos">2024</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-2025"><a href="#Generator.interval_sql-2025"><span class="linenos">2025</span></a>
-</span><span id="Generator.interval_sql-2026"><a href="#Generator.interval_sql-2026"><span class="linenos">2026</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-2082"><a href="#Generator.interval_sql-2082"><span class="linenos">2082</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-2083"><a href="#Generator.interval_sql-2083"><span class="linenos">2083</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-2084"><a href="#Generator.interval_sql-2084"><span class="linenos">2084</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-2085"><a href="#Generator.interval_sql-2085"><span class="linenos">2085</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-2086"><a href="#Generator.interval_sql-2086"><span class="linenos">2086</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-2087"><a href="#Generator.interval_sql-2087"><span class="linenos">2087</span></a>
+</span><span id="Generator.interval_sql-2088"><a href="#Generator.interval_sql-2088"><span class="linenos">2088</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-2089"><a href="#Generator.interval_sql-2089"><span class="linenos">2089</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-2090"><a href="#Generator.interval_sql-2090"><span class="linenos">2090</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.interval_sql-2091"><a href="#Generator.interval_sql-2091"><span class="linenos">2091</span></a>
+</span><span id="Generator.interval_sql-2092"><a href="#Generator.interval_sql-2092"><span class="linenos">2092</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2093"><a href="#Generator.interval_sql-2093"><span class="linenos">2093</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.interval_sql-2094"><a href="#Generator.interval_sql-2094"><span class="linenos">2094</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-2095"><a href="#Generator.interval_sql-2095"><span class="linenos">2095</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-2096"><a href="#Generator.interval_sql-2096"><span class="linenos">2096</span></a>
+</span><span id="Generator.interval_sql-2097"><a href="#Generator.interval_sql-2097"><span class="linenos">2097</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>
@@ -11399,8 +11789,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.return_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.return_sql-2028"><a href="#Generator.return_sql-2028"><span class="linenos">2028</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-2029"><a href="#Generator.return_sql-2029"><span class="linenos">2029</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-2099"><a href="#Generator.return_sql-2099"><span class="linenos">2099</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-2100"><a href="#Generator.return_sql-2100"><span class="linenos">2100</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>
@@ -11418,13 +11808,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.reference_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.reference_sql-2031"><a href="#Generator.reference_sql-2031"><span class="linenos">2031</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-2032"><a href="#Generator.reference_sql-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="Generator.reference_sql-2033"><a href="#Generator.reference_sql-2033"><span class="linenos">2033</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-2034"><a href="#Generator.reference_sql-2034"><span class="linenos">2034</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-2035"><a href="#Generator.reference_sql-2035"><span class="linenos">2035</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-2036"><a href="#Generator.reference_sql-2036"><span class="linenos">2036</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-2037"><a href="#Generator.reference_sql-2037"><span class="linenos">2037</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-2102"><a href="#Generator.reference_sql-2102"><span class="linenos">2102</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-2103"><a href="#Generator.reference_sql-2103"><span class="linenos">2103</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2104"><a href="#Generator.reference_sql-2104"><span class="linenos">2104</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-2105"><a href="#Generator.reference_sql-2105"><span class="linenos">2105</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-2106"><a href="#Generator.reference_sql-2106"><span class="linenos">2106</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-2107"><a href="#Generator.reference_sql-2107"><span class="linenos">2107</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-2108"><a href="#Generator.reference_sql-2108"><span class="linenos">2108</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>
@@ -11442,8 +11832,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.anonymous_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anonymous_sql-2039"><a href="#Generator.anonymous_sql-2039"><span class="linenos">2039</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-2040"><a href="#Generator.anonymous_sql-2040"><span class="linenos">2040</span></a> <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-2110"><a href="#Generator.anonymous_sql-2110"><span class="linenos">2110</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-2111"><a href="#Generator.anonymous_sql-2111"><span class="linenos">2111</span></a> <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>
@@ -11461,14 +11851,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.paren_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.paren_sql-2042"><a href="#Generator.paren_sql-2042"><span class="linenos">2042</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-2043"><a href="#Generator.paren_sql-2043"><span class="linenos">2043</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-2044"><a href="#Generator.paren_sql-2044"><span class="linenos">2044</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-2045"><a href="#Generator.paren_sql-2045"><span class="linenos">2045</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.paren_sql-2046"><a href="#Generator.paren_sql-2046"><span class="linenos">2046</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-2047"><a href="#Generator.paren_sql-2047"><span class="linenos">2047</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-2048"><a href="#Generator.paren_sql-2048"><span class="linenos">2048</span></a>
-</span><span id="Generator.paren_sql-2049"><a href="#Generator.paren_sql-2049"><span class="linenos">2049</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-2113"><a href="#Generator.paren_sql-2113"><span class="linenos">2113</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-2114"><a href="#Generator.paren_sql-2114"><span class="linenos">2114</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-2115"><a href="#Generator.paren_sql-2115"><span class="linenos">2115</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-2116"><a href="#Generator.paren_sql-2116"><span class="linenos">2116</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.paren_sql-2117"><a href="#Generator.paren_sql-2117"><span class="linenos">2117</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-2118"><a href="#Generator.paren_sql-2118"><span class="linenos">2118</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-2119"><a href="#Generator.paren_sql-2119"><span class="linenos">2119</span></a>
+</span><span id="Generator.paren_sql-2120"><a href="#Generator.paren_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">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>
@@ -11486,11 +11876,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.neg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neg_sql-2051"><a href="#Generator.neg_sql-2051"><span class="linenos">2051</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-2052"><a href="#Generator.neg_sql-2052"><span class="linenos">2052</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-2053"><a href="#Generator.neg_sql-2053"><span class="linenos">2053</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-2054"><a href="#Generator.neg_sql-2054"><span class="linenos">2054</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-2055"><a href="#Generator.neg_sql-2055"><span class="linenos">2055</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-2122"><a href="#Generator.neg_sql-2122"><span class="linenos">2122</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-2123"><a href="#Generator.neg_sql-2123"><span class="linenos">2123</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-2124"><a href="#Generator.neg_sql-2124"><span class="linenos">2124</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-2125"><a href="#Generator.neg_sql-2125"><span class="linenos">2125</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-2126"><a href="#Generator.neg_sql-2126"><span class="linenos">2126</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>
@@ -11508,8 +11898,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.not_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.not_sql-2057"><a href="#Generator.not_sql-2057"><span class="linenos">2057</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-2058"><a href="#Generator.not_sql-2058"><span class="linenos">2058</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-2128"><a href="#Generator.not_sql-2128"><span class="linenos">2128</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-2129"><a href="#Generator.not_sql-2129"><span class="linenos">2129</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>
@@ -11527,10 +11917,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.alias_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.alias_sql-2060"><a href="#Generator.alias_sql-2060"><span class="linenos">2060</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-2061"><a href="#Generator.alias_sql-2061"><span class="linenos">2061</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-2062"><a href="#Generator.alias_sql-2062"><span class="linenos">2062</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-2063"><a href="#Generator.alias_sql-2063"><span class="linenos">2063</span></a> <span class="k">return</span> <span class="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-2131"><a href="#Generator.alias_sql-2131"><span class="linenos">2131</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-2132"><a href="#Generator.alias_sql-2132"><span class="linenos">2132</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-2133"><a href="#Generator.alias_sql-2133"><span class="linenos">2133</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-2134"><a href="#Generator.alias_sql-2134"><span class="linenos">2134</span></a> <span class="k">return</span> <span class="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>
@@ -11548,8 +11938,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.aliases_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.aliases_sql-2065"><a href="#Generator.aliases_sql-2065"><span class="linenos">2065</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-2066"><a href="#Generator.aliases_sql-2066"><span class="linenos">2066</span></a> <span class="k">return</span> <span class="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-2136"><a href="#Generator.aliases_sql-2136"><span class="linenos">2136</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-2137"><a href="#Generator.aliases_sql-2137"><span class="linenos">2137</span></a> <span class="k">return</span> <span class="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>
@@ -11567,10 +11957,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.attimezone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.attimezone_sql-2068"><a href="#Generator.attimezone_sql-2068"><span class="linenos">2068</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-2069"><a href="#Generator.attimezone_sql-2069"><span class="linenos">2069</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2070"><a href="#Generator.attimezone_sql-2070"><span class="linenos">2070</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-2071"><a href="#Generator.attimezone_sql-2071"><span class="linenos">2071</span></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-2139"><a href="#Generator.attimezone_sql-2139"><span class="linenos">2139</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-2140"><a href="#Generator.attimezone_sql-2140"><span class="linenos">2140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2141"><a href="#Generator.attimezone_sql-2141"><span class="linenos">2141</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-2142"><a href="#Generator.attimezone_sql-2142"><span class="linenos">2142</span></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>
@@ -11588,8 +11978,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.add_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.add_sql-2073"><a href="#Generator.add_sql-2073"><span class="linenos">2073</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-2074"><a href="#Generator.add_sql-2074"><span class="linenos">2074</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2144"><a href="#Generator.add_sql-2144"><span class="linenos">2144</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-2145"><a href="#Generator.add_sql-2145"><span class="linenos">2145</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -11607,8 +11997,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.and_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.and_sql-2076"><a href="#Generator.and_sql-2076"><span class="linenos">2076</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-2077"><a href="#Generator.and_sql-2077"><span class="linenos">2077</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-2147"><a href="#Generator.and_sql-2147"><span class="linenos">2147</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-2148"><a href="#Generator.and_sql-2148"><span class="linenos">2148</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>
@@ -11626,8 +12016,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.xor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.xor_sql-2079"><a href="#Generator.xor_sql-2079"><span class="linenos">2079</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.xor_sql-2080"><a href="#Generator.xor_sql-2080"><span class="linenos">2080</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.xor_sql-2150"><a href="#Generator.xor_sql-2150"><span class="linenos">2150</span></a> <span class="k">def</span> <span class="nf">xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.xor_sql-2151"><a href="#Generator.xor_sql-2151"><span class="linenos">2151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -11645,17 +12035,17 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.connector_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connector_sql-2082"><a href="#Generator.connector_sql-2082"><span class="linenos">2082</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-2083"><a href="#Generator.connector_sql-2083"><span class="linenos">2083</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-2084"><a href="#Generator.connector_sql-2084"><span class="linenos">2084</span></a> <span class="k">return</span> <span class="bp">self</span><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-2085"><a href="#Generator.connector_sql-2085"><span class="linenos">2085</span></a>
-</span><span id="Generator.connector_sql-2086"><a href="#Generator.connector_sql-2086"><span class="linenos">2086</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-2087"><a href="#Generator.connector_sql-2087"><span class="linenos">2087</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="Generator.connector_sql-2088"><a href="#Generator.connector_sql-2088"><span class="linenos">2088</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-2089"><a href="#Generator.connector_sql-2089"><span class="linenos">2089</span></a> <span class="p">)</span>
-</span><span id="Generator.connector_sql-2090"><a href="#Generator.connector_sql-2090"><span class="linenos">2090</span></a>
-</span><span id="Generator.connector_sql-2091"><a href="#Generator.connector_sql-2091"><span class="linenos">2091</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-2092"><a href="#Generator.connector_sql-2092"><span class="linenos">2092</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-2153"><a href="#Generator.connector_sql-2153"><span class="linenos">2153</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-2154"><a href="#Generator.connector_sql-2154"><span class="linenos">2154</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-2155"><a href="#Generator.connector_sql-2155"><span class="linenos">2155</span></a> <span class="k">return</span> <span class="bp">self</span><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-2156"><a href="#Generator.connector_sql-2156"><span class="linenos">2156</span></a>
+</span><span id="Generator.connector_sql-2157"><a href="#Generator.connector_sql-2157"><span class="linenos">2157</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-2158"><a href="#Generator.connector_sql-2158"><span class="linenos">2158</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="Generator.connector_sql-2159"><a href="#Generator.connector_sql-2159"><span class="linenos">2159</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-2160"><a href="#Generator.connector_sql-2160"><span class="linenos">2160</span></a> <span class="p">)</span>
+</span><span id="Generator.connector_sql-2161"><a href="#Generator.connector_sql-2161"><span class="linenos">2161</span></a>
+</span><span id="Generator.connector_sql-2162"><a href="#Generator.connector_sql-2162"><span class="linenos">2162</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-2163"><a href="#Generator.connector_sql-2163"><span class="linenos">2163</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>
@@ -11673,8 +12063,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitwiseand_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseand_sql-2094"><a href="#Generator.bitwiseand_sql-2094"><span class="linenos">2094</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-2095"><a href="#Generator.bitwiseand_sql-2095"><span class="linenos">2095</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2165"><a href="#Generator.bitwiseand_sql-2165"><span class="linenos">2165</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-2166"><a href="#Generator.bitwiseand_sql-2166"><span class="linenos">2166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -11692,8 +12082,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitwiseleftshift_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseleftshift_sql-2097"><a href="#Generator.bitwiseleftshift_sql-2097"><span class="linenos">2097</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-2098"><a href="#Generator.bitwiseleftshift_sql-2098"><span class="linenos">2098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2168"><a href="#Generator.bitwiseleftshift_sql-2168"><span class="linenos">2168</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-2169"><a href="#Generator.bitwiseleftshift_sql-2169"><span class="linenos">2169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -11711,8 +12101,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitwisenot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwisenot_sql-2100"><a href="#Generator.bitwisenot_sql-2100"><span class="linenos">2100</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-2101"><a href="#Generator.bitwisenot_sql-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><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-2171"><a href="#Generator.bitwisenot_sql-2171"><span class="linenos">2171</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-2172"><a href="#Generator.bitwisenot_sql-2172"><span class="linenos">2172</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span 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>
@@ -11730,8 +12120,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitwiseor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseor_sql-2103"><a href="#Generator.bitwiseor_sql-2103"><span class="linenos">2103</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-2104"><a href="#Generator.bitwiseor_sql-2104"><span class="linenos">2104</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2174"><a href="#Generator.bitwiseor_sql-2174"><span class="linenos">2174</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-2175"><a href="#Generator.bitwiseor_sql-2175"><span class="linenos">2175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -11749,8 +12139,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitwiserightshift_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiserightshift_sql-2106"><a href="#Generator.bitwiserightshift_sql-2106"><span class="linenos">2106</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-2107"><a href="#Generator.bitwiserightshift_sql-2107"><span class="linenos">2107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2177"><a href="#Generator.bitwiserightshift_sql-2177"><span class="linenos">2177</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-2178"><a href="#Generator.bitwiserightshift_sql-2178"><span class="linenos">2178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -11768,8 +12158,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.bitwisexor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwisexor_sql-2109"><a href="#Generator.bitwisexor_sql-2109"><span class="linenos">2109</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-2110"><a href="#Generator.bitwisexor_sql-2110"><span class="linenos">2110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2180"><a href="#Generator.bitwisexor_sql-2180"><span class="linenos">2180</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-2181"><a href="#Generator.bitwisexor_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">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>
@@ -11787,10 +12177,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cast_sql-2112"><a href="#Generator.cast_sql-2112"><span class="linenos">2112</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cast_sql-2113"><a href="#Generator.cast_sql-2113"><span class="linenos">2113</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="Generator.cast_sql-2114"><a href="#Generator.cast_sql-2114"><span class="linenos">2114</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cast_sql-2115"><a href="#Generator.cast_sql-2115"><span class="linenos">2115</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cast_sql-2183"><a href="#Generator.cast_sql-2183"><span class="linenos">2183</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cast_sql-2184"><a href="#Generator.cast_sql-2184"><span class="linenos">2184</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="Generator.cast_sql-2185"><a href="#Generator.cast_sql-2185"><span class="linenos">2185</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cast_sql-2186"><a href="#Generator.cast_sql-2186"><span class="linenos">2186</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11808,9 +12198,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.currentdate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.currentdate_sql-2117"><a href="#Generator.currentdate_sql-2117"><span class="linenos">2117</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-2118"><a href="#Generator.currentdate_sql-2118"><span class="linenos">2118</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-2119"><a href="#Generator.currentdate_sql-2119"><span class="linenos">2119</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-2188"><a href="#Generator.currentdate_sql-2188"><span class="linenos">2188</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-2189"><a href="#Generator.currentdate_sql-2189"><span class="linenos">2189</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-2190"><a href="#Generator.currentdate_sql-2190"><span class="linenos">2190</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>
@@ -11828,8 +12218,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.collate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.collate_sql-2121"><a href="#Generator.collate_sql-2121"><span class="linenos">2121</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-2122"><a href="#Generator.collate_sql-2122"><span class="linenos">2122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2192"><a href="#Generator.collate_sql-2192"><span class="linenos">2192</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-2193"><a href="#Generator.collate_sql-2193"><span class="linenos">2193</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -11847,8 +12237,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.command_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.command_sql-2124"><a href="#Generator.command_sql-2124"><span class="linenos">2124</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-2125"><a href="#Generator.command_sql-2125"><span class="linenos">2125</span></a> <span class="k">return</span> <span class="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-2195"><a href="#Generator.command_sql-2195"><span class="linenos">2195</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-2196"><a href="#Generator.command_sql-2196"><span class="linenos">2196</span></a> <span class="k">return</span> <span class="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>
@@ -11866,12 +12256,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.comment_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comment_sql-2127"><a href="#Generator.comment_sql-2127"><span class="linenos">2127</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-2128"><a href="#Generator.comment_sql-2128"><span class="linenos">2128</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2129"><a href="#Generator.comment_sql-2129"><span class="linenos">2129</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-2130"><a href="#Generator.comment_sql-2130"><span class="linenos">2130</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-2131"><a href="#Generator.comment_sql-2131"><span class="linenos">2131</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-2132"><a href="#Generator.comment_sql-2132"><span class="linenos">2132</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-2198"><a href="#Generator.comment_sql-2198"><span class="linenos">2198</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-2199"><a href="#Generator.comment_sql-2199"><span class="linenos">2199</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2200"><a href="#Generator.comment_sql-2200"><span class="linenos">2200</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-2201"><a href="#Generator.comment_sql-2201"><span class="linenos">2201</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-2202"><a href="#Generator.comment_sql-2202"><span class="linenos">2202</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-2203"><a href="#Generator.comment_sql-2203"><span class="linenos">2203</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>
@@ -11889,16 +12279,16 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.mergetreettlaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettlaction_sql-2134"><a href="#Generator.mergetreettlaction_sql-2134"><span class="linenos">2134</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mergetreettlaction_sql-2135"><a href="#Generator.mergetreettlaction_sql-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="Generator.mergetreettlaction_sql-2136"><a href="#Generator.mergetreettlaction_sql-2136"><span class="linenos">2136</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2137"><a href="#Generator.mergetreettlaction_sql-2137"><span class="linenos">2137</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;recompress&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2138"><a href="#Generator.mergetreettlaction_sql-2138"><span class="linenos">2138</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2139"><a href="#Generator.mergetreettlaction_sql-2139"><span class="linenos">2139</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_disk&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2140"><a href="#Generator.mergetreettlaction_sql-2140"><span class="linenos">2140</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2141"><a href="#Generator.mergetreettlaction_sql-2141"><span class="linenos">2141</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_volume&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2142"><a href="#Generator.mergetreettlaction_sql-2142"><span class="linenos">2142</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2143"><a href="#Generator.mergetreettlaction_sql-2143"><span class="linenos">2143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettlaction_sql-2205"><a href="#Generator.mergetreettlaction_sql-2205"><span class="linenos">2205</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mergetreettlaction_sql-2206"><a href="#Generator.mergetreettlaction_sql-2206"><span class="linenos">2206</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2207"><a href="#Generator.mergetreettlaction_sql-2207"><span class="linenos">2207</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2208"><a href="#Generator.mergetreettlaction_sql-2208"><span class="linenos">2208</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;recompress&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2209"><a href="#Generator.mergetreettlaction_sql-2209"><span class="linenos">2209</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2210"><a href="#Generator.mergetreettlaction_sql-2210"><span class="linenos">2210</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_disk&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2211"><a href="#Generator.mergetreettlaction_sql-2211"><span class="linenos">2211</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2212"><a href="#Generator.mergetreettlaction_sql-2212"><span class="linenos">2212</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;to_volume&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2213"><a href="#Generator.mergetreettlaction_sql-2213"><span class="linenos">2213</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2214"><a href="#Generator.mergetreettlaction_sql-2214"><span class="linenos">2214</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11916,16 +12306,16 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.mergetreettl_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettl_sql-2145"><a href="#Generator.mergetreettl_sql-2145"><span class="linenos">2145</span></a> <span class="k">def</span> <span class="nf">mergetreettl_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mergetreettl_sql-2146"><a href="#Generator.mergetreettl_sql-2146"><span class="linenos">2146</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettl_sql-2147"><a href="#Generator.mergetreettl_sql-2147"><span class="linenos">2147</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettl_sql-2148"><a href="#Generator.mergetreettl_sql-2148"><span class="linenos">2148</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettl_sql-2149"><a href="#Generator.mergetreettl_sql-2149"><span class="linenos">2149</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettl_sql-2150"><a href="#Generator.mergetreettl_sql-2150"><span class="linenos">2150</span></a>
-</span><span id="Generator.mergetreettl_sql-2151"><a href="#Generator.mergetreettl_sql-2151"><span class="linenos">2151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator.mergetreettl_sql-2152"><a href="#Generator.mergetreettl_sql-2152"><span class="linenos">2152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.mergetreettl_sql-2153"><a href="#Generator.mergetreettl_sql-2153"><span class="linenos">2153</span></a>
-</span><span id="Generator.mergetreettl_sql-2154"><a href="#Generator.mergetreettl_sql-2154"><span class="linenos">2154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettl_sql-2216"><a href="#Generator.mergetreettl_sql-2216"><span class="linenos">2216</span></a> <span class="k">def</span> <span class="nf">mergetreettl_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mergetreettl_sql-2217"><a href="#Generator.mergetreettl_sql-2217"><span class="linenos">2217</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettl_sql-2218"><a href="#Generator.mergetreettl_sql-2218"><span class="linenos">2218</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettl_sql-2219"><a href="#Generator.mergetreettl_sql-2219"><span class="linenos">2219</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettl_sql-2220"><a href="#Generator.mergetreettl_sql-2220"><span class="linenos">2220</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettl_sql-2221"><a href="#Generator.mergetreettl_sql-2221"><span class="linenos">2221</span></a>
+</span><span id="Generator.mergetreettl_sql-2222"><a href="#Generator.mergetreettl_sql-2222"><span class="linenos">2222</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator.mergetreettl_sql-2223"><a href="#Generator.mergetreettl_sql-2223"><span class="linenos">2223</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.mergetreettl_sql-2224"><a href="#Generator.mergetreettl_sql-2224"><span class="linenos">2224</span></a>
+</span><span id="Generator.mergetreettl_sql-2225"><a href="#Generator.mergetreettl_sql-2225"><span class="linenos">2225</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11943,8 +12333,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.transaction_sql-2156"><a href="#Generator.transaction_sql-2156"><span class="linenos">2156</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-2157"><a href="#Generator.transaction_sql-2157"><span class="linenos">2157</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-2227"><a href="#Generator.transaction_sql-2227"><span class="linenos">2227</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-2228"><a href="#Generator.transaction_sql-2228"><span class="linenos">2228</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
</span></pre></div>
@@ -11962,12 +12352,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.commit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.commit_sql-2159"><a href="#Generator.commit_sql-2159"><span class="linenos">2159</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-2160"><a href="#Generator.commit_sql-2160"><span class="linenos">2160</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-2161"><a href="#Generator.commit_sql-2161"><span class="linenos">2161</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-2162"><a href="#Generator.commit_sql-2162"><span class="linenos">2162</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-2163"><a href="#Generator.commit_sql-2163"><span class="linenos">2163</span></a>
-</span><span id="Generator.commit_sql-2164"><a href="#Generator.commit_sql-2164"><span class="linenos">2164</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-2230"><a href="#Generator.commit_sql-2230"><span class="linenos">2230</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-2231"><a href="#Generator.commit_sql-2231"><span class="linenos">2231</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-2232"><a href="#Generator.commit_sql-2232"><span class="linenos">2232</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-2233"><a href="#Generator.commit_sql-2233"><span class="linenos">2233</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-2234"><a href="#Generator.commit_sql-2234"><span class="linenos">2234</span></a>
+</span><span id="Generator.commit_sql-2235"><a href="#Generator.commit_sql-2235"><span class="linenos">2235</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>
@@ -11985,10 +12375,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.rollback_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rollback_sql-2166"><a href="#Generator.rollback_sql-2166"><span class="linenos">2166</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-2167"><a href="#Generator.rollback_sql-2167"><span class="linenos">2167</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-2168"><a href="#Generator.rollback_sql-2168"><span class="linenos">2168</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-2169"><a href="#Generator.rollback_sql-2169"><span class="linenos">2169</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-2237"><a href="#Generator.rollback_sql-2237"><span class="linenos">2237</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-2238"><a href="#Generator.rollback_sql-2238"><span class="linenos">2238</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-2239"><a href="#Generator.rollback_sql-2239"><span class="linenos">2239</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-2240"><a href="#Generator.rollback_sql-2240"><span class="linenos">2240</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>
@@ -12006,25 +12396,25 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.altercolumn_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altercolumn_sql-2171"><a href="#Generator.altercolumn_sql-2171"><span class="linenos">2171</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-2172"><a href="#Generator.altercolumn_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.altercolumn_sql-2173"><a href="#Generator.altercolumn_sql-2173"><span class="linenos">2173</span></a>
-</span><span id="Generator.altercolumn_sql-2174"><a href="#Generator.altercolumn_sql-2174"><span class="linenos">2174</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-2175"><a href="#Generator.altercolumn_sql-2175"><span class="linenos">2175</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-2176"><a href="#Generator.altercolumn_sql-2176"><span class="linenos">2176</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-2177"><a href="#Generator.altercolumn_sql-2177"><span class="linenos">2177</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-2178"><a href="#Generator.altercolumn_sql-2178"><span class="linenos">2178</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-2179"><a href="#Generator.altercolumn_sql-2179"><span class="linenos">2179</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-2180"><a href="#Generator.altercolumn_sql-2180"><span class="linenos">2180</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-2181"><a href="#Generator.altercolumn_sql-2181"><span class="linenos">2181</span></a>
-</span><span id="Generator.altercolumn_sql-2182"><a href="#Generator.altercolumn_sql-2182"><span class="linenos">2182</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-2183"><a href="#Generator.altercolumn_sql-2183"><span class="linenos">2183</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-2184"><a href="#Generator.altercolumn_sql-2184"><span class="linenos">2184</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-2185"><a href="#Generator.altercolumn_sql-2185"><span class="linenos">2185</span></a>
-</span><span id="Generator.altercolumn_sql-2186"><a href="#Generator.altercolumn_sql-2186"><span class="linenos">2186</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-2187"><a href="#Generator.altercolumn_sql-2187"><span class="linenos">2187</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-2188"><a href="#Generator.altercolumn_sql-2188"><span class="linenos">2188</span></a>
-</span><span id="Generator.altercolumn_sql-2189"><a href="#Generator.altercolumn_sql-2189"><span class="linenos">2189</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-2242"><a href="#Generator.altercolumn_sql-2242"><span class="linenos">2242</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-2243"><a href="#Generator.altercolumn_sql-2243"><span class="linenos">2243</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2244"><a href="#Generator.altercolumn_sql-2244"><span class="linenos">2244</span></a>
+</span><span id="Generator.altercolumn_sql-2245"><a href="#Generator.altercolumn_sql-2245"><span class="linenos">2245</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-2246"><a href="#Generator.altercolumn_sql-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-2247"><a href="#Generator.altercolumn_sql-2247"><span class="linenos">2247</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-2248"><a href="#Generator.altercolumn_sql-2248"><span class="linenos">2248</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-2249"><a href="#Generator.altercolumn_sql-2249"><span class="linenos">2249</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-2250"><a href="#Generator.altercolumn_sql-2250"><span class="linenos">2250</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-2251"><a href="#Generator.altercolumn_sql-2251"><span class="linenos">2251</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-2252"><a href="#Generator.altercolumn_sql-2252"><span class="linenos">2252</span></a>
+</span><span id="Generator.altercolumn_sql-2253"><a href="#Generator.altercolumn_sql-2253"><span class="linenos">2253</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-2254"><a href="#Generator.altercolumn_sql-2254"><span class="linenos">2254</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-2255"><a href="#Generator.altercolumn_sql-2255"><span class="linenos">2255</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-2256"><a href="#Generator.altercolumn_sql-2256"><span class="linenos">2256</span></a>
+</span><span id="Generator.altercolumn_sql-2257"><a href="#Generator.altercolumn_sql-2257"><span class="linenos">2257</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-2258"><a href="#Generator.altercolumn_sql-2258"><span class="linenos">2258</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-2259"><a href="#Generator.altercolumn_sql-2259"><span class="linenos">2259</span></a>
+</span><span id="Generator.altercolumn_sql-2260"><a href="#Generator.altercolumn_sql-2260"><span class="linenos">2260</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>
@@ -12042,14 +12432,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.renametable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.renametable_sql-2191"><a href="#Generator.renametable_sql-2191"><span class="linenos">2191</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-2192"><a href="#Generator.renametable_sql-2192"><span class="linenos">2192</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
-</span><span id="Generator.renametable_sql-2193"><a href="#Generator.renametable_sql-2193"><span class="linenos">2193</span></a> <span class="c1"># Remove db from tables</span>
-</span><span id="Generator.renametable_sql-2194"><a href="#Generator.renametable_sql-2194"><span class="linenos">2194</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Generator.renametable_sql-2195"><a href="#Generator.renametable_sql-2195"><span class="linenos">2195</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
-</span><span id="Generator.renametable_sql-2196"><a href="#Generator.renametable_sql-2196"><span class="linenos">2196</span></a> <span class="p">)</span>
-</span><span id="Generator.renametable_sql-2197"><a href="#Generator.renametable_sql-2197"><span class="linenos">2197</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2198"><a href="#Generator.renametable_sql-2198"><span class="linenos">2198</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-2262"><a href="#Generator.renametable_sql-2262"><span class="linenos">2262</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-2263"><a href="#Generator.renametable_sql-2263"><span class="linenos">2263</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
+</span><span id="Generator.renametable_sql-2264"><a href="#Generator.renametable_sql-2264"><span class="linenos">2264</span></a> <span class="c1"># Remove db from tables</span>
+</span><span id="Generator.renametable_sql-2265"><a href="#Generator.renametable_sql-2265"><span class="linenos">2265</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Generator.renametable_sql-2266"><a href="#Generator.renametable_sql-2266"><span class="linenos">2266</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
+</span><span id="Generator.renametable_sql-2267"><a href="#Generator.renametable_sql-2267"><span class="linenos">2267</span></a> <span class="p">)</span>
+</span><span id="Generator.renametable_sql-2268"><a href="#Generator.renametable_sql-2268"><span class="linenos">2268</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2269"><a href="#Generator.renametable_sql-2269"><span class="linenos">2269</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>
@@ -12067,20 +12457,27 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.altertable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altertable_sql-2200"><a href="#Generator.altertable_sql-2200"><span class="linenos">2200</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-2201"><a href="#Generator.altertable_sql-2201"><span class="linenos">2201</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-2202"><a href="#Generator.altertable_sql-2202"><span class="linenos">2202</span></a>
-</span><span id="Generator.altertable_sql-2203"><a href="#Generator.altertable_sql-2203"><span class="linenos">2203</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-2204"><a href="#Generator.altertable_sql-2204"><span class="linenos">2204</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-2205"><a href="#Generator.altertable_sql-2205"><span class="linenos">2205</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-2206"><a href="#Generator.altertable_sql-2206"><span class="linenos">2206</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-2207"><a href="#Generator.altertable_sql-2207"><span class="linenos">2207</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-2208"><a href="#Generator.altertable_sql-2208"><span class="linenos">2208</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-2209"><a href="#Generator.altertable_sql-2209"><span class="linenos">2209</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.altertable_sql-2210"><a href="#Generator.altertable_sql-2210"><span class="linenos">2210</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-2211"><a href="#Generator.altertable_sql-2211"><span class="linenos">2211</span></a>
-</span><span id="Generator.altertable_sql-2212"><a href="#Generator.altertable_sql-2212"><span class="linenos">2212</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-2213"><a href="#Generator.altertable_sql-2213"><span class="linenos">2213</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-2271"><a href="#Generator.altertable_sql-2271"><span class="linenos">2271</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-2272"><a href="#Generator.altertable_sql-2272"><span class="linenos">2272</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-2273"><a href="#Generator.altertable_sql-2273"><span class="linenos">2273</span></a>
+</span><span id="Generator.altertable_sql-2274"><a href="#Generator.altertable_sql-2274"><span class="linenos">2274</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-2275"><a href="#Generator.altertable_sql-2275"><span class="linenos">2275</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span><span class="p">:</span>
+</span><span id="Generator.altertable_sql-2276"><a href="#Generator.altertable_sql-2276"><span class="linenos">2276</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><span id="Generator.altertable_sql-2277"><a href="#Generator.altertable_sql-2277"><span class="linenos">2277</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.altertable_sql-2278"><a href="#Generator.altertable_sql-2278"><span class="linenos">2278</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
+</span><span id="Generator.altertable_sql-2279"><a href="#Generator.altertable_sql-2279"><span class="linenos">2279</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
+</span><span id="Generator.altertable_sql-2280"><a href="#Generator.altertable_sql-2280"><span class="linenos">2280</span></a> <span class="p">)</span>
+</span><span id="Generator.altertable_sql-2281"><a href="#Generator.altertable_sql-2281"><span class="linenos">2281</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.altertable_sql-2282"><a href="#Generator.altertable_sql-2282"><span class="linenos">2282</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.altertable_sql-2283"><a href="#Generator.altertable_sql-2283"><span class="linenos">2283</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-2284"><a href="#Generator.altertable_sql-2284"><span class="linenos">2284</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-2285"><a href="#Generator.altertable_sql-2285"><span class="linenos">2285</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-2286"><a href="#Generator.altertable_sql-2286"><span class="linenos">2286</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-2287"><a href="#Generator.altertable_sql-2287"><span class="linenos">2287</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.altertable_sql-2288"><a href="#Generator.altertable_sql-2288"><span class="linenos">2288</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-2289"><a href="#Generator.altertable_sql-2289"><span class="linenos">2289</span></a>
+</span><span id="Generator.altertable_sql-2290"><a href="#Generator.altertable_sql-2290"><span class="linenos">2290</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-2291"><a href="#Generator.altertable_sql-2291"><span class="linenos">2291</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>
@@ -12098,10 +12495,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.droppartition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.droppartition_sql-2215"><a href="#Generator.droppartition_sql-2215"><span class="linenos">2215</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-2216"><a href="#Generator.droppartition_sql-2216"><span class="linenos">2216</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-2217"><a href="#Generator.droppartition_sql-2217"><span class="linenos">2217</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-2218"><a href="#Generator.droppartition_sql-2218"><span class="linenos">2218</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-2293"><a href="#Generator.droppartition_sql-2293"><span class="linenos">2293</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-2294"><a href="#Generator.droppartition_sql-2294"><span class="linenos">2294</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-2295"><a href="#Generator.droppartition_sql-2295"><span class="linenos">2295</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-2296"><a href="#Generator.droppartition_sql-2296"><span class="linenos">2296</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>
@@ -12119,16 +12516,16 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.addconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.addconstraint_sql-2220"><a href="#Generator.addconstraint_sql-2220"><span class="linenos">2220</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-2221"><a href="#Generator.addconstraint_sql-2221"><span class="linenos">2221</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2222"><a href="#Generator.addconstraint_sql-2222"><span class="linenos">2222</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-2223"><a href="#Generator.addconstraint_sql-2223"><span class="linenos">2223</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-2224"><a href="#Generator.addconstraint_sql-2224"><span class="linenos">2224</span></a>
-</span><span id="Generator.addconstraint_sql-2225"><a href="#Generator.addconstraint_sql-2225"><span class="linenos">2225</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-2226"><a href="#Generator.addconstraint_sql-2226"><span class="linenos">2226</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-2227"><a href="#Generator.addconstraint_sql-2227"><span class="linenos">2227</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-2228"><a href="#Generator.addconstraint_sql-2228"><span class="linenos">2228</span></a>
-</span><span id="Generator.addconstraint_sql-2229"><a href="#Generator.addconstraint_sql-2229"><span class="linenos">2229</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-2298"><a href="#Generator.addconstraint_sql-2298"><span class="linenos">2298</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-2299"><a href="#Generator.addconstraint_sql-2299"><span class="linenos">2299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2300"><a href="#Generator.addconstraint_sql-2300"><span class="linenos">2300</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-2301"><a href="#Generator.addconstraint_sql-2301"><span class="linenos">2301</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-2302"><a href="#Generator.addconstraint_sql-2302"><span class="linenos">2302</span></a>
+</span><span id="Generator.addconstraint_sql-2303"><a href="#Generator.addconstraint_sql-2303"><span class="linenos">2303</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-2304"><a href="#Generator.addconstraint_sql-2304"><span class="linenos">2304</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-2305"><a href="#Generator.addconstraint_sql-2305"><span class="linenos">2305</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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-2306"><a href="#Generator.addconstraint_sql-2306"><span class="linenos">2306</span></a>
+</span><span id="Generator.addconstraint_sql-2307"><a href="#Generator.addconstraint_sql-2307"><span class="linenos">2307</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>
@@ -12146,13 +12543,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.distinct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distinct_sql-2231"><a href="#Generator.distinct_sql-2231"><span class="linenos">2231</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-2232"><a href="#Generator.distinct_sql-2232"><span class="linenos">2232</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-2233"><a href="#Generator.distinct_sql-2233"><span class="linenos">2233</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-2234"><a href="#Generator.distinct_sql-2234"><span class="linenos">2234</span></a>
-</span><span id="Generator.distinct_sql-2235"><a href="#Generator.distinct_sql-2235"><span class="linenos">2235</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-2236"><a href="#Generator.distinct_sql-2236"><span class="linenos">2236</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-2237"><a href="#Generator.distinct_sql-2237"><span class="linenos">2237</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-2309"><a href="#Generator.distinct_sql-2309"><span class="linenos">2309</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-2310"><a href="#Generator.distinct_sql-2310"><span class="linenos">2310</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-2311"><a href="#Generator.distinct_sql-2311"><span class="linenos">2311</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-2312"><a href="#Generator.distinct_sql-2312"><span class="linenos">2312</span></a>
+</span><span id="Generator.distinct_sql-2313"><a href="#Generator.distinct_sql-2313"><span class="linenos">2313</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-2314"><a href="#Generator.distinct_sql-2314"><span class="linenos">2314</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-2315"><a href="#Generator.distinct_sql-2315"><span class="linenos">2315</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>
@@ -12170,8 +12567,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.ignorenulls_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ignorenulls_sql-2239"><a href="#Generator.ignorenulls_sql-2239"><span class="linenos">2239</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-2240"><a href="#Generator.ignorenulls_sql-2240"><span class="linenos">2240</span></a> <span class="k">return</span> <span class="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-2317"><a href="#Generator.ignorenulls_sql-2317"><span class="linenos">2317</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-2318"><a href="#Generator.ignorenulls_sql-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="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>
@@ -12189,8 +12586,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.respectnulls_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.respectnulls_sql-2242"><a href="#Generator.respectnulls_sql-2242"><span class="linenos">2242</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-2243"><a href="#Generator.respectnulls_sql-2243"><span class="linenos">2243</span></a> <span class="k">return</span> <span class="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-2320"><a href="#Generator.respectnulls_sql-2320"><span class="linenos">2320</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-2321"><a href="#Generator.respectnulls_sql-2321"><span class="linenos">2321</span></a> <span class="k">return</span> <span class="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>
@@ -12208,13 +12605,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.intdiv_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intdiv_sql-2245"><a href="#Generator.intdiv_sql-2245"><span class="linenos">2245</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-2246"><a href="#Generator.intdiv_sql-2246"><span class="linenos">2246</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-2247"><a href="#Generator.intdiv_sql-2247"><span class="linenos">2247</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-2248"><a href="#Generator.intdiv_sql-2248"><span class="linenos">2248</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
-</span><span id="Generator.intdiv_sql-2249"><a href="#Generator.intdiv_sql-2249"><span class="linenos">2249</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-2250"><a href="#Generator.intdiv_sql-2250"><span class="linenos">2250</span></a> <span class="p">)</span>
-</span><span id="Generator.intdiv_sql-2251"><a href="#Generator.intdiv_sql-2251"><span class="linenos">2251</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intdiv_sql-2323"><a href="#Generator.intdiv_sql-2323"><span class="linenos">2323</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-2324"><a href="#Generator.intdiv_sql-2324"><span class="linenos">2324</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-2325"><a href="#Generator.intdiv_sql-2325"><span class="linenos">2325</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-2326"><a href="#Generator.intdiv_sql-2326"><span class="linenos">2326</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="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">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
+</span><span id="Generator.intdiv_sql-2327"><a href="#Generator.intdiv_sql-2327"><span class="linenos">2327</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-2328"><a href="#Generator.intdiv_sql-2328"><span class="linenos">2328</span></a> <span class="p">)</span>
+</span><span id="Generator.intdiv_sql-2329"><a href="#Generator.intdiv_sql-2329"><span class="linenos">2329</span></a> <span class="p">)</span>
</span></pre></div>
@@ -12232,8 +12629,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.dpipe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dpipe_sql-2253"><a href="#Generator.dpipe_sql-2253"><span class="linenos">2253</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-2254"><a href="#Generator.dpipe_sql-2254"><span class="linenos">2254</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2331"><a href="#Generator.dpipe_sql-2331"><span class="linenos">2331</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-2332"><a href="#Generator.dpipe_sql-2332"><span class="linenos">2332</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12251,10 +12648,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.safedpipe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.safedpipe_sql-2256"><a href="#Generator.safedpipe_sql-2256"><span class="linenos">2256</span></a> <span class="k">def</span> <span class="nf">safedpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.safedpipe_sql-2257"><a href="#Generator.safedpipe_sql-2257"><span class="linenos">2257</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
-</span><span id="Generator.safedpipe_sql-2258"><a href="#Generator.safedpipe_sql-2258"><span class="linenos">2258</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
-</span><span id="Generator.safedpipe_sql-2259"><a href="#Generator.safedpipe_sql-2259"><span class="linenos">2259</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dpipe_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.safedpipe_sql-2334"><a href="#Generator.safedpipe_sql-2334"><span class="linenos">2334</span></a> <span class="k">def</span> <span class="nf">safedpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.safedpipe_sql-2335"><a href="#Generator.safedpipe_sql-2335"><span class="linenos">2335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">:</span>
+</span><span id="Generator.safedpipe_sql-2336"><a href="#Generator.safedpipe_sql-2336"><span class="linenos">2336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
+</span><span id="Generator.safedpipe_sql-2337"><a href="#Generator.safedpipe_sql-2337"><span class="linenos">2337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dpipe_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -12272,8 +12669,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.div_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.div_sql-2261"><a href="#Generator.div_sql-2261"><span class="linenos">2261</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-2262"><a href="#Generator.div_sql-2262"><span class="linenos">2262</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2339"><a href="#Generator.div_sql-2339"><span class="linenos">2339</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-2340"><a href="#Generator.div_sql-2340"><span class="linenos">2340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12291,8 +12688,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.overlaps_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.overlaps_sql-2264"><a href="#Generator.overlaps_sql-2264"><span class="linenos">2264</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-2265"><a href="#Generator.overlaps_sql-2265"><span class="linenos">2265</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2342"><a href="#Generator.overlaps_sql-2342"><span class="linenos">2342</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-2343"><a href="#Generator.overlaps_sql-2343"><span class="linenos">2343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12310,8 +12707,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.distance_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distance_sql-2267"><a href="#Generator.distance_sql-2267"><span class="linenos">2267</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-2268"><a href="#Generator.distance_sql-2268"><span class="linenos">2268</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2345"><a href="#Generator.distance_sql-2345"><span class="linenos">2345</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-2346"><a href="#Generator.distance_sql-2346"><span class="linenos">2346</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12329,8 +12726,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.dot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dot_sql-2270"><a href="#Generator.dot_sql-2270"><span class="linenos">2270</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-2271"><a href="#Generator.dot_sql-2271"><span class="linenos">2271</span></a> <span class="k">return</span> <span class="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-2348"><a href="#Generator.dot_sql-2348"><span class="linenos">2348</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-2349"><a href="#Generator.dot_sql-2349"><span class="linenos">2349</span></a> <span class="k">return</span> <span class="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>
@@ -12348,8 +12745,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.eq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.eq_sql-2273"><a href="#Generator.eq_sql-2273"><span class="linenos">2273</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-2274"><a href="#Generator.eq_sql-2274"><span class="linenos">2274</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2351"><a href="#Generator.eq_sql-2351"><span class="linenos">2351</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-2352"><a href="#Generator.eq_sql-2352"><span class="linenos">2352</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12367,8 +12764,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.escape_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_sql-2276"><a href="#Generator.escape_sql-2276"><span class="linenos">2276</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-2277"><a href="#Generator.escape_sql-2277"><span class="linenos">2277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2354"><a href="#Generator.escape_sql-2354"><span class="linenos">2354</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-2355"><a href="#Generator.escape_sql-2355"><span class="linenos">2355</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12386,8 +12783,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.glob_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.glob_sql-2279"><a href="#Generator.glob_sql-2279"><span class="linenos">2279</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-2280"><a href="#Generator.glob_sql-2280"><span class="linenos">2280</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2357"><a href="#Generator.glob_sql-2357"><span class="linenos">2357</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-2358"><a href="#Generator.glob_sql-2358"><span class="linenos">2358</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12405,8 +12802,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.gt_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gt_sql-2282"><a href="#Generator.gt_sql-2282"><span class="linenos">2282</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-2283"><a href="#Generator.gt_sql-2283"><span class="linenos">2283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2360"><a href="#Generator.gt_sql-2360"><span class="linenos">2360</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-2361"><a href="#Generator.gt_sql-2361"><span class="linenos">2361</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12424,8 +12821,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.gte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gte_sql-2285"><a href="#Generator.gte_sql-2285"><span class="linenos">2285</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-2286"><a href="#Generator.gte_sql-2286"><span class="linenos">2286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2363"><a href="#Generator.gte_sql-2363"><span class="linenos">2363</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-2364"><a href="#Generator.gte_sql-2364"><span class="linenos">2364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12443,8 +12840,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.ilike_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilike_sql-2288"><a href="#Generator.ilike_sql-2288"><span class="linenos">2288</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-2289"><a href="#Generator.ilike_sql-2289"><span class="linenos">2289</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2366"><a href="#Generator.ilike_sql-2366"><span class="linenos">2366</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-2367"><a href="#Generator.ilike_sql-2367"><span class="linenos">2367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12462,8 +12859,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.ilikeany_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilikeany_sql-2291"><a href="#Generator.ilikeany_sql-2291"><span class="linenos">2291</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-2292"><a href="#Generator.ilikeany_sql-2292"><span class="linenos">2292</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2369"><a href="#Generator.ilikeany_sql-2369"><span class="linenos">2369</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-2370"><a href="#Generator.ilikeany_sql-2370"><span class="linenos">2370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12481,12 +12878,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.is_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.is_sql-2294"><a href="#Generator.is_sql-2294"><span class="linenos">2294</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-2295"><a href="#Generator.is_sql-2295"><span class="linenos">2295</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
-</span><span id="Generator.is_sql-2296"><a href="#Generator.is_sql-2296"><span class="linenos">2296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.is_sql-2297"><a href="#Generator.is_sql-2297"><span class="linenos">2297</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.is_sql-2298"><a href="#Generator.is_sql-2298"><span class="linenos">2298</span></a> <span class="p">)</span>
-</span><span id="Generator.is_sql-2299"><a href="#Generator.is_sql-2299"><span class="linenos">2299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2372"><a href="#Generator.is_sql-2372"><span class="linenos">2372</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-2373"><a href="#Generator.is_sql-2373"><span class="linenos">2373</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
+</span><span id="Generator.is_sql-2374"><a href="#Generator.is_sql-2374"><span class="linenos">2374</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.is_sql-2375"><a href="#Generator.is_sql-2375"><span class="linenos">2375</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.is_sql-2376"><a href="#Generator.is_sql-2376"><span class="linenos">2376</span></a> <span class="p">)</span>
+</span><span id="Generator.is_sql-2377"><a href="#Generator.is_sql-2377"><span class="linenos">2377</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12504,8 +12901,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.like_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.like_sql-2301"><a href="#Generator.like_sql-2301"><span class="linenos">2301</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-2302"><a href="#Generator.like_sql-2302"><span class="linenos">2302</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2379"><a href="#Generator.like_sql-2379"><span class="linenos">2379</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-2380"><a href="#Generator.like_sql-2380"><span class="linenos">2380</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12523,8 +12920,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.likeany_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeany_sql-2304"><a href="#Generator.likeany_sql-2304"><span class="linenos">2304</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-2305"><a href="#Generator.likeany_sql-2305"><span class="linenos">2305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2382"><a href="#Generator.likeany_sql-2382"><span class="linenos">2382</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-2383"><a href="#Generator.likeany_sql-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12542,8 +12939,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.similarto_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.similarto_sql-2307"><a href="#Generator.similarto_sql-2307"><span class="linenos">2307</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-2308"><a href="#Generator.similarto_sql-2308"><span class="linenos">2308</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2385"><a href="#Generator.similarto_sql-2385"><span class="linenos">2385</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-2386"><a href="#Generator.similarto_sql-2386"><span class="linenos">2386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12561,8 +12958,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.lt_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lt_sql-2310"><a href="#Generator.lt_sql-2310"><span class="linenos">2310</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-2311"><a href="#Generator.lt_sql-2311"><span class="linenos">2311</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2388"><a href="#Generator.lt_sql-2388"><span class="linenos">2388</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-2389"><a href="#Generator.lt_sql-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12580,8 +12977,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.lte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lte_sql-2313"><a href="#Generator.lte_sql-2313"><span class="linenos">2313</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-2314"><a href="#Generator.lte_sql-2314"><span class="linenos">2314</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2391"><a href="#Generator.lte_sql-2391"><span class="linenos">2391</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-2392"><a href="#Generator.lte_sql-2392"><span class="linenos">2392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12599,8 +12996,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.mod_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mod_sql-2316"><a href="#Generator.mod_sql-2316"><span class="linenos">2316</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-2317"><a href="#Generator.mod_sql-2317"><span class="linenos">2317</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2394"><a href="#Generator.mod_sql-2394"><span class="linenos">2394</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-2395"><a href="#Generator.mod_sql-2395"><span class="linenos">2395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12618,8 +13015,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.mul_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mul_sql-2319"><a href="#Generator.mul_sql-2319"><span class="linenos">2319</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-2320"><a href="#Generator.mul_sql-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2397"><a href="#Generator.mul_sql-2397"><span class="linenos">2397</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-2398"><a href="#Generator.mul_sql-2398"><span class="linenos">2398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12637,8 +13034,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.neq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neq_sql-2322"><a href="#Generator.neq_sql-2322"><span class="linenos">2322</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-2323"><a href="#Generator.neq_sql-2323"><span class="linenos">2323</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2400"><a href="#Generator.neq_sql-2400"><span class="linenos">2400</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-2401"><a href="#Generator.neq_sql-2401"><span class="linenos">2401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12656,8 +13053,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.nullsafeeq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeeq_sql-2325"><a href="#Generator.nullsafeeq_sql-2325"><span class="linenos">2325</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-2326"><a href="#Generator.nullsafeeq_sql-2326"><span class="linenos">2326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2403"><a href="#Generator.nullsafeeq_sql-2403"><span class="linenos">2403</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-2404"><a href="#Generator.nullsafeeq_sql-2404"><span class="linenos">2404</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12675,8 +13072,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.nullsafeneq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeneq_sql-2328"><a href="#Generator.nullsafeneq_sql-2328"><span class="linenos">2328</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-2329"><a href="#Generator.nullsafeneq_sql-2329"><span class="linenos">2329</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2406"><a href="#Generator.nullsafeneq_sql-2406"><span class="linenos">2406</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-2407"><a href="#Generator.nullsafeneq_sql-2407"><span class="linenos">2407</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12694,8 +13091,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.or_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.or_sql-2331"><a href="#Generator.or_sql-2331"><span class="linenos">2331</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-2332"><a href="#Generator.or_sql-2332"><span class="linenos">2332</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-2409"><a href="#Generator.or_sql-2409"><span class="linenos">2409</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-2410"><a href="#Generator.or_sql-2410"><span class="linenos">2410</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>
@@ -12713,8 +13110,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.slice_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.slice_sql-2334"><a href="#Generator.slice_sql-2334"><span class="linenos">2334</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-2335"><a href="#Generator.slice_sql-2335"><span class="linenos">2335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2412"><a href="#Generator.slice_sql-2412"><span class="linenos">2412</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-2413"><a href="#Generator.slice_sql-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12732,8 +13129,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.sub_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sub_sql-2337"><a href="#Generator.sub_sql-2337"><span class="linenos">2337</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-2338"><a href="#Generator.sub_sql-2338"><span class="linenos">2338</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2415"><a href="#Generator.sub_sql-2415"><span class="linenos">2415</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-2416"><a href="#Generator.sub_sql-2416"><span class="linenos">2416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -12751,8 +13148,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.trycast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trycast_sql-2340"><a href="#Generator.trycast_sql-2340"><span class="linenos">2340</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-2341"><a href="#Generator.trycast_sql-2341"><span class="linenos">2341</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trycast_sql-2418"><a href="#Generator.trycast_sql-2418"><span class="linenos">2418</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-2419"><a href="#Generator.trycast_sql-2419"><span class="linenos">2419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -12770,12 +13167,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.use_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.use_sql-2343"><a href="#Generator.use_sql-2343"><span class="linenos">2343</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-2344"><a href="#Generator.use_sql-2344"><span class="linenos">2344</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-2345"><a href="#Generator.use_sql-2345"><span class="linenos">2345</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-2346"><a href="#Generator.use_sql-2346"><span class="linenos">2346</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2347"><a href="#Generator.use_sql-2347"><span class="linenos">2347</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-2348"><a href="#Generator.use_sql-2348"><span class="linenos">2348</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-2421"><a href="#Generator.use_sql-2421"><span class="linenos">2421</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-2422"><a href="#Generator.use_sql-2422"><span class="linenos">2422</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-2423"><a href="#Generator.use_sql-2423"><span class="linenos">2423</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-2424"><a href="#Generator.use_sql-2424"><span class="linenos">2424</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2425"><a href="#Generator.use_sql-2425"><span class="linenos">2425</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-2426"><a href="#Generator.use_sql-2426"><span class="linenos">2426</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>
@@ -12793,9 +13190,9 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.binary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.binary-2350"><a href="#Generator.binary-2350"><span class="linenos">2350</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-2351"><a href="#Generator.binary-2351"><span class="linenos">2351</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-2352"><a href="#Generator.binary-2352"><span class="linenos">2352</span></a> <span class="k">return</span> <span class="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-2428"><a href="#Generator.binary-2428"><span class="linenos">2428</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-2429"><a href="#Generator.binary-2429"><span class="linenos">2429</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-2430"><a href="#Generator.binary-2430"><span class="linenos">2430</span></a> <span class="k">return</span> <span class="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>
@@ -12813,24 +13210,24 @@ which can be slow to compute, so only use it if you set _hash on each node.</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-2354"><a href="#Generator.function_fallback_sql-2354"><span class="linenos">2354</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-2355"><a href="#Generator.function_fallback_sql-2355"><span class="linenos">2355</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.function_fallback_sql-2356"><a href="#Generator.function_fallback_sql-2356"><span class="linenos">2356</span></a>
-</span><span id="Generator.function_fallback_sql-2357"><a href="#Generator.function_fallback_sql-2357"><span class="linenos">2357</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-2358"><a href="#Generator.function_fallback_sql-2358"><span class="linenos">2358</span></a> <span class="n">arg_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
-</span><span id="Generator.function_fallback_sql-2359"><a href="#Generator.function_fallback_sql-2359"><span class="linenos">2359</span></a>
-</span><span id="Generator.function_fallback_sql-2360"><a href="#Generator.function_fallback_sql-2360"><span class="linenos">2360</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-2361"><a href="#Generator.function_fallback_sql-2361"><span class="linenos">2361</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-2362"><a href="#Generator.function_fallback_sql-2362"><span class="linenos">2362</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-2363"><a href="#Generator.function_fallback_sql-2363"><span class="linenos">2363</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-2364"><a href="#Generator.function_fallback_sql-2364"><span class="linenos">2364</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-2365"><a href="#Generator.function_fallback_sql-2365"><span class="linenos">2365</span></a>
-</span><span id="Generator.function_fallback_sql-2366"><a href="#Generator.function_fallback_sql-2366"><span class="linenos">2366</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-2367"><a href="#Generator.function_fallback_sql-2367"><span class="linenos">2367</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="Generator.function_fallback_sql-2368"><a href="#Generator.function_fallback_sql-2368"><span class="linenos">2368</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-2369"><a href="#Generator.function_fallback_sql-2369"><span class="linenos">2369</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="Generator.function_fallback_sql-2370"><a href="#Generator.function_fallback_sql-2370"><span class="linenos">2370</span></a>
-</span><span id="Generator.function_fallback_sql-2371"><a href="#Generator.function_fallback_sql-2371"><span class="linenos">2371</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.function_fallback_sql-2432"><a href="#Generator.function_fallback_sql-2432"><span class="linenos">2432</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-2433"><a href="#Generator.function_fallback_sql-2433"><span class="linenos">2433</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.function_fallback_sql-2434"><a href="#Generator.function_fallback_sql-2434"><span class="linenos">2434</span></a>
+</span><span id="Generator.function_fallback_sql-2435"><a href="#Generator.function_fallback_sql-2435"><span class="linenos">2435</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-2436"><a href="#Generator.function_fallback_sql-2436"><span class="linenos">2436</span></a> <span class="n">arg_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+</span><span id="Generator.function_fallback_sql-2437"><a href="#Generator.function_fallback_sql-2437"><span class="linenos">2437</span></a>
+</span><span id="Generator.function_fallback_sql-2438"><a href="#Generator.function_fallback_sql-2438"><span class="linenos">2438</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-2439"><a href="#Generator.function_fallback_sql-2439"><span class="linenos">2439</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-2440"><a href="#Generator.function_fallback_sql-2440"><span class="linenos">2440</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-2441"><a href="#Generator.function_fallback_sql-2441"><span class="linenos">2441</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-2442"><a href="#Generator.function_fallback_sql-2442"><span class="linenos">2442</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-2443"><a href="#Generator.function_fallback_sql-2443"><span class="linenos">2443</span></a>
+</span><span id="Generator.function_fallback_sql-2444"><a href="#Generator.function_fallback_sql-2444"><span class="linenos">2444</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-2445"><a href="#Generator.function_fallback_sql-2445"><span class="linenos">2445</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator.function_fallback_sql-2446"><a href="#Generator.function_fallback_sql-2446"><span class="linenos">2446</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-2447"><a href="#Generator.function_fallback_sql-2447"><span class="linenos">2447</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator.function_fallback_sql-2448"><a href="#Generator.function_fallback_sql-2448"><span class="linenos">2448</span></a>
+</span><span id="Generator.function_fallback_sql-2449"><a href="#Generator.function_fallback_sql-2449"><span class="linenos">2449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -12848,14 +13245,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.func-2373"><a href="#Generator.func-2373"><span class="linenos">2373</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
-</span><span id="Generator.func-2374"><a href="#Generator.func-2374"><span class="linenos">2374</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.func-2375"><a href="#Generator.func-2375"><span class="linenos">2375</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator.func-2376"><a href="#Generator.func-2376"><span class="linenos">2376</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="Generator.func-2377"><a href="#Generator.func-2377"><span class="linenos">2377</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
-</span><span id="Generator.func-2378"><a href="#Generator.func-2378"><span class="linenos">2378</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
-</span><span id="Generator.func-2379"><a href="#Generator.func-2379"><span class="linenos">2379</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.func-2380"><a href="#Generator.func-2380"><span class="linenos">2380</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.func-2451"><a href="#Generator.func-2451"><span class="linenos">2451</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
+</span><span id="Generator.func-2452"><a href="#Generator.func-2452"><span class="linenos">2452</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.func-2453"><a href="#Generator.func-2453"><span class="linenos">2453</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator.func-2454"><a href="#Generator.func-2454"><span class="linenos">2454</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="Generator.func-2455"><a href="#Generator.func-2455"><span class="linenos">2455</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
+</span><span id="Generator.func-2456"><a href="#Generator.func-2456"><span class="linenos">2456</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
+</span><span id="Generator.func-2457"><a href="#Generator.func-2457"><span class="linenos">2457</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.func-2458"><a href="#Generator.func-2458"><span class="linenos">2458</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12873,11 +13270,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.format_args"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_args-2382"><a href="#Generator.format_args-2382"><span class="linenos">2382</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-2383"><a href="#Generator.format_args-2383"><span class="linenos">2383</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-2384"><a href="#Generator.format_args-2384"><span class="linenos">2384</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-2385"><a href="#Generator.format_args-2385"><span class="linenos">2385</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-2386"><a href="#Generator.format_args-2386"><span class="linenos">2386</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-2460"><a href="#Generator.format_args-2460"><span class="linenos">2460</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-2461"><a href="#Generator.format_args-2461"><span class="linenos">2461</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-2462"><a href="#Generator.format_args-2462"><span class="linenos">2462</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-2463"><a href="#Generator.format_args-2463"><span class="linenos">2463</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-2464"><a href="#Generator.format_args-2464"><span class="linenos">2464</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>
@@ -12895,8 +13292,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.text_width"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.text_width-2388"><a href="#Generator.text_width-2388"><span class="linenos">2388</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-2389"><a href="#Generator.text_width-2389"><span class="linenos">2389</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-2466"><a href="#Generator.text_width-2466"><span class="linenos">2466</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-2467"><a href="#Generator.text_width-2467"><span class="linenos">2467</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>
@@ -12914,10 +13311,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.format_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_time-2391"><a href="#Generator.format_time-2391"><span class="linenos">2391</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-2392"><a href="#Generator.format_time-2392"><span class="linenos">2392</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Generator.format_time-2393"><a href="#Generator.format_time-2393"><span class="linenos">2393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span>
-</span><span id="Generator.format_time-2394"><a href="#Generator.format_time-2394"><span class="linenos">2394</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_time-2469"><a href="#Generator.format_time-2469"><span class="linenos">2469</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-2470"><a href="#Generator.format_time-2470"><span class="linenos">2470</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Generator.format_time-2471"><a href="#Generator.format_time-2471"><span class="linenos">2471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span>
+</span><span id="Generator.format_time-2472"><a href="#Generator.format_time-2472"><span class="linenos">2472</span></a> <span class="p">)</span>
</span></pre></div>
@@ -12935,51 +13332,51 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.expressions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.expressions-2396"><a href="#Generator.expressions-2396"><span class="linenos">2396</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="Generator.expressions-2397"><a href="#Generator.expressions-2397"><span class="linenos">2397</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.expressions-2398"><a href="#Generator.expressions-2398"><span class="linenos">2398</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-2399"><a href="#Generator.expressions-2399"><span class="linenos">2399</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-2400"><a href="#Generator.expressions-2400"><span class="linenos">2400</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-2401"><a href="#Generator.expressions-2401"><span class="linenos">2401</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-2402"><a href="#Generator.expressions-2402"><span class="linenos">2402</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-2403"><a href="#Generator.expressions-2403"><span class="linenos">2403</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.expressions-2404"><a href="#Generator.expressions-2404"><span class="linenos">2404</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-2405"><a href="#Generator.expressions-2405"><span class="linenos">2405</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-2406"><a href="#Generator.expressions-2406"><span class="linenos">2406</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-2407"><a href="#Generator.expressions-2407"><span class="linenos">2407</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-2408"><a href="#Generator.expressions-2408"><span class="linenos">2408</span></a>
-</span><span id="Generator.expressions-2409"><a href="#Generator.expressions-2409"><span class="linenos">2409</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-2410"><a href="#Generator.expressions-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.expressions-2411"><a href="#Generator.expressions-2411"><span class="linenos">2411</span></a>
-</span><span id="Generator.expressions-2412"><a href="#Generator.expressions-2412"><span class="linenos">2412</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator.expressions-2413"><a href="#Generator.expressions-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator.expressions-2414"><a href="#Generator.expressions-2414"><span class="linenos">2414</span></a>
-</span><span id="Generator.expressions-2415"><a href="#Generator.expressions-2415"><span class="linenos">2415</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-2416"><a href="#Generator.expressions-2416"><span class="linenos">2416</span></a>
-</span><span id="Generator.expressions-2417"><a href="#Generator.expressions-2417"><span class="linenos">2417</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-2418"><a href="#Generator.expressions-2418"><span class="linenos">2418</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-2419"><a href="#Generator.expressions-2419"><span class="linenos">2419</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-2420"><a href="#Generator.expressions-2420"><span class="linenos">2420</span></a>
-</span><span id="Generator.expressions-2421"><a href="#Generator.expressions-2421"><span class="linenos">2421</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.expressions-2422"><a href="#Generator.expressions-2422"><span class="linenos">2422</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-2423"><a href="#Generator.expressions-2423"><span class="linenos">2423</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-2424"><a href="#Generator.expressions-2424"><span class="linenos">2424</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="Generator.expressions-2425"><a href="#Generator.expressions-2425"><span class="linenos">2425</span></a> <span class="k">continue</span>
-</span><span id="Generator.expressions-2426"><a href="#Generator.expressions-2426"><span class="linenos">2426</span></a>
-</span><span id="Generator.expressions-2427"><a href="#Generator.expressions-2427"><span class="linenos">2427</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-2428"><a href="#Generator.expressions-2428"><span class="linenos">2428</span></a>
-</span><span id="Generator.expressions-2429"><a href="#Generator.expressions-2429"><span class="linenos">2429</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-2430"><a href="#Generator.expressions-2430"><span class="linenos">2430</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-2431"><a href="#Generator.expressions-2431"><span class="linenos">2431</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-2432"><a href="#Generator.expressions-2432"><span class="linenos">2432</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.expressions-2433"><a href="#Generator.expressions-2433"><span class="linenos">2433</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-2434"><a href="#Generator.expressions-2434"><span class="linenos">2434</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-2435"><a href="#Generator.expressions-2435"><span class="linenos">2435</span></a> <span class="p">)</span>
-</span><span id="Generator.expressions-2436"><a href="#Generator.expressions-2436"><span class="linenos">2436</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.expressions-2437"><a href="#Generator.expressions-2437"><span class="linenos">2437</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-2438"><a href="#Generator.expressions-2438"><span class="linenos">2438</span></a>
-</span><span id="Generator.expressions-2439"><a href="#Generator.expressions-2439"><span class="linenos">2439</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-2440"><a href="#Generator.expressions-2440"><span class="linenos">2440</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.expressions-2474"><a href="#Generator.expressions-2474"><span class="linenos">2474</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="Generator.expressions-2475"><a href="#Generator.expressions-2475"><span class="linenos">2475</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.expressions-2476"><a href="#Generator.expressions-2476"><span class="linenos">2476</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-2477"><a href="#Generator.expressions-2477"><span class="linenos">2477</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-2478"><a href="#Generator.expressions-2478"><span class="linenos">2478</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-2479"><a href="#Generator.expressions-2479"><span class="linenos">2479</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-2480"><a href="#Generator.expressions-2480"><span class="linenos">2480</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-2481"><a href="#Generator.expressions-2481"><span class="linenos">2481</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.expressions-2482"><a href="#Generator.expressions-2482"><span class="linenos">2482</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-2483"><a href="#Generator.expressions-2483"><span class="linenos">2483</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-2484"><a href="#Generator.expressions-2484"><span class="linenos">2484</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-2485"><a href="#Generator.expressions-2485"><span class="linenos">2485</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-2486"><a href="#Generator.expressions-2486"><span class="linenos">2486</span></a>
+</span><span id="Generator.expressions-2487"><a href="#Generator.expressions-2487"><span class="linenos">2487</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-2488"><a href="#Generator.expressions-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.expressions-2489"><a href="#Generator.expressions-2489"><span class="linenos">2489</span></a>
+</span><span id="Generator.expressions-2490"><a href="#Generator.expressions-2490"><span class="linenos">2490</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator.expressions-2491"><a href="#Generator.expressions-2491"><span class="linenos">2491</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator.expressions-2492"><a href="#Generator.expressions-2492"><span class="linenos">2492</span></a>
+</span><span id="Generator.expressions-2493"><a href="#Generator.expressions-2493"><span class="linenos">2493</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-2494"><a href="#Generator.expressions-2494"><span class="linenos">2494</span></a>
+</span><span id="Generator.expressions-2495"><a href="#Generator.expressions-2495"><span class="linenos">2495</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-2496"><a href="#Generator.expressions-2496"><span class="linenos">2496</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-2497"><a href="#Generator.expressions-2497"><span class="linenos">2497</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-2498"><a href="#Generator.expressions-2498"><span class="linenos">2498</span></a>
+</span><span id="Generator.expressions-2499"><a href="#Generator.expressions-2499"><span class="linenos">2499</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.expressions-2500"><a href="#Generator.expressions-2500"><span class="linenos">2500</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-2501"><a href="#Generator.expressions-2501"><span class="linenos">2501</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-2502"><a href="#Generator.expressions-2502"><span class="linenos">2502</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="Generator.expressions-2503"><a href="#Generator.expressions-2503"><span class="linenos">2503</span></a> <span class="k">continue</span>
+</span><span id="Generator.expressions-2504"><a href="#Generator.expressions-2504"><span class="linenos">2504</span></a>
+</span><span id="Generator.expressions-2505"><a href="#Generator.expressions-2505"><span class="linenos">2505</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-2506"><a href="#Generator.expressions-2506"><span class="linenos">2506</span></a>
+</span><span id="Generator.expressions-2507"><a href="#Generator.expressions-2507"><span class="linenos">2507</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-2508"><a href="#Generator.expressions-2508"><span class="linenos">2508</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-2509"><a href="#Generator.expressions-2509"><span class="linenos">2509</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-2510"><a href="#Generator.expressions-2510"><span class="linenos">2510</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.expressions-2511"><a href="#Generator.expressions-2511"><span class="linenos">2511</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-2512"><a href="#Generator.expressions-2512"><span class="linenos">2512</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-2513"><a href="#Generator.expressions-2513"><span class="linenos">2513</span></a> <span class="p">)</span>
+</span><span id="Generator.expressions-2514"><a href="#Generator.expressions-2514"><span class="linenos">2514</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.expressions-2515"><a href="#Generator.expressions-2515"><span class="linenos">2515</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-2516"><a href="#Generator.expressions-2516"><span class="linenos">2516</span></a>
+</span><span id="Generator.expressions-2517"><a href="#Generator.expressions-2517"><span class="linenos">2517</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-2518"><a href="#Generator.expressions-2518"><span class="linenos">2518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
</span></pre></div>
@@ -12997,12 +13394,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.op_expressions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.op_expressions-2442"><a href="#Generator.op_expressions-2442"><span class="linenos">2442</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-2443"><a href="#Generator.op_expressions-2443"><span class="linenos">2443</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-2444"><a href="#Generator.op_expressions-2444"><span class="linenos">2444</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-2445"><a href="#Generator.op_expressions-2445"><span class="linenos">2445</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator.op_expressions-2446"><a href="#Generator.op_expressions-2446"><span class="linenos">2446</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-2447"><a href="#Generator.op_expressions-2447"><span class="linenos">2447</span></a> <span class="k">return</span> <span class="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-2520"><a href="#Generator.op_expressions-2520"><span class="linenos">2520</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-2521"><a href="#Generator.op_expressions-2521"><span class="linenos">2521</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-2522"><a href="#Generator.op_expressions-2522"><span class="linenos">2522</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-2523"><a href="#Generator.op_expressions-2523"><span class="linenos">2523</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator.op_expressions-2524"><a href="#Generator.op_expressions-2524"><span class="linenos">2524</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-2525"><a href="#Generator.op_expressions-2525"><span class="linenos">2525</span></a> <span class="k">return</span> <span class="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>
@@ -13020,11 +13417,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.naked_property"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.naked_property-2449"><a href="#Generator.naked_property-2449"><span class="linenos">2449</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-2450"><a href="#Generator.naked_property-2450"><span class="linenos">2450</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-2451"><a href="#Generator.naked_property-2451"><span class="linenos">2451</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-2452"><a href="#Generator.naked_property-2452"><span class="linenos">2452</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-2453"><a href="#Generator.naked_property-2453"><span class="linenos">2453</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-2527"><a href="#Generator.naked_property-2527"><span class="linenos">2527</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-2528"><a href="#Generator.naked_property-2528"><span class="linenos">2528</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-2529"><a href="#Generator.naked_property-2529"><span class="linenos">2529</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-2530"><a href="#Generator.naked_property-2530"><span class="linenos">2530</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-2531"><a href="#Generator.naked_property-2531"><span class="linenos">2531</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>
@@ -13042,12 +13439,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.set_operation"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_operation-2455"><a href="#Generator.set_operation-2455"><span class="linenos">2455</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-2456"><a href="#Generator.set_operation-2456"><span class="linenos">2456</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2457"><a href="#Generator.set_operation-2457"><span class="linenos">2457</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-2458"><a href="#Generator.set_operation-2458"><span class="linenos">2458</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-2459"><a href="#Generator.set_operation-2459"><span class="linenos">2459</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-2460"><a href="#Generator.set_operation-2460"><span class="linenos">2460</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_operation-2533"><a href="#Generator.set_operation-2533"><span class="linenos">2533</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-2534"><a href="#Generator.set_operation-2534"><span class="linenos">2534</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2535"><a href="#Generator.set_operation-2535"><span class="linenos">2535</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-2536"><a href="#Generator.set_operation-2536"><span class="linenos">2536</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-2537"><a href="#Generator.set_operation-2537"><span class="linenos">2537</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-2538"><a href="#Generator.set_operation-2538"><span class="linenos">2538</span></a> <span class="p">)</span>
</span></pre></div>
@@ -13065,8 +13462,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.tag_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tag_sql-2462"><a href="#Generator.tag_sql-2462"><span class="linenos">2462</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-2463"><a href="#Generator.tag_sql-2463"><span class="linenos">2463</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-2540"><a href="#Generator.tag_sql-2540"><span class="linenos">2540</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-2541"><a href="#Generator.tag_sql-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><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>
@@ -13084,8 +13481,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.token_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.token_sql-2465"><a href="#Generator.token_sql-2465"><span class="linenos">2465</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-2466"><a href="#Generator.token_sql-2466"><span class="linenos">2466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2543"><a href="#Generator.token_sql-2543"><span class="linenos">2543</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-2544"><a href="#Generator.token_sql-2544"><span class="linenos">2544</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>
@@ -13103,13 +13500,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.userdefinedfunction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.userdefinedfunction_sql-2468"><a href="#Generator.userdefinedfunction_sql-2468"><span class="linenos">2468</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-2469"><a href="#Generator.userdefinedfunction_sql-2469"><span class="linenos">2469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2470"><a href="#Generator.userdefinedfunction_sql-2470"><span class="linenos">2470</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-2471"><a href="#Generator.userdefinedfunction_sql-2471"><span class="linenos">2471</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.userdefinedfunction_sql-2472"><a href="#Generator.userdefinedfunction_sql-2472"><span class="linenos">2472</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-2473"><a href="#Generator.userdefinedfunction_sql-2473"><span class="linenos">2473</span></a> <span class="p">)</span>
-</span><span id="Generator.userdefinedfunction_sql-2474"><a href="#Generator.userdefinedfunction_sql-2474"><span class="linenos">2474</span></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-2546"><a href="#Generator.userdefinedfunction_sql-2546"><span class="linenos">2546</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-2547"><a href="#Generator.userdefinedfunction_sql-2547"><span class="linenos">2547</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2548"><a href="#Generator.userdefinedfunction_sql-2548"><span class="linenos">2548</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-2549"><a href="#Generator.userdefinedfunction_sql-2549"><span class="linenos">2549</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.userdefinedfunction_sql-2550"><a href="#Generator.userdefinedfunction_sql-2550"><span class="linenos">2550</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-2551"><a href="#Generator.userdefinedfunction_sql-2551"><span class="linenos">2551</span></a> <span class="p">)</span>
+</span><span id="Generator.userdefinedfunction_sql-2552"><a href="#Generator.userdefinedfunction_sql-2552"><span class="linenos">2552</span></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>
@@ -13127,10 +13524,10 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.joinhint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.joinhint_sql-2476"><a href="#Generator.joinhint_sql-2476"><span class="linenos">2476</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-2477"><a href="#Generator.joinhint_sql-2477"><span class="linenos">2477</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2478"><a href="#Generator.joinhint_sql-2478"><span class="linenos">2478</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-2479"><a href="#Generator.joinhint_sql-2479"><span class="linenos">2479</span></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-2554"><a href="#Generator.joinhint_sql-2554"><span class="linenos">2554</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-2555"><a href="#Generator.joinhint_sql-2555"><span class="linenos">2555</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2556"><a href="#Generator.joinhint_sql-2556"><span class="linenos">2556</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-2557"><a href="#Generator.joinhint_sql-2557"><span class="linenos">2557</span></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>
@@ -13148,8 +13545,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.kwarg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.kwarg_sql-2481"><a href="#Generator.kwarg_sql-2481"><span class="linenos">2481</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-2482"><a href="#Generator.kwarg_sql-2482"><span class="linenos">2482</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-2559"><a href="#Generator.kwarg_sql-2559"><span class="linenos">2559</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-2560"><a href="#Generator.kwarg_sql-2560"><span class="linenos">2560</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
@@ -13167,25 +13564,25 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.when_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.when_sql-2484"><a href="#Generator.when_sql-2484"><span class="linenos">2484</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-2485"><a href="#Generator.when_sql-2485"><span class="linenos">2485</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-2486"><a href="#Generator.when_sql-2486"><span class="linenos">2486</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-2487"><a href="#Generator.when_sql-2487"><span class="linenos">2487</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-2488"><a href="#Generator.when_sql-2488"><span class="linenos">2488</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-2489"><a href="#Generator.when_sql-2489"><span class="linenos">2489</span></a>
-</span><span id="Generator.when_sql-2490"><a href="#Generator.when_sql-2490"><span class="linenos">2490</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-2491"><a href="#Generator.when_sql-2491"><span class="linenos">2491</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-2492"><a href="#Generator.when_sql-2492"><span class="linenos">2492</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-2493"><a href="#Generator.when_sql-2493"><span class="linenos">2493</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-2494"><a href="#Generator.when_sql-2494"><span class="linenos">2494</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-2495"><a href="#Generator.when_sql-2495"><span class="linenos">2495</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-2496"><a href="#Generator.when_sql-2496"><span class="linenos">2496</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-2497"><a href="#Generator.when_sql-2497"><span class="linenos">2497</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-2498"><a href="#Generator.when_sql-2498"><span class="linenos">2498</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.when_sql-2499"><a href="#Generator.when_sql-2499"><span class="linenos">2499</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-2500"><a href="#Generator.when_sql-2500"><span class="linenos">2500</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.when_sql-2501"><a href="#Generator.when_sql-2501"><span class="linenos">2501</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-2502"><a href="#Generator.when_sql-2502"><span class="linenos">2502</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-2562"><a href="#Generator.when_sql-2562"><span class="linenos">2562</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-2563"><a href="#Generator.when_sql-2563"><span class="linenos">2563</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-2564"><a href="#Generator.when_sql-2564"><span class="linenos">2564</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-2565"><a href="#Generator.when_sql-2565"><span class="linenos">2565</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-2566"><a href="#Generator.when_sql-2566"><span class="linenos">2566</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-2567"><a href="#Generator.when_sql-2567"><span class="linenos">2567</span></a>
+</span><span id="Generator.when_sql-2568"><a href="#Generator.when_sql-2568"><span class="linenos">2568</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-2569"><a href="#Generator.when_sql-2569"><span class="linenos">2569</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-2570"><a href="#Generator.when_sql-2570"><span class="linenos">2570</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-2571"><a href="#Generator.when_sql-2571"><span class="linenos">2571</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-2572"><a href="#Generator.when_sql-2572"><span class="linenos">2572</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-2573"><a href="#Generator.when_sql-2573"><span class="linenos">2573</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-2574"><a href="#Generator.when_sql-2574"><span class="linenos">2574</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-2575"><a href="#Generator.when_sql-2575"><span class="linenos">2575</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-2576"><a href="#Generator.when_sql-2576"><span class="linenos">2576</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.when_sql-2577"><a href="#Generator.when_sql-2577"><span class="linenos">2577</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-2578"><a href="#Generator.when_sql-2578"><span class="linenos">2578</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.when_sql-2579"><a href="#Generator.when_sql-2579"><span class="linenos">2579</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-2580"><a href="#Generator.when_sql-2580"><span class="linenos">2580</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>
@@ -13203,11 +13600,22 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.merge_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.merge_sql-2504"><a href="#Generator.merge_sql-2504"><span class="linenos">2504</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-2505"><a href="#Generator.merge_sql-2505"><span class="linenos">2505</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2506"><a href="#Generator.merge_sql-2506"><span class="linenos">2506</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-2507"><a href="#Generator.merge_sql-2507"><span class="linenos">2507</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-2508"><a href="#Generator.merge_sql-2508"><span class="linenos">2508</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-2582"><a href="#Generator.merge_sql-2582"><span class="linenos">2582</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-2583"><a href="#Generator.merge_sql-2583"><span class="linenos">2583</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.merge_sql-2584"><a href="#Generator.merge_sql-2584"><span class="linenos">2584</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.merge_sql-2585"><a href="#Generator.merge_sql-2585"><span class="linenos">2585</span></a>
+</span><span id="Generator.merge_sql-2586"><a href="#Generator.merge_sql-2586"><span class="linenos">2586</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-2587"><a href="#Generator.merge_sql-2587"><span class="linenos">2587</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
+</span><span id="Generator.merge_sql-2588"><a href="#Generator.merge_sql-2588"><span class="linenos">2588</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
+</span><span id="Generator.merge_sql-2589"><a href="#Generator.merge_sql-2589"><span class="linenos">2589</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator.merge_sql-2590"><a href="#Generator.merge_sql-2590"><span class="linenos">2590</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.merge_sql-2591"><a href="#Generator.merge_sql-2591"><span class="linenos">2591</span></a>
+</span><span id="Generator.merge_sql-2592"><a href="#Generator.merge_sql-2592"><span class="linenos">2592</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-2593"><a href="#Generator.merge_sql-2593"><span class="linenos">2593</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-2594"><a href="#Generator.merge_sql-2594"><span class="linenos">2594</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-2595"><a href="#Generator.merge_sql-2595"><span class="linenos">2595</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-2596"><a href="#Generator.merge_sql-2596"><span class="linenos">2596</span></a>
+</span><span id="Generator.merge_sql-2597"><a href="#Generator.merge_sql-2597"><span class="linenos">2597</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="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13225,11 +13633,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.tochar_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tochar_sql-2510"><a href="#Generator.tochar_sql-2510"><span class="linenos">2510</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-2511"><a href="#Generator.tochar_sql-2511"><span class="linenos">2511</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-2512"><a href="#Generator.tochar_sql-2512"><span class="linenos">2512</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-2513"><a href="#Generator.tochar_sql-2513"><span class="linenos">2513</span></a>
-</span><span id="Generator.tochar_sql-2514"><a href="#Generator.tochar_sql-2514"><span class="linenos">2514</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-2599"><a href="#Generator.tochar_sql-2599"><span class="linenos">2599</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-2600"><a href="#Generator.tochar_sql-2600"><span class="linenos">2600</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-2601"><a href="#Generator.tochar_sql-2601"><span class="linenos">2601</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-2602"><a href="#Generator.tochar_sql-2602"><span class="linenos">2602</span></a>
+</span><span id="Generator.tochar_sql-2603"><a href="#Generator.tochar_sql-2603"><span class="linenos">2603</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>
@@ -13247,12 +13655,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.dictproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictproperty_sql-2516"><a href="#Generator.dictproperty_sql-2516"><span class="linenos">2516</span></a> <span class="k">def</span> <span class="nf">dictproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dictproperty_sql-2517"><a href="#Generator.dictproperty_sql-2517"><span class="linenos">2517</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictproperty_sql-2518"><a href="#Generator.dictproperty_sql-2518"><span class="linenos">2518</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictproperty_sql-2519"><a href="#Generator.dictproperty_sql-2519"><span class="linenos">2519</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.dictproperty_sql-2520"><a href="#Generator.dictproperty_sql-2520"><span class="linenos">2520</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
-</span><span id="Generator.dictproperty_sql-2521"><a href="#Generator.dictproperty_sql-2521"><span class="linenos">2521</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictproperty_sql-2605"><a href="#Generator.dictproperty_sql-2605"><span class="linenos">2605</span></a> <span class="k">def</span> <span class="nf">dictproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dictproperty_sql-2606"><a href="#Generator.dictproperty_sql-2606"><span class="linenos">2606</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictproperty_sql-2607"><a href="#Generator.dictproperty_sql-2607"><span class="linenos">2607</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictproperty_sql-2608"><a href="#Generator.dictproperty_sql-2608"><span class="linenos">2608</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.dictproperty_sql-2609"><a href="#Generator.dictproperty_sql-2609"><span class="linenos">2609</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
+</span><span id="Generator.dictproperty_sql-2610"><a href="#Generator.dictproperty_sql-2610"><span class="linenos">2610</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13270,11 +13678,11 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.dictrange_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictrange_sql-2523"><a href="#Generator.dictrange_sql-2523"><span class="linenos">2523</span></a> <span class="k">def</span> <span class="nf">dictrange_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dictrange_sql-2524"><a href="#Generator.dictrange_sql-2524"><span class="linenos">2524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictrange_sql-2525"><a href="#Generator.dictrange_sql-2525"><span class="linenos">2525</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictrange_sql-2526"><a href="#Generator.dictrange_sql-2526"><span class="linenos">2526</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictrange_sql-2527"><a href="#Generator.dictrange_sql-2527"><span class="linenos">2527</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictrange_sql-2612"><a href="#Generator.dictrange_sql-2612"><span class="linenos">2612</span></a> <span class="k">def</span> <span class="nf">dictrange_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dictrange_sql-2613"><a href="#Generator.dictrange_sql-2613"><span class="linenos">2613</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictrange_sql-2614"><a href="#Generator.dictrange_sql-2614"><span class="linenos">2614</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;max&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictrange_sql-2615"><a href="#Generator.dictrange_sql-2615"><span class="linenos">2615</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictrange_sql-2616"><a href="#Generator.dictrange_sql-2616"><span class="linenos">2616</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13292,8 +13700,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.dictsubproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictsubproperty_sql-2529"><a href="#Generator.dictsubproperty_sql-2529"><span class="linenos">2529</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dictsubproperty_sql-2530"><a href="#Generator.dictsubproperty_sql-2530"><span class="linenos">2530</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictsubproperty_sql-2618"><a href="#Generator.dictsubproperty_sql-2618"><span class="linenos">2618</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dictsubproperty_sql-2619"><a href="#Generator.dictsubproperty_sql-2619"><span class="linenos">2619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13311,8 +13719,8 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.oncluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.oncluster_sql-2532"><a href="#Generator.oncluster_sql-2532"><span class="linenos">2532</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.oncluster_sql-2533"><a href="#Generator.oncluster_sql-2533"><span class="linenos">2533</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.oncluster_sql-2621"><a href="#Generator.oncluster_sql-2621"><span class="linenos">2621</span></a> <span class="k">def</span> <span class="nf">oncluster_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.oncluster_sql-2622"><a href="#Generator.oncluster_sql-2622"><span class="linenos">2622</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -13330,12 +13738,12 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.clusteredbyproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clusteredbyproperty_sql-2535"><a href="#Generator.clusteredbyproperty_sql-2535"><span class="linenos">2535</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.clusteredbyproperty_sql-2536"><a href="#Generator.clusteredbyproperty_sql-2536"><span class="linenos">2536</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.clusteredbyproperty_sql-2537"><a href="#Generator.clusteredbyproperty_sql-2537"><span class="linenos">2537</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.clusteredbyproperty_sql-2538"><a href="#Generator.clusteredbyproperty_sql-2538"><span class="linenos">2538</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.clusteredbyproperty_sql-2539"><a href="#Generator.clusteredbyproperty_sql-2539"><span class="linenos">2539</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">)</span>
-</span><span id="Generator.clusteredbyproperty_sql-2540"><a href="#Generator.clusteredbyproperty_sql-2540"><span class="linenos">2540</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clusteredbyproperty_sql-2624"><a href="#Generator.clusteredbyproperty_sql-2624"><span class="linenos">2624</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.clusteredbyproperty_sql-2625"><a href="#Generator.clusteredbyproperty_sql-2625"><span class="linenos">2625</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.clusteredbyproperty_sql-2626"><a href="#Generator.clusteredbyproperty_sql-2626"><span class="linenos">2626</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.clusteredbyproperty_sql-2627"><a href="#Generator.clusteredbyproperty_sql-2627"><span class="linenos">2627</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.clusteredbyproperty_sql-2628"><a href="#Generator.clusteredbyproperty_sql-2628"><span class="linenos">2628</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;buckets&quot;</span><span class="p">)</span>
+</span><span id="Generator.clusteredbyproperty_sql-2629"><a href="#Generator.clusteredbyproperty_sql-2629"><span class="linenos">2629</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
</span></pre></div>
@@ -13353,14 +13761,14 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.anyvalue_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anyvalue_sql-2542"><a href="#Generator.anyvalue_sql-2542"><span class="linenos">2542</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.anyvalue_sql-2543"><a href="#Generator.anyvalue_sql-2543"><span class="linenos">2543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.anyvalue_sql-2544"><a href="#Generator.anyvalue_sql-2544"><span class="linenos">2544</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;having&quot;</span><span class="p">)</span>
-</span><span id="Generator.anyvalue_sql-2545"><a href="#Generator.anyvalue_sql-2545"><span class="linenos">2545</span></a>
-</span><span id="Generator.anyvalue_sql-2546"><a href="#Generator.anyvalue_sql-2546"><span class="linenos">2546</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="Generator.anyvalue_sql-2547"><a href="#Generator.anyvalue_sql-2547"><span class="linenos">2547</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.anyvalue_sql-2548"><a href="#Generator.anyvalue_sql-2548"><span class="linenos">2548</span></a>
-</span><span id="Generator.anyvalue_sql-2549"><a href="#Generator.anyvalue_sql-2549"><span class="linenos">2549</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anyvalue_sql-2631"><a href="#Generator.anyvalue_sql-2631"><span class="linenos">2631</span></a> <span class="k">def</span> <span class="nf">anyvalue_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.anyvalue_sql-2632"><a href="#Generator.anyvalue_sql-2632"><span class="linenos">2632</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.anyvalue_sql-2633"><a href="#Generator.anyvalue_sql-2633"><span class="linenos">2633</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;having&quot;</span><span class="p">)</span>
+</span><span id="Generator.anyvalue_sql-2634"><a href="#Generator.anyvalue_sql-2634"><span class="linenos">2634</span></a>
+</span><span id="Generator.anyvalue_sql-2635"><a href="#Generator.anyvalue_sql-2635"><span class="linenos">2635</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="Generator.anyvalue_sql-2636"><a href="#Generator.anyvalue_sql-2636"><span class="linenos">2636</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.anyvalue_sql-2637"><a href="#Generator.anyvalue_sql-2637"><span class="linenos">2637</span></a>
+</span><span id="Generator.anyvalue_sql-2638"><a href="#Generator.anyvalue_sql-2638"><span class="linenos">2638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -13378,20 +13786,20 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.querytransform_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.querytransform_sql-2551"><a href="#Generator.querytransform_sql-2551"><span class="linenos">2551</span></a> <span class="k">def</span> <span class="nf">querytransform_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.querytransform_sql-2552"><a href="#Generator.querytransform_sql-2552"><span class="linenos">2552</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-2553"><a href="#Generator.querytransform_sql-2553"><span class="linenos">2553</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_before&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-2554"><a href="#Generator.querytransform_sql-2554"><span class="linenos">2554</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-2555"><a href="#Generator.querytransform_sql-2555"><span class="linenos">2555</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_writer&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-2556"><a href="#Generator.querytransform_sql-2556"><span class="linenos">2556</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-2557"><a href="#Generator.querytransform_sql-2557"><span class="linenos">2557</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.querytransform_sql-2558"><a href="#Generator.querytransform_sql-2558"><span class="linenos">2558</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-2559"><a href="#Generator.querytransform_sql-2559"><span class="linenos">2559</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-2560"><a href="#Generator.querytransform_sql-2560"><span class="linenos">2560</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_after&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-2561"><a href="#Generator.querytransform_sql-2561"><span class="linenos">2561</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-2562"><a href="#Generator.querytransform_sql-2562"><span class="linenos">2562</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_reader&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-2563"><a href="#Generator.querytransform_sql-2563"><span class="linenos">2563</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-2564"><a href="#Generator.querytransform_sql-2564"><span class="linenos">2564</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.querytransform_sql-2640"><a href="#Generator.querytransform_sql-2640"><span class="linenos">2640</span></a> <span class="k">def</span> <span class="nf">querytransform_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.querytransform_sql-2641"><a href="#Generator.querytransform_sql-2641"><span class="linenos">2641</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-2642"><a href="#Generator.querytransform_sql-2642"><span class="linenos">2642</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_before&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-2643"><a href="#Generator.querytransform_sql-2643"><span class="linenos">2643</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-2644"><a href="#Generator.querytransform_sql-2644"><span class="linenos">2644</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_writer&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-2645"><a href="#Generator.querytransform_sql-2645"><span class="linenos">2645</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-2646"><a href="#Generator.querytransform_sql-2646"><span class="linenos">2646</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.querytransform_sql-2647"><a href="#Generator.querytransform_sql-2647"><span class="linenos">2647</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-2648"><a href="#Generator.querytransform_sql-2648"><span class="linenos">2648</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-2649"><a href="#Generator.querytransform_sql-2649"><span class="linenos">2649</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;row_format_after&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-2650"><a href="#Generator.querytransform_sql-2650"><span class="linenos">2650</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-2651"><a href="#Generator.querytransform_sql-2651"><span class="linenos">2651</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;record_reader&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-2652"><a href="#Generator.querytransform_sql-2652"><span class="linenos">2652</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-2653"><a href="#Generator.querytransform_sql-2653"><span class="linenos">2653</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13409,37 +13817,37 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.indexconstraintoption_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexconstraintoption_sql-2566"><a href="#Generator.indexconstraintoption_sql-2566"><span class="linenos">2566</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2567"><a href="#Generator.indexconstraintoption_sql-2567"><span class="linenos">2567</span></a> <span class="n">key_block_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;key_block_size&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2568"><a href="#Generator.indexconstraintoption_sql-2568"><span class="linenos">2568</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2569"><a href="#Generator.indexconstraintoption_sql-2569"><span class="linenos">2569</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2570"><a href="#Generator.indexconstraintoption_sql-2570"><span class="linenos">2570</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2571"><a href="#Generator.indexconstraintoption_sql-2571"><span class="linenos">2571</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2572"><a href="#Generator.indexconstraintoption_sql-2572"><span class="linenos">2572</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2573"><a href="#Generator.indexconstraintoption_sql-2573"><span class="linenos">2573</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2574"><a href="#Generator.indexconstraintoption_sql-2574"><span class="linenos">2574</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2575"><a href="#Generator.indexconstraintoption_sql-2575"><span class="linenos">2575</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;parser&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2576"><a href="#Generator.indexconstraintoption_sql-2576"><span class="linenos">2576</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2577"><a href="#Generator.indexconstraintoption_sql-2577"><span class="linenos">2577</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2578"><a href="#Generator.indexconstraintoption_sql-2578"><span class="linenos">2578</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2579"><a href="#Generator.indexconstraintoption_sql-2579"><span class="linenos">2579</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;comment&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2580"><a href="#Generator.indexconstraintoption_sql-2580"><span class="linenos">2580</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2581"><a href="#Generator.indexconstraintoption_sql-2581"><span class="linenos">2581</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2582"><a href="#Generator.indexconstraintoption_sql-2582"><span class="linenos">2582</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2583"><a href="#Generator.indexconstraintoption_sql-2583"><span class="linenos">2583</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;visible&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2584"><a href="#Generator.indexconstraintoption_sql-2584"><span class="linenos">2584</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2585"><a href="#Generator.indexconstraintoption_sql-2585"><span class="linenos">2585</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2586"><a href="#Generator.indexconstraintoption_sql-2586"><span class="linenos">2586</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2587"><a href="#Generator.indexconstraintoption_sql-2587"><span class="linenos">2587</span></a> <span class="n">engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2588"><a href="#Generator.indexconstraintoption_sql-2588"><span class="linenos">2588</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2589"><a href="#Generator.indexconstraintoption_sql-2589"><span class="linenos">2589</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2590"><a href="#Generator.indexconstraintoption_sql-2590"><span class="linenos">2590</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2591"><a href="#Generator.indexconstraintoption_sql-2591"><span class="linenos">2591</span></a> <span class="n">secondary_engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2592"><a href="#Generator.indexconstraintoption_sql-2592"><span class="linenos">2592</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-2593"><a href="#Generator.indexconstraintoption_sql-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-2594"><a href="#Generator.indexconstraintoption_sql-2594"><span class="linenos">2594</span></a>
-</span><span id="Generator.indexconstraintoption_sql-2595"><a href="#Generator.indexconstraintoption_sql-2595"><span class="linenos">2595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-2596"><a href="#Generator.indexconstraintoption_sql-2596"><span class="linenos">2596</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexconstraintoption_sql-2655"><a href="#Generator.indexconstraintoption_sql-2655"><span class="linenos">2655</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2656"><a href="#Generator.indexconstraintoption_sql-2656"><span class="linenos">2656</span></a> <span class="n">key_block_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;key_block_size&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2657"><a href="#Generator.indexconstraintoption_sql-2657"><span class="linenos">2657</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2658"><a href="#Generator.indexconstraintoption_sql-2658"><span class="linenos">2658</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2659"><a href="#Generator.indexconstraintoption_sql-2659"><span class="linenos">2659</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2660"><a href="#Generator.indexconstraintoption_sql-2660"><span class="linenos">2660</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2661"><a href="#Generator.indexconstraintoption_sql-2661"><span class="linenos">2661</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2662"><a href="#Generator.indexconstraintoption_sql-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2663"><a href="#Generator.indexconstraintoption_sql-2663"><span class="linenos">2663</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2664"><a href="#Generator.indexconstraintoption_sql-2664"><span class="linenos">2664</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;parser&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2665"><a href="#Generator.indexconstraintoption_sql-2665"><span class="linenos">2665</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2666"><a href="#Generator.indexconstraintoption_sql-2666"><span class="linenos">2666</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2667"><a href="#Generator.indexconstraintoption_sql-2667"><span class="linenos">2667</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2668"><a href="#Generator.indexconstraintoption_sql-2668"><span class="linenos">2668</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;comment&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2669"><a href="#Generator.indexconstraintoption_sql-2669"><span class="linenos">2669</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2670"><a href="#Generator.indexconstraintoption_sql-2670"><span class="linenos">2670</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2671"><a href="#Generator.indexconstraintoption_sql-2671"><span class="linenos">2671</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2672"><a href="#Generator.indexconstraintoption_sql-2672"><span class="linenos">2672</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;visible&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2673"><a href="#Generator.indexconstraintoption_sql-2673"><span class="linenos">2673</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2674"><a href="#Generator.indexconstraintoption_sql-2674"><span class="linenos">2674</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2675"><a href="#Generator.indexconstraintoption_sql-2675"><span class="linenos">2675</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2676"><a href="#Generator.indexconstraintoption_sql-2676"><span class="linenos">2676</span></a> <span class="n">engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2677"><a href="#Generator.indexconstraintoption_sql-2677"><span class="linenos">2677</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2678"><a href="#Generator.indexconstraintoption_sql-2678"><span class="linenos">2678</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2679"><a href="#Generator.indexconstraintoption_sql-2679"><span class="linenos">2679</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2680"><a href="#Generator.indexconstraintoption_sql-2680"><span class="linenos">2680</span></a> <span class="n">secondary_engine_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;secondary_engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2681"><a href="#Generator.indexconstraintoption_sql-2681"><span class="linenos">2681</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-2682"><a href="#Generator.indexconstraintoption_sql-2682"><span class="linenos">2682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-2683"><a href="#Generator.indexconstraintoption_sql-2683"><span class="linenos">2683</span></a>
+</span><span id="Generator.indexconstraintoption_sql-2684"><a href="#Generator.indexconstraintoption_sql-2684"><span class="linenos">2684</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-2685"><a href="#Generator.indexconstraintoption_sql-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -13457,18 +13865,73 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#Generator.indexcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexcolumnconstraint_sql-2598"><a href="#Generator.indexcolumnconstraint_sql-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2599"><a href="#Generator.indexcolumnconstraint_sql-2599"><span class="linenos">2599</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2600"><a href="#Generator.indexcolumnconstraint_sql-2600"><span class="linenos">2600</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2601"><a href="#Generator.indexcolumnconstraint_sql-2601"><span class="linenos">2601</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2602"><a href="#Generator.indexcolumnconstraint_sql-2602"><span class="linenos">2602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2603"><a href="#Generator.indexcolumnconstraint_sql-2603"><span class="linenos">2603</span></a> <span class="n">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;type&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2604"><a href="#Generator.indexcolumnconstraint_sql-2604"><span class="linenos">2604</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">type_</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">type_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2605"><a href="#Generator.indexcolumnconstraint_sql-2605"><span class="linenos">2605</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2606"><a href="#Generator.indexcolumnconstraint_sql-2606"><span class="linenos">2606</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2607"><a href="#Generator.indexcolumnconstraint_sql-2607"><span class="linenos">2607</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2608"><a href="#Generator.indexcolumnconstraint_sql-2608"><span class="linenos">2608</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-2609"><a href="#Generator.indexcolumnconstraint_sql-2609"><span class="linenos">2609</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">type_</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexcolumnconstraint_sql-2687"><a href="#Generator.indexcolumnconstraint_sql-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2688"><a href="#Generator.indexcolumnconstraint_sql-2688"><span class="linenos">2688</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2689"><a href="#Generator.indexcolumnconstraint_sql-2689"><span class="linenos">2689</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2690"><a href="#Generator.indexcolumnconstraint_sql-2690"><span class="linenos">2690</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2691"><a href="#Generator.indexcolumnconstraint_sql-2691"><span class="linenos">2691</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2692"><a href="#Generator.indexcolumnconstraint_sql-2692"><span class="linenos">2692</span></a> <span class="n">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;type&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2693"><a href="#Generator.indexcolumnconstraint_sql-2693"><span class="linenos">2693</span></a> <span class="n">type_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">type_</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">type_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2694"><a href="#Generator.indexcolumnconstraint_sql-2694"><span class="linenos">2694</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2695"><a href="#Generator.indexcolumnconstraint_sql-2695"><span class="linenos">2695</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2696"><a href="#Generator.indexcolumnconstraint_sql-2696"><span class="linenos">2696</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2697"><a href="#Generator.indexcolumnconstraint_sql-2697"><span class="linenos">2697</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-2698"><a href="#Generator.indexcolumnconstraint_sql-2698"><span class="linenos">2698</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">type_</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Generator.nvl2_sql" class="classattr">
+ <input id="Generator.nvl2_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">nvl2_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#Nvl2">sqlglot.expressions.Nvl2</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.nvl2_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.nvl2_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nvl2_sql-2700"><a href="#Generator.nvl2_sql-2700"><span class="linenos">2700</span></a> <span class="k">def</span> <span class="nf">nvl2_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.nvl2_sql-2701"><a href="#Generator.nvl2_sql-2701"><span class="linenos">2701</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.nvl2_sql-2702"><a href="#Generator.nvl2_sql-2702"><span class="linenos">2702</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.nvl2_sql-2703"><a href="#Generator.nvl2_sql-2703"><span class="linenos">2703</span></a>
+</span><span id="Generator.nvl2_sql-2704"><a href="#Generator.nvl2_sql-2704"><span class="linenos">2704</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="Generator.nvl2_sql-2705"><a href="#Generator.nvl2_sql-2705"><span class="linenos">2705</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator.nvl2_sql-2706"><a href="#Generator.nvl2_sql-2706"><span class="linenos">2706</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="Generator.nvl2_sql-2707"><a href="#Generator.nvl2_sql-2707"><span class="linenos">2707</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.nvl2_sql-2708"><a href="#Generator.nvl2_sql-2708"><span class="linenos">2708</span></a> <span class="p">)</span>
+</span><span id="Generator.nvl2_sql-2709"><a href="#Generator.nvl2_sql-2709"><span class="linenos">2709</span></a> <span class="n">else_cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
+</span><span id="Generator.nvl2_sql-2710"><a href="#Generator.nvl2_sql-2710"><span class="linenos">2710</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
+</span><span id="Generator.nvl2_sql-2711"><a href="#Generator.nvl2_sql-2711"><span class="linenos">2711</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.nvl2_sql-2712"><a href="#Generator.nvl2_sql-2712"><span class="linenos">2712</span></a>
+</span><span id="Generator.nvl2_sql-2713"><a href="#Generator.nvl2_sql-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Generator.comprehension_sql" class="classattr">
+ <input id="Generator.comprehension_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">comprehension_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#Comprehension">sqlglot.expressions.Comprehension</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.comprehension_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.comprehension_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comprehension_sql-2715"><a href="#Generator.comprehension_sql-2715"><span class="linenos">2715</span></a> <span class="k">def</span> <span class="nf">comprehension_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.comprehension_sql-2716"><a href="#Generator.comprehension_sql-2716"><span class="linenos">2716</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-2717"><a href="#Generator.comprehension_sql-2717"><span class="linenos">2717</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-2718"><a href="#Generator.comprehension_sql-2718"><span class="linenos">2718</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;iterator&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-2719"><a href="#Generator.comprehension_sql-2719"><span class="linenos">2719</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;condition&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-2720"><a href="#Generator.comprehension_sql-2720"><span class="linenos">2720</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.comprehension_sql-2721"><a href="#Generator.comprehension_sql-2721"><span class="linenos">2721</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13487,13 +13950,13 @@ which can be slow to compute, so only use it if you set _hash on each node.</li>
</div>
<a class="headerlink" href="#cached_generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="cached_generator-2612"><a href="#cached_generator-2612"><span class="linenos">2612</span></a><span class="k">def</span> <span class="nf">cached_generator</span><span class="p">(</span>
-</span><span id="cached_generator-2613"><a href="#cached_generator-2613"><span class="linenos">2613</span></a> <span class="n">cache</span><span 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">int</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="cached_generator-2614"><a href="#cached_generator-2614"><span class="linenos">2614</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">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="cached_generator-2615"><a href="#cached_generator-2615"><span class="linenos">2615</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a cached generator.&quot;&quot;&quot;</span>
-</span><span id="cached_generator-2616"><a href="#cached_generator-2616"><span class="linenos">2616</span></a> <span class="n">cache</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cache</span>
-</span><span id="cached_generator-2617"><a href="#cached_generator-2617"><span class="linenos">2617</span></a> <span class="n">generator</span> <span class="o">=</span> <span class="n">Generator</span><span class="p">(</span><span class="n">normalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="s2">&quot;safe&quot;</span><span class="p">)</span>
-</span><span id="cached_generator-2618"><a href="#cached_generator-2618"><span class="linenos">2618</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">e</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="cached_generator-2724"><a href="#cached_generator-2724"><span class="linenos">2724</span></a><span class="k">def</span> <span class="nf">cached_generator</span><span class="p">(</span>
+</span><span id="cached_generator-2725"><a href="#cached_generator-2725"><span class="linenos">2725</span></a> <span class="n">cache</span><span 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">int</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="cached_generator-2726"><a href="#cached_generator-2726"><span class="linenos">2726</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="nb">str</span><span class="p">]:</span>
+</span><span id="cached_generator-2727"><a href="#cached_generator-2727"><span class="linenos">2727</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a cached generator.&quot;&quot;&quot;</span>
+</span><span id="cached_generator-2728"><a href="#cached_generator-2728"><span class="linenos">2728</span></a> <span class="n">cache</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">cache</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cache</span>
+</span><span id="cached_generator-2729"><a href="#cached_generator-2729"><span class="linenos">2729</span></a> <span class="n">generator</span> <span class="o">=</span> <span class="n">Generator</span><span class="p">(</span><span class="n">normalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">identify</span><span class="o">=</span><span class="s2">&quot;safe&quot;</span><span class="p">)</span>
+</span><span id="cached_generator-2730"><a href="#cached_generator-2730"><span class="linenos">2730</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">e</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></pre></div>
diff --git a/docs/sqlglot/helper.html b/docs/sqlglot/helper.html
index fea7d78..cd74832 100644
--- a/docs/sqlglot/helper.html
+++ b/docs/sqlglot/helper.html
@@ -46,6 +46,12 @@
</li>
<li>
+ <a class="class" href="#classproperty">classproperty</a>
+ <ul class="memberlist">
+ </ul>
+
+ </li>
+ <li>
<a class="function" href="#seq_get">seq_get</a>
</li>
<li>
@@ -160,400 +166,408 @@
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="k">return</span> <span class="n">name</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">def</span> <span class="nf">seq_get</span><span class="p">(</span><span class="n">seq</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="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="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the value in `seq` at position `index`, or `None` if `index` is out of bounds.&quot;&quot;&quot;</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">return</span> <span class="n">seq</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">except</span> <span class="ne">IndexError</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="kc">None</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</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">classproperty</span><span class="p">(</span><span class="nb">property</span><span class="p">):</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="sd"> Similar to a normal property but works for class methods</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="sd"> &quot;&quot;&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">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</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">owner</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</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">Any</span><span class="p">:</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">return</span> <span class="nb">classmethod</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fget</span><span class="p">)</span><span class="o">.</span><span class="fm">__get__</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner</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><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="k">def</span> <span class="nf">ensure_list</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">Collection</span><span class="p">[</span><span class="n">T</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="p">]:</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="o">...</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="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="k">def</span> <span class="nf">ensure_list</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">T</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="p">]:</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="o">...</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="k">def</span> <span class="nf">seq_get</span><span class="p">(</span><span class="n">seq</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="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="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">T</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;Returns the value in `seq` at position `index`, or `None` if `index` is out of bounds.&quot;&quot;&quot;</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">return</span> <span class="n">seq</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="k">def</span> <span class="nf">ensure_list</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="sd"> Ensures that a value is a list, otherwise casts or wraps it into one.</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="k">def</span> <span class="nf">ensure_list</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">Collection</span><span class="p">[</span><span class="n">T</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="p">]:</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="o">...</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><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="sd"> Args:</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> value: The value of interest.</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"> Returns:</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> The value cast as a list if it&#39;s a list or a tuple, or else the value wrapped in a list.</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</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-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</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="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="k">def</span> <span class="nf">ensure_collection</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">Collection</span><span class="p">[</span><span class="n">T</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">T</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><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><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="k">def</span> <span class="nf">ensure_collection</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="o">...</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="k">def</span> <span class="nf">ensure_list</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">T</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="p">]:</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="o">...</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><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="k">def</span> <span class="nf">ensure_list</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="sd"> Ensures that a value is a list, otherwise casts or wraps it into one.</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="sd"> Args:</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="sd"> value: The value of interest.</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> Returns:</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> The value cast as a list if it&#39;s a list or a tuple, or else the value wrapped in a list.</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="n">value</span> <span class="ow">is</span> <span class="kc">None</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="p">[]</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</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="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</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="nb">list</span><span class="p">(</span><span class="n">value</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 class="k">return</span> <span class="p">[</span><span class="n">value</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><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">def</span> <span class="nf">ensure_collection</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> Ensures that a value is a collection (excluding `str` and `bytes`), otherwise wraps it into a list.</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="k">def</span> <span class="nf">ensure_collection</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">Collection</span><span class="p">[</span><span class="n">T</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">T</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><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><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="sd"> Args:</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> value: The value of interest.</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> Returns:</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> The value if it&#39;s a collection, or else the value wrapped in a list.</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">return</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="p">(</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">value</span> <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">Collection</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span> <span class="k">else</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="p">)</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="k">def</span> <span class="nf">ensure_collection</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="o">...</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">def</span> <span class="nf">ensure_collection</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> Ensures that a value is a collection (excluding `str` and `bytes`), otherwise wraps it into a list.</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="sd"> Args:</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> value: The value of interest.</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="k">def</span> <span class="nf">csv</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="sd"> Formats any number of string arguments as CSV.</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="sd"> Args:</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> args: The string arguments to format.</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> sep: The argument separator.</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> Returns:</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> The value if it&#39;s a collection, or else the value wrapped in a list.</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">value</span> <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">Collection</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span> <span class="k">else</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="p">)</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="sd"> Returns:</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="sd"> The arguments formatted as a CSV string.</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</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="p">)</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="k">def</span> <span class="nf">csv</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="sd"> Formats any number of string arguments as CSV.</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="k">def</span> <span class="nf">subclasses</span><span class="p">(</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exclude</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(),</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</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">Type</span><span class="p">]:</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a><span class="sd"> Returns all subclasses for a collection of classes, possibly excluding some of them.</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a><span class="sd"> Args:</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="sd"> args: The string arguments to format.</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="sd"> sep: The argument separator.</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="sd"> Returns:</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="sd"> The arguments formatted as a CSV string.</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span><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="sd"> Args:</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="sd"> module_name: The name of the module to search for subclasses in.</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> classes: Class(es) we want to find the subclasses of.</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="sd"> exclude: Class(es) we want to exclude from the returned list.</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="sd"> Returns:</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="sd"> The target subclasses.</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">obj</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getmembers</span><span class="p">(</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">module_name</span><span class="p">],</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">lambda</span> <span class="n">obj</span><span class="p">:</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">classes</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exclude</span><span class="p">,</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="p">)</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span 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><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a><span class="k">def</span> <span class="nf">apply_index_offset</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="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</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">E</span><span class="p">]],</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</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 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">E</span><span class="p">]]:</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="sd"> Applies an offset to a given integer literal expression.</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">subclasses</span><span class="p">(</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">module_name</span><span class="p">:</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">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exclude</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(),</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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">Type</span><span class="p">]:</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a><span class="sd"> Returns all subclasses for a collection of classes, possibly excluding some of them.</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="sd"> Args:</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a><span class="sd"> module_name: The name of the module to search for subclasses in.</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="sd"> classes: Class(es) we want to find the subclasses of.</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="sd"> exclude: Class(es) we want to exclude from the returned list.</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="sd"> Returns:</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a><span class="sd"> The target subclasses.</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">obj</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getmembers</span><span class="p">(</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">module_name</span><span class="p">],</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">lambda</span> <span class="n">obj</span><span class="p">:</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">classes</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exclude</span><span class="p">,</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="p">)</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="p">]</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="sd"> Args:</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a><span class="sd"> this: The target of the index.</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a><span class="sd"> expressions: The expression the offset will be applied to, wrapped in a list.</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="sd"> offset: The offset that will be applied.</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="sd"> Returns:</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="sd"> The original expression with the offset applied to it, wrapped in a list. If the provided</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> `expressions` argument contains more than one expression, it&#39;s returned unaffected.</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a><span class="sd"> &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="ow">not</span> <span class="n">offset</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="n">expressions</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">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-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">def</span> <span class="nf">apply_index_offset</span><span class="p">(</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</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">E</span><span class="p">],</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="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">E</span><span class="p">]:</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> Applies an offset to a given integer literal expression.</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="sd"> Args:</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> this: The target of the index.</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd"> expressions: The expression the offset will be applied to, wrapped in a list.</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> offset: The offset that will be applied.</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="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-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">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-165"><a href="#L-165"><span class="linenos">165</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-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd"> Returns:</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> The original expression with the offset applied to it, wrapped in a list. If the provided</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> `expressions` argument contains more than one expression, it&#39;s returned unaffected.</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="n">expressions</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="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">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">not</span> <span class="ow">in</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">exp</span><span 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-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 class="k">return</span> <span class="n">expressions</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <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-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="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</span></a>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="n">expression</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="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">annotate_types</span><span class="p">(</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="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">DataType</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;Applying array index offset (</span><span class="si">%s</span><span class="s2">)&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</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">Add</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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">offset</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="k">return</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="n">expressions</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">camel_to_snake_case</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-187"><a href="#L-187"><span class="linenos">187</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts `name` from camelCase to snake_case and returns the result.&quot;&quot;&quot;</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="n">CAMEL_CASE_PATTERN</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</span></a>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="n">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">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="p">):</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">annotate_types</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">if</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">DataType</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;Applying array index offset (</span><span class="si">%s</span><span class="s2">)&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</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">Add</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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">offset</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><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a><span class="k">def</span> <span class="nf">while_changing</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="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Expression</span><span class="p">],</span> <span class="n">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="sd"> Applies a transformation to a given expression until a fix point is reached.</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="sd"> Args:</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a><span class="sd"> expression: The expression to be transformed.</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a><span class="sd"> func: The transformation to be applied.</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="n">expressions</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">def</span> <span class="nf">camel_to_snake_case</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-195"><a href="#L-195"><span class="linenos">195</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts `name` from camelCase to snake_case and returns the result.&quot;&quot;&quot;</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="n">CAMEL_CASE_PATTERN</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a><span class="sd"> Returns:</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a><span class="sd"> The transformed expression.</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">())):</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">n</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="n">start</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</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">expression</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">break</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a><span class="k">def</span> <span class="nf">while_changing</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="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Expression</span><span class="p">],</span> <span class="n">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="sd"> Applies a transformation to a given expression until a fix point is reached.</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="sd"> Args:</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a><span class="sd"> expression: The expression to be transformed.</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="sd"> func: The transformation to be applied.</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="sd"> Returns:</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a><span class="sd"> The transformed expression.</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">())):</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">n</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="k">return</span> <span class="n">expression</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</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="n">expression</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">expression</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">def</span> <span class="nf">tsort</span><span class="p">(</span><span class="n">dag</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="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">T</span><span class="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="p">]:</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a><span class="sd"> Sorts a given directed acyclic graph in topological order.</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="sd"> Args:</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a><span class="sd"> dag: The graph to be sorted.</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">break</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 class="sd"> Returns:</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a><span class="sd"> A list that contains all of the graph&#39;s nodes in topological order.</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a><span class="k">def</span> <span class="nf">tsort</span><span class="p">(</span><span class="n">dag</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="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">T</span><span class="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="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"> Sorts a given directed acyclic graph in topological order.</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">deps</span><span class="p">:</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">dag</span><span class="p">:</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">dag</span><span class="p">[</span><span class="n">dep</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">while</span> <span class="n">dag</span><span class="p">:</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">current</span> <span class="o">=</span> <span class="p">{</span><span class="n">node</span> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">deps</span><span class="p">}</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="sd"> Args:</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a><span class="sd"> dag: The graph to be sorted.</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="sd"> Returns:</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a><span class="sd"> A list that contains all of the graph&#39;s nodes in topological order.</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">result</span> <span class="o">=</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">current</span><span class="p">:</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cycle error&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">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">current</span><span class="p">:</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">dag</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">node</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">for</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">deps</span> <span class="o">-=</span> <span class="n">current</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">result</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">current</span><span class="p">))</span> <span class="c1"># type: ignore</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">deps</span><span class="p">:</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">dag</span><span class="p">:</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">dag</span><span class="p">[</span><span class="n">dep</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">while</span> <span class="n">dag</span><span class="p">:</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">current</span> <span class="o">=</span> <span class="p">{</span><span class="n">node</span> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">deps</span><span class="p">}</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">current</span><span class="p">:</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cycle error&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">return</span> <span class="n">result</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">current</span><span class="p">:</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">dag</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">node</span><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="k">def</span> <span class="nf">open_file</span><span class="p">(</span><span class="n">file_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">TextIO</span><span class="p">:</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Open a file that may be compressed as gzip and return it in universal newline mode.&quot;&quot;&quot;</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">gzipped</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\x1f\x8b</span><span class="s2">&quot;</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">for</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">deps</span> <span class="o">-=</span> <span class="n">current</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">result</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">current</span><span class="p">))</span> <span class="c1"># type: ignore</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">gzipped</span><span class="p">:</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="kn">import</span> <span class="nn">gzip</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">return</span> <span class="n">result</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><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="n">gzip</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rt&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</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="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a><span class="k">def</span> <span class="nf">open_file</span><span class="p">(</span><span class="n">file_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">TextIO</span><span class="p">:</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Open a file that may be compressed as gzip and return it in universal newline mode.&quot;&quot;&quot;</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">gzipped</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\x1f\x8b</span><span class="s2">&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="nd">@contextmanager</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="k">def</span> <span class="nf">csv_reader</span><span class="p">(</span><span class="n">read_csv</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReadCSV</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-266"><a href="#L-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> Returns a csv reader given the expression `READ_CSV(name, [&#39;delimiter&#39;, &#39;|&#39;, ...])`.</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="k">if</span> <span class="n">gzipped</span><span class="p">:</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="kn">import</span> <span class="nn">gzip</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="k">return</span> <span class="n">gzip</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rt&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> Args:</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> read_csv: A `ReadCSV` function call.</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</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><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd"> Yields:</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="sd"> A python csv reader.</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">read_csv</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">file</span> <span class="o">=</span> <span class="n">open_file</span><span class="p">(</span><span class="n">read_csv</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">args</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">name</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-280"><a href="#L-280"><span class="linenos">280</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="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s2">&quot;delimiter&quot;</span><span class="p">:</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="n">v</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="kn">import</span> <span class="nn">csv</span> <span class="k">as</span> <span class="nn">csv_</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">yield</span> <span class="n">csv_</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="n">delimiter</span><span class="p">)</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="nd">@contextmanager</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="k">def</span> <span class="nf">csv_reader</span><span class="p">(</span><span class="n">read_csv</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReadCSV</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-274"><a href="#L-274"><span class="linenos">274</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd"> Returns a csv reader given the expression `READ_CSV(name, [&#39;delimiter&#39;, &#39;|&#39;, ...])`.</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="sd"> Args:</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a><span class="sd"> read_csv: A `ReadCSV` function call.</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="sd"> Yields:</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a><span class="sd"> A python csv reader.</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">read_csv</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">file</span> <span class="o">=</span> <span class="n">open_file</span><span class="p">(</span><span class="n">read_csv</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">args</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">name</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-288"><a href="#L-288"><span class="linenos">288</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="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s2">&quot;delimiter&quot;</span><span class="p">:</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="n">v</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">find_new_name</span><span class="p">(</span><span class="n">taken</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="n">base</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-293"><a href="#L-293"><span class="linenos">293</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a><span class="sd"> Searches for a new name.</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="sd"> Args:</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a><span class="sd"> taken: A collection of taken names.</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a><span class="sd"> base: Base name to alter.</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="kn">import</span> <span class="nn">csv</span> <span class="k">as</span> <span class="nn">csv_</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">yield</span> <span class="n">csv_</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="n">delimiter</span><span class="p">)</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">file</span><span class="o">.</span><span class="n">close</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><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a><span class="sd"> Returns:</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a><span class="sd"> The new, available name.</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="k">if</span> <span class="n">base</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="k">return</span> <span class="n">base</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">i</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</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="k">while</span> <span class="n">new</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</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">return</span> <span class="n">new</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a><span class="k">def</span> <span class="nf">find_new_name</span><span class="p">(</span><span class="n">taken</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="n">base</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-301"><a href="#L-301"><span class="linenos">301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a><span class="sd"> Searches for a new name.</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="sd"> Args:</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a><span class="sd"> taken: A collection of taken names.</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a><span class="sd"> base: Base name to alter.</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a><span class="sd"> Returns:</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a><span class="sd"> The new, available name.</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="k">if</span> <span class="n">base</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">taken</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="n">base</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><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a><span class="k">def</span> <span class="nf">name_sequence</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[],</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="w"> </span><span class="sd">&quot;&quot;&quot;Returns a name generator given a prefix (e.g. a0, a1, a2, ... if the prefix is &quot;a&quot;).&quot;&quot;&quot;</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">sequence</span> <span class="o">=</span> <span class="n">count</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="k">lambda</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="nb">next</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</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 class="k">while</span> <span class="n">new</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</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">object_to_dict</span><span class="p">(</span><span class="n">obj</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="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a dictionary created from an object&#39;s attributes.&quot;&quot;&quot;</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="p">}</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="k">return</span> <span class="n">new</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>
+</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">name_sequence</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[],</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="w"> </span><span class="sd">&quot;&quot;&quot;Returns a name generator given a prefix (e.g. a0, a1, a2, ... if the prefix is &quot;a&quot;).&quot;&quot;&quot;</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">sequence</span> <span class="o">=</span> <span class="n">count</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="k">lambda</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="nb">next</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</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><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="k">def</span> <span class="nf">split_num_words</span><span class="p">(</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">min_num_words</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">fill_from_start</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="nb">str</span><span class="p">]]:</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a><span class="sd"> Perform a split on a value and return N words as a result with `None` used for words that don&#39;t exist.</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="sd"> Args:</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a><span class="sd"> value: The value to be split.</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="sd"> sep: The value to use to split on.</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="sd"> min_num_words: The minimum number of words that are going to be in the result.</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a><span class="sd"> fill_from_start: Indicates that if `None` values should be inserted at the start or end of the list.</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"> Examples:</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3)</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> [None, &#39;db&#39;, &#39;table&#39;]</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3, fill_from_start=False)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;, None]</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 1)</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;]</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="k">def</span> <span class="nf">object_to_dict</span><span class="p">(</span><span class="n">obj</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="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a dictionary created from an object&#39;s attributes.&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="p">{</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</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="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="o">**</span><span class="n">kwargs</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><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="k">def</span> <span class="nf">split_num_words</span><span class="p">(</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">min_num_words</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">fill_from_start</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-339"><a href="#L-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">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="nb">str</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;</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="sd"> Perform a split on a value and return N words as a result with `None` used for words that don&#39;t exist.</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="sd"> Args:</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a><span class="sd"> value: The value to be split.</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a><span class="sd"> sep: The value to use to split on.</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="sd"> min_num_words: The minimum number of words that are going to be in the result.</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> fill_from_start: Indicates that if `None` values should be inserted at the start or end of the list.</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="sd"> Returns:</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a><span class="sd"> The list of words returned by `split`, possibly augmented by a number of `None` values.</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">words</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">if</span> <span class="n">fill_from_start</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="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span> <span class="o">+</span> <span class="n">words</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">words</span> <span class="o">+</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a><span class="sd"> Examples:</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3)</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a><span class="sd"> [None, &#39;db&#39;, &#39;table&#39;]</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3, fill_from_start=False)</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;, None]</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 1)</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;]</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><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="k">def</span> <span class="nf">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a><span class="sd"> Checks if the value is an iterable, excluding the types `str` and `bytes`.</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="sd"> Examples:</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> &gt;&gt;&gt; is_iterable([1,2])</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="sd"> True</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="sd"> &gt;&gt;&gt; is_iterable(&quot;test&quot;)</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="sd"> False</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a><span class="sd"> Args:</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a><span class="sd"> value: The value to check if it is an iterable.</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="sd"> Returns:</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a><span class="sd"> A `bool` value indicating if it is an iterable.</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> Returns:</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> The list of words returned by `split`, possibly augmented by a number of `None` values.</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">words</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">if</span> <span class="n">fill_from_start</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="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span> <span class="o">+</span> <span class="n">words</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="k">return</span> <span class="n">words</span> <span class="o">+</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</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><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="k">def</span> <span class="nf">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a><span class="sd"> Checks if the value is an iterable, excluding the types `str` and `bytes`.</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a><span class="sd"> Examples:</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a><span class="sd"> &gt;&gt;&gt; is_iterable([1,2])</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a><span class="sd"> True</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a><span class="sd"> &gt;&gt;&gt; is_iterable(&quot;test&quot;)</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a><span class="sd"> False</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">flatten</span><span class="p">(</span><span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</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">Any</span><span class="p">]</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterator</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a><span class="sd"> Flattens an iterable that can contain both iterable and non-iterable elements. Objects of</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a><span class="sd"> type `str` and `bytes` are not regarded as iterables.</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="sd"> Examples:</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([[1, 2], 3, {4}, (5, &quot;bla&quot;)]))</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="sd"> [1, 2, 3, 4, 5, &#39;bla&#39;]</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([1, 2, 3]))</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="sd"> [1, 2, 3]</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="sd"> Args:</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a><span class="sd"> values: The value to be flattened.</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="sd"> Yields:</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="sd"> Non-iterable elements in `values`.</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="n">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">yield from</span> <span class="n">flatten</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">yield</span> <span class="n">value</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><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a><span class="k">def</span> <span class="nf">dict_depth</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a><span class="sd"> Get the nesting depth of a dictionary.</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="sd"> Example:</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a><span class="sd"> &gt;&gt;&gt; dict_depth(None)</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a><span class="sd"> 0</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({})</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a><span class="sd"> 1</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: &quot;b&quot;})</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a><span class="sd"> 1</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {}})</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a><span class="sd"> 2</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {&quot;b&quot;: {}}})</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a><span class="sd"> 3</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">dict_depth</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">values</span><span class="p">())))</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="c1"># d doesn&#39;t have attribute &quot;values&quot;</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="mi">0</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="c1"># d.values() returns an empty sequence</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="mi">1</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a><span class="k">def</span> <span class="nf">first</span><span class="p">(</span><span class="n">it</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="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the first element from an iterable (useful for sets).&quot;&quot;&quot;</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">it</span><span class="p">)</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a><span class="sd"> Args:</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="sd"> value: The value to check if it is an iterable.</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="sd"> Returns:</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a><span class="sd"> A `bool` value indicating if it is an iterable.</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</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><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</span><span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</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">Any</span><span class="p">]</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterator</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a><span class="sd"> Flattens an iterable that can contain both iterable and non-iterable elements. Objects of</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a><span class="sd"> type `str` and `bytes` are not regarded as iterables.</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="sd"> Examples:</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([[1, 2], 3, {4}, (5, &quot;bla&quot;)]))</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="sd"> [1, 2, 3, 4, 5, &#39;bla&#39;]</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([1, 2, 3]))</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a><span class="sd"> [1, 2, 3]</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a><span class="sd"> Args:</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a><span class="sd"> values: The value to be flattened.</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="sd"> Yields:</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a><span class="sd"> Non-iterable elements in `values`.</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">if</span> <span class="n">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">yield from</span> <span class="n">flatten</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">yield</span> <span class="n">value</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a><span class="k">def</span> <span class="nf">dict_depth</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a><span class="sd"> Get the nesting depth of a dictionary.</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a><span class="sd"> Example:</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a><span class="sd"> &gt;&gt;&gt; dict_depth(None)</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a><span class="sd"> 0</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({})</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a><span class="sd"> 1</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: &quot;b&quot;})</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="sd"> 1</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {}})</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a><span class="sd"> 2</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {&quot;b&quot;: {}}})</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a><span class="sd"> 3</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">dict_depth</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">values</span><span class="p">())))</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="c1"># d doesn&#39;t have attribute &quot;values&quot;</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="mi">0</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="c1"># d.values() returns an empty sequence</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="k">return</span> <span class="mi">1</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a><span class="k">def</span> <span class="nf">first</span><span class="p">(</span><span class="n">it</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="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the first element from an iterable (useful for sets).&quot;&quot;&quot;</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">it</span><span class="p">)</span>
</span></pre></div>
@@ -636,6 +650,47 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</dl>
</div>
</section>
+ <section id="classproperty">
+ <input id="classproperty-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">classproperty</span><wbr>(<span class="base">builtins.property</span>):
+
+ <label class="view-source-button" for="classproperty-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#classproperty"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="classproperty-37"><a href="#classproperty-37"><span class="linenos">37</span></a><span class="k">class</span> <span class="nc">classproperty</span><span class="p">(</span><span class="nb">property</span><span class="p">):</span>
+</span><span id="classproperty-38"><a href="#classproperty-38"><span class="linenos">38</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="classproperty-39"><a href="#classproperty-39"><span class="linenos">39</span></a><span class="sd"> Similar to a normal property but works for class methods</span>
+</span><span id="classproperty-40"><a href="#classproperty-40"><span class="linenos">40</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="classproperty-41"><a href="#classproperty-41"><span class="linenos">41</span></a>
+</span><span id="classproperty-42"><a href="#classproperty-42"><span class="linenos">42</span></a> <span class="k">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</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">owner</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</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">Any</span><span class="p">:</span>
+</span><span id="classproperty-43"><a href="#classproperty-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="nb">classmethod</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fget</span><span class="p">)</span><span class="o">.</span><span class="fm">__get__</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">owner</span><span class="p">)()</span> <span class="c1"># type: ignore</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Similar to a normal property but works for class methods</p>
+</div>
+
+
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt>builtins.property</dt>
+ <dd id="classproperty.__init__" class="function">property</dd>
+ <dd id="classproperty.getter" class="function">getter</dd>
+ <dd id="classproperty.setter" class="function">setter</dd>
+ <dd id="classproperty.deleter" class="function">deleter</dd>
+ <dd id="classproperty.fget" class="variable">fget</dd>
+ <dd id="classproperty.fset" class="variable">fset</dd>
+ <dd id="classproperty.fdel" class="variable">fdel</dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
<section id="seq_get">
<input id="seq_get-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -647,12 +702,12 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#seq_get"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="seq_get-37"><a href="#seq_get-37"><span class="linenos">37</span></a><span class="k">def</span> <span class="nf">seq_get</span><span class="p">(</span><span class="n">seq</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="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="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
-</span><span id="seq_get-38"><a href="#seq_get-38"><span class="linenos">38</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the value in `seq` at position `index`, or `None` if `index` is out of bounds.&quot;&quot;&quot;</span>
-</span><span id="seq_get-39"><a href="#seq_get-39"><span class="linenos">39</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="seq_get-40"><a href="#seq_get-40"><span class="linenos">40</span></a> <span class="k">return</span> <span class="n">seq</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
-</span><span id="seq_get-41"><a href="#seq_get-41"><span class="linenos">41</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
-</span><span id="seq_get-42"><a href="#seq_get-42"><span class="linenos">42</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="seq_get-46"><a href="#seq_get-46"><span class="linenos">46</span></a><span class="k">def</span> <span class="nf">seq_get</span><span class="p">(</span><span class="n">seq</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="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="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
+</span><span id="seq_get-47"><a href="#seq_get-47"><span class="linenos">47</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the value in `seq` at position `index`, or `None` if `index` is out of bounds.&quot;&quot;&quot;</span>
+</span><span id="seq_get-48"><a href="#seq_get-48"><span class="linenos">48</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="seq_get-49"><a href="#seq_get-49"><span class="linenos">49</span></a> <span class="k">return</span> <span class="n">seq</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
+</span><span id="seq_get-50"><a href="#seq_get-50"><span class="linenos">50</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
+</span><span id="seq_get-51"><a href="#seq_get-51"><span class="linenos">51</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -672,22 +727,22 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#ensure_list"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_list-55"><a href="#ensure_list-55"><span class="linenos">55</span></a><span class="k">def</span> <span class="nf">ensure_list</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="ensure_list-56"><a href="#ensure_list-56"><span class="linenos">56</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="ensure_list-57"><a href="#ensure_list-57"><span class="linenos">57</span></a><span class="sd"> Ensures that a value is a list, otherwise casts or wraps it into one.</span>
-</span><span id="ensure_list-58"><a href="#ensure_list-58"><span class="linenos">58</span></a>
-</span><span id="ensure_list-59"><a href="#ensure_list-59"><span class="linenos">59</span></a><span class="sd"> Args:</span>
-</span><span id="ensure_list-60"><a href="#ensure_list-60"><span class="linenos">60</span></a><span class="sd"> value: The value of interest.</span>
-</span><span id="ensure_list-61"><a href="#ensure_list-61"><span class="linenos">61</span></a>
-</span><span id="ensure_list-62"><a href="#ensure_list-62"><span class="linenos">62</span></a><span class="sd"> Returns:</span>
-</span><span id="ensure_list-63"><a href="#ensure_list-63"><span class="linenos">63</span></a><span class="sd"> The value cast as a list if it&#39;s a list or a tuple, or else the value wrapped in a list.</span>
-</span><span id="ensure_list-64"><a href="#ensure_list-64"><span class="linenos">64</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ensure_list-65"><a href="#ensure_list-65"><span class="linenos">65</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="ensure_list-66"><a href="#ensure_list-66"><span class="linenos">66</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="ensure_list-67"><a href="#ensure_list-67"><span class="linenos">67</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="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
-</span><span id="ensure_list-68"><a href="#ensure_list-68"><span class="linenos">68</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="ensure_list-69"><a href="#ensure_list-69"><span class="linenos">69</span></a>
-</span><span id="ensure_list-70"><a href="#ensure_list-70"><span class="linenos">70</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_list-64"><a href="#ensure_list-64"><span class="linenos">64</span></a><span class="k">def</span> <span class="nf">ensure_list</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+</span><span id="ensure_list-65"><a href="#ensure_list-65"><span class="linenos">65</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="ensure_list-66"><a href="#ensure_list-66"><span class="linenos">66</span></a><span class="sd"> Ensures that a value is a list, otherwise casts or wraps it into one.</span>
+</span><span id="ensure_list-67"><a href="#ensure_list-67"><span class="linenos">67</span></a>
+</span><span id="ensure_list-68"><a href="#ensure_list-68"><span class="linenos">68</span></a><span class="sd"> Args:</span>
+</span><span id="ensure_list-69"><a href="#ensure_list-69"><span class="linenos">69</span></a><span class="sd"> value: The value of interest.</span>
+</span><span id="ensure_list-70"><a href="#ensure_list-70"><span class="linenos">70</span></a>
+</span><span id="ensure_list-71"><a href="#ensure_list-71"><span class="linenos">71</span></a><span class="sd"> Returns:</span>
+</span><span id="ensure_list-72"><a href="#ensure_list-72"><span class="linenos">72</span></a><span class="sd"> The value cast as a list if it&#39;s a list or a tuple, or else the value wrapped in a list.</span>
+</span><span id="ensure_list-73"><a href="#ensure_list-73"><span class="linenos">73</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ensure_list-74"><a href="#ensure_list-74"><span class="linenos">74</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="ensure_list-75"><a href="#ensure_list-75"><span class="linenos">75</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="ensure_list-76"><a href="#ensure_list-76"><span class="linenos">76</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="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
+</span><span id="ensure_list-77"><a href="#ensure_list-77"><span class="linenos">77</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="ensure_list-78"><a href="#ensure_list-78"><span class="linenos">78</span></a>
+</span><span id="ensure_list-79"><a href="#ensure_list-79"><span class="linenos">79</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
</span></pre></div>
@@ -719,21 +774,21 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#ensure_collection"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_collection-83"><a href="#ensure_collection-83"><span class="linenos">83</span></a><span class="k">def</span> <span class="nf">ensure_collection</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="ensure_collection-84"><a href="#ensure_collection-84"><span class="linenos">84</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="ensure_collection-85"><a href="#ensure_collection-85"><span class="linenos">85</span></a><span class="sd"> Ensures that a value is a collection (excluding `str` and `bytes`), otherwise wraps it into a list.</span>
-</span><span id="ensure_collection-86"><a href="#ensure_collection-86"><span class="linenos">86</span></a>
-</span><span id="ensure_collection-87"><a href="#ensure_collection-87"><span class="linenos">87</span></a><span class="sd"> Args:</span>
-</span><span id="ensure_collection-88"><a href="#ensure_collection-88"><span class="linenos">88</span></a><span class="sd"> value: The value of interest.</span>
-</span><span id="ensure_collection-89"><a href="#ensure_collection-89"><span class="linenos">89</span></a>
-</span><span id="ensure_collection-90"><a href="#ensure_collection-90"><span class="linenos">90</span></a><span class="sd"> Returns:</span>
-</span><span id="ensure_collection-91"><a href="#ensure_collection-91"><span class="linenos">91</span></a><span class="sd"> The value if it&#39;s a collection, or else the value wrapped in a list.</span>
-</span><span id="ensure_collection-92"><a href="#ensure_collection-92"><span class="linenos">92</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ensure_collection-93"><a href="#ensure_collection-93"><span class="linenos">93</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="ensure_collection-94"><a href="#ensure_collection-94"><span class="linenos">94</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="ensure_collection-95"><a href="#ensure_collection-95"><span class="linenos">95</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="ensure_collection-96"><a href="#ensure_collection-96"><span class="linenos">96</span></a> <span class="n">value</span> <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">Collection</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span> <span class="k">else</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
-</span><span id="ensure_collection-97"><a href="#ensure_collection-97"><span class="linenos">97</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_collection-92"><a href="#ensure_collection-92"><span class="linenos"> 92</span></a><span class="k">def</span> <span class="nf">ensure_collection</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+</span><span id="ensure_collection-93"><a href="#ensure_collection-93"><span class="linenos"> 93</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="ensure_collection-94"><a href="#ensure_collection-94"><span class="linenos"> 94</span></a><span class="sd"> Ensures that a value is a collection (excluding `str` and `bytes`), otherwise wraps it into a list.</span>
+</span><span id="ensure_collection-95"><a href="#ensure_collection-95"><span class="linenos"> 95</span></a>
+</span><span id="ensure_collection-96"><a href="#ensure_collection-96"><span class="linenos"> 96</span></a><span class="sd"> Args:</span>
+</span><span id="ensure_collection-97"><a href="#ensure_collection-97"><span class="linenos"> 97</span></a><span class="sd"> value: The value of interest.</span>
+</span><span id="ensure_collection-98"><a href="#ensure_collection-98"><span class="linenos"> 98</span></a>
+</span><span id="ensure_collection-99"><a href="#ensure_collection-99"><span class="linenos"> 99</span></a><span class="sd"> Returns:</span>
+</span><span id="ensure_collection-100"><a href="#ensure_collection-100"><span class="linenos">100</span></a><span class="sd"> The value if it&#39;s a collection, or else the value wrapped in a list.</span>
+</span><span id="ensure_collection-101"><a href="#ensure_collection-101"><span class="linenos">101</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ensure_collection-102"><a href="#ensure_collection-102"><span class="linenos">102</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="ensure_collection-103"><a href="#ensure_collection-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="ensure_collection-104"><a href="#ensure_collection-104"><span class="linenos">104</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="ensure_collection-105"><a href="#ensure_collection-105"><span class="linenos">105</span></a> <span class="n">value</span> <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">Collection</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span> <span class="k">else</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
+</span><span id="ensure_collection-106"><a href="#ensure_collection-106"><span class="linenos">106</span></a> <span class="p">)</span>
</span></pre></div>
@@ -765,18 +820,18 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#csv"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="csv-100"><a href="#csv-100"><span class="linenos">100</span></a><span class="k">def</span> <span class="nf">csv</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="csv-101"><a href="#csv-101"><span class="linenos">101</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="csv-102"><a href="#csv-102"><span class="linenos">102</span></a><span class="sd"> Formats any number of string arguments as CSV.</span>
-</span><span id="csv-103"><a href="#csv-103"><span class="linenos">103</span></a>
-</span><span id="csv-104"><a href="#csv-104"><span class="linenos">104</span></a><span class="sd"> Args:</span>
-</span><span id="csv-105"><a href="#csv-105"><span class="linenos">105</span></a><span class="sd"> args: The string arguments to format.</span>
-</span><span id="csv-106"><a href="#csv-106"><span class="linenos">106</span></a><span class="sd"> sep: The argument separator.</span>
-</span><span id="csv-107"><a href="#csv-107"><span class="linenos">107</span></a>
-</span><span id="csv-108"><a href="#csv-108"><span class="linenos">108</span></a><span class="sd"> Returns:</span>
-</span><span id="csv-109"><a href="#csv-109"><span class="linenos">109</span></a><span class="sd"> The arguments formatted as a CSV string.</span>
-</span><span id="csv-110"><a href="#csv-110"><span class="linenos">110</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="csv-111"><a href="#csv-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</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="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="csv-109"><a href="#csv-109"><span class="linenos">109</span></a><span class="k">def</span> <span class="nf">csv</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="csv-110"><a href="#csv-110"><span class="linenos">110</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="csv-111"><a href="#csv-111"><span class="linenos">111</span></a><span class="sd"> Formats any number of string arguments as CSV.</span>
+</span><span id="csv-112"><a href="#csv-112"><span class="linenos">112</span></a>
+</span><span id="csv-113"><a href="#csv-113"><span class="linenos">113</span></a><span class="sd"> Args:</span>
+</span><span id="csv-114"><a href="#csv-114"><span class="linenos">114</span></a><span class="sd"> args: The string arguments to format.</span>
+</span><span id="csv-115"><a href="#csv-115"><span class="linenos">115</span></a><span class="sd"> sep: The argument separator.</span>
+</span><span id="csv-116"><a href="#csv-116"><span class="linenos">116</span></a>
+</span><span id="csv-117"><a href="#csv-117"><span class="linenos">117</span></a><span class="sd"> Returns:</span>
+</span><span id="csv-118"><a href="#csv-118"><span class="linenos">118</span></a><span class="sd"> The arguments formatted as a CSV string.</span>
+</span><span id="csv-119"><a href="#csv-119"><span class="linenos">119</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="csv-120"><a href="#csv-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</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="p">)</span>
</span></pre></div>
@@ -809,29 +864,29 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#subclasses"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="subclasses-114"><a href="#subclasses-114"><span class="linenos">114</span></a><span class="k">def</span> <span class="nf">subclasses</span><span class="p">(</span>
-</span><span id="subclasses-115"><a href="#subclasses-115"><span class="linenos">115</span></a> <span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="subclasses-116"><a href="#subclasses-116"><span class="linenos">116</span></a> <span class="n">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span>
-</span><span id="subclasses-117"><a href="#subclasses-117"><span class="linenos">117</span></a> <span class="n">exclude</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(),</span>
-</span><span id="subclasses-118"><a href="#subclasses-118"><span class="linenos">118</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">Type</span><span class="p">]:</span>
-</span><span id="subclasses-119"><a href="#subclasses-119"><span class="linenos">119</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="subclasses-120"><a href="#subclasses-120"><span class="linenos">120</span></a><span class="sd"> Returns all subclasses for a collection of classes, possibly excluding some of them.</span>
-</span><span id="subclasses-121"><a href="#subclasses-121"><span class="linenos">121</span></a>
-</span><span id="subclasses-122"><a href="#subclasses-122"><span class="linenos">122</span></a><span class="sd"> Args:</span>
-</span><span id="subclasses-123"><a href="#subclasses-123"><span class="linenos">123</span></a><span class="sd"> module_name: The name of the module to search for subclasses in.</span>
-</span><span id="subclasses-124"><a href="#subclasses-124"><span class="linenos">124</span></a><span class="sd"> classes: Class(es) we want to find the subclasses of.</span>
-</span><span id="subclasses-125"><a href="#subclasses-125"><span class="linenos">125</span></a><span class="sd"> exclude: Class(es) we want to exclude from the returned list.</span>
-</span><span id="subclasses-126"><a href="#subclasses-126"><span class="linenos">126</span></a>
-</span><span id="subclasses-127"><a href="#subclasses-127"><span class="linenos">127</span></a><span class="sd"> Returns:</span>
-</span><span id="subclasses-128"><a href="#subclasses-128"><span class="linenos">128</span></a><span class="sd"> The target subclasses.</span>
-</span><span id="subclasses-129"><a href="#subclasses-129"><span class="linenos">129</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="subclasses-130"><a href="#subclasses-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="subclasses-131"><a href="#subclasses-131"><span class="linenos">131</span></a> <span class="n">obj</span>
-</span><span id="subclasses-132"><a href="#subclasses-132"><span class="linenos">132</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getmembers</span><span class="p">(</span>
-</span><span id="subclasses-133"><a href="#subclasses-133"><span class="linenos">133</span></a> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">module_name</span><span class="p">],</span>
-</span><span id="subclasses-134"><a href="#subclasses-134"><span class="linenos">134</span></a> <span class="k">lambda</span> <span class="n">obj</span><span class="p">:</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">classes</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exclude</span><span class="p">,</span>
-</span><span id="subclasses-135"><a href="#subclasses-135"><span class="linenos">135</span></a> <span class="p">)</span>
-</span><span id="subclasses-136"><a href="#subclasses-136"><span class="linenos">136</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="subclasses-123"><a href="#subclasses-123"><span class="linenos">123</span></a><span class="k">def</span> <span class="nf">subclasses</span><span class="p">(</span>
+</span><span id="subclasses-124"><a href="#subclasses-124"><span class="linenos">124</span></a> <span class="n">module_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="subclasses-125"><a href="#subclasses-125"><span class="linenos">125</span></a> <span class="n">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span>
+</span><span id="subclasses-126"><a href="#subclasses-126"><span class="linenos">126</span></a> <span class="n">exclude</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(),</span>
+</span><span id="subclasses-127"><a href="#subclasses-127"><span class="linenos">127</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">]:</span>
+</span><span id="subclasses-128"><a href="#subclasses-128"><span class="linenos">128</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="subclasses-129"><a href="#subclasses-129"><span class="linenos">129</span></a><span class="sd"> Returns all subclasses for a collection of classes, possibly excluding some of them.</span>
+</span><span id="subclasses-130"><a href="#subclasses-130"><span class="linenos">130</span></a>
+</span><span id="subclasses-131"><a href="#subclasses-131"><span class="linenos">131</span></a><span class="sd"> Args:</span>
+</span><span id="subclasses-132"><a href="#subclasses-132"><span class="linenos">132</span></a><span class="sd"> module_name: The name of the module to search for subclasses in.</span>
+</span><span id="subclasses-133"><a href="#subclasses-133"><span class="linenos">133</span></a><span class="sd"> classes: Class(es) we want to find the subclasses of.</span>
+</span><span id="subclasses-134"><a href="#subclasses-134"><span class="linenos">134</span></a><span class="sd"> exclude: Class(es) we want to exclude from the returned list.</span>
+</span><span id="subclasses-135"><a href="#subclasses-135"><span class="linenos">135</span></a>
+</span><span id="subclasses-136"><a href="#subclasses-136"><span class="linenos">136</span></a><span class="sd"> Returns:</span>
+</span><span id="subclasses-137"><a href="#subclasses-137"><span class="linenos">137</span></a><span class="sd"> The target subclasses.</span>
+</span><span id="subclasses-138"><a href="#subclasses-138"><span class="linenos">138</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="subclasses-139"><a href="#subclasses-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="subclasses-140"><a href="#subclasses-140"><span class="linenos">140</span></a> <span class="n">obj</span>
+</span><span id="subclasses-141"><a href="#subclasses-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getmembers</span><span class="p">(</span>
+</span><span id="subclasses-142"><a href="#subclasses-142"><span class="linenos">142</span></a> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">module_name</span><span class="p">],</span>
+</span><span id="subclasses-143"><a href="#subclasses-143"><span class="linenos">143</span></a> <span class="k">lambda</span> <span class="n">obj</span><span class="p">:</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">classes</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exclude</span><span class="p">,</span>
+</span><span id="subclasses-144"><a href="#subclasses-144"><span class="linenos">144</span></a> <span class="p">)</span>
+</span><span id="subclasses-145"><a href="#subclasses-145"><span class="linenos">145</span></a> <span class="p">]</span>
</span></pre></div>
@@ -859,58 +914,57 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">apply_index_offset</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">this</span><span class="p">:</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">expressions</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]]</span>,</span><span class="param"> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]]</span>:</span></span>
+ <span class="name">apply_index_offset</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">this</span><span class="p">:</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">expressions</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span>,</span><span class="param"> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="apply_index_offset-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#apply_index_offset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="apply_index_offset-139"><a href="#apply_index_offset-139"><span class="linenos">139</span></a><span class="k">def</span> <span class="nf">apply_index_offset</span><span class="p">(</span>
-</span><span id="apply_index_offset-140"><a href="#apply_index_offset-140"><span class="linenos">140</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="apply_index_offset-141"><a href="#apply_index_offset-141"><span class="linenos">141</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">E</span><span class="p">]],</span>
-</span><span id="apply_index_offset-142"><a href="#apply_index_offset-142"><span class="linenos">142</span></a> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
-</span><span id="apply_index_offset-143"><a href="#apply_index_offset-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">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">E</span><span class="p">]]:</span>
-</span><span id="apply_index_offset-144"><a href="#apply_index_offset-144"><span class="linenos">144</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="apply_index_offset-145"><a href="#apply_index_offset-145"><span class="linenos">145</span></a><span class="sd"> Applies an offset to a given integer literal expression.</span>
-</span><span id="apply_index_offset-146"><a href="#apply_index_offset-146"><span class="linenos">146</span></a>
-</span><span id="apply_index_offset-147"><a href="#apply_index_offset-147"><span class="linenos">147</span></a><span class="sd"> Args:</span>
-</span><span id="apply_index_offset-148"><a href="#apply_index_offset-148"><span class="linenos">148</span></a><span class="sd"> this: The target of the index.</span>
-</span><span id="apply_index_offset-149"><a href="#apply_index_offset-149"><span class="linenos">149</span></a><span class="sd"> expressions: The expression the offset will be applied to, wrapped in a list.</span>
-</span><span id="apply_index_offset-150"><a href="#apply_index_offset-150"><span class="linenos">150</span></a><span class="sd"> offset: The offset that will be applied.</span>
-</span><span id="apply_index_offset-151"><a href="#apply_index_offset-151"><span class="linenos">151</span></a>
-</span><span id="apply_index_offset-152"><a href="#apply_index_offset-152"><span class="linenos">152</span></a><span class="sd"> Returns:</span>
-</span><span id="apply_index_offset-153"><a href="#apply_index_offset-153"><span class="linenos">153</span></a><span class="sd"> The original expression with the offset applied to it, wrapped in a list. If the provided</span>
-</span><span id="apply_index_offset-154"><a href="#apply_index_offset-154"><span class="linenos">154</span></a><span class="sd"> `expressions` argument contains more than one expression, it&#39;s returned unaffected.</span>
-</span><span id="apply_index_offset-155"><a href="#apply_index_offset-155"><span class="linenos">155</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="apply_index_offset-156"><a href="#apply_index_offset-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="apply_index_offset-157"><a href="#apply_index_offset-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="n">expressions</span>
-</span><span id="apply_index_offset-158"><a href="#apply_index_offset-158"><span class="linenos">158</span></a>
-</span><span id="apply_index_offset-159"><a href="#apply_index_offset-159"><span class="linenos">159</span></a> <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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="apply_index_offset-148"><a href="#apply_index_offset-148"><span class="linenos">148</span></a><span class="k">def</span> <span class="nf">apply_index_offset</span><span class="p">(</span>
+</span><span id="apply_index_offset-149"><a href="#apply_index_offset-149"><span class="linenos">149</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="apply_index_offset-150"><a href="#apply_index_offset-150"><span class="linenos">150</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">E</span><span class="p">],</span>
+</span><span id="apply_index_offset-151"><a href="#apply_index_offset-151"><span class="linenos">151</span></a> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
+</span><span id="apply_index_offset-152"><a href="#apply_index_offset-152"><span class="linenos">152</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">E</span><span class="p">]:</span>
+</span><span id="apply_index_offset-153"><a href="#apply_index_offset-153"><span class="linenos">153</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="apply_index_offset-154"><a href="#apply_index_offset-154"><span class="linenos">154</span></a><span class="sd"> Applies an offset to a given integer literal expression.</span>
+</span><span id="apply_index_offset-155"><a href="#apply_index_offset-155"><span class="linenos">155</span></a>
+</span><span id="apply_index_offset-156"><a href="#apply_index_offset-156"><span class="linenos">156</span></a><span class="sd"> Args:</span>
+</span><span id="apply_index_offset-157"><a href="#apply_index_offset-157"><span class="linenos">157</span></a><span class="sd"> this: The target of the index.</span>
+</span><span id="apply_index_offset-158"><a href="#apply_index_offset-158"><span class="linenos">158</span></a><span class="sd"> expressions: The expression the offset will be applied to, wrapped in a list.</span>
+</span><span id="apply_index_offset-159"><a href="#apply_index_offset-159"><span class="linenos">159</span></a><span class="sd"> offset: The offset that will be applied.</span>
</span><span id="apply_index_offset-160"><a href="#apply_index_offset-160"><span class="linenos">160</span></a>
-</span><span id="apply_index_offset-161"><a href="#apply_index_offset-161"><span class="linenos">161</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="apply_index_offset-162"><a href="#apply_index_offset-162"><span class="linenos">162</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="apply_index_offset-163"><a href="#apply_index_offset-163"><span class="linenos">163</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="apply_index_offset-164"><a href="#apply_index_offset-164"><span class="linenos">164</span></a>
-</span><span id="apply_index_offset-165"><a href="#apply_index_offset-165"><span class="linenos">165</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="apply_index_offset-166"><a href="#apply_index_offset-166"><span class="linenos">166</span></a> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="apply_index_offset-161"><a href="#apply_index_offset-161"><span class="linenos">161</span></a><span class="sd"> Returns:</span>
+</span><span id="apply_index_offset-162"><a href="#apply_index_offset-162"><span class="linenos">162</span></a><span class="sd"> The original expression with the offset applied to it, wrapped in a list. If the provided</span>
+</span><span id="apply_index_offset-163"><a href="#apply_index_offset-163"><span class="linenos">163</span></a><span class="sd"> `expressions` argument contains more than one expression, it&#39;s returned unaffected.</span>
+</span><span id="apply_index_offset-164"><a href="#apply_index_offset-164"><span class="linenos">164</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="apply_index_offset-165"><a href="#apply_index_offset-165"><span class="linenos">165</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="apply_index_offset-166"><a href="#apply_index_offset-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="n">expressions</span>
</span><span id="apply_index_offset-167"><a href="#apply_index_offset-167"><span class="linenos">167</span></a>
-</span><span id="apply_index_offset-168"><a href="#apply_index_offset-168"><span class="linenos">168</span></a> <span class="k">if</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">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="apply_index_offset-169"><a href="#apply_index_offset-169"><span class="linenos">169</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
-</span><span id="apply_index_offset-170"><a href="#apply_index_offset-170"><span class="linenos">170</span></a> <span class="n">exp</span><span 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="apply_index_offset-171"><a href="#apply_index_offset-171"><span class="linenos">171</span></a> <span class="p">):</span>
-</span><span id="apply_index_offset-172"><a href="#apply_index_offset-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="apply_index_offset-168"><a href="#apply_index_offset-168"><span class="linenos">168</span></a> <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="apply_index_offset-169"><a href="#apply_index_offset-169"><span class="linenos">169</span></a>
+</span><span id="apply_index_offset-170"><a href="#apply_index_offset-170"><span class="linenos">170</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="apply_index_offset-171"><a href="#apply_index_offset-171"><span class="linenos">171</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="apply_index_offset-172"><a href="#apply_index_offset-172"><span class="linenos">172</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="apply_index_offset-173"><a href="#apply_index_offset-173"><span class="linenos">173</span></a>
-</span><span id="apply_index_offset-174"><a href="#apply_index_offset-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="apply_index_offset-175"><a href="#apply_index_offset-175"><span class="linenos">175</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="apply_index_offset-176"><a href="#apply_index_offset-176"><span class="linenos">176</span></a> <span class="n">annotate_types</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="apply_index_offset-177"><a href="#apply_index_offset-177"><span class="linenos">177</span></a> <span class="k">if</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">DataType</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
-</span><span id="apply_index_offset-178"><a href="#apply_index_offset-178"><span class="linenos">178</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;Applying array index offset (</span><span class="si">%s</span><span class="s2">)&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
-</span><span id="apply_index_offset-179"><a href="#apply_index_offset-179"><span class="linenos">179</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span>
-</span><span id="apply_index_offset-180"><a href="#apply_index_offset-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="apply_index_offset-181"><a href="#apply_index_offset-181"><span class="linenos">181</span></a> <span class="p">)</span>
-</span><span id="apply_index_offset-182"><a href="#apply_index_offset-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span>
-</span><span id="apply_index_offset-183"><a href="#apply_index_offset-183"><span class="linenos">183</span></a>
-</span><span id="apply_index_offset-184"><a href="#apply_index_offset-184"><span class="linenos">184</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="apply_index_offset-174"><a href="#apply_index_offset-174"><span class="linenos">174</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="apply_index_offset-175"><a href="#apply_index_offset-175"><span class="linenos">175</span></a> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="apply_index_offset-176"><a href="#apply_index_offset-176"><span class="linenos">176</span></a>
+</span><span id="apply_index_offset-177"><a href="#apply_index_offset-177"><span class="linenos">177</span></a> <span class="k">if</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">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="apply_index_offset-178"><a href="#apply_index_offset-178"><span class="linenos">178</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="apply_index_offset-179"><a href="#apply_index_offset-179"><span class="linenos">179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="apply_index_offset-180"><a href="#apply_index_offset-180"><span class="linenos">180</span></a> <span class="p">):</span>
+</span><span id="apply_index_offset-181"><a href="#apply_index_offset-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="apply_index_offset-182"><a href="#apply_index_offset-182"><span class="linenos">182</span></a>
+</span><span id="apply_index_offset-183"><a href="#apply_index_offset-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="apply_index_offset-184"><a href="#apply_index_offset-184"><span class="linenos">184</span></a> <span class="n">annotate_types</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="apply_index_offset-185"><a href="#apply_index_offset-185"><span class="linenos">185</span></a> <span class="k">if</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">DataType</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
+</span><span id="apply_index_offset-186"><a href="#apply_index_offset-186"><span class="linenos">186</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;Applying array index offset (</span><span class="si">%s</span><span class="s2">)&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="apply_index_offset-187"><a href="#apply_index_offset-187"><span class="linenos">187</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span>
+</span><span id="apply_index_offset-188"><a href="#apply_index_offset-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">offset</span><span class="p">))</span>
+</span><span id="apply_index_offset-189"><a href="#apply_index_offset-189"><span class="linenos">189</span></a> <span class="p">)</span>
+</span><span id="apply_index_offset-190"><a href="#apply_index_offset-190"><span class="linenos">190</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span>
+</span><span id="apply_index_offset-191"><a href="#apply_index_offset-191"><span class="linenos">191</span></a>
+</span><span id="apply_index_offset-192"><a href="#apply_index_offset-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="n">expressions</span>
</span></pre></div>
@@ -945,9 +999,9 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#camel_to_snake_case"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="camel_to_snake_case-187"><a href="#camel_to_snake_case-187"><span class="linenos">187</span></a><span class="k">def</span> <span class="nf">camel_to_snake_case</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="camel_to_snake_case-188"><a href="#camel_to_snake_case-188"><span class="linenos">188</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts `name` from camelCase to snake_case and returns the result.&quot;&quot;&quot;</span>
-</span><span id="camel_to_snake_case-189"><a href="#camel_to_snake_case-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">CAMEL_CASE_PATTERN</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="camel_to_snake_case-195"><a href="#camel_to_snake_case-195"><span class="linenos">195</span></a><span class="k">def</span> <span class="nf">camel_to_snake_case</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="camel_to_snake_case-196"><a href="#camel_to_snake_case-196"><span class="linenos">196</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts `name` from camelCase to snake_case and returns the result.&quot;&quot;&quot;</span>
+</span><span id="camel_to_snake_case-197"><a href="#camel_to_snake_case-197"><span class="linenos">197</span></a> <span class="k">return</span> <span class="n">CAMEL_CASE_PATTERN</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span></pre></div>
@@ -967,30 +1021,30 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#while_changing"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="while_changing-192"><a href="#while_changing-192"><span class="linenos">192</span></a><span class="k">def</span> <span class="nf">while_changing</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="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Expression</span><span class="p">],</span> <span class="n">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="while_changing-193"><a href="#while_changing-193"><span class="linenos">193</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="while_changing-194"><a href="#while_changing-194"><span class="linenos">194</span></a><span class="sd"> Applies a transformation to a given expression until a fix point is reached.</span>
-</span><span id="while_changing-195"><a href="#while_changing-195"><span class="linenos">195</span></a>
-</span><span id="while_changing-196"><a href="#while_changing-196"><span class="linenos">196</span></a><span class="sd"> Args:</span>
-</span><span id="while_changing-197"><a href="#while_changing-197"><span class="linenos">197</span></a><span class="sd"> expression: The expression to be transformed.</span>
-</span><span id="while_changing-198"><a href="#while_changing-198"><span class="linenos">198</span></a><span class="sd"> func: The transformation to be applied.</span>
-</span><span id="while_changing-199"><a href="#while_changing-199"><span class="linenos">199</span></a>
-</span><span id="while_changing-200"><a href="#while_changing-200"><span class="linenos">200</span></a><span class="sd"> Returns:</span>
-</span><span id="while_changing-201"><a href="#while_changing-201"><span class="linenos">201</span></a><span class="sd"> The transformed expression.</span>
-</span><span id="while_changing-202"><a href="#while_changing-202"><span class="linenos">202</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="while_changing-203"><a href="#while_changing-203"><span class="linenos">203</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="while_changing-204"><a href="#while_changing-204"><span class="linenos">204</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">())):</span>
-</span><span id="while_changing-205"><a href="#while_changing-205"><span class="linenos">205</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
-</span><span id="while_changing-206"><a href="#while_changing-206"><span class="linenos">206</span></a>
-</span><span id="while_changing-207"><a href="#while_changing-207"><span class="linenos">207</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="while_changing-208"><a href="#while_changing-208"><span class="linenos">208</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="while_changing-209"><a href="#while_changing-209"><span class="linenos">209</span></a>
-</span><span id="while_changing-210"><a href="#while_changing-210"><span class="linenos">210</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
-</span><span id="while_changing-211"><a href="#while_changing-211"><span class="linenos">211</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="while_changing-212"><a href="#while_changing-212"><span class="linenos">212</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="while_changing-213"><a href="#while_changing-213"><span class="linenos">213</span></a> <span class="k">break</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="while_changing-200"><a href="#while_changing-200"><span class="linenos">200</span></a><span class="k">def</span> <span class="nf">while_changing</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="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Expression</span><span class="p">],</span> <span class="n">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="while_changing-201"><a href="#while_changing-201"><span class="linenos">201</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="while_changing-202"><a href="#while_changing-202"><span class="linenos">202</span></a><span class="sd"> Applies a transformation to a given expression until a fix point is reached.</span>
+</span><span id="while_changing-203"><a href="#while_changing-203"><span class="linenos">203</span></a>
+</span><span id="while_changing-204"><a href="#while_changing-204"><span class="linenos">204</span></a><span class="sd"> Args:</span>
+</span><span id="while_changing-205"><a href="#while_changing-205"><span class="linenos">205</span></a><span class="sd"> expression: The expression to be transformed.</span>
+</span><span id="while_changing-206"><a href="#while_changing-206"><span class="linenos">206</span></a><span class="sd"> func: The transformation to be applied.</span>
+</span><span id="while_changing-207"><a href="#while_changing-207"><span class="linenos">207</span></a>
+</span><span id="while_changing-208"><a href="#while_changing-208"><span class="linenos">208</span></a><span class="sd"> Returns:</span>
+</span><span id="while_changing-209"><a href="#while_changing-209"><span class="linenos">209</span></a><span class="sd"> The transformed expression.</span>
+</span><span id="while_changing-210"><a href="#while_changing-210"><span class="linenos">210</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="while_changing-211"><a href="#while_changing-211"><span class="linenos">211</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="while_changing-212"><a href="#while_changing-212"><span class="linenos">212</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">())):</span>
+</span><span id="while_changing-213"><a href="#while_changing-213"><span class="linenos">213</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
</span><span id="while_changing-214"><a href="#while_changing-214"><span class="linenos">214</span></a>
-</span><span id="while_changing-215"><a href="#while_changing-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="while_changing-215"><a href="#while_changing-215"><span class="linenos">215</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="while_changing-216"><a href="#while_changing-216"><span class="linenos">216</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="while_changing-217"><a href="#while_changing-217"><span class="linenos">217</span></a>
+</span><span id="while_changing-218"><a href="#while_changing-218"><span class="linenos">218</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
+</span><span id="while_changing-219"><a href="#while_changing-219"><span class="linenos">219</span></a> <span class="n">n</span><span class="o">.</span><span class="n">_hash</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="while_changing-220"><a href="#while_changing-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="nb">hash</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="while_changing-221"><a href="#while_changing-221"><span class="linenos">221</span></a> <span class="k">break</span>
+</span><span id="while_changing-222"><a href="#while_changing-222"><span class="linenos">222</span></a>
+</span><span id="while_changing-223"><a href="#while_changing-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1023,38 +1077,38 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#tsort"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="tsort-218"><a href="#tsort-218"><span class="linenos">218</span></a><span class="k">def</span> <span class="nf">tsort</span><span class="p">(</span><span class="n">dag</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="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">T</span><span class="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="p">]:</span>
-</span><span id="tsort-219"><a href="#tsort-219"><span class="linenos">219</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="tsort-220"><a href="#tsort-220"><span class="linenos">220</span></a><span class="sd"> Sorts a given directed acyclic graph in topological order.</span>
-</span><span id="tsort-221"><a href="#tsort-221"><span class="linenos">221</span></a>
-</span><span id="tsort-222"><a href="#tsort-222"><span class="linenos">222</span></a><span class="sd"> Args:</span>
-</span><span id="tsort-223"><a href="#tsort-223"><span class="linenos">223</span></a><span class="sd"> dag: The graph to be sorted.</span>
-</span><span id="tsort-224"><a href="#tsort-224"><span class="linenos">224</span></a>
-</span><span id="tsort-225"><a href="#tsort-225"><span class="linenos">225</span></a><span class="sd"> Returns:</span>
-</span><span id="tsort-226"><a href="#tsort-226"><span class="linenos">226</span></a><span class="sd"> A list that contains all of the graph&#39;s nodes in topological order.</span>
-</span><span id="tsort-227"><a href="#tsort-227"><span class="linenos">227</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="tsort-228"><a href="#tsort-228"><span class="linenos">228</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="tsort-226"><a href="#tsort-226"><span class="linenos">226</span></a><span class="k">def</span> <span class="nf">tsort</span><span class="p">(</span><span class="n">dag</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="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">T</span><span class="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="p">]:</span>
+</span><span id="tsort-227"><a href="#tsort-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="tsort-228"><a href="#tsort-228"><span class="linenos">228</span></a><span class="sd"> Sorts a given directed acyclic graph in topological order.</span>
</span><span id="tsort-229"><a href="#tsort-229"><span class="linenos">229</span></a>
-</span><span id="tsort-230"><a href="#tsort-230"><span class="linenos">230</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span>
-</span><span id="tsort-231"><a href="#tsort-231"><span class="linenos">231</span></a> <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">deps</span><span class="p">:</span>
-</span><span id="tsort-232"><a href="#tsort-232"><span class="linenos">232</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">dag</span><span class="p">:</span>
-</span><span id="tsort-233"><a href="#tsort-233"><span class="linenos">233</span></a> <span class="n">dag</span><span class="p">[</span><span class="n">dep</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="tsort-234"><a href="#tsort-234"><span class="linenos">234</span></a>
-</span><span id="tsort-235"><a href="#tsort-235"><span class="linenos">235</span></a> <span class="k">while</span> <span class="n">dag</span><span class="p">:</span>
-</span><span id="tsort-236"><a href="#tsort-236"><span class="linenos">236</span></a> <span class="n">current</span> <span class="o">=</span> <span class="p">{</span><span class="n">node</span> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">deps</span><span class="p">}</span>
+</span><span id="tsort-230"><a href="#tsort-230"><span class="linenos">230</span></a><span class="sd"> Args:</span>
+</span><span id="tsort-231"><a href="#tsort-231"><span class="linenos">231</span></a><span class="sd"> dag: The graph to be sorted.</span>
+</span><span id="tsort-232"><a href="#tsort-232"><span class="linenos">232</span></a>
+</span><span id="tsort-233"><a href="#tsort-233"><span class="linenos">233</span></a><span class="sd"> Returns:</span>
+</span><span id="tsort-234"><a href="#tsort-234"><span class="linenos">234</span></a><span class="sd"> A list that contains all of the graph&#39;s nodes in topological order.</span>
+</span><span id="tsort-235"><a href="#tsort-235"><span class="linenos">235</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="tsort-236"><a href="#tsort-236"><span class="linenos">236</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="tsort-237"><a href="#tsort-237"><span class="linenos">237</span></a>
-</span><span id="tsort-238"><a href="#tsort-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">current</span><span class="p">:</span>
-</span><span id="tsort-239"><a href="#tsort-239"><span class="linenos">239</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cycle error&quot;</span><span class="p">)</span>
-</span><span id="tsort-240"><a href="#tsort-240"><span class="linenos">240</span></a>
-</span><span id="tsort-241"><a href="#tsort-241"><span class="linenos">241</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">current</span><span class="p">:</span>
-</span><span id="tsort-242"><a href="#tsort-242"><span class="linenos">242</span></a> <span class="n">dag</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="tsort-243"><a href="#tsort-243"><span class="linenos">243</span></a>
-</span><span id="tsort-244"><a href="#tsort-244"><span class="linenos">244</span></a> <span class="k">for</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="tsort-245"><a href="#tsort-245"><span class="linenos">245</span></a> <span class="n">deps</span> <span class="o">-=</span> <span class="n">current</span>
-</span><span id="tsort-246"><a href="#tsort-246"><span class="linenos">246</span></a>
-</span><span id="tsort-247"><a href="#tsort-247"><span class="linenos">247</span></a> <span class="n">result</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">current</span><span class="p">))</span> <span class="c1"># type: ignore</span>
+</span><span id="tsort-238"><a href="#tsort-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span>
+</span><span id="tsort-239"><a href="#tsort-239"><span class="linenos">239</span></a> <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">deps</span><span class="p">:</span>
+</span><span id="tsort-240"><a href="#tsort-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">dag</span><span class="p">:</span>
+</span><span id="tsort-241"><a href="#tsort-241"><span class="linenos">241</span></a> <span class="n">dag</span><span class="p">[</span><span class="n">dep</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="tsort-242"><a href="#tsort-242"><span class="linenos">242</span></a>
+</span><span id="tsort-243"><a href="#tsort-243"><span class="linenos">243</span></a> <span class="k">while</span> <span class="n">dag</span><span class="p">:</span>
+</span><span id="tsort-244"><a href="#tsort-244"><span class="linenos">244</span></a> <span class="n">current</span> <span class="o">=</span> <span class="p">{</span><span class="n">node</span> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">deps</span><span class="p">}</span>
+</span><span id="tsort-245"><a href="#tsort-245"><span class="linenos">245</span></a>
+</span><span id="tsort-246"><a href="#tsort-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">current</span><span class="p">:</span>
+</span><span id="tsort-247"><a href="#tsort-247"><span class="linenos">247</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cycle error&quot;</span><span class="p">)</span>
</span><span id="tsort-248"><a href="#tsort-248"><span class="linenos">248</span></a>
-</span><span id="tsort-249"><a href="#tsort-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="tsort-249"><a href="#tsort-249"><span class="linenos">249</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">current</span><span class="p">:</span>
+</span><span id="tsort-250"><a href="#tsort-250"><span class="linenos">250</span></a> <span class="n">dag</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="tsort-251"><a href="#tsort-251"><span class="linenos">251</span></a>
+</span><span id="tsort-252"><a href="#tsort-252"><span class="linenos">252</span></a> <span class="k">for</span> <span class="n">deps</span> <span class="ow">in</span> <span class="n">dag</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="tsort-253"><a href="#tsort-253"><span class="linenos">253</span></a> <span class="n">deps</span> <span class="o">-=</span> <span class="n">current</span>
+</span><span id="tsort-254"><a href="#tsort-254"><span class="linenos">254</span></a>
+</span><span id="tsort-255"><a href="#tsort-255"><span class="linenos">255</span></a> <span class="n">result</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">current</span><span class="p">))</span> <span class="c1"># type: ignore</span>
+</span><span id="tsort-256"><a href="#tsort-256"><span class="linenos">256</span></a>
+</span><span id="tsort-257"><a href="#tsort-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -1086,17 +1140,17 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#open_file"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="open_file-252"><a href="#open_file-252"><span class="linenos">252</span></a><span class="k">def</span> <span class="nf">open_file</span><span class="p">(</span><span class="n">file_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">TextIO</span><span class="p">:</span>
-</span><span id="open_file-253"><a href="#open_file-253"><span class="linenos">253</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Open a file that may be compressed as gzip and return it in universal newline mode.&quot;&quot;&quot;</span>
-</span><span id="open_file-254"><a href="#open_file-254"><span class="linenos">254</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-</span><span id="open_file-255"><a href="#open_file-255"><span class="linenos">255</span></a> <span class="n">gzipped</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\x1f\x8b</span><span class="s2">&quot;</span>
-</span><span id="open_file-256"><a href="#open_file-256"><span class="linenos">256</span></a>
-</span><span id="open_file-257"><a href="#open_file-257"><span class="linenos">257</span></a> <span class="k">if</span> <span class="n">gzipped</span><span class="p">:</span>
-</span><span id="open_file-258"><a href="#open_file-258"><span class="linenos">258</span></a> <span class="kn">import</span> <span class="nn">gzip</span>
-</span><span id="open_file-259"><a href="#open_file-259"><span class="linenos">259</span></a>
-</span><span id="open_file-260"><a href="#open_file-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="n">gzip</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rt&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="open_file-261"><a href="#open_file-261"><span class="linenos">261</span></a>
-</span><span id="open_file-262"><a href="#open_file-262"><span class="linenos">262</span></a> <span class="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">,</span> <span class="n">newline</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="open_file-260"><a href="#open_file-260"><span class="linenos">260</span></a><span class="k">def</span> <span class="nf">open_file</span><span class="p">(</span><span class="n">file_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">TextIO</span><span class="p">:</span>
+</span><span id="open_file-261"><a href="#open_file-261"><span class="linenos">261</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Open a file that may be compressed as gzip and return it in universal newline mode.&quot;&quot;&quot;</span>
+</span><span id="open_file-262"><a href="#open_file-262"><span class="linenos">262</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+</span><span id="open_file-263"><a href="#open_file-263"><span class="linenos">263</span></a> <span class="n">gzipped</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\x1f\x8b</span><span class="s2">&quot;</span>
+</span><span id="open_file-264"><a href="#open_file-264"><span class="linenos">264</span></a>
+</span><span id="open_file-265"><a href="#open_file-265"><span class="linenos">265</span></a> <span class="k">if</span> <span class="n">gzipped</span><span class="p">:</span>
+</span><span id="open_file-266"><a href="#open_file-266"><span class="linenos">266</span></a> <span class="kn">import</span> <span class="nn">gzip</span>
+</span><span id="open_file-267"><a href="#open_file-267"><span class="linenos">267</span></a>
+</span><span id="open_file-268"><a href="#open_file-268"><span class="linenos">268</span></a> <span class="k">return</span> <span class="n">gzip</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rt&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="open_file-269"><a href="#open_file-269"><span class="linenos">269</span></a>
+</span><span id="open_file-270"><a href="#open_file-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1117,32 +1171,32 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#csv_reader"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="csv_reader-265"><a href="#csv_reader-265"><span class="linenos">265</span></a><span class="nd">@contextmanager</span>
-</span><span id="csv_reader-266"><a href="#csv_reader-266"><span class="linenos">266</span></a><span class="k">def</span> <span class="nf">csv_reader</span><span class="p">(</span><span class="n">read_csv</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReadCSV</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="csv_reader-267"><a href="#csv_reader-267"><span class="linenos">267</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="csv_reader-268"><a href="#csv_reader-268"><span class="linenos">268</span></a><span class="sd"> Returns a csv reader given the expression `READ_CSV(name, [&#39;delimiter&#39;, &#39;|&#39;, ...])`.</span>
-</span><span id="csv_reader-269"><a href="#csv_reader-269"><span class="linenos">269</span></a>
-</span><span id="csv_reader-270"><a href="#csv_reader-270"><span class="linenos">270</span></a><span class="sd"> Args:</span>
-</span><span id="csv_reader-271"><a href="#csv_reader-271"><span class="linenos">271</span></a><span class="sd"> read_csv: A `ReadCSV` function call.</span>
-</span><span id="csv_reader-272"><a href="#csv_reader-272"><span class="linenos">272</span></a>
-</span><span id="csv_reader-273"><a href="#csv_reader-273"><span class="linenos">273</span></a><span class="sd"> Yields:</span>
-</span><span id="csv_reader-274"><a href="#csv_reader-274"><span class="linenos">274</span></a><span class="sd"> A python csv reader.</span>
-</span><span id="csv_reader-275"><a href="#csv_reader-275"><span class="linenos">275</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="csv_reader-276"><a href="#csv_reader-276"><span class="linenos">276</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">read_csv</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="csv_reader-277"><a href="#csv_reader-277"><span class="linenos">277</span></a> <span class="n">file</span> <span class="o">=</span> <span class="n">open_file</span><span class="p">(</span><span class="n">read_csv</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="csv_reader-278"><a href="#csv_reader-278"><span class="linenos">278</span></a>
-</span><span id="csv_reader-279"><a href="#csv_reader-279"><span class="linenos">279</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
-</span><span id="csv_reader-280"><a href="#csv_reader-280"><span class="linenos">280</span></a> <span class="n">args</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">name</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="csv_reader-281"><a href="#csv_reader-281"><span class="linenos">281</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="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
-</span><span id="csv_reader-282"><a href="#csv_reader-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s2">&quot;delimiter&quot;</span><span class="p">:</span>
-</span><span id="csv_reader-283"><a href="#csv_reader-283"><span class="linenos">283</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="n">v</span>
-</span><span id="csv_reader-284"><a href="#csv_reader-284"><span class="linenos">284</span></a>
-</span><span id="csv_reader-285"><a href="#csv_reader-285"><span class="linenos">285</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="csv_reader-286"><a href="#csv_reader-286"><span class="linenos">286</span></a> <span class="kn">import</span> <span class="nn">csv</span> <span class="k">as</span> <span class="nn">csv_</span>
-</span><span id="csv_reader-287"><a href="#csv_reader-287"><span class="linenos">287</span></a>
-</span><span id="csv_reader-288"><a href="#csv_reader-288"><span class="linenos">288</span></a> <span class="k">yield</span> <span class="n">csv_</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="n">delimiter</span><span class="p">)</span>
-</span><span id="csv_reader-289"><a href="#csv_reader-289"><span class="linenos">289</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="csv_reader-290"><a href="#csv_reader-290"><span class="linenos">290</span></a> <span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="csv_reader-273"><a href="#csv_reader-273"><span class="linenos">273</span></a><span class="nd">@contextmanager</span>
+</span><span id="csv_reader-274"><a href="#csv_reader-274"><span class="linenos">274</span></a><span class="k">def</span> <span class="nf">csv_reader</span><span class="p">(</span><span class="n">read_csv</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReadCSV</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="csv_reader-275"><a href="#csv_reader-275"><span class="linenos">275</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="csv_reader-276"><a href="#csv_reader-276"><span class="linenos">276</span></a><span class="sd"> Returns a csv reader given the expression `READ_CSV(name, [&#39;delimiter&#39;, &#39;|&#39;, ...])`.</span>
+</span><span id="csv_reader-277"><a href="#csv_reader-277"><span class="linenos">277</span></a>
+</span><span id="csv_reader-278"><a href="#csv_reader-278"><span class="linenos">278</span></a><span class="sd"> Args:</span>
+</span><span id="csv_reader-279"><a href="#csv_reader-279"><span class="linenos">279</span></a><span class="sd"> read_csv: A `ReadCSV` function call.</span>
+</span><span id="csv_reader-280"><a href="#csv_reader-280"><span class="linenos">280</span></a>
+</span><span id="csv_reader-281"><a href="#csv_reader-281"><span class="linenos">281</span></a><span class="sd"> Yields:</span>
+</span><span id="csv_reader-282"><a href="#csv_reader-282"><span class="linenos">282</span></a><span class="sd"> A python csv reader.</span>
+</span><span id="csv_reader-283"><a href="#csv_reader-283"><span class="linenos">283</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="csv_reader-284"><a href="#csv_reader-284"><span class="linenos">284</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">read_csv</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="csv_reader-285"><a href="#csv_reader-285"><span class="linenos">285</span></a> <span class="n">file</span> <span class="o">=</span> <span class="n">open_file</span><span class="p">(</span><span class="n">read_csv</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="csv_reader-286"><a href="#csv_reader-286"><span class="linenos">286</span></a>
+</span><span id="csv_reader-287"><a href="#csv_reader-287"><span class="linenos">287</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="s2">&quot;,&quot;</span>
+</span><span id="csv_reader-288"><a href="#csv_reader-288"><span class="linenos">288</span></a> <span class="n">args</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">name</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="csv_reader-289"><a href="#csv_reader-289"><span class="linenos">289</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="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+</span><span id="csv_reader-290"><a href="#csv_reader-290"><span class="linenos">290</span></a> <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s2">&quot;delimiter&quot;</span><span class="p">:</span>
+</span><span id="csv_reader-291"><a href="#csv_reader-291"><span class="linenos">291</span></a> <span class="n">delimiter</span> <span class="o">=</span> <span class="n">v</span>
+</span><span id="csv_reader-292"><a href="#csv_reader-292"><span class="linenos">292</span></a>
+</span><span id="csv_reader-293"><a href="#csv_reader-293"><span class="linenos">293</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="csv_reader-294"><a href="#csv_reader-294"><span class="linenos">294</span></a> <span class="kn">import</span> <span class="nn">csv</span> <span class="k">as</span> <span class="nn">csv_</span>
+</span><span id="csv_reader-295"><a href="#csv_reader-295"><span class="linenos">295</span></a>
+</span><span id="csv_reader-296"><a href="#csv_reader-296"><span class="linenos">296</span></a> <span class="k">yield</span> <span class="n">csv_</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="n">delimiter</span><span class="p">)</span>
+</span><span id="csv_reader-297"><a href="#csv_reader-297"><span class="linenos">297</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="csv_reader-298"><a href="#csv_reader-298"><span class="linenos">298</span></a> <span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></pre></div>
@@ -1174,27 +1228,27 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#find_new_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="find_new_name-293"><a href="#find_new_name-293"><span class="linenos">293</span></a><span class="k">def</span> <span class="nf">find_new_name</span><span class="p">(</span><span class="n">taken</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="n">base</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="find_new_name-294"><a href="#find_new_name-294"><span class="linenos">294</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="find_new_name-295"><a href="#find_new_name-295"><span class="linenos">295</span></a><span class="sd"> Searches for a new name.</span>
-</span><span id="find_new_name-296"><a href="#find_new_name-296"><span class="linenos">296</span></a>
-</span><span id="find_new_name-297"><a href="#find_new_name-297"><span class="linenos">297</span></a><span class="sd"> Args:</span>
-</span><span id="find_new_name-298"><a href="#find_new_name-298"><span class="linenos">298</span></a><span class="sd"> taken: A collection of taken names.</span>
-</span><span id="find_new_name-299"><a href="#find_new_name-299"><span class="linenos">299</span></a><span class="sd"> base: Base name to alter.</span>
-</span><span id="find_new_name-300"><a href="#find_new_name-300"><span class="linenos">300</span></a>
-</span><span id="find_new_name-301"><a href="#find_new_name-301"><span class="linenos">301</span></a><span class="sd"> Returns:</span>
-</span><span id="find_new_name-302"><a href="#find_new_name-302"><span class="linenos">302</span></a><span class="sd"> The new, available name.</span>
-</span><span id="find_new_name-303"><a href="#find_new_name-303"><span class="linenos">303</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="find_new_name-304"><a href="#find_new_name-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="n">base</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
-</span><span id="find_new_name-305"><a href="#find_new_name-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">base</span>
-</span><span id="find_new_name-306"><a href="#find_new_name-306"><span class="linenos">306</span></a>
-</span><span id="find_new_name-307"><a href="#find_new_name-307"><span class="linenos">307</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="find_new_name-308"><a href="#find_new_name-308"><span class="linenos">308</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="find_new_name-309"><a href="#find_new_name-309"><span class="linenos">309</span></a> <span class="k">while</span> <span class="n">new</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
-</span><span id="find_new_name-310"><a href="#find_new_name-310"><span class="linenos">310</span></a> <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="find_new_name-311"><a href="#find_new_name-311"><span class="linenos">311</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="find_new_name-312"><a href="#find_new_name-312"><span class="linenos">312</span></a>
-</span><span id="find_new_name-313"><a href="#find_new_name-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="n">new</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="find_new_name-301"><a href="#find_new_name-301"><span class="linenos">301</span></a><span class="k">def</span> <span class="nf">find_new_name</span><span class="p">(</span><span class="n">taken</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="n">base</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="find_new_name-302"><a href="#find_new_name-302"><span class="linenos">302</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="find_new_name-303"><a href="#find_new_name-303"><span class="linenos">303</span></a><span class="sd"> Searches for a new name.</span>
+</span><span id="find_new_name-304"><a href="#find_new_name-304"><span class="linenos">304</span></a>
+</span><span id="find_new_name-305"><a href="#find_new_name-305"><span class="linenos">305</span></a><span class="sd"> Args:</span>
+</span><span id="find_new_name-306"><a href="#find_new_name-306"><span class="linenos">306</span></a><span class="sd"> taken: A collection of taken names.</span>
+</span><span id="find_new_name-307"><a href="#find_new_name-307"><span class="linenos">307</span></a><span class="sd"> base: Base name to alter.</span>
+</span><span id="find_new_name-308"><a href="#find_new_name-308"><span class="linenos">308</span></a>
+</span><span id="find_new_name-309"><a href="#find_new_name-309"><span class="linenos">309</span></a><span class="sd"> Returns:</span>
+</span><span id="find_new_name-310"><a href="#find_new_name-310"><span class="linenos">310</span></a><span class="sd"> The new, available name.</span>
+</span><span id="find_new_name-311"><a href="#find_new_name-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="find_new_name-312"><a href="#find_new_name-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="n">base</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
+</span><span id="find_new_name-313"><a href="#find_new_name-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="n">base</span>
+</span><span id="find_new_name-314"><a href="#find_new_name-314"><span class="linenos">314</span></a>
+</span><span id="find_new_name-315"><a href="#find_new_name-315"><span class="linenos">315</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="find_new_name-316"><a href="#find_new_name-316"><span class="linenos">316</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="find_new_name-317"><a href="#find_new_name-317"><span class="linenos">317</span></a> <span class="k">while</span> <span class="n">new</span> <span class="ow">in</span> <span class="n">taken</span><span class="p">:</span>
+</span><span id="find_new_name-318"><a href="#find_new_name-318"><span class="linenos">318</span></a> <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="find_new_name-319"><a href="#find_new_name-319"><span class="linenos">319</span></a> <span class="n">new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="find_new_name-320"><a href="#find_new_name-320"><span class="linenos">320</span></a>
+</span><span id="find_new_name-321"><a href="#find_new_name-321"><span class="linenos">321</span></a> <span class="k">return</span> <span class="n">new</span>
</span></pre></div>
@@ -1227,10 +1281,10 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#name_sequence"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="name_sequence-316"><a href="#name_sequence-316"><span class="linenos">316</span></a><span class="k">def</span> <span class="nf">name_sequence</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="name_sequence-317"><a href="#name_sequence-317"><span class="linenos">317</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a name generator given a prefix (e.g. a0, a1, a2, ... if the prefix is &quot;a&quot;).&quot;&quot;&quot;</span>
-</span><span id="name_sequence-318"><a href="#name_sequence-318"><span class="linenos">318</span></a> <span class="n">sequence</span> <span class="o">=</span> <span class="n">count</span><span class="p">()</span>
-</span><span id="name_sequence-319"><a href="#name_sequence-319"><span class="linenos">319</span></a> <span class="k">return</span> <span class="k">lambda</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="nb">next</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="name_sequence-324"><a href="#name_sequence-324"><span class="linenos">324</span></a><span class="k">def</span> <span class="nf">name_sequence</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="name_sequence-325"><a href="#name_sequence-325"><span class="linenos">325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a name generator given a prefix (e.g. a0, a1, a2, ... if the prefix is &quot;a&quot;).&quot;&quot;&quot;</span>
+</span><span id="name_sequence-326"><a href="#name_sequence-326"><span class="linenos">326</span></a> <span class="n">sequence</span> <span class="o">=</span> <span class="n">count</span><span class="p">()</span>
+</span><span id="name_sequence-327"><a href="#name_sequence-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="k">lambda</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="nb">next</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1250,12 +1304,12 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#object_to_dict"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="object_to_dict-322"><a href="#object_to_dict-322"><span class="linenos">322</span></a><span class="k">def</span> <span class="nf">object_to_dict</span><span class="p">(</span><span class="n">obj</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="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="object_to_dict-323"><a href="#object_to_dict-323"><span class="linenos">323</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a dictionary created from an object&#39;s attributes.&quot;&quot;&quot;</span>
-</span><span id="object_to_dict-324"><a href="#object_to_dict-324"><span class="linenos">324</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="object_to_dict-325"><a href="#object_to_dict-325"><span class="linenos">325</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="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
-</span><span id="object_to_dict-326"><a href="#object_to_dict-326"><span class="linenos">326</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="object_to_dict-327"><a href="#object_to_dict-327"><span class="linenos">327</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="object_to_dict-330"><a href="#object_to_dict-330"><span class="linenos">330</span></a><span class="k">def</span> <span class="nf">object_to_dict</span><span class="p">(</span><span class="n">obj</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="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="object_to_dict-331"><a href="#object_to_dict-331"><span class="linenos">331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a dictionary created from an object&#39;s attributes.&quot;&quot;&quot;</span>
+</span><span id="object_to_dict-332"><a href="#object_to_dict-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="object_to_dict-333"><a href="#object_to_dict-333"><span class="linenos">333</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="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
+</span><span id="object_to_dict-334"><a href="#object_to_dict-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="object_to_dict-335"><a href="#object_to_dict-335"><span class="linenos">335</span></a> <span class="p">}</span>
</span></pre></div>
@@ -1275,33 +1329,33 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#split_num_words"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="split_num_words-330"><a href="#split_num_words-330"><span class="linenos">330</span></a><span class="k">def</span> <span class="nf">split_num_words</span><span class="p">(</span>
-</span><span id="split_num_words-331"><a href="#split_num_words-331"><span class="linenos">331</span></a> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">min_num_words</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">fill_from_start</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="split_num_words-332"><a href="#split_num_words-332"><span class="linenos">332</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="nb">str</span><span class="p">]]:</span>
-</span><span id="split_num_words-333"><a href="#split_num_words-333"><span class="linenos">333</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="split_num_words-334"><a href="#split_num_words-334"><span class="linenos">334</span></a><span class="sd"> Perform a split on a value and return N words as a result with `None` used for words that don&#39;t exist.</span>
-</span><span id="split_num_words-335"><a href="#split_num_words-335"><span class="linenos">335</span></a>
-</span><span id="split_num_words-336"><a href="#split_num_words-336"><span class="linenos">336</span></a><span class="sd"> Args:</span>
-</span><span id="split_num_words-337"><a href="#split_num_words-337"><span class="linenos">337</span></a><span class="sd"> value: The value to be split.</span>
-</span><span id="split_num_words-338"><a href="#split_num_words-338"><span class="linenos">338</span></a><span class="sd"> sep: The value to use to split on.</span>
-</span><span id="split_num_words-339"><a href="#split_num_words-339"><span class="linenos">339</span></a><span class="sd"> min_num_words: The minimum number of words that are going to be in the result.</span>
-</span><span id="split_num_words-340"><a href="#split_num_words-340"><span class="linenos">340</span></a><span class="sd"> fill_from_start: Indicates that if `None` values should be inserted at the start or end of the list.</span>
-</span><span id="split_num_words-341"><a href="#split_num_words-341"><span class="linenos">341</span></a>
-</span><span id="split_num_words-342"><a href="#split_num_words-342"><span class="linenos">342</span></a><span class="sd"> Examples:</span>
-</span><span id="split_num_words-343"><a href="#split_num_words-343"><span class="linenos">343</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3)</span>
-</span><span id="split_num_words-344"><a href="#split_num_words-344"><span class="linenos">344</span></a><span class="sd"> [None, &#39;db&#39;, &#39;table&#39;]</span>
-</span><span id="split_num_words-345"><a href="#split_num_words-345"><span class="linenos">345</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3, fill_from_start=False)</span>
-</span><span id="split_num_words-346"><a href="#split_num_words-346"><span class="linenos">346</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;, None]</span>
-</span><span id="split_num_words-347"><a href="#split_num_words-347"><span class="linenos">347</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 1)</span>
-</span><span id="split_num_words-348"><a href="#split_num_words-348"><span class="linenos">348</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="split_num_words-338"><a href="#split_num_words-338"><span class="linenos">338</span></a><span class="k">def</span> <span class="nf">split_num_words</span><span class="p">(</span>
+</span><span id="split_num_words-339"><a href="#split_num_words-339"><span class="linenos">339</span></a> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">min_num_words</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">fill_from_start</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="split_num_words-340"><a href="#split_num_words-340"><span class="linenos">340</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="nb">str</span><span class="p">]]:</span>
+</span><span id="split_num_words-341"><a href="#split_num_words-341"><span class="linenos">341</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="split_num_words-342"><a href="#split_num_words-342"><span class="linenos">342</span></a><span class="sd"> Perform a split on a value and return N words as a result with `None` used for words that don&#39;t exist.</span>
+</span><span id="split_num_words-343"><a href="#split_num_words-343"><span class="linenos">343</span></a>
+</span><span id="split_num_words-344"><a href="#split_num_words-344"><span class="linenos">344</span></a><span class="sd"> Args:</span>
+</span><span id="split_num_words-345"><a href="#split_num_words-345"><span class="linenos">345</span></a><span class="sd"> value: The value to be split.</span>
+</span><span id="split_num_words-346"><a href="#split_num_words-346"><span class="linenos">346</span></a><span class="sd"> sep: The value to use to split on.</span>
+</span><span id="split_num_words-347"><a href="#split_num_words-347"><span class="linenos">347</span></a><span class="sd"> min_num_words: The minimum number of words that are going to be in the result.</span>
+</span><span id="split_num_words-348"><a href="#split_num_words-348"><span class="linenos">348</span></a><span class="sd"> fill_from_start: Indicates that if `None` values should be inserted at the start or end of the list.</span>
</span><span id="split_num_words-349"><a href="#split_num_words-349"><span class="linenos">349</span></a>
-</span><span id="split_num_words-350"><a href="#split_num_words-350"><span class="linenos">350</span></a><span class="sd"> Returns:</span>
-</span><span id="split_num_words-351"><a href="#split_num_words-351"><span class="linenos">351</span></a><span class="sd"> The list of words returned by `split`, possibly augmented by a number of `None` values.</span>
-</span><span id="split_num_words-352"><a href="#split_num_words-352"><span class="linenos">352</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="split_num_words-353"><a href="#split_num_words-353"><span class="linenos">353</span></a> <span class="n">words</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
-</span><span id="split_num_words-354"><a href="#split_num_words-354"><span class="linenos">354</span></a> <span class="k">if</span> <span class="n">fill_from_start</span><span class="p">:</span>
-</span><span id="split_num_words-355"><a href="#split_num_words-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span> <span class="o">+</span> <span class="n">words</span>
-</span><span id="split_num_words-356"><a href="#split_num_words-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="n">words</span> <span class="o">+</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span>
+</span><span id="split_num_words-350"><a href="#split_num_words-350"><span class="linenos">350</span></a><span class="sd"> Examples:</span>
+</span><span id="split_num_words-351"><a href="#split_num_words-351"><span class="linenos">351</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3)</span>
+</span><span id="split_num_words-352"><a href="#split_num_words-352"><span class="linenos">352</span></a><span class="sd"> [None, &#39;db&#39;, &#39;table&#39;]</span>
+</span><span id="split_num_words-353"><a href="#split_num_words-353"><span class="linenos">353</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 3, fill_from_start=False)</span>
+</span><span id="split_num_words-354"><a href="#split_num_words-354"><span class="linenos">354</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;, None]</span>
+</span><span id="split_num_words-355"><a href="#split_num_words-355"><span class="linenos">355</span></a><span class="sd"> &gt;&gt;&gt; split_num_words(&quot;db.table&quot;, &quot;.&quot;, 1)</span>
+</span><span id="split_num_words-356"><a href="#split_num_words-356"><span class="linenos">356</span></a><span class="sd"> [&#39;db&#39;, &#39;table&#39;]</span>
+</span><span id="split_num_words-357"><a href="#split_num_words-357"><span class="linenos">357</span></a>
+</span><span id="split_num_words-358"><a href="#split_num_words-358"><span class="linenos">358</span></a><span class="sd"> Returns:</span>
+</span><span id="split_num_words-359"><a href="#split_num_words-359"><span class="linenos">359</span></a><span class="sd"> The list of words returned by `split`, possibly augmented by a number of `None` values.</span>
+</span><span id="split_num_words-360"><a href="#split_num_words-360"><span class="linenos">360</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="split_num_words-361"><a href="#split_num_words-361"><span class="linenos">361</span></a> <span class="n">words</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
+</span><span id="split_num_words-362"><a href="#split_num_words-362"><span class="linenos">362</span></a> <span class="k">if</span> <span class="n">fill_from_start</span><span class="p">:</span>
+</span><span id="split_num_words-363"><a href="#split_num_words-363"><span class="linenos">363</span></a> <span class="k">return</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span> <span class="o">+</span> <span class="n">words</span>
+</span><span id="split_num_words-364"><a href="#split_num_words-364"><span class="linenos">364</span></a> <span class="k">return</span> <span class="n">words</span> <span class="o">+</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">min_num_words</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">))</span>
</span></pre></div>
@@ -1350,23 +1404,23 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#is_iterable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_iterable-359"><a href="#is_iterable-359"><span class="linenos">359</span></a><span class="k">def</span> <span class="nf">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="is_iterable-360"><a href="#is_iterable-360"><span class="linenos">360</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="is_iterable-361"><a href="#is_iterable-361"><span class="linenos">361</span></a><span class="sd"> Checks if the value is an iterable, excluding the types `str` and `bytes`.</span>
-</span><span id="is_iterable-362"><a href="#is_iterable-362"><span class="linenos">362</span></a>
-</span><span id="is_iterable-363"><a href="#is_iterable-363"><span class="linenos">363</span></a><span class="sd"> Examples:</span>
-</span><span id="is_iterable-364"><a href="#is_iterable-364"><span class="linenos">364</span></a><span class="sd"> &gt;&gt;&gt; is_iterable([1,2])</span>
-</span><span id="is_iterable-365"><a href="#is_iterable-365"><span class="linenos">365</span></a><span class="sd"> True</span>
-</span><span id="is_iterable-366"><a href="#is_iterable-366"><span class="linenos">366</span></a><span class="sd"> &gt;&gt;&gt; is_iterable(&quot;test&quot;)</span>
-</span><span id="is_iterable-367"><a href="#is_iterable-367"><span class="linenos">367</span></a><span class="sd"> False</span>
-</span><span id="is_iterable-368"><a href="#is_iterable-368"><span class="linenos">368</span></a>
-</span><span id="is_iterable-369"><a href="#is_iterable-369"><span class="linenos">369</span></a><span class="sd"> Args:</span>
-</span><span id="is_iterable-370"><a href="#is_iterable-370"><span class="linenos">370</span></a><span class="sd"> value: The value to check if it is an iterable.</span>
-</span><span id="is_iterable-371"><a href="#is_iterable-371"><span class="linenos">371</span></a>
-</span><span id="is_iterable-372"><a href="#is_iterable-372"><span class="linenos">372</span></a><span class="sd"> Returns:</span>
-</span><span id="is_iterable-373"><a href="#is_iterable-373"><span class="linenos">373</span></a><span class="sd"> A `bool` value indicating if it is an iterable.</span>
-</span><span id="is_iterable-374"><a href="#is_iterable-374"><span class="linenos">374</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="is_iterable-375"><a href="#is_iterable-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="is_iterable-367"><a href="#is_iterable-367"><span class="linenos">367</span></a><span class="k">def</span> <span class="nf">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="is_iterable-368"><a href="#is_iterable-368"><span class="linenos">368</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="is_iterable-369"><a href="#is_iterable-369"><span class="linenos">369</span></a><span class="sd"> Checks if the value is an iterable, excluding the types `str` and `bytes`.</span>
+</span><span id="is_iterable-370"><a href="#is_iterable-370"><span class="linenos">370</span></a>
+</span><span id="is_iterable-371"><a href="#is_iterable-371"><span class="linenos">371</span></a><span class="sd"> Examples:</span>
+</span><span id="is_iterable-372"><a href="#is_iterable-372"><span class="linenos">372</span></a><span class="sd"> &gt;&gt;&gt; is_iterable([1,2])</span>
+</span><span id="is_iterable-373"><a href="#is_iterable-373"><span class="linenos">373</span></a><span class="sd"> True</span>
+</span><span id="is_iterable-374"><a href="#is_iterable-374"><span class="linenos">374</span></a><span class="sd"> &gt;&gt;&gt; is_iterable(&quot;test&quot;)</span>
+</span><span id="is_iterable-375"><a href="#is_iterable-375"><span class="linenos">375</span></a><span class="sd"> False</span>
+</span><span id="is_iterable-376"><a href="#is_iterable-376"><span class="linenos">376</span></a>
+</span><span id="is_iterable-377"><a href="#is_iterable-377"><span class="linenos">377</span></a><span class="sd"> Args:</span>
+</span><span id="is_iterable-378"><a href="#is_iterable-378"><span class="linenos">378</span></a><span class="sd"> value: The value to check if it is an iterable.</span>
+</span><span id="is_iterable-379"><a href="#is_iterable-379"><span class="linenos">379</span></a>
+</span><span id="is_iterable-380"><a href="#is_iterable-380"><span class="linenos">380</span></a><span class="sd"> Returns:</span>
+</span><span id="is_iterable-381"><a href="#is_iterable-381"><span class="linenos">381</span></a><span class="sd"> A `bool` value indicating if it is an iterable.</span>
+</span><span id="is_iterable-382"><a href="#is_iterable-382"><span class="linenos">382</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="is_iterable-383"><a href="#is_iterable-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">))</span>
</span></pre></div>
@@ -1410,28 +1464,28 @@ of the corresponding enum's identifier (e.g. FOO.value results in "FOO").</p>
</div>
<a class="headerlink" href="#flatten"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="flatten-378"><a href="#flatten-378"><span class="linenos">378</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</span><span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</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">Any</span><span class="p">]</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterator</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="flatten-379"><a href="#flatten-379"><span class="linenos">379</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="flatten-380"><a href="#flatten-380"><span class="linenos">380</span></a><span class="sd"> Flattens an iterable that can contain both iterable and non-iterable elements. Objects of</span>
-</span><span id="flatten-381"><a href="#flatten-381"><span class="linenos">381</span></a><span class="sd"> type `str` and `bytes` are not regarded as iterables.</span>
-</span><span id="flatten-382"><a href="#flatten-382"><span class="linenos">382</span></a>
-</span><span id="flatten-383"><a href="#flatten-383"><span class="linenos">383</span></a><span class="sd"> Examples:</span>
-</span><span id="flatten-384"><a href="#flatten-384"><span class="linenos">384</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([[1, 2], 3, {4}, (5, &quot;bla&quot;)]))</span>
-</span><span id="flatten-385"><a href="#flatten-385"><span class="linenos">385</span></a><span class="sd"> [1, 2, 3, 4, 5, &#39;bla&#39;]</span>
-</span><span id="flatten-386"><a href="#flatten-386"><span class="linenos">386</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([1, 2, 3]))</span>
-</span><span id="flatten-387"><a href="#flatten-387"><span class="linenos">387</span></a><span class="sd"> [1, 2, 3]</span>
-</span><span id="flatten-388"><a href="#flatten-388"><span class="linenos">388</span></a>
-</span><span id="flatten-389"><a href="#flatten-389"><span class="linenos">389</span></a><span class="sd"> Args:</span>
-</span><span id="flatten-390"><a href="#flatten-390"><span class="linenos">390</span></a><span class="sd"> values: The value to be flattened.</span>
-</span><span id="flatten-391"><a href="#flatten-391"><span class="linenos">391</span></a>
-</span><span id="flatten-392"><a href="#flatten-392"><span class="linenos">392</span></a><span class="sd"> Yields:</span>
-</span><span id="flatten-393"><a href="#flatten-393"><span class="linenos">393</span></a><span class="sd"> Non-iterable elements in `values`.</span>
-</span><span id="flatten-394"><a href="#flatten-394"><span class="linenos">394</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="flatten-395"><a href="#flatten-395"><span class="linenos">395</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="flatten-396"><a href="#flatten-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="flatten-397"><a href="#flatten-397"><span class="linenos">397</span></a> <span class="k">yield from</span> <span class="n">flatten</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="flatten-398"><a href="#flatten-398"><span class="linenos">398</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="flatten-399"><a href="#flatten-399"><span class="linenos">399</span></a> <span class="k">yield</span> <span class="n">value</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="flatten-386"><a href="#flatten-386"><span class="linenos">386</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</span><span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</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">Any</span><span class="p">]</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterator</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="flatten-387"><a href="#flatten-387"><span class="linenos">387</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="flatten-388"><a href="#flatten-388"><span class="linenos">388</span></a><span class="sd"> Flattens an iterable that can contain both iterable and non-iterable elements. Objects of</span>
+</span><span id="flatten-389"><a href="#flatten-389"><span class="linenos">389</span></a><span class="sd"> type `str` and `bytes` are not regarded as iterables.</span>
+</span><span id="flatten-390"><a href="#flatten-390"><span class="linenos">390</span></a>
+</span><span id="flatten-391"><a href="#flatten-391"><span class="linenos">391</span></a><span class="sd"> Examples:</span>
+</span><span id="flatten-392"><a href="#flatten-392"><span class="linenos">392</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([[1, 2], 3, {4}, (5, &quot;bla&quot;)]))</span>
+</span><span id="flatten-393"><a href="#flatten-393"><span class="linenos">393</span></a><span class="sd"> [1, 2, 3, 4, 5, &#39;bla&#39;]</span>
+</span><span id="flatten-394"><a href="#flatten-394"><span class="linenos">394</span></a><span class="sd"> &gt;&gt;&gt; list(flatten([1, 2, 3]))</span>
+</span><span id="flatten-395"><a href="#flatten-395"><span class="linenos">395</span></a><span class="sd"> [1, 2, 3]</span>
+</span><span id="flatten-396"><a href="#flatten-396"><span class="linenos">396</span></a>
+</span><span id="flatten-397"><a href="#flatten-397"><span class="linenos">397</span></a><span class="sd"> Args:</span>
+</span><span id="flatten-398"><a href="#flatten-398"><span class="linenos">398</span></a><span class="sd"> values: The value to be flattened.</span>
+</span><span id="flatten-399"><a href="#flatten-399"><span class="linenos">399</span></a>
+</span><span id="flatten-400"><a href="#flatten-400"><span class="linenos">400</span></a><span class="sd"> Yields:</span>
+</span><span id="flatten-401"><a href="#flatten-401"><span class="linenos">401</span></a><span class="sd"> Non-iterable elements in `values`.</span>
+</span><span id="flatten-402"><a href="#flatten-402"><span class="linenos">402</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="flatten-403"><a href="#flatten-403"><span class="linenos">403</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="flatten-404"><a href="#flatten-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">is_iterable</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+</span><span id="flatten-405"><a href="#flatten-405"><span class="linenos">405</span></a> <span class="k">yield from</span> <span class="n">flatten</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="flatten-406"><a href="#flatten-406"><span class="linenos">406</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="flatten-407"><a href="#flatten-407"><span class="linenos">407</span></a> <span class="k">yield</span> <span class="n">value</span>
</span></pre></div>
@@ -1476,30 +1530,30 @@ type <code>str</code> and <code>bytes</code> are not regarded as iterables.</p>
</div>
<a class="headerlink" href="#dict_depth"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="dict_depth-402"><a href="#dict_depth-402"><span class="linenos">402</span></a><span class="k">def</span> <span class="nf">dict_depth</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="dict_depth-403"><a href="#dict_depth-403"><span class="linenos">403</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="dict_depth-404"><a href="#dict_depth-404"><span class="linenos">404</span></a><span class="sd"> Get the nesting depth of a dictionary.</span>
-</span><span id="dict_depth-405"><a href="#dict_depth-405"><span class="linenos">405</span></a>
-</span><span id="dict_depth-406"><a href="#dict_depth-406"><span class="linenos">406</span></a><span class="sd"> Example:</span>
-</span><span id="dict_depth-407"><a href="#dict_depth-407"><span class="linenos">407</span></a><span class="sd"> &gt;&gt;&gt; dict_depth(None)</span>
-</span><span id="dict_depth-408"><a href="#dict_depth-408"><span class="linenos">408</span></a><span class="sd"> 0</span>
-</span><span id="dict_depth-409"><a href="#dict_depth-409"><span class="linenos">409</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({})</span>
-</span><span id="dict_depth-410"><a href="#dict_depth-410"><span class="linenos">410</span></a><span class="sd"> 1</span>
-</span><span id="dict_depth-411"><a href="#dict_depth-411"><span class="linenos">411</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: &quot;b&quot;})</span>
-</span><span id="dict_depth-412"><a href="#dict_depth-412"><span class="linenos">412</span></a><span class="sd"> 1</span>
-</span><span id="dict_depth-413"><a href="#dict_depth-413"><span class="linenos">413</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {}})</span>
-</span><span id="dict_depth-414"><a href="#dict_depth-414"><span class="linenos">414</span></a><span class="sd"> 2</span>
-</span><span id="dict_depth-415"><a href="#dict_depth-415"><span class="linenos">415</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {&quot;b&quot;: {}}})</span>
-</span><span id="dict_depth-416"><a href="#dict_depth-416"><span class="linenos">416</span></a><span class="sd"> 3</span>
-</span><span id="dict_depth-417"><a href="#dict_depth-417"><span class="linenos">417</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="dict_depth-418"><a href="#dict_depth-418"><span class="linenos">418</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="dict_depth-419"><a href="#dict_depth-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">dict_depth</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">values</span><span class="p">())))</span>
-</span><span id="dict_depth-420"><a href="#dict_depth-420"><span class="linenos">420</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
-</span><span id="dict_depth-421"><a href="#dict_depth-421"><span class="linenos">421</span></a> <span class="c1"># d doesn&#39;t have attribute &quot;values&quot;</span>
-</span><span id="dict_depth-422"><a href="#dict_depth-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="mi">0</span>
-</span><span id="dict_depth-423"><a href="#dict_depth-423"><span class="linenos">423</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="dict_depth-424"><a href="#dict_depth-424"><span class="linenos">424</span></a> <span class="c1"># d.values() returns an empty sequence</span>
-</span><span id="dict_depth-425"><a href="#dict_depth-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="mi">1</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="dict_depth-410"><a href="#dict_depth-410"><span class="linenos">410</span></a><span class="k">def</span> <span class="nf">dict_depth</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="dict_depth-411"><a href="#dict_depth-411"><span class="linenos">411</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="dict_depth-412"><a href="#dict_depth-412"><span class="linenos">412</span></a><span class="sd"> Get the nesting depth of a dictionary.</span>
+</span><span id="dict_depth-413"><a href="#dict_depth-413"><span class="linenos">413</span></a>
+</span><span id="dict_depth-414"><a href="#dict_depth-414"><span class="linenos">414</span></a><span class="sd"> Example:</span>
+</span><span id="dict_depth-415"><a href="#dict_depth-415"><span class="linenos">415</span></a><span class="sd"> &gt;&gt;&gt; dict_depth(None)</span>
+</span><span id="dict_depth-416"><a href="#dict_depth-416"><span class="linenos">416</span></a><span class="sd"> 0</span>
+</span><span id="dict_depth-417"><a href="#dict_depth-417"><span class="linenos">417</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({})</span>
+</span><span id="dict_depth-418"><a href="#dict_depth-418"><span class="linenos">418</span></a><span class="sd"> 1</span>
+</span><span id="dict_depth-419"><a href="#dict_depth-419"><span class="linenos">419</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: &quot;b&quot;})</span>
+</span><span id="dict_depth-420"><a href="#dict_depth-420"><span class="linenos">420</span></a><span class="sd"> 1</span>
+</span><span id="dict_depth-421"><a href="#dict_depth-421"><span class="linenos">421</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {}})</span>
+</span><span id="dict_depth-422"><a href="#dict_depth-422"><span class="linenos">422</span></a><span class="sd"> 2</span>
+</span><span id="dict_depth-423"><a href="#dict_depth-423"><span class="linenos">423</span></a><span class="sd"> &gt;&gt;&gt; dict_depth({&quot;a&quot;: {&quot;b&quot;: {}}})</span>
+</span><span id="dict_depth-424"><a href="#dict_depth-424"><span class="linenos">424</span></a><span class="sd"> 3</span>
+</span><span id="dict_depth-425"><a href="#dict_depth-425"><span class="linenos">425</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="dict_depth-426"><a href="#dict_depth-426"><span class="linenos">426</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="dict_depth-427"><a href="#dict_depth-427"><span class="linenos">427</span></a> <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">dict_depth</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">values</span><span class="p">())))</span>
+</span><span id="dict_depth-428"><a href="#dict_depth-428"><span class="linenos">428</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+</span><span id="dict_depth-429"><a href="#dict_depth-429"><span class="linenos">429</span></a> <span class="c1"># d doesn&#39;t have attribute &quot;values&quot;</span>
+</span><span id="dict_depth-430"><a href="#dict_depth-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="mi">0</span>
+</span><span id="dict_depth-431"><a href="#dict_depth-431"><span class="linenos">431</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="dict_depth-432"><a href="#dict_depth-432"><span class="linenos">432</span></a> <span class="c1"># d.values() returns an empty sequence</span>
+</span><span id="dict_depth-433"><a href="#dict_depth-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="mi">1</span>
</span></pre></div>
@@ -1537,9 +1591,9 @@ type <code>str</code> and <code>bytes</code> are not regarded as iterables.</p>
</div>
<a class="headerlink" href="#first"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="first-428"><a href="#first-428"><span class="linenos">428</span></a><span class="k">def</span> <span class="nf">first</span><span class="p">(</span><span class="n">it</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="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
-</span><span id="first-429"><a href="#first-429"><span class="linenos">429</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the first element from an iterable (useful for sets).&quot;&quot;&quot;</span>
-</span><span id="first-430"><a href="#first-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">it</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="first-436"><a href="#first-436"><span class="linenos">436</span></a><span class="k">def</span> <span class="nf">first</span><span class="p">(</span><span class="n">it</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="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
+</span><span id="first-437"><a href="#first-437"><span class="linenos">437</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the first element from an iterable (useful for sets).&quot;&quot;&quot;</span>
+</span><span id="first-438"><a href="#first-438"><span class="linenos">438</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">it</span><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer.html b/docs/sqlglot/optimizer.html
index 39f71ba..1545b40 100644
--- a/docs/sqlglot/optimizer.html
+++ b/docs/sqlglot/optimizer.html
@@ -72,7 +72,14 @@
<label class="view-source-button" for="mod-optimizer-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">sqlglot.optimizer.optimizer</span> <span class="kn">import</span> <span class="n">RULES</span><span class="p">,</span> <span class="n">optimize</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">2</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">build_scope</span><span class="p">,</span> <span class="n">traverse_scope</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">2</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="p">(</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a> <span class="n">Scope</span><span class="p">,</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos">4</span></a> <span class="n">build_scope</span><span class="p">,</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos">5</span></a> <span class="n">find_all_in_scope</span><span class="p">,</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos">6</span></a> <span class="n">find_in_scope</span><span class="p">,</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos">7</span></a> <span class="n">traverse_scope</span><span class="p">,</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos">8</span></a> <span class="n">walk_in_scope</span><span class="p">,</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos">9</span></a><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/annotate_types.html b/docs/sqlglot/optimizer/annotate_types.html
index 027c381..33bff55 100644
--- a/docs/sqlglot/optimizer/annotate_types.html
+++ b/docs/sqlglot/optimizer/annotate_types.html
@@ -46,6 +46,9 @@
<a class="variable" href="#TypeAnnotator.ANNOTATORS">ANNOTATORS</a>
</li>
<li>
+ <a class="variable" href="#TypeAnnotator.NESTED_TYPES">NESTED_TYPES</a>
+ </li>
+ <li>
<a class="variable" href="#TypeAnnotator.COERCES_TO">COERCES_TO</a>
</li>
<li>
@@ -291,192 +294,211 @@
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">for</span> <span class="n">expr_type</span> <span class="ow">in</span> <span class="n">expressions</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">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">),</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">exp</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="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="s2">&quot;ifs&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">Coalesce</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-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="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">copy</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">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="L-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="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-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="fm">__init__</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="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
-</span><span id="L-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">annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">continue</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">values</span> <span class="o">=</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">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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">array</span><span class="o">=</span><span class="kc">True</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">ArrayAgg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">array</span><span class="o">=</span><span class="kc">True</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">ArrayConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">exp</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="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="s2">&quot;ifs&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">Coalesce</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-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="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">copy</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">Distinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="L-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><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">NESTED_TYPES</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="n">exp</span><span 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-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="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-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">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</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="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-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">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">continue</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">selects</span> <span class="o">=</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">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">continue</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">values</span> <span class="o">=</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">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">values</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="p">}</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
-</span><span id="L-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="c1"># First annotate the current scope&#39;s column references</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">continue</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">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">col</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">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
-</span><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="c1"># Then (possibly) annotate the remaining expressions in the scope</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">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-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">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">continue</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">values</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 class="p">}</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="p">}</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="k">continue</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
-</span><span id="L-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">_maybe_annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</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="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">col</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">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="p">(</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="k">if</span> <span class="n">annotator</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-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="k">def</span> <span class="nf">_annotate_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="n">expression</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">type1</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">type2</span> <span class="o">=</span> <span class="n">type2</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="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
+</span><span id="L-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">_maybe_annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</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="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</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">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="L-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="p">(</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">if</span> <span class="n">annotator</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="p">)</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="k">def</span> <span class="nf">_annotate_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="n">expression</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">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">type2</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="n">exp</span><span 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-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">type2</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="L-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">return</span> <span class="n">type2</span> <span class="k">if</span> <span class="n">type2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1</span> <span class="c1"># type: ignore</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="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">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-325"><a href="#L-325"><span class="linenos">325</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-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">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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</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-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</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">build</span><span class="p">(</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;BOOLEAN&quot;</span><span class="p">)</span>
-</span><span id="L-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="k">else</span><span class="p">:</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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-337"><a href="#L-337"><span class="linenos">337</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-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">):</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-350"><a href="#L-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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</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">return</span> <span class="n">expression</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</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-357"><a href="#L-357"><span class="linenos">357</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">VARCHAR</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</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">INT</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">else</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">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">DOUBLE</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">return</span> <span class="n">expression</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span>
-</span><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">_annotate_args</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">arg_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
-</span><span id="L-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">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-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="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><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">if</span> <span class="n">promote</span><span class="p">:</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</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">BIGINT</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</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">DOUBLE</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">type1_value</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type1</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">type2_value</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type2</span>
+</span><span id="L-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="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="n">type1_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="k">return</span> <span class="n">type1</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">return</span> <span class="n">type2</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="k">return</span> <span class="n">type2_value</span> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1_value</span> <span class="c1"># type: ignore</span>
+</span><span id="L-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="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">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-337"><a href="#L-337"><span class="linenos">337</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-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="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-340"><a href="#L-340"><span class="linenos">340</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-341"><a href="#L-341"><span class="linenos">341</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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
+</span><span id="L-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">build</span><span class="p">(</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;BOOLEAN&quot;</span><span class="p">)</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="p">)</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</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-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">else</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="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="n">expression</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">):</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</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-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</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">type</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">return</span> <span class="n">expression</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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">VARCHAR</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</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">INT</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">else</span><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">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">DOUBLE</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">return</span> <span class="n">expression</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">array</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">arg_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
+</span><span id="L-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="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-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">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">promote</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">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</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">BIGINT</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</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">DOUBLE</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">if</span> <span class="n">array</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">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><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="L-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 class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -686,192 +708,211 @@
</span><span id="TypeAnnotator-204"><a href="#TypeAnnotator-204"><span class="linenos">204</span></a> <span class="k">for</span> <span class="n">expr_type</span> <span class="ow">in</span> <span class="n">expressions</span>
</span><span id="TypeAnnotator-205"><a href="#TypeAnnotator-205"><span class="linenos">205</span></a> <span class="p">},</span>
</span><span id="TypeAnnotator-206"><a href="#TypeAnnotator-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">),</span>
-</span><span id="TypeAnnotator-207"><a href="#TypeAnnotator-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
-</span><span id="TypeAnnotator-208"><a href="#TypeAnnotator-208"><span class="linenos">208</span></a> <span class="n">exp</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="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="s2">&quot;ifs&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-209"><a href="#TypeAnnotator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-210"><a href="#TypeAnnotator-210"><span class="linenos">210</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="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
-</span><span id="TypeAnnotator-211"><a href="#TypeAnnotator-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-212"><a href="#TypeAnnotator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
-</span><span id="TypeAnnotator-213"><a href="#TypeAnnotator-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-214"><a href="#TypeAnnotator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="TypeAnnotator-215"><a href="#TypeAnnotator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="TypeAnnotator-216"><a href="#TypeAnnotator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-217"><a href="#TypeAnnotator-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-218"><a href="#TypeAnnotator-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="TypeAnnotator-219"><a href="#TypeAnnotator-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TypeAnnotator-220"><a href="#TypeAnnotator-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
-</span><span id="TypeAnnotator-221"><a href="#TypeAnnotator-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="TypeAnnotator-222"><a href="#TypeAnnotator-222"><span class="linenos">222</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-223"><a href="#TypeAnnotator-223"><span class="linenos">223</span></a>
-</span><span id="TypeAnnotator-224"><a href="#TypeAnnotator-224"><span class="linenos">224</span></a> <span class="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
-</span><span id="TypeAnnotator-225"><a href="#TypeAnnotator-225"><span class="linenos">225</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="TypeAnnotator-226"><a href="#TypeAnnotator-226"><span class="linenos">226</span></a>
-</span><span id="TypeAnnotator-227"><a href="#TypeAnnotator-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="TypeAnnotator-228"><a href="#TypeAnnotator-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TypeAnnotator-229"><a href="#TypeAnnotator-229"><span class="linenos">229</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
-</span><span id="TypeAnnotator-230"><a href="#TypeAnnotator-230"><span class="linenos">230</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator-231"><a href="#TypeAnnotator-231"><span class="linenos">231</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator-232"><a href="#TypeAnnotator-232"><span class="linenos">232</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="TypeAnnotator-233"><a href="#TypeAnnotator-233"><span class="linenos">233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
-</span><span id="TypeAnnotator-234"><a href="#TypeAnnotator-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
-</span><span id="TypeAnnotator-235"><a href="#TypeAnnotator-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
-</span><span id="TypeAnnotator-236"><a href="#TypeAnnotator-236"><span class="linenos">236</span></a>
-</span><span id="TypeAnnotator-237"><a href="#TypeAnnotator-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-238"><a href="#TypeAnnotator-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="TypeAnnotator-239"><a href="#TypeAnnotator-239"><span class="linenos">239</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="TypeAnnotator-240"><a href="#TypeAnnotator-240"><span class="linenos">240</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="TypeAnnotator-241"><a href="#TypeAnnotator-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="TypeAnnotator-242"><a href="#TypeAnnotator-242"><span class="linenos">242</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator-243"><a href="#TypeAnnotator-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="TypeAnnotator-244"><a href="#TypeAnnotator-244"><span class="linenos">244</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="TypeAnnotator-207"><a href="#TypeAnnotator-207"><span class="linenos">207</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">array</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TypeAnnotator-208"><a href="#TypeAnnotator-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">array</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TypeAnnotator-209"><a href="#TypeAnnotator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-210"><a href="#TypeAnnotator-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
+</span><span id="TypeAnnotator-211"><a href="#TypeAnnotator-211"><span class="linenos">211</span></a> <span class="n">exp</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="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="s2">&quot;ifs&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-212"><a href="#TypeAnnotator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-213"><a href="#TypeAnnotator-213"><span class="linenos">213</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="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
+</span><span id="TypeAnnotator-214"><a href="#TypeAnnotator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-215"><a href="#TypeAnnotator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-216"><a href="#TypeAnnotator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-217"><a href="#TypeAnnotator-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
+</span><span id="TypeAnnotator-218"><a href="#TypeAnnotator-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-219"><a href="#TypeAnnotator-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="TypeAnnotator-220"><a href="#TypeAnnotator-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="TypeAnnotator-221"><a href="#TypeAnnotator-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-222"><a href="#TypeAnnotator-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-223"><a href="#TypeAnnotator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="TypeAnnotator-224"><a href="#TypeAnnotator-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TypeAnnotator-225"><a href="#TypeAnnotator-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
+</span><span id="TypeAnnotator-226"><a href="#TypeAnnotator-226"><span class="linenos">226</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="TypeAnnotator-227"><a href="#TypeAnnotator-227"><span class="linenos">227</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-228"><a href="#TypeAnnotator-228"><span class="linenos">228</span></a>
+</span><span id="TypeAnnotator-229"><a href="#TypeAnnotator-229"><span class="linenos">229</span></a> <span class="n">NESTED_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-230"><a href="#TypeAnnotator-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">ARRAY</span><span class="p">,</span>
+</span><span id="TypeAnnotator-231"><a href="#TypeAnnotator-231"><span class="linenos">231</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-232"><a href="#TypeAnnotator-232"><span class="linenos">232</span></a>
+</span><span id="TypeAnnotator-233"><a href="#TypeAnnotator-233"><span class="linenos">233</span></a> <span class="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
+</span><span id="TypeAnnotator-234"><a href="#TypeAnnotator-234"><span class="linenos">234</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="TypeAnnotator-235"><a href="#TypeAnnotator-235"><span class="linenos">235</span></a>
+</span><span id="TypeAnnotator-236"><a href="#TypeAnnotator-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="TypeAnnotator-237"><a href="#TypeAnnotator-237"><span class="linenos">237</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TypeAnnotator-238"><a href="#TypeAnnotator-238"><span class="linenos">238</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
+</span><span id="TypeAnnotator-239"><a href="#TypeAnnotator-239"><span class="linenos">239</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator-240"><a href="#TypeAnnotator-240"><span class="linenos">240</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator-241"><a href="#TypeAnnotator-241"><span class="linenos">241</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="TypeAnnotator-242"><a href="#TypeAnnotator-242"><span class="linenos">242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
+</span><span id="TypeAnnotator-243"><a href="#TypeAnnotator-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
+</span><span id="TypeAnnotator-244"><a href="#TypeAnnotator-244"><span class="linenos">244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
</span><span id="TypeAnnotator-245"><a href="#TypeAnnotator-245"><span class="linenos">245</span></a>
-</span><span id="TypeAnnotator-246"><a href="#TypeAnnotator-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
-</span><span id="TypeAnnotator-247"><a href="#TypeAnnotator-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
-</span><span id="TypeAnnotator-248"><a href="#TypeAnnotator-248"><span class="linenos">248</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
-</span><span id="TypeAnnotator-249"><a href="#TypeAnnotator-249"><span class="linenos">249</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-250"><a href="#TypeAnnotator-250"><span class="linenos">250</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="TypeAnnotator-251"><a href="#TypeAnnotator-251"><span class="linenos">251</span></a>
-</span><span id="TypeAnnotator-252"><a href="#TypeAnnotator-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="TypeAnnotator-253"><a href="#TypeAnnotator-253"><span class="linenos">253</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator-246"><a href="#TypeAnnotator-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-247"><a href="#TypeAnnotator-247"><span class="linenos">247</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="TypeAnnotator-248"><a href="#TypeAnnotator-248"><span class="linenos">248</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="TypeAnnotator-249"><a href="#TypeAnnotator-249"><span class="linenos">249</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="TypeAnnotator-250"><a href="#TypeAnnotator-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="TypeAnnotator-251"><a href="#TypeAnnotator-251"><span class="linenos">251</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator-252"><a href="#TypeAnnotator-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="TypeAnnotator-253"><a href="#TypeAnnotator-253"><span class="linenos">253</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="TypeAnnotator-254"><a href="#TypeAnnotator-254"><span class="linenos">254</span></a>
-</span><span id="TypeAnnotator-255"><a href="#TypeAnnotator-255"><span class="linenos">255</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator-256"><a href="#TypeAnnotator-256"><span class="linenos">256</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
-</span><span id="TypeAnnotator-257"><a href="#TypeAnnotator-257"><span class="linenos">257</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="TypeAnnotator-258"><a href="#TypeAnnotator-258"><span class="linenos">258</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="TypeAnnotator-259"><a href="#TypeAnnotator-259"><span class="linenos">259</span></a> <span class="n">values</span><span class="p">,</span>
-</span><span id="TypeAnnotator-260"><a href="#TypeAnnotator-260"><span class="linenos">260</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-261"><a href="#TypeAnnotator-261"><span class="linenos">261</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-262"><a href="#TypeAnnotator-262"><span class="linenos">262</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-263"><a href="#TypeAnnotator-263"><span class="linenos">263</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator-264"><a href="#TypeAnnotator-264"><span class="linenos">264</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
-</span><span id="TypeAnnotator-265"><a href="#TypeAnnotator-265"><span class="linenos">265</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-266"><a href="#TypeAnnotator-266"><span class="linenos">266</span></a>
-</span><span id="TypeAnnotator-267"><a href="#TypeAnnotator-267"><span class="linenos">267</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
-</span><span id="TypeAnnotator-268"><a href="#TypeAnnotator-268"><span class="linenos">268</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="TypeAnnotator-269"><a href="#TypeAnnotator-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="TypeAnnotator-270"><a href="#TypeAnnotator-270"><span class="linenos">270</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator-271"><a href="#TypeAnnotator-271"><span class="linenos">271</span></a>
-</span><span id="TypeAnnotator-272"><a href="#TypeAnnotator-272"><span class="linenos">272</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
-</span><span id="TypeAnnotator-273"><a href="#TypeAnnotator-273"><span class="linenos">273</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="TypeAnnotator-274"><a href="#TypeAnnotator-274"><span class="linenos">274</span></a> <span class="n">col</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">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
-</span><span id="TypeAnnotator-275"><a href="#TypeAnnotator-275"><span class="linenos">275</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
-</span><span id="TypeAnnotator-276"><a href="#TypeAnnotator-276"><span class="linenos">276</span></a> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
-</span><span id="TypeAnnotator-277"><a href="#TypeAnnotator-277"><span class="linenos">277</span></a>
-</span><span id="TypeAnnotator-278"><a href="#TypeAnnotator-278"><span class="linenos">278</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
-</span><span id="TypeAnnotator-279"><a href="#TypeAnnotator-279"><span class="linenos">279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-255"><a href="#TypeAnnotator-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
+</span><span id="TypeAnnotator-256"><a href="#TypeAnnotator-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
+</span><span id="TypeAnnotator-257"><a href="#TypeAnnotator-257"><span class="linenos">257</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
+</span><span id="TypeAnnotator-258"><a href="#TypeAnnotator-258"><span class="linenos">258</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-259"><a href="#TypeAnnotator-259"><span class="linenos">259</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="TypeAnnotator-260"><a href="#TypeAnnotator-260"><span class="linenos">260</span></a>
+</span><span id="TypeAnnotator-261"><a href="#TypeAnnotator-261"><span class="linenos">261</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="TypeAnnotator-262"><a href="#TypeAnnotator-262"><span class="linenos">262</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator-263"><a href="#TypeAnnotator-263"><span class="linenos">263</span></a>
+</span><span id="TypeAnnotator-264"><a href="#TypeAnnotator-264"><span class="linenos">264</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-265"><a href="#TypeAnnotator-265"><span class="linenos">265</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
+</span><span id="TypeAnnotator-266"><a href="#TypeAnnotator-266"><span class="linenos">266</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="TypeAnnotator-267"><a href="#TypeAnnotator-267"><span class="linenos">267</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="TypeAnnotator-268"><a href="#TypeAnnotator-268"><span class="linenos">268</span></a> <span class="n">values</span><span class="p">,</span>
+</span><span id="TypeAnnotator-269"><a href="#TypeAnnotator-269"><span class="linenos">269</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-270"><a href="#TypeAnnotator-270"><span class="linenos">270</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-271"><a href="#TypeAnnotator-271"><span class="linenos">271</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-272"><a href="#TypeAnnotator-272"><span class="linenos">272</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-273"><a href="#TypeAnnotator-273"><span class="linenos">273</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
+</span><span id="TypeAnnotator-274"><a href="#TypeAnnotator-274"><span class="linenos">274</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-275"><a href="#TypeAnnotator-275"><span class="linenos">275</span></a>
+</span><span id="TypeAnnotator-276"><a href="#TypeAnnotator-276"><span class="linenos">276</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
+</span><span id="TypeAnnotator-277"><a href="#TypeAnnotator-277"><span class="linenos">277</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="TypeAnnotator-278"><a href="#TypeAnnotator-278"><span class="linenos">278</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="TypeAnnotator-279"><a href="#TypeAnnotator-279"><span class="linenos">279</span></a> <span class="k">continue</span>
</span><span id="TypeAnnotator-280"><a href="#TypeAnnotator-280"><span class="linenos">280</span></a>
-</span><span id="TypeAnnotator-281"><a href="#TypeAnnotator-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
-</span><span id="TypeAnnotator-282"><a href="#TypeAnnotator-282"><span class="linenos">282</span></a>
-</span><span id="TypeAnnotator-283"><a href="#TypeAnnotator-283"><span class="linenos">283</span></a> <span class="k">def</span> <span class="nf">_maybe_annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-284"><a href="#TypeAnnotator-284"><span class="linenos">284</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="TypeAnnotator-285"><a href="#TypeAnnotator-285"><span class="linenos">285</span></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</span>
+</span><span id="TypeAnnotator-281"><a href="#TypeAnnotator-281"><span class="linenos">281</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
+</span><span id="TypeAnnotator-282"><a href="#TypeAnnotator-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="TypeAnnotator-283"><a href="#TypeAnnotator-283"><span class="linenos">283</span></a> <span class="n">col</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">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
+</span><span id="TypeAnnotator-284"><a href="#TypeAnnotator-284"><span class="linenos">284</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
+</span><span id="TypeAnnotator-285"><a href="#TypeAnnotator-285"><span class="linenos">285</span></a> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
</span><span id="TypeAnnotator-286"><a href="#TypeAnnotator-286"><span class="linenos">286</span></a>
-</span><span id="TypeAnnotator-287"><a href="#TypeAnnotator-287"><span class="linenos">287</span></a> <span class="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="TypeAnnotator-288"><a href="#TypeAnnotator-288"><span class="linenos">288</span></a>
-</span><span id="TypeAnnotator-289"><a href="#TypeAnnotator-289"><span class="linenos">289</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="TypeAnnotator-290"><a href="#TypeAnnotator-290"><span class="linenos">290</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-291"><a href="#TypeAnnotator-291"><span class="linenos">291</span></a> <span class="k">if</span> <span class="n">annotator</span>
-</span><span id="TypeAnnotator-292"><a href="#TypeAnnotator-292"><span class="linenos">292</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-293"><a href="#TypeAnnotator-293"><span class="linenos">293</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-294"><a href="#TypeAnnotator-294"><span class="linenos">294</span></a>
-</span><span id="TypeAnnotator-295"><a href="#TypeAnnotator-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">_annotate_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-296"><a href="#TypeAnnotator-296"><span class="linenos">296</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
-</span><span id="TypeAnnotator-297"><a href="#TypeAnnotator-297"><span class="linenos">297</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="TypeAnnotator-298"><a href="#TypeAnnotator-298"><span class="linenos">298</span></a>
-</span><span id="TypeAnnotator-299"><a href="#TypeAnnotator-299"><span class="linenos">299</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-300"><a href="#TypeAnnotator-300"><span class="linenos">300</span></a>
-</span><span id="TypeAnnotator-301"><a href="#TypeAnnotator-301"><span class="linenos">301</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
-</span><span id="TypeAnnotator-302"><a href="#TypeAnnotator-302"><span class="linenos">302</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
-</span><span id="TypeAnnotator-303"><a href="#TypeAnnotator-303"><span class="linenos">303</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
-</span><span id="TypeAnnotator-304"><a href="#TypeAnnotator-304"><span class="linenos">304</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
-</span><span id="TypeAnnotator-305"><a href="#TypeAnnotator-305"><span class="linenos">305</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="TypeAnnotator-306"><a href="#TypeAnnotator-306"><span class="linenos">306</span></a> <span class="n">type1</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span>
-</span><span id="TypeAnnotator-307"><a href="#TypeAnnotator-307"><span class="linenos">307</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="TypeAnnotator-308"><a href="#TypeAnnotator-308"><span class="linenos">308</span></a> <span class="n">type2</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TypeAnnotator-287"><a href="#TypeAnnotator-287"><span class="linenos">287</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
+</span><span id="TypeAnnotator-288"><a href="#TypeAnnotator-288"><span class="linenos">288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-289"><a href="#TypeAnnotator-289"><span class="linenos">289</span></a>
+</span><span id="TypeAnnotator-290"><a href="#TypeAnnotator-290"><span class="linenos">290</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
+</span><span id="TypeAnnotator-291"><a href="#TypeAnnotator-291"><span class="linenos">291</span></a>
+</span><span id="TypeAnnotator-292"><a href="#TypeAnnotator-292"><span class="linenos">292</span></a> <span class="k">def</span> <span class="nf">_maybe_annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-293"><a href="#TypeAnnotator-293"><span class="linenos">293</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="TypeAnnotator-294"><a href="#TypeAnnotator-294"><span class="linenos">294</span></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</span>
+</span><span id="TypeAnnotator-295"><a href="#TypeAnnotator-295"><span class="linenos">295</span></a>
+</span><span id="TypeAnnotator-296"><a href="#TypeAnnotator-296"><span class="linenos">296</span></a> <span class="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="TypeAnnotator-297"><a href="#TypeAnnotator-297"><span class="linenos">297</span></a>
+</span><span id="TypeAnnotator-298"><a href="#TypeAnnotator-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="TypeAnnotator-299"><a href="#TypeAnnotator-299"><span class="linenos">299</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-300"><a href="#TypeAnnotator-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="n">annotator</span>
+</span><span id="TypeAnnotator-301"><a href="#TypeAnnotator-301"><span class="linenos">301</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-302"><a href="#TypeAnnotator-302"><span class="linenos">302</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-303"><a href="#TypeAnnotator-303"><span class="linenos">303</span></a>
+</span><span id="TypeAnnotator-304"><a href="#TypeAnnotator-304"><span class="linenos">304</span></a> <span class="k">def</span> <span class="nf">_annotate_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-305"><a href="#TypeAnnotator-305"><span class="linenos">305</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
+</span><span id="TypeAnnotator-306"><a href="#TypeAnnotator-306"><span class="linenos">306</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="TypeAnnotator-307"><a href="#TypeAnnotator-307"><span class="linenos">307</span></a>
+</span><span id="TypeAnnotator-308"><a href="#TypeAnnotator-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="TypeAnnotator-309"><a href="#TypeAnnotator-309"><span class="linenos">309</span></a>
-</span><span id="TypeAnnotator-310"><a href="#TypeAnnotator-310"><span class="linenos">310</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">type2</span><span class="p">):</span>
-</span><span id="TypeAnnotator-311"><a href="#TypeAnnotator-311"><span class="linenos">311</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
-</span><span id="TypeAnnotator-312"><a href="#TypeAnnotator-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">type2</span><span class="p">):</span>
-</span><span id="TypeAnnotator-313"><a href="#TypeAnnotator-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="TypeAnnotator-314"><a href="#TypeAnnotator-314"><span class="linenos">314</span></a>
-</span><span id="TypeAnnotator-315"><a href="#TypeAnnotator-315"><span class="linenos">315</span></a> <span class="k">return</span> <span class="n">type2</span> <span class="k">if</span> <span class="n">type2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1</span> <span class="c1"># type: ignore</span>
-</span><span id="TypeAnnotator-316"><a href="#TypeAnnotator-316"><span class="linenos">316</span></a>
-</span><span id="TypeAnnotator-317"><a href="#TypeAnnotator-317"><span class="linenos">317</span></a> <span class="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
-</span><span id="TypeAnnotator-318"><a href="#TypeAnnotator-318"><span class="linenos">318</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
-</span><span id="TypeAnnotator-319"><a href="#TypeAnnotator-319"><span class="linenos">319</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
-</span><span id="TypeAnnotator-320"><a href="#TypeAnnotator-320"><span class="linenos">320</span></a>
-</span><span id="TypeAnnotator-321"><a href="#TypeAnnotator-321"><span class="linenos">321</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-322"><a href="#TypeAnnotator-322"><span class="linenos">322</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
-</span><span id="TypeAnnotator-323"><a href="#TypeAnnotator-323"><span class="linenos">323</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-324"><a href="#TypeAnnotator-324"><span class="linenos">324</span></a>
-</span><span id="TypeAnnotator-325"><a href="#TypeAnnotator-325"><span class="linenos">325</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-326"><a href="#TypeAnnotator-326"><span class="linenos">326</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-327"><a href="#TypeAnnotator-327"><span class="linenos">327</span></a>
-</span><span id="TypeAnnotator-328"><a href="#TypeAnnotator-328"><span class="linenos">328</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-329"><a href="#TypeAnnotator-329"><span class="linenos">329</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-330"><a href="#TypeAnnotator-330"><span class="linenos">330</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-331"><a href="#TypeAnnotator-331"><span class="linenos">331</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
-</span><span id="TypeAnnotator-332"><a href="#TypeAnnotator-332"><span class="linenos">332</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">build</span><span class="p">(</span>
-</span><span id="TypeAnnotator-333"><a href="#TypeAnnotator-333"><span class="linenos">333</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;BOOLEAN&quot;</span><span class="p">)</span>
-</span><span id="TypeAnnotator-334"><a href="#TypeAnnotator-334"><span class="linenos">334</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-335"><a href="#TypeAnnotator-335"><span class="linenos">335</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-336"><a href="#TypeAnnotator-336"><span class="linenos">336</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-337"><a href="#TypeAnnotator-337"><span class="linenos">337</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-338"><a href="#TypeAnnotator-338"><span class="linenos">338</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">exp</span><span 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-339"><a href="#TypeAnnotator-339"><span class="linenos">339</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-340"><a href="#TypeAnnotator-340"><span class="linenos">340</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-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">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-343"><a href="#TypeAnnotator-343"><span class="linenos">343</span></a>
-</span><span id="TypeAnnotator-344"><a href="#TypeAnnotator-344"><span class="linenos">344</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-345"><a href="#TypeAnnotator-345"><span class="linenos">345</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-346"><a href="#TypeAnnotator-346"><span class="linenos">346</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-347"><a href="#TypeAnnotator-347"><span class="linenos">347</span></a>
-</span><span id="TypeAnnotator-348"><a href="#TypeAnnotator-348"><span class="linenos">348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">):</span>
-</span><span id="TypeAnnotator-349"><a href="#TypeAnnotator-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="TypeAnnotator-350"><a href="#TypeAnnotator-350"><span class="linenos">350</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-351"><a href="#TypeAnnotator-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">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span>
-</span><span id="TypeAnnotator-352"><a href="#TypeAnnotator-352"><span class="linenos">352</span></a>
-</span><span id="TypeAnnotator-353"><a href="#TypeAnnotator-353"><span class="linenos">353</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-354"><a href="#TypeAnnotator-354"><span class="linenos">354</span></a>
-</span><span id="TypeAnnotator-355"><a href="#TypeAnnotator-355"><span class="linenos">355</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-356"><a href="#TypeAnnotator-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
-</span><span id="TypeAnnotator-357"><a href="#TypeAnnotator-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="TypeAnnotator-358"><a href="#TypeAnnotator-358"><span class="linenos">358</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">VARCHAR</span>
-</span><span id="TypeAnnotator-359"><a href="#TypeAnnotator-359"><span class="linenos">359</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="TypeAnnotator-360"><a href="#TypeAnnotator-360"><span class="linenos">360</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">INT</span>
-</span><span id="TypeAnnotator-361"><a href="#TypeAnnotator-361"><span class="linenos">361</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-362"><a href="#TypeAnnotator-362"><span class="linenos">362</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">DOUBLE</span>
-</span><span id="TypeAnnotator-363"><a href="#TypeAnnotator-363"><span class="linenos">363</span></a>
-</span><span id="TypeAnnotator-364"><a href="#TypeAnnotator-364"><span class="linenos">364</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-365"><a href="#TypeAnnotator-365"><span class="linenos">365</span></a>
-</span><span id="TypeAnnotator-366"><a href="#TypeAnnotator-366"><span class="linenos">366</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-367"><a href="#TypeAnnotator-367"><span class="linenos">367</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-368"><a href="#TypeAnnotator-368"><span class="linenos">368</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span>
-</span><span id="TypeAnnotator-369"><a href="#TypeAnnotator-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-370"><a href="#TypeAnnotator-370"><span class="linenos">370</span></a>
-</span><span id="TypeAnnotator-371"><a href="#TypeAnnotator-371"><span class="linenos">371</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-372"><a href="#TypeAnnotator-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-373"><a href="#TypeAnnotator-373"><span class="linenos">373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-374"><a href="#TypeAnnotator-374"><span class="linenos">374</span></a>
-</span><span id="TypeAnnotator-375"><a href="#TypeAnnotator-375"><span class="linenos">375</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="TypeAnnotator-376"><a href="#TypeAnnotator-376"><span class="linenos">376</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="TypeAnnotator-377"><a href="#TypeAnnotator-377"><span class="linenos">377</span></a> <span class="n">arg_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="TypeAnnotator-378"><a href="#TypeAnnotator-378"><span class="linenos">378</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
-</span><span id="TypeAnnotator-379"><a href="#TypeAnnotator-379"><span class="linenos">379</span></a>
-</span><span id="TypeAnnotator-380"><a href="#TypeAnnotator-380"><span class="linenos">380</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TypeAnnotator-381"><a href="#TypeAnnotator-381"><span class="linenos">381</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="TypeAnnotator-382"><a href="#TypeAnnotator-382"><span class="linenos">382</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-383"><a href="#TypeAnnotator-383"><span class="linenos">383</span></a>
-</span><span id="TypeAnnotator-384"><a href="#TypeAnnotator-384"><span class="linenos">384</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="TypeAnnotator-385"><a href="#TypeAnnotator-385"><span class="linenos">385</span></a>
-</span><span id="TypeAnnotator-386"><a href="#TypeAnnotator-386"><span class="linenos">386</span></a> <span class="k">if</span> <span class="n">promote</span><span class="p">:</span>
-</span><span id="TypeAnnotator-387"><a href="#TypeAnnotator-387"><span class="linenos">387</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-388"><a href="#TypeAnnotator-388"><span class="linenos">388</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">BIGINT</span>
-</span><span id="TypeAnnotator-389"><a href="#TypeAnnotator-389"><span class="linenos">389</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-390"><a href="#TypeAnnotator-390"><span class="linenos">390</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">DOUBLE</span>
-</span><span id="TypeAnnotator-391"><a href="#TypeAnnotator-391"><span class="linenos">391</span></a>
-</span><span id="TypeAnnotator-392"><a href="#TypeAnnotator-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-310"><a href="#TypeAnnotator-310"><span class="linenos">310</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
+</span><span id="TypeAnnotator-311"><a href="#TypeAnnotator-311"><span class="linenos">311</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
+</span><span id="TypeAnnotator-312"><a href="#TypeAnnotator-312"><span class="linenos">312</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
+</span><span id="TypeAnnotator-313"><a href="#TypeAnnotator-313"><span class="linenos">313</span></a> <span class="n">type1_value</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type1</span>
+</span><span id="TypeAnnotator-314"><a href="#TypeAnnotator-314"><span class="linenos">314</span></a> <span class="n">type2_value</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type2</span>
+</span><span id="TypeAnnotator-315"><a href="#TypeAnnotator-315"><span class="linenos">315</span></a>
+</span><span id="TypeAnnotator-316"><a href="#TypeAnnotator-316"><span class="linenos">316</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
+</span><span id="TypeAnnotator-317"><a href="#TypeAnnotator-317"><span class="linenos">317</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="TypeAnnotator-318"><a href="#TypeAnnotator-318"><span class="linenos">318</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
+</span><span id="TypeAnnotator-319"><a href="#TypeAnnotator-319"><span class="linenos">319</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="TypeAnnotator-320"><a href="#TypeAnnotator-320"><span class="linenos">320</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="TypeAnnotator-321"><a href="#TypeAnnotator-321"><span class="linenos">321</span></a>
+</span><span id="TypeAnnotator-322"><a href="#TypeAnnotator-322"><span class="linenos">322</span></a> <span class="k">if</span> <span class="n">type1_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-323"><a href="#TypeAnnotator-323"><span class="linenos">323</span></a> <span class="k">return</span> <span class="n">type1</span>
+</span><span id="TypeAnnotator-324"><a href="#TypeAnnotator-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-325"><a href="#TypeAnnotator-325"><span class="linenos">325</span></a> <span class="k">return</span> <span class="n">type2</span>
+</span><span id="TypeAnnotator-326"><a href="#TypeAnnotator-326"><span class="linenos">326</span></a>
+</span><span id="TypeAnnotator-327"><a href="#TypeAnnotator-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="n">type2_value</span> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1_value</span> <span class="c1"># type: ignore</span>
+</span><span id="TypeAnnotator-328"><a href="#TypeAnnotator-328"><span class="linenos">328</span></a>
+</span><span id="TypeAnnotator-329"><a href="#TypeAnnotator-329"><span class="linenos">329</span></a> <span class="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
+</span><span id="TypeAnnotator-330"><a href="#TypeAnnotator-330"><span class="linenos">330</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
+</span><span id="TypeAnnotator-331"><a href="#TypeAnnotator-331"><span class="linenos">331</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
+</span><span id="TypeAnnotator-332"><a href="#TypeAnnotator-332"><span class="linenos">332</span></a>
+</span><span id="TypeAnnotator-333"><a href="#TypeAnnotator-333"><span class="linenos">333</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-334"><a href="#TypeAnnotator-334"><span class="linenos">334</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
+</span><span id="TypeAnnotator-335"><a href="#TypeAnnotator-335"><span class="linenos">335</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-336"><a href="#TypeAnnotator-336"><span class="linenos">336</span></a>
+</span><span id="TypeAnnotator-337"><a href="#TypeAnnotator-337"><span class="linenos">337</span></a> <span class="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-338"><a href="#TypeAnnotator-338"><span class="linenos">338</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-339"><a href="#TypeAnnotator-339"><span class="linenos">339</span></a>
+</span><span id="TypeAnnotator-340"><a href="#TypeAnnotator-340"><span class="linenos">340</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-341"><a href="#TypeAnnotator-341"><span class="linenos">341</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-342"><a href="#TypeAnnotator-342"><span class="linenos">342</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-343"><a href="#TypeAnnotator-343"><span class="linenos">343</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
+</span><span id="TypeAnnotator-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">build</span><span class="p">(</span>
+</span><span id="TypeAnnotator-345"><a href="#TypeAnnotator-345"><span class="linenos">345</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;BOOLEAN&quot;</span><span class="p">)</span>
+</span><span id="TypeAnnotator-346"><a href="#TypeAnnotator-346"><span class="linenos">346</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-347"><a href="#TypeAnnotator-347"><span class="linenos">347</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-348"><a href="#TypeAnnotator-348"><span class="linenos">348</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-349"><a href="#TypeAnnotator-349"><span class="linenos">349</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-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">else</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="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-353"><a href="#TypeAnnotator-353"><span class="linenos">353</span></a>
+</span><span id="TypeAnnotator-354"><a href="#TypeAnnotator-354"><span class="linenos">354</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-355"><a href="#TypeAnnotator-355"><span class="linenos">355</span></a>
+</span><span id="TypeAnnotator-356"><a href="#TypeAnnotator-356"><span class="linenos">356</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-357"><a href="#TypeAnnotator-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-358"><a href="#TypeAnnotator-358"><span class="linenos">358</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-359"><a href="#TypeAnnotator-359"><span class="linenos">359</span></a>
+</span><span id="TypeAnnotator-360"><a href="#TypeAnnotator-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">):</span>
+</span><span id="TypeAnnotator-361"><a href="#TypeAnnotator-361"><span class="linenos">361</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-362"><a href="#TypeAnnotator-362"><span class="linenos">362</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-363"><a href="#TypeAnnotator-363"><span class="linenos">363</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</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">type</span>
+</span><span id="TypeAnnotator-364"><a href="#TypeAnnotator-364"><span class="linenos">364</span></a>
+</span><span id="TypeAnnotator-365"><a href="#TypeAnnotator-365"><span class="linenos">365</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-366"><a href="#TypeAnnotator-366"><span class="linenos">366</span></a>
+</span><span id="TypeAnnotator-367"><a href="#TypeAnnotator-367"><span class="linenos">367</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-368"><a href="#TypeAnnotator-368"><span class="linenos">368</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
+</span><span id="TypeAnnotator-369"><a href="#TypeAnnotator-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="TypeAnnotator-370"><a href="#TypeAnnotator-370"><span class="linenos">370</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">VARCHAR</span>
+</span><span id="TypeAnnotator-371"><a href="#TypeAnnotator-371"><span class="linenos">371</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="TypeAnnotator-372"><a href="#TypeAnnotator-372"><span class="linenos">372</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">INT</span>
+</span><span id="TypeAnnotator-373"><a href="#TypeAnnotator-373"><span class="linenos">373</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-374"><a href="#TypeAnnotator-374"><span class="linenos">374</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">DOUBLE</span>
+</span><span id="TypeAnnotator-375"><a href="#TypeAnnotator-375"><span class="linenos">375</span></a>
+</span><span id="TypeAnnotator-376"><a href="#TypeAnnotator-376"><span class="linenos">376</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-377"><a href="#TypeAnnotator-377"><span class="linenos">377</span></a>
+</span><span id="TypeAnnotator-378"><a href="#TypeAnnotator-378"><span class="linenos">378</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-379"><a href="#TypeAnnotator-379"><span class="linenos">379</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-380"><a href="#TypeAnnotator-380"><span class="linenos">380</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span>
+</span><span id="TypeAnnotator-381"><a href="#TypeAnnotator-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-382"><a href="#TypeAnnotator-382"><span class="linenos">382</span></a>
+</span><span id="TypeAnnotator-383"><a href="#TypeAnnotator-383"><span class="linenos">383</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-384"><a href="#TypeAnnotator-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span>
+</span><span id="TypeAnnotator-385"><a href="#TypeAnnotator-385"><span class="linenos">385</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">array</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TypeAnnotator-386"><a href="#TypeAnnotator-386"><span class="linenos">386</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-387"><a href="#TypeAnnotator-387"><span class="linenos">387</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-388"><a href="#TypeAnnotator-388"><span class="linenos">388</span></a>
+</span><span id="TypeAnnotator-389"><a href="#TypeAnnotator-389"><span class="linenos">389</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="TypeAnnotator-390"><a href="#TypeAnnotator-390"><span class="linenos">390</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="TypeAnnotator-391"><a href="#TypeAnnotator-391"><span class="linenos">391</span></a> <span class="n">arg_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="TypeAnnotator-392"><a href="#TypeAnnotator-392"><span class="linenos">392</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
+</span><span id="TypeAnnotator-393"><a href="#TypeAnnotator-393"><span class="linenos">393</span></a>
+</span><span id="TypeAnnotator-394"><a href="#TypeAnnotator-394"><span class="linenos">394</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TypeAnnotator-395"><a href="#TypeAnnotator-395"><span class="linenos">395</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="TypeAnnotator-396"><a href="#TypeAnnotator-396"><span class="linenos">396</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-397"><a href="#TypeAnnotator-397"><span class="linenos">397</span></a>
+</span><span id="TypeAnnotator-398"><a href="#TypeAnnotator-398"><span class="linenos">398</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="TypeAnnotator-399"><a href="#TypeAnnotator-399"><span class="linenos">399</span></a>
+</span><span id="TypeAnnotator-400"><a href="#TypeAnnotator-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="n">promote</span><span class="p">:</span>
+</span><span id="TypeAnnotator-401"><a href="#TypeAnnotator-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-402"><a href="#TypeAnnotator-402"><span class="linenos">402</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">BIGINT</span>
+</span><span id="TypeAnnotator-403"><a href="#TypeAnnotator-403"><span class="linenos">403</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-404"><a href="#TypeAnnotator-404"><span class="linenos">404</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">DOUBLE</span>
+</span><span id="TypeAnnotator-405"><a href="#TypeAnnotator-405"><span class="linenos">405</span></a>
+</span><span id="TypeAnnotator-406"><a href="#TypeAnnotator-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="n">array</span><span class="p">:</span>
+</span><span id="TypeAnnotator-407"><a href="#TypeAnnotator-407"><span class="linenos">407</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="p">(</span>
+</span><span id="TypeAnnotator-408"><a href="#TypeAnnotator-408"><span class="linenos">408</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="TypeAnnotator-409"><a href="#TypeAnnotator-409"><span class="linenos">409</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-410"><a href="#TypeAnnotator-410"><span class="linenos">410</span></a>
+</span><span id="TypeAnnotator-411"><a href="#TypeAnnotator-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -887,15 +928,15 @@
</div>
<a class="headerlink" href="#TypeAnnotator.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.__init__-227"><a href="#TypeAnnotator.__init__-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="TypeAnnotator.__init__-228"><a href="#TypeAnnotator.__init__-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-229"><a href="#TypeAnnotator.__init__-229"><span class="linenos">229</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-230"><a href="#TypeAnnotator.__init__-230"><span class="linenos">230</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-231"><a href="#TypeAnnotator.__init__-231"><span class="linenos">231</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-232"><a href="#TypeAnnotator.__init__-232"><span class="linenos">232</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="TypeAnnotator.__init__-233"><a href="#TypeAnnotator.__init__-233"><span class="linenos">233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
-</span><span id="TypeAnnotator.__init__-234"><a href="#TypeAnnotator.__init__-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
-</span><span id="TypeAnnotator.__init__-235"><a href="#TypeAnnotator.__init__-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.__init__-236"><a href="#TypeAnnotator.__init__-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="TypeAnnotator.__init__-237"><a href="#TypeAnnotator.__init__-237"><span class="linenos">237</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-238"><a href="#TypeAnnotator.__init__-238"><span class="linenos">238</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-239"><a href="#TypeAnnotator.__init__-239"><span class="linenos">239</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-240"><a href="#TypeAnnotator.__init__-240"><span class="linenos">240</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-241"><a href="#TypeAnnotator.__init__-241"><span class="linenos">241</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="TypeAnnotator.__init__-242"><a href="#TypeAnnotator.__init__-242"><span class="linenos">242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
+</span><span id="TypeAnnotator.__init__-243"><a href="#TypeAnnotator.__init__-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
+</span><span id="TypeAnnotator.__init__-244"><a href="#TypeAnnotator.__init__-244"><span class="linenos">244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
</span></pre></div>
@@ -906,7 +947,7 @@
<div class="attr variable">
<span class="name">TYPE_TO_EXPRESSIONS</span><span class="annotation">: Dict[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>, Set[Type[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>]]]</span> =
<input id="TypeAnnotator.TYPE_TO_EXPRESSIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.TYPE_TO_EXPRESSIONS-view-value"></label><span class="default_value">{&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;}, &lt;Type.BOOLEAN: &#39;BOOLEAN&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;}}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.TYPE_TO_EXPRESSIONS-view-value"></label><span class="default_value">{&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;}, &lt;Type.BOOLEAN: &#39;BOOLEAN&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;}}</span>
</div>
@@ -919,7 +960,7 @@
<div class="attr variable">
<span class="name">ANNOTATORS</span><span class="annotation">: Dict</span> =
<input id="TypeAnnotator.ANNOTATORS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.ANNOTATORS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Neg">sqlglot.expressions.Neg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Not">sqlglot.expressions.Not</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Paren">sqlglot.expressions.Paren</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Unary">sqlglot.expressions.Unary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Binary">sqlglot.expressions.Binary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Connector">sqlglot.expressions.Connector</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Dot">sqlglot.expressions.Dot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Escape">sqlglot.expressions.Escape</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Glob">sqlglot.expressions.Glob</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILikeAny">sqlglot.expressions.ILikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Kwarg">sqlglot.expressions.Kwarg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Like">sqlglot.expressions.Like</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LikeAny">sqlglot.expressions.LikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Overlaps">sqlglot.expressions.Overlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDPipe">sqlglot.expressions.SafeDPipe</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SimilarTo">sqlglot.expressions.SimilarTo</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Anonymous">sqlglot.expressions.Anonymous</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Interval">sqlglot.expressions.Interval</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Literal">sqlglot.expressions.Literal</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.ANNOTATORS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Neg">sqlglot.expressions.Neg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Not">sqlglot.expressions.Not</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Paren">sqlglot.expressions.Paren</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Unary">sqlglot.expressions.Unary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Binary">sqlglot.expressions.Binary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Connector">sqlglot.expressions.Connector</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Dot">sqlglot.expressions.Dot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Escape">sqlglot.expressions.Escape</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Glob">sqlglot.expressions.Glob</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILikeAny">sqlglot.expressions.ILikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Kwarg">sqlglot.expressions.Kwarg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Like">sqlglot.expressions.Like</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LikeAny">sqlglot.expressions.LikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Overlaps">sqlglot.expressions.Overlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDPipe">sqlglot.expressions.SafeDPipe</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SimilarTo">sqlglot.expressions.SimilarTo</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Anonymous">sqlglot.expressions.Anonymous</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distinct">sqlglot.expressions.Distinct</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Filter">sqlglot.expressions.Filter</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Interval">sqlglot.expressions.Interval</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Literal">sqlglot.expressions.Literal</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;}</span>
</div>
@@ -928,11 +969,23 @@
</div>
+ <div id="TypeAnnotator.NESTED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">NESTED_TYPES</span> =
+<span class="default_value">{&lt;Type.ARRAY: &#39;ARRAY&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#TypeAnnotator.NESTED_TYPES"></a>
+
+
+
+ </div>
<div id="TypeAnnotator.COERCES_TO" class="classattr">
<div class="attr variable">
<span class="name">COERCES_TO</span><span class="annotation">: Dict[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>, Set[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>]]</span> =
<input id="TypeAnnotator.COERCES_TO-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.COERCES_TO-view-value"></label><span class="default_value">{&lt;Type.TEXT: &#39;TEXT&#39;&gt;: set(), &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: {&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.CHAR: &#39;CHAR&#39;&gt;: {&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: set(), &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;: {&lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;: set(), &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.COERCES_TO-view-value"></label><span class="default_value">{&lt;Type.TEXT: &#39;TEXT&#39;&gt;: set(), &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.CHAR: &#39;CHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: set(), &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;: {&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;: set(), &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;}}</span>
</div>
@@ -985,51 +1038,51 @@
</div>
<a class="headerlink" href="#TypeAnnotator.annotate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.annotate-237"><a href="#TypeAnnotator.annotate-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-238"><a href="#TypeAnnotator.annotate-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-239"><a href="#TypeAnnotator.annotate-239"><span class="linenos">239</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="TypeAnnotator.annotate-240"><a href="#TypeAnnotator.annotate-240"><span class="linenos">240</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="TypeAnnotator.annotate-241"><a href="#TypeAnnotator.annotate-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-242"><a href="#TypeAnnotator.annotate-242"><span class="linenos">242</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator.annotate-243"><a href="#TypeAnnotator.annotate-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-244"><a href="#TypeAnnotator.annotate-244"><span class="linenos">244</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="TypeAnnotator.annotate-245"><a href="#TypeAnnotator.annotate-245"><span class="linenos">245</span></a>
-</span><span id="TypeAnnotator.annotate-246"><a href="#TypeAnnotator.annotate-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-247"><a href="#TypeAnnotator.annotate-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-248"><a href="#TypeAnnotator.annotate-248"><span class="linenos">248</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
-</span><span id="TypeAnnotator.annotate-249"><a href="#TypeAnnotator.annotate-249"><span class="linenos">249</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-250"><a href="#TypeAnnotator.annotate-250"><span class="linenos">250</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="TypeAnnotator.annotate-251"><a href="#TypeAnnotator.annotate-251"><span class="linenos">251</span></a>
-</span><span id="TypeAnnotator.annotate-252"><a href="#TypeAnnotator.annotate-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-253"><a href="#TypeAnnotator.annotate-253"><span class="linenos">253</span></a> <span class="k">continue</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.annotate-246"><a href="#TypeAnnotator.annotate-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">annotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-247"><a href="#TypeAnnotator.annotate-247"><span class="linenos">247</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-248"><a href="#TypeAnnotator.annotate-248"><span class="linenos">248</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="TypeAnnotator.annotate-249"><a href="#TypeAnnotator.annotate-249"><span class="linenos">249</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="TypeAnnotator.annotate-250"><a href="#TypeAnnotator.annotate-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-251"><a href="#TypeAnnotator.annotate-251"><span class="linenos">251</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator.annotate-252"><a href="#TypeAnnotator.annotate-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-253"><a href="#TypeAnnotator.annotate-253"><span class="linenos">253</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="TypeAnnotator.annotate-254"><a href="#TypeAnnotator.annotate-254"><span class="linenos">254</span></a>
-</span><span id="TypeAnnotator.annotate-255"><a href="#TypeAnnotator.annotate-255"><span class="linenos">255</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator.annotate-256"><a href="#TypeAnnotator.annotate-256"><span class="linenos">256</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
-</span><span id="TypeAnnotator.annotate-257"><a href="#TypeAnnotator.annotate-257"><span class="linenos">257</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="TypeAnnotator.annotate-258"><a href="#TypeAnnotator.annotate-258"><span class="linenos">258</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="TypeAnnotator.annotate-259"><a href="#TypeAnnotator.annotate-259"><span class="linenos">259</span></a> <span class="n">values</span><span class="p">,</span>
-</span><span id="TypeAnnotator.annotate-260"><a href="#TypeAnnotator.annotate-260"><span class="linenos">260</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-261"><a href="#TypeAnnotator.annotate-261"><span class="linenos">261</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator.annotate-262"><a href="#TypeAnnotator.annotate-262"><span class="linenos">262</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-263"><a href="#TypeAnnotator.annotate-263"><span class="linenos">263</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator.annotate-264"><a href="#TypeAnnotator.annotate-264"><span class="linenos">264</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
-</span><span id="TypeAnnotator.annotate-265"><a href="#TypeAnnotator.annotate-265"><span class="linenos">265</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator.annotate-266"><a href="#TypeAnnotator.annotate-266"><span class="linenos">266</span></a>
-</span><span id="TypeAnnotator.annotate-267"><a href="#TypeAnnotator.annotate-267"><span class="linenos">267</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
-</span><span id="TypeAnnotator.annotate-268"><a href="#TypeAnnotator.annotate-268"><span class="linenos">268</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-269"><a href="#TypeAnnotator.annotate-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-270"><a href="#TypeAnnotator.annotate-270"><span class="linenos">270</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator.annotate-271"><a href="#TypeAnnotator.annotate-271"><span class="linenos">271</span></a>
-</span><span id="TypeAnnotator.annotate-272"><a href="#TypeAnnotator.annotate-272"><span class="linenos">272</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-273"><a href="#TypeAnnotator.annotate-273"><span class="linenos">273</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-274"><a href="#TypeAnnotator.annotate-274"><span class="linenos">274</span></a> <span class="n">col</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">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-275"><a href="#TypeAnnotator.annotate-275"><span class="linenos">275</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
-</span><span id="TypeAnnotator.annotate-276"><a href="#TypeAnnotator.annotate-276"><span class="linenos">276</span></a> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
-</span><span id="TypeAnnotator.annotate-277"><a href="#TypeAnnotator.annotate-277"><span class="linenos">277</span></a>
-</span><span id="TypeAnnotator.annotate-278"><a href="#TypeAnnotator.annotate-278"><span class="linenos">278</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
-</span><span id="TypeAnnotator.annotate-279"><a href="#TypeAnnotator.annotate-279"><span class="linenos">279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-255"><a href="#TypeAnnotator.annotate-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-256"><a href="#TypeAnnotator.annotate-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-257"><a href="#TypeAnnotator.annotate-257"><span class="linenos">257</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
+</span><span id="TypeAnnotator.annotate-258"><a href="#TypeAnnotator.annotate-258"><span class="linenos">258</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-259"><a href="#TypeAnnotator.annotate-259"><span class="linenos">259</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="TypeAnnotator.annotate-260"><a href="#TypeAnnotator.annotate-260"><span class="linenos">260</span></a>
+</span><span id="TypeAnnotator.annotate-261"><a href="#TypeAnnotator.annotate-261"><span class="linenos">261</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-262"><a href="#TypeAnnotator.annotate-262"><span class="linenos">262</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator.annotate-263"><a href="#TypeAnnotator.annotate-263"><span class="linenos">263</span></a>
+</span><span id="TypeAnnotator.annotate-264"><a href="#TypeAnnotator.annotate-264"><span class="linenos">264</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator.annotate-265"><a href="#TypeAnnotator.annotate-265"><span class="linenos">265</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
+</span><span id="TypeAnnotator.annotate-266"><a href="#TypeAnnotator.annotate-266"><span class="linenos">266</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="TypeAnnotator.annotate-267"><a href="#TypeAnnotator.annotate-267"><span class="linenos">267</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="TypeAnnotator.annotate-268"><a href="#TypeAnnotator.annotate-268"><span class="linenos">268</span></a> <span class="n">values</span><span class="p">,</span>
+</span><span id="TypeAnnotator.annotate-269"><a href="#TypeAnnotator.annotate-269"><span class="linenos">269</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-270"><a href="#TypeAnnotator.annotate-270"><span class="linenos">270</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator.annotate-271"><a href="#TypeAnnotator.annotate-271"><span class="linenos">271</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-272"><a href="#TypeAnnotator.annotate-272"><span class="linenos">272</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator.annotate-273"><a href="#TypeAnnotator.annotate-273"><span class="linenos">273</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
+</span><span id="TypeAnnotator.annotate-274"><a href="#TypeAnnotator.annotate-274"><span class="linenos">274</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator.annotate-275"><a href="#TypeAnnotator.annotate-275"><span class="linenos">275</span></a>
+</span><span id="TypeAnnotator.annotate-276"><a href="#TypeAnnotator.annotate-276"><span class="linenos">276</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
+</span><span id="TypeAnnotator.annotate-277"><a href="#TypeAnnotator.annotate-277"><span class="linenos">277</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-278"><a href="#TypeAnnotator.annotate-278"><span class="linenos">278</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-279"><a href="#TypeAnnotator.annotate-279"><span class="linenos">279</span></a> <span class="k">continue</span>
</span><span id="TypeAnnotator.annotate-280"><a href="#TypeAnnotator.annotate-280"><span class="linenos">280</span></a>
-</span><span id="TypeAnnotator.annotate-281"><a href="#TypeAnnotator.annotate-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
+</span><span id="TypeAnnotator.annotate-281"><a href="#TypeAnnotator.annotate-281"><span class="linenos">281</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-282"><a href="#TypeAnnotator.annotate-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-283"><a href="#TypeAnnotator.annotate-283"><span class="linenos">283</span></a> <span class="n">col</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">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-284"><a href="#TypeAnnotator.annotate-284"><span class="linenos">284</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
+</span><span id="TypeAnnotator.annotate-285"><a href="#TypeAnnotator.annotate-285"><span class="linenos">285</span></a> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
+</span><span id="TypeAnnotator.annotate-286"><a href="#TypeAnnotator.annotate-286"><span class="linenos">286</span></a>
+</span><span id="TypeAnnotator.annotate-287"><a href="#TypeAnnotator.annotate-287"><span class="linenos">287</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
+</span><span id="TypeAnnotator.annotate-288"><a href="#TypeAnnotator.annotate-288"><span class="linenos">288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-289"><a href="#TypeAnnotator.annotate-289"><span class="linenos">289</span></a>
+</span><span id="TypeAnnotator.annotate-290"><a href="#TypeAnnotator.annotate-290"><span class="linenos">290</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/eliminate_subqueries.html b/docs/sqlglot/optimizer/eliminate_subqueries.html
index ede02fe..782b0fb 100644
--- a/docs/sqlglot/optimizer/eliminate_subqueries.html
+++ b/docs/sqlglot/optimizer/eliminate_subqueries.html
@@ -200,65 +200,66 @@
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">pivots</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">):</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="kc">None</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">parent</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">parent</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">name</span><span class="p">,</span> <span class="n">cte</span> <span class="o">=</span> <span class="n">_new_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</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="n">table</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">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">alias</span><span class="o">=</span><span class="n">parent</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-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">parent</span><span class="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><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="c1"># Get rid of redundant exp.Subquery expressions, i.e. those that are just used as wrappers</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">to_replace</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">parent</span><span class="o">.</span><span class="n">unwrap</span><span class="p">()</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">name</span><span class="p">,</span> <span class="n">cte</span> <span class="o">=</span> <span class="n">_new_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</span><span class="p">)</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">table</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">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">alias</span><span class="o">=</span><span class="n">to_replace</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-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">to_replace</span><span class="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><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</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="k">return</span> <span class="n">cte</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">replace</span><span class="p">(</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><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">cte</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">_eliminate_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</span><span class="p">):</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">parent</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">parent</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">name</span><span class="p">,</span> <span class="n">cte</span> <span class="o">=</span> <span class="n">_new_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</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="n">with_</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">with_</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="c1"># Rename references to this CTE</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">for</span> <span class="n">child_scope</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">traverse</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">table</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">selected_sources</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="k">if</span> <span class="n">source</span> <span class="ow">is</span> <span class="n">scope</span><span class="p">:</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">new_table</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">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">alias</span><span class="o">=</span><span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</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-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new_table</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">return</span> <span class="n">cte</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
+</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">_eliminate_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</span><span class="p">):</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">parent</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">parent</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">name</span><span class="p">,</span> <span class="n">cte</span> <span class="o">=</span> <span class="n">_new_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</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="n">with_</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">with_</span><span class="o">.</span><span class="n">pop</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="c1"># Rename references to this CTE</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">for</span> <span class="n">child_scope</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">traverse</span><span class="p">():</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">selected_sources</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 class="k">if</span> <span class="n">source</span> <span class="ow">is</span> <span class="n">scope</span><span class="p">:</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">new_table</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">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">alias</span><span class="o">=</span><span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new_table</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">return</span> <span class="n">cte</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">_new_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</span><span class="p">):</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="sd"> Returns:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a><span class="sd"> tuple of (name, cte)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="sd"> where `name` is a new name for this CTE in the root scope and `cte` is a new CTE instance.</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="sd"> If this CTE duplicates an existing CTE, `cte` will be None.</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">duplicate_cte_alias</span> <span class="o">=</span> <span class="n">existing_ctes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">parent</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">parent</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">alias</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">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="o">=</span><span class="n">taken</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="s2">&quot;cte&quot;</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">duplicate_cte_alias</span><span class="p">:</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">duplicate_cte_alias</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">elif</span> <span class="n">taken</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-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="o">=</span><span class="n">taken</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="n">name</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">taken</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">scope</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">if</span> <span class="ow">not</span> <span class="n">duplicate_cte_alias</span><span class="p">:</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">existing_ctes</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="o">=</span> <span class="n">name</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">(</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">this</span><span class="o">=</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">)),</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="p">)</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">return</span> <span class="n">name</span><span class="p">,</span> <span class="n">cte</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">def</span> <span class="nf">_new_cte</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">existing_ctes</span><span class="p">,</span> <span class="n">taken</span><span class="p">):</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a><span class="sd"> Returns:</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="sd"> tuple of (name, cte)</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="sd"> where `name` is a new name for this CTE in the root scope and `cte` is a new CTE instance.</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a><span class="sd"> If this CTE duplicates an existing CTE, `cte` will be None.</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">duplicate_cte_alias</span> <span class="o">=</span> <span class="n">existing_ctes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">parent</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">parent</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">alias</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="ow">not</span> <span class="n">name</span><span class="p">:</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="o">=</span><span class="n">taken</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="s2">&quot;cte&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="k">if</span> <span class="n">duplicate_cte_alias</span><span class="p">:</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">duplicate_cte_alias</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">elif</span> <span class="n">taken</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-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="o">=</span><span class="n">taken</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="n">name</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 class="n">taken</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">scope</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">if</span> <span class="ow">not</span> <span class="n">duplicate_cte_alias</span><span class="p">:</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">existing_ctes</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="o">=</span> <span class="n">name</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">(</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">this</span><span class="o">=</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">)),</span>
+</span><span id="L-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 class="k">else</span><span class="p">:</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">return</span> <span class="n">name</span><span class="p">,</span> <span class="n">cte</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/merge_subqueries.html b/docs/sqlglot/optimizer/merge_subqueries.html
index 770bbdc..cd58008 100644
--- a/docs/sqlglot/optimizer/merge_subqueries.html
+++ b/docs/sqlglot/optimizer/merge_subqueries.html
@@ -568,7 +568,7 @@ queries if it would result in multiple table selects in a single query:</p>
<div class="attr variable">
<span class="name">UNMERGABLE_ARGS</span> =
<input id="UNMERGABLE_ARGS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{&#39;sample&#39;, &#39;distribute&#39;, &#39;group&#39;, &#39;into&#39;, &#39;kind&#39;, &#39;settings&#39;, &#39;format&#39;, &#39;offset&#39;, &#39;windows&#39;, &#39;pivots&#39;, &#39;qualify&#39;, &#39;having&#39;, &#39;distinct&#39;, &#39;with&#39;, &#39;limit&#39;, &#39;locks&#39;, &#39;laterals&#39;, &#39;cluster&#39;, &#39;sort&#39;, &#39;match&#39;}</span>
+ <label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{&#39;kind&#39;, &#39;format&#39;, &#39;having&#39;, &#39;locks&#39;, &#39;distinct&#39;, &#39;distribute&#39;, &#39;with&#39;, &#39;offset&#39;, &#39;settings&#39;, &#39;sample&#39;, &#39;cluster&#39;, &#39;sort&#39;, &#39;group&#39;, &#39;into&#39;, &#39;connect&#39;, &#39;pivots&#39;, &#39;match&#39;, &#39;limit&#39;, &#39;windows&#39;, &#39;qualify&#39;, &#39;laterals&#39;}</span>
</div>
diff --git a/docs/sqlglot/optimizer/optimize_joins.html b/docs/sqlglot/optimizer/optimize_joins.html
index d0cb65a..572913d 100644
--- a/docs/sqlglot/optimizer/optimize_joins.html
+++ b/docs/sqlglot/optimizer/optimize_joins.html
@@ -142,14 +142,19 @@
</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">any</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="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">JOIN_ATTRS</span><span class="p">):</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</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-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">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-76"><a href="#L-76"><span class="linenos">76</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-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a>
+</span><span id="L-75"><a href="#L-75"><span class="linenos">75</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-76"><a href="#L-76"><span class="linenos">76</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-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos">78</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-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">other_table_names</span><span class="p">(</span><span class="n">join</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="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="nb">set</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="ow">not</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 class="ow">and</span> <span class="ow">not</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-81"><a href="#L-81"><span class="linenos">81</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">true</span><span class="p">())</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-85"><a href="#L-85"><span class="linenos">85</span></a><span class="k">def</span> <span class="nf">other_table_names</span><span class="p">(</span><span class="n">join</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="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos">86</span></a> <span class="n">on</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;on&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="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="nb">set</span><span class="p">()</span>
</span></pre></div>
@@ -286,9 +291,14 @@
</span><span id="normalize-73"><a href="#normalize-73"><span class="linenos">73</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">any</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="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">JOIN_ATTRS</span><span class="p">):</span>
</span><span id="normalize-74"><a href="#normalize-74"><span class="linenos">74</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="normalize-75"><a href="#normalize-75"><span class="linenos">75</span></a>
-</span><span id="normalize-76"><a href="#normalize-76"><span class="linenos">76</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="normalize-77"><a href="#normalize-77"><span class="linenos">77</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="normalize-78"><a href="#normalize-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="normalize-76"><a href="#normalize-76"><span class="linenos">76</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="normalize-77"><a href="#normalize-77"><span class="linenos">77</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="normalize-78"><a href="#normalize-78"><span class="linenos">78</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="normalize-79"><a href="#normalize-79"><span class="linenos">79</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="normalize-80"><a href="#normalize-80"><span class="linenos">80</span></a>
+</span><span id="normalize-81"><a href="#normalize-81"><span class="linenos">81</span></a> <span class="k">if</span> <span class="ow">not</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 class="ow">and</span> <span class="ow">not</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="normalize-82"><a href="#normalize-82"><span class="linenos">82</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">true</span><span class="p">())</span>
+</span><span id="normalize-83"><a href="#normalize-83"><span class="linenos">83</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -308,9 +318,9 @@
</div>
<a class="headerlink" href="#other_table_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="other_table_names-81"><a href="#other_table_names-81"><span class="linenos">81</span></a><span class="k">def</span> <span class="nf">other_table_names</span><span class="p">(</span><span class="n">join</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="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="other_table_names-82"><a href="#other_table_names-82"><span class="linenos">82</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
-</span><span id="other_table_names-83"><a href="#other_table_names-83"><span class="linenos">83</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="nb">set</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="other_table_names-86"><a href="#other_table_names-86"><span class="linenos">86</span></a><span class="k">def</span> <span class="nf">other_table_names</span><span class="p">(</span><span class="n">join</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="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="other_table_names-87"><a href="#other_table_names-87"><span class="linenos">87</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
+</span><span id="other_table_names-88"><a href="#other_table_names-88"><span class="linenos">88</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="nb">set</span><span class="p">()</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/optimizer.html b/docs/sqlglot/optimizer/optimizer.html
index 9e64a9f..afdd233 100644
--- a/docs/sqlglot/optimizer/optimizer.html
+++ b/docs/sqlglot/optimizer/optimizer.html
@@ -175,7 +175,7 @@
<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">qualify</span> <span class="n">at</span> <span class="mh">0x7f8dfae5c4c0</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">0x7f8dfb08f640</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">0x7f8dfb08c0d0</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">0x7f8dfae5c820</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">0x7f8dfb08eef0</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">0x7f8dfb08eb90</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">0x7f8dfb08dea0</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">0x7f8dfb08df30</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">0x7f8dfb093e20</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">0x7f8dfb093d00</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">quote_identifiers</span> <span class="n">at</span> <span class="mh">0x7f8dfb08fe20</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">0x7f8dfb023c70</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">0x7f8dfb093760</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">0x7f8dfb08c280</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 class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</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">qualify</span> <span class="n">at</span> <span class="mh">0x7f21dc993e20</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">0x7f21dc993010</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">0x7f21dc96b910</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">0x7f21dc9d81f0</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">0x7f21dc9928c0</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">0x7f21dc992560</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">0x7f21dc9917e0</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">0x7f21dc991870</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">0x7f21dc96b7f0</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">0x7f21dc96b6d0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">quote_identifiers</span> <span class="n">at</span> <span class="mh">0x7f21dc9937f0</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">0x7f21dcccf2e0</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">0x7f21dc96b130</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">0x7f21dc96bac0</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 class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
<label class="view-source-button" for="optimize-view-source"><span>View Source</span></label>
diff --git a/docs/sqlglot/optimizer/pushdown_predicates.html b/docs/sqlglot/optimizer/pushdown_predicates.html
index a428344..81c80c3 100644
--- a/docs/sqlglot/optimizer/pushdown_predicates.html
+++ b/docs/sqlglot/optimizer/pushdown_predicates.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">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.normalize</span> <span class="kn">import</span> <span class="n">normalized</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.optimizer.scope</span> <span class="kn">import</span> <span class="n">build_scope</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.optimizer.scope</span> <span class="kn">import</span> <span class="n">build_scope</span><span class="p">,</span> <span class="n">find_in_scope</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.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</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>
@@ -154,125 +154,133 @@
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">break</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</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">Select</span><span class="p">):</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">predicate</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><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</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-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><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="k">def</span> <span class="nf">pushdown_dnf</span><span class="p">(</span><span class="n">predicates</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> If the predicates are in DNF form, we can only push down conditions that are in all blocks.</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> Additionally, we can&#39;t remove predicates from their original form.</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="c1"># find all the tables that can be pushdown too</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="c1"># these are tables that are referenced in all blocks of a DNF</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="c1"># (a.x AND b.x) OR (a.y AND c.y)</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="c1"># only table a can be push down</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">pushdown_tables</span> <span class="o">=</span> <span class="nb">set</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">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">a_tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">a</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">b</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">a_tables</span> <span class="o">&amp;=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">pushdown_tables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">a_tables</span><span class="p">)</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">conditions</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">inner_predicate</span> <span class="o">=</span> <span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</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">find_in_scope</span><span class="p">(</span><span class="n">inner_predicate</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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">node</span><span class="o">.</span><span class="n">having</span><span class="p">(</span><span class="n">inner_predicate</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-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">inner_predicate</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><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="k">def</span> <span class="nf">pushdown_dnf</span><span class="p">(</span><span class="n">predicates</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> If the predicates are in DNF form, we can only push down conditions that are in all blocks.</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> Additionally, we can&#39;t remove predicates from their original form.</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="c1"># find all the tables that can be pushdown too</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="c1"># these are tables that are referenced in all blocks of a DNF</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="c1"># (a.x AND b.x) OR (a.y AND c.y)</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="c1"># only table a can be push down</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">pushdown_tables</span> <span class="o">=</span> <span class="nb">set</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">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">a_tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">a</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">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">a_tables</span> <span class="o">&amp;=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">b</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="c1"># for every pushdown table, find all related conditions in all predicates</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="c1"># combine them with ORS</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="c1"># (a.x AND and a.y AND b.x) OR (a.z AND c.y) -&gt; (a.x AND a.y) OR (a.z)</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">pushdown_tables</span><span class="p">):</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">for</span> <span class="n">predicate</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">)</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">continue</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">predicate_condition</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><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">predicate</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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">condition</span> <span class="o">=</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">Condition</span><span class="p">)</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">predicate_condition</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">predicate_condition</span><span class="p">,</span> <span class="n">condition</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">predicate_condition</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">else</span> <span class="n">condition</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="p">)</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">predicate_condition</span><span class="p">:</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span><span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">],</span> <span class="n">predicate_condition</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">table</span> <span class="ow">in</span> <span class="n">conditions</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">else</span> <span class="n">predicate_condition</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="p">)</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">conditions</span><span class="p">:</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">continue</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">pushdown_tables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">a_tables</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 class="n">conditions</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"># for every pushdown table, find all related conditions in all predicates</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="c1"># combine them with ORS</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="c1"># (a.x AND and a.y AND b.x) OR (a.z AND c.y) -&gt; (a.x AND a.y) OR (a.z)</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">pushdown_tables</span><span class="p">):</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">for</span> <span class="n">predicate</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><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="k">if</span> <span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">continue</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="n">predicate_condition</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><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">predicate</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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">condition</span> <span class="o">=</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">Condition</span><span class="p">)</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">predicate_condition</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">predicate_condition</span><span class="p">,</span> <span class="n">condition</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="n">predicate_condition</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">else</span> <span class="n">condition</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="p">)</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">predicate_condition</span><span class="p">:</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">]</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="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span><span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">],</span> <span class="n">predicate_condition</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">table</span> <span class="ow">in</span> <span class="n">conditions</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">else</span> <span class="n">predicate_condition</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <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">predicate</span> <span class="o">=</span> <span class="n">conditions</span><span class="p">[</span><span class="n">name</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">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">Join</span><span class="p">):</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">node</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">predicate</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-144"><a href="#L-144"><span class="linenos">144</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">Select</span><span class="p">):</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</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-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><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a><span class="k">def</span> <span class="nf">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">sources</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">where_condition</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate</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">Join</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="n">exp</span><span class="o">.</span><span class="n">Where</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="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tables</span><span class="p">):</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">node</span><span class="p">,</span> <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">table</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="o">.</span><span class="n">items</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="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">conditions</span><span class="p">:</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">continue</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">predicate</span> <span class="o">=</span> <span class="n">conditions</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="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">Join</span><span class="p">):</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">node</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">predicate</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-148"><a href="#L-148"><span class="linenos">148</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">Select</span><span class="p">):</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">inner_predicate</span> <span class="o">=</span> <span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</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="n">find_in_scope</span><span class="p">(</span><span class="n">inner_predicate</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-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">node</span><span class="o">.</span><span class="n">having</span><span class="p">(</span><span class="n">inner_predicate</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-152"><a href="#L-152"><span class="linenos">152</span></a> <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">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">inner_predicate</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-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><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="c1"># if the predicate is in a where statement we can try to push it down</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="c1"># we want to find the root join or from statement</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">where_condition</span><span class="p">:</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</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">Join</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-156"><a href="#L-156"><span class="linenos">156</span></a><span class="k">def</span> <span class="nf">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">sources</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">nodes</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="n">tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">where_condition</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate</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">Join</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="n">exp</span><span class="o">.</span><span class="n">Where</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="c1"># a node can reference a CTE which should be pushed down</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</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">From</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">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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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">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">Join</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">node</span><span class="o">.</span><span class="n">side</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="o">!=</span> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tables</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"># We can&#39;t push down window expressions</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">has_window_expression</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">selects</span> <span class="k">if</span> <span class="n">select</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">Window</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 class="c1"># we can&#39;t push down predicates to select statements if they are referenced in</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="c1"># multiple places.</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="ow">not</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;group&quot;</span><span class="p">)</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="ow">and</span> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">&lt;</span> <span class="mi">2</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_window_expression</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="p">):</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">return</span> <span class="n">nodes</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><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a><span class="k">def</span> <span class="nf">replace_aliases</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">predicate</span><span class="p">):</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">aliases</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><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">selects</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="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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</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="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</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">_replace_alias</span><span class="p">(</span><span class="n">column</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">column</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">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">aliases</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">aliases</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-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">column</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="k">return</span> <span class="n">predicate</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_alias</span><span class="p">)</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tables</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="p">,</span> <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">table</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-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="c1"># if the predicate is in a where statement we can try to push it down</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="c1"># we want to find the root join or from statement</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">where_condition</span><span class="p">:</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</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">Join</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-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="c1"># a node can reference a CTE which should be pushed down</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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">From</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">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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="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-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="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">Join</span><span class="p">):</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="o">!=</span> <span class="s2">&quot;RIGHT&quot;</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="p">{}</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</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">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="c1"># We can&#39;t push down window expressions</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">has_window_expression</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">selects</span> <span class="k">if</span> <span class="n">select</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">Window</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="c1"># we can&#39;t push down predicates to select statements if they are referenced in</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="c1"># multiple places.</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="ow">not</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;group&quot;</span><span class="p">)</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="ow">and</span> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">&lt;</span> <span class="mi">2</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_window_expression</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="p">):</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="n">nodes</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><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a><span class="k">def</span> <span class="nf">replace_aliases</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">predicate</span><span class="p">):</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">aliases</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><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">selects</span><span class="p">:</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">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-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">def</span> <span class="nf">_replace_alias</span><span class="p">(</span><span class="n">column</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="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</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">aliases</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">aliases</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-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">column</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">return</span> <span class="n">predicate</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_alias</span><span class="p">)</span>
</span></pre></div>
@@ -422,7 +430,11 @@
</span><span id="pushdown_cnf-82"><a href="#pushdown_cnf-82"><span class="linenos">82</span></a> <span class="k">break</span>
</span><span id="pushdown_cnf-83"><a href="#pushdown_cnf-83"><span class="linenos">83</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">Select</span><span class="p">):</span>
</span><span id="pushdown_cnf-84"><a href="#pushdown_cnf-84"><span class="linenos">84</span></a> <span class="n">predicate</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><span id="pushdown_cnf-85"><a href="#pushdown_cnf-85"><span class="linenos">85</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</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="pushdown_cnf-85"><a href="#pushdown_cnf-85"><span class="linenos">85</span></a> <span class="n">inner_predicate</span> <span class="o">=</span> <span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</span><span class="p">)</span>
+</span><span id="pushdown_cnf-86"><a href="#pushdown_cnf-86"><span class="linenos">86</span></a> <span class="k">if</span> <span class="n">find_in_scope</span><span class="p">(</span><span class="n">inner_predicate</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="pushdown_cnf-87"><a href="#pushdown_cnf-87"><span class="linenos">87</span></a> <span class="n">node</span><span class="o">.</span><span class="n">having</span><span class="p">(</span><span class="n">inner_predicate</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="pushdown_cnf-88"><a href="#pushdown_cnf-88"><span class="linenos">88</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="pushdown_cnf-89"><a href="#pushdown_cnf-89"><span class="linenos">89</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">inner_predicate</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -442,65 +454,69 @@
</div>
<a class="headerlink" href="#pushdown_dnf"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="pushdown_dnf-88"><a href="#pushdown_dnf-88"><span class="linenos"> 88</span></a><span class="k">def</span> <span class="nf">pushdown_dnf</span><span class="p">(</span><span class="n">predicates</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
-</span><span id="pushdown_dnf-89"><a href="#pushdown_dnf-89"><span class="linenos"> 89</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="pushdown_dnf-90"><a href="#pushdown_dnf-90"><span class="linenos"> 90</span></a><span class="sd"> If the predicates are in DNF form, we can only push down conditions that are in all blocks.</span>
-</span><span id="pushdown_dnf-91"><a href="#pushdown_dnf-91"><span class="linenos"> 91</span></a><span class="sd"> Additionally, we can&#39;t remove predicates from their original form.</span>
-</span><span id="pushdown_dnf-92"><a href="#pushdown_dnf-92"><span class="linenos"> 92</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="pushdown_dnf-93"><a href="#pushdown_dnf-93"><span class="linenos"> 93</span></a> <span class="c1"># find all the tables that can be pushdown too</span>
-</span><span id="pushdown_dnf-94"><a href="#pushdown_dnf-94"><span class="linenos"> 94</span></a> <span class="c1"># these are tables that are referenced in all blocks of a DNF</span>
-</span><span id="pushdown_dnf-95"><a href="#pushdown_dnf-95"><span class="linenos"> 95</span></a> <span class="c1"># (a.x AND b.x) OR (a.y AND c.y)</span>
-</span><span id="pushdown_dnf-96"><a href="#pushdown_dnf-96"><span class="linenos"> 96</span></a> <span class="c1"># only table a can be push down</span>
-</span><span id="pushdown_dnf-97"><a href="#pushdown_dnf-97"><span class="linenos"> 97</span></a> <span class="n">pushdown_tables</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="pushdown_dnf-98"><a href="#pushdown_dnf-98"><span class="linenos"> 98</span></a>
-</span><span id="pushdown_dnf-99"><a href="#pushdown_dnf-99"><span class="linenos"> 99</span></a> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
-</span><span id="pushdown_dnf-100"><a href="#pushdown_dnf-100"><span class="linenos">100</span></a> <span class="n">a_tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
-</span><span id="pushdown_dnf-101"><a href="#pushdown_dnf-101"><span class="linenos">101</span></a>
-</span><span id="pushdown_dnf-102"><a href="#pushdown_dnf-102"><span class="linenos">102</span></a> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
-</span><span id="pushdown_dnf-103"><a href="#pushdown_dnf-103"><span class="linenos">103</span></a> <span class="n">a_tables</span> <span class="o">&amp;=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
-</span><span id="pushdown_dnf-104"><a href="#pushdown_dnf-104"><span class="linenos">104</span></a>
-</span><span id="pushdown_dnf-105"><a href="#pushdown_dnf-105"><span class="linenos">105</span></a> <span class="n">pushdown_tables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">a_tables</span><span class="p">)</span>
-</span><span id="pushdown_dnf-106"><a href="#pushdown_dnf-106"><span class="linenos">106</span></a>
-</span><span id="pushdown_dnf-107"><a href="#pushdown_dnf-107"><span class="linenos">107</span></a> <span class="n">conditions</span> <span class="o">=</span> <span class="p">{}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="pushdown_dnf-92"><a href="#pushdown_dnf-92"><span class="linenos"> 92</span></a><span class="k">def</span> <span class="nf">pushdown_dnf</span><span class="p">(</span><span class="n">predicates</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
+</span><span id="pushdown_dnf-93"><a href="#pushdown_dnf-93"><span class="linenos"> 93</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="pushdown_dnf-94"><a href="#pushdown_dnf-94"><span class="linenos"> 94</span></a><span class="sd"> If the predicates are in DNF form, we can only push down conditions that are in all blocks.</span>
+</span><span id="pushdown_dnf-95"><a href="#pushdown_dnf-95"><span class="linenos"> 95</span></a><span class="sd"> Additionally, we can&#39;t remove predicates from their original form.</span>
+</span><span id="pushdown_dnf-96"><a href="#pushdown_dnf-96"><span class="linenos"> 96</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="pushdown_dnf-97"><a href="#pushdown_dnf-97"><span class="linenos"> 97</span></a> <span class="c1"># find all the tables that can be pushdown too</span>
+</span><span id="pushdown_dnf-98"><a href="#pushdown_dnf-98"><span class="linenos"> 98</span></a> <span class="c1"># these are tables that are referenced in all blocks of a DNF</span>
+</span><span id="pushdown_dnf-99"><a href="#pushdown_dnf-99"><span class="linenos"> 99</span></a> <span class="c1"># (a.x AND b.x) OR (a.y AND c.y)</span>
+</span><span id="pushdown_dnf-100"><a href="#pushdown_dnf-100"><span class="linenos">100</span></a> <span class="c1"># only table a can be push down</span>
+</span><span id="pushdown_dnf-101"><a href="#pushdown_dnf-101"><span class="linenos">101</span></a> <span class="n">pushdown_tables</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="pushdown_dnf-102"><a href="#pushdown_dnf-102"><span class="linenos">102</span></a>
+</span><span id="pushdown_dnf-103"><a href="#pushdown_dnf-103"><span class="linenos">103</span></a> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
+</span><span id="pushdown_dnf-104"><a href="#pushdown_dnf-104"><span class="linenos">104</span></a> <span class="n">a_tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
+</span><span id="pushdown_dnf-105"><a href="#pushdown_dnf-105"><span class="linenos">105</span></a>
+</span><span id="pushdown_dnf-106"><a href="#pushdown_dnf-106"><span class="linenos">106</span></a> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
+</span><span id="pushdown_dnf-107"><a href="#pushdown_dnf-107"><span class="linenos">107</span></a> <span class="n">a_tables</span> <span class="o">&amp;=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
</span><span id="pushdown_dnf-108"><a href="#pushdown_dnf-108"><span class="linenos">108</span></a>
-</span><span id="pushdown_dnf-109"><a href="#pushdown_dnf-109"><span class="linenos">109</span></a> <span class="c1"># for every pushdown table, find all related conditions in all predicates</span>
-</span><span id="pushdown_dnf-110"><a href="#pushdown_dnf-110"><span class="linenos">110</span></a> <span class="c1"># combine them with ORS</span>
-</span><span id="pushdown_dnf-111"><a href="#pushdown_dnf-111"><span class="linenos">111</span></a> <span class="c1"># (a.x AND and a.y AND b.x) OR (a.z AND c.y) -&gt; (a.x AND a.y) OR (a.z)</span>
-</span><span id="pushdown_dnf-112"><a href="#pushdown_dnf-112"><span class="linenos">112</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">pushdown_tables</span><span class="p">):</span>
-</span><span id="pushdown_dnf-113"><a href="#pushdown_dnf-113"><span class="linenos">113</span></a> <span class="k">for</span> <span class="n">predicate</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
-</span><span id="pushdown_dnf-114"><a href="#pushdown_dnf-114"><span class="linenos">114</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">)</span>
-</span><span id="pushdown_dnf-115"><a href="#pushdown_dnf-115"><span class="linenos">115</span></a>
-</span><span id="pushdown_dnf-116"><a href="#pushdown_dnf-116"><span class="linenos">116</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">nodes</span><span class="p">:</span>
-</span><span id="pushdown_dnf-117"><a href="#pushdown_dnf-117"><span class="linenos">117</span></a> <span class="k">continue</span>
-</span><span id="pushdown_dnf-118"><a href="#pushdown_dnf-118"><span class="linenos">118</span></a>
-</span><span id="pushdown_dnf-119"><a href="#pushdown_dnf-119"><span class="linenos">119</span></a> <span class="n">predicate_condition</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="pushdown_dnf-120"><a href="#pushdown_dnf-120"><span class="linenos">120</span></a>
-</span><span id="pushdown_dnf-121"><a href="#pushdown_dnf-121"><span class="linenos">121</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">predicate</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="pushdown_dnf-122"><a href="#pushdown_dnf-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="pushdown_dnf-123"><a href="#pushdown_dnf-123"><span class="linenos">123</span></a> <span class="n">condition</span> <span class="o">=</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">Condition</span><span class="p">)</span>
-</span><span id="pushdown_dnf-124"><a href="#pushdown_dnf-124"><span class="linenos">124</span></a> <span class="n">predicate_condition</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="pushdown_dnf-125"><a href="#pushdown_dnf-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">predicate_condition</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span>
-</span><span id="pushdown_dnf-126"><a href="#pushdown_dnf-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">predicate_condition</span>
-</span><span id="pushdown_dnf-127"><a href="#pushdown_dnf-127"><span class="linenos">127</span></a> <span class="k">else</span> <span class="n">condition</span>
-</span><span id="pushdown_dnf-128"><a href="#pushdown_dnf-128"><span class="linenos">128</span></a> <span class="p">)</span>
-</span><span id="pushdown_dnf-129"><a href="#pushdown_dnf-129"><span class="linenos">129</span></a>
-</span><span id="pushdown_dnf-130"><a href="#pushdown_dnf-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">predicate_condition</span><span class="p">:</span>
-</span><span id="pushdown_dnf-131"><a href="#pushdown_dnf-131"><span class="linenos">131</span></a> <span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="pushdown_dnf-132"><a href="#pushdown_dnf-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span><span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">],</span> <span class="n">predicate_condition</span><span class="p">)</span>
-</span><span id="pushdown_dnf-133"><a href="#pushdown_dnf-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">conditions</span>
-</span><span id="pushdown_dnf-134"><a href="#pushdown_dnf-134"><span class="linenos">134</span></a> <span class="k">else</span> <span class="n">predicate_condition</span>
-</span><span id="pushdown_dnf-135"><a href="#pushdown_dnf-135"><span class="linenos">135</span></a> <span class="p">)</span>
-</span><span id="pushdown_dnf-136"><a href="#pushdown_dnf-136"><span class="linenos">136</span></a>
-</span><span id="pushdown_dnf-137"><a href="#pushdown_dnf-137"><span class="linenos">137</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="pushdown_dnf-138"><a href="#pushdown_dnf-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">conditions</span><span class="p">:</span>
-</span><span id="pushdown_dnf-139"><a href="#pushdown_dnf-139"><span class="linenos">139</span></a> <span class="k">continue</span>
+</span><span id="pushdown_dnf-109"><a href="#pushdown_dnf-109"><span class="linenos">109</span></a> <span class="n">pushdown_tables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">a_tables</span><span class="p">)</span>
+</span><span id="pushdown_dnf-110"><a href="#pushdown_dnf-110"><span class="linenos">110</span></a>
+</span><span id="pushdown_dnf-111"><a href="#pushdown_dnf-111"><span class="linenos">111</span></a> <span class="n">conditions</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="pushdown_dnf-112"><a href="#pushdown_dnf-112"><span class="linenos">112</span></a>
+</span><span id="pushdown_dnf-113"><a href="#pushdown_dnf-113"><span class="linenos">113</span></a> <span class="c1"># for every pushdown table, find all related conditions in all predicates</span>
+</span><span id="pushdown_dnf-114"><a href="#pushdown_dnf-114"><span class="linenos">114</span></a> <span class="c1"># combine them with ORS</span>
+</span><span id="pushdown_dnf-115"><a href="#pushdown_dnf-115"><span class="linenos">115</span></a> <span class="c1"># (a.x AND and a.y AND b.x) OR (a.z AND c.y) -&gt; (a.x AND a.y) OR (a.z)</span>
+</span><span id="pushdown_dnf-116"><a href="#pushdown_dnf-116"><span class="linenos">116</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">pushdown_tables</span><span class="p">):</span>
+</span><span id="pushdown_dnf-117"><a href="#pushdown_dnf-117"><span class="linenos">117</span></a> <span class="k">for</span> <span class="n">predicate</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
+</span><span id="pushdown_dnf-118"><a href="#pushdown_dnf-118"><span class="linenos">118</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">)</span>
+</span><span id="pushdown_dnf-119"><a href="#pushdown_dnf-119"><span class="linenos">119</span></a>
+</span><span id="pushdown_dnf-120"><a href="#pushdown_dnf-120"><span class="linenos">120</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">nodes</span><span class="p">:</span>
+</span><span id="pushdown_dnf-121"><a href="#pushdown_dnf-121"><span class="linenos">121</span></a> <span class="k">continue</span>
+</span><span id="pushdown_dnf-122"><a href="#pushdown_dnf-122"><span class="linenos">122</span></a>
+</span><span id="pushdown_dnf-123"><a href="#pushdown_dnf-123"><span class="linenos">123</span></a> <span class="n">predicate_condition</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="pushdown_dnf-124"><a href="#pushdown_dnf-124"><span class="linenos">124</span></a>
+</span><span id="pushdown_dnf-125"><a href="#pushdown_dnf-125"><span class="linenos">125</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">predicate</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="pushdown_dnf-126"><a href="#pushdown_dnf-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="pushdown_dnf-127"><a href="#pushdown_dnf-127"><span class="linenos">127</span></a> <span class="n">condition</span> <span class="o">=</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">Condition</span><span class="p">)</span>
+</span><span id="pushdown_dnf-128"><a href="#pushdown_dnf-128"><span class="linenos">128</span></a> <span class="n">predicate_condition</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="pushdown_dnf-129"><a href="#pushdown_dnf-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">predicate_condition</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span>
+</span><span id="pushdown_dnf-130"><a href="#pushdown_dnf-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">predicate_condition</span>
+</span><span id="pushdown_dnf-131"><a href="#pushdown_dnf-131"><span class="linenos">131</span></a> <span class="k">else</span> <span class="n">condition</span>
+</span><span id="pushdown_dnf-132"><a href="#pushdown_dnf-132"><span class="linenos">132</span></a> <span class="p">)</span>
+</span><span id="pushdown_dnf-133"><a href="#pushdown_dnf-133"><span class="linenos">133</span></a>
+</span><span id="pushdown_dnf-134"><a href="#pushdown_dnf-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="n">predicate_condition</span><span class="p">:</span>
+</span><span id="pushdown_dnf-135"><a href="#pushdown_dnf-135"><span class="linenos">135</span></a> <span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="pushdown_dnf-136"><a href="#pushdown_dnf-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span><span class="n">conditions</span><span class="p">[</span><span class="n">table</span><span class="p">],</span> <span class="n">predicate_condition</span><span class="p">)</span>
+</span><span id="pushdown_dnf-137"><a href="#pushdown_dnf-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">conditions</span>
+</span><span id="pushdown_dnf-138"><a href="#pushdown_dnf-138"><span class="linenos">138</span></a> <span class="k">else</span> <span class="n">predicate_condition</span>
+</span><span id="pushdown_dnf-139"><a href="#pushdown_dnf-139"><span class="linenos">139</span></a> <span class="p">)</span>
</span><span id="pushdown_dnf-140"><a href="#pushdown_dnf-140"><span class="linenos">140</span></a>
-</span><span id="pushdown_dnf-141"><a href="#pushdown_dnf-141"><span class="linenos">141</span></a> <span class="n">predicate</span> <span class="o">=</span> <span class="n">conditions</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
-</span><span id="pushdown_dnf-142"><a href="#pushdown_dnf-142"><span class="linenos">142</span></a>
-</span><span id="pushdown_dnf-143"><a href="#pushdown_dnf-143"><span class="linenos">143</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">Join</span><span class="p">):</span>
-</span><span id="pushdown_dnf-144"><a href="#pushdown_dnf-144"><span class="linenos">144</span></a> <span class="n">node</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">predicate</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="pushdown_dnf-145"><a href="#pushdown_dnf-145"><span class="linenos">145</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">Select</span><span class="p">):</span>
-</span><span id="pushdown_dnf-146"><a href="#pushdown_dnf-146"><span class="linenos">146</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</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="pushdown_dnf-141"><a href="#pushdown_dnf-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="pushdown_dnf-142"><a href="#pushdown_dnf-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">conditions</span><span class="p">:</span>
+</span><span id="pushdown_dnf-143"><a href="#pushdown_dnf-143"><span class="linenos">143</span></a> <span class="k">continue</span>
+</span><span id="pushdown_dnf-144"><a href="#pushdown_dnf-144"><span class="linenos">144</span></a>
+</span><span id="pushdown_dnf-145"><a href="#pushdown_dnf-145"><span class="linenos">145</span></a> <span class="n">predicate</span> <span class="o">=</span> <span class="n">conditions</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+</span><span id="pushdown_dnf-146"><a href="#pushdown_dnf-146"><span class="linenos">146</span></a>
+</span><span id="pushdown_dnf-147"><a href="#pushdown_dnf-147"><span class="linenos">147</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">Join</span><span class="p">):</span>
+</span><span id="pushdown_dnf-148"><a href="#pushdown_dnf-148"><span class="linenos">148</span></a> <span class="n">node</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">predicate</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="pushdown_dnf-149"><a href="#pushdown_dnf-149"><span class="linenos">149</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">Select</span><span class="p">):</span>
+</span><span id="pushdown_dnf-150"><a href="#pushdown_dnf-150"><span class="linenos">150</span></a> <span class="n">inner_predicate</span> <span class="o">=</span> <span class="n">replace_aliases</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">predicate</span><span class="p">)</span>
+</span><span id="pushdown_dnf-151"><a href="#pushdown_dnf-151"><span class="linenos">151</span></a> <span class="k">if</span> <span class="n">find_in_scope</span><span class="p">(</span><span class="n">inner_predicate</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="pushdown_dnf-152"><a href="#pushdown_dnf-152"><span class="linenos">152</span></a> <span class="n">node</span><span class="o">.</span><span class="n">having</span><span class="p">(</span><span class="n">inner_predicate</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="pushdown_dnf-153"><a href="#pushdown_dnf-153"><span class="linenos">153</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="pushdown_dnf-154"><a href="#pushdown_dnf-154"><span class="linenos">154</span></a> <span class="n">node</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">inner_predicate</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -521,44 +537,44 @@ Additionally, we can't remove predicates from their original form.</p>
</div>
<a class="headerlink" href="#nodes_for_predicate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="nodes_for_predicate-149"><a href="#nodes_for_predicate-149"><span class="linenos">149</span></a><span class="k">def</span> <span class="nf">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">sources</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
-</span><span id="nodes_for_predicate-150"><a href="#nodes_for_predicate-150"><span class="linenos">150</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="nodes_for_predicate-151"><a href="#nodes_for_predicate-151"><span class="linenos">151</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span>
-</span><span id="nodes_for_predicate-152"><a href="#nodes_for_predicate-152"><span class="linenos">152</span></a> <span class="n">where_condition</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate</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">Join</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="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">)</span>
-</span><span id="nodes_for_predicate-153"><a href="#nodes_for_predicate-153"><span class="linenos">153</span></a>
-</span><span id="nodes_for_predicate-154"><a href="#nodes_for_predicate-154"><span class="linenos">154</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tables</span><span class="p">):</span>
-</span><span id="nodes_for_predicate-155"><a href="#nodes_for_predicate-155"><span class="linenos">155</span></a> <span class="n">node</span><span class="p">,</span> <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">table</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="nodes_for_predicate-156"><a href="#nodes_for_predicate-156"><span class="linenos">156</span></a>
-</span><span id="nodes_for_predicate-157"><a href="#nodes_for_predicate-157"><span class="linenos">157</span></a> <span class="c1"># if the predicate is in a where statement we can try to push it down</span>
-</span><span id="nodes_for_predicate-158"><a href="#nodes_for_predicate-158"><span class="linenos">158</span></a> <span class="c1"># we want to find the root join or from statement</span>
-</span><span id="nodes_for_predicate-159"><a href="#nodes_for_predicate-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">where_condition</span><span class="p">:</span>
-</span><span id="nodes_for_predicate-160"><a href="#nodes_for_predicate-160"><span class="linenos">160</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</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">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="nodes_for_predicate-157"><a href="#nodes_for_predicate-157"><span class="linenos">157</span></a><span class="k">def</span> <span class="nf">nodes_for_predicate</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">sources</span><span class="p">,</span> <span class="n">scope_ref_count</span><span class="p">):</span>
+</span><span id="nodes_for_predicate-158"><a href="#nodes_for_predicate-158"><span class="linenos">158</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="nodes_for_predicate-159"><a href="#nodes_for_predicate-159"><span class="linenos">159</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column_table_names</span><span class="p">(</span><span class="n">predicate</span><span class="p">)</span>
+</span><span id="nodes_for_predicate-160"><a href="#nodes_for_predicate-160"><span class="linenos">160</span></a> <span class="n">where_condition</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate</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">Join</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="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">)</span>
</span><span id="nodes_for_predicate-161"><a href="#nodes_for_predicate-161"><span class="linenos">161</span></a>
-</span><span id="nodes_for_predicate-162"><a href="#nodes_for_predicate-162"><span class="linenos">162</span></a> <span class="c1"># a node can reference a CTE which should be pushed down</span>
-</span><span id="nodes_for_predicate-163"><a href="#nodes_for_predicate-163"><span class="linenos">163</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">From</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">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="nodes_for_predicate-164"><a href="#nodes_for_predicate-164"><span class="linenos">164</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="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="nodes_for_predicate-165"><a href="#nodes_for_predicate-165"><span class="linenos">165</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
-</span><span id="nodes_for_predicate-166"><a href="#nodes_for_predicate-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="nodes_for_predicate-167"><a href="#nodes_for_predicate-167"><span class="linenos">167</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="nodes_for_predicate-168"><a href="#nodes_for_predicate-168"><span class="linenos">168</span></a>
-</span><span id="nodes_for_predicate-169"><a href="#nodes_for_predicate-169"><span class="linenos">169</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">Join</span><span class="p">):</span>
-</span><span id="nodes_for_predicate-170"><a href="#nodes_for_predicate-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="o">!=</span> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span>
-</span><span id="nodes_for_predicate-171"><a href="#nodes_for_predicate-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="nodes_for_predicate-172"><a href="#nodes_for_predicate-172"><span class="linenos">172</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
-</span><span id="nodes_for_predicate-173"><a href="#nodes_for_predicate-173"><span class="linenos">173</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">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="nodes_for_predicate-174"><a href="#nodes_for_predicate-174"><span class="linenos">174</span></a> <span class="c1"># We can&#39;t push down window expressions</span>
-</span><span id="nodes_for_predicate-175"><a href="#nodes_for_predicate-175"><span class="linenos">175</span></a> <span class="n">has_window_expression</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="nodes_for_predicate-176"><a href="#nodes_for_predicate-176"><span class="linenos">176</span></a> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">selects</span> <span class="k">if</span> <span class="n">select</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">Window</span><span class="p">)</span>
-</span><span id="nodes_for_predicate-177"><a href="#nodes_for_predicate-177"><span class="linenos">177</span></a> <span class="p">)</span>
-</span><span id="nodes_for_predicate-178"><a href="#nodes_for_predicate-178"><span class="linenos">178</span></a> <span class="c1"># we can&#39;t push down predicates to select statements if they are referenced in</span>
-</span><span id="nodes_for_predicate-179"><a href="#nodes_for_predicate-179"><span class="linenos">179</span></a> <span class="c1"># multiple places.</span>
-</span><span id="nodes_for_predicate-180"><a href="#nodes_for_predicate-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="nodes_for_predicate-181"><a href="#nodes_for_predicate-181"><span class="linenos">181</span></a> <span class="ow">not</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;group&quot;</span><span class="p">)</span>
-</span><span id="nodes_for_predicate-182"><a href="#nodes_for_predicate-182"><span class="linenos">182</span></a> <span class="ow">and</span> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">&lt;</span> <span class="mi">2</span>
-</span><span id="nodes_for_predicate-183"><a href="#nodes_for_predicate-183"><span class="linenos">183</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_window_expression</span>
-</span><span id="nodes_for_predicate-184"><a href="#nodes_for_predicate-184"><span class="linenos">184</span></a> <span class="p">):</span>
-</span><span id="nodes_for_predicate-185"><a href="#nodes_for_predicate-185"><span class="linenos">185</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
-</span><span id="nodes_for_predicate-186"><a href="#nodes_for_predicate-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="n">nodes</span>
+</span><span id="nodes_for_predicate-162"><a href="#nodes_for_predicate-162"><span class="linenos">162</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tables</span><span class="p">):</span>
+</span><span id="nodes_for_predicate-163"><a href="#nodes_for_predicate-163"><span class="linenos">163</span></a> <span class="n">node</span><span class="p">,</span> <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">table</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="nodes_for_predicate-164"><a href="#nodes_for_predicate-164"><span class="linenos">164</span></a>
+</span><span id="nodes_for_predicate-165"><a href="#nodes_for_predicate-165"><span class="linenos">165</span></a> <span class="c1"># if the predicate is in a where statement we can try to push it down</span>
+</span><span id="nodes_for_predicate-166"><a href="#nodes_for_predicate-166"><span class="linenos">166</span></a> <span class="c1"># we want to find the root join or from statement</span>
+</span><span id="nodes_for_predicate-167"><a href="#nodes_for_predicate-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">where_condition</span><span class="p">:</span>
+</span><span id="nodes_for_predicate-168"><a href="#nodes_for_predicate-168"><span class="linenos">168</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</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">Join</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="nodes_for_predicate-169"><a href="#nodes_for_predicate-169"><span class="linenos">169</span></a>
+</span><span id="nodes_for_predicate-170"><a href="#nodes_for_predicate-170"><span class="linenos">170</span></a> <span class="c1"># a node can reference a CTE which should be pushed down</span>
+</span><span id="nodes_for_predicate-171"><a href="#nodes_for_predicate-171"><span class="linenos">171</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">From</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">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="nodes_for_predicate-172"><a href="#nodes_for_predicate-172"><span class="linenos">172</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="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="nodes_for_predicate-173"><a href="#nodes_for_predicate-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
+</span><span id="nodes_for_predicate-174"><a href="#nodes_for_predicate-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="nodes_for_predicate-175"><a href="#nodes_for_predicate-175"><span class="linenos">175</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="nodes_for_predicate-176"><a href="#nodes_for_predicate-176"><span class="linenos">176</span></a>
+</span><span id="nodes_for_predicate-177"><a href="#nodes_for_predicate-177"><span class="linenos">177</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">Join</span><span class="p">):</span>
+</span><span id="nodes_for_predicate-178"><a href="#nodes_for_predicate-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">side</span> <span class="o">!=</span> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span>
+</span><span id="nodes_for_predicate-179"><a href="#nodes_for_predicate-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="nodes_for_predicate-180"><a href="#nodes_for_predicate-180"><span class="linenos">180</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
+</span><span id="nodes_for_predicate-181"><a href="#nodes_for_predicate-181"><span class="linenos">181</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">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="nodes_for_predicate-182"><a href="#nodes_for_predicate-182"><span class="linenos">182</span></a> <span class="c1"># We can&#39;t push down window expressions</span>
+</span><span id="nodes_for_predicate-183"><a href="#nodes_for_predicate-183"><span class="linenos">183</span></a> <span class="n">has_window_expression</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="nodes_for_predicate-184"><a href="#nodes_for_predicate-184"><span class="linenos">184</span></a> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">selects</span> <span class="k">if</span> <span class="n">select</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">Window</span><span class="p">)</span>
+</span><span id="nodes_for_predicate-185"><a href="#nodes_for_predicate-185"><span class="linenos">185</span></a> <span class="p">)</span>
+</span><span id="nodes_for_predicate-186"><a href="#nodes_for_predicate-186"><span class="linenos">186</span></a> <span class="c1"># we can&#39;t push down predicates to select statements if they are referenced in</span>
+</span><span id="nodes_for_predicate-187"><a href="#nodes_for_predicate-187"><span class="linenos">187</span></a> <span class="c1"># multiple places.</span>
+</span><span id="nodes_for_predicate-188"><a href="#nodes_for_predicate-188"><span class="linenos">188</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="nodes_for_predicate-189"><a href="#nodes_for_predicate-189"><span class="linenos">189</span></a> <span class="ow">not</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;group&quot;</span><span class="p">)</span>
+</span><span id="nodes_for_predicate-190"><a href="#nodes_for_predicate-190"><span class="linenos">190</span></a> <span class="ow">and</span> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">&lt;</span> <span class="mi">2</span>
+</span><span id="nodes_for_predicate-191"><a href="#nodes_for_predicate-191"><span class="linenos">191</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_window_expression</span>
+</span><span id="nodes_for_predicate-192"><a href="#nodes_for_predicate-192"><span class="linenos">192</span></a> <span class="p">):</span>
+</span><span id="nodes_for_predicate-193"><a href="#nodes_for_predicate-193"><span class="linenos">193</span></a> <span class="n">nodes</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span>
+</span><span id="nodes_for_predicate-194"><a href="#nodes_for_predicate-194"><span class="linenos">194</span></a> <span class="k">return</span> <span class="n">nodes</span>
</span></pre></div>
@@ -576,21 +592,21 @@ Additionally, we can't remove predicates from their original form.</p>
</div>
<a class="headerlink" href="#replace_aliases"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_aliases-189"><a href="#replace_aliases-189"><span class="linenos">189</span></a><span class="k">def</span> <span class="nf">replace_aliases</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">predicate</span><span class="p">):</span>
-</span><span id="replace_aliases-190"><a href="#replace_aliases-190"><span class="linenos">190</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="replace_aliases-191"><a href="#replace_aliases-191"><span class="linenos">191</span></a>
-</span><span id="replace_aliases-192"><a href="#replace_aliases-192"><span class="linenos">192</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
-</span><span id="replace_aliases-193"><a href="#replace_aliases-193"><span class="linenos">193</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="replace_aliases-194"><a href="#replace_aliases-194"><span class="linenos">194</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="replace_aliases-195"><a href="#replace_aliases-195"><span class="linenos">195</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="replace_aliases-196"><a href="#replace_aliases-196"><span class="linenos">196</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span>
-</span><span id="replace_aliases-197"><a href="#replace_aliases-197"><span class="linenos">197</span></a>
-</span><span id="replace_aliases-198"><a href="#replace_aliases-198"><span class="linenos">198</span></a> <span class="k">def</span> <span class="nf">_replace_alias</span><span class="p">(</span><span class="n">column</span><span class="p">):</span>
-</span><span id="replace_aliases-199"><a href="#replace_aliases-199"><span class="linenos">199</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</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">aliases</span><span class="p">:</span>
-</span><span id="replace_aliases-200"><a href="#replace_aliases-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">aliases</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="replace_aliases-201"><a href="#replace_aliases-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="replace_aliases-202"><a href="#replace_aliases-202"><span class="linenos">202</span></a>
-</span><span id="replace_aliases-203"><a href="#replace_aliases-203"><span class="linenos">203</span></a> <span class="k">return</span> <span class="n">predicate</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_alias</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="replace_aliases-197"><a href="#replace_aliases-197"><span class="linenos">197</span></a><span class="k">def</span> <span class="nf">replace_aliases</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">predicate</span><span class="p">):</span>
+</span><span id="replace_aliases-198"><a href="#replace_aliases-198"><span class="linenos">198</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="replace_aliases-199"><a href="#replace_aliases-199"><span class="linenos">199</span></a>
+</span><span id="replace_aliases-200"><a href="#replace_aliases-200"><span class="linenos">200</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
+</span><span id="replace_aliases-201"><a href="#replace_aliases-201"><span class="linenos">201</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="replace_aliases-202"><a href="#replace_aliases-202"><span class="linenos">202</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="replace_aliases-203"><a href="#replace_aliases-203"><span class="linenos">203</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="replace_aliases-204"><a href="#replace_aliases-204"><span class="linenos">204</span></a> <span class="n">aliases</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">select</span>
+</span><span id="replace_aliases-205"><a href="#replace_aliases-205"><span class="linenos">205</span></a>
+</span><span id="replace_aliases-206"><a href="#replace_aliases-206"><span class="linenos">206</span></a> <span class="k">def</span> <span class="nf">_replace_alias</span><span class="p">(</span><span class="n">column</span><span class="p">):</span>
+</span><span id="replace_aliases-207"><a href="#replace_aliases-207"><span class="linenos">207</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</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">aliases</span><span class="p">:</span>
+</span><span id="replace_aliases-208"><a href="#replace_aliases-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">aliases</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="replace_aliases-209"><a href="#replace_aliases-209"><span class="linenos">209</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="replace_aliases-210"><a href="#replace_aliases-210"><span class="linenos">210</span></a>
+</span><span id="replace_aliases-211"><a href="#replace_aliases-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="n">predicate</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_alias</span><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/scope.html b/docs/sqlglot/optimizer/scope.html
index bbbc3d6..92bea08 100644
--- a/docs/sqlglot/optimizer/scope.html
+++ b/docs/sqlglot/optimizer/scope.html
@@ -207,6 +207,12 @@
<li>
<a class="function" href="#walk_in_scope">walk_in_scope</a>
</li>
+ <li>
+ <a class="function" href="#find_all_in_scope">find_all_in_scope</a>
+ </li>
+ <li>
+ <a class="function" href="#find_in_scope">find_in_scope</a>
+ </li>
</ul>
@@ -238,7 +244,7 @@
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</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-8"><a href="#L-8"><span class="linenos"> 8</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-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">find_new_name</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">ensure_collection</span><span class="p">,</span> <span class="n">find_new_name</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="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a>
@@ -373,665 +379,675 @@
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">walk_in_scope</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">bfs</span><span class="o">=</span><span class="n">bfs</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="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</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"> Returns the first node in this scope which matches at least one of the specified types.</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="sd"> This does NOT traverse into subscopes.</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">find_in_scope</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">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</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="k">return</span> <span class="n">find_all_in_scope</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">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</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="sd"> Args:</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="sd"> expression_types (type): the expression type(s) to match.</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">):</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="sd"> Replace `old` with `new`.</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="sd"> Returns:</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="sd"> the criteria was found.</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</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><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> match at least one of the specified expression types.</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="sd"> This does NOT traverse into subscopes.</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="sd"> Args:</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="sd"> expression_types (type): the expression type(s) to match.</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</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="sd"> Yields:</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a><span class="sd"> exp.Expression: nodes</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</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">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">):</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">yield</span> <span class="n">expression</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">replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">):</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="sd"> Replace `old` with `new`.</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="sd"> This can be used instead of `exp.Expression.replace` to ensure the `Scope` is kept up-to-date.</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="sd"> Args:</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a><span class="sd"> old (exp.Expression): old node</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a><span class="sd"> new (exp.Expression): new node</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">old</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new</span><span class="p">)</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="nd">@property</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="nf">tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="sd"> List of tables in this scope.</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="sd"> Returns:</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a><span class="sd"> list[exp.Table]: tables</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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="bp">self</span><span class="o">.</span><span class="n">_tables</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="nd">@property</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a><span class="sd"> List of CTEs in this scope.</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a><span class="sd"> Returns:</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a><span class="sd"> list[exp.CTE]: ctes</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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="bp">self</span><span class="o">.</span><span class="n">_ctes</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="nd">@property</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">derived_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="sd"> List of derived tables in this scope.</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> This can be used instead of `exp.Expression.replace` to ensure the `Scope` is kept up-to-date.</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="sd"> Args:</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> old (exp.Expression): old node</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd"> new (exp.Expression): new node</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">old</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new</span><span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</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="nd">@property</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd"> List of tables in this scope.</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="sd"> Returns:</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a><span class="sd"> list[exp.Table]: tables</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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">_tables</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="nd">@property</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="sd"> List of CTEs in this scope.</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="sd"> Returns:</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="sd"> list[exp.CTE]: ctes</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctes</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="nd">@property</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">def</span> <span class="nf">derived_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a><span class="sd"> List of derived tables in this scope.</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="sd"> For example:</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a><span class="sd"> SELECT * FROM (SELECT ...) &lt;- that&#39;s a derived table</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="sd"> Returns:</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="sd"> list[exp.Subquery]: derived tables</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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 class="bp">self</span><span class="o">.</span><span class="n">_derived_tables</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="nd">@property</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">def</span> <span class="nf">udtfs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="sd"> List of &quot;User Defined Tabular Functions&quot; in this scope.</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="sd"> Returns:</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a><span class="sd"> list[exp.UDTF]: UDTFs</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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="bp">self</span><span class="o">.</span><span class="n">_udtfs</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="nd">@property</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">def</span> <span class="nf">subqueries</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a><span class="sd"> List of subqueries in this scope.</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="sd"> For example:</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</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="sd"> For example:</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="sd"> SELECT * FROM (SELECT ...) &lt;- that&#39;s a derived table</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="sd"> Returns:</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a><span class="sd"> list[exp.Subquery]: derived tables</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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="bp">self</span><span class="o">.</span><span class="n">_derived_tables</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="nd">@property</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="nf">udtfs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="sd"> List of &quot;User Defined Tabular Functions&quot; in this scope.</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 class="sd"> Returns:</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a><span class="sd"> list[exp.UDTF]: UDTFs</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_udtfs</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="nd">@property</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">def</span> <span class="nf">subqueries</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="sd"> List of subqueries in this scope.</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a><span class="sd"> Returns:</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="sd"> list[exp.Subqueryable]: subqueries</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</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="bp">self</span><span class="o">.</span><span class="n">_subqueries</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="nd">@property</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a><span class="sd"> List of columns in this scope.</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="sd"> Returns:</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="sd"> list[exp.Column]: Column instances in this scope, plus any</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a><span class="sd"> Columns that reference this scope from correlated subqueries.</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="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_columns</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="n">external_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">column</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">scope</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">subquery_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtf_scopes</span><span class="p">)</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</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">external_columns</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="p">]</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="sd"> For example:</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</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"> Returns:</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a><span class="sd"> list[exp.Subqueryable]: subqueries</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subqueries</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="nd">@property</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="sd"> List of columns in this scope.</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="sd"> Returns:</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="sd"> list[exp.Column]: Column instances in this scope, plus any</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="sd"> Columns that reference this scope from correlated subqueries.</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_columns</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">named_selects</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</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="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span> <span class="o">+</span> <span class="n">external_columns</span><span class="p">:</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">ancestor</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">find_ancestor</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">exp</span><span class="o">.</span><span class="n">Qualify</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">exp</span><span class="o">.</span><span class="n">Having</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">exp</span><span class="o">.</span><span class="n">Table</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 class="k">if</span> <span class="p">(</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="ow">not</span> <span class="n">ancestor</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Func</span><span class="p">))</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Window</span><span class="p">)</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">named_selects</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="p">)</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="p">)</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="p">):</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</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-263"><a href="#L-263"><span class="linenos">263</span></a>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">external_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">column</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="k">for</span> <span class="n">scope</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">subquery_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtf_scopes</span><span class="p">)</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</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">external_columns</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">named_selects</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</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="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span> <span class="o">+</span> <span class="n">external_columns</span><span class="p">:</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">ancestor</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">find_ancestor</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">Select</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">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Having</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">exp</span><span class="o">.</span><span class="n">Table</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 class="k">if</span> <span class="p">(</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="ow">not</span> <span class="n">ancestor</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Func</span><span class="p">))</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Window</span><span class="p">)</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">named_selects</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="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 class="bp">self</span><span class="o">.</span><span class="n">_columns</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</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="nd">@property</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">def</span> <span class="nf">selected_sources</span><span class="p">(</span><span class="bp">self</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"> Mapping of nodes and sources that are actually selected from in this scope.</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="sd"> That is, all tables in a schema are selectable at any point. But a</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd"> table only becomes a selected source if it&#39;s included in a FROM or JOIN clause.</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="sd"> Returns:</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd"> dict[str, (exp.Table|exp.Select, exp.Table|Scope)]: selected sources and nodes</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">result</span> <span class="o">=</span> <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="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span><span class="p">:</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</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;Alias already used: </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-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="bp">self</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-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="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="o">=</span> <span class="n">result</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</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="nd">@property</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="k">def</span> <span class="nf">references</span><span class="p">(</span><span class="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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="ow">is</span> <span class="kc">None</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">_references</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="nd">@property</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">selected_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a><span class="sd"> Mapping of nodes and sources that are actually selected from in this scope.</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="sd"> That is, all tables in a schema are selectable at any point. But a</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a><span class="sd"> table only becomes a selected source if it&#39;s included in a FROM or JOIN clause.</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="sd"> Returns:</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a><span class="sd"> dict[str, (exp.Table|exp.Select, exp.Table|Scope)]: selected sources and nodes</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">result</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><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span><span class="p">:</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Alias already used: </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-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="bp">self</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-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="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="o">=</span> <span class="n">result</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="nd">@property</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="k">def</span> <span class="nf">references</span><span class="p">(</span><span class="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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">,</span> <span class="n">table</span><span class="p">))</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">for</span> <span class="n">expression</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">derived_tables</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtfs</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">_references</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="p">(</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="p">)</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="nd">@property</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">def</span> <span class="nf">cte_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="sd"> Sources that are CTEs.</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="sd"> Returns:</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="sd"> dict[str, Scope]: Mapping of source alias to Scope</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">scope</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">Scope</span><span class="p">)</span> <span class="ow">and</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</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="nd">@property</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">external_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a><span class="sd"> Columns that appear to reference sources in outer scopes.</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="sd"> Returns:</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a><span class="sd"> list[exp.Column]: Column instances that don&#39;t reference</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="sd"> sources in the current scope.</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</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">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selected_sources</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="p">]</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</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="nd">@property</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="k">def</span> <span class="nf">unqualified_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="sd"> Unqualified columns in the current scope.</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a><span class="sd"> Returns:</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a><span class="sd"> list[exp.Column]: Unqualified columns</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">table</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="nd">@property</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">def</span> <span class="nf">join_hints</span><span class="p">(</span><span class="bp">self</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;</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a><span class="sd"> Hints that exist in the scope that reference tables</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="sd"> Returns:</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a><span class="sd"> list[exp.JoinHint]: Join hints that are referenced within the scope</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</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="nd">@property</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">def</span> <span class="nf">pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span><span class="p">:</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">pivot</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span> <span class="k">for</span> <span class="n">pivot</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">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="p">]</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">,</span> <span class="n">table</span><span class="p">))</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">for</span> <span class="n">expression</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">derived_tables</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtfs</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="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</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">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="p">)</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span 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="bp">self</span><span class="o">.</span><span class="n">_references</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="nd">@property</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="k">def</span> <span class="nf">cte_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a><span class="sd"> Sources that are CTEs.</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a><span class="sd"> Returns:</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a><span class="sd"> dict[str, Scope]: Mapping of source alias to Scope</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">scope</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-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">scope</span><span class="p">,</span> <span class="n">Scope</span><span class="p">)</span> <span class="ow">and</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="p">}</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="nd">@property</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="nf">external_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a><span class="sd"> Columns that appear to reference sources in outer scopes.</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="sd"> Returns:</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="sd"> list[exp.Column]: Column instances that don&#39;t reference</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a><span class="sd"> sources in the current scope.</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</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="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selected_sources</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="p">]</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</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="nd">@property</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">def</span> <span class="nf">unqualified_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="sd"> Unqualified columns in the current scope.</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"> Returns:</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="sd"> list[exp.Column]: Unqualified columns</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span><span class="p">]</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="nd">@property</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="nf">join_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a><span class="sd"> Hints that exist in the scope that reference tables</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="sd"> Returns:</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a><span class="sd"> list[exp.JoinHint]: Join hints that are referenced within the scope</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</span> <span class="ow">is</span> <span class="kc">None</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="p">[]</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</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="nd">@property</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">def</span> <span class="nf">pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span><span class="p">:</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">pivot</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span> <span class="k">for</span> <span class="n">pivot</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">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">)</span> <span class="ow">or</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">def</span> <span class="nf">source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_name</span><span class="p">):</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a><span class="sd"> Get all columns in the current scope for a particular source.</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a><span class="sd"> Args:</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a><span class="sd"> source_name (str): Name of the source</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a><span class="sd"> Returns:</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a><span class="sd"> list[exp.Column]: Column instances that reference `source_name`</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</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="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">source_name</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="nd">@property</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">def</span> <span class="nf">is_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a subquery&quot;&quot;&quot;</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">SUBQUERY</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="nd">@property</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">is_derived_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a derived table&quot;&quot;&quot;</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</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="nd">@property</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">is_union</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a union&quot;&quot;&quot;</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</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">def</span> <span class="nf">source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_name</span><span class="p">):</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a><span class="sd"> Get all columns in the current scope for a particular source.</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="sd"> Args:</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="sd"> source_name (str): Name of the source</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a><span class="sd"> Returns:</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a><span class="sd"> list[exp.Column]: Column instances that reference `source_name`</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">source_name</span><span class="p">]</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="nd">@property</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">is_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a subquery&quot;&quot;&quot;</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">SUBQUERY</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="nd">@property</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="k">def</span> <span class="nf">is_derived_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a derived table&quot;&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="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="nd">@property</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">def</span> <span class="nf">is_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a common table expression&quot;&quot;&quot;</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</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="nd">@property</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">def</span> <span class="nf">is_root</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this is the root scope&quot;&quot;&quot;</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">ROOT</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="nd">@property</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">def</span> <span class="nf">is_udtf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a UDTF (User Defined Table Function)&quot;&quot;&quot;</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UDTF</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="nd">@property</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">def</span> <span class="nf">is_correlated_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a correlated subquery&quot;&quot;&quot;</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="nb">bool</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 class="bp">self</span><span class="o">.</span><span class="n">is_subquery</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)))</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">external_columns</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="nd">@property</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">def</span> <span class="nf">is_union</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a union&quot;&quot;&quot;</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">rename_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rename a source in this scope&quot;&quot;&quot;</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">old_name</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">columns</span>
</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="nd">@property</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">is_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a common table expression&quot;&quot;&quot;</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="k">def</span> <span class="nf">add_source</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">source</span><span class="p">):</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a source to this scope&quot;&quot;&quot;</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="nd">@property</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="k">def</span> <span class="nf">is_root</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this is the root scope&quot;&quot;&quot;</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">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">ROOT</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">def</span> <span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove a source from this scope&quot;&quot;&quot;</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</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="nd">@property</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="k">def</span> <span class="nf">is_udtf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a UDTF (User Defined Table Function)&quot;&quot;&quot;</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UDTF</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="nd">@property</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">def</span> <span class="nf">is_correlated_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a correlated subquery&quot;&quot;&quot;</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">return</span> <span class="nb">bool</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 class="bp">self</span><span class="o">.</span><span class="n">is_subquery</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)))</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">external_columns</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="p">)</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">rename_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rename a source in this scope&quot;&quot;&quot;</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">old_name</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">columns</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">def</span> <span class="nf">add_source</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">source</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;Add a source to this scope&quot;&quot;&quot;</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</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">clear_cache</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">def</span> <span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="w"> </span><span class="sd">&quot;&quot;&quot;Remove a source from this scope&quot;&quot;&quot;</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Scope&lt;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</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><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Scope&lt;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="si">}</span><span class="s2">&gt;&quot;</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">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a><span class="sd"> Traverse the scope tree from this node.</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="sd"> Yields:</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a><span class="sd"> Scope: scope instances in depth-first-search post-order</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="k">for</span> <span class="n">child_scope</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><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cte_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_scopes</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="p">):</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">yield from</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">yield</span> <span class="bp">self</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="k">def</span> <span class="nf">ref_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="sd"> Count the number of times each scope in this tree is referenced.</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a><span class="sd"> Returns:</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a><span class="sd"> dict[int, int]: Mapping of Scope instance ID to reference count</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">scope_ref_count</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">traverse</span><span class="p">():</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="n">scope_ref_count</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a><span class="sd"> Traverse the scope tree from this node.</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="sd"> Yields:</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a><span class="sd"> Scope: scope instances in depth-first-search post-order</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">for</span> <span class="n">child_scope</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><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cte_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_scopes</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="p">):</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">yield from</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">yield</span> <span class="bp">self</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">ref_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a><span class="sd"> Count the number of times each scope in this tree is referenced.</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="sd"> Returns:</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a><span class="sd"> dict[int, int]: Mapping of Scope instance ID to reference count</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">scope_ref_count</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">traverse</span><span class="p">():</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="n">scope_ref_count</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><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a><span class="k">def</span> <span class="nf">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Scope</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"> Traverse an expression by its &quot;scopes&quot;.</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a><span class="k">def</span> <span class="nf">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Scope</span><span class="p">]:</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a><span class="sd"> Traverse an expression by its &quot;scopes&quot;.</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="sd"> &quot;Scope&quot; represents the current context of a Select statement.</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="sd"> This is helpful for optimizing queries, where we need more information than</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a><span class="sd"> the expression tree itself. For example, we might care about the source</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a><span class="sd"> names within a subquery. Returns a list because a generator could result in</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a><span class="sd"> incomplete properties which is confusing.</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="sd"> Examples:</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT a FROM (SELECT a FROM x) AS y&quot;)</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a><span class="sd"> &gt;&gt;&gt; scopes = traverse_scope(expression)</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a><span class="sd"> &gt;&gt;&gt; scopes[0].expression.sql(), list(scopes[0].sources)</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a><span class="sd"> (&#39;SELECT a FROM x&#39;, [&#39;x&#39;])</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a><span class="sd"> &gt;&gt;&gt; scopes[1].expression.sql(), list(scopes[1].sources)</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a><span class="sd"> (&#39;SELECT a FROM (SELECT a FROM x) AS y&#39;, [&#39;y&#39;])</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="sd"> Args:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a><span class="sd"> expression (exp.Expression): expression to traverse</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a><span class="sd"> Returns:</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a><span class="sd"> list[Scope]: scope instances</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</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">Unionable</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</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">DDL</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="p">):</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_traverse_scope</span><span class="p">(</span><span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)))</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">return</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="sd"> &quot;Scope&quot; represents the current context of a Select statement.</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="sd"> This is helpful for optimizing queries, where we need more information than</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a><span class="sd"> the expression tree itself. For example, we might care about the source</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a><span class="sd"> names within a subquery. Returns a list because a generator could result in</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a><span class="sd"> incomplete properties which is confusing.</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="sd"> Examples:</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT a FROM (SELECT a FROM x) AS y&quot;)</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a><span class="sd"> &gt;&gt;&gt; scopes = traverse_scope(expression)</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a><span class="sd"> &gt;&gt;&gt; scopes[0].expression.sql(), list(scopes[0].sources)</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a><span class="sd"> (&#39;SELECT a FROM x&#39;, [&#39;x&#39;])</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a><span class="sd"> &gt;&gt;&gt; scopes[1].expression.sql(), list(scopes[1].sources)</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a><span class="sd"> (&#39;SELECT a FROM (SELECT a FROM x) AS y&#39;, [&#39;y&#39;])</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a><span class="k">def</span> <span class="nf">build_scope</span><span 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="n">Scope</span><span class="p">]:</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a><span class="sd"> Build a scope tree.</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="sd"> Args:</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a><span class="sd"> expression (exp.Expression): expression to build the scope tree for</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a><span class="sd"> Returns:</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a><span class="sd"> Scope: root scope</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">if</span> <span class="n">scopes</span><span class="p">:</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="n">scopes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a><span class="sd"> Args:</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a><span class="sd"> expression (exp.Expression): expression to traverse</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a><span class="sd"> Returns:</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a><span class="sd"> list[Scope]: scope instances</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</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">Unionable</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</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">DDL</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="p">):</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_traverse_scope</span><span class="p">(</span><span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)))</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a><span class="k">def</span> <span class="nf">build_scope</span><span 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="n">Scope</span><span class="p">]:</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a><span class="sd"> Build a scope tree.</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a><span class="sd"> Args:</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a><span class="sd"> expression (exp.Expression): expression to build the scope tree for</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a><span class="sd"> Returns:</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a><span class="sd"> Scope: root scope</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">scopes</span><span class="p">:</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="n">scopes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a><span class="k">def</span> <span class="nf">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</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-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">yield from</span> <span class="n">_traverse_select</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">elif</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">Union</span><span class="p">):</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">yield from</span> <span class="n">_traverse_union</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="k">elif</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">Subquery</span><span class="p">):</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="k">yield from</span> <span class="n">_traverse_subqueries</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">elif</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">Table</span><span class="p">):</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="k">yield from</span> <span class="n">_traverse_tables</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="k">elif</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-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">yield from</span> <span class="n">_traverse_udtfs</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="k">elif</span> <span class="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">DDL</span><span class="p">):</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="k">yield from</span> <span class="n">_traverse_ddl</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="s2">&quot;Cannot traverse scope </span><span class="si">%s</span><span class="s2"> with type &#39;</span><span class="si">%s</span><span class="s2">&#39;&quot;</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="nb">type</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="p">)</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="k">return</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">yield</span> <span class="n">scope</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a><span class="k">def</span> <span class="nf">_traverse_select</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">yield from</span> <span class="n">_traverse_tables</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">yield from</span> <span class="n">_traverse_subqueries</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a>
</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a><span class="k">def</span> <span class="nf">_traverse_scope</span><span class="p">(</span><span class="n">scope</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="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-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">yield from</span> <span class="n">_traverse_select</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">elif</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">Union</span><span class="p">):</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">yield from</span> <span class="n">_traverse_union</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="k">elif</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">Subquery</span><span class="p">):</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="k">yield from</span> <span class="n">_traverse_subqueries</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="k">elif</span> <span class="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">Table</span><span class="p">):</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="k">yield from</span> <span class="n">_traverse_tables</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="k">elif</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-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="k">yield from</span> <span class="n">_traverse_udtfs</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="k">elif</span> <span class="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">DDL</span><span class="p">):</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="k">yield from</span> <span class="n">_traverse_ddl</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="s2">&quot;Cannot traverse scope </span><span class="si">%s</span><span class="s2"> with type &#39;</span><span class="si">%s</span><span class="s2">&#39;&quot;</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="nb">type</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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 class="k">return</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="k">yield</span> <span class="n">scope</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a><span class="k">def</span> <span class="nf">_traverse_union</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="c1"># The last scope to be yield should be the top most scope</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="n">left</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="k">for</span> <span class="n">left</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">branch</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">left</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span><span class="p">)):</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="k">yield</span> <span class="n">left</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="n">right</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">branch</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">right</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span><span class="p">)):</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="k">yield</span> <span class="n">right</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">union_scopes</span> <span class="o">=</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-551"><a href="#L-551"><span class="linenos">551</span></a>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a><span class="k">def</span> <span class="nf">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="n">sources</span> <span class="o">=</span> <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="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="n">recursive_scope</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a><span class="k">def</span> <span class="nf">_traverse_select</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="k">yield from</span> <span class="n">_traverse_tables</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="k">yield from</span> <span class="n">_traverse_subqueries</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="c1"># if the scope is a recursive cte, it must be in the form of base_case UNION recursive.</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="c1"># thus the recursive scope is the first section of the union.</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">union</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a><span class="k">def</span> <span class="nf">_traverse_union</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a>
-</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="c1"># The last scope to be yield should be the top most scope</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">left</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="k">for</span> <span class="n">left</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">branch</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">left</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span><span class="p">)):</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="k">yield</span> <span class="n">left</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">right</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">branch</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">right</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span><span class="p">)):</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="k">yield</span> <span class="n">right</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a>
-</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">union_scopes</span> <span class="o">=</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-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">union</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="n">recursive_scope</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span><span class="n">union</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a>
+</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="n">child_scope</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="n">chain_sources</span><span class="o">=</span><span class="n">sources</span><span class="p">,</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">outer_column_list</span><span class="o">=</span><span class="n">cte</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="p">)</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="p">):</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="k">yield</span> <span class="n">child_scope</span>
</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a>
-</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a><span class="k">def</span> <span class="nf">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="n">sources</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a>
-</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">ctes</span><span class="p">:</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="n">recursive_scope</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a>
-</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="c1"># if the scope is a recursive cte, it must be in the form of base_case UNION recursive.</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="c1"># thus the recursive scope is the first section of the union.</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="n">union</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">child_scope</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a>
+</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="n">recursive_scope</span><span class="p">:</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="n">child_scope</span><span class="o">.</span><span class="n">add_source</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">recursive_scope</span><span class="p">)</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a>
+</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="c1"># append the final child_scope yielded</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="k">if</span> <span class="n">child_scope</span><span class="p">:</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">cte_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_scope</span><span class="p">)</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a>
+</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a>
</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a>
-</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">union</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="n">recursive_scope</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span><span class="n">union</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a>
-</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">child_scope</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a>
-</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">chain_sources</span><span class="o">=</span><span class="n">sources</span><span class="p">,</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">outer_column_list</span><span class="o">=</span><span class="n">cte</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="p">)</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="k">yield</span> <span class="n">child_scope</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a>
-</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">alias</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">child_scope</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a><span class="k">def</span> <span class="nf">_is_derived_table</span><span 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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a><span class="sd"> We represent (tbl1 JOIN tbl2) as a Subquery, but it&#39;s not really a &quot;derived table&quot;,</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a><span class="sd"> as it doesn&#39;t introduce a new scope. If an alias is present, it shadows all names</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a><span class="sd"> under the Subquery, so that&#39;s one exception to this rule.</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">expression</span><span class="o">.</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">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-600"><a href="#L-600"><span class="linenos">600</span></a>
+</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a>
+</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a><span class="k">def</span> <span class="nf">_traverse_tables</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">sources</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a>
+</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="c1"># Traverse FROMs, JOINs, and LATERALs in the order they are defined</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="n">from_</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;from&quot;</span><span class="p">)</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">from_</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a>
-</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a> <span class="k">if</span> <span class="n">recursive_scope</span><span class="p">:</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="n">child_scope</span><span class="o">.</span><span class="n">add_source</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">recursive_scope</span><span class="p">)</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a> <span class="k">for</span> <span class="n">join</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">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-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a>
-</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="c1"># append the final child_scope yielded</span>
-</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="k">if</span> <span class="n">child_scope</span><span class="p">:</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">cte_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_scope</span><span class="p">)</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a>
-</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
-</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a>
-</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a>
-</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a><span class="k">def</span> <span class="nf">_is_derived_table</span><span 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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a><span class="sd"> We represent (tbl1 JOIN tbl2) as a Subquery, but it&#39;s not really a &quot;derived table&quot;,</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a><span class="sd"> as it doesn&#39;t introduce a new scope. If an alias is present, it shadows all names</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a><span class="sd"> under the Subquery, so that&#39;s one exception to this rule.</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">expression</span><span class="o">.</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">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-628"><a href="#L-628"><span class="linenos">628</span></a>
-</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a>
-</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a><span class="k">def</span> <span class="nf">_traverse_tables</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="n">sources</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a>
-</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="c1"># Traverse FROMs, JOINs, and LATERALs in the order they are defined</span>
-</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="n">expressions</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="n">from_</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;from&quot;</span><span class="p">)</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">from_</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a>
-</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a> <span class="k">for</span> <span class="n">join</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">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-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a>
-</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="k">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">Table</span><span class="p">):</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a>
-</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="n">expressions</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">expression</span><span class="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-646"><a href="#L-646"><span class="linenos">646</span></a>
-</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="k">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-648"><a href="#L-648"><span class="linenos">648</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">Table</span><span class="p">):</span>
-</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="n">source_name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a>
-</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="k">if</span> <span class="n">table_name</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="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="c1"># This is a reference to a parent source (e.g. a CTE), not an actual table, unless</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="c1"># it is pivoted, because then we get back a new table and hence a new source.</span>
-</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="n">expression</span><span class="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-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="n">pivots</span><span class="p">:</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">pivots</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">source_name</span><span class="p">]</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">table_name</span><span class="p">]</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="k">elif</span> <span class="n">source_name</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">:</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">find_new_name</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">table_name</span><span class="p">)]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">source_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a>
-</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="c1"># Make sure to not include the joins twice</span>
-</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a>
-</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="k">continue</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos">614</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">Table</span><span class="p">):</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a>
+</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="n">expressions</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">expression</span><span class="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-618"><a href="#L-618"><span class="linenos">618</span></a>
+</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a> <span class="k">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-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a> <span class="n">source_name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a>
+</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="k">if</span> <span class="n">table_name</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="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
+</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="c1"># This is a reference to a parent source (e.g. a CTE), not an actual table, unless</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="c1"># it is pivoted, because then we get back a new table and hence a new source.</span>
+</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="n">expression</span><span class="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-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="k">if</span> <span class="n">pivots</span><span class="p">:</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">pivots</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">source_name</span><span class="p">]</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">table_name</span><span class="p">]</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a> <span class="k">elif</span> <span class="n">source_name</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">:</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">find_new_name</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">table_name</span><span class="p">)]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">source_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a>
+</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="c1"># Make sure to not include the joins twice</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">scope</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">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a>
+</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a> <span class="k">continue</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a>
+</span><span id="L-643"><a href="#L-643"><span class="linenos">643</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">DerivedTable</span><span class="p">):</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="k">continue</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a>
+</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="n">lateral_sources</span> <span class="o">=</span> <span class="n">sources</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="n">scope_type</span> <span class="o">=</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UDTF</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">udtf_scopes</span>
+</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="k">elif</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a> <span class="n">lateral_sources</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="n">scope_type</span> <span class="o">=</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">derived_table_scopes</span>
+</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="c1"># Makes sure we check for possible sources in nested table constructs</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
+</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="k">continue</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a>
+</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a> <span class="n">lateral_sources</span><span class="o">=</span><span class="n">lateral_sources</span><span class="p">,</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="n">outer_column_list</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">scope_type</span><span class="p">,</span>
+</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="p">)</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="p">):</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="k">yield</span> <span class="n">child_scope</span>
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a>
-</span><span id="L-671"><a href="#L-671"><span class="linenos">671</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">DerivedTable</span><span class="p">):</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="k">continue</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a>
-</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="n">lateral_sources</span> <span class="o">=</span> <span class="n">sources</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="n">scope_type</span> <span class="o">=</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UDTF</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">udtf_scopes</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="k">elif</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="n">lateral_sources</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">scope_type</span> <span class="o">=</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">derived_table_scopes</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a> <span class="c1"># Makes sure we check for possible sources in nested table constructs</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[])</span>
-</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="k">continue</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a>
-</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
-</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="n">lateral_sources</span><span class="o">=</span><span class="n">lateral_sources</span><span class="p">,</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="n">outer_column_list</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">scope_type</span><span class="p">,</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <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="k">yield</span> <span class="n">child_scope</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="c1"># Tables without aliases will be set as &quot;&quot;</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a> <span class="c1"># This shouldn&#39;t be a problem once qualify_columns runs, as it adds aliases on everything.</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="c1"># Until then, this means that only a single, unaliased derived table is allowed (rather,</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a> <span class="c1"># the latest one wins.</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">child_scope</span>
-</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="c1"># append the final child_scope yielded</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="n">scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_scope</span><span class="p">)</span>
-</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">table_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_scope</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="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
-</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a>
-</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a>
-</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a><span class="k">def</span> <span class="nf">_traverse_subqueries</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="k">for</span> <span class="n">subquery</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">subqueries</span><span class="p">:</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="n">top</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span><span class="n">subquery</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">SUBQUERY</span><span class="p">)):</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a> <span class="k">yield</span> <span class="n">child_scope</span>
-</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a> <span class="n">top</span> <span class="o">=</span> <span class="n">child_scope</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">subquery_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">top</span><span class="p">)</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a>
+</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="c1"># Tables without aliases will be set as &quot;&quot;</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="c1"># This shouldn&#39;t be a problem once qualify_columns runs, as it adds aliases on everything.</span>
+</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="c1"># Until then, this means that only a single, unaliased derived table is allowed (rather,</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="c1"># the latest one wins.</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">child_scope</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="c1"># append the final child_scope yielded</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="n">scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_scope</span><span class="p">)</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">table_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_scope</span><span class="p">)</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="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a>
+</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a>
+</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a><span class="k">def</span> <span class="nf">_traverse_subqueries</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="k">for</span> <span class="n">subquery</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">subqueries</span><span class="p">:</span>
+</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="n">top</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span><span class="n">subquery</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">SUBQUERY</span><span class="p">)):</span>
+</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="k">yield</span> <span class="n">child_scope</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a> <span class="n">top</span> <span class="o">=</span> <span class="n">child_scope</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">subquery_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">top</span><span class="p">)</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a>
+</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a>
+</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a><span class="k">def</span> <span class="nf">_traverse_udtfs</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="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">Unnest</span><span class="p">):</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="n">expressions</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">expressions</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="k">elif</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">Lateral</span><span class="p">):</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a> <span class="n">expressions</span> <span class="o">=</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">this</span><span class="p">]</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="n">expressions</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><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="n">sources</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos">702</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-703"><a href="#L-703"><span class="linenos">703</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">Subquery</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a> <span class="n">top</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span><span class="p">,</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a> <span class="n">outer_column_list</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="p">)</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a> <span class="p">):</span>
+</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a> <span class="k">yield</span> <span class="n">child_scope</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="n">top</span> <span class="o">=</span> <span class="n">child_scope</span>
+</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">child_scope</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a>
+</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">derived_table_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">top</span><span class="p">)</span>
+</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">table_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">top</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="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a>
-</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a><span class="k">def</span> <span class="nf">_traverse_udtfs</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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">Unnest</span><span class="p">):</span>
-</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="n">expressions</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">expressions</span>
-</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="k">elif</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">Lateral</span><span class="p">):</span>
-</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a> <span class="n">expressions</span> <span class="o">=</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">this</span><span class="p">]</span>
-</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a>
-</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">sources</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-730"><a href="#L-730"><span class="linenos">730</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-731"><a href="#L-731"><span class="linenos">731</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">Subquery</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_is_derived_table</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="n">top</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a> <span class="k">for</span> <span class="n">child_scope</span> <span class="ow">in</span> <span class="n">_traverse_scope</span><span class="p">(</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
-</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span><span class="p">,</span>
-</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a> <span class="n">outer_column_list</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="L-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 class="p">):</span>
-</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a> <span class="k">yield</span> <span class="n">child_scope</span>
-</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a> <span class="n">top</span> <span class="o">=</span> <span class="n">child_scope</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">child_scope</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">def</span> <span class="nf">_traverse_ddl</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a>
+</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a> <span class="n">query_scope</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="n">scope</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">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span><span class="p">,</span> <span class="n">chain_sources</span><span class="o">=</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a> <span class="p">)</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="n">query_scope</span><span class="o">.</span><span class="n">_collect</span><span class="p">()</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">query_scope</span><span class="o">.</span><span class="n">_ctes</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">ctes</span> <span class="o">+</span> <span class="n">query_scope</span><span class="o">.</span><span class="n">_ctes</span>
+</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">yield from</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">query_scope</span><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><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a><span class="sd"> nodes that start child scopes.</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="sd"> Args:</span>
+</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a><span class="sd"> expression (exp.Expression):</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
+</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a>
-</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">derived_table_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">top</span><span class="p">)</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">table_scopes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">top</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">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">sources</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><span id="L-750"><a href="#L-750"><span class="linenos">750</span></a><span class="k">def</span> <span class="nf">_traverse_ddl</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-751"><a href="#L-751"><span class="linenos">751</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><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">query_scope</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="n">scope</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">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span><span class="p">,</span> <span class="n">chain_sources</span><span class="o">=</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span>
-</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a> <span class="p">)</span>
-</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="n">query_scope</span><span class="o">.</span><span class="n">_collect</span><span class="p">()</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a> <span class="n">query_scope</span><span class="o">.</span><span class="n">_ctes</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">ctes</span> <span class="o">+</span> <span class="n">query_scope</span><span class="o">.</span><span class="n">_ctes</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a>
-</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <span class="k">yield from</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">query_scope</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><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
-</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a><span class="sd"> nodes that start child scopes.</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="sd"> Args:</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a><span class="sd"> expression (exp.Expression):</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos">770</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</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="sd"> Yields:</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a> <span class="c1"># We&#39;ll use this variable to pass state into the dfs generator.</span>
-</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
-</span><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</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">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="n">prune</span><span class="p">):</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a><span class="sd"> Yields:</span>
+</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
+</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-747"><a href="#L-747"><span class="linenos">747</span></a> <span class="c1"># We&#39;ll use this variable to pass state into the dfs generator.</span>
+</span><span id="L-748"><a href="#L-748"><span class="linenos">748</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos">749</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</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="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="n">prune</span><span class="p">):</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos">752</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</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="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</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="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a> <span class="k">continue</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <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">CTE</span><span class="p">)</span>
+</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a> <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">Subquery</span><span class="p">)</span>
+</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
+</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a> <span class="p">)</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="ow">or</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">UDTF</span><span class="p">)</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a> <span class="ow">or</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-767"><a href="#L-767"><span class="linenos">767</span></a> <span class="p">):</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">True</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)):</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos">771</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
+</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
+</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a> <span class="k">for</span> <span class="n">arg</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">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</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><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a><span class="k">def</span> <span class="nf">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</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 class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos">779</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
+</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a><span class="sd"> match at least one of the specified expression types.</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">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
+</span><span id="L-782"><a href="#L-782"><span class="linenos">782</span></a><span class="sd"> This does NOT traverse into subscopes.</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">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a> <span class="k">continue</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a> <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">CTE</span><span class="p">)</span>
-</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a> <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">Subquery</span><span class="p">)</span>
-</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
-</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a> <span class="p">)</span>
-</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a> <span class="ow">or</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">UDTF</span><span class="p">)</span>
-</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="ow">or</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-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="n">prune</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a>
-</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)):</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a> <span class="k">for</span> <span class="n">arg</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">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
+</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a><span class="sd"> Args:</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a><span class="sd"> expression (exp.Expression):</span>
+</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
+</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
+</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a>
+</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a><span class="sd"> Yields:</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a><span class="sd"> exp.Expression: nodes</span>
+</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
+</span><span id="L-793"><a href="#L-793"><span class="linenos">793</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">tuple</span><span class="p">(</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-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="k">yield</span> <span class="n">expression</span>
+</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a>
+</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">find_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</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;</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</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="sd"> This does NOT traverse into subscopes.</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="sd"> Args:</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a><span class="sd"> expression (exp.Expression):</span>
+</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos">807</span></a>
+</span><span id="L-808"><a href="#L-808"><span class="linenos">808</span></a><span class="sd"> Returns:</span>
+</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos">810</span></a><span class="sd"> the criteria was found.</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos">811</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-812"><a href="#L-812"><span class="linenos">812</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
</span></pre></div>
@@ -1288,350 +1304,322 @@
</span><span id="Scope-142"><a href="#Scope-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">walk_in_scope</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">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
</span><span id="Scope-143"><a href="#Scope-143"><span class="linenos">143</span></a>
</span><span id="Scope-144"><a href="#Scope-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Scope-145"><a href="#Scope-145"><span class="linenos">145</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-146"><a href="#Scope-146"><span class="linenos">146</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
-</span><span id="Scope-147"><a href="#Scope-147"><span class="linenos">147</span></a>
-</span><span id="Scope-148"><a href="#Scope-148"><span class="linenos">148</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
+</span><span id="Scope-145"><a href="#Scope-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">find_in_scope</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">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
+</span><span id="Scope-146"><a href="#Scope-146"><span class="linenos">146</span></a>
+</span><span id="Scope-147"><a href="#Scope-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Scope-148"><a href="#Scope-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">find_all_in_scope</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">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
</span><span id="Scope-149"><a href="#Scope-149"><span class="linenos">149</span></a>
-</span><span id="Scope-150"><a href="#Scope-150"><span class="linenos">150</span></a><span class="sd"> Args:</span>
-</span><span id="Scope-151"><a href="#Scope-151"><span class="linenos">151</span></a><span class="sd"> expression_types (type): the expression type(s) to match.</span>
-</span><span id="Scope-152"><a href="#Scope-152"><span class="linenos">152</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
+</span><span id="Scope-150"><a href="#Scope-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">):</span>
+</span><span id="Scope-151"><a href="#Scope-151"><span class="linenos">151</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-152"><a href="#Scope-152"><span class="linenos">152</span></a><span class="sd"> Replace `old` with `new`.</span>
</span><span id="Scope-153"><a href="#Scope-153"><span class="linenos">153</span></a>
-</span><span id="Scope-154"><a href="#Scope-154"><span class="linenos">154</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-155"><a href="#Scope-155"><span class="linenos">155</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
-</span><span id="Scope-156"><a href="#Scope-156"><span class="linenos">156</span></a><span class="sd"> the criteria was found.</span>
-</span><span id="Scope-157"><a href="#Scope-157"><span class="linenos">157</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-158"><a href="#Scope-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Scope-159"><a href="#Scope-159"><span class="linenos">159</span></a>
-</span><span id="Scope-160"><a href="#Scope-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Scope-161"><a href="#Scope-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-162"><a href="#Scope-162"><span class="linenos">162</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
-</span><span id="Scope-163"><a href="#Scope-163"><span class="linenos">163</span></a><span class="sd"> match at least one of the specified expression types.</span>
-</span><span id="Scope-164"><a href="#Scope-164"><span class="linenos">164</span></a>
-</span><span id="Scope-165"><a href="#Scope-165"><span class="linenos">165</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
-</span><span id="Scope-166"><a href="#Scope-166"><span class="linenos">166</span></a>
-</span><span id="Scope-167"><a href="#Scope-167"><span class="linenos">167</span></a><span class="sd"> Args:</span>
-</span><span id="Scope-168"><a href="#Scope-168"><span class="linenos">168</span></a><span class="sd"> expression_types (type): the expression type(s) to match.</span>
-</span><span id="Scope-169"><a href="#Scope-169"><span class="linenos">169</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
-</span><span id="Scope-170"><a href="#Scope-170"><span class="linenos">170</span></a>
-</span><span id="Scope-171"><a href="#Scope-171"><span class="linenos">171</span></a><span class="sd"> Yields:</span>
-</span><span id="Scope-172"><a href="#Scope-172"><span class="linenos">172</span></a><span class="sd"> exp.Expression: nodes</span>
-</span><span id="Scope-173"><a href="#Scope-173"><span class="linenos">173</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-174"><a href="#Scope-174"><span class="linenos">174</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
-</span><span id="Scope-175"><a href="#Scope-175"><span class="linenos">175</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">expression_types</span><span class="p">):</span>
-</span><span id="Scope-176"><a href="#Scope-176"><span class="linenos">176</span></a> <span class="k">yield</span> <span class="n">expression</span>
-</span><span id="Scope-177"><a href="#Scope-177"><span class="linenos">177</span></a>
-</span><span id="Scope-178"><a href="#Scope-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">):</span>
-</span><span id="Scope-179"><a href="#Scope-179"><span class="linenos">179</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-180"><a href="#Scope-180"><span class="linenos">180</span></a><span class="sd"> Replace `old` with `new`.</span>
-</span><span id="Scope-181"><a href="#Scope-181"><span class="linenos">181</span></a>
-</span><span id="Scope-182"><a href="#Scope-182"><span class="linenos">182</span></a><span class="sd"> This can be used instead of `exp.Expression.replace` to ensure the `Scope` is kept up-to-date.</span>
-</span><span id="Scope-183"><a href="#Scope-183"><span class="linenos">183</span></a>
-</span><span id="Scope-184"><a href="#Scope-184"><span class="linenos">184</span></a><span class="sd"> Args:</span>
-</span><span id="Scope-185"><a href="#Scope-185"><span class="linenos">185</span></a><span class="sd"> old (exp.Expression): old node</span>
-</span><span id="Scope-186"><a href="#Scope-186"><span class="linenos">186</span></a><span class="sd"> new (exp.Expression): new node</span>
-</span><span id="Scope-187"><a href="#Scope-187"><span class="linenos">187</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-188"><a href="#Scope-188"><span class="linenos">188</span></a> <span class="n">old</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new</span><span class="p">)</span>
-</span><span id="Scope-189"><a href="#Scope-189"><span class="linenos">189</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="Scope-190"><a href="#Scope-190"><span class="linenos">190</span></a>
-</span><span id="Scope-191"><a href="#Scope-191"><span class="linenos">191</span></a> <span class="nd">@property</span>
-</span><span id="Scope-192"><a href="#Scope-192"><span class="linenos">192</span></a> <span class="k">def</span> <span class="nf">tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-193"><a href="#Scope-193"><span class="linenos">193</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-194"><a href="#Scope-194"><span class="linenos">194</span></a><span class="sd"> List of tables in this scope.</span>
-</span><span id="Scope-195"><a href="#Scope-195"><span class="linenos">195</span></a>
-</span><span id="Scope-196"><a href="#Scope-196"><span class="linenos">196</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-197"><a href="#Scope-197"><span class="linenos">197</span></a><span class="sd"> list[exp.Table]: tables</span>
-</span><span id="Scope-198"><a href="#Scope-198"><span class="linenos">198</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-199"><a href="#Scope-199"><span class="linenos">199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="Scope-200"><a href="#Scope-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tables</span>
-</span><span id="Scope-201"><a href="#Scope-201"><span class="linenos">201</span></a>
-</span><span id="Scope-202"><a href="#Scope-202"><span class="linenos">202</span></a> <span class="nd">@property</span>
-</span><span id="Scope-203"><a href="#Scope-203"><span class="linenos">203</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="Scope-204"><a href="#Scope-204"><span class="linenos">204</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-205"><a href="#Scope-205"><span class="linenos">205</span></a><span class="sd"> List of CTEs in this scope.</span>
-</span><span id="Scope-206"><a href="#Scope-206"><span class="linenos">206</span></a>
-</span><span id="Scope-207"><a href="#Scope-207"><span class="linenos">207</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-208"><a href="#Scope-208"><span class="linenos">208</span></a><span class="sd"> list[exp.CTE]: ctes</span>
-</span><span id="Scope-209"><a href="#Scope-209"><span class="linenos">209</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-210"><a href="#Scope-210"><span class="linenos">210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="Scope-211"><a href="#Scope-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctes</span>
-</span><span id="Scope-212"><a href="#Scope-212"><span class="linenos">212</span></a>
-</span><span id="Scope-213"><a href="#Scope-213"><span class="linenos">213</span></a> <span class="nd">@property</span>
-</span><span id="Scope-214"><a href="#Scope-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">derived_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-215"><a href="#Scope-215"><span class="linenos">215</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-216"><a href="#Scope-216"><span class="linenos">216</span></a><span class="sd"> List of derived tables in this scope.</span>
+</span><span id="Scope-154"><a href="#Scope-154"><span class="linenos">154</span></a><span class="sd"> This can be used instead of `exp.Expression.replace` to ensure the `Scope` is kept up-to-date.</span>
+</span><span id="Scope-155"><a href="#Scope-155"><span class="linenos">155</span></a>
+</span><span id="Scope-156"><a href="#Scope-156"><span class="linenos">156</span></a><span class="sd"> Args:</span>
+</span><span id="Scope-157"><a href="#Scope-157"><span class="linenos">157</span></a><span class="sd"> old (exp.Expression): old node</span>
+</span><span id="Scope-158"><a href="#Scope-158"><span class="linenos">158</span></a><span class="sd"> new (exp.Expression): new node</span>
+</span><span id="Scope-159"><a href="#Scope-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-160"><a href="#Scope-160"><span class="linenos">160</span></a> <span class="n">old</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new</span><span class="p">)</span>
+</span><span id="Scope-161"><a href="#Scope-161"><span class="linenos">161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
+</span><span id="Scope-162"><a href="#Scope-162"><span class="linenos">162</span></a>
+</span><span id="Scope-163"><a href="#Scope-163"><span class="linenos">163</span></a> <span class="nd">@property</span>
+</span><span id="Scope-164"><a href="#Scope-164"><span class="linenos">164</span></a> <span class="k">def</span> <span class="nf">tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-165"><a href="#Scope-165"><span class="linenos">165</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-166"><a href="#Scope-166"><span class="linenos">166</span></a><span class="sd"> List of tables in this scope.</span>
+</span><span id="Scope-167"><a href="#Scope-167"><span class="linenos">167</span></a>
+</span><span id="Scope-168"><a href="#Scope-168"><span class="linenos">168</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-169"><a href="#Scope-169"><span class="linenos">169</span></a><span class="sd"> list[exp.Table]: tables</span>
+</span><span id="Scope-170"><a href="#Scope-170"><span class="linenos">170</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-171"><a href="#Scope-171"><span class="linenos">171</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="Scope-172"><a href="#Scope-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tables</span>
+</span><span id="Scope-173"><a href="#Scope-173"><span class="linenos">173</span></a>
+</span><span id="Scope-174"><a href="#Scope-174"><span class="linenos">174</span></a> <span class="nd">@property</span>
+</span><span id="Scope-175"><a href="#Scope-175"><span class="linenos">175</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="Scope-176"><a href="#Scope-176"><span class="linenos">176</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-177"><a href="#Scope-177"><span class="linenos">177</span></a><span class="sd"> List of CTEs in this scope.</span>
+</span><span id="Scope-178"><a href="#Scope-178"><span class="linenos">178</span></a>
+</span><span id="Scope-179"><a href="#Scope-179"><span class="linenos">179</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-180"><a href="#Scope-180"><span class="linenos">180</span></a><span class="sd"> list[exp.CTE]: ctes</span>
+</span><span id="Scope-181"><a href="#Scope-181"><span class="linenos">181</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-182"><a href="#Scope-182"><span class="linenos">182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="Scope-183"><a href="#Scope-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ctes</span>
+</span><span id="Scope-184"><a href="#Scope-184"><span class="linenos">184</span></a>
+</span><span id="Scope-185"><a href="#Scope-185"><span class="linenos">185</span></a> <span class="nd">@property</span>
+</span><span id="Scope-186"><a href="#Scope-186"><span class="linenos">186</span></a> <span class="k">def</span> <span class="nf">derived_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-187"><a href="#Scope-187"><span class="linenos">187</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-188"><a href="#Scope-188"><span class="linenos">188</span></a><span class="sd"> List of derived tables in this scope.</span>
+</span><span id="Scope-189"><a href="#Scope-189"><span class="linenos">189</span></a>
+</span><span id="Scope-190"><a href="#Scope-190"><span class="linenos">190</span></a><span class="sd"> For example:</span>
+</span><span id="Scope-191"><a href="#Scope-191"><span class="linenos">191</span></a><span class="sd"> SELECT * FROM (SELECT ...) &lt;- that&#39;s a derived table</span>
+</span><span id="Scope-192"><a href="#Scope-192"><span class="linenos">192</span></a>
+</span><span id="Scope-193"><a href="#Scope-193"><span class="linenos">193</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-194"><a href="#Scope-194"><span class="linenos">194</span></a><span class="sd"> list[exp.Subquery]: derived tables</span>
+</span><span id="Scope-195"><a href="#Scope-195"><span class="linenos">195</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-196"><a href="#Scope-196"><span class="linenos">196</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="Scope-197"><a href="#Scope-197"><span class="linenos">197</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_derived_tables</span>
+</span><span id="Scope-198"><a href="#Scope-198"><span class="linenos">198</span></a>
+</span><span id="Scope-199"><a href="#Scope-199"><span class="linenos">199</span></a> <span class="nd">@property</span>
+</span><span id="Scope-200"><a href="#Scope-200"><span class="linenos">200</span></a> <span class="k">def</span> <span class="nf">udtfs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-201"><a href="#Scope-201"><span class="linenos">201</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-202"><a href="#Scope-202"><span class="linenos">202</span></a><span class="sd"> List of &quot;User Defined Tabular Functions&quot; in this scope.</span>
+</span><span id="Scope-203"><a href="#Scope-203"><span class="linenos">203</span></a>
+</span><span id="Scope-204"><a href="#Scope-204"><span class="linenos">204</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-205"><a href="#Scope-205"><span class="linenos">205</span></a><span class="sd"> list[exp.UDTF]: UDTFs</span>
+</span><span id="Scope-206"><a href="#Scope-206"><span class="linenos">206</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-207"><a href="#Scope-207"><span class="linenos">207</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="Scope-208"><a href="#Scope-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_udtfs</span>
+</span><span id="Scope-209"><a href="#Scope-209"><span class="linenos">209</span></a>
+</span><span id="Scope-210"><a href="#Scope-210"><span class="linenos">210</span></a> <span class="nd">@property</span>
+</span><span id="Scope-211"><a href="#Scope-211"><span class="linenos">211</span></a> <span class="k">def</span> <span class="nf">subqueries</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-212"><a href="#Scope-212"><span class="linenos">212</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-213"><a href="#Scope-213"><span class="linenos">213</span></a><span class="sd"> List of subqueries in this scope.</span>
+</span><span id="Scope-214"><a href="#Scope-214"><span class="linenos">214</span></a>
+</span><span id="Scope-215"><a href="#Scope-215"><span class="linenos">215</span></a><span class="sd"> For example:</span>
+</span><span id="Scope-216"><a href="#Scope-216"><span class="linenos">216</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</span>
</span><span id="Scope-217"><a href="#Scope-217"><span class="linenos">217</span></a>
-</span><span id="Scope-218"><a href="#Scope-218"><span class="linenos">218</span></a><span class="sd"> For example:</span>
-</span><span id="Scope-219"><a href="#Scope-219"><span class="linenos">219</span></a><span class="sd"> SELECT * FROM (SELECT ...) &lt;- that&#39;s a derived table</span>
-</span><span id="Scope-220"><a href="#Scope-220"><span class="linenos">220</span></a>
-</span><span id="Scope-221"><a href="#Scope-221"><span class="linenos">221</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-222"><a href="#Scope-222"><span class="linenos">222</span></a><span class="sd"> list[exp.Subquery]: derived tables</span>
-</span><span id="Scope-223"><a href="#Scope-223"><span class="linenos">223</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-224"><a href="#Scope-224"><span class="linenos">224</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="Scope-225"><a href="#Scope-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_derived_tables</span>
-</span><span id="Scope-226"><a href="#Scope-226"><span class="linenos">226</span></a>
-</span><span id="Scope-227"><a href="#Scope-227"><span class="linenos">227</span></a> <span class="nd">@property</span>
-</span><span id="Scope-228"><a href="#Scope-228"><span class="linenos">228</span></a> <span class="k">def</span> <span class="nf">udtfs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-229"><a href="#Scope-229"><span class="linenos">229</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-230"><a href="#Scope-230"><span class="linenos">230</span></a><span class="sd"> List of &quot;User Defined Tabular Functions&quot; in this scope.</span>
-</span><span id="Scope-231"><a href="#Scope-231"><span class="linenos">231</span></a>
-</span><span id="Scope-232"><a href="#Scope-232"><span class="linenos">232</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-233"><a href="#Scope-233"><span class="linenos">233</span></a><span class="sd"> list[exp.UDTF]: UDTFs</span>
-</span><span id="Scope-234"><a href="#Scope-234"><span class="linenos">234</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-235"><a href="#Scope-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="Scope-236"><a href="#Scope-236"><span class="linenos">236</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_udtfs</span>
-</span><span id="Scope-237"><a href="#Scope-237"><span class="linenos">237</span></a>
-</span><span id="Scope-238"><a href="#Scope-238"><span class="linenos">238</span></a> <span class="nd">@property</span>
-</span><span id="Scope-239"><a href="#Scope-239"><span class="linenos">239</span></a> <span class="k">def</span> <span class="nf">subqueries</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-240"><a href="#Scope-240"><span class="linenos">240</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-241"><a href="#Scope-241"><span class="linenos">241</span></a><span class="sd"> List of subqueries in this scope.</span>
+</span><span id="Scope-218"><a href="#Scope-218"><span class="linenos">218</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-219"><a href="#Scope-219"><span class="linenos">219</span></a><span class="sd"> list[exp.Subqueryable]: subqueries</span>
+</span><span id="Scope-220"><a href="#Scope-220"><span class="linenos">220</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-221"><a href="#Scope-221"><span class="linenos">221</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="Scope-222"><a href="#Scope-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subqueries</span>
+</span><span id="Scope-223"><a href="#Scope-223"><span class="linenos">223</span></a>
+</span><span id="Scope-224"><a href="#Scope-224"><span class="linenos">224</span></a> <span class="nd">@property</span>
+</span><span id="Scope-225"><a href="#Scope-225"><span class="linenos">225</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="Scope-226"><a href="#Scope-226"><span class="linenos">226</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-227"><a href="#Scope-227"><span class="linenos">227</span></a><span class="sd"> List of columns in this scope.</span>
+</span><span id="Scope-228"><a href="#Scope-228"><span class="linenos">228</span></a>
+</span><span id="Scope-229"><a href="#Scope-229"><span class="linenos">229</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-230"><a href="#Scope-230"><span class="linenos">230</span></a><span class="sd"> list[exp.Column]: Column instances in this scope, plus any</span>
+</span><span id="Scope-231"><a href="#Scope-231"><span class="linenos">231</span></a><span class="sd"> Columns that reference this scope from correlated subqueries.</span>
+</span><span id="Scope-232"><a href="#Scope-232"><span class="linenos">232</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-233"><a href="#Scope-233"><span class="linenos">233</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Scope-234"><a href="#Scope-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
+</span><span id="Scope-235"><a href="#Scope-235"><span class="linenos">235</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_columns</span>
+</span><span id="Scope-236"><a href="#Scope-236"><span class="linenos">236</span></a>
+</span><span id="Scope-237"><a href="#Scope-237"><span class="linenos">237</span></a> <span class="n">external_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Scope-238"><a href="#Scope-238"><span class="linenos">238</span></a> <span class="n">column</span>
+</span><span id="Scope-239"><a href="#Scope-239"><span class="linenos">239</span></a> <span class="k">for</span> <span class="n">scope</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">subquery_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtf_scopes</span><span class="p">)</span>
+</span><span id="Scope-240"><a href="#Scope-240"><span class="linenos">240</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">external_columns</span>
+</span><span id="Scope-241"><a href="#Scope-241"><span class="linenos">241</span></a> <span class="p">]</span>
</span><span id="Scope-242"><a href="#Scope-242"><span class="linenos">242</span></a>
-</span><span id="Scope-243"><a href="#Scope-243"><span class="linenos">243</span></a><span class="sd"> For example:</span>
-</span><span id="Scope-244"><a href="#Scope-244"><span class="linenos">244</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</span>
-</span><span id="Scope-245"><a href="#Scope-245"><span class="linenos">245</span></a>
-</span><span id="Scope-246"><a href="#Scope-246"><span class="linenos">246</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-247"><a href="#Scope-247"><span class="linenos">247</span></a><span class="sd"> list[exp.Subqueryable]: subqueries</span>
-</span><span id="Scope-248"><a href="#Scope-248"><span class="linenos">248</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-249"><a href="#Scope-249"><span class="linenos">249</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="Scope-250"><a href="#Scope-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subqueries</span>
-</span><span id="Scope-251"><a href="#Scope-251"><span class="linenos">251</span></a>
-</span><span id="Scope-252"><a href="#Scope-252"><span class="linenos">252</span></a> <span class="nd">@property</span>
-</span><span id="Scope-253"><a href="#Scope-253"><span class="linenos">253</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="Scope-254"><a href="#Scope-254"><span class="linenos">254</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-255"><a href="#Scope-255"><span class="linenos">255</span></a><span class="sd"> List of columns in this scope.</span>
-</span><span id="Scope-256"><a href="#Scope-256"><span class="linenos">256</span></a>
-</span><span id="Scope-257"><a href="#Scope-257"><span class="linenos">257</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-258"><a href="#Scope-258"><span class="linenos">258</span></a><span class="sd"> list[exp.Column]: Column instances in this scope, plus any</span>
-</span><span id="Scope-259"><a href="#Scope-259"><span class="linenos">259</span></a><span class="sd"> Columns that reference this scope from correlated subqueries.</span>
-</span><span id="Scope-260"><a href="#Scope-260"><span class="linenos">260</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-261"><a href="#Scope-261"><span class="linenos">261</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Scope-262"><a href="#Scope-262"><span class="linenos">262</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
-</span><span id="Scope-263"><a href="#Scope-263"><span class="linenos">263</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_columns</span>
+</span><span id="Scope-243"><a href="#Scope-243"><span class="linenos">243</span></a> <span class="n">named_selects</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
+</span><span id="Scope-244"><a href="#Scope-244"><span class="linenos">244</span></a>
+</span><span id="Scope-245"><a href="#Scope-245"><span class="linenos">245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Scope-246"><a href="#Scope-246"><span class="linenos">246</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span> <span class="o">+</span> <span class="n">external_columns</span><span class="p">:</span>
+</span><span id="Scope-247"><a href="#Scope-247"><span class="linenos">247</span></a> <span class="n">ancestor</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span>
+</span><span id="Scope-248"><a href="#Scope-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">exp</span><span class="o">.</span><span class="n">Qualify</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">exp</span><span class="o">.</span><span class="n">Having</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">exp</span><span class="o">.</span><span class="n">Table</span>
+</span><span id="Scope-249"><a href="#Scope-249"><span class="linenos">249</span></a> <span class="p">)</span>
+</span><span id="Scope-250"><a href="#Scope-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Scope-251"><a href="#Scope-251"><span class="linenos">251</span></a> <span class="ow">not</span> <span class="n">ancestor</span>
+</span><span id="Scope-252"><a href="#Scope-252"><span class="linenos">252</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
+</span><span id="Scope-253"><a href="#Scope-253"><span class="linenos">253</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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="Scope-254"><a href="#Scope-254"><span class="linenos">254</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Func</span><span class="p">))</span>
+</span><span id="Scope-255"><a href="#Scope-255"><span class="linenos">255</span></a> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Scope-256"><a href="#Scope-256"><span class="linenos">256</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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="Scope-257"><a href="#Scope-257"><span class="linenos">257</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Scope-258"><a href="#Scope-258"><span class="linenos">258</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Window</span><span class="p">)</span>
+</span><span id="Scope-259"><a href="#Scope-259"><span class="linenos">259</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">named_selects</span>
+</span><span id="Scope-260"><a href="#Scope-260"><span class="linenos">260</span></a> <span class="p">)</span>
+</span><span id="Scope-261"><a href="#Scope-261"><span class="linenos">261</span></a> <span class="p">)</span>
+</span><span id="Scope-262"><a href="#Scope-262"><span class="linenos">262</span></a> <span class="p">):</span>
+</span><span id="Scope-263"><a href="#Scope-263"><span class="linenos">263</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</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="Scope-264"><a href="#Scope-264"><span class="linenos">264</span></a>
-</span><span id="Scope-265"><a href="#Scope-265"><span class="linenos">265</span></a> <span class="n">external_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Scope-266"><a href="#Scope-266"><span class="linenos">266</span></a> <span class="n">column</span>
-</span><span id="Scope-267"><a href="#Scope-267"><span class="linenos">267</span></a> <span class="k">for</span> <span class="n">scope</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">subquery_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtf_scopes</span><span class="p">)</span>
-</span><span id="Scope-268"><a href="#Scope-268"><span class="linenos">268</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">external_columns</span>
-</span><span id="Scope-269"><a href="#Scope-269"><span class="linenos">269</span></a> <span class="p">]</span>
-</span><span id="Scope-270"><a href="#Scope-270"><span class="linenos">270</span></a>
-</span><span id="Scope-271"><a href="#Scope-271"><span class="linenos">271</span></a> <span class="n">named_selects</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
-</span><span id="Scope-272"><a href="#Scope-272"><span class="linenos">272</span></a>
-</span><span id="Scope-273"><a href="#Scope-273"><span class="linenos">273</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Scope-274"><a href="#Scope-274"><span class="linenos">274</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span> <span class="o">+</span> <span class="n">external_columns</span><span class="p">:</span>
-</span><span id="Scope-275"><a href="#Scope-275"><span class="linenos">275</span></a> <span class="n">ancestor</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span>
-</span><span id="Scope-276"><a href="#Scope-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Qualify</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">exp</span><span class="o">.</span><span class="n">Having</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">exp</span><span class="o">.</span><span class="n">Table</span>
-</span><span id="Scope-277"><a href="#Scope-277"><span class="linenos">277</span></a> <span class="p">)</span>
-</span><span id="Scope-278"><a href="#Scope-278"><span class="linenos">278</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Scope-279"><a href="#Scope-279"><span class="linenos">279</span></a> <span class="ow">not</span> <span class="n">ancestor</span>
-</span><span id="Scope-280"><a href="#Scope-280"><span class="linenos">280</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
-</span><span id="Scope-281"><a href="#Scope-281"><span class="linenos">281</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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="Scope-282"><a href="#Scope-282"><span class="linenos">282</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Func</span><span class="p">))</span>
-</span><span id="Scope-283"><a href="#Scope-283"><span class="linenos">283</span></a> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Scope-284"><a href="#Scope-284"><span class="linenos">284</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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="Scope-285"><a href="#Scope-285"><span class="linenos">285</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Scope-286"><a href="#Scope-286"><span class="linenos">286</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ancestor</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">Window</span><span class="p">)</span>
-</span><span id="Scope-287"><a href="#Scope-287"><span class="linenos">287</span></a> <span class="ow">or</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">named_selects</span>
-</span><span id="Scope-288"><a href="#Scope-288"><span class="linenos">288</span></a> <span class="p">)</span>
-</span><span id="Scope-289"><a href="#Scope-289"><span class="linenos">289</span></a> <span class="p">)</span>
-</span><span id="Scope-290"><a href="#Scope-290"><span class="linenos">290</span></a> <span class="p">):</span>
-</span><span id="Scope-291"><a href="#Scope-291"><span class="linenos">291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</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="Scope-292"><a href="#Scope-292"><span class="linenos">292</span></a>
-</span><span id="Scope-293"><a href="#Scope-293"><span class="linenos">293</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span>
+</span><span id="Scope-265"><a href="#Scope-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_columns</span>
+</span><span id="Scope-266"><a href="#Scope-266"><span class="linenos">266</span></a>
+</span><span id="Scope-267"><a href="#Scope-267"><span class="linenos">267</span></a> <span class="nd">@property</span>
+</span><span id="Scope-268"><a href="#Scope-268"><span class="linenos">268</span></a> <span class="k">def</span> <span class="nf">selected_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-269"><a href="#Scope-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-270"><a href="#Scope-270"><span class="linenos">270</span></a><span class="sd"> Mapping of nodes and sources that are actually selected from in this scope.</span>
+</span><span id="Scope-271"><a href="#Scope-271"><span class="linenos">271</span></a>
+</span><span id="Scope-272"><a href="#Scope-272"><span class="linenos">272</span></a><span class="sd"> That is, all tables in a schema are selectable at any point. But a</span>
+</span><span id="Scope-273"><a href="#Scope-273"><span class="linenos">273</span></a><span class="sd"> table only becomes a selected source if it&#39;s included in a FROM or JOIN clause.</span>
+</span><span id="Scope-274"><a href="#Scope-274"><span class="linenos">274</span></a>
+</span><span id="Scope-275"><a href="#Scope-275"><span class="linenos">275</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-276"><a href="#Scope-276"><span class="linenos">276</span></a><span class="sd"> dict[str, (exp.Table|exp.Select, exp.Table|Scope)]: selected sources and nodes</span>
+</span><span id="Scope-277"><a href="#Scope-277"><span class="linenos">277</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-278"><a href="#Scope-278"><span class="linenos">278</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Scope-279"><a href="#Scope-279"><span class="linenos">279</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Scope-280"><a href="#Scope-280"><span class="linenos">280</span></a>
+</span><span id="Scope-281"><a href="#Scope-281"><span class="linenos">281</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span><span class="p">:</span>
+</span><span id="Scope-282"><a href="#Scope-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="Scope-283"><a href="#Scope-283"><span class="linenos">283</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;Alias already used: </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="Scope-284"><a href="#Scope-284"><span class="linenos">284</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="Scope-285"><a href="#Scope-285"><span class="linenos">285</span></a> <span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="bp">self</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="Scope-286"><a href="#Scope-286"><span class="linenos">286</span></a>
+</span><span id="Scope-287"><a href="#Scope-287"><span class="linenos">287</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="o">=</span> <span class="n">result</span>
+</span><span id="Scope-288"><a href="#Scope-288"><span class="linenos">288</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span>
+</span><span id="Scope-289"><a href="#Scope-289"><span class="linenos">289</span></a>
+</span><span id="Scope-290"><a href="#Scope-290"><span class="linenos">290</span></a> <span class="nd">@property</span>
+</span><span id="Scope-291"><a href="#Scope-291"><span class="linenos">291</span></a> <span class="k">def</span> <span class="nf">references</span><span class="p">(</span><span class="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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Scope-292"><a href="#Scope-292"><span class="linenos">292</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Scope-293"><a href="#Scope-293"><span class="linenos">293</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Scope-294"><a href="#Scope-294"><span class="linenos">294</span></a>
-</span><span id="Scope-295"><a href="#Scope-295"><span class="linenos">295</span></a> <span class="nd">@property</span>
-</span><span id="Scope-296"><a href="#Scope-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">selected_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-297"><a href="#Scope-297"><span class="linenos">297</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-298"><a href="#Scope-298"><span class="linenos">298</span></a><span class="sd"> Mapping of nodes and sources that are actually selected from in this scope.</span>
-</span><span id="Scope-299"><a href="#Scope-299"><span class="linenos">299</span></a>
-</span><span id="Scope-300"><a href="#Scope-300"><span class="linenos">300</span></a><span class="sd"> That is, all tables in a schema are selectable at any point. But a</span>
-</span><span id="Scope-301"><a href="#Scope-301"><span class="linenos">301</span></a><span class="sd"> table only becomes a selected source if it&#39;s included in a FROM or JOIN clause.</span>
-</span><span id="Scope-302"><a href="#Scope-302"><span class="linenos">302</span></a>
-</span><span id="Scope-303"><a href="#Scope-303"><span class="linenos">303</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-304"><a href="#Scope-304"><span class="linenos">304</span></a><span class="sd"> dict[str, (exp.Table|exp.Select, exp.Table|Scope)]: selected sources and nodes</span>
-</span><span id="Scope-305"><a href="#Scope-305"><span class="linenos">305</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-306"><a href="#Scope-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Scope-307"><a href="#Scope-307"><span class="linenos">307</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Scope-308"><a href="#Scope-308"><span class="linenos">308</span></a>
-</span><span id="Scope-309"><a href="#Scope-309"><span class="linenos">309</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span><span class="p">:</span>
-</span><span id="Scope-310"><a href="#Scope-310"><span class="linenos">310</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="Scope-311"><a href="#Scope-311"><span class="linenos">311</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;Alias already used: </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="Scope-312"><a href="#Scope-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="Scope-313"><a href="#Scope-313"><span class="linenos">313</span></a> <span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="bp">self</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="Scope-314"><a href="#Scope-314"><span class="linenos">314</span></a>
-</span><span id="Scope-315"><a href="#Scope-315"><span class="linenos">315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span> <span class="o">=</span> <span class="n">result</span>
-</span><span id="Scope-316"><a href="#Scope-316"><span class="linenos">316</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_selected_sources</span>
-</span><span id="Scope-317"><a href="#Scope-317"><span class="linenos">317</span></a>
-</span><span id="Scope-318"><a href="#Scope-318"><span class="linenos">318</span></a> <span class="nd">@property</span>
-</span><span id="Scope-319"><a href="#Scope-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">references</span><span class="p">(</span><span class="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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Scope-320"><a href="#Scope-320"><span class="linenos">320</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Scope-321"><a href="#Scope-321"><span class="linenos">321</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Scope-322"><a href="#Scope-322"><span class="linenos">322</span></a>
-</span><span id="Scope-323"><a href="#Scope-323"><span class="linenos">323</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
-</span><span id="Scope-324"><a href="#Scope-324"><span class="linenos">324</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">,</span> <span class="n">table</span><span class="p">))</span>
-</span><span id="Scope-325"><a href="#Scope-325"><span class="linenos">325</span></a> <span class="k">for</span> <span class="n">expression</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">derived_tables</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtfs</span><span class="p">):</span>
-</span><span id="Scope-326"><a href="#Scope-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Scope-327"><a href="#Scope-327"><span class="linenos">327</span></a> <span class="p">(</span>
-</span><span id="Scope-328"><a href="#Scope-328"><span class="linenos">328</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span>
-</span><span id="Scope-329"><a href="#Scope-329"><span class="linenos">329</span></a> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span>
-</span><span id="Scope-330"><a href="#Scope-330"><span class="linenos">330</span></a> <span class="p">)</span>
-</span><span id="Scope-331"><a href="#Scope-331"><span class="linenos">331</span></a> <span class="p">)</span>
-</span><span id="Scope-332"><a href="#Scope-332"><span class="linenos">332</span></a>
-</span><span id="Scope-333"><a href="#Scope-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span>
-</span><span id="Scope-334"><a href="#Scope-334"><span class="linenos">334</span></a>
-</span><span id="Scope-335"><a href="#Scope-335"><span class="linenos">335</span></a> <span class="nd">@property</span>
-</span><span id="Scope-336"><a href="#Scope-336"><span class="linenos">336</span></a> <span class="k">def</span> <span class="nf">cte_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-337"><a href="#Scope-337"><span class="linenos">337</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-338"><a href="#Scope-338"><span class="linenos">338</span></a><span class="sd"> Sources that are CTEs.</span>
-</span><span id="Scope-339"><a href="#Scope-339"><span class="linenos">339</span></a>
-</span><span id="Scope-340"><a href="#Scope-340"><span class="linenos">340</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-341"><a href="#Scope-341"><span class="linenos">341</span></a><span class="sd"> dict[str, Scope]: Mapping of source alias to Scope</span>
-</span><span id="Scope-342"><a href="#Scope-342"><span class="linenos">342</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-343"><a href="#Scope-343"><span class="linenos">343</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="Scope-344"><a href="#Scope-344"><span class="linenos">344</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">scope</span>
-</span><span id="Scope-345"><a href="#Scope-345"><span class="linenos">345</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="Scope-346"><a href="#Scope-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">Scope</span><span class="p">)</span> <span class="ow">and</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span>
-</span><span id="Scope-347"><a href="#Scope-347"><span class="linenos">347</span></a> <span class="p">}</span>
-</span><span id="Scope-348"><a href="#Scope-348"><span class="linenos">348</span></a>
-</span><span id="Scope-349"><a href="#Scope-349"><span class="linenos">349</span></a> <span class="nd">@property</span>
-</span><span id="Scope-350"><a href="#Scope-350"><span class="linenos">350</span></a> <span class="k">def</span> <span class="nf">external_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-351"><a href="#Scope-351"><span class="linenos">351</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-352"><a href="#Scope-352"><span class="linenos">352</span></a><span class="sd"> Columns that appear to reference sources in outer scopes.</span>
-</span><span id="Scope-353"><a href="#Scope-353"><span class="linenos">353</span></a>
-</span><span id="Scope-354"><a href="#Scope-354"><span class="linenos">354</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-355"><a href="#Scope-355"><span class="linenos">355</span></a><span class="sd"> list[exp.Column]: Column instances that don&#39;t reference</span>
-</span><span id="Scope-356"><a href="#Scope-356"><span class="linenos">356</span></a><span class="sd"> sources in the current scope.</span>
-</span><span id="Scope-357"><a href="#Scope-357"><span class="linenos">357</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-358"><a href="#Scope-358"><span class="linenos">358</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Scope-359"><a href="#Scope-359"><span class="linenos">359</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Scope-360"><a href="#Scope-360"><span class="linenos">360</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selected_sources</span>
-</span><span id="Scope-361"><a href="#Scope-361"><span class="linenos">361</span></a> <span class="p">]</span>
-</span><span id="Scope-362"><a href="#Scope-362"><span class="linenos">362</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span>
-</span><span id="Scope-363"><a href="#Scope-363"><span class="linenos">363</span></a>
-</span><span id="Scope-364"><a href="#Scope-364"><span class="linenos">364</span></a> <span class="nd">@property</span>
-</span><span id="Scope-365"><a href="#Scope-365"><span class="linenos">365</span></a> <span class="k">def</span> <span class="nf">unqualified_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-366"><a href="#Scope-366"><span class="linenos">366</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-367"><a href="#Scope-367"><span class="linenos">367</span></a><span class="sd"> Unqualified columns in the current scope.</span>
-</span><span id="Scope-368"><a href="#Scope-368"><span class="linenos">368</span></a>
-</span><span id="Scope-369"><a href="#Scope-369"><span class="linenos">369</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-370"><a href="#Scope-370"><span class="linenos">370</span></a><span class="sd"> list[exp.Column]: Unqualified columns</span>
-</span><span id="Scope-371"><a href="#Scope-371"><span class="linenos">371</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-372"><a href="#Scope-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span><span class="p">]</span>
-</span><span id="Scope-373"><a href="#Scope-373"><span class="linenos">373</span></a>
-</span><span id="Scope-374"><a href="#Scope-374"><span class="linenos">374</span></a> <span class="nd">@property</span>
-</span><span id="Scope-375"><a href="#Scope-375"><span class="linenos">375</span></a> <span class="k">def</span> <span class="nf">join_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-376"><a href="#Scope-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-377"><a href="#Scope-377"><span class="linenos">377</span></a><span class="sd"> Hints that exist in the scope that reference tables</span>
-</span><span id="Scope-378"><a href="#Scope-378"><span class="linenos">378</span></a>
-</span><span id="Scope-379"><a href="#Scope-379"><span class="linenos">379</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-380"><a href="#Scope-380"><span class="linenos">380</span></a><span class="sd"> list[exp.JoinHint]: Join hints that are referenced within the scope</span>
-</span><span id="Scope-381"><a href="#Scope-381"><span class="linenos">381</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-382"><a href="#Scope-382"><span class="linenos">382</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Scope-383"><a href="#Scope-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Scope-384"><a href="#Scope-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</span>
-</span><span id="Scope-385"><a href="#Scope-385"><span class="linenos">385</span></a>
-</span><span id="Scope-386"><a href="#Scope-386"><span class="linenos">386</span></a> <span class="nd">@property</span>
-</span><span id="Scope-387"><a href="#Scope-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-388"><a href="#Scope-388"><span class="linenos">388</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span><span class="p">:</span>
-</span><span id="Scope-389"><a href="#Scope-389"><span class="linenos">389</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Scope-390"><a href="#Scope-390"><span class="linenos">390</span></a> <span class="n">pivot</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span> <span class="k">for</span> <span class="n">pivot</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">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Scope-391"><a href="#Scope-391"><span class="linenos">391</span></a> <span class="p">]</span>
+</span><span id="Scope-295"><a href="#Scope-295"><span class="linenos">295</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
+</span><span id="Scope-296"><a href="#Scope-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">table</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">,</span> <span class="n">table</span><span class="p">))</span>
+</span><span id="Scope-297"><a href="#Scope-297"><span class="linenos">297</span></a> <span class="k">for</span> <span class="n">expression</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">derived_tables</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">udtfs</span><span class="p">):</span>
+</span><span id="Scope-298"><a href="#Scope-298"><span class="linenos">298</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Scope-299"><a href="#Scope-299"><span class="linenos">299</span></a> <span class="p">(</span>
+</span><span id="Scope-300"><a href="#Scope-300"><span class="linenos">300</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span>
+</span><span id="Scope-301"><a href="#Scope-301"><span class="linenos">301</span></a> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span><span class="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 class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span>
+</span><span id="Scope-302"><a href="#Scope-302"><span class="linenos">302</span></a> <span class="p">)</span>
+</span><span id="Scope-303"><a href="#Scope-303"><span class="linenos">303</span></a> <span class="p">)</span>
+</span><span id="Scope-304"><a href="#Scope-304"><span class="linenos">304</span></a>
+</span><span id="Scope-305"><a href="#Scope-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_references</span>
+</span><span id="Scope-306"><a href="#Scope-306"><span class="linenos">306</span></a>
+</span><span id="Scope-307"><a href="#Scope-307"><span class="linenos">307</span></a> <span class="nd">@property</span>
+</span><span id="Scope-308"><a href="#Scope-308"><span class="linenos">308</span></a> <span class="k">def</span> <span class="nf">cte_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-309"><a href="#Scope-309"><span class="linenos">309</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-310"><a href="#Scope-310"><span class="linenos">310</span></a><span class="sd"> Sources that are CTEs.</span>
+</span><span id="Scope-311"><a href="#Scope-311"><span class="linenos">311</span></a>
+</span><span id="Scope-312"><a href="#Scope-312"><span class="linenos">312</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-313"><a href="#Scope-313"><span class="linenos">313</span></a><span class="sd"> dict[str, Scope]: Mapping of source alias to Scope</span>
+</span><span id="Scope-314"><a href="#Scope-314"><span class="linenos">314</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-315"><a href="#Scope-315"><span class="linenos">315</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="Scope-316"><a href="#Scope-316"><span class="linenos">316</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">scope</span>
+</span><span id="Scope-317"><a href="#Scope-317"><span class="linenos">317</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="Scope-318"><a href="#Scope-318"><span class="linenos">318</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">Scope</span><span class="p">)</span> <span class="ow">and</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span>
+</span><span id="Scope-319"><a href="#Scope-319"><span class="linenos">319</span></a> <span class="p">}</span>
+</span><span id="Scope-320"><a href="#Scope-320"><span class="linenos">320</span></a>
+</span><span id="Scope-321"><a href="#Scope-321"><span class="linenos">321</span></a> <span class="nd">@property</span>
+</span><span id="Scope-322"><a href="#Scope-322"><span class="linenos">322</span></a> <span class="k">def</span> <span class="nf">external_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-323"><a href="#Scope-323"><span class="linenos">323</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-324"><a href="#Scope-324"><span class="linenos">324</span></a><span class="sd"> Columns that appear to reference sources in outer scopes.</span>
+</span><span id="Scope-325"><a href="#Scope-325"><span class="linenos">325</span></a>
+</span><span id="Scope-326"><a href="#Scope-326"><span class="linenos">326</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-327"><a href="#Scope-327"><span class="linenos">327</span></a><span class="sd"> list[exp.Column]: Column instances that don&#39;t reference</span>
+</span><span id="Scope-328"><a href="#Scope-328"><span class="linenos">328</span></a><span class="sd"> sources in the current scope.</span>
+</span><span id="Scope-329"><a href="#Scope-329"><span class="linenos">329</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-330"><a href="#Scope-330"><span class="linenos">330</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Scope-331"><a href="#Scope-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Scope-332"><a href="#Scope-332"><span class="linenos">332</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selected_sources</span>
+</span><span id="Scope-333"><a href="#Scope-333"><span class="linenos">333</span></a> <span class="p">]</span>
+</span><span id="Scope-334"><a href="#Scope-334"><span class="linenos">334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span>
+</span><span id="Scope-335"><a href="#Scope-335"><span class="linenos">335</span></a>
+</span><span id="Scope-336"><a href="#Scope-336"><span class="linenos">336</span></a> <span class="nd">@property</span>
+</span><span id="Scope-337"><a href="#Scope-337"><span class="linenos">337</span></a> <span class="k">def</span> <span class="nf">unqualified_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-338"><a href="#Scope-338"><span class="linenos">338</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-339"><a href="#Scope-339"><span class="linenos">339</span></a><span class="sd"> Unqualified columns in the current scope.</span>
+</span><span id="Scope-340"><a href="#Scope-340"><span class="linenos">340</span></a>
+</span><span id="Scope-341"><a href="#Scope-341"><span class="linenos">341</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-342"><a href="#Scope-342"><span class="linenos">342</span></a><span class="sd"> list[exp.Column]: Unqualified columns</span>
+</span><span id="Scope-343"><a href="#Scope-343"><span class="linenos">343</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-344"><a href="#Scope-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span><span class="p">]</span>
+</span><span id="Scope-345"><a href="#Scope-345"><span class="linenos">345</span></a>
+</span><span id="Scope-346"><a href="#Scope-346"><span class="linenos">346</span></a> <span class="nd">@property</span>
+</span><span id="Scope-347"><a href="#Scope-347"><span class="linenos">347</span></a> <span class="k">def</span> <span class="nf">join_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-348"><a href="#Scope-348"><span class="linenos">348</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-349"><a href="#Scope-349"><span class="linenos">349</span></a><span class="sd"> Hints that exist in the scope that reference tables</span>
+</span><span id="Scope-350"><a href="#Scope-350"><span class="linenos">350</span></a>
+</span><span id="Scope-351"><a href="#Scope-351"><span class="linenos">351</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-352"><a href="#Scope-352"><span class="linenos">352</span></a><span class="sd"> list[exp.JoinHint]: Join hints that are referenced within the scope</span>
+</span><span id="Scope-353"><a href="#Scope-353"><span class="linenos">353</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-354"><a href="#Scope-354"><span class="linenos">354</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Scope-355"><a href="#Scope-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="Scope-356"><a href="#Scope-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_hints</span>
+</span><span id="Scope-357"><a href="#Scope-357"><span class="linenos">357</span></a>
+</span><span id="Scope-358"><a href="#Scope-358"><span class="linenos">358</span></a> <span class="nd">@property</span>
+</span><span id="Scope-359"><a href="#Scope-359"><span class="linenos">359</span></a> <span class="k">def</span> <span class="nf">pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-360"><a href="#Scope-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span><span class="p">:</span>
+</span><span id="Scope-361"><a href="#Scope-361"><span class="linenos">361</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Scope-362"><a href="#Scope-362"><span class="linenos">362</span></a> <span class="n">pivot</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">references</span> <span class="k">for</span> <span class="n">pivot</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">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Scope-363"><a href="#Scope-363"><span class="linenos">363</span></a> <span class="p">]</span>
+</span><span id="Scope-364"><a href="#Scope-364"><span class="linenos">364</span></a>
+</span><span id="Scope-365"><a href="#Scope-365"><span class="linenos">365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span>
+</span><span id="Scope-366"><a href="#Scope-366"><span class="linenos">366</span></a>
+</span><span id="Scope-367"><a href="#Scope-367"><span class="linenos">367</span></a> <span class="k">def</span> <span class="nf">source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_name</span><span class="p">):</span>
+</span><span id="Scope-368"><a href="#Scope-368"><span class="linenos">368</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-369"><a href="#Scope-369"><span class="linenos">369</span></a><span class="sd"> Get all columns in the current scope for a particular source.</span>
+</span><span id="Scope-370"><a href="#Scope-370"><span class="linenos">370</span></a>
+</span><span id="Scope-371"><a href="#Scope-371"><span class="linenos">371</span></a><span class="sd"> Args:</span>
+</span><span id="Scope-372"><a href="#Scope-372"><span class="linenos">372</span></a><span class="sd"> source_name (str): Name of the source</span>
+</span><span id="Scope-373"><a href="#Scope-373"><span class="linenos">373</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-374"><a href="#Scope-374"><span class="linenos">374</span></a><span class="sd"> list[exp.Column]: Column instances that reference `source_name`</span>
+</span><span id="Scope-375"><a href="#Scope-375"><span class="linenos">375</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-376"><a href="#Scope-376"><span class="linenos">376</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="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">source_name</span><span class="p">]</span>
+</span><span id="Scope-377"><a href="#Scope-377"><span class="linenos">377</span></a>
+</span><span id="Scope-378"><a href="#Scope-378"><span class="linenos">378</span></a> <span class="nd">@property</span>
+</span><span id="Scope-379"><a href="#Scope-379"><span class="linenos">379</span></a> <span class="k">def</span> <span class="nf">is_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-380"><a href="#Scope-380"><span class="linenos">380</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a subquery&quot;&quot;&quot;</span>
+</span><span id="Scope-381"><a href="#Scope-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">SUBQUERY</span>
+</span><span id="Scope-382"><a href="#Scope-382"><span class="linenos">382</span></a>
+</span><span id="Scope-383"><a href="#Scope-383"><span class="linenos">383</span></a> <span class="nd">@property</span>
+</span><span id="Scope-384"><a href="#Scope-384"><span class="linenos">384</span></a> <span class="k">def</span> <span class="nf">is_derived_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-385"><a href="#Scope-385"><span class="linenos">385</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a derived table&quot;&quot;&quot;</span>
+</span><span id="Scope-386"><a href="#Scope-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span>
+</span><span id="Scope-387"><a href="#Scope-387"><span class="linenos">387</span></a>
+</span><span id="Scope-388"><a href="#Scope-388"><span class="linenos">388</span></a> <span class="nd">@property</span>
+</span><span id="Scope-389"><a href="#Scope-389"><span class="linenos">389</span></a> <span class="k">def</span> <span class="nf">is_union</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-390"><a href="#Scope-390"><span class="linenos">390</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a union&quot;&quot;&quot;</span>
+</span><span id="Scope-391"><a href="#Scope-391"><span class="linenos">391</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span>
</span><span id="Scope-392"><a href="#Scope-392"><span class="linenos">392</span></a>
-</span><span id="Scope-393"><a href="#Scope-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivots</span>
-</span><span id="Scope-394"><a href="#Scope-394"><span class="linenos">394</span></a>
-</span><span id="Scope-395"><a href="#Scope-395"><span class="linenos">395</span></a> <span class="k">def</span> <span class="nf">source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_name</span><span class="p">):</span>
-</span><span id="Scope-396"><a href="#Scope-396"><span class="linenos">396</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-397"><a href="#Scope-397"><span class="linenos">397</span></a><span class="sd"> Get all columns in the current scope for a particular source.</span>
-</span><span id="Scope-398"><a href="#Scope-398"><span class="linenos">398</span></a>
-</span><span id="Scope-399"><a href="#Scope-399"><span class="linenos">399</span></a><span class="sd"> Args:</span>
-</span><span id="Scope-400"><a href="#Scope-400"><span class="linenos">400</span></a><span class="sd"> source_name (str): Name of the source</span>
-</span><span id="Scope-401"><a href="#Scope-401"><span class="linenos">401</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-402"><a href="#Scope-402"><span class="linenos">402</span></a><span class="sd"> list[exp.Column]: Column instances that reference `source_name`</span>
-</span><span id="Scope-403"><a href="#Scope-403"><span class="linenos">403</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-404"><a href="#Scope-404"><span class="linenos">404</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="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">source_name</span><span class="p">]</span>
-</span><span id="Scope-405"><a href="#Scope-405"><span class="linenos">405</span></a>
-</span><span id="Scope-406"><a href="#Scope-406"><span class="linenos">406</span></a> <span class="nd">@property</span>
-</span><span id="Scope-407"><a href="#Scope-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">is_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-408"><a href="#Scope-408"><span class="linenos">408</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a subquery&quot;&quot;&quot;</span>
-</span><span id="Scope-409"><a href="#Scope-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">SUBQUERY</span>
-</span><span id="Scope-410"><a href="#Scope-410"><span class="linenos">410</span></a>
-</span><span id="Scope-411"><a href="#Scope-411"><span class="linenos">411</span></a> <span class="nd">@property</span>
-</span><span id="Scope-412"><a href="#Scope-412"><span class="linenos">412</span></a> <span class="k">def</span> <span class="nf">is_derived_table</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-413"><a href="#Scope-413"><span class="linenos">413</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a derived table&quot;&quot;&quot;</span>
-</span><span id="Scope-414"><a href="#Scope-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">DERIVED_TABLE</span>
+</span><span id="Scope-393"><a href="#Scope-393"><span class="linenos">393</span></a> <span class="nd">@property</span>
+</span><span id="Scope-394"><a href="#Scope-394"><span class="linenos">394</span></a> <span class="k">def</span> <span class="nf">is_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-395"><a href="#Scope-395"><span class="linenos">395</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a common table expression&quot;&quot;&quot;</span>
+</span><span id="Scope-396"><a href="#Scope-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span>
+</span><span id="Scope-397"><a href="#Scope-397"><span class="linenos">397</span></a>
+</span><span id="Scope-398"><a href="#Scope-398"><span class="linenos">398</span></a> <span class="nd">@property</span>
+</span><span id="Scope-399"><a href="#Scope-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">is_root</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-400"><a href="#Scope-400"><span class="linenos">400</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this is the root scope&quot;&quot;&quot;</span>
+</span><span id="Scope-401"><a href="#Scope-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">ROOT</span>
+</span><span id="Scope-402"><a href="#Scope-402"><span class="linenos">402</span></a>
+</span><span id="Scope-403"><a href="#Scope-403"><span class="linenos">403</span></a> <span class="nd">@property</span>
+</span><span id="Scope-404"><a href="#Scope-404"><span class="linenos">404</span></a> <span class="k">def</span> <span class="nf">is_udtf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-405"><a href="#Scope-405"><span class="linenos">405</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a UDTF (User Defined Table Function)&quot;&quot;&quot;</span>
+</span><span id="Scope-406"><a href="#Scope-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UDTF</span>
+</span><span id="Scope-407"><a href="#Scope-407"><span class="linenos">407</span></a>
+</span><span id="Scope-408"><a href="#Scope-408"><span class="linenos">408</span></a> <span class="nd">@property</span>
+</span><span id="Scope-409"><a href="#Scope-409"><span class="linenos">409</span></a> <span class="k">def</span> <span class="nf">is_correlated_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-410"><a href="#Scope-410"><span class="linenos">410</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a correlated subquery&quot;&quot;&quot;</span>
+</span><span id="Scope-411"><a href="#Scope-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span>
+</span><span id="Scope-412"><a href="#Scope-412"><span class="linenos">412</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">is_subquery</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)))</span>
+</span><span id="Scope-413"><a href="#Scope-413"><span class="linenos">413</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">external_columns</span>
+</span><span id="Scope-414"><a href="#Scope-414"><span class="linenos">414</span></a> <span class="p">)</span>
</span><span id="Scope-415"><a href="#Scope-415"><span class="linenos">415</span></a>
-</span><span id="Scope-416"><a href="#Scope-416"><span class="linenos">416</span></a> <span class="nd">@property</span>
-</span><span id="Scope-417"><a href="#Scope-417"><span class="linenos">417</span></a> <span class="k">def</span> <span class="nf">is_union</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-418"><a href="#Scope-418"><span class="linenos">418</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a union&quot;&quot;&quot;</span>
-</span><span id="Scope-419"><a href="#Scope-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span>
+</span><span id="Scope-416"><a href="#Scope-416"><span class="linenos">416</span></a> <span class="k">def</span> <span class="nf">rename_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
+</span><span id="Scope-417"><a href="#Scope-417"><span class="linenos">417</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rename a source in this scope&quot;&quot;&quot;</span>
+</span><span id="Scope-418"><a href="#Scope-418"><span class="linenos">418</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">old_name</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Scope-419"><a href="#Scope-419"><span class="linenos">419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">columns</span>
</span><span id="Scope-420"><a href="#Scope-420"><span class="linenos">420</span></a>
-</span><span id="Scope-421"><a href="#Scope-421"><span class="linenos">421</span></a> <span class="nd">@property</span>
-</span><span id="Scope-422"><a href="#Scope-422"><span class="linenos">422</span></a> <span class="k">def</span> <span class="nf">is_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-423"><a href="#Scope-423"><span class="linenos">423</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a common table expression&quot;&quot;&quot;</span>
-</span><span id="Scope-424"><a href="#Scope-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span>
+</span><span id="Scope-421"><a href="#Scope-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">add_source</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">source</span><span class="p">):</span>
+</span><span id="Scope-422"><a href="#Scope-422"><span class="linenos">422</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a source to this scope&quot;&quot;&quot;</span>
+</span><span id="Scope-423"><a href="#Scope-423"><span class="linenos">423</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span>
+</span><span id="Scope-424"><a href="#Scope-424"><span class="linenos">424</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
</span><span id="Scope-425"><a href="#Scope-425"><span class="linenos">425</span></a>
-</span><span id="Scope-426"><a href="#Scope-426"><span class="linenos">426</span></a> <span class="nd">@property</span>
-</span><span id="Scope-427"><a href="#Scope-427"><span class="linenos">427</span></a> <span class="k">def</span> <span class="nf">is_root</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-428"><a href="#Scope-428"><span class="linenos">428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this is the root scope&quot;&quot;&quot;</span>
-</span><span id="Scope-429"><a href="#Scope-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">ROOT</span>
+</span><span id="Scope-426"><a href="#Scope-426"><span class="linenos">426</span></a> <span class="k">def</span> <span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+</span><span id="Scope-427"><a href="#Scope-427"><span class="linenos">427</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove a source from this scope&quot;&quot;&quot;</span>
+</span><span id="Scope-428"><a href="#Scope-428"><span class="linenos">428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Scope-429"><a href="#Scope-429"><span class="linenos">429</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
</span><span id="Scope-430"><a href="#Scope-430"><span class="linenos">430</span></a>
-</span><span id="Scope-431"><a href="#Scope-431"><span class="linenos">431</span></a> <span class="nd">@property</span>
-</span><span id="Scope-432"><a href="#Scope-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">is_udtf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-433"><a href="#Scope-433"><span class="linenos">433</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a UDTF (User Defined Table Function)&quot;&quot;&quot;</span>
-</span><span id="Scope-434"><a href="#Scope-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope_type</span> <span class="o">==</span> <span class="n">ScopeType</span><span class="o">.</span><span class="n">UDTF</span>
-</span><span id="Scope-435"><a href="#Scope-435"><span class="linenos">435</span></a>
-</span><span id="Scope-436"><a href="#Scope-436"><span class="linenos">436</span></a> <span class="nd">@property</span>
-</span><span id="Scope-437"><a href="#Scope-437"><span class="linenos">437</span></a> <span class="k">def</span> <span class="nf">is_correlated_subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-438"><a href="#Scope-438"><span class="linenos">438</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determine if this scope is a correlated subquery&quot;&quot;&quot;</span>
-</span><span id="Scope-439"><a href="#Scope-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span>
-</span><span id="Scope-440"><a href="#Scope-440"><span class="linenos">440</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">is_subquery</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)))</span>
-</span><span id="Scope-441"><a href="#Scope-441"><span class="linenos">441</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">external_columns</span>
-</span><span id="Scope-442"><a href="#Scope-442"><span class="linenos">442</span></a> <span class="p">)</span>
-</span><span id="Scope-443"><a href="#Scope-443"><span class="linenos">443</span></a>
-</span><span id="Scope-444"><a href="#Scope-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">rename_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
-</span><span id="Scope-445"><a href="#Scope-445"><span class="linenos">445</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rename a source in this scope&quot;&quot;&quot;</span>
-</span><span id="Scope-446"><a href="#Scope-446"><span class="linenos">446</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">old_name</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Scope-447"><a href="#Scope-447"><span class="linenos">447</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">columns</span>
-</span><span id="Scope-448"><a href="#Scope-448"><span class="linenos">448</span></a>
-</span><span id="Scope-449"><a href="#Scope-449"><span class="linenos">449</span></a> <span class="k">def</span> <span class="nf">add_source</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">source</span><span class="p">):</span>
-</span><span id="Scope-450"><a href="#Scope-450"><span class="linenos">450</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a source to this scope&quot;&quot;&quot;</span>
-</span><span id="Scope-451"><a href="#Scope-451"><span class="linenos">451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span>
-</span><span id="Scope-452"><a href="#Scope-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="Scope-453"><a href="#Scope-453"><span class="linenos">453</span></a>
-</span><span id="Scope-454"><a href="#Scope-454"><span class="linenos">454</span></a> <span class="k">def</span> <span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
-</span><span id="Scope-455"><a href="#Scope-455"><span class="linenos">455</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove a source from this scope&quot;&quot;&quot;</span>
-</span><span id="Scope-456"><a href="#Scope-456"><span class="linenos">456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Scope-457"><a href="#Scope-457"><span class="linenos">457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="Scope-458"><a href="#Scope-458"><span class="linenos">458</span></a>
-</span><span id="Scope-459"><a href="#Scope-459"><span class="linenos">459</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><span id="Scope-460"><a href="#Scope-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Scope&lt;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
-</span><span id="Scope-461"><a href="#Scope-461"><span class="linenos">461</span></a>
-</span><span id="Scope-462"><a href="#Scope-462"><span class="linenos">462</span></a> <span class="k">def</span> <span class="nf">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-463"><a href="#Scope-463"><span class="linenos">463</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-464"><a href="#Scope-464"><span class="linenos">464</span></a><span class="sd"> Traverse the scope tree from this node.</span>
-</span><span id="Scope-465"><a href="#Scope-465"><span class="linenos">465</span></a>
-</span><span id="Scope-466"><a href="#Scope-466"><span class="linenos">466</span></a><span class="sd"> Yields:</span>
-</span><span id="Scope-467"><a href="#Scope-467"><span class="linenos">467</span></a><span class="sd"> Scope: scope instances in depth-first-search post-order</span>
-</span><span id="Scope-468"><a href="#Scope-468"><span class="linenos">468</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-469"><a href="#Scope-469"><span class="linenos">469</span></a> <span class="k">for</span> <span class="n">child_scope</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><span id="Scope-470"><a href="#Scope-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cte_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_scopes</span>
-</span><span id="Scope-471"><a href="#Scope-471"><span class="linenos">471</span></a> <span class="p">):</span>
-</span><span id="Scope-472"><a href="#Scope-472"><span class="linenos">472</span></a> <span class="k">yield from</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
-</span><span id="Scope-473"><a href="#Scope-473"><span class="linenos">473</span></a> <span class="k">yield</span> <span class="bp">self</span>
-</span><span id="Scope-474"><a href="#Scope-474"><span class="linenos">474</span></a>
-</span><span id="Scope-475"><a href="#Scope-475"><span class="linenos">475</span></a> <span class="k">def</span> <span class="nf">ref_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope-476"><a href="#Scope-476"><span class="linenos">476</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope-477"><a href="#Scope-477"><span class="linenos">477</span></a><span class="sd"> Count the number of times each scope in this tree is referenced.</span>
-</span><span id="Scope-478"><a href="#Scope-478"><span class="linenos">478</span></a>
-</span><span id="Scope-479"><a href="#Scope-479"><span class="linenos">479</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope-480"><a href="#Scope-480"><span class="linenos">480</span></a><span class="sd"> dict[int, int]: Mapping of Scope instance ID to reference count</span>
-</span><span id="Scope-481"><a href="#Scope-481"><span class="linenos">481</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope-482"><a href="#Scope-482"><span class="linenos">482</span></a> <span class="n">scope_ref_count</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Scope-483"><a href="#Scope-483"><span class="linenos">483</span></a>
-</span><span id="Scope-484"><a href="#Scope-484"><span class="linenos">484</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">traverse</span><span class="p">():</span>
-</span><span id="Scope-485"><a href="#Scope-485"><span class="linenos">485</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="Scope-486"><a href="#Scope-486"><span class="linenos">486</span></a> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Scope-487"><a href="#Scope-487"><span class="linenos">487</span></a>
-</span><span id="Scope-488"><a href="#Scope-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="n">scope_ref_count</span>
+</span><span id="Scope-431"><a href="#Scope-431"><span class="linenos">431</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><span id="Scope-432"><a href="#Scope-432"><span class="linenos">432</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Scope&lt;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
+</span><span id="Scope-433"><a href="#Scope-433"><span class="linenos">433</span></a>
+</span><span id="Scope-434"><a href="#Scope-434"><span class="linenos">434</span></a> <span class="k">def</span> <span class="nf">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-435"><a href="#Scope-435"><span class="linenos">435</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-436"><a href="#Scope-436"><span class="linenos">436</span></a><span class="sd"> Traverse the scope tree from this node.</span>
+</span><span id="Scope-437"><a href="#Scope-437"><span class="linenos">437</span></a>
+</span><span id="Scope-438"><a href="#Scope-438"><span class="linenos">438</span></a><span class="sd"> Yields:</span>
+</span><span id="Scope-439"><a href="#Scope-439"><span class="linenos">439</span></a><span class="sd"> Scope: scope instances in depth-first-search post-order</span>
+</span><span id="Scope-440"><a href="#Scope-440"><span class="linenos">440</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-441"><a href="#Scope-441"><span class="linenos">441</span></a> <span class="k">for</span> <span class="n">child_scope</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><span id="Scope-442"><a href="#Scope-442"><span class="linenos">442</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cte_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_scopes</span>
+</span><span id="Scope-443"><a href="#Scope-443"><span class="linenos">443</span></a> <span class="p">):</span>
+</span><span id="Scope-444"><a href="#Scope-444"><span class="linenos">444</span></a> <span class="k">yield from</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
+</span><span id="Scope-445"><a href="#Scope-445"><span class="linenos">445</span></a> <span class="k">yield</span> <span class="bp">self</span>
+</span><span id="Scope-446"><a href="#Scope-446"><span class="linenos">446</span></a>
+</span><span id="Scope-447"><a href="#Scope-447"><span class="linenos">447</span></a> <span class="k">def</span> <span class="nf">ref_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope-448"><a href="#Scope-448"><span class="linenos">448</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope-449"><a href="#Scope-449"><span class="linenos">449</span></a><span class="sd"> Count the number of times each scope in this tree is referenced.</span>
+</span><span id="Scope-450"><a href="#Scope-450"><span class="linenos">450</span></a>
+</span><span id="Scope-451"><a href="#Scope-451"><span class="linenos">451</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope-452"><a href="#Scope-452"><span class="linenos">452</span></a><span class="sd"> dict[int, int]: Mapping of Scope instance ID to reference count</span>
+</span><span id="Scope-453"><a href="#Scope-453"><span class="linenos">453</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope-454"><a href="#Scope-454"><span class="linenos">454</span></a> <span class="n">scope_ref_count</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Scope-455"><a href="#Scope-455"><span class="linenos">455</span></a>
+</span><span id="Scope-456"><a href="#Scope-456"><span class="linenos">456</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">traverse</span><span class="p">():</span>
+</span><span id="Scope-457"><a href="#Scope-457"><span class="linenos">457</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="Scope-458"><a href="#Scope-458"><span class="linenos">458</span></a> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Scope-459"><a href="#Scope-459"><span class="linenos">459</span></a>
+</span><span id="Scope-460"><a href="#Scope-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="n">scope_ref_count</span>
</span></pre></div>
@@ -1929,42 +1917,11 @@ a list of the left and right child scopes.</li>
</div>
<a class="headerlink" href="#Scope.find"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Scope.find-144"><a href="#Scope.find-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Scope.find-145"><a href="#Scope.find-145"><span class="linenos">145</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope.find-146"><a href="#Scope.find-146"><span class="linenos">146</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
-</span><span id="Scope.find-147"><a href="#Scope.find-147"><span class="linenos">147</span></a>
-</span><span id="Scope.find-148"><a href="#Scope.find-148"><span class="linenos">148</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
-</span><span id="Scope.find-149"><a href="#Scope.find-149"><span class="linenos">149</span></a>
-</span><span id="Scope.find-150"><a href="#Scope.find-150"><span class="linenos">150</span></a><span class="sd"> Args:</span>
-</span><span id="Scope.find-151"><a href="#Scope.find-151"><span class="linenos">151</span></a><span class="sd"> expression_types (type): the expression type(s) to match.</span>
-</span><span id="Scope.find-152"><a href="#Scope.find-152"><span class="linenos">152</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
-</span><span id="Scope.find-153"><a href="#Scope.find-153"><span class="linenos">153</span></a>
-</span><span id="Scope.find-154"><a href="#Scope.find-154"><span class="linenos">154</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope.find-155"><a href="#Scope.find-155"><span class="linenos">155</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
-</span><span id="Scope.find-156"><a href="#Scope.find-156"><span class="linenos">156</span></a><span class="sd"> the criteria was found.</span>
-</span><span id="Scope.find-157"><a href="#Scope.find-157"><span class="linenos">157</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope.find-158"><a href="#Scope.find-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Scope.find-145"><a href="#Scope.find-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">find_in_scope</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">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
</span></pre></div>
- <div class="docstring"><p>Returns the first node in this scope which matches at least one of the specified types.</p>
-
-<p>This does NOT traverse into subscopes.</p>
-
-<h6 id="arguments">Arguments:</h6>
-
-<ul>
-<li><strong>expression_types (type):</strong> the expression type(s) to match.</li>
-<li><strong>bfs (bool):</strong> True to use breadth-first search, False to use depth-first.</li>
-</ul>
-
-<h6 id="returns">Returns:</h6>
-
-<blockquote>
- <p>exp.Expression: the node which matches the criteria or None if no node matching
- the criteria was found.</p>
-</blockquote>
-</div>
-
+
</div>
<div id="Scope.find_all" class="classattr">
@@ -1978,45 +1935,12 @@ a list of the left and right child scopes.</li>
</div>
<a class="headerlink" href="#Scope.find_all"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.find_all-160"><a href="#Scope.find_all-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Scope.find_all-161"><a href="#Scope.find_all-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope.find_all-162"><a href="#Scope.find_all-162"><span class="linenos">162</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
-</span><span id="Scope.find_all-163"><a href="#Scope.find_all-163"><span class="linenos">163</span></a><span class="sd"> match at least one of the specified expression types.</span>
-</span><span id="Scope.find_all-164"><a href="#Scope.find_all-164"><span class="linenos">164</span></a>
-</span><span id="Scope.find_all-165"><a href="#Scope.find_all-165"><span class="linenos">165</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
-</span><span id="Scope.find_all-166"><a href="#Scope.find_all-166"><span class="linenos">166</span></a>
-</span><span id="Scope.find_all-167"><a href="#Scope.find_all-167"><span class="linenos">167</span></a><span class="sd"> Args:</span>
-</span><span id="Scope.find_all-168"><a href="#Scope.find_all-168"><span class="linenos">168</span></a><span class="sd"> expression_types (type): the expression type(s) to match.</span>
-</span><span id="Scope.find_all-169"><a href="#Scope.find_all-169"><span class="linenos">169</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
-</span><span id="Scope.find_all-170"><a href="#Scope.find_all-170"><span class="linenos">170</span></a>
-</span><span id="Scope.find_all-171"><a href="#Scope.find_all-171"><span class="linenos">171</span></a><span class="sd"> Yields:</span>
-</span><span id="Scope.find_all-172"><a href="#Scope.find_all-172"><span class="linenos">172</span></a><span class="sd"> exp.Expression: nodes</span>
-</span><span id="Scope.find_all-173"><a href="#Scope.find_all-173"><span class="linenos">173</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope.find_all-174"><a href="#Scope.find_all-174"><span class="linenos">174</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
-</span><span id="Scope.find_all-175"><a href="#Scope.find_all-175"><span class="linenos">175</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">expression_types</span><span class="p">):</span>
-</span><span id="Scope.find_all-176"><a href="#Scope.find_all-176"><span class="linenos">176</span></a> <span class="k">yield</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.find_all-147"><a href="#Scope.find_all-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Scope.find_all-148"><a href="#Scope.find_all-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">find_all_in_scope</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">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
</span></pre></div>
- <div class="docstring"><p>Returns a generator object which visits all nodes in this scope and only yields those that
-match at least one of the specified expression types.</p>
-
-<p>This does NOT traverse into subscopes.</p>
-
-<h6 id="arguments">Arguments:</h6>
-
-<ul>
-<li><strong>expression_types (type):</strong> the expression type(s) to match.</li>
-<li><strong>bfs (bool):</strong> True to use breadth-first search, False to use depth-first.</li>
-</ul>
-
-<h6 id="yields">Yields:</h6>
-
-<blockquote>
- <p>exp.Expression: nodes</p>
-</blockquote>
-</div>
-
+
</div>
<div id="Scope.replace" class="classattr">
@@ -2030,18 +1954,18 @@ match at least one of the specified expression types.</p>
</div>
<a class="headerlink" href="#Scope.replace"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.replace-178"><a href="#Scope.replace-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">):</span>
-</span><span id="Scope.replace-179"><a href="#Scope.replace-179"><span class="linenos">179</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope.replace-180"><a href="#Scope.replace-180"><span class="linenos">180</span></a><span class="sd"> Replace `old` with `new`.</span>
-</span><span id="Scope.replace-181"><a href="#Scope.replace-181"><span class="linenos">181</span></a>
-</span><span id="Scope.replace-182"><a href="#Scope.replace-182"><span class="linenos">182</span></a><span class="sd"> This can be used instead of `exp.Expression.replace` to ensure the `Scope` is kept up-to-date.</span>
-</span><span id="Scope.replace-183"><a href="#Scope.replace-183"><span class="linenos">183</span></a>
-</span><span id="Scope.replace-184"><a href="#Scope.replace-184"><span class="linenos">184</span></a><span class="sd"> Args:</span>
-</span><span id="Scope.replace-185"><a href="#Scope.replace-185"><span class="linenos">185</span></a><span class="sd"> old (exp.Expression): old node</span>
-</span><span id="Scope.replace-186"><a href="#Scope.replace-186"><span class="linenos">186</span></a><span class="sd"> new (exp.Expression): new node</span>
-</span><span id="Scope.replace-187"><a href="#Scope.replace-187"><span class="linenos">187</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope.replace-188"><a href="#Scope.replace-188"><span class="linenos">188</span></a> <span class="n">old</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new</span><span class="p">)</span>
-</span><span id="Scope.replace-189"><a href="#Scope.replace-189"><span class="linenos">189</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.replace-150"><a href="#Scope.replace-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">):</span>
+</span><span id="Scope.replace-151"><a href="#Scope.replace-151"><span class="linenos">151</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope.replace-152"><a href="#Scope.replace-152"><span class="linenos">152</span></a><span class="sd"> Replace `old` with `new`.</span>
+</span><span id="Scope.replace-153"><a href="#Scope.replace-153"><span class="linenos">153</span></a>
+</span><span id="Scope.replace-154"><a href="#Scope.replace-154"><span class="linenos">154</span></a><span class="sd"> This can be used instead of `exp.Expression.replace` to ensure the `Scope` is kept up-to-date.</span>
+</span><span id="Scope.replace-155"><a href="#Scope.replace-155"><span class="linenos">155</span></a>
+</span><span id="Scope.replace-156"><a href="#Scope.replace-156"><span class="linenos">156</span></a><span class="sd"> Args:</span>
+</span><span id="Scope.replace-157"><a href="#Scope.replace-157"><span class="linenos">157</span></a><span class="sd"> old (exp.Expression): old node</span>
+</span><span id="Scope.replace-158"><a href="#Scope.replace-158"><span class="linenos">158</span></a><span class="sd"> new (exp.Expression): new node</span>
+</span><span id="Scope.replace-159"><a href="#Scope.replace-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope.replace-160"><a href="#Scope.replace-160"><span class="linenos">160</span></a> <span class="n">old</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">new</span><span class="p">)</span>
+</span><span id="Scope.replace-161"><a href="#Scope.replace-161"><span class="linenos">161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
</span></pre></div>
@@ -2318,16 +2242,16 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#Scope.source_columns"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.source_columns-395"><a href="#Scope.source_columns-395"><span class="linenos">395</span></a> <span class="k">def</span> <span class="nf">source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_name</span><span class="p">):</span>
-</span><span id="Scope.source_columns-396"><a href="#Scope.source_columns-396"><span class="linenos">396</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope.source_columns-397"><a href="#Scope.source_columns-397"><span class="linenos">397</span></a><span class="sd"> Get all columns in the current scope for a particular source.</span>
-</span><span id="Scope.source_columns-398"><a href="#Scope.source_columns-398"><span class="linenos">398</span></a>
-</span><span id="Scope.source_columns-399"><a href="#Scope.source_columns-399"><span class="linenos">399</span></a><span class="sd"> Args:</span>
-</span><span id="Scope.source_columns-400"><a href="#Scope.source_columns-400"><span class="linenos">400</span></a><span class="sd"> source_name (str): Name of the source</span>
-</span><span id="Scope.source_columns-401"><a href="#Scope.source_columns-401"><span class="linenos">401</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope.source_columns-402"><a href="#Scope.source_columns-402"><span class="linenos">402</span></a><span class="sd"> list[exp.Column]: Column instances that reference `source_name`</span>
-</span><span id="Scope.source_columns-403"><a href="#Scope.source_columns-403"><span class="linenos">403</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope.source_columns-404"><a href="#Scope.source_columns-404"><span class="linenos">404</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="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">source_name</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.source_columns-367"><a href="#Scope.source_columns-367"><span class="linenos">367</span></a> <span class="k">def</span> <span class="nf">source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_name</span><span class="p">):</span>
+</span><span id="Scope.source_columns-368"><a href="#Scope.source_columns-368"><span class="linenos">368</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope.source_columns-369"><a href="#Scope.source_columns-369"><span class="linenos">369</span></a><span class="sd"> Get all columns in the current scope for a particular source.</span>
+</span><span id="Scope.source_columns-370"><a href="#Scope.source_columns-370"><span class="linenos">370</span></a>
+</span><span id="Scope.source_columns-371"><a href="#Scope.source_columns-371"><span class="linenos">371</span></a><span class="sd"> Args:</span>
+</span><span id="Scope.source_columns-372"><a href="#Scope.source_columns-372"><span class="linenos">372</span></a><span class="sd"> source_name (str): Name of the source</span>
+</span><span id="Scope.source_columns-373"><a href="#Scope.source_columns-373"><span class="linenos">373</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope.source_columns-374"><a href="#Scope.source_columns-374"><span class="linenos">374</span></a><span class="sd"> list[exp.Column]: Column instances that reference `source_name`</span>
+</span><span id="Scope.source_columns-375"><a href="#Scope.source_columns-375"><span class="linenos">375</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope.source_columns-376"><a href="#Scope.source_columns-376"><span class="linenos">376</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="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="o">==</span> <span class="n">source_name</span><span class="p">]</span>
</span></pre></div>
@@ -2450,10 +2374,10 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#Scope.rename_source"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.rename_source-444"><a href="#Scope.rename_source-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">rename_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
-</span><span id="Scope.rename_source-445"><a href="#Scope.rename_source-445"><span class="linenos">445</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rename a source in this scope&quot;&quot;&quot;</span>
-</span><span id="Scope.rename_source-446"><a href="#Scope.rename_source-446"><span class="linenos">446</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">old_name</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Scope.rename_source-447"><a href="#Scope.rename_source-447"><span class="linenos">447</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">columns</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.rename_source-416"><a href="#Scope.rename_source-416"><span class="linenos">416</span></a> <span class="k">def</span> <span class="nf">rename_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
+</span><span id="Scope.rename_source-417"><a href="#Scope.rename_source-417"><span class="linenos">417</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rename a source in this scope&quot;&quot;&quot;</span>
+</span><span id="Scope.rename_source-418"><a href="#Scope.rename_source-418"><span class="linenos">418</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">old_name</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Scope.rename_source-419"><a href="#Scope.rename_source-419"><span class="linenos">419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">columns</span>
</span></pre></div>
@@ -2473,10 +2397,10 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#Scope.add_source"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.add_source-449"><a href="#Scope.add_source-449"><span class="linenos">449</span></a> <span class="k">def</span> <span class="nf">add_source</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">source</span><span class="p">):</span>
-</span><span id="Scope.add_source-450"><a href="#Scope.add_source-450"><span class="linenos">450</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a source to this scope&quot;&quot;&quot;</span>
-</span><span id="Scope.add_source-451"><a href="#Scope.add_source-451"><span class="linenos">451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span>
-</span><span id="Scope.add_source-452"><a href="#Scope.add_source-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.add_source-421"><a href="#Scope.add_source-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">add_source</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">source</span><span class="p">):</span>
+</span><span id="Scope.add_source-422"><a href="#Scope.add_source-422"><span class="linenos">422</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a source to this scope&quot;&quot;&quot;</span>
+</span><span id="Scope.add_source-423"><a href="#Scope.add_source-423"><span class="linenos">423</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span>
+</span><span id="Scope.add_source-424"><a href="#Scope.add_source-424"><span class="linenos">424</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
</span></pre></div>
@@ -2496,10 +2420,10 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#Scope.remove_source"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.remove_source-454"><a href="#Scope.remove_source-454"><span class="linenos">454</span></a> <span class="k">def</span> <span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
-</span><span id="Scope.remove_source-455"><a href="#Scope.remove_source-455"><span class="linenos">455</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove a source from this scope&quot;&quot;&quot;</span>
-</span><span id="Scope.remove_source-456"><a href="#Scope.remove_source-456"><span class="linenos">456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Scope.remove_source-457"><a href="#Scope.remove_source-457"><span class="linenos">457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.remove_source-426"><a href="#Scope.remove_source-426"><span class="linenos">426</span></a> <span class="k">def</span> <span class="nf">remove_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+</span><span id="Scope.remove_source-427"><a href="#Scope.remove_source-427"><span class="linenos">427</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove a source from this scope&quot;&quot;&quot;</span>
+</span><span id="Scope.remove_source-428"><a href="#Scope.remove_source-428"><span class="linenos">428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Scope.remove_source-429"><a href="#Scope.remove_source-429"><span class="linenos">429</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
</span></pre></div>
@@ -2519,18 +2443,18 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#Scope.traverse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.traverse-462"><a href="#Scope.traverse-462"><span class="linenos">462</span></a> <span class="k">def</span> <span class="nf">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope.traverse-463"><a href="#Scope.traverse-463"><span class="linenos">463</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope.traverse-464"><a href="#Scope.traverse-464"><span class="linenos">464</span></a><span class="sd"> Traverse the scope tree from this node.</span>
-</span><span id="Scope.traverse-465"><a href="#Scope.traverse-465"><span class="linenos">465</span></a>
-</span><span id="Scope.traverse-466"><a href="#Scope.traverse-466"><span class="linenos">466</span></a><span class="sd"> Yields:</span>
-</span><span id="Scope.traverse-467"><a href="#Scope.traverse-467"><span class="linenos">467</span></a><span class="sd"> Scope: scope instances in depth-first-search post-order</span>
-</span><span id="Scope.traverse-468"><a href="#Scope.traverse-468"><span class="linenos">468</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope.traverse-469"><a href="#Scope.traverse-469"><span class="linenos">469</span></a> <span class="k">for</span> <span class="n">child_scope</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><span id="Scope.traverse-470"><a href="#Scope.traverse-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cte_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_scopes</span>
-</span><span id="Scope.traverse-471"><a href="#Scope.traverse-471"><span class="linenos">471</span></a> <span class="p">):</span>
-</span><span id="Scope.traverse-472"><a href="#Scope.traverse-472"><span class="linenos">472</span></a> <span class="k">yield from</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
-</span><span id="Scope.traverse-473"><a href="#Scope.traverse-473"><span class="linenos">473</span></a> <span class="k">yield</span> <span class="bp">self</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.traverse-434"><a href="#Scope.traverse-434"><span class="linenos">434</span></a> <span class="k">def</span> <span class="nf">traverse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope.traverse-435"><a href="#Scope.traverse-435"><span class="linenos">435</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope.traverse-436"><a href="#Scope.traverse-436"><span class="linenos">436</span></a><span class="sd"> Traverse the scope tree from this node.</span>
+</span><span id="Scope.traverse-437"><a href="#Scope.traverse-437"><span class="linenos">437</span></a>
+</span><span id="Scope.traverse-438"><a href="#Scope.traverse-438"><span class="linenos">438</span></a><span class="sd"> Yields:</span>
+</span><span id="Scope.traverse-439"><a href="#Scope.traverse-439"><span class="linenos">439</span></a><span class="sd"> Scope: scope instances in depth-first-search post-order</span>
+</span><span id="Scope.traverse-440"><a href="#Scope.traverse-440"><span class="linenos">440</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope.traverse-441"><a href="#Scope.traverse-441"><span class="linenos">441</span></a> <span class="k">for</span> <span class="n">child_scope</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><span id="Scope.traverse-442"><a href="#Scope.traverse-442"><span class="linenos">442</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cte_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_scopes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_scopes</span>
+</span><span id="Scope.traverse-443"><a href="#Scope.traverse-443"><span class="linenos">443</span></a> <span class="p">):</span>
+</span><span id="Scope.traverse-444"><a href="#Scope.traverse-444"><span class="linenos">444</span></a> <span class="k">yield from</span> <span class="n">child_scope</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
+</span><span id="Scope.traverse-445"><a href="#Scope.traverse-445"><span class="linenos">445</span></a> <span class="k">yield</span> <span class="bp">self</span>
</span></pre></div>
@@ -2556,20 +2480,20 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#Scope.ref_count"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.ref_count-475"><a href="#Scope.ref_count-475"><span class="linenos">475</span></a> <span class="k">def</span> <span class="nf">ref_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Scope.ref_count-476"><a href="#Scope.ref_count-476"><span class="linenos">476</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Scope.ref_count-477"><a href="#Scope.ref_count-477"><span class="linenos">477</span></a><span class="sd"> Count the number of times each scope in this tree is referenced.</span>
-</span><span id="Scope.ref_count-478"><a href="#Scope.ref_count-478"><span class="linenos">478</span></a>
-</span><span id="Scope.ref_count-479"><a href="#Scope.ref_count-479"><span class="linenos">479</span></a><span class="sd"> Returns:</span>
-</span><span id="Scope.ref_count-480"><a href="#Scope.ref_count-480"><span class="linenos">480</span></a><span class="sd"> dict[int, int]: Mapping of Scope instance ID to reference count</span>
-</span><span id="Scope.ref_count-481"><a href="#Scope.ref_count-481"><span class="linenos">481</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Scope.ref_count-482"><a href="#Scope.ref_count-482"><span class="linenos">482</span></a> <span class="n">scope_ref_count</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Scope.ref_count-483"><a href="#Scope.ref_count-483"><span class="linenos">483</span></a>
-</span><span id="Scope.ref_count-484"><a href="#Scope.ref_count-484"><span class="linenos">484</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">traverse</span><span class="p">():</span>
-</span><span id="Scope.ref_count-485"><a href="#Scope.ref_count-485"><span class="linenos">485</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="Scope.ref_count-486"><a href="#Scope.ref_count-486"><span class="linenos">486</span></a> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Scope.ref_count-487"><a href="#Scope.ref_count-487"><span class="linenos">487</span></a>
-</span><span id="Scope.ref_count-488"><a href="#Scope.ref_count-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="n">scope_ref_count</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Scope.ref_count-447"><a href="#Scope.ref_count-447"><span class="linenos">447</span></a> <span class="k">def</span> <span class="nf">ref_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Scope.ref_count-448"><a href="#Scope.ref_count-448"><span class="linenos">448</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Scope.ref_count-449"><a href="#Scope.ref_count-449"><span class="linenos">449</span></a><span class="sd"> Count the number of times each scope in this tree is referenced.</span>
+</span><span id="Scope.ref_count-450"><a href="#Scope.ref_count-450"><span class="linenos">450</span></a>
+</span><span id="Scope.ref_count-451"><a href="#Scope.ref_count-451"><span class="linenos">451</span></a><span class="sd"> Returns:</span>
+</span><span id="Scope.ref_count-452"><a href="#Scope.ref_count-452"><span class="linenos">452</span></a><span class="sd"> dict[int, int]: Mapping of Scope instance ID to reference count</span>
+</span><span id="Scope.ref_count-453"><a href="#Scope.ref_count-453"><span class="linenos">453</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Scope.ref_count-454"><a href="#Scope.ref_count-454"><span class="linenos">454</span></a> <span class="n">scope_ref_count</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Scope.ref_count-455"><a href="#Scope.ref_count-455"><span class="linenos">455</span></a>
+</span><span id="Scope.ref_count-456"><a href="#Scope.ref_count-456"><span class="linenos">456</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">traverse</span><span class="p">():</span>
+</span><span id="Scope.ref_count-457"><a href="#Scope.ref_count-457"><span class="linenos">457</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="Scope.ref_count-458"><a href="#Scope.ref_count-458"><span class="linenos">458</span></a> <span class="n">scope_ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Scope.ref_count-459"><a href="#Scope.ref_count-459"><span class="linenos">459</span></a>
+</span><span id="Scope.ref_count-460"><a href="#Scope.ref_count-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="n">scope_ref_count</span>
</span></pre></div>
@@ -2596,37 +2520,37 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</div>
<a class="headerlink" href="#traverse_scope"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="traverse_scope-491"><a href="#traverse_scope-491"><span class="linenos">491</span></a><span class="k">def</span> <span class="nf">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Scope</span><span class="p">]:</span>
-</span><span id="traverse_scope-492"><a href="#traverse_scope-492"><span class="linenos">492</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="traverse_scope-493"><a href="#traverse_scope-493"><span class="linenos">493</span></a><span class="sd"> Traverse an expression by its &quot;scopes&quot;.</span>
-</span><span id="traverse_scope-494"><a href="#traverse_scope-494"><span class="linenos">494</span></a>
-</span><span id="traverse_scope-495"><a href="#traverse_scope-495"><span class="linenos">495</span></a><span class="sd"> &quot;Scope&quot; represents the current context of a Select statement.</span>
-</span><span id="traverse_scope-496"><a href="#traverse_scope-496"><span class="linenos">496</span></a>
-</span><span id="traverse_scope-497"><a href="#traverse_scope-497"><span class="linenos">497</span></a><span class="sd"> This is helpful for optimizing queries, where we need more information than</span>
-</span><span id="traverse_scope-498"><a href="#traverse_scope-498"><span class="linenos">498</span></a><span class="sd"> the expression tree itself. For example, we might care about the source</span>
-</span><span id="traverse_scope-499"><a href="#traverse_scope-499"><span class="linenos">499</span></a><span class="sd"> names within a subquery. Returns a list because a generator could result in</span>
-</span><span id="traverse_scope-500"><a href="#traverse_scope-500"><span class="linenos">500</span></a><span class="sd"> incomplete properties which is confusing.</span>
-</span><span id="traverse_scope-501"><a href="#traverse_scope-501"><span class="linenos">501</span></a>
-</span><span id="traverse_scope-502"><a href="#traverse_scope-502"><span class="linenos">502</span></a><span class="sd"> Examples:</span>
-</span><span id="traverse_scope-503"><a href="#traverse_scope-503"><span class="linenos">503</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="traverse_scope-504"><a href="#traverse_scope-504"><span class="linenos">504</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT a FROM (SELECT a FROM x) AS y&quot;)</span>
-</span><span id="traverse_scope-505"><a href="#traverse_scope-505"><span class="linenos">505</span></a><span class="sd"> &gt;&gt;&gt; scopes = traverse_scope(expression)</span>
-</span><span id="traverse_scope-506"><a href="#traverse_scope-506"><span class="linenos">506</span></a><span class="sd"> &gt;&gt;&gt; scopes[0].expression.sql(), list(scopes[0].sources)</span>
-</span><span id="traverse_scope-507"><a href="#traverse_scope-507"><span class="linenos">507</span></a><span class="sd"> (&#39;SELECT a FROM x&#39;, [&#39;x&#39;])</span>
-</span><span id="traverse_scope-508"><a href="#traverse_scope-508"><span class="linenos">508</span></a><span class="sd"> &gt;&gt;&gt; scopes[1].expression.sql(), list(scopes[1].sources)</span>
-</span><span id="traverse_scope-509"><a href="#traverse_scope-509"><span class="linenos">509</span></a><span class="sd"> (&#39;SELECT a FROM (SELECT a FROM x) AS y&#39;, [&#39;y&#39;])</span>
-</span><span id="traverse_scope-510"><a href="#traverse_scope-510"><span class="linenos">510</span></a>
-</span><span id="traverse_scope-511"><a href="#traverse_scope-511"><span class="linenos">511</span></a><span class="sd"> Args:</span>
-</span><span id="traverse_scope-512"><a href="#traverse_scope-512"><span class="linenos">512</span></a><span class="sd"> expression (exp.Expression): expression to traverse</span>
-</span><span id="traverse_scope-513"><a href="#traverse_scope-513"><span class="linenos">513</span></a><span class="sd"> Returns:</span>
-</span><span id="traverse_scope-514"><a href="#traverse_scope-514"><span class="linenos">514</span></a><span class="sd"> list[Scope]: scope instances</span>
-</span><span id="traverse_scope-515"><a href="#traverse_scope-515"><span class="linenos">515</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="traverse_scope-516"><a href="#traverse_scope-516"><span class="linenos">516</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">Unionable</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="traverse_scope-517"><a href="#traverse_scope-517"><span class="linenos">517</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">DDL</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
-</span><span id="traverse_scope-518"><a href="#traverse_scope-518"><span class="linenos">518</span></a> <span class="p">):</span>
-</span><span id="traverse_scope-519"><a href="#traverse_scope-519"><span class="linenos">519</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_traverse_scope</span><span class="p">(</span><span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)))</span>
-</span><span id="traverse_scope-520"><a href="#traverse_scope-520"><span class="linenos">520</span></a>
-</span><span id="traverse_scope-521"><a href="#traverse_scope-521"><span class="linenos">521</span></a> <span class="k">return</span> <span class="p">[]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="traverse_scope-463"><a href="#traverse_scope-463"><span class="linenos">463</span></a><span class="k">def</span> <span class="nf">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Scope</span><span class="p">]:</span>
+</span><span id="traverse_scope-464"><a href="#traverse_scope-464"><span class="linenos">464</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="traverse_scope-465"><a href="#traverse_scope-465"><span class="linenos">465</span></a><span class="sd"> Traverse an expression by its &quot;scopes&quot;.</span>
+</span><span id="traverse_scope-466"><a href="#traverse_scope-466"><span class="linenos">466</span></a>
+</span><span id="traverse_scope-467"><a href="#traverse_scope-467"><span class="linenos">467</span></a><span class="sd"> &quot;Scope&quot; represents the current context of a Select statement.</span>
+</span><span id="traverse_scope-468"><a href="#traverse_scope-468"><span class="linenos">468</span></a>
+</span><span id="traverse_scope-469"><a href="#traverse_scope-469"><span class="linenos">469</span></a><span class="sd"> This is helpful for optimizing queries, where we need more information than</span>
+</span><span id="traverse_scope-470"><a href="#traverse_scope-470"><span class="linenos">470</span></a><span class="sd"> the expression tree itself. For example, we might care about the source</span>
+</span><span id="traverse_scope-471"><a href="#traverse_scope-471"><span class="linenos">471</span></a><span class="sd"> names within a subquery. Returns a list because a generator could result in</span>
+</span><span id="traverse_scope-472"><a href="#traverse_scope-472"><span class="linenos">472</span></a><span class="sd"> incomplete properties which is confusing.</span>
+</span><span id="traverse_scope-473"><a href="#traverse_scope-473"><span class="linenos">473</span></a>
+</span><span id="traverse_scope-474"><a href="#traverse_scope-474"><span class="linenos">474</span></a><span class="sd"> Examples:</span>
+</span><span id="traverse_scope-475"><a href="#traverse_scope-475"><span class="linenos">475</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="traverse_scope-476"><a href="#traverse_scope-476"><span class="linenos">476</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT a FROM (SELECT a FROM x) AS y&quot;)</span>
+</span><span id="traverse_scope-477"><a href="#traverse_scope-477"><span class="linenos">477</span></a><span class="sd"> &gt;&gt;&gt; scopes = traverse_scope(expression)</span>
+</span><span id="traverse_scope-478"><a href="#traverse_scope-478"><span class="linenos">478</span></a><span class="sd"> &gt;&gt;&gt; scopes[0].expression.sql(), list(scopes[0].sources)</span>
+</span><span id="traverse_scope-479"><a href="#traverse_scope-479"><span class="linenos">479</span></a><span class="sd"> (&#39;SELECT a FROM x&#39;, [&#39;x&#39;])</span>
+</span><span id="traverse_scope-480"><a href="#traverse_scope-480"><span class="linenos">480</span></a><span class="sd"> &gt;&gt;&gt; scopes[1].expression.sql(), list(scopes[1].sources)</span>
+</span><span id="traverse_scope-481"><a href="#traverse_scope-481"><span class="linenos">481</span></a><span class="sd"> (&#39;SELECT a FROM (SELECT a FROM x) AS y&#39;, [&#39;y&#39;])</span>
+</span><span id="traverse_scope-482"><a href="#traverse_scope-482"><span class="linenos">482</span></a>
+</span><span id="traverse_scope-483"><a href="#traverse_scope-483"><span class="linenos">483</span></a><span class="sd"> Args:</span>
+</span><span id="traverse_scope-484"><a href="#traverse_scope-484"><span class="linenos">484</span></a><span class="sd"> expression (exp.Expression): expression to traverse</span>
+</span><span id="traverse_scope-485"><a href="#traverse_scope-485"><span class="linenos">485</span></a><span class="sd"> Returns:</span>
+</span><span id="traverse_scope-486"><a href="#traverse_scope-486"><span class="linenos">486</span></a><span class="sd"> list[Scope]: scope instances</span>
+</span><span id="traverse_scope-487"><a href="#traverse_scope-487"><span class="linenos">487</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="traverse_scope-488"><a href="#traverse_scope-488"><span class="linenos">488</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">Unionable</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="traverse_scope-489"><a href="#traverse_scope-489"><span class="linenos">489</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">DDL</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
+</span><span id="traverse_scope-490"><a href="#traverse_scope-490"><span class="linenos">490</span></a> <span class="p">):</span>
+</span><span id="traverse_scope-491"><a href="#traverse_scope-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_traverse_scope</span><span class="p">(</span><span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)))</span>
+</span><span id="traverse_scope-492"><a href="#traverse_scope-492"><span class="linenos">492</span></a>
+</span><span id="traverse_scope-493"><a href="#traverse_scope-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="p">[]</span>
</span></pre></div>
@@ -2680,19 +2604,19 @@ incomplete properties which is confusing.</p>
</div>
<a class="headerlink" href="#build_scope"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="build_scope-524"><a href="#build_scope-524"><span class="linenos">524</span></a><span class="k">def</span> <span class="nf">build_scope</span><span 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="n">Scope</span><span class="p">]:</span>
-</span><span id="build_scope-525"><a href="#build_scope-525"><span class="linenos">525</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="build_scope-526"><a href="#build_scope-526"><span class="linenos">526</span></a><span class="sd"> Build a scope tree.</span>
-</span><span id="build_scope-527"><a href="#build_scope-527"><span class="linenos">527</span></a>
-</span><span id="build_scope-528"><a href="#build_scope-528"><span class="linenos">528</span></a><span class="sd"> Args:</span>
-</span><span id="build_scope-529"><a href="#build_scope-529"><span class="linenos">529</span></a><span class="sd"> expression (exp.Expression): expression to build the scope tree for</span>
-</span><span id="build_scope-530"><a href="#build_scope-530"><span class="linenos">530</span></a><span class="sd"> Returns:</span>
-</span><span id="build_scope-531"><a href="#build_scope-531"><span class="linenos">531</span></a><span class="sd"> Scope: root scope</span>
-</span><span id="build_scope-532"><a href="#build_scope-532"><span class="linenos">532</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="build_scope-533"><a href="#build_scope-533"><span class="linenos">533</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="build_scope-534"><a href="#build_scope-534"><span class="linenos">534</span></a> <span class="k">if</span> <span class="n">scopes</span><span class="p">:</span>
-</span><span id="build_scope-535"><a href="#build_scope-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="n">scopes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="build_scope-536"><a href="#build_scope-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="build_scope-496"><a href="#build_scope-496"><span class="linenos">496</span></a><span class="k">def</span> <span class="nf">build_scope</span><span 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="n">Scope</span><span class="p">]:</span>
+</span><span id="build_scope-497"><a href="#build_scope-497"><span class="linenos">497</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="build_scope-498"><a href="#build_scope-498"><span class="linenos">498</span></a><span class="sd"> Build a scope tree.</span>
+</span><span id="build_scope-499"><a href="#build_scope-499"><span class="linenos">499</span></a>
+</span><span id="build_scope-500"><a href="#build_scope-500"><span class="linenos">500</span></a><span class="sd"> Args:</span>
+</span><span id="build_scope-501"><a href="#build_scope-501"><span class="linenos">501</span></a><span class="sd"> expression (exp.Expression): expression to build the scope tree for</span>
+</span><span id="build_scope-502"><a href="#build_scope-502"><span class="linenos">502</span></a><span class="sd"> Returns:</span>
+</span><span id="build_scope-503"><a href="#build_scope-503"><span class="linenos">503</span></a><span class="sd"> Scope: root scope</span>
+</span><span id="build_scope-504"><a href="#build_scope-504"><span class="linenos">504</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="build_scope-505"><a href="#build_scope-505"><span class="linenos">505</span></a> <span class="n">scopes</span> <span class="o">=</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="build_scope-506"><a href="#build_scope-506"><span class="linenos">506</span></a> <span class="k">if</span> <span class="n">scopes</span><span class="p">:</span>
+</span><span id="build_scope-507"><a href="#build_scope-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="n">scopes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="build_scope-508"><a href="#build_scope-508"><span class="linenos">508</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -2724,47 +2648,47 @@ incomplete properties which is confusing.</p>
</div>
<a class="headerlink" href="#walk_in_scope"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="walk_in_scope-763"><a href="#walk_in_scope-763"><span class="linenos">763</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="walk_in_scope-764"><a href="#walk_in_scope-764"><span class="linenos">764</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="walk_in_scope-765"><a href="#walk_in_scope-765"><span class="linenos">765</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
-</span><span id="walk_in_scope-766"><a href="#walk_in_scope-766"><span class="linenos">766</span></a><span class="sd"> nodes that start child scopes.</span>
-</span><span id="walk_in_scope-767"><a href="#walk_in_scope-767"><span class="linenos">767</span></a>
-</span><span id="walk_in_scope-768"><a href="#walk_in_scope-768"><span class="linenos">768</span></a><span class="sd"> Args:</span>
-</span><span id="walk_in_scope-769"><a href="#walk_in_scope-769"><span class="linenos">769</span></a><span class="sd"> expression (exp.Expression):</span>
-</span><span id="walk_in_scope-770"><a href="#walk_in_scope-770"><span class="linenos">770</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
-</span><span id="walk_in_scope-771"><a href="#walk_in_scope-771"><span class="linenos">771</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
-</span><span id="walk_in_scope-772"><a href="#walk_in_scope-772"><span class="linenos">772</span></a>
-</span><span id="walk_in_scope-773"><a href="#walk_in_scope-773"><span class="linenos">773</span></a><span class="sd"> Yields:</span>
-</span><span id="walk_in_scope-774"><a href="#walk_in_scope-774"><span class="linenos">774</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
-</span><span id="walk_in_scope-775"><a href="#walk_in_scope-775"><span class="linenos">775</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="walk_in_scope-776"><a href="#walk_in_scope-776"><span class="linenos">776</span></a> <span class="c1"># We&#39;ll use this variable to pass state into the dfs generator.</span>
-</span><span id="walk_in_scope-777"><a href="#walk_in_scope-777"><span class="linenos">777</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
-</span><span id="walk_in_scope-778"><a href="#walk_in_scope-778"><span class="linenos">778</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="walk_in_scope-779"><a href="#walk_in_scope-779"><span class="linenos">779</span></a>
-</span><span id="walk_in_scope-780"><a href="#walk_in_scope-780"><span class="linenos">780</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="n">prune</span><span class="p">):</span>
-</span><span id="walk_in_scope-781"><a href="#walk_in_scope-781"><span class="linenos">781</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="walk_in_scope-782"><a href="#walk_in_scope-782"><span class="linenos">782</span></a>
-</span><span id="walk_in_scope-783"><a href="#walk_in_scope-783"><span class="linenos">783</span></a> <span class="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
-</span><span id="walk_in_scope-784"><a href="#walk_in_scope-784"><span class="linenos">784</span></a>
-</span><span id="walk_in_scope-785"><a href="#walk_in_scope-785"><span class="linenos">785</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="walk_in_scope-786"><a href="#walk_in_scope-786"><span class="linenos">786</span></a> <span class="k">continue</span>
-</span><span id="walk_in_scope-787"><a href="#walk_in_scope-787"><span class="linenos">787</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="walk_in_scope-788"><a href="#walk_in_scope-788"><span class="linenos">788</span></a> <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">CTE</span><span class="p">)</span>
-</span><span id="walk_in_scope-789"><a href="#walk_in_scope-789"><span class="linenos">789</span></a> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="walk_in_scope-790"><a href="#walk_in_scope-790"><span class="linenos">790</span></a> <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">Subquery</span><span class="p">)</span>
-</span><span id="walk_in_scope-791"><a href="#walk_in_scope-791"><span class="linenos">791</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
-</span><span id="walk_in_scope-792"><a href="#walk_in_scope-792"><span class="linenos">792</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="walk_in_scope-793"><a href="#walk_in_scope-793"><span class="linenos">793</span></a> <span class="p">)</span>
-</span><span id="walk_in_scope-794"><a href="#walk_in_scope-794"><span class="linenos">794</span></a> <span class="ow">or</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">UDTF</span><span class="p">)</span>
-</span><span id="walk_in_scope-795"><a href="#walk_in_scope-795"><span class="linenos">795</span></a> <span class="ow">or</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="walk_in_scope-796"><a href="#walk_in_scope-796"><span class="linenos">796</span></a> <span class="p">):</span>
-</span><span id="walk_in_scope-797"><a href="#walk_in_scope-797"><span class="linenos">797</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="walk_in_scope-798"><a href="#walk_in_scope-798"><span class="linenos">798</span></a>
-</span><span id="walk_in_scope-799"><a href="#walk_in_scope-799"><span class="linenos">799</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="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">UDTF</span><span class="p">)):</span>
-</span><span id="walk_in_scope-800"><a href="#walk_in_scope-800"><span class="linenos">800</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
-</span><span id="walk_in_scope-801"><a href="#walk_in_scope-801"><span class="linenos">801</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
-</span><span id="walk_in_scope-802"><a href="#walk_in_scope-802"><span class="linenos">802</span></a> <span class="k">for</span> <span class="n">arg</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">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
-</span><span id="walk_in_scope-803"><a href="#walk_in_scope-803"><span class="linenos">803</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="walk_in_scope-735"><a href="#walk_in_scope-735"><span class="linenos">735</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="walk_in_scope-736"><a href="#walk_in_scope-736"><span class="linenos">736</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="walk_in_scope-737"><a href="#walk_in_scope-737"><span class="linenos">737</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
+</span><span id="walk_in_scope-738"><a href="#walk_in_scope-738"><span class="linenos">738</span></a><span class="sd"> nodes that start child scopes.</span>
+</span><span id="walk_in_scope-739"><a href="#walk_in_scope-739"><span class="linenos">739</span></a>
+</span><span id="walk_in_scope-740"><a href="#walk_in_scope-740"><span class="linenos">740</span></a><span class="sd"> Args:</span>
+</span><span id="walk_in_scope-741"><a href="#walk_in_scope-741"><span class="linenos">741</span></a><span class="sd"> expression (exp.Expression):</span>
+</span><span id="walk_in_scope-742"><a href="#walk_in_scope-742"><span class="linenos">742</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
+</span><span id="walk_in_scope-743"><a href="#walk_in_scope-743"><span class="linenos">743</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
+</span><span id="walk_in_scope-744"><a href="#walk_in_scope-744"><span class="linenos">744</span></a>
+</span><span id="walk_in_scope-745"><a href="#walk_in_scope-745"><span class="linenos">745</span></a><span class="sd"> Yields:</span>
+</span><span id="walk_in_scope-746"><a href="#walk_in_scope-746"><span class="linenos">746</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
+</span><span id="walk_in_scope-747"><a href="#walk_in_scope-747"><span class="linenos">747</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="walk_in_scope-748"><a href="#walk_in_scope-748"><span class="linenos">748</span></a> <span class="c1"># We&#39;ll use this variable to pass state into the dfs generator.</span>
+</span><span id="walk_in_scope-749"><a href="#walk_in_scope-749"><span class="linenos">749</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
+</span><span id="walk_in_scope-750"><a href="#walk_in_scope-750"><span class="linenos">750</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="walk_in_scope-751"><a href="#walk_in_scope-751"><span class="linenos">751</span></a>
+</span><span id="walk_in_scope-752"><a href="#walk_in_scope-752"><span class="linenos">752</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="n">prune</span><span class="p">):</span>
+</span><span id="walk_in_scope-753"><a href="#walk_in_scope-753"><span class="linenos">753</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="walk_in_scope-754"><a href="#walk_in_scope-754"><span class="linenos">754</span></a>
+</span><span id="walk_in_scope-755"><a href="#walk_in_scope-755"><span class="linenos">755</span></a> <span class="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
+</span><span id="walk_in_scope-756"><a href="#walk_in_scope-756"><span class="linenos">756</span></a>
+</span><span id="walk_in_scope-757"><a href="#walk_in_scope-757"><span class="linenos">757</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="walk_in_scope-758"><a href="#walk_in_scope-758"><span class="linenos">758</span></a> <span class="k">continue</span>
+</span><span id="walk_in_scope-759"><a href="#walk_in_scope-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="walk_in_scope-760"><a href="#walk_in_scope-760"><span class="linenos">760</span></a> <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">CTE</span><span class="p">)</span>
+</span><span id="walk_in_scope-761"><a href="#walk_in_scope-761"><span class="linenos">761</span></a> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="walk_in_scope-762"><a href="#walk_in_scope-762"><span class="linenos">762</span></a> <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">Subquery</span><span class="p">)</span>
+</span><span id="walk_in_scope-763"><a href="#walk_in_scope-763"><span class="linenos">763</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
+</span><span id="walk_in_scope-764"><a href="#walk_in_scope-764"><span class="linenos">764</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="walk_in_scope-765"><a href="#walk_in_scope-765"><span class="linenos">765</span></a> <span class="p">)</span>
+</span><span id="walk_in_scope-766"><a href="#walk_in_scope-766"><span class="linenos">766</span></a> <span class="ow">or</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">UDTF</span><span class="p">)</span>
+</span><span id="walk_in_scope-767"><a href="#walk_in_scope-767"><span class="linenos">767</span></a> <span class="ow">or</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="walk_in_scope-768"><a href="#walk_in_scope-768"><span class="linenos">768</span></a> <span class="p">):</span>
+</span><span id="walk_in_scope-769"><a href="#walk_in_scope-769"><span class="linenos">769</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="walk_in_scope-770"><a href="#walk_in_scope-770"><span class="linenos">770</span></a>
+</span><span id="walk_in_scope-771"><a href="#walk_in_scope-771"><span class="linenos">771</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="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">UDTF</span><span class="p">)):</span>
+</span><span id="walk_in_scope-772"><a href="#walk_in_scope-772"><span class="linenos">772</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
+</span><span id="walk_in_scope-773"><a href="#walk_in_scope-773"><span class="linenos">773</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
+</span><span id="walk_in_scope-774"><a href="#walk_in_scope-774"><span class="linenos">774</span></a> <span class="k">for</span> <span class="n">arg</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">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
+</span><span id="walk_in_scope-775"><a href="#walk_in_scope-775"><span class="linenos">775</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
</span></pre></div>
@@ -2788,6 +2712,112 @@ otherwise the DFS traversal will be used instead.</li>
</section>
+ <section id="find_all_in_scope">
+ <input id="find_all_in_scope-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">find_all_in_scope</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">expression_types</span>, </span><span class="param"><span class="n">bfs</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">):</span></span>
+
+ <label class="view-source-button" for="find_all_in_scope-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#find_all_in_scope"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="find_all_in_scope-778"><a href="#find_all_in_scope-778"><span class="linenos">778</span></a><span class="k">def</span> <span class="nf">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="find_all_in_scope-779"><a href="#find_all_in_scope-779"><span class="linenos">779</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="find_all_in_scope-780"><a href="#find_all_in_scope-780"><span class="linenos">780</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
+</span><span id="find_all_in_scope-781"><a href="#find_all_in_scope-781"><span class="linenos">781</span></a><span class="sd"> match at least one of the specified expression types.</span>
+</span><span id="find_all_in_scope-782"><a href="#find_all_in_scope-782"><span class="linenos">782</span></a>
+</span><span id="find_all_in_scope-783"><a href="#find_all_in_scope-783"><span class="linenos">783</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
+</span><span id="find_all_in_scope-784"><a href="#find_all_in_scope-784"><span class="linenos">784</span></a>
+</span><span id="find_all_in_scope-785"><a href="#find_all_in_scope-785"><span class="linenos">785</span></a><span class="sd"> Args:</span>
+</span><span id="find_all_in_scope-786"><a href="#find_all_in_scope-786"><span class="linenos">786</span></a><span class="sd"> expression (exp.Expression):</span>
+</span><span id="find_all_in_scope-787"><a href="#find_all_in_scope-787"><span class="linenos">787</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
+</span><span id="find_all_in_scope-788"><a href="#find_all_in_scope-788"><span class="linenos">788</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
+</span><span id="find_all_in_scope-789"><a href="#find_all_in_scope-789"><span class="linenos">789</span></a>
+</span><span id="find_all_in_scope-790"><a href="#find_all_in_scope-790"><span class="linenos">790</span></a><span class="sd"> Yields:</span>
+</span><span id="find_all_in_scope-791"><a href="#find_all_in_scope-791"><span class="linenos">791</span></a><span class="sd"> exp.Expression: nodes</span>
+</span><span id="find_all_in_scope-792"><a href="#find_all_in_scope-792"><span class="linenos">792</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="find_all_in_scope-793"><a href="#find_all_in_scope-793"><span class="linenos">793</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
+</span><span id="find_all_in_scope-794"><a href="#find_all_in_scope-794"><span class="linenos">794</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">tuple</span><span class="p">(</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">))):</span>
+</span><span id="find_all_in_scope-795"><a href="#find_all_in_scope-795"><span class="linenos">795</span></a> <span class="k">yield</span> <span class="n">expression</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Returns a generator object which visits all nodes in this scope and only yields those that
+match at least one of the specified expression types.</p>
+
+<p>This does NOT traverse into subscopes.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>expression (exp.Expression):</strong> </li>
+<li><strong>expression_types (tuple[type]|type):</strong> the expression type(s) to match.</li>
+<li><strong>bfs (bool):</strong> True to use breadth-first search, False to use depth-first.</li>
+</ul>
+
+<h6 id="yields">Yields:</h6>
+
+<blockquote>
+ <p>exp.Expression: nodes</p>
+</blockquote>
+</div>
+
+
+ </section>
+ <section id="find_in_scope">
+ <input id="find_in_scope-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">find_in_scope</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">expression_types</span>, </span><span class="param"><span class="n">bfs</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">):</span></span>
+
+ <label class="view-source-button" for="find_in_scope-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#find_in_scope"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="find_in_scope-798"><a href="#find_in_scope-798"><span class="linenos">798</span></a><span class="k">def</span> <span class="nf">find_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="find_in_scope-799"><a href="#find_in_scope-799"><span class="linenos">799</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="find_in_scope-800"><a href="#find_in_scope-800"><span class="linenos">800</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
+</span><span id="find_in_scope-801"><a href="#find_in_scope-801"><span class="linenos">801</span></a>
+</span><span id="find_in_scope-802"><a href="#find_in_scope-802"><span class="linenos">802</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
+</span><span id="find_in_scope-803"><a href="#find_in_scope-803"><span class="linenos">803</span></a>
+</span><span id="find_in_scope-804"><a href="#find_in_scope-804"><span class="linenos">804</span></a><span class="sd"> Args:</span>
+</span><span id="find_in_scope-805"><a href="#find_in_scope-805"><span class="linenos">805</span></a><span class="sd"> expression (exp.Expression):</span>
+</span><span id="find_in_scope-806"><a href="#find_in_scope-806"><span class="linenos">806</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
+</span><span id="find_in_scope-807"><a href="#find_in_scope-807"><span class="linenos">807</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
+</span><span id="find_in_scope-808"><a href="#find_in_scope-808"><span class="linenos">808</span></a>
+</span><span id="find_in_scope-809"><a href="#find_in_scope-809"><span class="linenos">809</span></a><span class="sd"> Returns:</span>
+</span><span id="find_in_scope-810"><a href="#find_in_scope-810"><span class="linenos">810</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
+</span><span id="find_in_scope-811"><a href="#find_in_scope-811"><span class="linenos">811</span></a><span class="sd"> the criteria was found.</span>
+</span><span id="find_in_scope-812"><a href="#find_in_scope-812"><span class="linenos">812</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="find_in_scope-813"><a href="#find_in_scope-813"><span class="linenos">813</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Returns the first node in this scope which matches at least one of the specified types.</p>
+
+<p>This does NOT traverse into subscopes.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>expression (exp.Expression):</strong> </li>
+<li><strong>expression_types (tuple[type]|type):</strong> the expression type(s) to match.</li>
+<li><strong>bfs (bool):</strong> True to use breadth-first search, False to use depth-first.</li>
+</ul>
+
+<h6 id="returns">Returns:</h6>
+
+<blockquote>
+ <p>exp.Expression: the node which matches the criteria or None if no node matching
+ the criteria was found.</p>
+</blockquote>
+</div>
+
+
+ </section>
</main>
<script>
function escapeHTML(html) {
diff --git a/docs/sqlglot/optimizer/simplify.html b/docs/sqlglot/optimizer/simplify.html
index 8db4fc6..3b0c43c 100644
--- a/docs/sqlglot/optimizer/simplify.html
+++ b/docs/sqlglot/optimizer/simplify.html
@@ -76,6 +76,24 @@
<a class="function" href="#simplify_parens">simplify_parens</a>
</li>
<li>
+ <a class="variable" href="#CONSTANTS">CONSTANTS</a>
+ </li>
+ <li>
+ <a class="function" href="#simplify_coalesce">simplify_coalesce</a>
+ </li>
+ <li>
+ <a class="variable" href="#CONCATS">CONCATS</a>
+ </li>
+ <li>
+ <a class="variable" href="#SAFE_CONCATS">SAFE_CONCATS</a>
+ </li>
+ <li>
+ <a class="function" href="#simplify_concat">simplify_concat</a>
+ </li>
+ <li>
+ <a class="variable" href="#JOINS">JOINS</a>
+ </li>
+ <li>
<a class="function" href="#remove_where_true">remove_where_true</a>
</li>
<li>
@@ -184,498 +202,610 @@
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">_simplify</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-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">rewrite_between</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">generate</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">absorb_and_eliminate</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</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">replace_children</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">_simplify</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_not</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_connectors</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">remove_compliments</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_literals</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_parens</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="k">if</span> <span class="n">root</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">replace</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">return</span> <span class="n">node</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">expression</span> <span class="o">=</span> <span class="n">while_changing</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify</span><span class="p">)</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">remove_where_true</span><span class="p">(</span><span class="n">expression</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">expression</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="c1"># Pre-order transformations</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">rewrite_between</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">generate</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">absorb_and_eliminate</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_concat</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">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="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">_simplify</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="kc">False</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="c1"># Post-order transformations</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_not</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_connectors</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">remove_compliments</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_coalesce</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_literals</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_parens</span><span class="p">(</span><span class="n">node</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">rewrite_between</span><span 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-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rewrite x between y and z to x &gt;= y AND x &lt;= z.</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> This is done because comparison simplification is only done on lt/lte/gt/gte.</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="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">Between</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">exp</span><span class="o">.</span><span class="n">and_</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">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-86"><a href="#L-86"><span class="linenos"> 86</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-87"><a href="#L-87"><span class="linenos"> 87</span></a> <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="p">)</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> Demorgan&#39;s Law</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-98"><a href="#L-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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">):</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</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-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">null</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="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-102"><a href="#L-102"><span class="linenos">102</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-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">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-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</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-106"><a href="#L-106"><span class="linenos">106</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-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><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 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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">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-112"><a href="#L-112"><span class="linenos">112</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-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <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">condition</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">expression</span><span class="o">.</span><span class="n">this</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">false</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">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-120"><a href="#L-120"><span class="linenos">120</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-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="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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="c1"># double negation</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="c1"># NOT NOT x -&gt; x</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">this</span><span class="o">.</span><span class="n">this</span>
-</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-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">flatten</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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-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">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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">left</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="n">exp</span><span class="o">.</span><span class="n">And</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">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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</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-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</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-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">true</span><span class="p">()</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">if</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 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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</span></a> <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">null</span><span class="p">()</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</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="n">right</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</span></a>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">expression</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="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-180"><a href="#L-180"><span class="linenos">180</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-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="n">COMPARISONS</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="o">*</span><span class="n">LT_LTE</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">GT_GTE</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">EQ</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">NEQ</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><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">INVERSE_COMPARISONS</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="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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</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-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><span id="L-197"><a href="#L-197"><span class="linenos">197</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-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">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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-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">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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</span></a>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">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-206"><a href="#L-206"><span class="linenos">206</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-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">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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">except</span> <span class="ne">StopIteration</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">expression</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">if</span> <span class="n">root</span><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">replace</span><span class="p">(</span><span class="n">node</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="n">node</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">while_changing</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify</span><span class="p">)</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">remove_where_true</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 class="k">return</span> <span class="n">expression</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><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="k">def</span> <span class="nf">rewrite_between</span><span 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-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rewrite x between y and z to x &gt;= y AND x &lt;= z.</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="sd"> This is done because comparison simplification is only done on lt/lte/gt/gte.</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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">Between</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">exp</span><span class="o">.</span><span class="n">and_</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">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-95"><a href="#L-95"><span class="linenos"> 95</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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</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="k">return</span> <span class="n">expression</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><span id="L-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="sd"> Demorgan&#39;s Law</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</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-110"><a href="#L-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="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-111"><a href="#L-111"><span class="linenos">111</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-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">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-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</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">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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="p">)</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span 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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="p">)</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span 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-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">expression</span><span class="o">.</span><span class="n">this</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">false</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">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-129"><a href="#L-129"><span class="linenos">129</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-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">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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="c1"># double negation</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
+</span><span id="L-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">flatten</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a><span class="sd"> &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">Connector</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">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-144"><a href="#L-144"><span class="linenos">144</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-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">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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">expression</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">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-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">left</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">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-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-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">true</span><span class="p">()</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-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">null</span><span class="p">()</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</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-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">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-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-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">COMPARISONS</span> <span class="o">=</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">LT_LTE</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">GT_GTE</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">EQ</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">NEQ</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">Is</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">INVERSE_COMPARISONS</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="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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-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><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">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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</span></a>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">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-213"><a href="#L-213"><span class="linenos">213</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-214"><a href="#L-214"><span class="linenos">214</span></a>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="c1"># make sure the comparison is always of the form x &gt; 1 instead of 1 &lt; x</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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-218"><a href="#L-218"><span class="linenos">218</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-219"><a href="#L-219"><span class="linenos">219</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-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">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-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-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="k">return</span> <span class="kc">None</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">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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</span></a>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="c1"># we can&#39;t ever shortcut to true because the column could be null</span>
-</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">or_</span><span class="p">:</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</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-242"><a href="#L-242"><span class="linenos">242</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-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</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-245"><a href="#L-245"><span class="linenos">245</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-246"><a href="#L-246"><span class="linenos">246</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-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">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-248"><a href="#L-248"><span class="linenos">248</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-249"><a href="#L-249"><span class="linenos">249</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-250"><a href="#L-250"><span class="linenos">250</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-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="sd"> Removing compliments.</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="sd"> A AND NOT A -&gt; FALSE</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</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-215"><a href="#L-215"><span class="linenos">215</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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</span></a>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">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-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">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-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">expression</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="c1"># make sure the comparison is always of the form x &gt; 1 instead of 1 &lt; x</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</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-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">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-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">else</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="kc">None</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">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-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">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-242"><a href="#L-242"><span class="linenos">242</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-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</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-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="c1"># we can&#39;t ever shortcut to true because the column could be null</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">or_</span><span class="p">:</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</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-249"><a href="#L-249"><span class="linenos">249</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-250"><a href="#L-250"><span class="linenos">250</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-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</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-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">compliment</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-274"><a href="#L-274"><span class="linenos">274</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">generate</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-275"><a href="#L-275"><span class="linenos">275</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd"> Uniq and sort a connector.</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> Removing compliments.</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="sd"> A AND NOT A -&gt; FALSE</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</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-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="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">generate</span><span class="p">(</span><span class="n">e</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-284"><a href="#L-284"><span class="linenos">284</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-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="c1"># check if the operands are already sorted, if not sort them</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">break</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-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="n">expression</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><span id="L-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a><span class="sd"> absorption:</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a><span class="sd"> elimination:</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a><span class="sd"> &quot;&quot;&quot;</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">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-312"><a href="#L-312"><span class="linenos">312</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-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">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-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</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-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="c1"># absorb</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</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-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</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-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="c1"># eliminate</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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-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">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-331"><a href="#L-331"><span class="linenos">331</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-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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-335"><a href="#L-335"><span class="linenos">335</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-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="k">return</span> <span class="n">expression</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="k">return</span> <span class="n">compliment</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-284"><a href="#L-284"><span class="linenos">284</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">generate</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-285"><a href="#L-285"><span class="linenos">285</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a><span class="sd"> Uniq and sort a connector.</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="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">generate</span><span class="p">(</span><span class="n">e</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-294"><a href="#L-294"><span class="linenos">294</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-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="c1"># check if the operands are already sorted, if not sort them</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">break</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</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-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">return</span> <span class="n">expression</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><span id="L-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a><span class="sd"> absorption:</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a><span class="sd"> elimination:</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</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-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">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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</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-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="c1"># absorb</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</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-330"><a href="#L-330"><span class="linenos">330</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-331"><a href="#L-331"><span class="linenos">331</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-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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-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">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="c1"># eliminate</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</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-338"><a href="#L-338"><span class="linenos">338</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-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">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-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">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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</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-344"><a href="#L-344"><span class="linenos">344</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-345"><a href="#L-345"><span class="linenos">345</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-346"><a href="#L-346"><span class="linenos">346</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-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</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-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="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-350"><a href="#L-350"><span class="linenos">350</span></a>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</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">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-341"><a href="#L-341"><span class="linenos">341</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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</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-344"><a href="#L-344"><span class="linenos">344</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-345"><a href="#L-345"><span class="linenos">345</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-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">return</span> <span class="n">expression</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><span id="L-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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-352"><a href="#L-352"><span class="linenos">352</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-353"><a href="#L-353"><span class="linenos">353</span></a>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a><span class="k">def</span> <span class="nf">_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-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">Is</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="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-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">b</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">False</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">is_null</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</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-371"><a href="#L-371"><span class="linenos">371</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-372"><a href="#L-372"><span class="linenos">372</span></a>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">if</span> <span class="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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</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-376"><a href="#L-376"><span class="linenos">376</span></a>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="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">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-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">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-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</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-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="c1"># engines have differing int div behavior so intdiv is not safe</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</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-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</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-388"><a href="#L-388"><span class="linenos">388</span></a>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">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-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">if</span> <span class="n">boolean</span><span class="p">:</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="n">boolean</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</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-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</span></a>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">boolean</span><span class="p">:</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="n">boolean</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</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-399"><a href="#L-399"><span class="linenos">399</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-400"><a href="#L-400"><span class="linenos">400</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-401"><a href="#L-401"><span class="linenos">401</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-402"><a href="#L-402"><span class="linenos">402</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-403"><a href="#L-403"><span class="linenos">403</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-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</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-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="c1"># you cannot subtract a date from an interval</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</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-409"><a href="#L-409"><span class="linenos">409</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-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">return</span> <span class="kc">None</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a><span class="k">def</span> <span class="nf">simplify_parens</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">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">Paren</span><span class="p">):</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">expression</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">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</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="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">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</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-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predicate</span><span class="p">)</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="ow">or</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">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="ow">and</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">Add</span><span class="p">))</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</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">Mul</span><span class="p">))</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">Add</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-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 class="k">return</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="k">return</span> <span class="n">expression</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</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">Neg</span><span class="p">):</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</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-356"><a href="#L-356"><span class="linenos">356</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-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</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-360"><a href="#L-360"><span class="linenos">360</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-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">return</span> <span class="n">expression</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><span id="L-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">b</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">False</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">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-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">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-376"><a href="#L-376"><span class="linenos">376</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-377"><a href="#L-377"><span class="linenos">377</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-378"><a href="#L-378"><span class="linenos">378</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-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-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">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-385"><a href="#L-385"><span class="linenos">385</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-386"><a href="#L-386"><span class="linenos">386</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-387"><a href="#L-387"><span class="linenos">387</span></a>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">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-389"><a href="#L-389"><span class="linenos">389</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-390"><a href="#L-390"><span class="linenos">390</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-391"><a href="#L-391"><span class="linenos">391</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-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</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-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">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-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="c1"># engines have differing int div behavior so intdiv is not safe</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</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-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span 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-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="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-401"><a href="#L-401"><span class="linenos">401</span></a>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="n">boolean</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="n">boolean</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</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-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">if</span> <span class="n">boolean</span><span class="p">:</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="n">boolean</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</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-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</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-412"><a href="#L-412"><span class="linenos">412</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-413"><a href="#L-413"><span class="linenos">413</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-414"><a href="#L-414"><span class="linenos">414</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-415"><a href="#L-415"><span class="linenos">415</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-416"><a href="#L-416"><span class="linenos">416</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-417"><a href="#L-417"><span class="linenos">417</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-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="c1"># you cannot subtract a date from an interval</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</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-420"><a href="#L-420"><span class="linenos">420</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-421"><a href="#L-421"><span class="linenos">421</span></a>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</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">Paren</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">expression</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">this</span> <span class="o">=</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="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a><span class="k">def</span> <span class="nf">remove_where_true</span><span class="p">(</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">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-435"><a href="#L-435"><span class="linenos">435</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-436"><a href="#L-436"><span class="linenos">436</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-437"><a href="#L-437"><span class="linenos">437</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-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <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-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="ow">and</span> <span class="ow">not</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-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="ow">and</span> <span class="ow">not</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;method&quot;</span><span class="p">)</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="p">):</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="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-444"><a href="#L-444"><span class="linenos">444</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="kc">None</span><span class="p">)</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</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-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">always_true</span><span class="p">(</span><span class="n">expression</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="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-450"><a href="#L-450"><span class="linenos">450</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-451"><a href="#L-451"><span class="linenos">451</span></a> <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><span id="L-454"><a href="#L-454"><span class="linenos">454</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-455"><a href="#L-455"><span class="linenos">455</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-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><span id="L-458"><a href="#L-458"><span class="linenos">458</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-459"><a href="#L-459"><span class="linenos">459</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-460"><a href="#L-460"><span class="linenos">460</span></a>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</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-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="ow">or</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">Paren</span><span class="p">)</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="ow">or</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">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predicate</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">parent</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-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="ow">and</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">Add</span><span class="p">))</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</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">Mul</span><span class="p">))</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">Add</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-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="p">):</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a><span class="n">CONSTANTS</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">,</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a><span class="p">)</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a><span class="k">def</span> <span class="nf">simplify_coalesce</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="c1"># COALESCE(x) -&gt; x</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</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">Coalesce</span><span class="p">)</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</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-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="c1"># COALESCE is also used as a Spark partitioning hint</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</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">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="p">):</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a><span class="k">def</span> <span class="nf">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-463"><a href="#L-463"><span class="linenos">463</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-462"><a href="#L-462"><span class="linenos">462</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">COMPARISONS</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">expression</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</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-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">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-468"><a href="#L-468"><span class="linenos">468</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-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="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</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">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-471"><a href="#L-471"><span class="linenos">471</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-472"><a href="#L-472"><span class="linenos">472</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-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">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-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</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-476"><a href="#L-476"><span class="linenos">476</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-477"><a href="#L-477"><span class="linenos">477</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-478"><a href="#L-478"><span class="linenos">478</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-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="kc">None</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">extract_date</span><span class="p">(</span><span class="n">cast</span><span class="p">):</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="c1"># The &quot;fromisoformat&quot; conversion could fail if the cast is used on an identifier,</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">if</span> <span class="n">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-487"><a href="#L-487"><span class="linenos">487</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-488"><a href="#L-488"><span class="linenos">488</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-489"><a href="#L-489"><span class="linenos">489</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-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">except</span> <span class="ne">ValueError</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="kc">None</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><span id="L-494"><a href="#L-494"><span class="linenos">494</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-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</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-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</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="kc">None</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">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-501"><a href="#L-501"><span class="linenos">501</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-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">unit</span> <span class="o">==</span> <span class="s2">&quot;year&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="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-505"><a href="#L-505"><span class="linenos">505</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-506"><a href="#L-506"><span class="linenos">506</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-507"><a href="#L-507"><span class="linenos">507</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-508"><a href="#L-508"><span class="linenos">508</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-509"><a href="#L-509"><span class="linenos">509</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-510"><a href="#L-510"><span class="linenos">510</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-511"><a href="#L-511"><span class="linenos">511</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 class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">):</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">coalesce</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">):</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">coalesce</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="c1"># This transformation is valid for non-constants,</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="c1"># but it really only does anything if they are both constants.</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="k">if</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">CONSTANTS</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">expression</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"># Find the first constant arg</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">for</span> <span class="n">arg_index</span><span class="p">,</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">coalesce</span><span class="o">.</span><span class="n">expressions</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="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">CONSTANTS</span><span class="p">):</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">break</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">else</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="n">expression</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">coalesce</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">coalesce</span><span class="o">.</span><span class="n">expressions</span><span class="p">[:</span><span class="n">arg_index</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="c1"># Remove the COALESCE function. This is an optimization, skipping a simplify iteration,</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="c1"># since we already remove COALESCE at the top of this function.</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="n">coalesce</span> <span class="o">=</span> <span class="n">coalesce</span> <span class="k">if</span> <span class="n">coalesce</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="n">coalesce</span><span class="o">.</span><span class="n">this</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="c1"># This expression is more complex than when we started, but it will get simplified further</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="n">coalesce</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="p">),</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">coalesce</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</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">other</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="p">),</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="p">)</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="p">)</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a>
+</span><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="n">CONCATS</span> <span class="o">=</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">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">)</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a><span class="n">SAFE_CONCATS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDPipe</span><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><span id="L-514"><a href="#L-514"><span class="linenos">514</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-515"><a href="#L-515"><span class="linenos">515</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-516"><a href="#L-516"><span class="linenos">516</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-517"><a href="#L-517"><span class="linenos">517</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-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="p">)</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</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-522"><a href="#L-522"><span class="linenos">522</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-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><span id="L-525"><a href="#L-525"><span class="linenos">525</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-526"><a href="#L-526"><span class="linenos">526</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-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">operands</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</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-529"><a href="#L-529"><span class="linenos">529</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-530"><a href="#L-530"><span class="linenos">530</span></a>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</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-533"><a href="#L-533"><span class="linenos">533</span></a>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">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-535"><a href="#L-535"><span class="linenos">535</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-536"><a href="#L-536"><span class="linenos">536</span></a>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</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-539"><a href="#L-539"><span class="linenos">539</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-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">break</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</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-514"><a href="#L-514"><span class="linenos">514</span></a><span class="k">def</span> <span class="nf">simplify_concat</span><span class="p">(</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="w"> </span><span class="sd">&quot;&quot;&quot;Reduces all groups that contain string literals by concatenating them.&quot;&quot;&quot;</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</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">CONCATS</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">):</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">new_args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">for</span> <span class="n">is_string_group</span><span class="p">,</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">is_string</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="k">if</span> <span class="n">is_string_group</span><span class="p">:</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="n">new_args</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="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">string</span> <span class="ow">in</span> <span class="n">group</span><span class="p">)))</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">new_args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">group</span><span class="p">)</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="c1"># Ensures we preserve the right concat type, i.e. whether it&#39;s &quot;safe&quot; or not</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="n">concat_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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">SAFE_CONCATS</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="k">return</span> <span class="n">new_args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">new_args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">concat_type</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">new_args</span><span class="p">)</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a><span class="c1"># CROSS joins result in an empty table if the right table is empty.</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a><span class="c1"># So we can only simplify certain types of joins to CROSS.</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a><span class="c1"># Or in other words, LEFT JOIN x ON TRUE != CROSS JOIN x</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a><span class="n">JOINS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <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-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;INNER&quot;</span><span class="p">),</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="p">(</span><span class="s2">&quot;RIGHT&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</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 class="s2">&quot;RIGHT&quot;</span><span class="p">,</span> <span class="s2">&quot;OUTER&quot;</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><span id="L-544"><a href="#L-544"><span class="linenos">544</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-545"><a href="#L-545"><span class="linenos">545</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-546"><a href="#L-546"><span class="linenos">546</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-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="p">)</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</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-545"><a href="#L-545"><span class="linenos">545</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-546"><a href="#L-546"><span class="linenos">546</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-547"><a href="#L-547"><span class="linenos">547</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-548"><a href="#L-548"><span class="linenos">548</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-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <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-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="ow">and</span> <span class="ow">not</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-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="ow">and</span> <span class="ow">not</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;method&quot;</span><span class="p">)</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="ow">and</span> <span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">side</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span><span class="p">)</span> <span class="ow">in</span> <span class="n">JOINS</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 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-556"><a href="#L-556"><span class="linenos">556</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="kc">None</span><span class="p">)</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</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-558"><a href="#L-558"><span class="linenos">558</span></a>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</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-561"><a href="#L-561"><span class="linenos">561</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-562"><a href="#L-562"><span class="linenos">562</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-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><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a><span class="k">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-567"><a href="#L-567"><span class="linenos">567</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-568"><a href="#L-568"><span class="linenos">568</span></a>
+</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a><span class="k">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-571"><a href="#L-571"><span class="linenos">571</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-572"><a href="#L-572"><span class="linenos">572</span></a>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a>
+</span><span id="L-574"><a href="#L-574"><span class="linenos">574</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-575"><a href="#L-575"><span class="linenos">575</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-576"><a href="#L-576"><span class="linenos">576</span></a>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a>
+</span><span id="L-578"><a href="#L-578"><span class="linenos">578</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-579"><a href="#L-579"><span class="linenos">579</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-580"><a href="#L-580"><span class="linenos">580</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-581"><a href="#L-581"><span class="linenos">581</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-582"><a href="#L-582"><span class="linenos">582</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-583"><a href="#L-583"><span class="linenos">583</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-584"><a href="#L-584"><span class="linenos">584</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-585"><a href="#L-585"><span class="linenos">585</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-586"><a href="#L-586"><span class="linenos">586</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-587"><a href="#L-587"><span class="linenos">587</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-588"><a href="#L-588"><span class="linenos">588</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-589"><a href="#L-589"><span class="linenos">589</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-590"><a href="#L-590"><span class="linenos">590</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-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a>
+</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</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-595"><a href="#L-595"><span class="linenos">595</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-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos">598</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-599"><a href="#L-599"><span class="linenos">599</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-600"><a href="#L-600"><span class="linenos">600</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-601"><a href="#L-601"><span class="linenos">601</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-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a>
+</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a>
+</span><span id="L-606"><a href="#L-606"><span class="linenos">606</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-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos">608</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-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
+</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a>
+</span><span id="L-612"><a href="#L-612"><span class="linenos">612</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-613"><a href="#L-613"><span class="linenos">613</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-614"><a href="#L-614"><span class="linenos">614</span></a>
+</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="k">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-616"><a href="#L-616"><span class="linenos">616</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-617"><a href="#L-617"><span class="linenos">617</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-618"><a href="#L-618"><span class="linenos">618</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-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</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-621"><a href="#L-621"><span class="linenos">621</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-622"><a href="#L-622"><span class="linenos">622</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-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a>
+</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a>
+</span><span id="L-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</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-628"><a href="#L-628"><span class="linenos">628</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-629"><a href="#L-629"><span class="linenos">629</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-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="p">)</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a>
+</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a>
+</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a><span class="k">def</span> <span class="nf">boolean_literal</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="n">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-635"><a href="#L-635"><span class="linenos">635</span></a>
+</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a>
+</span><span id="L-637"><a href="#L-637"><span class="linenos">637</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-638"><a href="#L-638"><span class="linenos">638</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-639"><a href="#L-639"><span class="linenos">639</span></a> <span class="n">operands</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos">640</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-641"><a href="#L-641"><span class="linenos">641</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-642"><a href="#L-642"><span class="linenos">642</span></a>
+</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos">644</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-645"><a href="#L-645"><span class="linenos">645</span></a>
+</span><span id="L-646"><a href="#L-646"><span class="linenos">646</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-647"><a href="#L-647"><span class="linenos">647</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-648"><a href="#L-648"><span class="linenos">648</span></a>
+</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="k">if</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-650"><a href="#L-650"><span class="linenos">650</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-651"><a href="#L-651"><span class="linenos">651</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-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="k">break</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-654"><a href="#L-654"><span class="linenos">654</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-655"><a href="#L-655"><span class="linenos">655</span></a>
+</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="k">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-657"><a href="#L-657"><span class="linenos">657</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-658"><a href="#L-658"><span class="linenos">658</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-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="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -745,25 +875,34 @@
</span><span id="simplify-55"><a href="#simplify-55"><span class="linenos">55</span></a> <span class="k">def</span> <span class="nf">_simplify</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-56"><a href="#simplify-56"><span class="linenos">56</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="simplify-57"><a href="#simplify-57"><span class="linenos">57</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="simplify-58"><a href="#simplify-58"><span class="linenos">58</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="simplify-59"><a href="#simplify-59"><span class="linenos">59</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">rewrite_between</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="simplify-60"><a href="#simplify-60"><span class="linenos">60</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">generate</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify-61"><a href="#simplify-61"><span class="linenos">61</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">absorb_and_eliminate</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify-62"><a href="#simplify-62"><span class="linenos">62</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="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">_simplify</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span>
-</span><span id="simplify-63"><a href="#simplify-63"><span class="linenos">63</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_not</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="simplify-64"><a href="#simplify-64"><span class="linenos">64</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="simplify-65"><a href="#simplify-65"><span class="linenos">65</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_connectors</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify-66"><a href="#simplify-66"><span class="linenos">66</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">remove_compliments</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify-67"><a href="#simplify-67"><span class="linenos">67</span></a> <span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="simplify-68"><a href="#simplify-68"><span class="linenos">68</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_literals</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify-69"><a href="#simplify-69"><span class="linenos">69</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_parens</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="simplify-70"><a href="#simplify-70"><span class="linenos">70</span></a> <span class="k">if</span> <span class="n">root</span><span class="p">:</span>
-</span><span id="simplify-71"><a href="#simplify-71"><span class="linenos">71</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="simplify-72"><a href="#simplify-72"><span class="linenos">72</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="simplify-73"><a href="#simplify-73"><span class="linenos">73</span></a>
-</span><span id="simplify-74"><a href="#simplify-74"><span class="linenos">74</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">while_changing</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify</span><span class="p">)</span>
-</span><span id="simplify-75"><a href="#simplify-75"><span class="linenos">75</span></a> <span class="n">remove_where_true</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="simplify-76"><a href="#simplify-76"><span class="linenos">76</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify-58"><a href="#simplify-58"><span class="linenos">58</span></a>
+</span><span id="simplify-59"><a href="#simplify-59"><span class="linenos">59</span></a> <span class="c1"># Pre-order transformations</span>
+</span><span id="simplify-60"><a href="#simplify-60"><span class="linenos">60</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="simplify-61"><a href="#simplify-61"><span class="linenos">61</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">rewrite_between</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-62"><a href="#simplify-62"><span class="linenos">62</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">generate</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify-63"><a href="#simplify-63"><span class="linenos">63</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">absorb_and_eliminate</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify-64"><a href="#simplify-64"><span class="linenos">64</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_concat</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-65"><a href="#simplify-65"><span class="linenos">65</span></a>
+</span><span id="simplify-66"><a href="#simplify-66"><span class="linenos">66</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="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">_simplify</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span>
+</span><span id="simplify-67"><a href="#simplify-67"><span class="linenos">67</span></a>
+</span><span id="simplify-68"><a href="#simplify-68"><span class="linenos">68</span></a> <span class="c1"># Post-order transformations</span>
+</span><span id="simplify-69"><a href="#simplify-69"><span class="linenos">69</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_not</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-70"><a href="#simplify-70"><span class="linenos">70</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">flatten</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-71"><a href="#simplify-71"><span class="linenos">71</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_connectors</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify-72"><a href="#simplify-72"><span class="linenos">72</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">remove_compliments</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify-73"><a href="#simplify-73"><span class="linenos">73</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_coalesce</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-74"><a href="#simplify-74"><span class="linenos">74</span></a> <span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="simplify-75"><a href="#simplify-75"><span class="linenos">75</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_literals</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify-76"><a href="#simplify-76"><span class="linenos">76</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">simplify_parens</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-77"><a href="#simplify-77"><span class="linenos">77</span></a>
+</span><span id="simplify-78"><a href="#simplify-78"><span class="linenos">78</span></a> <span class="k">if</span> <span class="n">root</span><span class="p">:</span>
+</span><span id="simplify-79"><a href="#simplify-79"><span class="linenos">79</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="simplify-80"><a href="#simplify-80"><span class="linenos">80</span></a>
+</span><span id="simplify-81"><a href="#simplify-81"><span class="linenos">81</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="simplify-82"><a href="#simplify-82"><span class="linenos">82</span></a>
+</span><span id="simplify-83"><a href="#simplify-83"><span class="linenos">83</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">while_changing</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify</span><span class="p">)</span>
+</span><span id="simplify-84"><a href="#simplify-84"><span class="linenos">84</span></a> <span class="n">remove_where_true</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="simplify-85"><a href="#simplify-85"><span class="linenos">85</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -807,18 +946,18 @@
</div>
<a class="headerlink" href="#rewrite_between"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="rewrite_between-79"><a href="#rewrite_between-79"><span class="linenos">79</span></a><span class="k">def</span> <span class="nf">rewrite_between</span><span 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="rewrite_between-80"><a href="#rewrite_between-80"><span class="linenos">80</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rewrite x between y and z to x &gt;= y AND x &lt;= z.</span>
-</span><span id="rewrite_between-81"><a href="#rewrite_between-81"><span class="linenos">81</span></a>
-</span><span id="rewrite_between-82"><a href="#rewrite_between-82"><span class="linenos">82</span></a><span class="sd"> This is done because comparison simplification is only done on lt/lte/gt/gte.</span>
-</span><span id="rewrite_between-83"><a href="#rewrite_between-83"><span class="linenos">83</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="rewrite_between-84"><a href="#rewrite_between-84"><span class="linenos">84</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">Between</span><span class="p">):</span>
-</span><span id="rewrite_between-85"><a href="#rewrite_between-85"><span class="linenos">85</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-86"><a href="#rewrite_between-86"><span class="linenos">86</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-87"><a href="#rewrite_between-87"><span class="linenos">87</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-88"><a href="#rewrite_between-88"><span class="linenos">88</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-89"><a href="#rewrite_between-89"><span class="linenos">89</span></a> <span class="p">)</span>
-</span><span id="rewrite_between-90"><a href="#rewrite_between-90"><span class="linenos">90</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="rewrite_between-88"><a href="#rewrite_between-88"><span class="linenos">88</span></a><span class="k">def</span> <span class="nf">rewrite_between</span><span 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="rewrite_between-89"><a href="#rewrite_between-89"><span class="linenos">89</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Rewrite x between y and z to x &gt;= y AND x &lt;= z.</span>
+</span><span id="rewrite_between-90"><a href="#rewrite_between-90"><span class="linenos">90</span></a>
+</span><span id="rewrite_between-91"><a href="#rewrite_between-91"><span class="linenos">91</span></a><span class="sd"> This is done because comparison simplification is only done on lt/lte/gt/gte.</span>
+</span><span id="rewrite_between-92"><a href="#rewrite_between-92"><span class="linenos">92</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="rewrite_between-93"><a href="#rewrite_between-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">Between</span><span class="p">):</span>
+</span><span id="rewrite_between-94"><a href="#rewrite_between-94"><span class="linenos">94</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-95"><a href="#rewrite_between-95"><span class="linenos">95</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-96"><a href="#rewrite_between-96"><span class="linenos">96</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-97"><a href="#rewrite_between-97"><span class="linenos">97</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-98"><a href="#rewrite_between-98"><span class="linenos">98</span></a> <span class="p">)</span>
+</span><span id="rewrite_between-99"><a href="#rewrite_between-99"><span class="linenos">99</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -840,40 +979,40 @@
</div>
<a class="headerlink" href="#simplify_not"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_not-93"><a href="#simplify_not-93"><span class="linenos"> 93</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-94"><a href="#simplify_not-94"><span class="linenos"> 94</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="simplify_not-95"><a href="#simplify_not-95"><span class="linenos"> 95</span></a><span class="sd"> Demorgan&#39;s Law</span>
-</span><span id="simplify_not-96"><a href="#simplify_not-96"><span class="linenos"> 96</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
-</span><span id="simplify_not-97"><a href="#simplify_not-97"><span class="linenos"> 97</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
-</span><span id="simplify_not-98"><a href="#simplify_not-98"><span class="linenos"> 98</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="simplify_not-99"><a href="#simplify_not-99"><span class="linenos"> 99</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-100"><a href="#simplify_not-100"><span class="linenos">100</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-101"><a href="#simplify_not-101"><span class="linenos">101</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-102"><a href="#simplify_not-102"><span class="linenos">102</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-103"><a href="#simplify_not-103"><span class="linenos">103</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-104"><a href="#simplify_not-104"><span class="linenos">104</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-105"><a href="#simplify_not-105"><span class="linenos">105</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-106"><a href="#simplify_not-106"><span class="linenos">106</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-107"><a href="#simplify_not-107"><span class="linenos">107</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-108"><a href="#simplify_not-108"><span class="linenos">108</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-109"><a href="#simplify_not-109"><span class="linenos">109</span></a> <span class="p">)</span>
-</span><span id="simplify_not-110"><a href="#simplify_not-110"><span class="linenos">110</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-111"><a href="#simplify_not-111"><span class="linenos">111</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-112"><a href="#simplify_not-112"><span class="linenos">112</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-113"><a href="#simplify_not-113"><span class="linenos">113</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-114"><a href="#simplify_not-114"><span class="linenos">114</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-115"><a href="#simplify_not-115"><span class="linenos">115</span></a> <span class="p">)</span>
-</span><span id="simplify_not-116"><a href="#simplify_not-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">condition</span><span class="p">):</span>
-</span><span id="simplify_not-117"><a href="#simplify_not-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_not-118"><a href="#simplify_not-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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
-</span><span id="simplify_not-119"><a href="#simplify_not-119"><span class="linenos">119</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-120"><a href="#simplify_not-120"><span class="linenos">120</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-121"><a href="#simplify_not-121"><span class="linenos">121</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-122"><a href="#simplify_not-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="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-123"><a href="#simplify_not-123"><span class="linenos">123</span></a> <span class="c1"># double negation</span>
-</span><span id="simplify_not-124"><a href="#simplify_not-124"><span class="linenos">124</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
-</span><span id="simplify_not-125"><a href="#simplify_not-125"><span class="linenos">125</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-126"><a href="#simplify_not-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_not-102"><a href="#simplify_not-102"><span class="linenos">102</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-103"><a href="#simplify_not-103"><span class="linenos">103</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="simplify_not-104"><a href="#simplify_not-104"><span class="linenos">104</span></a><span class="sd"> Demorgan&#39;s Law</span>
+</span><span id="simplify_not-105"><a href="#simplify_not-105"><span class="linenos">105</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
+</span><span id="simplify_not-106"><a href="#simplify_not-106"><span class="linenos">106</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
+</span><span id="simplify_not-107"><a href="#simplify_not-107"><span class="linenos">107</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="simplify_not-108"><a href="#simplify_not-108"><span class="linenos">108</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-109"><a href="#simplify_not-109"><span class="linenos">109</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-110"><a href="#simplify_not-110"><span class="linenos">110</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-111"><a href="#simplify_not-111"><span class="linenos">111</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-112"><a href="#simplify_not-112"><span class="linenos">112</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-113"><a href="#simplify_not-113"><span class="linenos">113</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-114"><a href="#simplify_not-114"><span class="linenos">114</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-115"><a href="#simplify_not-115"><span class="linenos">115</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-116"><a href="#simplify_not-116"><span class="linenos">116</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-117"><a href="#simplify_not-117"><span class="linenos">117</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-118"><a href="#simplify_not-118"><span class="linenos">118</span></a> <span class="p">)</span>
+</span><span id="simplify_not-119"><a href="#simplify_not-119"><span class="linenos">119</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-120"><a href="#simplify_not-120"><span class="linenos">120</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-121"><a href="#simplify_not-121"><span class="linenos">121</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-122"><a href="#simplify_not-122"><span class="linenos">122</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-123"><a href="#simplify_not-123"><span class="linenos">123</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-124"><a href="#simplify_not-124"><span class="linenos">124</span></a> <span class="p">)</span>
+</span><span id="simplify_not-125"><a href="#simplify_not-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">condition</span><span class="p">):</span>
+</span><span id="simplify_not-126"><a href="#simplify_not-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_not-127"><a href="#simplify_not-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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
+</span><span id="simplify_not-128"><a href="#simplify_not-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="simplify_not-129"><a href="#simplify_not-129"><span class="linenos">129</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-130"><a href="#simplify_not-130"><span class="linenos">130</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-131"><a href="#simplify_not-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="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-132"><a href="#simplify_not-132"><span class="linenos">132</span></a> <span class="c1"># double negation</span>
+</span><span id="simplify_not-133"><a href="#simplify_not-133"><span class="linenos">133</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
+</span><span id="simplify_not-134"><a href="#simplify_not-134"><span class="linenos">134</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-135"><a href="#simplify_not-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -895,17 +1034,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-129"><a href="#flatten-129"><span class="linenos">129</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-130"><a href="#flatten-130"><span class="linenos">130</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="flatten-131"><a href="#flatten-131"><span class="linenos">131</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
-</span><span id="flatten-132"><a href="#flatten-132"><span class="linenos">132</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
-</span><span id="flatten-133"><a href="#flatten-133"><span class="linenos">133</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="flatten-134"><a href="#flatten-134"><span class="linenos">134</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-135"><a href="#flatten-135"><span class="linenos">135</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-136"><a href="#flatten-136"><span class="linenos">136</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-137"><a href="#flatten-137"><span class="linenos">137</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-138"><a href="#flatten-138"><span class="linenos">138</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-139"><a href="#flatten-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="flatten-138"><a href="#flatten-138"><span class="linenos">138</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-139"><a href="#flatten-139"><span class="linenos">139</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="flatten-140"><a href="#flatten-140"><span class="linenos">140</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
+</span><span id="flatten-141"><a href="#flatten-141"><span class="linenos">141</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
+</span><span id="flatten-142"><a href="#flatten-142"><span class="linenos">142</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="flatten-143"><a href="#flatten-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">Connector</span><span class="p">):</span>
+</span><span id="flatten-144"><a href="#flatten-144"><span class="linenos">144</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-145"><a href="#flatten-145"><span class="linenos">145</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-146"><a href="#flatten-146"><span class="linenos">146</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-147"><a href="#flatten-147"><span class="linenos">147</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-148"><a href="#flatten-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -926,42 +1065,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-142"><a href="#simplify_connectors-142"><span class="linenos">142</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-143"><a href="#simplify_connectors-143"><span class="linenos">143</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-144"><a href="#simplify_connectors-144"><span class="linenos">144</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-145"><a href="#simplify_connectors-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="simplify_connectors-146"><a href="#simplify_connectors-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="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">):</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">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-148"><a href="#simplify_connectors-148"><span class="linenos">148</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-149"><a href="#simplify_connectors-149"><span class="linenos">149</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-150"><a href="#simplify_connectors-150"><span class="linenos">150</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-151"><a href="#simplify_connectors-151"><span class="linenos">151</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-152"><a href="#simplify_connectors-152"><span class="linenos">152</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-153"><a href="#simplify_connectors-153"><span class="linenos">153</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-154"><a href="#simplify_connectors-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="simplify_connectors-155"><a href="#simplify_connectors-155"><span class="linenos">155</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-156"><a href="#simplify_connectors-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="simplify_connectors-157"><a href="#simplify_connectors-157"><span class="linenos">157</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-158"><a href="#simplify_connectors-158"><span class="linenos">158</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-159"><a href="#simplify_connectors-159"><span class="linenos">159</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-160"><a href="#simplify_connectors-160"><span class="linenos">160</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-161"><a href="#simplify_connectors-161"><span class="linenos">161</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-162"><a href="#simplify_connectors-162"><span class="linenos">162</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-163"><a href="#simplify_connectors-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="simplify_connectors-164"><a href="#simplify_connectors-164"><span class="linenos">164</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-165"><a href="#simplify_connectors-165"><span class="linenos">165</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-166"><a href="#simplify_connectors-166"><span class="linenos">166</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-167"><a href="#simplify_connectors-167"><span class="linenos">167</span></a> <span class="p">):</span>
-</span><span id="simplify_connectors-168"><a href="#simplify_connectors-168"><span class="linenos">168</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-169"><a href="#simplify_connectors-169"><span class="linenos">169</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-170"><a href="#simplify_connectors-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="simplify_connectors-171"><a href="#simplify_connectors-171"><span class="linenos">171</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-172"><a href="#simplify_connectors-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="simplify_connectors-173"><a href="#simplify_connectors-173"><span class="linenos">173</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-174"><a href="#simplify_connectors-174"><span class="linenos">174</span></a>
-</span><span id="simplify_connectors-175"><a href="#simplify_connectors-175"><span class="linenos">175</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-176"><a href="#simplify_connectors-176"><span class="linenos">176</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-177"><a href="#simplify_connectors-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_connectors-151"><a href="#simplify_connectors-151"><span class="linenos">151</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-152"><a href="#simplify_connectors-152"><span class="linenos">152</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-153"><a href="#simplify_connectors-153"><span class="linenos">153</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-154"><a href="#simplify_connectors-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="simplify_connectors-155"><a href="#simplify_connectors-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">And</span><span class="p">):</span>
+</span><span id="simplify_connectors-156"><a href="#simplify_connectors-156"><span class="linenos">156</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-157"><a href="#simplify_connectors-157"><span class="linenos">157</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-158"><a href="#simplify_connectors-158"><span class="linenos">158</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-159"><a href="#simplify_connectors-159"><span class="linenos">159</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-160"><a href="#simplify_connectors-160"><span class="linenos">160</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-161"><a href="#simplify_connectors-161"><span class="linenos">161</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-162"><a href="#simplify_connectors-162"><span class="linenos">162</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-163"><a href="#simplify_connectors-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="simplify_connectors-164"><a href="#simplify_connectors-164"><span class="linenos">164</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-165"><a href="#simplify_connectors-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="simplify_connectors-166"><a href="#simplify_connectors-166"><span class="linenos">166</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-167"><a href="#simplify_connectors-167"><span class="linenos">167</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-168"><a href="#simplify_connectors-168"><span class="linenos">168</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-169"><a href="#simplify_connectors-169"><span class="linenos">169</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-170"><a href="#simplify_connectors-170"><span class="linenos">170</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-171"><a href="#simplify_connectors-171"><span class="linenos">171</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-172"><a href="#simplify_connectors-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="simplify_connectors-173"><a href="#simplify_connectors-173"><span class="linenos">173</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-174"><a href="#simplify_connectors-174"><span class="linenos">174</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-175"><a href="#simplify_connectors-175"><span class="linenos">175</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-176"><a href="#simplify_connectors-176"><span class="linenos">176</span></a> <span class="p">):</span>
+</span><span id="simplify_connectors-177"><a href="#simplify_connectors-177"><span class="linenos">177</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-178"><a href="#simplify_connectors-178"><span class="linenos">178</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-179"><a href="#simplify_connectors-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="simplify_connectors-180"><a href="#simplify_connectors-180"><span class="linenos">180</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-181"><a href="#simplify_connectors-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="simplify_connectors-182"><a href="#simplify_connectors-182"><span class="linenos">182</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-183"><a href="#simplify_connectors-183"><span class="linenos">183</span></a>
+</span><span id="simplify_connectors-184"><a href="#simplify_connectors-184"><span class="linenos">184</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-185"><a href="#simplify_connectors-185"><span class="linenos">185</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-186"><a href="#simplify_connectors-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -996,7 +1135,7 @@ A OR (B OR C) -> A OR B OR C</p>
<div class="attr variable">
<span class="name">COMPARISONS</span> =
<input id="COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="COMPARISONS-view-value"></label><span class="default_value">(&lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;)</span>
+ <label class="view-value-button pdoc-button" for="COMPARISONS-view-value"></label><span class="default_value">(&lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;)</span>
</div>
@@ -1029,20 +1168,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-259"><a href="#remove_compliments-259"><span class="linenos">259</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-260"><a href="#remove_compliments-260"><span class="linenos">260</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="remove_compliments-261"><a href="#remove_compliments-261"><span class="linenos">261</span></a><span class="sd"> Removing compliments.</span>
-</span><span id="remove_compliments-262"><a href="#remove_compliments-262"><span class="linenos">262</span></a>
-</span><span id="remove_compliments-263"><a href="#remove_compliments-263"><span class="linenos">263</span></a><span class="sd"> A AND NOT A -&gt; FALSE</span>
-</span><span id="remove_compliments-264"><a href="#remove_compliments-264"><span class="linenos">264</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
-</span><span id="remove_compliments-265"><a href="#remove_compliments-265"><span class="linenos">265</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="remove_compliments-266"><a href="#remove_compliments-266"><span class="linenos">266</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-267"><a href="#remove_compliments-267"><span class="linenos">267</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-268"><a href="#remove_compliments-268"><span class="linenos">268</span></a>
-</span><span id="remove_compliments-269"><a href="#remove_compliments-269"><span class="linenos">269</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-270"><a href="#remove_compliments-270"><span class="linenos">270</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-271"><a href="#remove_compliments-271"><span class="linenos">271</span></a> <span class="k">return</span> <span class="n">compliment</span>
-</span><span id="remove_compliments-272"><a href="#remove_compliments-272"><span class="linenos">272</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="remove_compliments-269"><a href="#remove_compliments-269"><span class="linenos">269</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-270"><a href="#remove_compliments-270"><span class="linenos">270</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="remove_compliments-271"><a href="#remove_compliments-271"><span class="linenos">271</span></a><span class="sd"> Removing compliments.</span>
+</span><span id="remove_compliments-272"><a href="#remove_compliments-272"><span class="linenos">272</span></a>
+</span><span id="remove_compliments-273"><a href="#remove_compliments-273"><span class="linenos">273</span></a><span class="sd"> A AND NOT A -&gt; FALSE</span>
+</span><span id="remove_compliments-274"><a href="#remove_compliments-274"><span class="linenos">274</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
+</span><span id="remove_compliments-275"><a href="#remove_compliments-275"><span class="linenos">275</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="remove_compliments-276"><a href="#remove_compliments-276"><span class="linenos">276</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-277"><a href="#remove_compliments-277"><span class="linenos">277</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-278"><a href="#remove_compliments-278"><span class="linenos">278</span></a>
+</span><span id="remove_compliments-279"><a href="#remove_compliments-279"><span class="linenos">279</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-280"><a href="#remove_compliments-280"><span class="linenos">280</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-281"><a href="#remove_compliments-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="n">compliment</span>
+</span><span id="remove_compliments-282"><a href="#remove_compliments-282"><span class="linenos">282</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1065,30 +1204,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-275"><a href="#uniq_sort-275"><span class="linenos">275</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">generate</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-276"><a href="#uniq_sort-276"><span class="linenos">276</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="uniq_sort-277"><a href="#uniq_sort-277"><span class="linenos">277</span></a><span class="sd"> Uniq and sort a connector.</span>
-</span><span id="uniq_sort-278"><a href="#uniq_sort-278"><span class="linenos">278</span></a>
-</span><span id="uniq_sort-279"><a href="#uniq_sort-279"><span class="linenos">279</span></a><span class="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
-</span><span id="uniq_sort-280"><a href="#uniq_sort-280"><span class="linenos">280</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="uniq_sort-281"><a href="#uniq_sort-281"><span class="linenos">281</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-282"><a href="#uniq_sort-282"><span class="linenos">282</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-283"><a href="#uniq_sort-283"><span class="linenos">283</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-284"><a href="#uniq_sort-284"><span class="linenos">284</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">generate</span><span class="p">(</span><span class="n">e</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-285"><a href="#uniq_sort-285"><span class="linenos">285</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-286"><a href="#uniq_sort-286"><span class="linenos">286</span></a>
-</span><span id="uniq_sort-287"><a href="#uniq_sort-287"><span class="linenos">287</span></a> <span class="c1"># check if the operands are already sorted, if not sort them</span>
-</span><span id="uniq_sort-288"><a href="#uniq_sort-288"><span class="linenos">288</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
-</span><span id="uniq_sort-289"><a href="#uniq_sort-289"><span class="linenos">289</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-290"><a href="#uniq_sort-290"><span class="linenos">290</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-291"><a href="#uniq_sort-291"><span class="linenos">291</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-292"><a href="#uniq_sort-292"><span class="linenos">292</span></a> <span class="k">break</span>
-</span><span id="uniq_sort-293"><a href="#uniq_sort-293"><span class="linenos">293</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="uniq_sort-294"><a href="#uniq_sort-294"><span class="linenos">294</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
-</span><span id="uniq_sort-295"><a href="#uniq_sort-295"><span class="linenos">295</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-296"><a href="#uniq_sort-296"><span class="linenos">296</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-297"><a href="#uniq_sort-297"><span class="linenos">297</span></a>
-</span><span id="uniq_sort-298"><a href="#uniq_sort-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="uniq_sort-285"><a href="#uniq_sort-285"><span class="linenos">285</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">generate</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-286"><a href="#uniq_sort-286"><span class="linenos">286</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="uniq_sort-287"><a href="#uniq_sort-287"><span class="linenos">287</span></a><span class="sd"> Uniq and sort a connector.</span>
+</span><span id="uniq_sort-288"><a href="#uniq_sort-288"><span class="linenos">288</span></a>
+</span><span id="uniq_sort-289"><a href="#uniq_sort-289"><span class="linenos">289</span></a><span class="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
+</span><span id="uniq_sort-290"><a href="#uniq_sort-290"><span class="linenos">290</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="uniq_sort-291"><a href="#uniq_sort-291"><span class="linenos">291</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-292"><a href="#uniq_sort-292"><span class="linenos">292</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-293"><a href="#uniq_sort-293"><span class="linenos">293</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-294"><a href="#uniq_sort-294"><span class="linenos">294</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">generate</span><span class="p">(</span><span class="n">e</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-295"><a href="#uniq_sort-295"><span class="linenos">295</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-296"><a href="#uniq_sort-296"><span class="linenos">296</span></a>
+</span><span id="uniq_sort-297"><a href="#uniq_sort-297"><span class="linenos">297</span></a> <span class="c1"># check if the operands are already sorted, if not sort them</span>
+</span><span id="uniq_sort-298"><a href="#uniq_sort-298"><span class="linenos">298</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
+</span><span id="uniq_sort-299"><a href="#uniq_sort-299"><span class="linenos">299</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-300"><a href="#uniq_sort-300"><span class="linenos">300</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-301"><a href="#uniq_sort-301"><span class="linenos">301</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-302"><a href="#uniq_sort-302"><span class="linenos">302</span></a> <span class="k">break</span>
+</span><span id="uniq_sort-303"><a href="#uniq_sort-303"><span class="linenos">303</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="uniq_sort-304"><a href="#uniq_sort-304"><span class="linenos">304</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
+</span><span id="uniq_sort-305"><a href="#uniq_sort-305"><span class="linenos">305</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-306"><a href="#uniq_sort-306"><span class="linenos">306</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-307"><a href="#uniq_sort-307"><span class="linenos">307</span></a>
+</span><span id="uniq_sort-308"><a href="#uniq_sort-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1110,44 +1249,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-301"><a href="#absorb_and_eliminate-301"><span class="linenos">301</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-302"><a href="#absorb_and_eliminate-302"><span class="linenos">302</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="absorb_and_eliminate-303"><a href="#absorb_and_eliminate-303"><span class="linenos">303</span></a><span class="sd"> absorption:</span>
-</span><span id="absorb_and_eliminate-304"><a href="#absorb_and_eliminate-304"><span class="linenos">304</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-305"><a href="#absorb_and_eliminate-305"><span class="linenos">305</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-306"><a href="#absorb_and_eliminate-306"><span class="linenos">306</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
-</span><span id="absorb_and_eliminate-307"><a href="#absorb_and_eliminate-307"><span class="linenos">307</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
-</span><span id="absorb_and_eliminate-308"><a href="#absorb_and_eliminate-308"><span class="linenos">308</span></a><span class="sd"> elimination:</span>
-</span><span id="absorb_and_eliminate-309"><a href="#absorb_and_eliminate-309"><span class="linenos">309</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-310"><a href="#absorb_and_eliminate-310"><span class="linenos">310</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-311"><a href="#absorb_and_eliminate-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="absorb_and_eliminate-312"><a href="#absorb_and_eliminate-312"><span class="linenos">312</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-313"><a href="#absorb_and_eliminate-313"><span class="linenos">313</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-314"><a href="#absorb_and_eliminate-314"><span class="linenos">314</span></a>
-</span><span id="absorb_and_eliminate-315"><a href="#absorb_and_eliminate-315"><span class="linenos">315</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-316"><a href="#absorb_and_eliminate-316"><span class="linenos">316</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-317"><a href="#absorb_and_eliminate-317"><span class="linenos">317</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-318"><a href="#absorb_and_eliminate-318"><span class="linenos">318</span></a>
-</span><span id="absorb_and_eliminate-319"><a href="#absorb_and_eliminate-319"><span class="linenos">319</span></a> <span class="c1"># absorb</span>
-</span><span id="absorb_and_eliminate-320"><a href="#absorb_and_eliminate-320"><span class="linenos">320</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-321"><a href="#absorb_and_eliminate-321"><span class="linenos">321</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-322"><a href="#absorb_and_eliminate-322"><span class="linenos">322</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-323"><a href="#absorb_and_eliminate-323"><span class="linenos">323</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-324"><a href="#absorb_and_eliminate-324"><span class="linenos">324</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-325"><a href="#absorb_and_eliminate-325"><span class="linenos">325</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-326"><a href="#absorb_and_eliminate-326"><span class="linenos">326</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-327"><a href="#absorb_and_eliminate-327"><span class="linenos">327</span></a> <span class="c1"># eliminate</span>
-</span><span id="absorb_and_eliminate-328"><a href="#absorb_and_eliminate-328"><span class="linenos">328</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-329"><a href="#absorb_and_eliminate-329"><span class="linenos">329</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-330"><a href="#absorb_and_eliminate-330"><span class="linenos">330</span></a>
-</span><span id="absorb_and_eliminate-331"><a href="#absorb_and_eliminate-331"><span class="linenos">331</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-332"><a href="#absorb_and_eliminate-332"><span class="linenos">332</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-333"><a href="#absorb_and_eliminate-333"><span class="linenos">333</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-334"><a href="#absorb_and_eliminate-334"><span class="linenos">334</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-335"><a href="#absorb_and_eliminate-335"><span class="linenos">335</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-336"><a href="#absorb_and_eliminate-336"><span class="linenos">336</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-337"><a href="#absorb_and_eliminate-337"><span class="linenos">337</span></a>
-</span><span id="absorb_and_eliminate-338"><a href="#absorb_and_eliminate-338"><span class="linenos">338</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-311"><a href="#absorb_and_eliminate-311"><span class="linenos">311</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-312"><a href="#absorb_and_eliminate-312"><span class="linenos">312</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="absorb_and_eliminate-313"><a href="#absorb_and_eliminate-313"><span class="linenos">313</span></a><span class="sd"> absorption:</span>
+</span><span id="absorb_and_eliminate-314"><a href="#absorb_and_eliminate-314"><span class="linenos">314</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-315"><a href="#absorb_and_eliminate-315"><span class="linenos">315</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-316"><a href="#absorb_and_eliminate-316"><span class="linenos">316</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
+</span><span id="absorb_and_eliminate-317"><a href="#absorb_and_eliminate-317"><span class="linenos">317</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
+</span><span id="absorb_and_eliminate-318"><a href="#absorb_and_eliminate-318"><span class="linenos">318</span></a><span class="sd"> elimination:</span>
+</span><span id="absorb_and_eliminate-319"><a href="#absorb_and_eliminate-319"><span class="linenos">319</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-320"><a href="#absorb_and_eliminate-320"><span class="linenos">320</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-321"><a href="#absorb_and_eliminate-321"><span class="linenos">321</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="absorb_and_eliminate-322"><a href="#absorb_and_eliminate-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">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-323"><a href="#absorb_and_eliminate-323"><span class="linenos">323</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-324"><a href="#absorb_and_eliminate-324"><span class="linenos">324</span></a>
+</span><span id="absorb_and_eliminate-325"><a href="#absorb_and_eliminate-325"><span class="linenos">325</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-326"><a href="#absorb_and_eliminate-326"><span class="linenos">326</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-327"><a href="#absorb_and_eliminate-327"><span class="linenos">327</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-328"><a href="#absorb_and_eliminate-328"><span class="linenos">328</span></a>
+</span><span id="absorb_and_eliminate-329"><a href="#absorb_and_eliminate-329"><span class="linenos">329</span></a> <span class="c1"># absorb</span>
+</span><span id="absorb_and_eliminate-330"><a href="#absorb_and_eliminate-330"><span class="linenos">330</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-331"><a href="#absorb_and_eliminate-331"><span class="linenos">331</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-332"><a href="#absorb_and_eliminate-332"><span class="linenos">332</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-333"><a href="#absorb_and_eliminate-333"><span class="linenos">333</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-334"><a href="#absorb_and_eliminate-334"><span class="linenos">334</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-335"><a href="#absorb_and_eliminate-335"><span class="linenos">335</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-336"><a href="#absorb_and_eliminate-336"><span class="linenos">336</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-337"><a href="#absorb_and_eliminate-337"><span class="linenos">337</span></a> <span class="c1"># eliminate</span>
+</span><span id="absorb_and_eliminate-338"><a href="#absorb_and_eliminate-338"><span class="linenos">338</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-339"><a href="#absorb_and_eliminate-339"><span class="linenos">339</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-340"><a href="#absorb_and_eliminate-340"><span class="linenos">340</span></a>
+</span><span id="absorb_and_eliminate-341"><a href="#absorb_and_eliminate-341"><span class="linenos">341</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-342"><a href="#absorb_and_eliminate-342"><span class="linenos">342</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-343"><a href="#absorb_and_eliminate-343"><span class="linenos">343</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-344"><a href="#absorb_and_eliminate-344"><span class="linenos">344</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-345"><a href="#absorb_and_eliminate-345"><span class="linenos">345</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-346"><a href="#absorb_and_eliminate-346"><span class="linenos">346</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-347"><a href="#absorb_and_eliminate-347"><span class="linenos">347</span></a>
+</span><span id="absorb_and_eliminate-348"><a href="#absorb_and_eliminate-348"><span class="linenos">348</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1174,18 +1313,19 @@ elimination:
</div>
<a class="headerlink" href="#simplify_literals"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literals-341"><a href="#simplify_literals-341"><span class="linenos">341</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-342"><a href="#simplify_literals-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">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-343"><a href="#simplify_literals-343"><span class="linenos">343</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-344"><a href="#simplify_literals-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="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">):</span>
-</span><span id="simplify_literals-345"><a href="#simplify_literals-345"><span class="linenos">345</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-346"><a href="#simplify_literals-346"><span class="linenos">346</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-347"><a href="#simplify_literals-347"><span class="linenos">347</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-348"><a href="#simplify_literals-348"><span class="linenos">348</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-349"><a href="#simplify_literals-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">value</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
-</span><span id="simplify_literals-350"><a href="#simplify_literals-350"><span class="linenos">350</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-351"><a href="#simplify_literals-351"><span class="linenos">351</span></a>
-</span><span id="simplify_literals-352"><a href="#simplify_literals-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literals-351"><a href="#simplify_literals-351"><span class="linenos">351</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-352"><a href="#simplify_literals-352"><span class="linenos">352</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-353"><a href="#simplify_literals-353"><span class="linenos">353</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-354"><a href="#simplify_literals-354"><span class="linenos">354</span></a>
+</span><span id="simplify_literals-355"><a href="#simplify_literals-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">Neg</span><span class="p">):</span>
+</span><span id="simplify_literals-356"><a href="#simplify_literals-356"><span class="linenos">356</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-357"><a href="#simplify_literals-357"><span class="linenos">357</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-358"><a href="#simplify_literals-358"><span class="linenos">358</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-359"><a href="#simplify_literals-359"><span class="linenos">359</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-360"><a href="#simplify_literals-360"><span class="linenos">360</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-361"><a href="#simplify_literals-361"><span class="linenos">361</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-362"><a href="#simplify_literals-362"><span class="linenos">362</span></a>
+</span><span id="simplify_literals-363"><a href="#simplify_literals-363"><span class="linenos">363</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1203,29 +1343,188 @@ elimination:
</div>
<a class="headerlink" href="#simplify_parens"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_parens-415"><a href="#simplify_parens-415"><span class="linenos">415</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-416"><a href="#simplify_parens-416"><span class="linenos">416</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">Paren</span><span class="p">):</span>
-</span><span id="simplify_parens-417"><a href="#simplify_parens-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="simplify_parens-418"><a href="#simplify_parens-418"><span class="linenos">418</span></a>
-</span><span id="simplify_parens-419"><a href="#simplify_parens-419"><span class="linenos">419</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_parens-420"><a href="#simplify_parens-420"><span class="linenos">420</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="simplify_parens-421"><a href="#simplify_parens-421"><span class="linenos">421</span></a>
-</span><span id="simplify_parens-422"><a href="#simplify_parens-422"><span class="linenos">422</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">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="simplify_parens-423"><a href="#simplify_parens-423"><span class="linenos">423</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</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-424"><a href="#simplify_parens-424"><span class="linenos">424</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predicate</span><span class="p">)</span>
-</span><span id="simplify_parens-425"><a href="#simplify_parens-425"><span class="linenos">425</span></a> <span class="ow">or</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">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
-</span><span id="simplify_parens-426"><a href="#simplify_parens-426"><span class="linenos">426</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="ow">and</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">Add</span><span class="p">))</span>
-</span><span id="simplify_parens-427"><a href="#simplify_parens-427"><span class="linenos">427</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</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">Mul</span><span class="p">))</span>
-</span><span id="simplify_parens-428"><a href="#simplify_parens-428"><span class="linenos">428</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">Add</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="simplify_parens-429"><a href="#simplify_parens-429"><span class="linenos">429</span></a> <span class="p">):</span>
-</span><span id="simplify_parens-430"><a href="#simplify_parens-430"><span class="linenos">430</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-431"><a href="#simplify_parens-431"><span class="linenos">431</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_parens-426"><a href="#simplify_parens-426"><span class="linenos">426</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-427"><a href="#simplify_parens-427"><span class="linenos">427</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">Paren</span><span class="p">):</span>
+</span><span id="simplify_parens-428"><a href="#simplify_parens-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify_parens-429"><a href="#simplify_parens-429"><span class="linenos">429</span></a>
+</span><span id="simplify_parens-430"><a href="#simplify_parens-430"><span class="linenos">430</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_parens-431"><a href="#simplify_parens-431"><span class="linenos">431</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="simplify_parens-432"><a href="#simplify_parens-432"><span class="linenos">432</span></a>
+</span><span id="simplify_parens-433"><a href="#simplify_parens-433"><span class="linenos">433</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">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="simplify_parens-434"><a href="#simplify_parens-434"><span class="linenos">434</span></a> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</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-435"><a href="#simplify_parens-435"><span class="linenos">435</span></a> <span class="ow">or</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">Paren</span><span class="p">)</span>
+</span><span id="simplify_parens-436"><a href="#simplify_parens-436"><span class="linenos">436</span></a> <span class="ow">or</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">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
+</span><span id="simplify_parens-437"><a href="#simplify_parens-437"><span class="linenos">437</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predicate</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">parent</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-438"><a href="#simplify_parens-438"><span class="linenos">438</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="ow">and</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">Add</span><span class="p">))</span>
+</span><span id="simplify_parens-439"><a href="#simplify_parens-439"><span class="linenos">439</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</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">Mul</span><span class="p">))</span>
+</span><span id="simplify_parens-440"><a href="#simplify_parens-440"><span class="linenos">440</span></a> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</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">Add</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="simplify_parens-441"><a href="#simplify_parens-441"><span class="linenos">441</span></a> <span class="p">):</span>
+</span><span id="simplify_parens-442"><a href="#simplify_parens-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="simplify_parens-443"><a href="#simplify_parens-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
</section>
+ <section id="CONSTANTS">
+ <div class="attr variable">
+ <span class="name">CONSTANTS</span> =
+<input id="CONSTANTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="CONSTANTS-view-value"></label><span class="default_value">(&lt;class &#39;<a href="../expressions.html#Literal">sqlglot.expressions.Literal</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;)</span>
+
+
+ </div>
+ <a class="headerlink" href="#CONSTANTS"></a>
+
+
+
+ </section>
+ <section id="simplify_coalesce">
+ <input id="simplify_coalesce-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">simplify_coalesce</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span></span><span class="return-annotation">):</span></span>
+
+ <label class="view-source-button" for="simplify_coalesce-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#simplify_coalesce"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_coalesce-453"><a href="#simplify_coalesce-453"><span class="linenos">453</span></a><span class="k">def</span> <span class="nf">simplify_coalesce</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="simplify_coalesce-454"><a href="#simplify_coalesce-454"><span class="linenos">454</span></a> <span class="c1"># COALESCE(x) -&gt; x</span>
+</span><span id="simplify_coalesce-455"><a href="#simplify_coalesce-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="simplify_coalesce-456"><a href="#simplify_coalesce-456"><span class="linenos">456</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">Coalesce</span><span class="p">)</span>
+</span><span id="simplify_coalesce-457"><a href="#simplify_coalesce-457"><span class="linenos">457</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="simplify_coalesce-458"><a href="#simplify_coalesce-458"><span class="linenos">458</span></a> <span class="c1"># COALESCE is also used as a Spark partitioning hint</span>
+</span><span id="simplify_coalesce-459"><a href="#simplify_coalesce-459"><span class="linenos">459</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">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">)</span>
+</span><span id="simplify_coalesce-460"><a href="#simplify_coalesce-460"><span class="linenos">460</span></a> <span class="p">):</span>
+</span><span id="simplify_coalesce-461"><a href="#simplify_coalesce-461"><span class="linenos">461</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_coalesce-462"><a href="#simplify_coalesce-462"><span class="linenos">462</span></a>
+</span><span id="simplify_coalesce-463"><a href="#simplify_coalesce-463"><span class="linenos">463</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">COMPARISONS</span><span class="p">):</span>
+</span><span id="simplify_coalesce-464"><a href="#simplify_coalesce-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify_coalesce-465"><a href="#simplify_coalesce-465"><span class="linenos">465</span></a>
+</span><span id="simplify_coalesce-466"><a href="#simplify_coalesce-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">):</span>
+</span><span id="simplify_coalesce-467"><a href="#simplify_coalesce-467"><span class="linenos">467</span></a> <span class="n">coalesce</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="simplify_coalesce-468"><a href="#simplify_coalesce-468"><span class="linenos">468</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="simplify_coalesce-469"><a href="#simplify_coalesce-469"><span class="linenos">469</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">):</span>
+</span><span id="simplify_coalesce-470"><a href="#simplify_coalesce-470"><span class="linenos">470</span></a> <span class="n">coalesce</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="simplify_coalesce-471"><a href="#simplify_coalesce-471"><span class="linenos">471</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="simplify_coalesce-472"><a href="#simplify_coalesce-472"><span class="linenos">472</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="simplify_coalesce-473"><a href="#simplify_coalesce-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify_coalesce-474"><a href="#simplify_coalesce-474"><span class="linenos">474</span></a>
+</span><span id="simplify_coalesce-475"><a href="#simplify_coalesce-475"><span class="linenos">475</span></a> <span class="c1"># This transformation is valid for non-constants,</span>
+</span><span id="simplify_coalesce-476"><a href="#simplify_coalesce-476"><span class="linenos">476</span></a> <span class="c1"># but it really only does anything if they are both constants.</span>
+</span><span id="simplify_coalesce-477"><a href="#simplify_coalesce-477"><span class="linenos">477</span></a> <span class="k">if</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">CONSTANTS</span><span class="p">):</span>
+</span><span id="simplify_coalesce-478"><a href="#simplify_coalesce-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify_coalesce-479"><a href="#simplify_coalesce-479"><span class="linenos">479</span></a>
+</span><span id="simplify_coalesce-480"><a href="#simplify_coalesce-480"><span class="linenos">480</span></a> <span class="c1"># Find the first constant arg</span>
+</span><span id="simplify_coalesce-481"><a href="#simplify_coalesce-481"><span class="linenos">481</span></a> <span class="k">for</span> <span class="n">arg_index</span><span class="p">,</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">coalesce</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="simplify_coalesce-482"><a href="#simplify_coalesce-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">CONSTANTS</span><span class="p">):</span>
+</span><span id="simplify_coalesce-483"><a href="#simplify_coalesce-483"><span class="linenos">483</span></a> <span class="k">break</span>
+</span><span id="simplify_coalesce-484"><a href="#simplify_coalesce-484"><span class="linenos">484</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="simplify_coalesce-485"><a href="#simplify_coalesce-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify_coalesce-486"><a href="#simplify_coalesce-486"><span class="linenos">486</span></a>
+</span><span id="simplify_coalesce-487"><a href="#simplify_coalesce-487"><span class="linenos">487</span></a> <span class="n">coalesce</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">coalesce</span><span class="o">.</span><span class="n">expressions</span><span class="p">[:</span><span class="n">arg_index</span><span class="p">])</span>
+</span><span id="simplify_coalesce-488"><a href="#simplify_coalesce-488"><span class="linenos">488</span></a>
+</span><span id="simplify_coalesce-489"><a href="#simplify_coalesce-489"><span class="linenos">489</span></a> <span class="c1"># Remove the COALESCE function. This is an optimization, skipping a simplify iteration,</span>
+</span><span id="simplify_coalesce-490"><a href="#simplify_coalesce-490"><span class="linenos">490</span></a> <span class="c1"># since we already remove COALESCE at the top of this function.</span>
+</span><span id="simplify_coalesce-491"><a href="#simplify_coalesce-491"><span class="linenos">491</span></a> <span class="n">coalesce</span> <span class="o">=</span> <span class="n">coalesce</span> <span class="k">if</span> <span class="n">coalesce</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="n">coalesce</span><span class="o">.</span><span class="n">this</span>
+</span><span id="simplify_coalesce-492"><a href="#simplify_coalesce-492"><span class="linenos">492</span></a>
+</span><span id="simplify_coalesce-493"><a href="#simplify_coalesce-493"><span class="linenos">493</span></a> <span class="c1"># This expression is more complex than when we started, but it will get simplified further</span>
+</span><span id="simplify_coalesce-494"><a href="#simplify_coalesce-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span>
+</span><span id="simplify_coalesce-495"><a href="#simplify_coalesce-495"><span class="linenos">495</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="simplify_coalesce-496"><a href="#simplify_coalesce-496"><span class="linenos">496</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="simplify_coalesce-497"><a href="#simplify_coalesce-497"><span class="linenos">497</span></a> <span class="n">coalesce</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="simplify_coalesce-498"><a href="#simplify_coalesce-498"><span class="linenos">498</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="simplify_coalesce-499"><a href="#simplify_coalesce-499"><span class="linenos">499</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="simplify_coalesce-500"><a href="#simplify_coalesce-500"><span class="linenos">500</span></a> <span class="p">),</span>
+</span><span id="simplify_coalesce-501"><a href="#simplify_coalesce-501"><span class="linenos">501</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="simplify_coalesce-502"><a href="#simplify_coalesce-502"><span class="linenos">502</span></a> <span class="n">coalesce</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span>
+</span><span id="simplify_coalesce-503"><a href="#simplify_coalesce-503"><span class="linenos">503</span></a> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</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">other</span><span class="o">.</span><span class="n">copy</span><span class="p">()),</span>
+</span><span id="simplify_coalesce-504"><a href="#simplify_coalesce-504"><span class="linenos">504</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="simplify_coalesce-505"><a href="#simplify_coalesce-505"><span class="linenos">505</span></a> <span class="p">),</span>
+</span><span id="simplify_coalesce-506"><a href="#simplify_coalesce-506"><span class="linenos">506</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="simplify_coalesce-507"><a href="#simplify_coalesce-507"><span class="linenos">507</span></a> <span class="p">)</span>
+</span><span id="simplify_coalesce-508"><a href="#simplify_coalesce-508"><span class="linenos">508</span></a> <span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </section>
+ <section id="CONCATS">
+ <div class="attr variable">
+ <span class="name">CONCATS</span> =
+<span class="default_value">(&lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;)</span>
+
+
+ </div>
+ <a class="headerlink" href="#CONCATS"></a>
+
+
+
+ </section>
+ <section id="SAFE_CONCATS">
+ <div class="attr variable">
+ <span class="name">SAFE_CONCATS</span> =
+<span class="default_value">(&lt;class &#39;<a href="../expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDPipe">sqlglot.expressions.SafeDPipe</a>&#39;&gt;)</span>
+
+
+ </div>
+ <a class="headerlink" href="#SAFE_CONCATS"></a>
+
+
+
+ </section>
+ <section id="simplify_concat">
+ <input id="simplify_concat-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">simplify_concat</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span></span><span class="return-annotation">):</span></span>
+
+ <label class="view-source-button" for="simplify_concat-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#simplify_concat"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_concat-515"><a href="#simplify_concat-515"><span class="linenos">515</span></a><span class="k">def</span> <span class="nf">simplify_concat</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="simplify_concat-516"><a href="#simplify_concat-516"><span class="linenos">516</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Reduces all groups that contain string literals by concatenating them.&quot;&quot;&quot;</span>
+</span><span id="simplify_concat-517"><a href="#simplify_concat-517"><span class="linenos">517</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">CONCATS</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">):</span>
+</span><span id="simplify_concat-518"><a href="#simplify_concat-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="simplify_concat-519"><a href="#simplify_concat-519"><span class="linenos">519</span></a>
+</span><span id="simplify_concat-520"><a href="#simplify_concat-520"><span class="linenos">520</span></a> <span class="n">new_args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="simplify_concat-521"><a href="#simplify_concat-521"><span class="linenos">521</span></a> <span class="k">for</span> <span class="n">is_string_group</span><span class="p">,</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span>
+</span><span id="simplify_concat-522"><a href="#simplify_concat-522"><span class="linenos">522</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">is_string</span>
+</span><span id="simplify_concat-523"><a href="#simplify_concat-523"><span class="linenos">523</span></a> <span class="p">):</span>
+</span><span id="simplify_concat-524"><a href="#simplify_concat-524"><span class="linenos">524</span></a> <span class="k">if</span> <span class="n">is_string_group</span><span class="p">:</span>
+</span><span id="simplify_concat-525"><a href="#simplify_concat-525"><span class="linenos">525</span></a> <span class="n">new_args</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="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">string</span> <span class="ow">in</span> <span class="n">group</span><span class="p">)))</span>
+</span><span id="simplify_concat-526"><a href="#simplify_concat-526"><span class="linenos">526</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="simplify_concat-527"><a href="#simplify_concat-527"><span class="linenos">527</span></a> <span class="n">new_args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
+</span><span id="simplify_concat-528"><a href="#simplify_concat-528"><span class="linenos">528</span></a>
+</span><span id="simplify_concat-529"><a href="#simplify_concat-529"><span class="linenos">529</span></a> <span class="c1"># Ensures we preserve the right concat type, i.e. whether it&#39;s &quot;safe&quot; or not</span>
+</span><span id="simplify_concat-530"><a href="#simplify_concat-530"><span class="linenos">530</span></a> <span class="n">concat_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</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">SAFE_CONCATS</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span>
+</span><span id="simplify_concat-531"><a href="#simplify_concat-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="n">new_args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">new_args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">concat_type</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">new_args</span><span class="p">)</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Reduces all groups that contain string literals by concatenating them.</p>
+</div>
+
+
+ </section>
+ <section id="JOINS">
+ <div class="attr variable">
+ <span class="name">JOINS</span> =
+<span class="default_value">{(&#39;RIGHT&#39;, &#39;&#39;), (&#39;&#39;, &#39;INNER&#39;), (&#39;RIGHT&#39;, &#39;OUTER&#39;), (&#39;&#39;, &#39;&#39;)}</span>
+
+
+ </div>
+ <a class="headerlink" href="#JOINS"></a>
+
+
+
+ </section>
<section id="remove_where_true">
<input id="remove_where_true-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -1237,19 +1536,20 @@ elimination:
</div>
<a class="headerlink" href="#remove_where_true"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="remove_where_true-434"><a href="#remove_where_true-434"><span class="linenos">434</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-435"><a href="#remove_where_true-435"><span class="linenos">435</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-436"><a href="#remove_where_true-436"><span class="linenos">436</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-437"><a href="#remove_where_true-437"><span class="linenos">437</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-438"><a href="#remove_where_true-438"><span class="linenos">438</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-439"><a href="#remove_where_true-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="remove_where_true-440"><a href="#remove_where_true-440"><span class="linenos">440</span></a> <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-441"><a href="#remove_where_true-441"><span class="linenos">441</span></a> <span class="ow">and</span> <span class="ow">not</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="remove_where_true-442"><a href="#remove_where_true-442"><span class="linenos">442</span></a> <span class="ow">and</span> <span class="ow">not</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;method&quot;</span><span class="p">)</span>
-</span><span id="remove_where_true-443"><a href="#remove_where_true-443"><span class="linenos">443</span></a> <span class="p">):</span>
-</span><span id="remove_where_true-444"><a href="#remove_where_true-444"><span class="linenos">444</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="remove_where_true-445"><a href="#remove_where_true-445"><span class="linenos">445</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="kc">None</span><span class="p">)</span>
-</span><span id="remove_where_true-446"><a href="#remove_where_true-446"><span class="linenos">446</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="remove_where_true-545"><a href="#remove_where_true-545"><span class="linenos">545</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-546"><a href="#remove_where_true-546"><span class="linenos">546</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-547"><a href="#remove_where_true-547"><span class="linenos">547</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-548"><a href="#remove_where_true-548"><span class="linenos">548</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-549"><a href="#remove_where_true-549"><span class="linenos">549</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-550"><a href="#remove_where_true-550"><span class="linenos">550</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="remove_where_true-551"><a href="#remove_where_true-551"><span class="linenos">551</span></a> <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-552"><a href="#remove_where_true-552"><span class="linenos">552</span></a> <span class="ow">and</span> <span class="ow">not</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="remove_where_true-553"><a href="#remove_where_true-553"><span class="linenos">553</span></a> <span class="ow">and</span> <span class="ow">not</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;method&quot;</span><span class="p">)</span>
+</span><span id="remove_where_true-554"><a href="#remove_where_true-554"><span class="linenos">554</span></a> <span class="ow">and</span> <span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">side</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span><span class="p">)</span> <span class="ow">in</span> <span class="n">JOINS</span>
+</span><span id="remove_where_true-555"><a href="#remove_where_true-555"><span class="linenos">555</span></a> <span class="p">):</span>
+</span><span id="remove_where_true-556"><a href="#remove_where_true-556"><span class="linenos">556</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="remove_where_true-557"><a href="#remove_where_true-557"><span class="linenos">557</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="kc">None</span><span class="p">)</span>
+</span><span id="remove_where_true-558"><a href="#remove_where_true-558"><span class="linenos">558</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></pre></div>
@@ -1267,10 +1567,10 @@ elimination:
</div>
<a class="headerlink" href="#always_true"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="always_true-449"><a href="#always_true-449"><span class="linenos">449</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-450"><a href="#always_true-450"><span class="linenos">450</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-451"><a href="#always_true-451"><span class="linenos">451</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-452"><a href="#always_true-452"><span class="linenos">452</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="always_true-561"><a href="#always_true-561"><span class="linenos">561</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-562"><a href="#always_true-562"><span class="linenos">562</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-563"><a href="#always_true-563"><span class="linenos">563</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-564"><a href="#always_true-564"><span class="linenos">564</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1288,8 +1588,8 @@ elimination:
</div>
<a class="headerlink" href="#is_complement"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_complement-455"><a href="#is_complement-455"><span class="linenos">455</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-456"><a href="#is_complement-456"><span class="linenos">456</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-567"><a href="#is_complement-567"><span class="linenos">567</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-568"><a href="#is_complement-568"><span class="linenos">568</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>
@@ -1307,8 +1607,8 @@ elimination:
</div>
<a class="headerlink" href="#is_false"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_false-459"><a href="#is_false-459"><span class="linenos">459</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-460"><a href="#is_false-460"><span class="linenos">460</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-571"><a href="#is_false-571"><span class="linenos">571</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-572"><a href="#is_false-572"><span class="linenos">572</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>
@@ -1326,8 +1626,8 @@ elimination:
</div>
<a class="headerlink" href="#is_null"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_null-463"><a href="#is_null-463"><span class="linenos">463</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-464"><a href="#is_null-464"><span class="linenos">464</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-575"><a href="#is_null-575"><span class="linenos">575</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-576"><a href="#is_null-576"><span class="linenos">576</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>
@@ -1345,20 +1645,20 @@ elimination:
</div>
<a class="headerlink" href="#eval_boolean"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="eval_boolean-467"><a href="#eval_boolean-467"><span class="linenos">467</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-468"><a href="#eval_boolean-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="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-469"><a href="#eval_boolean-469"><span class="linenos">469</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-470"><a href="#eval_boolean-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="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-471"><a href="#eval_boolean-471"><span class="linenos">471</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-472"><a href="#eval_boolean-472"><span class="linenos">472</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-473"><a href="#eval_boolean-473"><span class="linenos">473</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-474"><a href="#eval_boolean-474"><span class="linenos">474</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-475"><a href="#eval_boolean-475"><span class="linenos">475</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-476"><a href="#eval_boolean-476"><span class="linenos">476</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-477"><a href="#eval_boolean-477"><span class="linenos">477</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-478"><a href="#eval_boolean-478"><span class="linenos">478</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-479"><a href="#eval_boolean-479"><span class="linenos">479</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-480"><a href="#eval_boolean-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="eval_boolean-579"><a href="#eval_boolean-579"><span class="linenos">579</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-580"><a href="#eval_boolean-580"><span class="linenos">580</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-581"><a href="#eval_boolean-581"><span class="linenos">581</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-582"><a href="#eval_boolean-582"><span class="linenos">582</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-583"><a href="#eval_boolean-583"><span class="linenos">583</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-584"><a href="#eval_boolean-584"><span class="linenos">584</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-585"><a href="#eval_boolean-585"><span class="linenos">585</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-586"><a href="#eval_boolean-586"><span class="linenos">586</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-587"><a href="#eval_boolean-587"><span class="linenos">587</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-588"><a href="#eval_boolean-588"><span class="linenos">588</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-589"><a href="#eval_boolean-589"><span class="linenos">589</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-590"><a href="#eval_boolean-590"><span class="linenos">590</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-591"><a href="#eval_boolean-591"><span class="linenos">591</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-592"><a href="#eval_boolean-592"><span class="linenos">592</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1376,16 +1676,16 @@ elimination:
</div>
<a class="headerlink" href="#extract_date"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="extract_date-483"><a href="#extract_date-483"><span class="linenos">483</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-484"><a href="#extract_date-484"><span class="linenos">484</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-485"><a href="#extract_date-485"><span class="linenos">485</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
-</span><span id="extract_date-486"><a href="#extract_date-486"><span class="linenos">486</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="extract_date-487"><a href="#extract_date-487"><span class="linenos">487</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-488"><a href="#extract_date-488"><span class="linenos">488</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-489"><a href="#extract_date-489"><span class="linenos">489</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-490"><a href="#extract_date-490"><span class="linenos">490</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-491"><a href="#extract_date-491"><span class="linenos">491</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="extract_date-492"><a href="#extract_date-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="extract_date-595"><a href="#extract_date-595"><span class="linenos">595</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-596"><a href="#extract_date-596"><span class="linenos">596</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-597"><a href="#extract_date-597"><span class="linenos">597</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
+</span><span id="extract_date-598"><a href="#extract_date-598"><span class="linenos">598</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="extract_date-599"><a href="#extract_date-599"><span class="linenos">599</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-600"><a href="#extract_date-600"><span class="linenos">600</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-601"><a href="#extract_date-601"><span class="linenos">601</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-602"><a href="#extract_date-602"><span class="linenos">602</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-603"><a href="#extract_date-603"><span class="linenos">603</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="extract_date-604"><a href="#extract_date-604"><span class="linenos">604</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1403,24 +1703,24 @@ elimination:
</div>
<a class="headerlink" href="#extract_interval"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="extract_interval-495"><a href="#extract_interval-495"><span class="linenos">495</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-496"><a href="#extract_interval-496"><span class="linenos">496</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="extract_interval-497"><a href="#extract_interval-497"><span class="linenos">497</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-498"><a href="#extract_interval-498"><span class="linenos">498</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
-</span><span id="extract_interval-499"><a href="#extract_interval-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="extract_interval-500"><a href="#extract_interval-500"><span class="linenos">500</span></a>
-</span><span id="extract_interval-501"><a href="#extract_interval-501"><span class="linenos">501</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-502"><a href="#extract_interval-502"><span class="linenos">502</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-503"><a href="#extract_interval-503"><span class="linenos">503</span></a>
-</span><span id="extract_interval-504"><a href="#extract_interval-504"><span class="linenos">504</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-505"><a href="#extract_interval-505"><span class="linenos">505</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-506"><a href="#extract_interval-506"><span class="linenos">506</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-507"><a href="#extract_interval-507"><span class="linenos">507</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-508"><a href="#extract_interval-508"><span class="linenos">508</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-509"><a href="#extract_interval-509"><span class="linenos">509</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-510"><a href="#extract_interval-510"><span class="linenos">510</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-511"><a href="#extract_interval-511"><span class="linenos">511</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-512"><a href="#extract_interval-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="extract_interval-607"><a href="#extract_interval-607"><span class="linenos">607</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-608"><a href="#extract_interval-608"><span class="linenos">608</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="extract_interval-609"><a href="#extract_interval-609"><span class="linenos">609</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-610"><a href="#extract_interval-610"><span class="linenos">610</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
+</span><span id="extract_interval-611"><a href="#extract_interval-611"><span class="linenos">611</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="extract_interval-612"><a href="#extract_interval-612"><span class="linenos">612</span></a>
+</span><span id="extract_interval-613"><a href="#extract_interval-613"><span class="linenos">613</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-614"><a href="#extract_interval-614"><span class="linenos">614</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-615"><a href="#extract_interval-615"><span class="linenos">615</span></a>
+</span><span id="extract_interval-616"><a href="#extract_interval-616"><span class="linenos">616</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-617"><a href="#extract_interval-617"><span class="linenos">617</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-618"><a href="#extract_interval-618"><span class="linenos">618</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-619"><a href="#extract_interval-619"><span class="linenos">619</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-620"><a href="#extract_interval-620"><span class="linenos">620</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-621"><a href="#extract_interval-621"><span class="linenos">621</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-622"><a href="#extract_interval-622"><span class="linenos">622</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-623"><a href="#extract_interval-623"><span class="linenos">623</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-624"><a href="#extract_interval-624"><span class="linenos">624</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1438,11 +1738,11 @@ elimination:
</div>
<a class="headerlink" href="#date_literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="date_literal-515"><a href="#date_literal-515"><span class="linenos">515</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-516"><a href="#date_literal-516"><span class="linenos">516</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-517"><a href="#date_literal-517"><span class="linenos">517</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-518"><a href="#date_literal-518"><span class="linenos">518</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-519"><a href="#date_literal-519"><span class="linenos">519</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="date_literal-627"><a href="#date_literal-627"><span class="linenos">627</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-628"><a href="#date_literal-628"><span class="linenos">628</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-629"><a href="#date_literal-629"><span class="linenos">629</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-630"><a href="#date_literal-630"><span class="linenos">630</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-631"><a href="#date_literal-631"><span class="linenos">631</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1460,8 +1760,8 @@ elimination:
</div>
<a class="headerlink" href="#boolean_literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="boolean_literal-522"><a href="#boolean_literal-522"><span class="linenos">522</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-523"><a href="#boolean_literal-523"><span class="linenos">523</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-634"><a href="#boolean_literal-634"><span class="linenos">634</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-635"><a href="#boolean_literal-635"><span class="linenos">635</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 4848c58..3f32112 100644
--- a/docs/sqlglot/parser.html
+++ b/docs/sqlglot/parser.html
@@ -55,6 +55,9 @@
<a class="variable" href="#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a>
</li>
<li>
+ <a class="variable" href="#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a>
+ </li>
+ <li>
<a class="variable" href="#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a>
</li>
<li>
@@ -115,6 +118,9 @@
<a class="variable" href="#Parser.FACTOR">FACTOR</a>
</li>
<li>
+ <a class="variable" href="#Parser.TIMES">TIMES</a>
+ </li>
+ <li>
<a class="variable" href="#Parser.TIMESTAMPS">TIMESTAMPS</a>
</li>
<li>
@@ -172,6 +178,9 @@
<a class="variable" href="#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a>
</li>
<li>
+ <a class="variable" href="#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a>
+ </li>
+ <li>
<a class="variable" href="#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a>
</li>
<li>
@@ -226,6 +235,9 @@
<a class="variable" href="#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a>
</li>
<li>
+ <a class="variable" href="#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a>
+ </li>
+ <li>
<a class="variable" href="#Parser.STRICT_CAST">STRICT_CAST</a>
</li>
<li>
@@ -244,6 +256,15 @@
<a class="variable" href="#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a>
</li>
<li>
+ <a class="variable" href="#Parser.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a>
+ </li>
+ <li>
+ <a class="variable" href="#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD">ALTER_TABLE_ADD_COLUMN_KEYWORD</a>
+ </li>
+ <li>
+ <a class="variable" href="#Parser.TOKENIZER_CLASS">TOKENIZER_CLASS</a>
+ </li>
+ <li>
<a class="variable" href="#Parser.INDEX_OFFSET">INDEX_OFFSET</a>
</li>
<li>
@@ -445,4795 +466,4997 @@
</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">,</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a> <span class="p">}</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a>
-</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</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">ENUM_TYPE_TOKENS</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="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a> <span class="p">}</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a>
-</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">TYPE_TOKENS</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="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</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">NVARCHAR</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">TEXT</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">MEDIUMTEXT</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">LONGTEXT</span><span class="p">,</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</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">TIMESTAMPTZ</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">TIMESTAMPLTZ</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">DATETIME</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">DATETIME64</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a> <span class="o">*</span><span class="n">NESTED_TYPE_TOKENS</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">SUBQUERY_PREDICATES</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="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">All</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">,</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
-</span><span id="L-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">RESERVED_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">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</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><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="n">DB_CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</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">CREATABLES</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="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</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">DB_CREATABLES</span><span class="p">,</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="p">}</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a>
-</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a> <span class="c1"># Tokens that can represent identifiers</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
-</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">COLLATE</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">COMMAND</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">COMMENT</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">COMMIT</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">CONSTRAINT</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">DEFAULT</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">DELETE</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">DESC</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">DESCRIBE</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">DICTIONARY</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">DIV</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">END</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">EXECUTE</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">ESCAPE</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">FALSE</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">FIRST</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">FILTER</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">FORMAT</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">FULL</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">IS</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">ISNULL</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">INTERVAL</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">KEEP</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">LEFT</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">LOAD</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">MERGE</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">NATURAL</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">NEXT</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">OFFSET</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">ORDINALITY</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">OVERWRITE</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">PARTITION</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">PERCENT</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">PIVOT</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">PRAGMA</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">RANGE</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">REFERENCES</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">RIGHT</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">ROW</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">ROWS</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">SEMI</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">SET</span><span class="p">,</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">SETTINGS</span><span class="p">,</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</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">TRUE</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">UNIQUE</span><span class="p">,</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</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">VOLATILE</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">WINDOW</span><span class="p">,</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</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">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a> <span class="p">}</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a>
-</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="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-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">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-293"><a href="#L-293"><span class="linenos"> 293</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</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">NATURAL</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">OFFSET</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">RIGHT</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">WINDOW</span><span class="p">,</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="n">STRUCT_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><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">NESTED_TYPE_TOKENS</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="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a> <span class="o">*</span><span class="n">STRUCT_TYPE_TOKENS</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><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</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">TYPE_TOKENS</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="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">TokenType</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="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</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">UINT128</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">INT256</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">UINT256</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">MEDIUMINT</span><span class="p">,</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</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">LONGTEXT</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">MEDIUMBLOB</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">LONGBLOB</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">BINARY</span><span class="p">,</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</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">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</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">ROWVERSION</span><span class="p">,</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">IMAGE</span><span class="p">,</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</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">IPADDRESS</span><span class="p">,</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">IPPREFIX</span><span class="p">,</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</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">ENUM_TYPE_TOKENS</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">NESTED_TYPE_TOKENS</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">SUBQUERY_PREDICATES</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="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">All</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="L-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">RESERVED_KEYWORDS</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">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</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">DB_CREATABLES</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="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</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><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">CREATABLES</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="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</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">PROCEDURE</span><span class="p">,</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="o">*</span><span class="n">DB_CREATABLES</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="c1"># Tokens that can represent identifiers</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</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">VAR</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">ANTI</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">APPLY</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">ASC</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">AUTO_INCREMENT</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">BEGIN</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">CACHE</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">CASE</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">COLLATE</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">COMMAND</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">COMMENT</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">COMMIT</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">CONSTRAINT</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">DEFAULT</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">DELETE</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">DESC</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">DESCRIBE</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">DICTIONARY</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">DIV</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">END</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">EXECUTE</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">ESCAPE</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">FALSE</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">FIRST</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">FILTER</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">FORMAT</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">FULL</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">IS</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">ISNULL</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">INTERVAL</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">KEEP</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">LEFT</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">LOAD</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">MERGE</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">NATURAL</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">NEXT</span><span class="p">,</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">OFFSET</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</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">PERCENT</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">PIVOT</span><span class="p">,</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</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">REFERENCES</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">RIGHT</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">ROW</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">ROWS</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">SEMI</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">SET</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">SETTINGS</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">SHOW</span><span class="p">,</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</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><span id="L-304"><a href="#L-304"><span class="linenos"> 304</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-304"><a href="#L-304"><span class="linenos"> 304</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-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">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-307"><a href="#L-307"><span class="linenos"> 307</span></a>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;LEADING&quot;</span><span class="p">,</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span> <span class="s2">&quot;BOTH&quot;</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="n">FUNC_TOKENS</span> <span class="o">=</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">COMMAND</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">CURRENT_DATE</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">CURRENT_DATETIME</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">CURRENT_TIMESTAMP</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">CURRENT_TIME</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">CURRENT_USER</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">FILTER</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">FIRST</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">FORMAT</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">GLOB</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">IDENTIFIER</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">INDEX</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">ISNULL</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">ILIKE</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">LIKE</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">MERGE</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">OFFSET</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">PRIMARY_KEY</span><span class="p">,</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</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">UNNEST</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">VAR</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">LEFT</span><span class="p">,</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</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">DATETIME</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">TABLE</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">TIMESTAMP</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">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</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">CONJUNCTION</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="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-350"><a href="#L-350"><span class="linenos"> 350</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-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="p">}</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">EQUALITY</span> <span class="o">=</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">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-355"><a href="#L-355"><span class="linenos"> 355</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-356"><a href="#L-356"><span class="linenos"> 356</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-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="n">COMPARISON</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">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-361"><a href="#L-361"><span class="linenos"> 361</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-362"><a href="#L-362"><span class="linenos"> 362</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-363"><a href="#L-363"><span class="linenos"> 363</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-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="p">}</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a>
-</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">BITWISE</span> <span class="o">=</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">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-368"><a href="#L-368"><span class="linenos"> 368</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-369"><a href="#L-369"><span class="linenos"> 369</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-370"><a href="#L-370"><span class="linenos"> 370</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-371"><a href="#L-371"><span class="linenos"> 371</span></a> <span class="p">}</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a>
-</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a> <span class="n">TERM</span> <span class="o">=</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">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-375"><a href="#L-375"><span class="linenos"> 375</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-376"><a href="#L-376"><span class="linenos"> 376</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-377"><a href="#L-377"><span class="linenos"> 377</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-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><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">FACTOR</span> <span class="o">=</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">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-382"><a href="#L-382"><span class="linenos"> 382</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-383"><a href="#L-383"><span class="linenos"> 383</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-384"><a href="#L-384"><span class="linenos"> 384</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-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="p">}</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a>
-</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</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">TIME</span><span class="p">,</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</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">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="p">}</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</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">UNION</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">INTERSECT</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="p">}</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a>
-</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="n">JOIN_METHODS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="p">}</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><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">RIGHT</span><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">FULL</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="p">}</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a>
-</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="n">JOIN_KINDS</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="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</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">SEMI</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">ANTI</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">JOIN_HINTS</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-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="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="n">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-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</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="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</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">_parse_conjunction</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 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-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="p">),</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="p">),</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</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-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</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="n">exp</span><span class="o">.</span><span class="n">var</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">name</span><span class="p">),</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</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-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="p">),</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="p">}</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a>
-</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</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-439"><a href="#L-439"><span class="linenos"> 439</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-440"><a href="#L-440"><span class="linenos"> 440</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-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="p">),</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="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-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="p">),</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span 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-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="p">),</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="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-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="p">),</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="n">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-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</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-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</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">ASOF</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">FULL</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">LEFT</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">LOCK</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">NATURAL</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">OFFSET</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">RIGHT</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">WINDOW</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="p">}</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a>
+</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="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-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="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-321"><a href="#L-321"><span class="linenos"> 321</span></a>
+</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;LEADING&quot;</span><span class="p">,</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span> <span class="s2">&quot;BOTH&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="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</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">CURRENT_DATE</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">CURRENT_DATETIME</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">CURRENT_TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</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-330"><a href="#L-330"><span class="linenos"> 330</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-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</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">FORMAT</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">GLOB</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">IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</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">ILIKE</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">INSERT</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">LIKE</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">MERGE</span><span class="p">,</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</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-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</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">REPLACE</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">RLIKE</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">ROW</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">UNNEST</span><span class="p">,</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</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">RIGHT</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">DATE</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">DATETIME</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">TABLE</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">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</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">XOR</span><span class="p">,</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="p">}</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</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-365"><a href="#L-365"><span class="linenos"> 365</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-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="n">EQUALITY</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">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-370"><a href="#L-370"><span class="linenos"> 370</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-371"><a href="#L-371"><span class="linenos"> 371</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-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><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="n">COMPARISON</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="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-376"><a href="#L-376"><span class="linenos"> 376</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-377"><a href="#L-377"><span class="linenos"> 377</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-378"><a href="#L-378"><span class="linenos"> 378</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-379"><a href="#L-379"><span class="linenos"> 379</span></a> <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="n">BITWISE</span> <span class="o">=</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">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-383"><a href="#L-383"><span class="linenos"> 383</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-384"><a href="#L-384"><span class="linenos"> 384</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-385"><a href="#L-385"><span class="linenos"> 385</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-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">TERM</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</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-390"><a href="#L-390"><span class="linenos"> 390</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-391"><a href="#L-391"><span class="linenos"> 391</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-392"><a href="#L-392"><span class="linenos"> 392</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-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="p">}</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a>
+</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="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-397"><a href="#L-397"><span class="linenos"> 397</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-398"><a href="#L-398"><span class="linenos"> 398</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-399"><a href="#L-399"><span class="linenos"> 399</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-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="p">}</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a>
+</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="n">TIMES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</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><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</span> <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">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="o">*</span><span class="n">TIMES</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span class="p">}</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a>
+</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="n">SET_OPERATIONS</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">UNION</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">INTERSECT</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">EXCEPT</span><span class="p">,</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="p">}</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a>
+</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="n">JOIN_METHODS</span> <span class="o">=</span> <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">NATURAL</span><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">ASOF</span><span class="p">,</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="p">}</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a>
+</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><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">RIGHT</span><span class="p">,</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="p">}</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a>
+</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><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">ANTI</span><span class="p">,</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="p">}</span>
+</span><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">JOIN_HINTS</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-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="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="n">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-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</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="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="p">{</span><span class="n">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-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="p">),</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="p">),</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span 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-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</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">name</span><span class="p">),</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</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-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="p">),</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="p">}</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a>
+</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="n">COLUMN_OPERATORS</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">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-459"><a href="#L-459"><span class="linenos"> 459</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-460"><a href="#L-460"><span class="linenos"> 460</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-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="p">),</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a> <span 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-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</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-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="p">),</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="p">}</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a>
-</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a> <span class="n">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">exp</span><span class="o">.</span><span class="n">Cluster</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-473"><a href="#L-473"><span class="linenos"> 473</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-474"><a href="#L-474"><span class="linenos"> 474</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-475"><a href="#L-475"><span class="linenos"> 475</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-476"><a href="#L-476"><span class="linenos"> 476</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-477"><a href="#L-477"><span class="linenos"> 477</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-478"><a href="#L-478"><span class="linenos"> 478</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-479"><a href="#L-479"><span class="linenos"> 479</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-480"><a href="#L-480"><span class="linenos"> 480</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-481"><a href="#L-481"><span class="linenos"> 481</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-482"><a href="#L-482"><span class="linenos"> 482</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-483"><a href="#L-483"><span class="linenos"> 483</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-484"><a href="#L-484"><span class="linenos"> 484</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-485"><a href="#L-485"><span class="linenos"> 485</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-486"><a href="#L-486"><span class="linenos"> 486</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-487"><a href="#L-487"><span class="linenos"> 487</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-488"><a href="#L-488"><span class="linenos"> 488</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-489"><a href="#L-489"><span class="linenos"> 489</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-490"><a href="#L-490"><span class="linenos"> 490</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-491"><a href="#L-491"><span class="linenos"> 491</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">exp</span><span class="o">.</span><span class="n">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><span id="L-492"><a href="#L-492"><span class="linenos"> 492</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_parts</span><span class="p">(),</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-494"><a href="#L-494"><span class="linenos"> 494</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-495"><a href="#L-495"><span class="linenos"> 495</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-496"><a href="#L-496"><span class="linenos"> 496</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-497"><a href="#L-497"><span class="linenos"> 497</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_parts</span><span class="p">(),</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="p">}</span>
-</span><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">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</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-502"><a href="#L-502"><span class="linenos"> 502</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-503"><a href="#L-503"><span class="linenos"> 503</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-504"><a href="#L-504"><span class="linenos"> 504</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-505"><a href="#L-505"><span class="linenos"> 505</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-506"><a href="#L-506"><span class="linenos"> 506</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-507"><a href="#L-507"><span class="linenos"> 507</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-508"><a href="#L-508"><span class="linenos"> 508</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-509"><a href="#L-509"><span class="linenos"> 509</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-510"><a href="#L-510"><span class="linenos"> 510</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-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="n">TokenType</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="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <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">From</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 class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</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="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-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">:</span> <span class="k">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</span><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">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-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(),</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</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-519"><a href="#L-519"><span class="linenos"> 519</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-520"><a href="#L-520"><span class="linenos"> 520</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-521"><a href="#L-521"><span class="linenos"> 521</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-522"><a href="#L-522"><span class="linenos"> 522</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-523"><a href="#L-523"><span class="linenos"> 523</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-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</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-526"><a href="#L-526"><span class="linenos"> 526</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="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-527"><a href="#L-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">_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-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="p">),</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="p">}</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a>
-</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="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-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</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-535"><a href="#L-535"><span class="linenos"> 535</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-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="p">}</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a>
-</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="n">PRIMARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="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-540"><a href="#L-540"><span class="linenos"> 540</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-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 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-543"><a href="#L-543"><span class="linenos"> 543</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-544"><a href="#L-544"><span class="linenos"> 544</span></a> <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">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-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span> <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-547"><a href="#L-547"><span class="linenos"> 547</span></a> <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">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-549"><a href="#L-549"><span class="linenos"> 549</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-550"><a href="#L-550"><span class="linenos"> 550</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-551"><a href="#L-551"><span class="linenos"> 551</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-552"><a href="#L-552"><span class="linenos"> 552</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-553"><a href="#L-553"><span class="linenos"> 553</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-554"><a href="#L-554"><span class="linenos"> 554</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-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_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-556"><a href="#L-556"><span class="linenos"> 556</span></a> <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">token</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="p">),</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_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">RawString</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-559"><a href="#L-559"><span class="linenos"> 559</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-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="p">}</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="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-564"><a href="#L-564"><span class="linenos"> 564</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-565"><a href="#L-565"><span class="linenos"> 565</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-566"><a href="#L-566"><span class="linenos"> 566</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-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="p">}</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a>
-</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">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-572"><a href="#L-572"><span class="linenos"> 572</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-573"><a href="#L-573"><span class="linenos"> 573</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-574"><a href="#L-574"><span class="linenos"> 574</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-575"><a href="#L-575"><span class="linenos"> 575</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-576"><a href="#L-576"><span class="linenos"> 576</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-577"><a href="#L-577"><span class="linenos"> 577</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-578"><a href="#L-578"><span class="linenos"> 578</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-579"><a href="#L-579"><span class="linenos"> 579</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-580"><a href="#L-580"><span class="linenos"> 580</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-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="p">}</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a>
-</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="n">PROPERTY_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-584"><a href="#L-584"><span class="linenos"> 584</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-585"><a href="#L-585"><span class="linenos"> 585</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-586"><a href="#L-586"><span class="linenos"> 586</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-587"><a href="#L-587"><span class="linenos"> 587</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-588"><a href="#L-588"><span class="linenos"> 588</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-589"><a href="#L-589"><span class="linenos"> 589</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">_parse_cluster</span><span class="p">(),</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_clustered_by</span><span class="p">(),</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</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-592"><a href="#L-592"><span class="linenos"> 592</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-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="s2">&quot;COPY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_property</span><span class="p">(),</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</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-596"><a href="#L-596"><span class="linenos"> 596</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-597"><a href="#L-597"><span class="linenos"> 597</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-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="p">),</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span 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-600"><a href="#L-600"><span class="linenos"> 600</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-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="k">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">EngineProperty</span><span class="p">),</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</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-603"><a href="#L-603"><span class="linenos"> 603</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-604"><a href="#L-604"><span class="linenos"> 604</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</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-606"><a href="#L-606"><span class="linenos"> 606</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-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;HEAP&quot;</span><span class="p">:</span> <span class="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">HeapProperty</span><span class="p">),</span>
-</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</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-609"><a href="#L-609"><span class="linenos"> 609</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-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="p">),</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</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-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;LAYOUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LAYOUT&quot;</span><span class="p">),</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;LIFETIME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LIFETIME&quot;</span><span class="p">),</span>
-</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</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-616"><a href="#L-616"><span class="linenos"> 616</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-617"><a href="#L-617"><span class="linenos"> 617</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-618"><a href="#L-618"><span class="linenos"> 618</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-619"><a href="#L-619"><span class="linenos"> 619</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</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-623"><a href="#L-623"><span class="linenos"> 623</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_no_property</span><span class="p">(),</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</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_on_property</span><span class="p">(),</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;ORDER 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_order</span><span class="p">(</span><span class="n">skip_order_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</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-627"><a href="#L-627"><span class="linenos"> 627</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-628"><a href="#L-628"><span class="linenos"> 628</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-629"><a href="#L-629"><span class="linenos"> 629</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 class="n">in_props</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;RANGE&quot;</span><span class="p">),</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</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-632"><a href="#L-632"><span class="linenos"> 632</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-633"><a href="#L-633"><span class="linenos"> 633</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-634"><a href="#L-634"><span class="linenos"> 634</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-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="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-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</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-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="p">),</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</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-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">),</span>
-</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</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-641"><a href="#L-641"><span class="linenos"> 641</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-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="p">),</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</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-644"><a href="#L-644"><span class="linenos"> 644</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-645"><a href="#L-645"><span class="linenos"> 645</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">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><span id="L-646"><a href="#L-646"><span class="linenos"> 646</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">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><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="s2">&quot;TO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_to_table</span><span class="p">(),</span>
-</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</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-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ttl</span><span class="p">(),</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</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">FileFormatProperty</span><span class="p">),</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</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-652"><a href="#L-652"><span class="linenos"> 652</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-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><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</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-657"><a href="#L-657"><span class="linenos"> 657</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-658"><a href="#L-658"><span class="linenos"> 658</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-659"><a href="#L-659"><span class="linenos"> 659</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-660"><a href="#L-660"><span class="linenos"> 660</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-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="p">),</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</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-663"><a href="#L-663"><span class="linenos"> 663</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-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="p">),</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="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-666"><a href="#L-666"><span class="linenos"> 666</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-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="p">),</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="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-669"><a href="#L-669"><span class="linenos"> 669</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-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="p">),</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</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-672"><a href="#L-672"><span class="linenos"> 672</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-673"><a href="#L-673"><span class="linenos"> 673</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-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="p">),</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</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-676"><a href="#L-676"><span class="linenos"> 676</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-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</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-469"><a href="#L-469"><span class="linenos"> 469</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-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="n">this</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">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="p">),</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</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-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</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="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-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <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">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-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="p">),</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="p">}</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a>
+</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="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">exp</span><span class="o">.</span><span class="n">Cluster</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-493"><a href="#L-493"><span class="linenos"> 493</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-494"><a href="#L-494"><span class="linenos"> 494</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-495"><a href="#L-495"><span class="linenos"> 495</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 class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</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-497"><a href="#L-497"><span class="linenos"> 497</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-498"><a href="#L-498"><span class="linenos"> 498</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-499"><a href="#L-499"><span class="linenos"> 499</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-500"><a href="#L-500"><span class="linenos"> 500</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-501"><a href="#L-501"><span class="linenos"> 501</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-502"><a href="#L-502"><span class="linenos"> 502</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-503"><a href="#L-503"><span class="linenos"> 503</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-504"><a href="#L-504"><span class="linenos"> 504</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-505"><a href="#L-505"><span class="linenos"> 505</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-506"><a href="#L-506"><span class="linenos"> 506</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-507"><a href="#L-507"><span class="linenos"> 507</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-508"><a href="#L-508"><span class="linenos"> 508</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-509"><a href="#L-509"><span class="linenos"> 509</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-510"><a href="#L-510"><span class="linenos"> 510</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-511"><a href="#L-511"><span class="linenos"> 511</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">exp</span><span class="o">.</span><span class="n">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><span id="L-512"><a href="#L-512"><span class="linenos"> 512</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_parts</span><span class="p">(),</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</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-514"><a href="#L-514"><span class="linenos"> 514</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-515"><a href="#L-515"><span class="linenos"> 515</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-516"><a href="#L-516"><span class="linenos"> 516</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-517"><a href="#L-517"><span class="linenos"> 517</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_parts</span><span class="p">(),</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="p">}</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a>
+</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</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-522"><a href="#L-522"><span class="linenos"> 522</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-523"><a href="#L-523"><span class="linenos"> 523</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-524"><a href="#L-524"><span class="linenos"> 524</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-525"><a href="#L-525"><span class="linenos"> 525</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-526"><a href="#L-526"><span class="linenos"> 526</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-527"><a href="#L-527"><span class="linenos"> 527</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-528"><a href="#L-528"><span class="linenos"> 528</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-529"><a href="#L-529"><span class="linenos"> 529</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-530"><a href="#L-530"><span class="linenos"> 530</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-531"><a href="#L-531"><span class="linenos"> 531</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-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">:</span> <span class="k">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</span><span class="p">(),</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</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">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-536"><a href="#L-536"><span class="linenos"> 536</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-537"><a href="#L-537"><span class="linenos"> 537</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-538"><a href="#L-538"><span class="linenos"> 538</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-539"><a href="#L-539"><span class="linenos"> 539</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-540"><a href="#L-540"><span class="linenos"> 540</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-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</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-543"><a href="#L-543"><span class="linenos"> 543</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="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-544"><a href="#L-544"><span class="linenos"> 544</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-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="p">),</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="p">}</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a>
+</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</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">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-550"><a href="#L-550"><span class="linenos"> 550</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-551"><a href="#L-551"><span class="linenos"> 551</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-552"><a href="#L-552"><span class="linenos"> 552</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-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">PRIMARY_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="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-557"><a href="#L-557"><span class="linenos"> 557</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-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="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-560"><a href="#L-560"><span class="linenos"> 560</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-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="p">),</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</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-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span> <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-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="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-566"><a href="#L-566"><span class="linenos"> 566</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-567"><a href="#L-567"><span class="linenos"> 567</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-568"><a href="#L-568"><span class="linenos"> 568</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-569"><a href="#L-569"><span class="linenos"> 569</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-570"><a href="#L-570"><span class="linenos"> 570</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-571"><a href="#L-571"><span class="linenos"> 571</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-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_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-573"><a href="#L-573"><span class="linenos"> 573</span></a> <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">token</span><span class="o">.</span><span class="n">text</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="n">TokenType</span><span class="o">.</span><span class="n">RAW_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">RawString</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-576"><a href="#L-576"><span class="linenos"> 576</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-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="p">}</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a>
+</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="n">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-581"><a href="#L-581"><span class="linenos"> 581</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-582"><a href="#L-582"><span class="linenos"> 582</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-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span> <span class="ow">or</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">ID_VAR_TOKENS</span><span class="p">)</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="p">}</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a>
+</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="n">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-589"><a href="#L-589"><span class="linenos"> 589</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-590"><a href="#L-590"><span class="linenos"> 590</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-591"><a href="#L-591"><span class="linenos"> 591</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-592"><a href="#L-592"><span class="linenos"> 592</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-593"><a href="#L-593"><span class="linenos"> 593</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-594"><a href="#L-594"><span class="linenos"> 594</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-595"><a href="#L-595"><span class="linenos"> 595</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-596"><a href="#L-596"><span class="linenos"> 596</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-597"><a href="#L-597"><span class="linenos"> 597</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-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</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_comprehension</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="p">}</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a>
+</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="n">PROPERTY_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-602"><a href="#L-602"><span class="linenos"> 602</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-603"><a href="#L-603"><span class="linenos"> 603</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-604"><a href="#L-604"><span class="linenos"> 604</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-605"><a href="#L-605"><span class="linenos"> 605</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-606"><a href="#L-606"><span class="linenos"> 606</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-607"><a href="#L-607"><span class="linenos"> 607</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">_parse_cluster</span><span class="p">(),</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_clustered_by</span><span class="p">(),</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</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-610"><a href="#L-610"><span class="linenos"> 610</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-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;COPY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_property</span><span class="p">(),</span>
+</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</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-614"><a href="#L-614"><span class="linenos"> 614</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-615"><a href="#L-615"><span class="linenos"> 615</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-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="p">),</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</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-618"><a href="#L-618"><span class="linenos"> 618</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-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="k">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">EngineProperty</span><span class="p">),</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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-622"><a href="#L-622"><span class="linenos"> 622</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</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-624"><a href="#L-624"><span class="linenos"> 624</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-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;HEAP&quot;</span><span class="p">:</span> <span class="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">HeapProperty</span><span class="p">),</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</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-627"><a href="#L-627"><span class="linenos"> 627</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-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="p">),</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</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-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;LAYOUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LAYOUT&quot;</span><span class="p">),</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;LIFETIME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LIFETIME&quot;</span><span class="p">),</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</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-634"><a href="#L-634"><span class="linenos"> 634</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-635"><a href="#L-635"><span class="linenos"> 635</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-636"><a href="#L-636"><span class="linenos"> 636</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-637"><a href="#L-637"><span class="linenos"> 637</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</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-639"><a href="#L-639"><span class="linenos"> 639</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</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-641"><a href="#L-641"><span class="linenos"> 641</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_no_property</span><span class="p">(),</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</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_on_property</span><span class="p">(),</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;ORDER 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_order</span><span class="p">(</span><span class="n">skip_order_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</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-645"><a href="#L-645"><span class="linenos"> 645</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-646"><a href="#L-646"><span class="linenos"> 646</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-647"><a href="#L-647"><span class="linenos"> 647</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 class="n">in_props</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;RANGE&quot;</span><span class="p">),</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</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-650"><a href="#L-650"><span class="linenos"> 650</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-651"><a href="#L-651"><span class="linenos"> 651</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-652"><a href="#L-652"><span class="linenos"> 652</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-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="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-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</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-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="p">),</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</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-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">),</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</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-659"><a href="#L-659"><span class="linenos"> 659</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-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="p">),</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="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-662"><a href="#L-662"><span class="linenos"> 662</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-663"><a href="#L-663"><span class="linenos"> 663</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">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><span id="L-664"><a href="#L-664"><span class="linenos"> 664</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">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><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;TO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_to_table</span><span class="p">(),</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</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-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ttl</span><span class="p">(),</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</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">FileFormatProperty</span><span class="p">),</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</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-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="p">}</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a>
+</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</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-675"><a href="#L-675"><span class="linenos"> 675</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-676"><a href="#L-676"><span class="linenos"> 676</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-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</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-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="p">),</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</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-681"><a href="#L-681"><span class="linenos"> 681</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-682"><a href="#L-682"><span class="linenos"> 682</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-683"><a href="#L-683"><span class="linenos"> 683</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-684"><a href="#L-684"><span class="linenos"> 684</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-685"><a href="#L-685"><span class="linenos"> 685</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-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</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-688"><a href="#L-688"><span class="linenos"> 688</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-689"><a href="#L-689"><span class="linenos"> 689</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-690"><a href="#L-690"><span class="linenos"> 690</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-691"><a href="#L-691"><span class="linenos"> 691</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-692"><a href="#L-692"><span class="linenos"> 692</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-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="p">),</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="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">MergeTreeTTL</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_bitwise</span><span class="p">()]),</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</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-696"><a href="#L-696"><span class="linenos"> 696</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-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">ALTER_PARSERS</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;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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</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-703"><a href="#L-703"><span class="linenos"> 703</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-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="p">}</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="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-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">NO_PAREN_FUNCTION_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;ANY&quot;</span><span class="p">:</span> <span class="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-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="k">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-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="k">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-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_next_value_for</span><span class="p">(),</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="p">}</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;STRUCT&quot;</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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_any_value</span><span class="p">(),</span>
-</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</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-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_concat</span><span class="p">(),</span>
-</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</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-723"><a href="#L-723"><span class="linenos"> 723</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-724"><a href="#L-724"><span class="linenos"> 724</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-725"><a href="#L-725"><span class="linenos"> 725</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-726"><a href="#L-726"><span class="linenos"> 726</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-727"><a href="#L-727"><span class="linenos"> 727</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-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;OPENJSON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_open_json</span><span class="p">(),</span>
-</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</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-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;SAFE_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-731"><a href="#L-731"><span class="linenos"> 731</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-732"><a href="#L-732"><span class="linenos"> 732</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-733"><a href="#L-733"><span class="linenos"> 733</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-734"><a href="#L-734"><span class="linenos"> 734</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-735"><a href="#L-735"><span class="linenos"> 735</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-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">QUERY_MODIFIER_PARSERS</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="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;match&quot;</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-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="n">TokenType</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="p">(</span><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-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;group&quot;</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-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;having&quot;</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-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;qualify&quot;</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-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;windows&quot;</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-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;order&quot;</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-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;limit&quot;</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-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</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-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;offset&quot;</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-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</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">LOCK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
-</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
-</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">),</span>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="p">),</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="s2">&quot;distribute&quot;</span><span class="p">,</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">),</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="p">),</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sort&quot;</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">exp</span><span class="o">.</span><span class="n">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><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <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="n">SET_PARSERS</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;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-766"><a href="#L-766"><span class="linenos"> 766</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-767"><a href="#L-767"><span class="linenos"> 767</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-768"><a href="#L-768"><span class="linenos"> 768</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-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="p">}</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</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-680"><a href="#L-680"><span class="linenos"> 680</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-681"><a href="#L-681"><span class="linenos"> 681</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-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="p">),</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</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-684"><a href="#L-684"><span class="linenos"> 684</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-685"><a href="#L-685"><span class="linenos"> 685</span></a> <span class="p">),</span>
+</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</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-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="p">),</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</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-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="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-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredColumnConstraint</span><span 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_ordered</span><span class="p">)</span>
+</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="p">),</span>
+</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">:</span> <span class="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-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NonClusteredColumnConstraint</span><span 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_ordered</span><span class="p">)</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="p">),</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</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-697"><a href="#L-697"><span class="linenos"> 697</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-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="p">),</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</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-700"><a href="#L-700"><span class="linenos"> 700</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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</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-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="p">),</span>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</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-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</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-708"><a href="#L-708"><span class="linenos"> 708</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-709"><a href="#L-709"><span class="linenos"> 709</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-710"><a href="#L-710"><span class="linenos"> 710</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="p">(</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="bp">self</span><span 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-712"><a href="#L-712"><span class="linenos"> 712</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-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 class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span 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-715"><a href="#L-715"><span class="linenos"> 715</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-716"><a href="#L-716"><span class="linenos"> 716</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-717"><a href="#L-717"><span class="linenos"> 717</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-718"><a href="#L-718"><span class="linenos"> 718</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-719"><a href="#L-719"><span class="linenos"> 719</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-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="p">),</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="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">MergeTreeTTL</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_bitwise</span><span class="p">()]),</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</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-723"><a href="#L-723"><span class="linenos"> 723</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-724"><a href="#L-724"><span class="linenos"> 724</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">expression</span><span class="p">(</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="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-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="p">),</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="p">}</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</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-731"><a href="#L-731"><span class="linenos"> 731</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-732"><a href="#L-732"><span class="linenos"> 732</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-733"><a href="#L-733"><span class="linenos"> 733</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-734"><a href="#L-734"><span class="linenos"> 734</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-735"><a href="#L-735"><span class="linenos"> 735</span></a> <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">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-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">NO_PAREN_FUNCTION_PARSERS</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 class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="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-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="k">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-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="k">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-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_next_value_for</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">INVALID_FUNC_NAME_TOKENS</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">IDENTIFIER</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">STRING</span><span class="p">,</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <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="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;STRUCT&quot;</span><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">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_any_value</span><span class="p">(),</span>
+</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</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-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_concat</span><span class="p">(),</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</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-758"><a href="#L-758"><span class="linenos"> 758</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-759"><a href="#L-759"><span class="linenos"> 759</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-760"><a href="#L-760"><span class="linenos"> 760</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-761"><a href="#L-761"><span class="linenos"> 761</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-762"><a href="#L-762"><span class="linenos"> 762</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-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;OPENJSON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_open_json</span><span class="p">(),</span>
+</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</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-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;SAFE_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-766"><a href="#L-766"><span class="linenos"> 766</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-767"><a href="#L-767"><span class="linenos"> 767</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-768"><a href="#L-768"><span class="linenos"> 768</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-769"><a href="#L-769"><span class="linenos"> 769</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-770"><a href="#L-770"><span class="linenos"> 770</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-771"><a href="#L-771"><span class="linenos"> 771</span></a> <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="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-774"><a href="#L-774"><span class="linenos"> 774</span></a>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</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-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="n">DDL_SELECT_TOKENS</span> <span class="o">=</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 class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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="n">PRE_VOLATILE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</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-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="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-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&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;ISOLATION LEVEL READ COMMITTED&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;ISOLATION LEVEL READ UNCOMMITTED&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;ISOLATION LEVEL SERIALIZABLE&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;READ WRITE&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;READ ONLY&quot;</span><span class="p">,</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <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="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-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="n">CLONE_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span> <span class="s2">&quot;STATEMENT&quot;</span><span class="p">}</span>
-</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="n">TABLE_INDEX_HINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</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-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="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-798"><a href="#L-798"><span class="linenos"> 798</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-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">WINDOW_SIDES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">}</span>
+</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="n">QUERY_MODIFIER_PARSERS</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="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;match&quot;</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-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="n">TokenType</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="p">(</span><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-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;group&quot;</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-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;having&quot;</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-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;qualify&quot;</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-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;windows&quot;</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-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;order&quot;</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-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;limit&quot;</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-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</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-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;offset&quot;</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-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
+</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">,</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">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</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 class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="s2">&quot;distribute&quot;</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="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</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="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sort&quot;</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">exp</span><span class="o">.</span><span class="n">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><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">(</span><span class="n">skip_start_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">()),</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="p">}</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="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-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="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</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="c1"># A NULL arg in CONCAT yields NULL by default</span>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</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-803"><a href="#L-803"><span class="linenos"> 803</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-804"><a href="#L-804"><span class="linenos"> 804</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-805"><a href="#L-805"><span class="linenos"> 805</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-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="p">}</span>
</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">False</span>
-</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="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</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-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 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-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="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-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="vm">__slots__</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="s2">&quot;error_level&quot;</span><span class="p">,</span>
-</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
-</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
-</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
-</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="p">)</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="n">DDL_SELECT_TOKENS</span> <span class="o">=</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 class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</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="n">PRE_VOLATILE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</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-817"><a href="#L-817"><span class="linenos"> 817</span></a>
+</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="n">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-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&quot;</span><span class="p">,</span>
+</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;ISOLATION LEVEL READ COMMITTED&quot;</span><span class="p">,</span>
+</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;ISOLATION LEVEL READ UNCOMMITTED&quot;</span><span class="p">,</span>
+</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;ISOLATION LEVEL SERIALIZABLE&quot;</span><span class="p">,</span>
+</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;READ WRITE&quot;</span><span class="p">,</span>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;READ ONLY&quot;</span><span class="p">,</span>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="p">}</span>
</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="c1"># Autofilled</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</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><span id="L-830"><a href="#L-830"><span class="linenos"> 830</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><span id="L-831"><a href="#L-831"><span class="linenos"> 831</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><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="n">NULL_ORDERING</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">SHOW_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">SET_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</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-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</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-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="n">CLONE_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span> <span class="s2">&quot;STATEMENT&quot;</span><span class="p">}</span>
+</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="n">TABLE_INDEX_HINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</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-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="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-835"><a href="#L-835"><span class="linenos"> 835</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-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">WINDOW_SIDES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span> <span class="s2">&quot;PRECEDING&quot;</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 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-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="n">DISTINCT_TOKENS</span> <span class="o">=</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-841"><a href="#L-841"><span class="linenos"> 841</span></a>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</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-845"><a href="#L-845"><span class="linenos"> 845</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-846"><a href="#L-846"><span class="linenos"> 846</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-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="p">):</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">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-849"><a href="#L-849"><span class="linenos"> 849</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-850"><a href="#L-850"><span class="linenos"> 850</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-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</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="c1"># A NULL arg in CONCAT yields NULL by default</span>
+</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</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 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-854"><a href="#L-854"><span class="linenos"> 854</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-855"><a href="#L-855"><span class="linenos"> 855</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-856"><a href="#L-856"><span class="linenos"> 856</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-857"><a href="#L-857"><span class="linenos"> 857</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-858"><a href="#L-858"><span class="linenos"> 858</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-859"><a href="#L-859"><span class="linenos"> 859</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-860"><a href="#L-860"><span class="linenos"> 860</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-861"><a href="#L-861"><span class="linenos"> 861</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-862"><a href="#L-862"><span class="linenos"> 862</span></a>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</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-865"><a href="#L-865"><span class="linenos"> 865</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-866"><a href="#L-866"><span class="linenos"> 866</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a><span class="sd"> per parsed SQL statement.</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a><span class="sd"> Args:</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a><span class="sd"> The list of the produced syntax trees.</span>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</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-878"><a href="#L-878"><span class="linenos"> 878</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-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="p">)</span>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a>
-</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</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-884"><a href="#L-884"><span class="linenos"> 884</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-885"><a href="#L-885"><span class="linenos"> 885</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-886"><a href="#L-886"><span class="linenos"> 886</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-887"><a href="#L-887"><span class="linenos"> 887</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</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-889"><a href="#L-889"><span class="linenos"> 889</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-890"><a href="#L-890"><span class="linenos"> 890</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</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="sd"> Args:</span>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a><span class="sd"> The target Expression.</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</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-903"><a href="#L-903"><span class="linenos"> 903</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-904"><a href="#L-904"><span class="linenos"> 904</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-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">try</span><span class="p">:</span>
-</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</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-908"><a href="#L-908"><span class="linenos"> 908</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-909"><a href="#L-909"><span class="linenos"> 909</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-910"><a href="#L-910"><span class="linenos"> 910</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-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">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; 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-914"><a href="#L-914"><span class="linenos"> 914</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-915"><a href="#L-915"><span class="linenos"> 915</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-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="c1"># Whether or not ADD is present for each column added by ALTER TABLE</span>
+</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a>
+</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
+</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
+</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
+</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">,</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="p">)</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a>
+</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="c1"># Autofilled</span>
+</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">TOKENIZER_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">Tokenizer</span><span class="p">]</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</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><span id="L-876"><a href="#L-876"><span class="linenos"> 876</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><span id="L-877"><a href="#L-877"><span class="linenos"> 877</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><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">NULL_ORDERING</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">SHOW_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">SET_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</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-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</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-891"><a href="#L-891"><span class="linenos"> 891</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-892"><a href="#L-892"><span class="linenos"> 892</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-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="p">):</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="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-895"><a href="#L-895"><span class="linenos"> 895</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-896"><a href="#L-896"><span class="linenos"> 896</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-897"><a href="#L-897"><span class="linenos"> 897</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><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</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 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-901"><a href="#L-901"><span class="linenos"> 901</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-902"><a href="#L-902"><span class="linenos"> 902</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-903"><a href="#L-903"><span class="linenos"> 903</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-904"><a href="#L-904"><span class="linenos"> 904</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-905"><a href="#L-905"><span class="linenos"> 905</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-906"><a href="#L-906"><span class="linenos"> 906</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-907"><a href="#L-907"><span class="linenos"> 907</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-908"><a href="#L-908"><span class="linenos"> 908</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-909"><a href="#L-909"><span class="linenos"> 909</span></a>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="bp">self</span><span class="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-912"><a href="#L-912"><span class="linenos"> 912</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-913"><a href="#L-913"><span class="linenos"> 913</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a><span class="sd"> per parsed SQL statement.</span>
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</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-920"><a href="#L-920"><span class="linenos"> 920</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-921"><a href="#L-921"><span class="linenos"> 921</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-922"><a href="#L-922"><span class="linenos"> 922</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-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">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-927"><a href="#L-927"><span class="linenos"> 927</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-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 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-930"><a href="#L-930"><span class="linenos"> 930</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-931"><a href="#L-931"><span class="linenos"> 931</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-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</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-935"><a href="#L-935"><span class="linenos"> 935</span></a>
-</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>
-</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="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-939"><a href="#L-939"><span class="linenos"> 939</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-940"><a href="#L-940"><span class="linenos"> 940</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-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</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-944"><a href="#L-944"><span class="linenos"> 944</span></a>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="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-946"><a href="#L-946"><span class="linenos"> 946</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-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="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a>
-</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="k">return</span> <span class="n">expressions</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a>
-</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="k">def</span> <span class="nf">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-953"><a href="#L-953"><span class="linenos"> 953</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
-</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</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-955"><a href="#L-955"><span class="linenos"> 955</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-956"><a href="#L-956"><span class="linenos"> 956</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-957"><a href="#L-957"><span class="linenos"> 957</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-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</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-960"><a href="#L-960"><span class="linenos"> 960</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-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 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-964"><a href="#L-964"><span class="linenos"> 964</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</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-966"><a href="#L-966"><span class="linenos"> 966</span></a><span class="sd"> error level setting.</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</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-969"><a href="#L-969"><span class="linenos"> 969</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-970"><a href="#L-970"><span class="linenos"> 970</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 class="o">+</span> <span class="mi">1</span>
-</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</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-972"><a href="#L-972"><span class="linenos"> 972</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-973"><a href="#L-973"><span class="linenos"> 973</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-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="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-976"><a href="#L-976"><span class="linenos"> 976</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-977"><a href="#L-977"><span class="linenos"> 977</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-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</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-980"><a href="#L-980"><span class="linenos"> 980</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-981"><a href="#L-981"><span class="linenos"> 981</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-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
-</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</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-984"><a href="#L-984"><span class="linenos"> 984</span></a> <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 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-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="k">raise</span> <span class="n">error</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="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-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">def</span> <span class="nf">expression</span><span class="p">(</span>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</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-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a><span class="sd"> Args:</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
+</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a><span class="sd"> The list of the produced syntax trees.</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</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-925"><a href="#L-925"><span class="linenos"> 925</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-926"><a href="#L-926"><span class="linenos"> 926</span></a> <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="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</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-931"><a href="#L-931"><span class="linenos"> 931</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-932"><a href="#L-932"><span class="linenos"> 932</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-933"><a href="#L-933"><span class="linenos"> 933</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-934"><a href="#L-934"><span class="linenos"> 934</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</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-936"><a href="#L-936"><span class="linenos"> 936</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-937"><a href="#L-937"><span class="linenos"> 937</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a><span class="sd"> Args:</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
+</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a><span class="sd"> The target Expression.</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</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-950"><a href="#L-950"><span class="linenos"> 950</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-951"><a href="#L-951"><span class="linenos"> 951</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-952"><a href="#L-952"><span class="linenos"> 952</span></a>
+</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</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-955"><a href="#L-955"><span class="linenos"> 955</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-956"><a href="#L-956"><span class="linenos"> 956</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-957"><a href="#L-957"><span class="linenos"> 957</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-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">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; 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-961"><a href="#L-961"><span class="linenos"> 961</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-962"><a href="#L-962"><span class="linenos"> 962</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-963"><a href="#L-963"><span class="linenos"> 963</span></a>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="k">def</span> <span class="nf">_parse</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="p">,</span>
+</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</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-967"><a href="#L-967"><span class="linenos"> 967</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-968"><a href="#L-968"><span class="linenos"> 968</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-969"><a href="#L-969"><span class="linenos"> 969</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-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</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">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-972"><a href="#L-972"><span class="linenos"> 972</span></a>
+</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="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-974"><a href="#L-974"><span class="linenos"> 974</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-975"><a href="#L-975"><span class="linenos"> 975</span></a>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">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-977"><a href="#L-977"><span class="linenos"> 977</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-978"><a href="#L-978"><span class="linenos"> 978</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-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</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-982"><a href="#L-982"><span class="linenos"> 982</span></a>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="n">expressions</span> <span class="o">=</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">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-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="o">-</span><span class="mi">1</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">_tokens</span> <span class="o">=</span> <span class="n">tokens</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">_advance</span><span class="p">()</span>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>
+</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="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-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">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-993"><a href="#L-993"><span class="linenos"> 993</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-994"><a href="#L-994"><span class="linenos"> 994</span></a>
+</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a><span class="sd"> Args:</span>
-</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
-</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
-</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a>
-</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a><span class="sd"> The target expression.</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</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-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="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-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="k">def</span> <span class="nf">_add_comments</span><span 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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="k">if</span> <span class="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-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">add_comments</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-1012"><a href="#L-1012"><span class="linenos">1012</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-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">def</span> <span class="nf">validate_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">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 class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</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="sd"> Args:</span>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a><span class="sd"> expression: The expression to validate.</span>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</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-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">return</span> <span class="n">expressions</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">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-1000"><a href="#L-1000"><span class="linenos">1000</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</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-1002"><a href="#L-1002"><span class="linenos">1002</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-1003"><a href="#L-1003"><span class="linenos">1003</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-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">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-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</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-1007"><a href="#L-1007"><span class="linenos">1007</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-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <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">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-1011"><a href="#L-1011"><span class="linenos">1011</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</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-1013"><a href="#L-1013"><span class="linenos">1013</span></a><span class="sd"> error level setting.</span>
+</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</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-1016"><a href="#L-1016"><span class="linenos">1016</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-1017"><a href="#L-1017"><span class="linenos">1017</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 class="o">+</span> <span class="mi">1</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</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-1019"><a href="#L-1019"><span class="linenos">1019</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-1020"><a href="#L-1020"><span class="linenos">1020</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-1021"><a href="#L-1021"><span class="linenos">1021</span></a>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a><span class="sd"> The validated expression.</span>
-</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</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-1026"><a href="#L-1026"><span class="linenos">1026</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-1027"><a href="#L-1027"><span class="linenos">1027</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-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">return</span> <span class="n">expression</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">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-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">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="o">+</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="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-1035"><a href="#L-1035"><span class="linenos">1035</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-1036"><a href="#L-1036"><span class="linenos">1036</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-1037"><a href="#L-1037"><span class="linenos">1037</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-1038"><a href="#L-1038"><span class="linenos">1038</span></a>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="k">if</span> <span class="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-1040"><a href="#L-1040"><span class="linenos">1040</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-1041"><a href="#L-1041"><span class="linenos">1041</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-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</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">_prev_comments</span> <span class="o">=</span> <span class="kc">None</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="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-1047"><a href="#L-1047"><span class="linenos">1047</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-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 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-1049"><a href="#L-1049"><span class="linenos">1049</span></a>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</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-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">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-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">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-1054"><a href="#L-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="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 class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a>
-</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="bp">self</span><span 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-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="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-1060"><a href="#L-1060"><span class="linenos">1060</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-1061"><a href="#L-1061"><span class="linenos">1061</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-1062"><a href="#L-1062"><span class="linenos">1062</span></a>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="k">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-1064"><a href="#L-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_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-1065"><a href="#L-1065"><span class="linenos">1065</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-1066"><a href="#L-1066"><span class="linenos">1066</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-1067"><a href="#L-1067"><span class="linenos">1067</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-1068"><a href="#L-1068"><span class="linenos">1068</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-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</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-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="bp">self</span><span 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-1073"><a href="#L-1073"><span class="linenos">1073</span></a>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="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-1075"><a href="#L-1075"><span class="linenos">1075</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-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="p">)</span>
+</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</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-1023"><a href="#L-1023"><span class="linenos">1023</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-1024"><a href="#L-1024"><span class="linenos">1024</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-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</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-1027"><a href="#L-1027"><span class="linenos">1027</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-1028"><a href="#L-1028"><span class="linenos">1028</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-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
+</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</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-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="p">)</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">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-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">raise</span> <span class="n">error</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="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-1037"><a href="#L-1037"><span class="linenos">1037</span></a>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="bp">self</span><span class="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-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a><span class="sd"> Creates a new, validated Expression.</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="sd"> Args:</span>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
+</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
+</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</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="sd"> Returns:</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a><span class="sd"> The target expression.</span>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</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-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</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">def</span> <span class="nf">_add_comments</span><span 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">-&gt;</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">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-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">add_comments</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-1059"><a href="#L-1059"><span class="linenos">1059</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-1060"><a href="#L-1060"><span class="linenos">1060</span></a>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">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 class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</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="sd"> Args:</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a><span class="sd"> expression: The expression to validate.</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</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-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="sd"> Returns:</span>
+</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a><span class="sd"> The validated expression.</span>
+</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</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-1073"><a href="#L-1073"><span class="linenos">1073</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-1074"><a href="#L-1074"><span class="linenos">1074</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-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">return</span> <span class="n">expression</span>
</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="k">def</span> <span class="nf">_parse_to_table</span><span class="p">(</span>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
-</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="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="k">def</span> <span class="nf">_parse_ttl</span><span class="p">(</span><span class="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-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="k">def</span> <span class="nf">_parse_ttl_action</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</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-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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELETE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RECOMPRESS&quot;</span><span class="p">):</span>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="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-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">recompress</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-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 class="k">if</span> <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;DISK&quot;</span><span class="p">):</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="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-1097"><a href="#L-1097"><span class="linenos">1097</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_disk</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-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 class="k">if</span> <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;VOLUME&quot;</span><span class="p">):</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="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-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_volume</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-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="p">)</span>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</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-1079"><a href="#L-1079"><span class="linenos">1079</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="o">+</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</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-1082"><a href="#L-1082"><span class="linenos">1082</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-1083"><a href="#L-1083"><span class="linenos">1083</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-1084"><a href="#L-1084"><span class="linenos">1084</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-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">_index</span> <span class="o">&gt;</span> <span class="mi">0</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">_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-1088"><a href="#L-1088"><span class="linenos">1088</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-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="k">else</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">_prev</span> <span class="o">=</span> <span class="kc">None</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">_prev_comments</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><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</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-1094"><a href="#L-1094"><span class="linenos">1094</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-1095"><a href="#L-1095"><span class="linenos">1095</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-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="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-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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-1101"><a href="#L-1101"><span class="linenos">1101</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-1102"><a href="#L-1102"><span class="linenos">1102</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-1103"><a href="#L-1103"><span class="linenos">1103</span></a>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="bp">self</span><span 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-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="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_ttl_action</span><span class="p">)</span>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</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-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</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-1107"><a href="#L-1107"><span class="linenos">1107</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-1108"><a href="#L-1108"><span class="linenos">1108</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-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="n">aggregates</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="k">if</span> <span class="n">group</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">SET</span><span class="p">):</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-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">return</span> <span class="bp">self</span><span class="o">.</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="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="n">aggregates</span><span class="o">=</span><span class="n">aggregates</span><span class="p">,</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="p">)</span>
-</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">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-1123"><a href="#L-1123"><span class="linenos">1123</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-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">return</span> <span class="kc">None</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="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-1127"><a href="#L-1127"><span class="linenos">1127</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-1128"><a href="#L-1128"><span class="linenos">1128</span></a>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1130"><a href="#L-1130"><span class="linenos">1130</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-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="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-1133"><a href="#L-1133"><span class="linenos">1133</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-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</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-1111"><a href="#L-1111"><span class="linenos">1111</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-1112"><a href="#L-1112"><span class="linenos">1112</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-1113"><a href="#L-1113"><span class="linenos">1113</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-1114"><a href="#L-1114"><span class="linenos">1114</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-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_column</span><span class="p">()</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</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-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="bp">self</span><span 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-1120"><a href="#L-1120"><span class="linenos">1120</span></a>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</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-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <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 class="k">def</span> <span class="nf">_parse_to_table</span><span class="p">(</span>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="bp">self</span><span class="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">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</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="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="k">def</span> <span class="nf">_parse_ttl</span><span class="p">(</span><span class="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-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="k">def</span> <span class="nf">_parse_ttl_action</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</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_bitwise</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="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">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-1137"><a href="#L-1137"><span class="linenos">1137</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-1138"><a href="#L-1138"><span class="linenos">1138</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-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">materialized</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;MATERIALIZED&quot;</span><span class="p">)</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 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-1142"><a href="#L-1142"><span class="linenos">1142</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-1143"><a href="#L-1143"><span class="linenos">1143</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">start</span><span class="o">.</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</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-1149"><a href="#L-1149"><span class="linenos">1149</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-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="n">cascade</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;CASCADE&quot;</span><span class="p">),</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</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-1155"><a href="#L-1155"><span class="linenos">1155</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-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="p">)</span>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="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-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="k">return</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="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</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-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="p">)</span>
-</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">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">exp</span><span class="o">.</span><span class="n">Create</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-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="c1"># Note: this can&#39;t be None because we&#39;ve matched a statement parser</span>
-</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</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-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="n">start</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-1169"><a href="#L-1169"><span class="linenos">1169</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-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="p">)</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</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-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELETE&quot;</span><span class="p">):</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RECOMPRESS&quot;</span><span class="p">):</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="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-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">recompress</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-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="p">)</span>
+</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="k">if</span> <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;DISK&quot;</span><span class="p">):</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="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-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_disk</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-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="p">)</span>
+</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">if</span> <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;VOLUME&quot;</span><span class="p">):</span>
+</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="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-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_volume</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-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="p">)</span>
+</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="k">return</span> <span class="n">this</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 class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_ttl_action</span><span class="p">)</span>
+</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</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-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="L-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">aggregates</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="k">if</span> <span class="n">group</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">SET</span><span class="p">):</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-1160"><a href="#L-1160"><span class="linenos">1160</span></a>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="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-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="n">expressions</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="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
+</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="n">aggregates</span><span class="o">=</span><span class="n">aggregates</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="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-1170"><a href="#L-1170"><span class="linenos">1170</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-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">return</span> <span class="kc">None</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="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-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="k">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-1174"><a href="#L-1174"><span class="linenos">1174</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-1175"><a href="#L-1175"><span class="linenos">1175</span></a>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</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-1176"><a href="#L-1176"><span class="linenos">1176</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-1177"><a href="#L-1177"><span class="linenos">1177</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-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">create_token</span><span class="p">:</span>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
-</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</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><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</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-1183"><a href="#L-1183"><span class="linenos">1183</span></a>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</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-1185"><a href="#L-1185"><span class="linenos">1185</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-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="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-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</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><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a>
-</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="k">def</span> <span class="nf">extend_props</span><span class="p">(</span><span class="n">temp_props</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="kc">None</span><span class="p">:</span>
-</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="k">nonlocal</span> <span class="n">properties</span>
-</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_props</span><span class="p">:</span>
-</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</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_props</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="k">elif</span> <span class="n">temp_props</span><span class="p">:</span>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_props</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="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-1203"><a href="#L-1203"><span class="linenos">1203</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-1179"><a href="#L-1179"><span class="linenos">1179</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-1180"><a href="#L-1180"><span class="linenos">1180</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-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</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">def</span> <span class="nf">_parse_drop</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="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">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-1184"><a href="#L-1184"><span class="linenos">1184</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-1185"><a href="#L-1185"><span class="linenos">1185</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-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="n">materialized</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;MATERIALIZED&quot;</span><span class="p">)</span>
+</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="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-1189"><a href="#L-1189"><span class="linenos">1189</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-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
+</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">start</span><span class="o">.</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(),</span>
+</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</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-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
+</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="n">cascade</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;CASCADE&quot;</span><span class="p">),</span>
+</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</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-1202"><a href="#L-1202"><span class="linenos">1202</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-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <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="c1"># exp.Properties.Location.POST_SCHEMA (&quot;schema&quot; here is the UDF&#39;s type signature)</span>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="n">extend_props</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-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="bp">self</span><span 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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span 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-1211"><a href="#L-1211"><span class="linenos">1211</span></a> <span class="n">expression</span> <span class="o">=</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-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</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-1214"><a href="#L-1214"><span class="linenos">1214</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-1215"><a href="#L-1215"><span class="linenos">1215</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-1205"><a href="#L-1205"><span class="linenos">1205</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-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="k">return</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;IF&quot;</span><span class="p">)</span>
+</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</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-1209"><a href="#L-1209"><span class="linenos">1209</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-1210"><a href="#L-1210"><span class="linenos">1210</span></a> <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">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">exp</span><span class="o">.</span><span class="n">Create</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-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="c1"># Note: this can&#39;t be None because we&#39;ve matched a statement parser</span>
+</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</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-1215"><a href="#L-1215"><span class="linenos">1215</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-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="n">return_</span><span class="p">:</span>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</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-1219"><a href="#L-1219"><span class="linenos">1219</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-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">_parse_index</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">_parse_id_var</span><span class="p">())</span>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</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-1222"><a href="#L-1222"><span class="linenos">1222</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-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="c1"># exp.Properties.Location.POST_NAME</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="bp">self</span><span 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-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="n">extend_props</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 class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="n">start</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-1218"><a href="#L-1218"><span class="linenos">1218</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-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="p">)</span>
+</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</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-1221"><a href="#L-1221"><span class="linenos">1221</span></a>
+</span><span id="L-1222"><a href="#L-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">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-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</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-1227"><a href="#L-1227"><span class="linenos">1227</span></a>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="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-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="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="n">extend_props</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-1228"><a href="#L-1228"><span class="linenos">1228</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-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</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><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</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-1232"><a href="#L-1232"><span class="linenos">1232</span></a>
-</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="bp">self</span><span 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-1234"><a href="#L-1234"><span class="linenos">1234</span></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">DDL_SELECT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
-</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="n">extend_props</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-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="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-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="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-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="n">extend_props</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-1233"><a href="#L-1233"><span class="linenos">1233</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-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">_parse_as_command</span><span class="p">(</span><span class="n">start</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="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-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</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><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="n">clone</span> <span class="o">=</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="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="k">while</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 class="n">index</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-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="c1"># exp.Properties.Location.POST_INDEX</span>
-</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="n">extend_props</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-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="k">def</span> <span class="nf">extend_props</span><span class="p">(</span><span class="n">temp_props</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="kc">None</span><span class="p">:</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="k">nonlocal</span> <span class="n">properties</span>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_props</span><span class="p">:</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</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_props</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="k">elif</span> <span class="n">temp_props</span><span class="p">:</span>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_props</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="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="k">break</span>
-</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="k">else</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">COMMA</span><span class="p">)</span>
-</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</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-1256"><a href="#L-1256"><span class="linenos">1256</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-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="k">if</span> <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-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLONE&quot;</span><span class="p">):</span>
-</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="n">clone</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-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="n">when</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;BEFORE&quot;</span><span class="p">})</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="n">clone_kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="bp">self</span><span 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-1265"><a href="#L-1265"><span class="linenos">1265</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="bp">self</span><span class="o">.</span><span class="n">CLONE_KINDS</span><span class="p">)</span>
-</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="p">)</span>
-</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a> <span class="n">clone_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">FARROW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="bp">self</span><span 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-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="n">clone</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-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span> <span class="n">when</span><span class="o">=</span><span class="n">when</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">clone_kind</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">clone_expression</span>
-</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="p">)</span>
-</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a>
-</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="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-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
-</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</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-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
-</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="n">expression</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="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
-</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
-</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</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-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
-</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="n">clone</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
-</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="p">)</span>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</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-1252"><a href="#L-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_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-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="c1"># exp.Properties.Location.POST_SCHEMA (&quot;schema&quot; here is the UDF&#39;s type signature)</span>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="n">extend_props</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-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="bp">self</span><span 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-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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span 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-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="n">expression</span> <span class="o">=</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-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</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-1263"><a href="#L-1263"><span class="linenos">1263</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-1264"><a href="#L-1264"><span class="linenos">1264</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-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">return_</span><span class="p">:</span>
+</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</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-1268"><a href="#L-1268"><span class="linenos">1268</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-1269"><a href="#L-1269"><span class="linenos">1269</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 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-1270"><a href="#L-1270"><span class="linenos">1270</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-1271"><a href="#L-1271"><span class="linenos">1271</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-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="c1"># exp.Properties.Location.POST_NAME</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</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-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="n">extend_props</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 class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>
+</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="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-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="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="n">extend_props</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-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="bp">self</span><span 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-1283"><a href="#L-1283"><span class="linenos">1283</span></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">DDL_SELECT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
+</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="n">extend_props</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-1286"><a href="#L-1286"><span class="linenos">1286</span></a>
+</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</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-1288"><a href="#L-1288"><span class="linenos">1288</span></a>
-</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="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-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="c1"># only used for teradata currently</span>
-</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="bp">self</span><span 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-1289"><a href="#L-1289"><span class="linenos">1289</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-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
+</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="n">extend_props</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-1292"><a href="#L-1292"><span class="linenos">1292</span></a>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">),</span>
-</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">),</span>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BEFORE&quot;</span><span class="p">),</span>
-</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">),</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;NOT LOCAL&quot;</span><span class="p">),</span>
-</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">),</span>
-</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)),</span>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</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><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">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-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="n">parser</span> <span class="o">=</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><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</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="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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">v</span><span class="p">})</span>
-</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
-</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">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot parse property &#39;</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">&#39;&quot;</span><span class="p">)</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="kc">None</span>
-</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a>
-</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="k">def</span> <span class="nf">_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-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">_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-1316"><a href="#L-1316"><span class="linenos">1316</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-1317"><a href="#L-1317"><span class="linenos">1317</span></a>
-</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="k">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-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_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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMPOUND&quot;</span><span class="p">,</span> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">):</span>
-</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</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-1323"><a href="#L-1323"><span class="linenos">1323</span></a>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="k">if</span> <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-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-1328"><a href="#L-1328"><span class="linenos">1328</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-1329"><a href="#L-1329"><span class="linenos">1329</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-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">if</span> <span class="n">assignment</span><span class="p">:</span>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</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-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="bp">self</span><span 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-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">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-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">return</span> <span class="kc">None</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">_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">FileFormatProperty</span><span class="p">:</span>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="bp">self</span><span 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-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="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-1342"><a href="#L-1342"><span class="linenos">1342</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-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">return</span> <span class="bp">self</span><span class="o">.</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">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="n">this</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-1347"><a href="#L-1347"><span class="linenos">1347</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-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="p">)</span>
-</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</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-1350"><a href="#L-1350"><span class="linenos">1350</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-1351"><a href="#L-1351"><span class="linenos">1351</span></a> <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">_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">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="bp">self</span><span 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-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="bp">self</span><span 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-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="k">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">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-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">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="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">t</span><span class="o">.</span><span class="n">Optional</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-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
-</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="n">prop</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-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="n">prop</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-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">if</span> <span class="ow">not</span> <span class="n">prop</span><span class="p">:</span>
-</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="k">break</span>
-</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</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">prop</span><span class="p">):</span>
-</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</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-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="n">index</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-1296"><a href="#L-1296"><span class="linenos">1296</span></a>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="n">extend_props</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-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">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="k">break</span>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="bp">self</span><span 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-1304"><a href="#L-1304"><span class="linenos">1304</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-1305"><a href="#L-1305"><span class="linenos">1305</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-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">_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-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</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="n">shallow</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;SHALLOW&quot;</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;CLONE&quot;</span><span class="p">):</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="n">clone</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-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="n">when</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;BEFORE&quot;</span><span class="p">})</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="n">clone_kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="bp">self</span><span 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-1316"><a href="#L-1316"><span class="linenos">1316</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="bp">self</span><span class="o">.</span><span class="n">CLONE_KINDS</span><span class="p">)</span>
+</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="p">)</span>
+</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="n">clone_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">FARROW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-1320"><a href="#L-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">R_PAREN</span><span class="p">)</span>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="n">clone</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-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">,</span>
+</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="n">this</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
+</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="n">when</span><span class="o">=</span><span class="n">when</span><span class="p">,</span>
+</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">clone_kind</span><span class="p">,</span>
+</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="n">shallow</span><span class="o">=</span><span class="n">shallow</span><span class="p">,</span>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">clone_expression</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 class="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-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</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-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
+</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</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-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
+</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="n">clone</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="p">)</span>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</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-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="c1"># only used for teradata currently</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</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-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="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">),</span>
+</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">),</span>
+</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BEFORE&quot;</span><span class="p">),</span>
+</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">),</span>
+</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;NOT LOCAL&quot;</span><span class="p">),</span>
+</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">),</span>
+</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)),</span>
+</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)),</span>
+</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="p">}</span>
+</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">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-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="n">parser</span> <span class="o">=</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><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">v</span><span class="p">})</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot parse property &#39;</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">&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a>
+</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a>
-</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="k">def</span> <span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><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">FallbackProperty</span><span class="p">:</span>
-</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a> <span class="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-1378"><a href="#L-1378"><span class="linenos">1378</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-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="p">)</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_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-1372"><a href="#L-1372"><span class="linenos">1372</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-1373"><a href="#L-1373"><span class="linenos">1373</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-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">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-1376"><a href="#L-1376"><span class="linenos">1376</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-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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMPOUND&quot;</span><span class="p">,</span> <span class="s2">&quot;SORTKEY&quot;</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">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-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="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">VolatileProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</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-1383"><a href="#L-1383"><span class="linenos">1383</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-1384"><a href="#L-1384"><span class="linenos">1384</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a>
-</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="k">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="bp">self</span><span class="o">.</span><span class="n">PRE_VOLATILE_TOKENS</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="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</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">return</span> <span class="bp">self</span><span 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-1391"><a href="#L-1391"><span class="linenos">1391</span></a>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="k">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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">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-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">_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-1397"><a href="#L-1397"><span class="linenos">1397</span></a>
-</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="k">if</span> <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-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">_parse_withjournaltable</span><span class="p">()</span>
-</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="k">if</span> <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-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">_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-1403"><a href="#L-1403"><span class="linenos">1403</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-1404"><a href="#L-1404"><span class="linenos">1404</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-1405"><a href="#L-1405"><span class="linenos">1405</span></a>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</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-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="k">return</span> <span class="kc">None</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="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-1410"><a href="#L-1410"><span class="linenos">1410</span></a>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</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">DefinerProperty</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</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-1414"><a href="#L-1414"><span class="linenos">1414</span></a>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="n">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-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="bp">self</span><span 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-1417"><a href="#L-1417"><span class="linenos">1417</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-1381"><a href="#L-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_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-1382"><a href="#L-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 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-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="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-1385"><a href="#L-1385"><span class="linenos">1385</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-1386"><a href="#L-1386"><span class="linenos">1386</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-1387"><a href="#L-1387"><span class="linenos">1387</span></a>
+</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a> <span class="k">if</span> <span class="n">assignment</span><span class="p">:</span>
+</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</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-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="bp">self</span><span 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-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="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-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</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 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-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <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="k">return</span> <span class="kc">None</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a>
+</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</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">FileFormatProperty</span><span class="p">:</span>
+</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="bp">self</span><span 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-1401"><a href="#L-1401"><span class="linenos">1401</span></a>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</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-1403"><a href="#L-1403"><span class="linenos">1403</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-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">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="n">this</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-1408"><a href="#L-1408"><span class="linenos">1408</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-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="p">)</span>
+</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</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-1411"><a href="#L-1411"><span class="linenos">1411</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-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><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</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">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-1415"><a href="#L-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="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="bp">self</span><span 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-1417"><a href="#L-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 class="n">exp_class</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-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="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-1420"><a href="#L-1420"><span class="linenos">1420</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="k">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-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="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">WithJournalTableProperty</span><span class="p">:</span>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="bp">self</span><span 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-1426"><a href="#L-1426"><span class="linenos">1426</span></a> <span class="bp">self</span><span 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-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1428"><a href="#L-1428"><span class="linenos">1428</span></a>
-</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</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="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">LogProperty</span><span class="p">:</span>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1419"><a href="#L-1419"><span class="linenos">1419</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="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">t</span><span class="o">.</span><span class="n">Optional</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-1420"><a href="#L-1420"><span class="linenos">1420</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
+</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a> <span class="n">prop</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-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="n">prop</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-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">if</span> <span class="ow">not</span> <span class="n">prop</span><span class="p">:</span>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="k">break</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</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">prop</span><span class="p">):</span>
+</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</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-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_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span>
-</span><span id="L-1433"><a href="#L-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 class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="L-1433"><a href="#L-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 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-1434"><a href="#L-1434"><span class="linenos">1434</span></a>
-</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="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">ChecksumProperty</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">_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-1437"><a href="#L-1437"><span class="linenos">1437</span></a>
-</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</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-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a>
-</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">on</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">_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-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="k">def</span> <span class="nf">_parse_cluster</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span>
-</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-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">_parse_clustered_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">ClusteredByProperty</span><span class="p">:</span>
-</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
-</span><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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</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-1454"><a href="#L-1454"><span class="linenos">1454</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-1455"><a href="#L-1455"><span class="linenos">1455</span></a>
-</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</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-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-1459"><a href="#L-1459"><span class="linenos">1459</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-1460"><a href="#L-1460"><span class="linenos">1460</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="kc">None</span>
-</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="bp">self</span><span 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-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="n">buckets</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-1465"><a href="#L-1465"><span class="linenos">1465</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;BUCKETS&quot;</span><span class="p">)</span>
+</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="k">return</span> <span class="kc">None</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">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="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">FallbackProperty</span><span class="p">:</span>
+</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="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-1439"><a href="#L-1439"><span class="linenos">1439</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-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="p">)</span>
+</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a>
+</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</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">VolatileProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</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-1444"><a href="#L-1444"><span class="linenos">1444</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-1445"><a href="#L-1445"><span class="linenos">1445</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a>
+</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a> <span class="k">if</span> <span class="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="bp">self</span><span class="o">.</span><span class="n">PRE_VOLATILE_TOKENS</span><span class="p">:</span>
+</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</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-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">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
+</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1457"><a href="#L-1457"><span class="linenos">1457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1458"><a href="#L-1458"><span class="linenos">1458</span></a>
+</span><span id="L-1459"><a href="#L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;JOURNAL&quot;</span><span class="p">):</span>
+</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</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-1461"><a href="#L-1461"><span class="linenos">1461</span></a>
+</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <span class="k">if</span> <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-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">_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-1464"><a href="#L-1464"><span class="linenos">1464</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-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">_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-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">return</span> <span class="bp">self</span><span class="o">.</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">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">,</span>
-</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="n">sorted_by</span><span class="o">=</span><span class="n">sorted_by</span><span class="p">,</span>
-</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
-</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="p">)</span>
-</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a>
-</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a> <span class="k">def</span> <span class="nf">_parse_copy_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">CopyGrantsProperty</span><span class="p">]:</span>
-</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></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;GRANTS&quot;</span><span class="p">):</span>
-</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a>
-</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">)</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">_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">FreespaceProperty</span><span class="p">:</span>
-</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="bp">self</span><span 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-1483"><a href="#L-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="L-1484"><a href="#L-1484"><span class="linenos">1484</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-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_mergeblockratio</span><span class="p">(</span>
-</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">no</span><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">default</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span>
-</span><span id="L-1490"><a href="#L-1490"><span class="linenos">1490</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="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-1492"><a href="#L-1492"><span class="linenos">1492</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
-</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</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-1494"><a href="#L-1494"><span class="linenos">1494</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-1495"><a href="#L-1495"><span class="linenos">1495</span></a> <span class="p">)</span>
-</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a>
-</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</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-1467"><a href="#L-1467"><span class="linenos">1467</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-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a>
+</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</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-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="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
+</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</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">DefinerProperty</span><span class="p">]:</span>
+</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a> <span class="bp">self</span><span 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-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="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-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="bp">self</span><span 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-1478"><a href="#L-1478"><span class="linenos">1478</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-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">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-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="k">return</span> <span class="kc">None</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">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-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">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">WithJournalTableProperty</span><span class="p">:</span>
+</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a> <span class="bp">self</span><span 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-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="bp">self</span><span 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-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 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="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">LogProperty</span><span class="p">:</span>
+</span><span id="L-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_parse_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</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="bp">self</span><span 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="o">**</span><span class="n">kwargs</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_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">ChecksumProperty</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><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span>
-</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a> <span class="n">minimum</span><span 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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">maximum</span><span 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-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span>
-</span><span id="L-1505"><a href="#L-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="L-1506"><a href="#L-1506"><span class="linenos">1506</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-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="n">units</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</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-1510"><a href="#L-1510"><span class="linenos">1510</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-1511"><a href="#L-1511"><span class="linenos">1511</span></a>
-</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">,</span>
-</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">,</span>
-</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="L-1517"><a href="#L-1517"><span class="linenos">1517</span></a> <span class="n">minimum</span><span class="o">=</span><span class="n">minimum</span><span class="p">,</span>
-</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a> <span class="n">maximum</span><span class="o">=</span><span class="n">maximum</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">_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">BlockCompressionProperty</span><span class="p">:</span>
-</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="bp">self</span><span 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-1523"><a href="#L-1523"><span class="linenos">1523</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-1524"><a href="#L-1524"><span class="linenos">1524</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-1525"><a href="#L-1525"><span class="linenos">1525</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-1526"><a href="#L-1526"><span class="linenos">1526</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-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1500"><a href="#L-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">ON</span><span class="p">):</span>
+</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a>
+</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 class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</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="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-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">def</span> <span class="nf">_parse_cluster</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span>
+</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-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_clustered_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">ClusteredByProperty</span><span class="p">:</span>
+</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
+</span><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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</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-1515"><a href="#L-1515"><span class="linenos">1515</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</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_l_paren</span><span class="p">()</span>
+</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-1520"><a href="#L-1520"><span class="linenos">1520</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-1521"><a href="#L-1521"><span class="linenos">1521</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-1525"><a href="#L-1525"><span class="linenos">1525</span></a> <span class="n">buckets</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-1526"><a href="#L-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;BUCKETS&quot;</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="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="k">if</span> <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-1530"><a href="#L-1530"><span class="linenos">1530</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
-</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
-</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
-</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
-</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</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><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</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">IsolatedLoadingProperty</span><span class="p">:</span>
-</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</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-1543"><a href="#L-1543"><span class="linenos">1543</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-1544"><a href="#L-1544"><span class="linenos">1544</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-1545"><a href="#L-1545"><span class="linenos">1545</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-1546"><a href="#L-1546"><span class="linenos">1546</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-1547"><a href="#L-1547"><span class="linenos">1547</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-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><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
-</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
-</span><span id="L-1551"><a href="#L-1551"><span class="linenos">1551</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
-</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</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-1553"><a href="#L-1553"><span class="linenos">1553</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-1554"><a href="#L-1554"><span class="linenos">1554</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-1555"><a href="#L-1555"><span class="linenos">1555</span></a> <span class="p">)</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="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">LockingProperty</span><span class="p">:</span>
-</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="L-1560"><a href="#L-1560"><span class="linenos">1560</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-1561"><a href="#L-1561"><span class="linenos">1561</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
-</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</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-1563"><a href="#L-1563"><span class="linenos">1563</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
-</span><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</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-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
-</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</span></a> <span class="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-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">,</span>
+</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="n">sorted_by</span><span class="o">=</span><span class="n">sorted_by</span><span class="p">,</span>
+</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
+</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="p">)</span>
+</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a>
+</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="k">def</span> <span class="nf">_parse_copy_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">CopyGrantsProperty</span><span class="p">]:</span>
+</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="k">if</span> <span class="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;GRANTS&quot;</span><span class="p">):</span>
+</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="k">return</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">)</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">_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">FreespaceProperty</span><span class="p">:</span>
+</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="bp">self</span><span 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-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">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-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_mergeblockratio</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="p">,</span> <span class="n">no</span><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">default</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span>
+</span><span id="L-1551"><a href="#L-1551"><span class="linenos">1551</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1552"><a href="#L-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="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
+</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</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-1555"><a href="#L-1555"><span class="linenos">1555</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-1556"><a href="#L-1556"><span class="linenos">1556</span></a> <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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</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-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">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span>
+</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <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="p">]</span> <span class="o">=</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">minimum</span><span 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-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="n">maximum</span><span 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-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</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">_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-1567"><a href="#L-1567"><span class="linenos">1567</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-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">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-1570"><a href="#L-1570"><span class="linenos">1570</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-1571"><a href="#L-1571"><span class="linenos">1571</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-1575"><a href="#L-1575"><span class="linenos">1575</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
-</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</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-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
-</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</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">if</span> <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-1582"><a href="#L-1582"><span class="linenos">1582</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
-</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</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-1584"><a href="#L-1584"><span class="linenos">1584</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
-</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</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-1586"><a href="#L-1586"><span class="linenos">1586</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
-</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</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-1588"><a href="#L-1588"><span class="linenos">1588</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
-</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</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-1590"><a href="#L-1590"><span class="linenos">1590</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
-</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</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-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
-</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="n">lock_type</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="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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
-</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</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-1603"><a href="#L-1603"><span class="linenos">1603</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-1604"><a href="#L-1604"><span class="linenos">1604</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
-</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="p">)</span>
-</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a>
-</span><span id="L-1607"><a href="#L-1607"><span class="linenos">1607</span></a> <span class="k">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-1608"><a href="#L-1608"><span class="linenos">1608</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1609"><a href="#L-1609"><span class="linenos">1609</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-1610"><a href="#L-1610"><span class="linenos">1610</span></a> <span class="k">return</span> <span class="p">[]</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">_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">PartitionedByProperty</span><span class="p">:</span>
-</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="bp">self</span><span 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-1614"><a href="#L-1614"><span class="linenos">1614</span></a> <span class="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-1615"><a href="#L-1615"><span class="linenos">1615</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</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">_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-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <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">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="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">WithDataProperty</span><span class="p">:</span>
-</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="k">if</span> <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-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</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-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="n">statistics</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><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1628"><a href="#L-1628"><span class="linenos">1628</span></a>
-</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a> <span class="k">def</span> <span class="nf">_parse_no_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">NoPrimaryIndexProperty</span><span class="p">]:</span>
-</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">_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-1631"><a href="#L-1631"><span class="linenos">1631</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-1632"><a href="#L-1632"><span class="linenos">1632</span></a> <span class="k">return</span> <span class="kc">None</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="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-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;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-1636"><a href="#L-1636"><span class="linenos">1636</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-1637"><a href="#L-1637"><span class="linenos">1637</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;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;DELETE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</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="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">(</span><span class="n">delete</span><span class="o">=</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 class="k">return</span> <span class="kc">None</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">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">DistKeyProperty</span><span class="p">:</span>
-</span><span id="L-1642"><a href="#L-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 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-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 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">LikeProperty</span><span class="p">]:</span>
-</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</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-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="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</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-1649"><a href="#L-1649"><span class="linenos">1649</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-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 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-1652"><a href="#L-1652"><span class="linenos">1652</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-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="k">return</span> <span class="kc">None</span>
-</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 class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</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">Property</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <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">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-1657"><a href="#L-1657"><span class="linenos">1657</span></a> <span class="p">)</span>
+</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</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-1571"><a href="#L-1571"><span class="linenos">1571</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">,</span>
+</span><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">,</span>
+</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="n">minimum</span><span class="o">=</span><span class="n">minimum</span><span class="p">,</span>
+</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="n">maximum</span><span class="o">=</span><span class="n">maximum</span><span class="p">,</span>
+</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a> <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">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">BlockCompressionProperty</span><span class="p">:</span>
+</span><span id="L-1583"><a href="#L-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">EQ</span><span class="p">)</span>
+</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</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-1585"><a href="#L-1585"><span class="linenos">1585</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-1586"><a href="#L-1586"><span class="linenos">1586</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-1587"><a href="#L-1587"><span class="linenos">1587</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-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="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1590"><a href="#L-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;AUTOTEMP&quot;</span><span class="p">):</span>
+</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
+</span><span id="L-1595"><a href="#L-1595"><span class="linenos">1595</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
+</span><span id="L-1596"><a href="#L-1596"><span class="linenos">1596</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
+</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
+</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
+</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a> <span class="p">)</span>
+</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a>
+</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</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">IsolatedLoadingProperty</span><span class="p">:</span>
+</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</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-1604"><a href="#L-1604"><span class="linenos">1604</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-1605"><a href="#L-1605"><span class="linenos">1605</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-1606"><a href="#L-1606"><span class="linenos">1606</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-1607"><a href="#L-1607"><span class="linenos">1607</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-1608"><a href="#L-1608"><span class="linenos">1608</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-1609"><a href="#L-1609"><span class="linenos">1609</span></a> <span class="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-1610"><a href="#L-1610"><span class="linenos">1610</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
+</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
+</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
+</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</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-1614"><a href="#L-1614"><span class="linenos">1614</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-1615"><a href="#L-1615"><span class="linenos">1615</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-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="p">)</span>
+</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a>
+</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="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">LockingProperty</span><span class="p">:</span>
+</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</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-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
+</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</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-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
+</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</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-1626"><a href="#L-1626"><span class="linenos">1626</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
+</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="n">kind</span> <span class="o">=</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="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-1631"><a href="#L-1631"><span class="linenos">1631</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-1632"><a href="#L-1632"><span class="linenos">1632</span></a> <span class="k">else</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="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="bp">self</span><span 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-1636"><a href="#L-1636"><span class="linenos">1636</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
+</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</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-1638"><a href="#L-1638"><span class="linenos">1638</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
+</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a>
+</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a> <span class="k">if</span> <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-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
+</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</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-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
+</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</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-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
+</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</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-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
+</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</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-1651"><a href="#L-1651"><span class="linenos">1651</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
+</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</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-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
+</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</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="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-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 class="k">return</span> <span class="bp">self</span><span 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-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_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">SortKeyProperty</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">expression</span><span class="p">(</span>
-</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</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_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
-</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</span></a> <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 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">CharacterSetProperty</span><span class="p">:</span>
-</span><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a> <span class="bp">self</span><span 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-1668"><a href="#L-1668"><span class="linenos">1668</span></a> <span class="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-1669"><a href="#L-1669"><span class="linenos">1669</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-1670"><a href="#L-1670"><span class="linenos">1670</span></a> <span class="p">)</span>
-</span><span id="L-1671"><a href="#L-1671"><span class="linenos">1671</span></a>
-</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</span></a> <span class="k">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">ReturnsProperty</span><span class="p">:</span>
-</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</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-1674"><a href="#L-1674"><span class="linenos">1674</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-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">if</span> <span class="n">is_table</span><span class="p">:</span>
-</span><span id="L-1677"><a href="#L-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</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-1678"><a href="#L-1678"><span class="linenos">1678</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-1679"><a href="#L-1679"><span class="linenos">1679</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
-</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</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-1681"><a href="#L-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">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">),</span>
-</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="p">)</span>
-</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1684"><a href="#L-1684"><span class="linenos">1684</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-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
-</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</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-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">expression</span><span class="p">(</span>
+</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
+</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</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-1664"><a href="#L-1664"><span class="linenos">1664</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-1665"><a href="#L-1665"><span class="linenos">1665</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
+</span><span id="L-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <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="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">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="bp">self</span><span 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-1670"><a href="#L-1670"><span class="linenos">1670</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-1671"><a href="#L-1671"><span class="linenos">1671</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</span></a>
+</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</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">PartitionedByProperty</span><span class="p">:</span>
+</span><span id="L-1674"><a href="#L-1674"><span class="linenos">1674</span></a> <span class="bp">self</span><span 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-1675"><a href="#L-1675"><span class="linenos">1675</span></a> <span class="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-1676"><a href="#L-1676"><span class="linenos">1676</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
+</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</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-1678"><a href="#L-1678"><span class="linenos">1678</span></a> <span class="p">)</span>
+</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a>
+</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="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="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">WithDataProperty</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
+</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</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-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a>
+</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 class="k">return</span> <span class="bp">self</span><span 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-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">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">Describe</span><span class="p">:</span>
-</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</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-1694"><a href="#L-1694"><span class="linenos">1694</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-1695"><a href="#L-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 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-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">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">Insert</span><span class="p">:</span>
-</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">ensure_list</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-1699"><a href="#L-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="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="bp">self</span><span 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</span><span class="p">)</span>
-</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="L-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</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 class="k">if</span> <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-1705"><a href="#L-1705"><span class="linenos">1705</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-1706"><a href="#L-1706"><span class="linenos">1706</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
-</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</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-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="L-1709"><a href="#L-1709"><span class="linenos">1709</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-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 class="k">else</span><span class="p">:</span>
-</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1713"><a href="#L-1713"><span class="linenos">1713</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-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="bp">self</span><span 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-1716"><a href="#L-1716"><span class="linenos">1716</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</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-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="bp">self</span><span 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-1718"><a href="#L-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 class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="k">def</span> <span class="nf">_parse_no_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">NoPrimaryIndexProperty</span><span class="p">]:</span>
+</span><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="k">if</span> <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-1692"><a href="#L-1692"><span class="linenos">1692</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-1693"><a href="#L-1693"><span class="linenos">1693</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</span></a>
+</span><span id="L-1695"><a href="#L-1695"><span class="linenos">1695</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="k">if</span> <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-1697"><a href="#L-1697"><span class="linenos">1697</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-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="k">if</span> <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;DELETE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
+</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</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 class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span 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_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()))</span>
+</span><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">_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">DistKeyProperty</span><span class="p">:</span>
+</span><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_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">LikeProperty</span><span class="p">]:</span>
+</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</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-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="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1709"><a href="#L-1709"><span class="linenos">1709</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-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">_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-1711"><a href="#L-1711"><span class="linenos">1711</span></a>
+</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</span></a> <span class="n">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-1713"><a href="#L-1713"><span class="linenos">1713</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-1714"><a href="#L-1714"><span class="linenos">1714</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a>
+</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</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">Property</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <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">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-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <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 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-1720"><a href="#L-1720"><span class="linenos">1720</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</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-1727"><a href="#L-1727"><span class="linenos">1727</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-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="n">where</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">REPLACE</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-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <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-1730"><a href="#L-1730"><span class="linenos">1730</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-1731"><a href="#L-1731"><span class="linenos">1731</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-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
-</span><span id="L-1735"><a href="#L-1735"><span class="linenos">1735</span></a> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore</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_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">OnConflict</span><span class="p">]:</span>
-</span><span id="L-1739"><a href="#L-1739"><span class="linenos">1739</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-1740"><a href="#L-1740"><span class="linenos">1740</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-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">if</span> <span class="ow">not</span> <span class="n">conflict</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">duplicate</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="kc">None</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="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a>
-</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
-</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_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-1752"><a href="#L-1752"><span class="linenos">1752</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-1753"><a href="#L-1753"><span class="linenos">1753</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</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-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="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-1757"><a href="#L-1757"><span class="linenos">1757</span></a> <span class="k">if</span> <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-1758"><a href="#L-1758"><span class="linenos">1758</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</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="bp">self</span><span 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-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="bp">self</span><span 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-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
-</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a>
-</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a> <span class="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-1765"><a href="#L-1765"><span class="linenos">1765</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
-</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
-</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="n">expressions</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 class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
-</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
-</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</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="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">Returning</span><span class="p">]:</span>
-</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="k">return</span> <span class="kc">None</span>
-</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">expression</span><span class="p">(</span>
-</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</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_expression</span><span class="p">),</span>
-</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="n">into</span><span class="o">=</span><span class="bp">self</span><span 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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(),</span>
-</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="p">)</span>
-</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a>
-</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="k">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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</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="ow">not</span> <span class="bp">self</span><span 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-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</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-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">_parse_row_format</span><span class="p">(</span>
-</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <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><span id="L-1789"><a href="#L-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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</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">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-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="k">return</span> <span class="kc">None</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="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-1794"><a href="#L-1794"><span class="linenos">1794</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-1795"><a href="#L-1795"><span class="linenos">1795</span></a>
-</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a> <span class="n">serde_properties</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-1798"><a href="#L-1798"><span class="linenos">1798</span></a> <span class="n">serde_properties</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-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</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_property</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="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-1803"><a href="#L-1803"><span class="linenos">1803</span></a> <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="n">this</span><span class="p">,</span> <span class="n">serde_properties</span><span class="o">=</span><span class="n">serde_properties</span>
-</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <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="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-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="n">kwargs</span> <span class="o">=</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="k">if</span> <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-1811"><a href="#L-1811"><span class="linenos">1811</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-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="k">if</span> <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-1813"><a href="#L-1813"><span class="linenos">1813</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-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <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-1815"><a href="#L-1815"><span class="linenos">1815</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-1816"><a href="#L-1816"><span class="linenos">1816</span></a> <span class="k">if</span> <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-1817"><a href="#L-1817"><span class="linenos">1817</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-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="k">if</span> <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-1819"><a href="#L-1819"><span class="linenos">1819</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-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="k">if</span> <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-1821"><a href="#L-1821"><span class="linenos">1821</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-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">return</span> <span class="bp">self</span><span 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-1824"><a href="#L-1824"><span class="linenos">1824</span></a>
-</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="k">def</span> <span class="nf">_parse_load</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</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-1826"><a href="#L-1826"><span class="linenos">1826</span></a> <span class="k">if</span> <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-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</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-1829"><a href="#L-1829"><span class="linenos">1829</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-1830"><a href="#L-1830"><span class="linenos">1830</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-1831"><a href="#L-1831"><span class="linenos">1831</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</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="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-1836"><a href="#L-1836"><span class="linenos">1836</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
-</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</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-1840"><a href="#L-1840"><span class="linenos">1840</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-1841"><a href="#L-1841"><span class="linenos">1841</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-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <span class="p">)</span>
-</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</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-1844"><a href="#L-1844"><span class="linenos">1844</span></a>
-</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</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">Delete</span><span class="p">:</span>
-</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="c1"># This handles MySQL&#39;s &quot;Multiple-Table Syntax&quot;</span>
-</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/delete.html</span>
-</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</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-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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 class="ow">or</span> <span class="kc">None</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="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-1722"><a href="#L-1722"><span class="linenos">1722</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">SortKeyProperty</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="bp">self</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="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_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</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><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</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">CharacterSetProperty</span><span class="p">:</span>
+</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="bp">self</span><span 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-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <span class="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-1730"><a href="#L-1730"><span class="linenos">1730</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-1731"><a href="#L-1731"><span class="linenos">1731</span></a> <span class="p">)</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">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">ReturnsProperty</span><span class="p">:</span>
+</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</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-1735"><a href="#L-1735"><span class="linenos">1735</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-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">if</span> <span class="n">is_table</span><span class="p">:</span>
+</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1739"><a href="#L-1739"><span class="linenos">1739</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-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
+</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</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-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">),</span>
+</span><span id="L-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 class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1745"><a href="#L-1745"><span class="linenos">1745</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-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
+</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</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-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">return</span> <span class="bp">self</span><span 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-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">_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">Describe</span><span class="p">:</span>
+</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</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-1755"><a href="#L-1755"><span class="linenos">1755</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-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_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">Insert</span><span class="p">:</span>
+</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">ensure_list</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-1760"><a href="#L-1760"><span class="linenos">1760</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-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="bp">self</span><span 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</span><span class="p">)</span>
+</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="n">alternative</span> <span class="o">=</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">if</span> <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-1766"><a href="#L-1766"><span class="linenos">1766</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-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
+</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</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-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</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-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 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="k">if</span> <span class="bp">self</span><span 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-1774"><a href="#L-1774"><span class="linenos">1774</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-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="bp">self</span><span 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-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</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-1778"><a href="#L-1778"><span class="linenos">1778</span></a> <span class="bp">self</span><span 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-1779"><a href="#L-1779"><span class="linenos">1779</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-1780"><a href="#L-1780"><span class="linenos">1780</span></a>
+</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a> <span class="n">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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a> <span class="n">this</span><span class="o">=</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="n">by_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">),</span>
+</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</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-1789"><a href="#L-1789"><span class="linenos">1789</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-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="n">where</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">REPLACE</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-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <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-1792"><a href="#L-1792"><span class="linenos">1792</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-1793"><a href="#L-1793"><span class="linenos">1793</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-1794"><a href="#L-1794"><span class="linenos">1794</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
+</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore</span><span class="p">,</span>
+</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</span></a> <span class="p">)</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">_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">OnConflict</span><span class="p">]:</span>
+</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</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-1802"><a href="#L-1802"><span class="linenos">1802</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-1803"><a href="#L-1803"><span class="linenos">1803</span></a>
+</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">conflict</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">duplicate</span><span class="p">:</span>
+</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a> <span class="k">return</span> <span class="kc">None</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="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a>
+</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
+</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <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-1814"><a href="#L-1814"><span class="linenos">1814</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-1815"><a href="#L-1815"><span class="linenos">1815</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1816"><a href="#L-1816"><span class="linenos">1816</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-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="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-1819"><a href="#L-1819"><span class="linenos">1819</span></a> <span class="k">if</span> <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-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a> <span class="bp">self</span><span 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-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="bp">self</span><span 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-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_equality</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="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-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
+</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
+</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
+</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="L-1832"><a href="#L-1832"><span class="linenos">1832</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</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><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</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">Returning</span><span class="p">]:</span>
+</span><span id="L-1836"><a href="#L-1836"><span class="linenos">1836</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a> <span class="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-1839"><a href="#L-1839"><span class="linenos">1839</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="L-1840"><a href="#L-1840"><span class="linenos">1840</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-1841"><a href="#L-1841"><span class="linenos">1841</span></a> <span class="n">into</span><span class="o">=</span><span class="bp">self</span><span 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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(),</span>
+</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <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="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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
+</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="k">return</span> <span class="kc">None</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_row_format</span><span class="p">()</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">_parse_row_format</span><span class="p">(</span>
+</span><span id="L-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="bp">self</span><span class="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><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
+</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</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-1853"><a href="#L-1853"><span class="linenos">1853</span></a> <span class="k">return</span> <span class="kc">None</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 class="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-1856"><a href="#L-1856"><span class="linenos">1856</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
-</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a> <span class="n">tables</span><span class="o">=</span><span class="n">tables</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">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</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-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</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><span id="L-1864"><a href="#L-1864"><span class="linenos">1864</span></a> <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="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">Update</span><span class="p">:</span>
-</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</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-1868"><a href="#L-1868"><span class="linenos">1868</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">UPDATE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</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-1870"><a href="#L-1870"><span class="linenos">1870</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-1871"><a href="#L-1871"><span class="linenos">1871</span></a> <span class="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-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">this</span><span class="p">,</span>
-</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</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 class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</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-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</span></a> <span class="s2">&quot;limit&quot;</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-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="p">},</span>
-</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="p">)</span>
-</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</span></a>
-</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="k">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">Uncache</span><span class="p">:</span>
-</span><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1886"><a href="#L-1886"><span class="linenos">1886</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-1887"><a href="#L-1887"><span class="linenos">1887</span></a>
-</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="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-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span> <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">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-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_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">Cache</span><span class="p">:</span>
-</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <span class="n">lazy</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;LAZY&quot;</span><span class="p">)</span>
-</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="bp">self</span><span 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-1895"><a href="#L-1895"><span class="linenos">1895</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-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="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OPTIONS&quot;</span><span class="p">):</span>
-</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</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-1900"><a href="#L-1900"><span class="linenos">1900</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-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="bp">self</span><span 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-1902"><a href="#L-1902"><span class="linenos">1902</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-1903"><a href="#L-1903"><span class="linenos">1903</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-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><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a>
-</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="bp">self</span><span 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-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <span class="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-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
-</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
-</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</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-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="p">)</span>
+</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a> <span class="k">if</span> <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-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">_parse_string</span><span class="p">()</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="n">serde_properties</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-1860"><a href="#L-1860"><span class="linenos">1860</span></a> <span class="n">serde_properties</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-1861"><a href="#L-1861"><span class="linenos">1861</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</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_property</span><span class="p">)</span>
+</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="p">)</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">expression</span><span class="p">(</span>
+</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</span></a> <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="n">this</span><span class="p">,</span> <span class="n">serde_properties</span><span class="o">=</span><span class="n">serde_properties</span>
+</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="p">)</span>
+</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="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-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="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
+</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">if</span> <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-1873"><a href="#L-1873"><span class="linenos">1873</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-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="k">if</span> <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-1875"><a href="#L-1875"><span class="linenos">1875</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-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="k">if</span> <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-1877"><a href="#L-1877"><span class="linenos">1877</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-1878"><a href="#L-1878"><span class="linenos">1878</span></a> <span class="k">if</span> <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-1879"><a href="#L-1879"><span class="linenos">1879</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-1880"><a href="#L-1880"><span class="linenos">1880</span></a> <span class="k">if</span> <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-1881"><a href="#L-1881"><span class="linenos">1881</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-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="k">if</span> <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-1883"><a href="#L-1883"><span class="linenos">1883</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-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">return</span> <span class="bp">self</span><span 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-1886"><a href="#L-1886"><span class="linenos">1886</span></a>
+</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a> <span class="k">def</span> <span class="nf">_parse_load</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</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-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="k">if</span> <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-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</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-1891"><a href="#L-1891"><span class="linenos">1891</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-1892"><a href="#L-1892"><span class="linenos">1892</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-1893"><a href="#L-1893"><span class="linenos">1893</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
+</span><span id="L-1897"><a href="#L-1897"><span class="linenos">1897</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-1898"><a href="#L-1898"><span class="linenos">1898</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
+</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</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-1902"><a href="#L-1902"><span class="linenos">1902</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-1903"><a href="#L-1903"><span class="linenos">1903</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-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="p">)</span>
+</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</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-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="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">Delete</span><span class="p">:</span>
+</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="c1"># This handles MySQL&#39;s &quot;Multiple-Table Syntax&quot;</span>
+</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/delete.html</span>
+</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</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-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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 class="ow">or</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">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">Partition</span><span class="p">]:</span>
-</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a>
-</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</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-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_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">Tuple</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="bp">self</span><span 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-1925"><a href="#L-1925"><span class="linenos">1925</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-1926"><a href="#L-1926"><span class="linenos">1926</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-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
-</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a> <span class="c1"># https://prestodb.io/docs/current/sql/values.html</span>
-</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="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-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</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">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
-</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</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-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</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-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
-</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</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-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">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</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-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="k">return</span> <span class="n">cte</span>
+</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</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-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="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-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
+</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="n">tables</span><span class="o">=</span><span class="n">tables</span><span class="p">,</span>
+</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</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">FROM</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 class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</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-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</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><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a> <span class="p">)</span>
+</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a>
+</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</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">Update</span><span class="p">:</span>
+</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</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-1930"><a href="#L-1930"><span class="linenos">1930</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">UPDATE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</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-1932"><a href="#L-1932"><span class="linenos">1932</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-1933"><a href="#L-1933"><span class="linenos">1933</span></a> <span class="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-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">this</span><span class="p">,</span>
+</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</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 class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</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-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="s2">&quot;order&quot;</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-1943"><a href="#L-1943"><span class="linenos">1943</span></a> <span class="s2">&quot;limit&quot;</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-1944"><a href="#L-1944"><span class="linenos">1944</span></a> <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><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</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-1948"><a href="#L-1948"><span class="linenos">1948</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-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</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-1951"><a href="#L-1951"><span class="linenos">1951</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
-</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</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-1953"><a href="#L-1953"><span class="linenos">1953</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-1947"><a href="#L-1947"><span class="linenos">1947</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">Uncache</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="ow">not</span> <span class="bp">self</span><span 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-1949"><a href="#L-1949"><span class="linenos">1949</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-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">return</span> <span class="bp">self</span><span class="o">.</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 class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span> <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">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-1953"><a href="#L-1953"><span class="linenos">1953</span></a> <span class="p">)</span>
</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a>
-</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="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-1956"><a href="#L-1956"><span class="linenos">1956</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-1957"><a href="#L-1957"><span class="linenos">1957</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-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="n">kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1960"><a href="#L-1960"><span class="linenos">1960</span></a> <span class="bp">self</span><span 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-1961"><a href="#L-1961"><span class="linenos">1961</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-1962"><a href="#L-1962"><span class="linenos">1962</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-1963"><a href="#L-1963"><span class="linenos">1963</span></a> <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">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</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-1967"><a href="#L-1967"><span class="linenos">1967</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
-</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</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-1969"><a href="#L-1969"><span class="linenos">1969</span></a> <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">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-1972"><a href="#L-1972"><span class="linenos">1972</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-1973"><a href="#L-1973"><span class="linenos">1973</span></a>
-</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="n">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-1975"><a href="#L-1975"><span class="linenos">1975</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_projections</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="n">this</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-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
-</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
-</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">projections</span><span class="p">,</span>
-</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="p">)</span>
-</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</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-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="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-1988"><a href="#L-1988"><span class="linenos">1988</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</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-1990"><a href="#L-1990"><span class="linenos">1990</span></a>
-</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</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-1992"><a href="#L-1992"><span class="linenos">1992</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</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-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">this</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="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-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1998"><a href="#L-1998"><span class="linenos">1998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">()</span>
-</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</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">FROM</span><span class="p">):</span>
-</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span>
-</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <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">From</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 class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</span></a> <span class="p">)</span>
-</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="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-2005"><a href="#L-2005"><span class="linenos">2005</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="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-1955"><a href="#L-1955"><span class="linenos">1955</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">Cache</span><span class="p">:</span>
+</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a> <span class="n">lazy</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;LAZY&quot;</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">_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-1958"><a href="#L-1958"><span class="linenos">1958</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-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="n">options</span> <span class="o">=</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_text_seq</span><span class="p">(</span><span class="s2">&quot;OPTIONS&quot;</span><span class="p">):</span>
+</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</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-1963"><a href="#L-1963"><span class="linenos">1963</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-1964"><a href="#L-1964"><span class="linenos">1964</span></a> <span class="bp">self</span><span 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-1965"><a href="#L-1965"><span class="linenos">1965</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-1966"><a href="#L-1966"><span class="linenos">1966</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-1967"><a href="#L-1967"><span class="linenos">1967</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-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="bp">self</span><span 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-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">Cache</span><span class="p">,</span>
+</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
+</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
+</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</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-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 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">Partition</span><span class="p">]:</span>
+</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="k">return</span> <span class="kc">None</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">return</span> <span class="bp">self</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="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-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <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">_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">Tuple</span><span class="p">:</span>
+</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1988"><a href="#L-1988"><span class="linenos">1988</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-1989"><a href="#L-1989"><span class="linenos">1989</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-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">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-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="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
+</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a> <span class="c1"># https://prestodb.io/docs/current/sql/values.html</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">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-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">_parse_projections</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-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">_parse_expressions</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">_parse_select</span><span class="p">(</span>
+</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</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-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</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-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">if</span> <span class="n">cte</span><span class="p">:</span>
+</span><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</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-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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</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="c1"># We return early here so that the UNION isn&#39;t attached to the subquery by the</span>
-</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a> <span class="c1"># following call to _parse_set_operations, but instead becomes the parent node</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">_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-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</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-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="n">this</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-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
-</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</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-2016"><a href="#L-2016"><span class="linenos">2016</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-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="p">)</span>
-</span><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</span></a> <span class="k">else</span><span class="p">:</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="kc">None</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="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-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">_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">With</span><span class="p">]:</span>
-</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</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-2025"><a href="#L-2025"><span class="linenos">2025</span></a> <span class="k">return</span> <span class="kc">None</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="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-2028"><a href="#L-2028"><span class="linenos">2028</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-2029"><a href="#L-2029"><span class="linenos">2029</span></a>
-</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</span></a>
-</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <span class="k">break</span>
-</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a> <span class="k">else</span><span class="p">:</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">_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-2038"><a href="#L-2038"><span class="linenos">2038</span></a>
-</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <span class="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-2040"><a href="#L-2040"><span class="linenos">2040</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-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="p">)</span>
-</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a>
-</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</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-2045"><a href="#L-2045"><span class="linenos">2045</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-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;Expected CTE to have alias&quot;</span><span class="p">)</span>
-</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</span></a>
-</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="bp">self</span><span 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-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">expression</span><span class="p">(</span>
-</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="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 class="n">alias</span><span class="o">=</span><span class="n">alias</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><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="k">def</span> <span class="nf">_parse_table_alias</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 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-2055"><a href="#L-2055"><span class="linenos">2055</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]:</span>
-</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</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-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2059"><a href="#L-2059"><span class="linenos">2059</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-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <span class="p">)</span>
-</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a>
-</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</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-2063"><a href="#L-2063"><span class="linenos">2063</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2064"><a href="#L-2064"><span class="linenos">2064</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-2065"><a href="#L-2065"><span class="linenos">2065</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-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</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">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-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</span></a>
-</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
-</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</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-2076"><a href="#L-2076"><span class="linenos">2076</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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-2077"><a href="#L-2077"><span class="linenos">2077</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-2078"><a href="#L-2078"><span class="linenos">2078</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a>
-</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</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="n">this</span><span class="p">,</span>
-</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</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-2084"><a href="#L-2084"><span class="linenos">2084</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-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="p">)</span>
-</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a>
-</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="bp">self</span><span class="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-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</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="bp">self</span><span class="o">.</span><span class="n">MODIFIABLES</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">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</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-2093"><a href="#L-2093"><span class="linenos">2093</span></a> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</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-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 class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</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">QUERY_MODIFIER_PARSERS</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-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_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">token_type</span><span class="p">]</span>
-</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="n">key</span><span class="p">,</span> <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-2007"><a href="#L-2007"><span class="linenos">2007</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-2008"><a href="#L-2008"><span class="linenos">2008</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-2009"><a href="#L-2009"><span class="linenos">2009</span></a> <span class="k">return</span> <span class="n">cte</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">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-2012"><a href="#L-2012"><span class="linenos">2012</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-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</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-2015"><a href="#L-2015"><span class="linenos">2015</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</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">return</span> <span class="n">this</span>
+</span><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</span></a>
+</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="c1"># duckdb supports leading with FROM x</span>
+</span><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">else</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</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-2023"><a href="#L-2023"><span class="linenos">2023</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-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="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-2026"><a href="#L-2026"><span class="linenos">2026</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-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="n">distinct</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">DISTINCT_TOKENS</span><span class="p">)</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="n">kind</span> <span class="o">=</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</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-2031"><a href="#L-2031"><span class="linenos">2031</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-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <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="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</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-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
+</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</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-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
+</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a>
+</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</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-2042"><a href="#L-2042"><span class="linenos">2042</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-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">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-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_projections</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="n">this</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-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
+</span><span id="L-2049"><a href="#L-2049"><span class="linenos">2049</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
+</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">projections</span><span class="p">,</span>
+</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
+</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="p">)</span>
+</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a> <span 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-2056"><a href="#L-2056"><span class="linenos">2056</span></a>
+</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="n">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-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</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-2060"><a href="#L-2060"><span class="linenos">2060</span></a>
+</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</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-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="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</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-2066"><a href="#L-2066"><span class="linenos">2066</span></a>
+</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</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-2069"><a href="#L-2069"><span class="linenos">2069</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">()</span>
+</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</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">FROM</span><span class="p">):</span>
+</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span>
+</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <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">From</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 class="n">skip_from_token</span><span class="o">=</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="p">)</span>
+</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2076"><a href="#L-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_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-2077"><a href="#L-2077"><span class="linenos">2077</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="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-2078"><a href="#L-2078"><span class="linenos">2078</span></a>
+</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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="c1"># We return early here so that the UNION isn&#39;t attached to the subquery by the</span>
+</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="c1"># following call to _parse_set_operations, but instead becomes the parent node</span>
+</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</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-2084"><a href="#L-2084"><span class="linenos">2084</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-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="n">this</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-2086"><a href="#L-2086"><span class="linenos">2086</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
+</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</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-2088"><a href="#L-2088"><span class="linenos">2088</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-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="p">)</span>
+</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="k">elif</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</span></a> <span class="k">else</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="kc">None</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">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-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">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">With</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="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-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="k">return</span> <span class="kc">None</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 class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</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-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
-</span><span id="L-2104"><a href="#L-2104"><span class="linenos">2104</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</span></a> <span class="k">continue</span>
-</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</span></a> <span class="k">break</span>
-</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="k">return</span> <span class="n">this</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">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
-</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</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-2102"><a href="#L-2102"><span class="linenos">2102</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-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 class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="k">while</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="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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="k">break</span>
+</span><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="bp">self</span><span 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-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="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-2114"><a href="#L-2114"><span class="linenos">2114</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-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">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-2118"><a href="#L-2118"><span class="linenos">2118</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-2119"><a href="#L-2119"><span class="linenos">2119</span></a>
-</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2117"><a href="#L-2117"><span class="linenos">2117</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</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-2119"><a href="#L-2119"><span class="linenos">2119</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-2120"><a href="#L-2120"><span class="linenos">2120</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-2121"><a href="#L-2121"><span class="linenos">2121</span></a>
-</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a>
-</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
-</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="k">return</span> <span class="kc">None</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="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-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
-</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a> <span class="bp">self</span><span 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-2131"><a href="#L-2131"><span class="linenos">2131</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="bp">self</span><span 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-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="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-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="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 class="n">alias</span><span class="o">=</span><span class="n">alias</span>
+</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a> <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">def</span> <span class="nf">_parse_table_alias</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="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-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]:</span>
+</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</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-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</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-2133"><a href="#L-2133"><span class="linenos">2133</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-2134"><a href="#L-2134"><span class="linenos">2134</span></a> <span class="p">)</span>
</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</span></a>
-</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
-</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
-</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="k">return</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
-</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="p">)</span>
+</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</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-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2138"><a href="#L-2138"><span class="linenos">2138</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-2139"><a href="#L-2139"><span class="linenos">2139</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-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</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">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-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">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
-</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</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="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-2153"><a href="#L-2153"><span class="linenos">2153</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-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-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="k">if</span> <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-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="L-2158"><a href="#L-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_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-2159"><a href="#L-2159"><span class="linenos">2159</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-2160"><a href="#L-2160"><span class="linenos">2160</span></a> <span class="k">if</span> <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-2161"><a href="#L-2161"><span class="linenos">2161</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-2162"><a href="#L-2162"><span class="linenos">2162</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-2163"><a href="#L-2163"><span class="linenos">2163</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-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_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-2165"><a href="#L-2165"><span class="linenos">2165</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-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2147"><a href="#L-2147"><span class="linenos">2147</span></a>
+</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="k">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
+</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</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-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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-2151"><a href="#L-2151"><span class="linenos">2151</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-2152"><a href="#L-2152"><span class="linenos">2152</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a>
+</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="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-2155"><a href="#L-2155"><span class="linenos">2155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
+</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</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-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="p">)</span>
+</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a>
+</span><span id="L-2161"><a href="#L-2161"><span class="linenos">2161</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</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-2163"><a href="#L-2163"><span class="linenos">2163</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="k">if</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-2165"><a href="#L-2165"><span class="linenos">2165</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</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-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</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-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">if</span> <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-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="k">if</span> <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-2173"><a href="#L-2173"><span class="linenos">2173</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-2174"><a href="#L-2174"><span class="linenos">2174</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-2175"><a href="#L-2175"><span class="linenos">2175</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-2176"><a href="#L-2176"><span class="linenos">2176</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-2177"><a href="#L-2177"><span class="linenos">2177</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-2178"><a href="#L-2178"><span class="linenos">2178</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-2179"><a href="#L-2179"><span class="linenos">2179</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-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a>
-</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a> <span class="k">if</span> <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-2185"><a href="#L-2185"><span class="linenos">2185</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-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="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-2188"><a href="#L-2188"><span class="linenos">2188</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-2189"><a href="#L-2189"><span class="linenos">2189</span></a>
-</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</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-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">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-2194"><a href="#L-2194"><span class="linenos">2194</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-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</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-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
-</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</span></a>
-</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</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">QUERY_MODIFIER_PARSERS</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-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_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">token_type</span><span class="p">]</span>
+</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="n">key</span><span class="p">,</span> <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-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="k">if</span> <span class="n">expression</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">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-2177"><a href="#L-2177"><span class="linenos">2177</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
+</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
+</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a> <span class="k">continue</span>
+</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="k">break</span>
+</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a>
+</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="L-2186"><a href="#L-2186"><span class="linenos">2186</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
+</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-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 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-2192"><a href="#L-2192"><span class="linenos">2192</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-2193"><a href="#L-2193"><span class="linenos">2193</span></a>
+</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">return</span> <span class="kc">None</span>
+</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a>
+</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
+</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a>
-</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a> <span class="k">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-2203"><a href="#L-2203"><span class="linenos">2203</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-2204"><a href="#L-2204"><span class="linenos">2204</span></a>
-</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</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="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</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-2211"><a href="#L-2211"><span class="linenos">2211</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-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</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-2214"><a href="#L-2214"><span class="linenos">2214</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-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <span class="p">)</span>
-</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="p">)</span>
-</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="k">if</span> <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-2218"><a href="#L-2218"><span class="linenos">2218</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2219"><a href="#L-2219"><span class="linenos">2219</span></a> <span class="p">)</span>
-</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a>
-</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a>
-</span><span id="L-2223"><a href="#L-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="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</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-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="L-2233"><a href="#L-2233"><span class="linenos">2233</span></a> <span class="p">)</span>
-</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a>
-</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
-</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</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-2237"><a href="#L-2237"><span class="linenos">2237</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-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">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="L-2240"><a href="#L-2240"><span class="linenos">2240</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-2241"><a href="#L-2241"><span class="linenos">2241</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</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-2243"><a href="#L-2243"><span class="linenos">2243</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-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_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 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-2246"><a href="#L-2246"><span class="linenos">2246</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-2247"><a href="#L-2247"><span class="linenos">2247</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a>
-</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</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-2251"><a href="#L-2251"><span class="linenos">2251</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</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-2254"><a href="#L-2254"><span class="linenos">2254</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-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <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">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-2258"><a href="#L-2258"><span class="linenos">2258</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-2259"><a href="#L-2259"><span class="linenos">2259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</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-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="p">)</span>
-</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a>
-</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</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-2265"><a href="#L-2265"><span class="linenos">2265</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-2266"><a href="#L-2266"><span class="linenos">2266</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
-</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a> <span class="p">)</span>
-</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</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">Subquery</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <span class="c1"># Ensures parity between the Subquery&#39;s and the Lateral&#39;s &quot;alias&quot; args</span>
-</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</span></a> <span class="n">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-2274"><a href="#L-2274"><span class="linenos">2274</span></a>
-</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</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">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</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-2280"><a href="#L-2280"><span class="linenos">2280</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</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-2283"><a href="#L-2283"><span class="linenos">2283</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-2284"><a href="#L-2284"><span class="linenos">2284</span></a> <span class="p">)</span>
-</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a>
-</span><span id="L-2286"><a href="#L-2286"><span class="linenos">2286</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
-</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a>
-</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="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-2293"><a href="#L-2293"><span class="linenos">2293</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
-</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</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-2295"><a href="#L-2295"><span class="linenos">2295</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-2202"><a href="#L-2202"><span class="linenos">2202</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-2203"><a href="#L-2203"><span class="linenos">2203</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
+</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="bp">self</span><span 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-2205"><a href="#L-2205"><span class="linenos">2205</span></a>
+</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</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-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">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
+</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
+</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a>
+</span><span id="L-2216"><a href="#L-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="L-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
+</span><span id="L-2218"><a href="#L-2218"><span class="linenos">2218</span></a> <span class="p">)</span>
+</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">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
+</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><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="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-2227"><a href="#L-2227"><span class="linenos">2227</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-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a>
+</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="k">if</span> <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-2231"><a href="#L-2231"><span class="linenos">2231</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</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-2233"><a href="#L-2233"><span class="linenos">2233</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-2234"><a href="#L-2234"><span class="linenos">2234</span></a> <span class="k">if</span> <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-2235"><a href="#L-2235"><span class="linenos">2235</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-2236"><a href="#L-2236"><span class="linenos">2236</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-2237"><a href="#L-2237"><span class="linenos">2237</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-2238"><a href="#L-2238"><span class="linenos">2238</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-2239"><a href="#L-2239"><span class="linenos">2239</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-2240"><a href="#L-2240"><span class="linenos">2240</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2241"><a href="#L-2241"><span class="linenos">2241</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</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="k">if</span> <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-2245"><a href="#L-2245"><span class="linenos">2245</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <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-2247"><a href="#L-2247"><span class="linenos">2247</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-2248"><a href="#L-2248"><span class="linenos">2248</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-2249"><a href="#L-2249"><span class="linenos">2249</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-2250"><a href="#L-2250"><span class="linenos">2250</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-2251"><a href="#L-2251"><span class="linenos">2251</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-2252"><a href="#L-2252"><span class="linenos">2252</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-2253"><a href="#L-2253"><span class="linenos">2253</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-2254"><a href="#L-2254"><span class="linenos">2254</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a>
+</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="k">if</span> <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-2259"><a href="#L-2259"><span class="linenos">2259</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-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="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-2262"><a href="#L-2262"><span class="linenos">2262</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-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="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</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-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">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-2268"><a href="#L-2268"><span class="linenos">2268</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-2269"><a href="#L-2269"><span class="linenos">2269</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</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-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a>
+</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</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-2274"><a href="#L-2274"><span class="linenos">2274</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</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">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-2277"><a href="#L-2277"><span class="linenos">2277</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-2278"><a href="#L-2278"><span class="linenos">2278</span></a>
+</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</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="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</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-2285"><a href="#L-2285"><span class="linenos">2285</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-2286"><a href="#L-2286"><span class="linenos">2286</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</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="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-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_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-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="p">)</span>
+</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="p">)</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_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
+</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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="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-2298"><a href="#L-2298"><span class="linenos">2298</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-2299"><a href="#L-2299"><span class="linenos">2299</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</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="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-2304"><a href="#L-2304"><span class="linenos">2304</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-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="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-2307"><a href="#L-2307"><span class="linenos">2307</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="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-2298"><a href="#L-2298"><span class="linenos">2298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</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-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a> <span class="p">)</span>
</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a>
-</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a> <span class="k">if</span> <span class="n">outer_apply</span><span class="p">:</span>
-</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</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-2311"><a href="#L-2311"><span class="linenos">2311</span></a>
-</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
-</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a>
-</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</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-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</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-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</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-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">if</span> <span class="bp">self</span><span 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-2324"><a href="#L-2324"><span class="linenos">2324</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-2325"><a href="#L-2325"><span class="linenos">2325</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-2326"><a href="#L-2326"><span class="linenos">2326</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-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
-</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</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-2329"><a href="#L-2329"><span class="linenos">2329</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">()</span>
+</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
+</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</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-2311"><a href="#L-2311"><span class="linenos">2311</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-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">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-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2315"><a href="#L-2315"><span class="linenos">2315</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</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-2317"><a href="#L-2317"><span class="linenos">2317</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-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2319"><a href="#L-2319"><span class="linenos">2319</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-2320"><a href="#L-2320"><span class="linenos">2320</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-2321"><a href="#L-2321"><span class="linenos">2321</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2322"><a href="#L-2322"><span class="linenos">2322</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a>
+</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</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-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</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-2328"><a href="#L-2328"><span class="linenos">2328</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-2329"><a href="#L-2329"><span class="linenos">2329</span></a> <span class="p">)</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="k">if</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</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-2333"><a href="#L-2333"><span class="linenos">2333</span></a> <span class="k">elif</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</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-2335"><a href="#L-2335"><span class="linenos">2335</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="kc">None</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">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</span></a>
-</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">joins</span><span class="p">)</span>
-</span><span id="L-2340"><a href="#L-2340"><span class="linenos">2340</span></a>
-</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="k">return</span> <span class="bp">self</span><span 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><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="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
-</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
-</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a>
-</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="bp">self</span><span 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-2353"><a href="#L-2353"><span class="linenos">2353</span></a> <span class="bp">self</span><span 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-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-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">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-2357"><a href="#L-2357"><span class="linenos">2357</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-2358"><a href="#L-2358"><span class="linenos">2358</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-2331"><a href="#L-2331"><span class="linenos">2331</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-2332"><a href="#L-2332"><span class="linenos">2332</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-2333"><a href="#L-2333"><span class="linenos">2333</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</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-2335"><a href="#L-2335"><span class="linenos">2335</span></a> <span class="p">)</span>
+</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a>
+</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</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-2339"><a href="#L-2339"><span class="linenos">2339</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-2340"><a href="#L-2340"><span class="linenos">2340</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
+</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a> <span class="p">)</span>
+</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</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">Subquery</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a> <span class="c1"># Ensures parity between the Subquery&#39;s and the Lateral&#39;s &quot;alias&quot; args</span>
+</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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">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-2348"><a href="#L-2348"><span class="linenos">2348</span></a>
+</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</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">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <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="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-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</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-2357"><a href="#L-2357"><span class="linenos">2357</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-2358"><a href="#L-2358"><span class="linenos">2358</span></a> <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="ow">not</span> <span class="bp">self</span><span 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-2361"><a href="#L-2361"><span class="linenos">2361</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a>
-</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</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-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="L-2361"><a href="#L-2361"><span class="linenos">2361</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</span></a>
-</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="n">using</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a>
-</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2369"><a href="#L-2369"><span class="linenos">2369</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_ordered</span><span class="p">)</span>
-</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2372"><a href="#L-2372"><span class="linenos">2372</span></a>
-</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="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-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="L-2380"><a href="#L-2380"><span class="linenos">2380</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
-</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2387"><a href="#L-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_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-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</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><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="p">),</span>
-</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a> <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 class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
-</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</span></a>
-</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
-</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2405"><a href="#L-2405"><span class="linenos">2405</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-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">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
-</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a>
-</span><span id="L-2410"><a href="#L-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a>
-</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</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-2416"><a href="#L-2416"><span class="linenos">2416</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-2417"><a href="#L-2417"><span class="linenos">2417</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <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="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">Table</span><span class="p">:</span>
-</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><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">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-2426"><a href="#L-2426"><span class="linenos">2426</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2429"><a href="#L-2429"><span class="linenos">2429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a> <span class="p">)</span>
-</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><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">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">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-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="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-2440"><a href="#L-2440"><span class="linenos">2440</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-2441"><a href="#L-2441"><span class="linenos">2441</span></a> <span class="p">)</span>
+</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</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-2367"><a href="#L-2367"><span class="linenos">2367</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
+</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</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-2369"><a href="#L-2369"><span class="linenos">2369</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-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">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-2372"><a href="#L-2372"><span class="linenos">2372</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-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</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="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-2378"><a href="#L-2378"><span class="linenos">2378</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-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">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-2381"><a href="#L-2381"><span class="linenos">2381</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="n">outer_apply</span><span class="p">:</span>
+</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</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-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="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
+</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</span></a>
+</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</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-2392"><a href="#L-2392"><span class="linenos">2392</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</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-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</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-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="k">if</span> <span class="bp">self</span><span 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-2398"><a href="#L-2398"><span class="linenos">2398</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-2399"><a href="#L-2399"><span class="linenos">2399</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-2400"><a href="#L-2400"><span class="linenos">2400</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-2401"><a href="#L-2401"><span class="linenos">2401</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
+</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</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-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</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="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</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-2407"><a href="#L-2407"><span class="linenos">2407</span></a> <span class="k">elif</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</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-2409"><a href="#L-2409"><span class="linenos">2409</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2410"><a href="#L-2410"><span class="linenos">2410</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</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-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="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">joins</span><span class="p">)</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="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
+</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a>
+</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
+</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
+</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-2428"><a href="#L-2428"><span class="linenos">2428</span></a> <span class="bp">self</span><span 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-2429"><a href="#L-2429"><span class="linenos">2429</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</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-2432"><a href="#L-2432"><span class="linenos">2432</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-2433"><a href="#L-2433"><span class="linenos">2433</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-2434"><a href="#L-2434"><span class="linenos">2434</span></a>
+</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2436"><a href="#L-2436"><span class="linenos">2436</span></a> <span class="k">return</span> <span class="kc">None</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">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-2439"><a href="#L-2439"><span class="linenos">2439</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a>
+</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a> <span class="n">using</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a>
-</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="L-2444"><a href="#L-2444"><span class="linenos">2444</span></a> <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">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</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">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-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a>
-</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a> <span class="n">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-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a>
-</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</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-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a> <span class="k">return</span> <span class="n">values</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">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-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</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-2465"><a href="#L-2465"><span class="linenos">2465</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-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="k">return</span> <span class="n">subquery</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">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <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="o">=</span> <span class="n">bracket</span> <span class="ow">or</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-2471"><a href="#L-2471"><span class="linenos">2471</span></a>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</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-2474"><a href="#L-2474"><span class="linenos">2474</span></a>
-</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</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-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2444"><a href="#L-2444"><span class="linenos">2444</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_ordered</span><span class="p">)</span>
+</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="n">columns</span> <span class="o">=</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="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-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
+</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</span></a> <span class="p">)</span>
+</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a>
+</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-2461"><a href="#L-2461"><span class="linenos">2461</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</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-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
+</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</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-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="p">),</span>
+</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="p">)</span>
+</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="p">)</span>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</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-2473"><a href="#L-2473"><span class="linenos">2473</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
+</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a>
-</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="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-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</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-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
+</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-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">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-2483"><a href="#L-2483"><span class="linenos">2483</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-2482"><a href="#L-2482"><span class="linenos">2482</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
+</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
</span><span id="L-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="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
+</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a>
-</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">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-2488"><a href="#L-2488"><span class="linenos">2488</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-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">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</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-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
-</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a>
-</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</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-2497"><a href="#L-2497"><span class="linenos">2497</span></a>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</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-2491"><a href="#L-2491"><span class="linenos">2491</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-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <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_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">Table</span><span class="p">:</span>
+</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><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_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
-</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="k">return</span> <span class="kc">None</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="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-2505"><a href="#L-2505"><span class="linenos">2505</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-2506"><a href="#L-2506"><span class="linenos">2506</span></a>
-</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-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">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-2510"><a href="#L-2510"><span class="linenos">2510</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-2511"><a href="#L-2511"><span class="linenos">2511</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-2512"><a href="#L-2512"><span class="linenos">2512</span></a>
-</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="n">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-2514"><a href="#L-2514"><span class="linenos">2514</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-2515"><a href="#L-2515"><span class="linenos">2515</span></a>
-</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</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-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="bp">self</span><span 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-2519"><a href="#L-2519"><span class="linenos">2519</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">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a>
-</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="k">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="p">)</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">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</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-2527"><a href="#L-2527"><span class="linenos">2527</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-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</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-2531"><a href="#L-2531"><span class="linenos">2531</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-2500"><a href="#L-2500"><span class="linenos">2500</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-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="p">)</span>
+</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a>
+</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</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-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="p">)</span>
+</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a>
+</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="k">def</span> <span class="nf">_parse_table</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="p">,</span>
+</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</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-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="k">return</span> <span class="n">lateral</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="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-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="k">return</span> <span class="n">unnest</span>
</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a>
-</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</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-2535"><a href="#L-2535"><span class="linenos">2535</span></a>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="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-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="p">)</span>
-</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
-</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2542"><a href="#L-2542"><span class="linenos">2542</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-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="k">return</span> <span class="kc">None</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="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</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-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="p">)</span>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</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-2558"><a href="#L-2558"><span class="linenos">2558</span></a>
-</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="bp">self</span><span 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-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="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-2562"><a href="#L-2562"><span class="linenos">2562</span></a>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
-</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</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-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</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-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="bp">self</span><span 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-2568"><a href="#L-2568"><span class="linenos">2568</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-2569"><a href="#L-2569"><span class="linenos">2569</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-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</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-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</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="bp">self</span><span 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-2533"><a href="#L-2533"><span class="linenos">2533</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-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="k">return</span> <span class="n">values</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="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-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</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-2540"><a href="#L-2540"><span class="linenos">2540</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-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="n">subquery</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="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <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="o">=</span> <span class="n">bracket</span> <span class="ow">or</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-2546"><a href="#L-2546"><span class="linenos">2546</span></a>
+</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</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-2549"><a href="#L-2549"><span class="linenos">2549</span></a>
+</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
+</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a>
+</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a>
+</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</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-2556"><a href="#L-2556"><span class="linenos">2556</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-2557"><a href="#L-2557"><span class="linenos">2557</span></a>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</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-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</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-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">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
+</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a>
+</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="k">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-2565"><a href="#L-2565"><span class="linenos">2565</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-2566"><a href="#L-2566"><span class="linenos">2566</span></a>
+</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="k">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-2568"><a href="#L-2568"><span class="linenos">2568</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-2569"><a href="#L-2569"><span class="linenos">2569</span></a>
+</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</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-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</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">joins</span><span class="p">:</span>
+</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</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-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">if</span> <span class="bp">self</span><span 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-2579"><a href="#L-2579"><span class="linenos">2579</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-2580"><a href="#L-2580"><span class="linenos">2580</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-2581"><a href="#L-2581"><span class="linenos">2581</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-2582"><a href="#L-2582"><span class="linenos">2582</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-2583"><a href="#L-2583"><span class="linenos">2583</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</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-2589"><a href="#L-2589"><span class="linenos">2589</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-2590"><a href="#L-2590"><span class="linenos">2590</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-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="p">)</span>
-</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a>
-</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
-</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-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">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-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="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
-</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</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-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a>
-</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</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-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
-</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
-</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="p">)</span>
-</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
-</span><span id="L-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">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
-</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="p">)</span>
+</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a>
+</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="k">def</span> <span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
+</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
+</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a>
+</span><span id="L-2588"><a href="#L-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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</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-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="p">)</span>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</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-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="p">)</span>
+</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
+</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</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="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
+</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a>
+</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
+</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a>
+</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="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-2616"><a href="#L-2616"><span class="linenos">2616</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-2617"><a href="#L-2617"><span class="linenos">2617</span></a>
+</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-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_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
-</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</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-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="bp">self</span><span 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-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</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-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="k">return</span> <span class="kc">None</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="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a>
-</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2634"><a href="#L-2634"><span class="linenos">2634</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-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="k">return</span> <span class="kc">None</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">unpivot</span><span class="p">:</span>
-</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</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-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</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-2641"><a href="#L-2641"><span class="linenos">2641</span></a>
-</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="bp">self</span><span class="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-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="ow">not</span> <span class="bp">self</span><span 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-2646"><a href="#L-2646"><span class="linenos">2646</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-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="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-2649"><a href="#L-2649"><span class="linenos">2649</span></a>
-</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2651"><a href="#L-2651"><span class="linenos">2651</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-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="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 class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a>
-</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</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-2620"><a href="#L-2620"><span class="linenos">2620</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-2621"><a href="#L-2621"><span class="linenos">2621</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-2622"><a href="#L-2622"><span class="linenos">2622</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-2623"><a href="#L-2623"><span class="linenos">2623</span></a>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">alias</span><span class="o">.</span><span class="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-2625"><a href="#L-2625"><span class="linenos">2625</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-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="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</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-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="bp">self</span><span 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-2630"><a href="#L-2630"><span class="linenos">2630</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">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</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">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</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-2638"><a href="#L-2638"><span class="linenos">2638</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-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</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-2642"><a href="#L-2642"><span class="linenos">2642</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-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="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</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-2646"><a href="#L-2646"><span class="linenos">2646</span></a>
+</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="p">)</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a>
+</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
+</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2653"><a href="#L-2653"><span class="linenos">2653</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-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="p">):</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a>
-</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="n">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-2658"><a href="#L-2658"><span class="linenos">2658</span></a>
-</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="k">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-2660"><a href="#L-2660"><span class="linenos">2660</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-2661"><a href="#L-2661"><span class="linenos">2661</span></a>
-</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</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-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="n">bucket_denominator</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="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">seed</span> <span class="o">=</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">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-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</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-2669"><a href="#L-2669"><span class="linenos">2669</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-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</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-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 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-2669"><a href="#L-2669"><span class="linenos">2669</span></a>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="bp">self</span><span 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-2671"><a href="#L-2671"><span class="linenos">2671</span></a>
+</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</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-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">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
-</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a>
-</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="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-2677"><a href="#L-2677"><span class="linenos">2677</span></a>
-</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">return</span> <span class="n">pivot</span>
-</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a>
-</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a>
-</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
-</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</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-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</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-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</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-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="bp">self</span><span 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-2679"><a href="#L-2679"><span class="linenos">2679</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-2680"><a href="#L-2680"><span class="linenos">2680</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-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-2682"><a href="#L-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">ROWS</span><span class="p">):</span>
+</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a>
-</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</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-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <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">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
-</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</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-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="k">return</span> <span class="kc">None</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="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-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">if</span> <span class="bp">self</span><span 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-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a>
-</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</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-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="k">if</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">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-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 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-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</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-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="bp">self</span><span 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-2688"><a href="#L-2688"><span class="linenos">2688</span></a>
+</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2690"><a href="#L-2690"><span class="linenos">2690</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-2691"><a href="#L-2691"><span class="linenos">2691</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-2692"><a href="#L-2692"><span class="linenos">2692</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-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-2694"><a href="#L-2694"><span class="linenos">2694</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-2695"><a href="#L-2695"><span class="linenos">2695</span></a>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</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-2700"><a href="#L-2700"><span class="linenos">2700</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-2701"><a href="#L-2701"><span class="linenos">2701</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-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="p">)</span>
</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a>
-</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</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="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-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-2715"><a href="#L-2715"><span class="linenos">2715</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-2716"><a href="#L-2716"><span class="linenos">2716</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-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">if</span> <span class="bp">self</span><span 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-2719"><a href="#L-2719"><span class="linenos">2719</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-2720"><a href="#L-2720"><span class="linenos">2720</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-2721"><a href="#L-2721"><span class="linenos">2721</span></a>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
-</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
-</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
-</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="k">break</span>
-</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a>
-</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a>
+</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="k">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
+</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a>
+</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</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-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-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="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-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
+</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
+</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="p">)</span>
+</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="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-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="p">)</span>
</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a>
-</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="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-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
+</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</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-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a>
-</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="k">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-2736"><a href="#L-2736"><span class="linenos">2736</span></a>
-</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</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-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2739"><a href="#L-2739"><span class="linenos">2739</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-2740"><a href="#L-2740"><span class="linenos">2740</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-2741"><a href="#L-2741"><span class="linenos">2741</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2742"><a href="#L-2742"><span class="linenos">2742</span></a>
-</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">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-2744"><a href="#L-2744"><span class="linenos">2744</span></a>
-</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
-</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</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-2747"><a href="#L-2747"><span class="linenos">2747</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-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_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
-</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</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</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-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</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="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
+</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</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">return</span> <span class="kc">None</span>
+</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a>
+</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a>
+</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2752"><a href="#L-2752"><span class="linenos">2752</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-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a>
-</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</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-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</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="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-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="k">return</span> <span class="n">this</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">return</span> <span class="bp">self</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">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-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="p">)</span>
-</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a>
-</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
-</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="k">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-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">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">Ordered</span><span class="p">:</span>
-</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</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-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="bp">self</span><span 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-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="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-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
-</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
-</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</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-2778"><a href="#L-2778"><span class="linenos">2778</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-2779"><a href="#L-2779"><span class="linenos">2779</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-2780"><a href="#L-2780"><span class="linenos">2780</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-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="k">if</span> <span class="p">(</span>
-</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="ow">and</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 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-2786"><a href="#L-2786"><span class="linenos">2786</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-2787"><a href="#L-2787"><span class="linenos">2787</span></a> <span class="p">)</span>
-</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</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-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="p">):</span>
-</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</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">return</span> <span class="bp">self</span><span 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-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">_parse_limit</span><span class="p">(</span>
-</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</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-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2798"><a href="#L-2798"><span class="linenos">2798</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-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</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-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <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><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a>
-</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</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="k">else</span><span class="p">:</span>
-</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</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-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">if</span> <span class="bp">self</span><span 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-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</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-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</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="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-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
-</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="p">)</span>
-</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a>
-</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
-</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2821"><a href="#L-2821"><span class="linenos">2821</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-2822"><a href="#L-2822"><span class="linenos">2822</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-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</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-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</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-2759"><a href="#L-2759"><span class="linenos">2759</span></a>
+</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</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-2761"><a href="#L-2761"><span class="linenos">2761</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-2762"><a href="#L-2762"><span class="linenos">2762</span></a>
+</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2764"><a href="#L-2764"><span class="linenos">2764</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-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">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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2769"><a href="#L-2769"><span class="linenos">2769</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-2770"><a href="#L-2770"><span class="linenos">2770</span></a>
+</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</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 class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a>
+</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
+</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
+</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
+</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="p">)</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">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-2784"><a href="#L-2784"><span class="linenos">2784</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-2785"><a href="#L-2785"><span class="linenos">2785</span></a>
+</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</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-2788"><a href="#L-2788"><span class="linenos">2788</span></a>
+</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="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-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</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-2793"><a href="#L-2793"><span class="linenos">2793</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-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="L-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="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+</span><span id="L-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="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-2801"><a href="#L-2801"><span class="linenos">2801</span></a>
+</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
+</span><span id="L-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">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
+</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</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-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="k">return</span> <span class="kc">None</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 class="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-2812"><a href="#L-2812"><span class="linenos">2812</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-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="p">)</span>
+</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a>
+</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
+</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</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-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="k">return</span> <span class="kc">None</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="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-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">if</span> <span class="bp">self</span><span 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-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-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="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-2825"><a href="#L-2825"><span class="linenos">2825</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-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="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-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="k">while</span> <span class="kc">True</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="bp">self</span><span class="o">.</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-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</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-2828"><a href="#L-2828"><span class="linenos">2828</span></a>
-</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</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-2831"><a href="#L-2831"><span class="linenos">2831</span></a>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</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-2833"><a href="#L-2833"><span class="linenos">2833</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-2834"><a href="#L-2834"><span class="linenos">2834</span></a>
-</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</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-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="p">)</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a>
-</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="k">return</span> <span class="n">this</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">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-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="k">return</span> <span class="n">this</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">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</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-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2829"><a href="#L-2829"><span class="linenos">2829</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-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</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-2832"><a href="#L-2832"><span class="linenos">2832</span></a>
+</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="n">totals</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><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</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-2838"><a href="#L-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</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-2839"><a href="#L-2839"><span class="linenos">2839</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-2840"><a href="#L-2840"><span class="linenos">2840</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-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="bp">self</span><span 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-2843"><a href="#L-2843"><span class="linenos">2843</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-2844"><a href="#L-2844"><span class="linenos">2844</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-2845"><a href="#L-2845"><span class="linenos">2845</span></a>
+</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
+</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a>
+</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
+</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">break</span>
</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
-</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="k">if</span> <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-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2858"><a href="#L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
-</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
-</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="p">):</span>
-</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="k">break</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="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="k">def</span> <span class="nf">_parse_grouping_sets</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="k">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-2860"><a href="#L-2860"><span class="linenos">2860</span></a>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</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-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2863"><a href="#L-2863"><span class="linenos">2863</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-2864"><a href="#L-2864"><span class="linenos">2864</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-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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-2868"><a href="#L-2868"><span class="linenos">2868</span></a>
-</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
-</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
-</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
-</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</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="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
-</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="p">)</span>
-</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a>
-</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="k">return</span> <span class="n">locks</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="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-2884"><a href="#L-2884"><span class="linenos">2884</span></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-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
+</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</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-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2873"><a href="#L-2873"><span class="linenos">2873</span></a>
+</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
+</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
+</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
+</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a>
-</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</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-2888"><a href="#L-2888"><span class="linenos">2888</span></a>
-</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="k">if</span> <span class="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-2890"><a href="#L-2890"><span class="linenos">2890</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-2891"><a href="#L-2891"><span class="linenos">2891</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-2892"><a href="#L-2892"><span class="linenos">2892</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-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</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-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">return</span> <span class="bp">self</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">expression</span><span class="p">,</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="n">this</span><span class="p">,</span>
-</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="n">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-2900"><a href="#L-2900"><span class="linenos">2900</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-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="p">)</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a>
-</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="k">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-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_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-2905"><a href="#L-2905"><span class="linenos">2905</span></a>
-</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</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-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2908"><a href="#L-2908"><span class="linenos">2908</span></a>
-</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="k">def</span> <span class="nf">_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-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">_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-2911"><a href="#L-2911"><span class="linenos">2911</span></a>
-</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="k">def</span> <span class="nf">_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-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2914"><a href="#L-2914"><span class="linenos">2914</span></a>
-</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="k">def</span> <span class="nf">_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-2916"><a href="#L-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">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</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-2918"><a href="#L-2918"><span class="linenos">2918</span></a>
-</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
-</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</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-2921"><a href="#L-2921"><span class="linenos">2921</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-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="k">return</span> <span class="n">this</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="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</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-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2927"><a href="#L-2927"><span class="linenos">2927</span></a>
-</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
+</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <span class="p">)</span>
+</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
+</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
+</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</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-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</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-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a>
+</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</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-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="p">)</span>
+</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a>
+</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
+</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2909"><a href="#L-2909"><span class="linenos">2909</span></a>
+</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="k">def</span> <span class="nf">_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">Ordered</span><span class="p">:</span>
+</span><span id="L-2911"><a href="#L-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_conjunction</span><span class="p">()</span>
+</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="bp">self</span><span 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-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 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-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
+</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</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-2918"><a href="#L-2918"><span class="linenos">2918</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-2919"><a href="#L-2919"><span class="linenos">2919</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-2920"><a href="#L-2920"><span class="linenos">2920</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-2921"><a href="#L-2921"><span class="linenos">2921</span></a>
+</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="ow">and</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 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-2926"><a href="#L-2926"><span class="linenos">2926</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-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="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-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="p">):</span>
+</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2933"><a href="#L-2933"><span class="linenos">2933</span></a>
-</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</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">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-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="bp">self</span><span 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-2938"><a href="#L-2938"><span class="linenos">2938</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-2939"><a href="#L-2939"><span class="linenos">2939</span></a>
-</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="k">def</span> <span class="nf">_parse_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-2943"><a href="#L-2943"><span class="linenos">2943</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-2944"><a href="#L-2944"><span class="linenos">2944</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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
-</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</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-2948"><a href="#L-2948"><span class="linenos">2948</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2949"><a href="#L-2949"><span class="linenos">2949</span></a>
-</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a> <span class="n">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-2951"><a href="#L-2951"><span class="linenos">2951</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-2952"><a href="#L-2952"><span class="linenos">2952</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-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a>
-</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</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-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2938"><a href="#L-2938"><span class="linenos">2938</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-2939"><a href="#L-2939"><span class="linenos">2939</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</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-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <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><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="n">limit_paren</span><span class="p">:</span>
+</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</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-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</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-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">if</span> <span class="bp">self</span><span 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-2949"><a href="#L-2949"><span class="linenos">2949</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</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-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</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 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-2955"><a href="#L-2955"><span class="linenos">2955</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
+</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="p">)</span>
</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a>
-</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="k">if</span> <span class="n">unnest</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">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-2962"><a href="#L-2962"><span class="linenos">2962</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-2963"><a href="#L-2963"><span class="linenos">2963</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
-</span><span id="L-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">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-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="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-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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">return</span> <span class="n">this</span>
-</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a>
-</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="k">def</span> <span class="nf">_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">Between</span><span class="p">:</span>
-</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</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-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="bp">self</span><span 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-2979"><a href="#L-2979"><span class="linenos">2979</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-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-2981"><a href="#L-2981"><span class="linenos">2981</span></a>
-</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="k">def</span> <span class="nf">_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-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 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">Interval</span><span class="p">]:</span>
-</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span>
-</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a>
-</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</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-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="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-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="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
-</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</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-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</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-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="k">return</span> <span class="n">limit_exp</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 class="k">if</span> <span class="bp">self</span><span 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-2961"><a href="#L-2961"><span class="linenos">2961</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-2962"><a href="#L-2962"><span class="linenos">2962</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-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="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-2965"><a href="#L-2965"><span class="linenos">2965</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-2966"><a href="#L-2966"><span class="linenos">2966</span></a>
+</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="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-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="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</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-2971"><a href="#L-2971"><span class="linenos">2971</span></a>
+</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</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-2973"><a href="#L-2973"><span class="linenos">2973</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-2974"><a href="#L-2974"><span class="linenos">2974</span></a>
+</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><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</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-2981"><a href="#L-2981"><span class="linenos">2981</span></a> <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">return</span> <span class="n">this</span>
+</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a>
+</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a> <span class="k">def</span> <span class="nf">_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-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a>
+</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</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-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2992"><a href="#L-2992"><span class="linenos">2992</span></a>
+</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
+</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
+</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
+</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="p">):</span>
+</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="k">break</span>
</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a>
-</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="c1"># this is not actually a unit, it&#39;s something else</span>
-</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a>
-</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3015"><a href="#L-3015"><span class="linenos">3015</span></a>
-</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="k">def</span> <span class="nf">_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-3017"><a href="#L-3017"><span class="linenos">3017</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-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="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</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-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="n">this</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-3022"><a href="#L-3022"><span class="linenos">3022</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-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</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-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="p">)</span>
-</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
-</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
-</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="n">this</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-3030"><a href="#L-3030"><span class="linenos">3030</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-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="p">)</span>
-</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</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-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="n">this</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-3034"><a href="#L-3034"><span class="linenos">3034</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-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="p">)</span>
-</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="k">break</span>
-</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a>
-</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a>
-</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="k">def</span> <span class="nf">_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-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
+</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
+</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a>
+</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
+</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="p">)</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">return</span> <span class="n">locks</span>
+</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a>
+</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="k">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-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">_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-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a>
+</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</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-3028"><a href="#L-3028"><span class="linenos">3028</span></a>
+</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="k">if</span> <span class="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-3030"><a href="#L-3030"><span class="linenos">3030</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-3031"><a href="#L-3031"><span class="linenos">3031</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-3032"><a href="#L-3032"><span class="linenos">3032</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-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</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-3035"><a href="#L-3035"><span class="linenos">3035</span></a>
+</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</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-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="n">by_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">),</span>
+</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</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-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 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-3045"><a href="#L-3045"><span class="linenos">3045</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-3044"><a href="#L-3044"><span class="linenos">3044</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-3045"><a href="#L-3045"><span class="linenos">3045</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-3046"><a href="#L-3046"><span class="linenos">3046</span></a>
-</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</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-3048"><a href="#L-3048"><span class="linenos">3048</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-3049"><a href="#L-3049"><span class="linenos">3049</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-3050"><a href="#L-3050"><span class="linenos">3050</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-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">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-3053"><a href="#L-3053"><span class="linenos">3053</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-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">return</span> <span class="n">interval</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="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-3058"><a href="#L-3058"><span class="linenos">3058</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-3059"><a href="#L-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">_parse_column</span><span class="p">()</span>
-</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">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</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-3063"><a href="#L-3063"><span class="linenos">3063</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-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</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-3066"><a href="#L-3066"><span class="linenos">3066</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</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-3069"><a href="#L-3069"><span class="linenos">3069</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-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
-</span><span id="L-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="k">return</span> <span class="n">this</span>
-</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a>
-</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">]:</span>
-</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</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-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a>
-</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="p">)</span>
+</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</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-3048"><a href="#L-3048"><span class="linenos">3048</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-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">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-3051"><a href="#L-3051"><span class="linenos">3051</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-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">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-3054"><a href="#L-3054"><span class="linenos">3054</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-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">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-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="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-3059"><a href="#L-3059"><span class="linenos">3059</span></a>
+</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="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-3061"><a href="#L-3061"><span class="linenos">3061</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-3062"><a href="#L-3062"><span class="linenos">3062</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-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="k">return</span> <span class="n">this</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">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</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-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3068"><a href="#L-3068"><span class="linenos">3068</span></a>
+</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3072"><a href="#L-3072"><span class="linenos">3072</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3073"><a href="#L-3073"><span class="linenos">3073</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">if</span> <span class="n">negate</span><span class="p">:</span>
+</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="bp">self</span><span 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-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">if</span> <span class="bp">self</span><span 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-3079"><a href="#L-3079"><span class="linenos">3079</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-3080"><a href="#L-3080"><span class="linenos">3080</span></a>
+</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="k">return</span> <span class="n">this</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">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a>
-</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</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-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">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-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="k">return</span> <span class="kc">None</span>
-</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="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-3094"><a href="#L-3094"><span class="linenos">3094</span></a>
-</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="k">if</span> <span class="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-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3097"><a href="#L-3097"><span class="linenos">3097</span></a>
-</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">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-3099"><a href="#L-3099"><span class="linenos">3099</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-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a>
-</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
-</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</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-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a> <span class="p">)</span>
-</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="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 class="k">else</span><span class="p">:</span>
-</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
+</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</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-3084"><a href="#L-3084"><span class="linenos">3084</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-3085"><a href="#L-3085"><span class="linenos">3085</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
+</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</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-3089"><a href="#L-3089"><span class="linenos">3089</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">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-3090"><a href="#L-3090"><span class="linenos">3090</span></a>
+</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="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-3092"><a href="#L-3092"><span class="linenos">3092</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-3093"><a href="#L-3093"><span class="linenos">3093</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-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="k">return</span> <span class="kc">None</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 class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3098"><a href="#L-3098"><span class="linenos">3098</span></a>
+</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a>
+</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</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-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">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-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="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-3112"><a href="#L-3112"><span class="linenos">3112</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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">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-3116"><a href="#L-3116"><span class="linenos">3116</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-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a>
-</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</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="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-3122"><a href="#L-3122"><span class="linenos">3122</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-3123"><a href="#L-3123"><span class="linenos">3123</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-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><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="n">expressions</span><span class="o">=</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 class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="p">)</span>
-</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="p">],</span>
-</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <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="n">this</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_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">Between</span><span class="p">:</span>
+</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</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-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="bp">self</span><span 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-3120"><a href="#L-3120"><span class="linenos">3120</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-3121"><a href="#L-3121"><span class="linenos">3121</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3126"><a href="#L-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">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-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 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">Interval</span><span class="p">]:</span>
+</span><span id="L-3129"><a href="#L-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="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a>
+</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a>
-</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="k">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-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="n">this</span>
+</span><span id="L-3134"><a href="#L-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">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-3135"><a href="#L-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">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</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="k">if</span> <span class="bp">self</span><span 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-3139"><a href="#L-3139"><span class="linenos">3139</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-3140"><a href="#L-3140"><span class="linenos">3140</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-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="k">return</span> <span class="kc">None</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">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-3144"><a href="#L-3144"><span class="linenos">3144</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-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
-</span><span id="L-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="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-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="p">)</span>
+</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</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 class="n">any_token</span><span class="o">=</span><span class="kc">True</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="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
+</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</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-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3153"><a href="#L-3153"><span class="linenos">3153</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-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">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-3156"><a href="#L-3156"><span class="linenos">3156</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-3157"><a href="#L-3157"><span class="linenos">3157</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-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="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-3160"><a href="#L-3160"><span class="linenos">3160</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-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</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-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</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-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</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-3170"><a href="#L-3170"><span class="linenos">3170</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-3171"><a href="#L-3171"><span class="linenos">3171</span></a>
-</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</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-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</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-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">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-3178"><a href="#L-3178"><span class="linenos">3178</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-3179"><a href="#L-3179"><span class="linenos">3179</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-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">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</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-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a>
-</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="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-3186"><a href="#L-3186"><span class="linenos">3186</span></a>
-</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="k">return</span> <span class="n">value</span>
-</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a>
-</span><span id="L-3190"><a href="#L-3190"><span class="linenos">3190</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-3191"><a href="#L-3191"><span class="linenos">3191</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <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_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span> <span class="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-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="bp">self</span><span 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-3201"><a href="#L-3201"><span class="linenos">3201</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="n">this</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">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-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="c1"># this is not actually a unit, it&#39;s something else</span>
+</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+</span><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">return</span> <span class="bp">self</span><span 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-3162"><a href="#L-3162"><span class="linenos">3162</span></a>
+</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">def</span> <span class="nf">_parse_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-3164"><a href="#L-3164"><span class="linenos">3164</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-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="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</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-3168"><a href="#L-3168"><span class="linenos">3168</span></a> <span class="n">this</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-3169"><a href="#L-3169"><span class="linenos">3169</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-3170"><a href="#L-3170"><span class="linenos">3170</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</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-3172"><a href="#L-3172"><span class="linenos">3172</span></a> <span class="p">)</span>
+</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
+</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
+</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</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-3176"><a href="#L-3176"><span class="linenos">3176</span></a> <span class="n">this</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-3177"><a href="#L-3177"><span class="linenos">3177</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-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="p">)</span>
+</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</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-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="n">this</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-3181"><a href="#L-3181"><span class="linenos">3181</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-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="p">)</span>
+</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a> <span class="k">break</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">return</span> <span class="n">this</span>
+</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">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-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">_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-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_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-3192"><a href="#L-3192"><span class="linenos">3192</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-3193"><a href="#L-3193"><span class="linenos">3193</span></a>
+</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="k">def</span> <span class="nf">_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-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_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-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">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-3197"><a href="#L-3197"><span class="linenos">3197</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-3198"><a href="#L-3198"><span class="linenos">3198</span></a>
+</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="k">def</span> <span class="nf">_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-3200"><a href="#L-3200"><span class="linenos">3200</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-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="k">return</span> <span class="n">interval</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="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-3205"><a href="#L-3205"><span class="linenos">3205</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</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-3207"><a href="#L-3207"><span class="linenos">3207</span></a>
-</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">def</span> <span class="nf">_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-3209"><a href="#L-3209"><span class="linenos">3209</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-3210"><a href="#L-3210"><span class="linenos">3210</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-3211"><a href="#L-3211"><span class="linenos">3211</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3212"><a href="#L-3212"><span class="linenos">3212</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-3213"><a href="#L-3213"><span class="linenos">3213</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-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-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_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</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-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</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-3210"><a href="#L-3210"><span class="linenos">3210</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-3211"><a href="#L-3211"><span class="linenos">3211</span></a> <span class="k">if</span> <span class="n">parser</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">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-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</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-3216"><a href="#L-3216"><span class="linenos">3216</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</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 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-3220"><a href="#L-3220"><span class="linenos">3220</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-3221"><a href="#L-3221"><span class="linenos">3221</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-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">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-3224"><a href="#L-3224"><span class="linenos">3224</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-3225"><a href="#L-3225"><span class="linenos">3225</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-3226"><a href="#L-3226"><span class="linenos">3226</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-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</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-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</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-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">_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-3233"><a href="#L-3233"><span class="linenos">3233</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-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="p">)</span>
-</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a>
-</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="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-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</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-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">if</span> <span class="n">op</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">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-3246"><a href="#L-3246"><span class="linenos">3246</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-3247"><a href="#L-3247"><span class="linenos">3247</span></a> <span class="n">this</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-3248"><a href="#L-3248"><span class="linenos">3248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</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-3251"><a href="#L-3251"><span class="linenos">3251</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-3252"><a href="#L-3252"><span class="linenos">3252</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-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="p">)</span>
+</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a>
+</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
+</span><span id="L-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">_parse_type</span><span class="p">()</span>
+</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</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-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a>
+</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="p">)</span>
+</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a>
+</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</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-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="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-3236"><a href="#L-3236"><span class="linenos">3236</span></a>
+</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a> <span class="k">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-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <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">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="n">tokens</span> <span class="o">=</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">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a>
+</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
+</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="k">else</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-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3256"><a href="#L-3256"><span class="linenos">3256</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-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a>
+</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="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-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 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-3260"><a href="#L-3260"><span class="linenos">3260</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-3261"><a href="#L-3261"><span class="linenos">3261</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-3262"><a href="#L-3262"><span class="linenos">3262</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-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">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-3265"><a href="#L-3265"><span class="linenos">3265</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-3266"><a href="#L-3266"><span class="linenos">3266</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-3267"><a href="#L-3267"><span class="linenos">3267</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-3268"><a href="#L-3268"><span class="linenos">3268</span></a>
-</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="k">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-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3271"><a href="#L-3271"><span class="linenos">3271</span></a>
-</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="k">return</span> <span class="n">primary</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="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-3275"><a href="#L-3275"><span class="linenos">3275</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-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">if</span> <span class="bp">self</span><span 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-3278"><a href="#L-3278"><span class="linenos">3278</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-3279"><a href="#L-3279"><span class="linenos">3279</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-3259"><a href="#L-3259"><span class="linenos">3259</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-3260"><a href="#L-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">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-3261"><a href="#L-3261"><span class="linenos">3261</span></a>
+</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <span class="n">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-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
+</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</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 class="k">if</span> <span class="bp">self</span><span 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-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
+</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</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-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="p">)</span>
+</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a> <span class="p">)</span>
+</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
+</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a>
-</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a> <span class="k">if</span> <span class="n">query</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 class="n">query</span><span class="p">]</span>
-</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
-</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a>
-</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-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">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-3289"><a href="#L-3289"><span class="linenos">3289</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-3290"><a href="#L-3290"><span class="linenos">3290</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-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="p">)</span>
-</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</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-3293"><a href="#L-3293"><span class="linenos">3293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3296"><a href="#L-3296"><span class="linenos">3296</span></a>
-</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="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-3282"><a href="#L-3282"><span class="linenos">3282</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-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="k">return</span> <span class="kc">None</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="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</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 class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-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">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-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
+</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</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-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="p">)</span>
+</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="p">)</span>
</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a>
-</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3301"><a href="#L-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="s2">&quot;Expecting &gt;&quot;</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 class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a>
-</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</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-3308"><a href="#L-3308"><span class="linenos">3308</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-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</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-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
-</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</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-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="p">)</span>
-</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a>
-</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</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-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="k">return</span> <span class="kc">None</span>
-</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="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-3327"><a href="#L-3327"><span class="linenos">3327</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-3328"><a href="#L-3328"><span class="linenos">3328</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-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">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</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-3334"><a href="#L-3334"><span class="linenos">3334</span></a>
-</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</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-3336"><a href="#L-3336"><span class="linenos">3336</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
-</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span 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-3339"><a href="#L-3339"><span class="linenos">3339</span></a>
-</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a>
-</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a> <span class="k">if</span> <span class="n">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-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</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-3304"><a href="#L-3304"><span class="linenos">3304</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-3305"><a href="#L-3305"><span class="linenos">3305</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-3306"><a href="#L-3306"><span class="linenos">3306</span></a>
+</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="k">if</span> <span class="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-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_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="n">tz_type</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
+</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
+</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
+</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="p">)</span>
+</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3319"><a href="#L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</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-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">):</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="n">span</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalYearToMonthSpan</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;DAY&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">):</span>
+</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalDayToSecondSpan</span><span class="p">()]</span>
+</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a>
+</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">span</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-3330"><a href="#L-3330"><span class="linenos">3330</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-3331"><a href="#L-3331"><span class="linenos">3331</span></a> <span class="n">this</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-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
+</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="p">)</span>
+</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3336"><a href="#L-3336"><span class="linenos">3336</span></a>
+</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</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-3339"><a href="#L-3339"><span class="linenos">3339</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-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 class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
+</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</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-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a>
-</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="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-3345"><a href="#L-3345"><span class="linenos">3345</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-3346"><a href="#L-3346"><span class="linenos">3346</span></a>
-</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="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-3348"><a href="#L-3348"><span class="linenos">3348</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-3349"><a href="#L-3349"><span class="linenos">3349</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-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</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-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="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-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">this</span> <span 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-3355"><a href="#L-3355"><span class="linenos">3355</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-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a>
-</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="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-3359"><a href="#L-3359"><span class="linenos">3359</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-3347"><a href="#L-3347"><span class="linenos">3347</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-3348"><a href="#L-3348"><span class="linenos">3348</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-3349"><a href="#L-3349"><span class="linenos">3349</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
+</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="p">)</span>
+</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a>
+</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="k">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-3357"><a href="#L-3357"><span class="linenos">3357</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="n">this</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">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-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="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
-</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span> <span class="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-3363"><a href="#L-3363"><span class="linenos">3363</span></a> <span class="bp">self</span><span 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-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a>
-</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a> <span class="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-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
-</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
-</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
-</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="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-3375"><a href="#L-3375"><span class="linenos">3375</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a>
-</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</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-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-3379"><a href="#L-3379"><span class="linenos">3379</span></a>
-</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</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-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</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-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">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-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3387"><a href="#L-3387"><span class="linenos">3387</span></a>
-</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="k">return</span> <span class="n">this</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="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-3392"><a href="#L-3392"><span class="linenos">3392</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-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</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-3395"><a href="#L-3395"><span class="linenos">3395</span></a> <span class="p">)</span>
-</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a>
-</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</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-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="k">if</span> <span class="n">literal</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="bp">self</span><span 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-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">return</span> <span class="bp">self</span><span 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-3403"><a href="#L-3403"><span class="linenos">3403</span></a>
-</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
-</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3406"><a href="#L-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">_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-3407"><a href="#L-3407"><span class="linenos">3407</span></a>
-</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="k">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-3409"><a href="#L-3409"><span class="linenos">3409</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-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">_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-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">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</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-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="k">if</span> <span class="bp">self</span><span 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-3418"><a href="#L-3418"><span class="linenos">3418</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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3421"><a href="#L-3421"><span class="linenos">3421</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-3422"><a href="#L-3422"><span class="linenos">3422</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</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-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">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-3426"><a href="#L-3426"><span class="linenos">3426</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-3427"><a href="#L-3427"><span class="linenos">3427</span></a>
-</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a> <span class="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-3429"><a href="#L-3429"><span class="linenos">3429</span></a>
-</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</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-3366"><a href="#L-3366"><span class="linenos">3366</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-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 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-3372"><a href="#L-3372"><span class="linenos">3372</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-3373"><a href="#L-3373"><span class="linenos">3373</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-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3375"><a href="#L-3375"><span class="linenos">3375</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-3376"><a href="#L-3376"><span class="linenos">3376</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-3377"><a href="#L-3377"><span class="linenos">3377</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-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="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</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-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">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-3383"><a href="#L-3383"><span class="linenos">3383</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-3384"><a href="#L-3384"><span class="linenos">3384</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-3385"><a href="#L-3385"><span class="linenos">3385</span></a>
+</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="k">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-3387"><a href="#L-3387"><span class="linenos">3387</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-3388"><a href="#L-3388"><span class="linenos">3388</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-3389"><a href="#L-3389"><span class="linenos">3389</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-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</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-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</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-3395"><a href="#L-3395"><span class="linenos">3395</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-3396"><a href="#L-3396"><span class="linenos">3396</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-3397"><a href="#L-3397"><span class="linenos">3397</span></a> <span class="p">)</span>
+</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a>
+</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</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-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</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">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a>
+</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</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-3409"><a href="#L-3409"><span class="linenos">3409</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-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><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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="n">field</span><span class="p">,</span>
+</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</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-3414"><a href="#L-3414"><span class="linenos">3414</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-3415"><a href="#L-3415"><span class="linenos">3415</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-3416"><a href="#L-3416"><span class="linenos">3416</span></a> <span class="p">)</span>
+</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3418"><a href="#L-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">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-3419"><a href="#L-3419"><span class="linenos">3419</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-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">return</span> <span class="n">this</span>
+</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">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-3423"><a href="#L-3423"><span class="linenos">3423</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-3424"><a href="#L-3424"><span class="linenos">3424</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-3425"><a href="#L-3425"><span class="linenos">3425</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-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">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-3428"><a href="#L-3428"><span class="linenos">3428</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-3429"><a href="#L-3429"><span class="linenos">3429</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-3430"><a href="#L-3430"><span class="linenos">3430</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-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">if</span> <span class="bp">self</span><span 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-3433"><a href="#L-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">expression</span><span class="p">(</span>
-</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</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-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="p">)</span>
-</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a>
-</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">_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-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">_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-3442"><a href="#L-3442"><span class="linenos">3442</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-3432"><a href="#L-3432"><span class="linenos">3432</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-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3434"><a href="#L-3434"><span class="linenos">3434</span></a>
+</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="k">return</span> <span class="n">primary</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_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-3438"><a href="#L-3438"><span class="linenos">3438</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-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="bp">self</span><span 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-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</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-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="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</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-3447"><a href="#L-3447"><span class="linenos">3447</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="k">pass</span>
-</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="k">finally</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">errors</span><span class="o">.</span><span class="n">clear</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">_retreat</span><span class="p">(</span><span class="n">index</span><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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3456"><a href="#L-3456"><span class="linenos">3456</span></a>
-</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="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-3458"><a href="#L-3458"><span class="linenos">3458</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-3459"><a href="#L-3459"><span class="linenos">3459</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-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="p">)</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 class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3464"><a href="#L-3464"><span class="linenos">3464</span></a>
-</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="k">def</span> <span class="nf">_parse_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-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
-</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a>
-</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-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">if</span> <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-3473"><a href="#L-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">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-3474"><a href="#L-3474"><span class="linenos">3474</span></a>
-</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</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-3478"><a href="#L-3478"><span class="linenos">3478</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-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="k">break</span>
-</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</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-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">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-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="k">return</span> <span class="n">this</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">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-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_auto_increment</span><span class="p">(</span>
-</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
-</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</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-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="L-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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a>
+</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="k">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-3452"><a href="#L-3452"><span class="linenos">3452</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-3453"><a href="#L-3453"><span class="linenos">3453</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-3454"><a href="#L-3454"><span class="linenos">3454</span></a> <span class="p">)</span>
+</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</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-3456"><a href="#L-3456"><span class="linenos">3456</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3459"><a href="#L-3459"><span class="linenos">3459</span></a>
+</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a> <span class="k">return</span> <span class="n">this</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">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="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
+</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</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-3471"><a href="#L-3471"><span class="linenos">3471</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-3472"><a href="#L-3472"><span class="linenos">3472</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="p">(</span>
+</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</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-3476"><a href="#L-3476"><span class="linenos">3476</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
+</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</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-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <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="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</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-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a>
+</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</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-3490"><a href="#L-3490"><span class="linenos">3490</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-3491"><a href="#L-3491"><span class="linenos">3491</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-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">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-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_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-3495"><a href="#L-3495"><span class="linenos">3495</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-3496"><a href="#L-3496"><span class="linenos">3496</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-3497"><a href="#L-3497"><span class="linenos">3497</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-3498"><a href="#L-3498"><span class="linenos">3498</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-3499"><a href="#L-3499"><span class="linenos">3499</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-3500"><a href="#L-3500"><span class="linenos">3500</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-3501"><a href="#L-3501"><span class="linenos">3501</span></a>
-</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="k">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-3503"><a href="#L-3503"><span class="linenos">3503</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-3493"><a href="#L-3493"><span class="linenos">3493</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
+</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</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-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 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-3499"><a href="#L-3499"><span class="linenos">3499</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
+</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="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-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">return</span> <span class="kc">None</span>
</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a>
-</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</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-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 class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
-</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="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-3510"><a href="#L-3510"><span class="linenos">3510</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-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <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="k">return</span> <span class="bp">self</span><span 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-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="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">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span>
-</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
-</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
-</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="p">)</span>
-</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</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-3523"><a href="#L-3523"><span class="linenos">3523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-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="bp">self</span><span 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-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a>
-</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3529"><a href="#L-3529"><span class="linenos">3529</span></a> <span class="k">if</span> <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-3530"><a href="#L-3530"><span class="linenos">3530</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-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">_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-3532"><a href="#L-3532"><span class="linenos">3532</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-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="k">if</span> <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-3534"><a href="#L-3534"><span class="linenos">3534</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-3535"><a href="#L-3535"><span class="linenos">3535</span></a> <span class="k">if</span> <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-3536"><a href="#L-3536"><span class="linenos">3536</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-3537"><a href="#L-3537"><span class="linenos">3537</span></a>
-</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a> <span class="k">if</span> <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-3539"><a href="#L-3539"><span class="linenos">3539</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-3540"><a href="#L-3540"><span class="linenos">3540</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-3541"><a href="#L-3541"><span class="linenos">3541</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-3505"><a href="#L-3505"><span class="linenos">3505</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-3506"><a href="#L-3506"><span class="linenos">3506</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a>
+</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="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-3509"><a href="#L-3509"><span class="linenos">3509</span></a>
+</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</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-3511"><a href="#L-3511"><span class="linenos">3511</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-3512"><a href="#L-3512"><span class="linenos">3512</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-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="n">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-3515"><a href="#L-3515"><span class="linenos">3515</span></a>
+</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="k">if</span> <span class="n">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-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">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-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a> <span class="k">return</span> <span class="n">this</span>
+</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">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-3522"><a href="#L-3522"><span class="linenos">3522</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-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 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-3525"><a href="#L-3525"><span class="linenos">3525</span></a>
+</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
+</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-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">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-3530"><a href="#L-3530"><span class="linenos">3530</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
+</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
+</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3535"><a href="#L-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">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-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="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-3538"><a href="#L-3538"><span class="linenos">3538</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-3539"><a href="#L-3539"><span class="linenos">3539</span></a>
+</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="k">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-3541"><a href="#L-3541"><span class="linenos">3541</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-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="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
-</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a>
-</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</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-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="bp">self</span><span class="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-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a>
-</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a>
-</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="k">def</span> <span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
-</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</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-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-3548"><a href="#L-3548"><span class="linenos">3548</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-3549"><a href="#L-3549"><span class="linenos">3549</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3550"><a href="#L-3550"><span class="linenos">3550</span></a>
+</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a>
-</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
-</span><span id="L-3555"><a href="#L-3555"><span class="linenos">3555</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">]:</span>
-</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="k">if</span> <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-3558"><a href="#L-3558"><span class="linenos">3558</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
-</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="k">return</span> <span class="kc">None</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">_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-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3565"><a href="#L-3565"><span class="linenos">3565</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-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="n">this</span> <span class="o">=</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="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-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <span class="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-3571"><a href="#L-3571"><span class="linenos">3571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</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-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="p">)</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 class="k">return</span> <span class="n">this</span>
-</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a>
-</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a> <span class="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-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3580"><a href="#L-3580"><span class="linenos">3580</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-3581"><a href="#L-3581"><span class="linenos">3581</span></a>
-</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="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-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</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-3555"><a href="#L-3555"><span class="linenos">3555</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-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="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-3557"><a href="#L-3557"><span class="linenos">3557</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-3558"><a href="#L-3558"><span class="linenos">3558</span></a> <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 class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</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-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="k">if</span> <span class="n">literal</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">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-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">return</span> <span class="bp">self</span><span 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-3566"><a href="#L-3566"><span class="linenos">3566</span></a>
+</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
+</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</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-3570"><a href="#L-3570"><span class="linenos">3570</span></a>
+</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</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-3572"><a href="#L-3572"><span class="linenos">3572</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-3573"><a href="#L-3573"><span class="linenos">3573</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-3574"><a href="#L-3574"><span class="linenos">3574</span></a>
+</span><span id="L-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</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-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 class="k">if</span> <span class="bp">self</span><span 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-3581"><a href="#L-3581"><span class="linenos">3581</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
+</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="p">)</span>
</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a>
-</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</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-3587"><a href="#L-3587"><span class="linenos">3587</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-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="k">break</span>
-</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</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-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">return</span> <span class="bp">self</span><span 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-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3586"><a href="#L-3586"><span class="linenos">3586</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-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</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-3589"><a href="#L-3589"><span class="linenos">3589</span></a>
+</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</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-3591"><a href="#L-3591"><span class="linenos">3591</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-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 class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
-</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</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-3595"><a href="#L-3595"><span class="linenos">3595</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></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-3597"><a href="#L-3597"><span class="linenos">3597</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a>
-</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="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-3600"><a href="#L-3600"><span class="linenos">3600</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-3601"><a href="#L-3601"><span class="linenos">3601</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-3602"><a href="#L-3602"><span class="linenos">3602</span></a>
-</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</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-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 class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
-</span><span id="L-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;KEY&quot;</span><span class="p">)</span>
-</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="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-3608"><a href="#L-3608"><span class="linenos">3608</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span 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_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="p">)</span>
-</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a>
-</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="k">def</span> <span class="nf">_parse_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-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</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-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="k">break</span>
-</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a>
-</span><span id="L-3617"><a href="#L-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</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-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
-</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</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-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</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-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</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-3631"><a href="#L-3631"><span class="linenos">3631</span></a>
-</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</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-3633"><a href="#L-3633"><span class="linenos">3633</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-3634"><a href="#L-3634"><span class="linenos">3634</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-3635"><a href="#L-3635"><span class="linenos">3635</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-3636"><a href="#L-3636"><span class="linenos">3636</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-3637"><a href="#L-3637"><span class="linenos">3637</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-3638"><a href="#L-3638"><span class="linenos">3638</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-3639"><a href="#L-3639"><span class="linenos">3639</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-3640"><a href="#L-3640"><span class="linenos">3640</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-3641"><a href="#L-3641"><span class="linenos">3641</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-3642"><a href="#L-3642"><span class="linenos">3642</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-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="k">break</span>
-</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a>
-</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="k">return</span> <span class="n">options</span>
-</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a>
-</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
-</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</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-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</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-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 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-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 class="k">if</span> <span class="bp">self</span><span 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-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</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-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="p">)</span>
+</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a>
+</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">_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-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">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-3607"><a href="#L-3607"><span class="linenos">3607</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-3608"><a href="#L-3608"><span class="linenos">3608</span></a>
+</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</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-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="k">pass</span>
+</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+</span><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="k">return</span> <span class="n">this</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="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
+</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a>
+</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</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-3625"><a href="#L-3625"><span class="linenos">3625</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-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">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-3631"><a href="#L-3631"><span class="linenos">3631</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
+</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-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="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-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">if</span> <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-3638"><a href="#L-3638"><span class="linenos">3638</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-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="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
+</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</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-3647"><a href="#L-3647"><span class="linenos">3647</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
+</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</span></a> <span class="p">)</span>
+</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="p">)</span>
</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a>
-</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-3654"><a href="#L-3654"><span class="linenos">3654</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-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
-</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</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-3659"><a href="#L-3659"><span class="linenos">3659</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-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</span></a>
-</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</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-3663"><a href="#L-3663"><span class="linenos">3663</span></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-3664"><a href="#L-3664"><span class="linenos">3664</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-3665"><a href="#L-3665"><span class="linenos">3665</span></a>
-</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-3670"><a href="#L-3670"><span class="linenos">3670</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-3671"><a href="#L-3671"><span class="linenos">3671</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-3672"><a href="#L-3672"><span class="linenos">3672</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-3673"><a href="#L-3673"><span class="linenos">3673</span></a> <span class="k">else</span><span class="p">:</span>
-</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">_advance</span><span class="p">()</span>
-</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</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-3676"><a href="#L-3676"><span class="linenos">3676</span></a>
-</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</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-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 class="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-3680"><a href="#L-3680"><span class="linenos">3680</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-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="p">)</span>
+</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</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-3654"><a href="#L-3654"><span class="linenos">3654</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-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="k">break</span>
+</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</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-3657"><a href="#L-3657"><span class="linenos">3657</span></a>
+</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</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-3659"><a href="#L-3659"><span class="linenos">3659</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a>
+</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 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-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">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
+</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
+</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</span></a> <span class="n">start</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 class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a>
+</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3670"><a href="#L-3670"><span class="linenos">3670</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-3671"><a href="#L-3671"><span class="linenos">3671</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-3672"><a href="#L-3672"><span class="linenos">3672</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-3673"><a href="#L-3673"><span class="linenos">3673</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-3674"><a href="#L-3674"><span class="linenos">3674</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-3675"><a href="#L-3675"><span class="linenos">3675</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-3676"><a href="#L-3676"><span class="linenos">3676</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-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">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-3679"><a href="#L-3679"><span class="linenos">3679</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-3680"><a href="#L-3680"><span class="linenos">3680</span></a>
+</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="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-3682"><a href="#L-3682"><span class="linenos">3682</span></a>
-</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</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-3688"><a href="#L-3688"><span class="linenos">3688</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-3689"><a href="#L-3689"><span class="linenos">3689</span></a> <span class="p">)</span>
+</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
+</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <span class="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-3686"><a href="#L-3686"><span class="linenos">3686</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-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <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="k">return</span> <span class="bp">self</span><span 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-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">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3692"><a href="#L-3692"><span class="linenos">3692</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3693"><a href="#L-3693"><span class="linenos">3693</span></a>
-</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</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_field</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span><span class="p">)</span>
-</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</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-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_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-3699"><a href="#L-3699"><span class="linenos">3699</span></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-3700"><a href="#L-3700"><span class="linenos">3700</span></a> <span class="k">return</span> <span class="n">this</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">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-3691"><a href="#L-3691"><span class="linenos">3691</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">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span>
+</span><span id="L-3692"><a href="#L-3692"><span class="linenos">3692</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
+</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="n">this</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-3695"><a href="#L-3695"><span class="linenos">3695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
+</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="p">)</span>
+</span><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</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-3699"><a href="#L-3699"><span class="linenos">3699</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="bp">self</span><span 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-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
</span><span id="L-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">if</span> <span class="bp">self</span><span 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-3705"><a href="#L-3705"><span class="linenos">3705</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 class="o">=</span> <span class="p">[</span>
-</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</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">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-3707"><a href="#L-3707"><span class="linenos">3707</span></a> <span class="p">]</span>
-</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</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-3710"><a href="#L-3710"><span class="linenos">3710</span></a> <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><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-3712"><a href="#L-3712"><span class="linenos">3712</span></a> <span class="p">)</span>
-</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <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 class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</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-3717"><a href="#L-3717"><span class="linenos">3717</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3718"><a href="#L-3718"><span class="linenos">3718</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-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</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-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3704"><a href="#L-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">L_PAREN</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">START_WITH</span><span class="p">):</span>
+</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</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-3707"><a href="#L-3707"><span class="linenos">3707</span></a> <span class="k">if</span> <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-3708"><a href="#L-3708"><span class="linenos">3708</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-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_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</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="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-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="k">if</span> <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-3712"><a href="#L-3712"><span class="linenos">3712</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-3713"><a href="#L-3713"><span class="linenos">3713</span></a>
+</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</span></a> <span class="k">if</span> <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-3715"><a href="#L-3715"><span class="linenos">3715</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-3716"><a href="#L-3716"><span class="linenos">3716</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-3717"><a href="#L-3717"><span class="linenos">3717</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-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 class="k">if</span> <span class="ow">not</span> <span class="n">identity</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">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a>
+</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3725"><a href="#L-3725"><span class="linenos">3725</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-3726"><a href="#L-3726"><span class="linenos">3726</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-3727"><a href="#L-3727"><span class="linenos">3727</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-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="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-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_bracket</span><span class="p">(</span><span class="n">this</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_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-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3734"><a href="#L-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 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-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <span class="k">return</span> <span class="n">this</span>
-</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">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-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a> <span class="k">return</span> <span class="n">this</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_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
+</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</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-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-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">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
+</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="k">if</span> <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-3734"><a href="#L-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 class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</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_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
+</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
+</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
+</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a> <span class="k">return</span> <span class="kc">None</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="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-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">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-3744"><a href="#L-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">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="bp">self</span><span 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-3746"><a href="#L-3746"><span class="linenos">3746</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-3747"><a href="#L-3747"><span class="linenos">3747</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-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">if</span> <span class="bp">self</span><span 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-3750"><a href="#L-3750"><span class="linenos">3750</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-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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3753"><a href="#L-3753"><span class="linenos">3753</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-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">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-3756"><a href="#L-3756"><span class="linenos">3756</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-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="p">)</span>
-</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">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-3760"><a href="#L-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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</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-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">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</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-3764"><a href="#L-3764"><span class="linenos">3764</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</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-3766"><a href="#L-3766"><span class="linenos">3766</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-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 class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
-</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</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-3770"><a href="#L-3770"><span class="linenos">3770</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span 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-3773"><a href="#L-3773"><span class="linenos">3773</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-3774"><a href="#L-3774"><span class="linenos">3774</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-3775"><a href="#L-3775"><span class="linenos">3775</span></a> <span class="bp">self</span><span 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-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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">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-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 class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
-</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</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_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-3742"><a href="#L-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">CONSTRAINT</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">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">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-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="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-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</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-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <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 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_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-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3758"><a href="#L-3758"><span class="linenos">3758</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-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 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-3761"><a href="#L-3761"><span class="linenos">3761</span></a> <span class="n">expressions</span> <span class="o">=</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="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</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-3765"><a href="#L-3765"><span class="linenos">3765</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-3766"><a href="#L-3766"><span class="linenos">3766</span></a> <span class="k">break</span>
+</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</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-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">return</span> <span class="bp">self</span><span 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-3770"><a href="#L-3770"><span class="linenos">3770</span></a>
+</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a> <span class="bp">self</span><span class="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-3773"><a href="#L-3773"><span class="linenos">3773</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a> <span class="k">if</span> <span class="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-3775"><a href="#L-3775"><span class="linenos">3775</span></a> <span class="k">return</span> <span class="kc">None</span>
+</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="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-3778"><a href="#L-3778"><span class="linenos">3778</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-3779"><a href="#L-3779"><span class="linenos">3779</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-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 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-3782"><a href="#L-3782"><span class="linenos">3782</span></a>
+</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</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-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="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-3786"><a href="#L-3786"><span class="linenos">3786</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
-</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</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-3788"><a href="#L-3788"><span class="linenos">3788</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-3789"><a href="#L-3789"><span class="linenos">3789</span></a> <span class="p">)</span>
-</span><span id="L-3790"><a href="#L-3790"><span class="linenos">3790</span></a>
-</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
-</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</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-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="bp">self</span><span 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-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 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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3798"><a href="#L-3798"><span class="linenos">3798</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-3799"><a href="#L-3799"><span class="linenos">3799</span></a>
-</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 class="k">def</span> <span class="nf">_parse_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
-</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a>
-</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
-</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a>
-</span><span id="L-3812"><a href="#L-3812"><span class="linenos">3812</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
-</span><span id="L-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 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-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3818"><a href="#L-3818"><span class="linenos">3818</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3819"><a href="#L-3819"><span class="linenos">3819</span></a> <span class="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-3820"><a href="#L-3820"><span class="linenos">3820</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">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-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="p">)</span>
-</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</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-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="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</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-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">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</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-3830"><a href="#L-3830"><span class="linenos">3830</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-3831"><a href="#L-3831"><span class="linenos">3831</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3832"><a href="#L-3832"><span class="linenos">3832</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-3833"><a href="#L-3833"><span class="linenos">3833</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">FORMAT</span><span class="p">):</span>
-</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
-</span><span id="L-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 class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">this</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-3839"><a href="#L-3839"><span class="linenos">3839</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
-</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
-</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="L-3845"><a href="#L-3845"><span class="linenos">3845</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_TRIE</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><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a> <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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
-</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
-</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a>
-</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span 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_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <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 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-3790"><a href="#L-3790"><span class="linenos">3790</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="k">if</span> <span class="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-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="k">break</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="k">if</span> <span class="bp">self</span><span 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-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
+</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</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-3806"><a href="#L-3806"><span class="linenos">3806</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&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 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-3811"><a href="#L-3811"><span class="linenos">3811</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-3812"><a href="#L-3812"><span class="linenos">3812</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-3813"><a href="#L-3813"><span class="linenos">3813</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-3814"><a href="#L-3814"><span class="linenos">3814</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-3815"><a href="#L-3815"><span class="linenos">3815</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-3816"><a href="#L-3816"><span class="linenos">3816</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-3817"><a href="#L-3817"><span class="linenos">3817</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-3818"><a href="#L-3818"><span class="linenos">3818</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-3819"><a href="#L-3819"><span class="linenos">3819</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-3820"><a href="#L-3820"><span class="linenos">3820</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-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="k">break</span>
+</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a>
+</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="k">return</span> <span class="n">options</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="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
+</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</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-3828"><a href="#L-3828"><span class="linenos">3828</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a>
+</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</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-3832"><a href="#L-3832"><span class="linenos">3832</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-3833"><a href="#L-3833"><span class="linenos">3833</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3834"><a href="#L-3834"><span class="linenos">3834</span></a>
+</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
+</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</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-3837"><a href="#L-3837"><span class="linenos">3837</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-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a>
+</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="k">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-3841"><a href="#L-3841"><span class="linenos">3841</span></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-3842"><a href="#L-3842"><span class="linenos">3842</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-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="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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-3848"><a href="#L-3848"><span class="linenos">3848</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-3849"><a href="#L-3849"><span class="linenos">3849</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-3850"><a href="#L-3850"><span class="linenos">3850</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-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">)</span>
+</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</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-3856"><a href="#L-3856"><span class="linenos">3856</span></a>
-</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">def</span> <span class="nf">_parse_concat</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</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-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONCAT_NULL_OUTPUTS_STRING</span><span class="p">:</span>
-</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">))</span>
-</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span>
-</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="k">if</span> <span class="n">arg</span>
-</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="p">]</span>
-</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"># Some dialects (e.g. Trino) don&#39;t allow a single-argument CONCAT call, so when</span>
-</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="c1"># we find such a call we replace it with its argument.</span>
-</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</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-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</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 class="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-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span>
-</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a> <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 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-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
-</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="p">]</span>
-</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
-</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</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-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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
-</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
-</span><span id="L-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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-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="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-3893"><a href="#L-3893"><span class="linenos">3893</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-3894"><a href="#L-3894"><span class="linenos">3894</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-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</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-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-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="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-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3902"><a href="#L-3902"><span class="linenos">3902</span></a>
-</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</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-3904"><a href="#L-3904"><span class="linenos">3904</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-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">if</span> <span class="bp">self</span><span 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-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
-</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="p">)</span>
-</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</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-3911"><a href="#L-3911"><span class="linenos">3911</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-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="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-3858"><a href="#L-3858"><span class="linenos">3858</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-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="p">)</span>
+</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a>
+</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</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-3866"><a href="#L-3866"><span class="linenos">3866</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-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <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">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-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">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-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="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_field</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span><span class="p">)</span>
+</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</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-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">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-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">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-3877"><a href="#L-3877"><span class="linenos">3877</span></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-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a>
+</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="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-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">if</span> <span class="bp">self</span><span 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-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</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">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-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="p">]</span>
+</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</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-3888"><a href="#L-3888"><span class="linenos">3888</span></a> <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><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <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-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="p">)</span>
+</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <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="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</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-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3896"><a href="#L-3896"><span class="linenos">3896</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-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</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-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-3901"><a href="#L-3901"><span class="linenos">3901</span></a>
+</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3903"><a href="#L-3903"><span class="linenos">3903</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-3904"><a href="#L-3904"><span class="linenos">3904</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-3905"><a href="#L-3905"><span class="linenos">3905</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-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="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-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_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a>
+</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</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-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">COLON</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">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-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="k">return</span> <span class="n">this</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">return</span> <span class="bp">self</span><span 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-3916"><a href="#L-3916"><span class="linenos">3916</span></a>
-</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="k">def</span> <span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
-</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
-</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a>
-</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a><span class="sd"> - DECODE(bin, charset)</span>
-</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</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="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</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-3929"><a href="#L-3929"><span class="linenos">3929</span></a>
-</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a> <span class="k">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-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-3934"><a href="#L-3934"><span class="linenos">3934</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-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><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</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-3939"><a href="#L-3939"><span class="linenos">3939</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-3940"><a href="#L-3940"><span class="linenos">3940</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a>
-</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="k">if</span> <span class="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-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</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-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="p">)</span>
-</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</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-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</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-3949"><a href="#L-3949"><span class="linenos">3949</span></a> <span class="p">)</span>
-</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</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-3952"><a href="#L-3952"><span class="linenos">3952</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-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</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-3955"><a href="#L-3955"><span class="linenos">3955</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-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a> <span class="p">),</span>
-</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="p">)</span>
-</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</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-3961"><a href="#L-3961"><span class="linenos">3961</span></a>
-</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="k">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-3915"><a href="#L-3915"><span class="linenos">3915</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-3916"><a href="#L-3916"><span class="linenos">3916</span></a> <span class="n">ifs</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="n">default</span> <span class="o">=</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="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-3920"><a href="#L-3920"><span class="linenos">3920</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-3921"><a href="#L-3921"><span class="linenos">3921</span></a>
+</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="k">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-3923"><a href="#L-3923"><span class="linenos">3923</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-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="bp">self</span><span 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-3925"><a href="#L-3925"><span class="linenos">3925</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-3926"><a href="#L-3926"><span class="linenos">3926</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-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">if</span> <span class="bp">self</span><span 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-3929"><a href="#L-3929"><span class="linenos">3929</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-3930"><a href="#L-3930"><span class="linenos">3930</span></a>
+</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3932"><a href="#L-3932"><span class="linenos">3932</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-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">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-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="p">)</span>
+</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a>
+</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</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-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3940"><a href="#L-3940"><span class="linenos">3940</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-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</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-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</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-3945"><a href="#L-3945"><span class="linenos">3945</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-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">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</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="kc">None</span>
+</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="bp">self</span><span 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-3952"><a href="#L-3952"><span class="linenos">3952</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-3953"><a href="#L-3953"><span class="linenos">3953</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-3954"><a href="#L-3954"><span class="linenos">3954</span></a> <span class="bp">self</span><span 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-3955"><a href="#L-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">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-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="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-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">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
+</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a>
-</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
-</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</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-3966"><a href="#L-3966"><span class="linenos">3966</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-3967"><a href="#L-3967"><span class="linenos">3967</span></a> <span class="bp">self</span><span 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-3968"><a href="#L-3968"><span class="linenos">3968</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-3969"><a href="#L-3969"><span class="linenos">3969</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-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">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-3972"><a href="#L-3972"><span class="linenos">3972</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3974"><a href="#L-3974"><span class="linenos">3974</span></a>
-</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="k">def</span> <span class="nf">_parse_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">JSONObject</span><span class="p">:</span>
-</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">star</span><span class="p">]</span> <span class="k">if</span> <span class="n">star</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
+</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</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-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="p">)</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 class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
+</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</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-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">if</span> <span class="bp">self</span><span 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-3974"><a href="#L-3974"><span class="linenos">3974</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3977"><a href="#L-3977"><span class="linenos">3977</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-3978"><a href="#L-3978"><span class="linenos">3978</span></a>
-</span><span id="L-3979"><a href="#L-3979"><span class="linenos">3979</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="k">if</span> <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-3981"><a href="#L-3981"><span class="linenos">3981</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-3982"><a href="#L-3982"><span class="linenos">3982</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-3983"><a href="#L-3983"><span class="linenos">3983</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-3984"><a href="#L-3984"><span class="linenos">3984</span></a>
-</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3986"><a href="#L-3986"><span class="linenos">3986</span></a> <span class="k">if</span> <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-3987"><a href="#L-3987"><span class="linenos">3987</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</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-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</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">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-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_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
+</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-3987"><a href="#L-3987"><span class="linenos">3987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
+</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-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="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-3991"><a href="#L-3991"><span class="linenos">3991</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a>
-</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</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-3994"><a href="#L-3994"><span class="linenos">3994</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-3995"><a href="#L-3995"><span class="linenos">3995</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-3996"><a href="#L-3996"><span class="linenos">3996</span></a>
-</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="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-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</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-4001"><a href="#L-4001"><span class="linenos">4001</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-4002"><a href="#L-4002"><span class="linenos">4002</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-4003"><a href="#L-4003"><span class="linenos">4003</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-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="p">)</span>
-</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</span></a>
-</span><span id="L-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">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">Func</span><span class="p">:</span>
-</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="c1"># Default argument order is base, expression</span>
-</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</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-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">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-4012"><a href="#L-4012"><span class="linenos">4012</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-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
-</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</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-3993"><a href="#L-3993"><span class="linenos">3993</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-3994"><a href="#L-3994"><span class="linenos">3994</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-3995"><a href="#L-3995"><span class="linenos">3995</span></a>
+</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-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="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-4001"><a href="#L-4001"><span class="linenos">4001</span></a>
+</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</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-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">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</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-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</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-4010"><a href="#L-4010"><span class="linenos">4010</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4011"><a href="#L-4011"><span class="linenos">4011</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-4012"><a href="#L-4012"><span class="linenos">4012</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">FORMAT</span><span class="p">):</span>
+</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
</span><span id="L-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">return</span> <span class="bp">self</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="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-4018"><a href="#L-4018"><span class="linenos">4018</span></a> <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_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
-</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</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-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 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-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="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-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;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-4028"><a href="#L-4028"><span class="linenos">4028</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-4029"><a href="#L-4029"><span class="linenos">4029</span></a> <span class="k">if</span> <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-4030"><a href="#L-4030"><span class="linenos">4030</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-4031"><a href="#L-4031"><span class="linenos">4031</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-4032"><a href="#L-4032"><span class="linenos">4032</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</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-4034"><a href="#L-4034"><span class="linenos">4034</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</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-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="p">)</span>
-</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="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
-</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
-</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</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-4045"><a href="#L-4045"><span class="linenos">4045</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-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">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
-</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</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-4050"><a href="#L-4050"><span class="linenos">4050</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
-</span><span id="L-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">return</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">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
-</span><span id="L-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><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</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-4060"><a href="#L-4060"><span class="linenos">4060</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="n">this</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-4018"><a href="#L-4018"><span class="linenos">4018</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
+</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="L-4024"><a href="#L-4024"><span class="linenos">4024</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
+</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a> <span class="p">)</span>
+</span><span id="L-4026"><a href="#L-4026"><span class="linenos">4026</span></a> <span class="p">),</span>
+</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a> <span class="p">)</span>
+</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a>
+</span><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
+</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
+</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a>
+</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a> <span class="k">return</span> <span class="n">this</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 class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">)</span>
+</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a>
+</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="k">def</span> <span class="nf">_parse_concat</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4037"><a href="#L-4037"><span class="linenos">4037</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONCAT_NULL_OUTPUTS_STRING</span><span class="p">:</span>
+</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span>
+</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a> <span class="k">if</span> <span class="n">arg</span>
+</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <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 class="c1"># Some dialects (e.g. Trino) don&#39;t allow a single-argument CONCAT call, so when</span>
+</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a> <span class="c1"># we find such a call we replace it with its argument.</span>
+</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</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-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</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="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-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span>
+</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span class="p">)</span>
+</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">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-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4056"><a href="#L-4056"><span class="linenos">4056</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
+</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a> <span class="p">]</span>
+</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4060"><a href="#L-4060"><span class="linenos">4060</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
+</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-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">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</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-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">if</span> <span class="bp">self</span><span 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-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">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-4070"><a href="#L-4070"><span class="linenos">4070</span></a> <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">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="L-4073"><a href="#L-4073"><span class="linenos">4073</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-4074"><a href="#L-4074"><span class="linenos">4074</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-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</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-4077"><a href="#L-4077"><span class="linenos">4077</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</span></a> <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">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
-</span><span id="L-4084"><a href="#L-4084"><span class="linenos">4084</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-4085"><a href="#L-4085"><span class="linenos">4085</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-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">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
-</span><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</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="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-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">if</span> <span class="bp">self</span><span 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-4094"><a href="#L-4094"><span class="linenos">4094</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-4095"><a href="#L-4095"><span class="linenos">4095</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4096"><a href="#L-4096"><span class="linenos">4096</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-4097"><a href="#L-4097"><span class="linenos">4097</span></a>
-</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</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-4065"><a href="#L-4065"><span class="linenos">4065</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
+</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
+</span><span id="L-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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-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="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-4072"><a href="#L-4072"><span class="linenos">4072</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-4073"><a href="#L-4073"><span class="linenos">4073</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-4074"><a href="#L-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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-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="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-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4081"><a href="#L-4081"><span class="linenos">4081</span></a>
+</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</span></a> <span class="k">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-4083"><a href="#L-4083"><span class="linenos">4083</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-4084"><a href="#L-4084"><span class="linenos">4084</span></a>
+</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-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="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-4090"><a href="#L-4090"><span class="linenos">4090</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-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">to</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">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-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_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
+</span><span id="L-4097"><a href="#L-4097"><span class="linenos">4097</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a>
-</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
-</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
-</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a>
-</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a>
-</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</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-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="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-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_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-4112"><a href="#L-4112"><span class="linenos">4112</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-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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 class="k">if</span> <span class="bp">self</span><span 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-4118"><a href="#L-4118"><span class="linenos">4118</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-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">return</span> <span class="bp">self</span><span class="o">.</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="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
-</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="p">)</span>
-</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</span></a>
-</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="k">def</span> <span class="nf">_parse_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-4125"><a href="#L-4125"><span class="linenos">4125</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-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">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-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_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-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">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
-</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</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-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4133"><a href="#L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-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">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-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a>
-</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</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-4141"><a href="#L-4141"><span class="linenos">4141</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="bp">self</span><span 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-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">expression</span><span class="p">(</span>
-</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</span></a> <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">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</span></a>
-</span><span id="L-4149"><a href="#L-4149"><span class="linenos">4149</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</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-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</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-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-4154"><a href="#L-4154"><span class="linenos">4154</span></a>
-</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</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="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</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="c1"># The below changes handle</span>
-</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a>
-</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</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-4167"><a href="#L-4167"><span class="linenos">4167</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</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-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"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</span></a> <span class="bp">self</span><span 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-4175"><a href="#L-4175"><span class="linenos">4175</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-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</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-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 class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="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-4182"><a href="#L-4182"><span class="linenos">4182</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-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><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</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-4186"><a href="#L-4186"><span class="linenos">4186</span></a>
-</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</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-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="k">if</span> <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-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a>
-</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</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-4192"><a href="#L-4192"><span class="linenos">4192</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-4193"><a href="#L-4193"><span class="linenos">4193</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-4100"><a href="#L-4100"><span class="linenos">4100</span></a><span class="sd"> - DECODE(bin, charset)</span>
+</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
+</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a>
+</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</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-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="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-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">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-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="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-4113"><a href="#L-4113"><span class="linenos">4113</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-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="k">return</span> <span class="kc">None</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="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</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-4118"><a href="#L-4118"><span class="linenos">4118</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-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a>
+</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a> <span class="k">if</span> <span class="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-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</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-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="p">)</span>
+</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</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-4126"><a href="#L-4126"><span class="linenos">4126</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</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-4128"><a href="#L-4128"><span class="linenos">4128</span></a> <span class="p">)</span>
+</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</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-4131"><a href="#L-4131"><span class="linenos">4131</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-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</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-4134"><a href="#L-4134"><span class="linenos">4134</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-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4136"><a href="#L-4136"><span class="linenos">4136</span></a> <span class="p">),</span>
+</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="p">)</span>
+</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</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-4140"><a href="#L-4140"><span class="linenos">4140</span></a>
+</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</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-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="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
+</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</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-4145"><a href="#L-4145"><span class="linenos">4145</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-4146"><a href="#L-4146"><span class="linenos">4146</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">COLON</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-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;VALUE&quot;</span><span class="p">)</span>
+</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</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-4149"><a href="#L-4149"><span class="linenos">4149</span></a>
+</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="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-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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 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">JSONObject</span><span class="p">:</span>
+</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">star</span><span class="p">]</span> <span class="k">if</span> <span class="n">star</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">)</span>
+</span><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a>
+</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a> <span class="k">if</span> <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-4160"><a href="#L-4160"><span class="linenos">4160</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-4161"><a href="#L-4161"><span class="linenos">4161</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-4162"><a href="#L-4162"><span class="linenos">4162</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-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="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a> <span class="k">if</span> <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-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</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-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</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="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-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">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-4173"><a href="#L-4173"><span class="linenos">4173</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-4174"><a href="#L-4174"><span class="linenos">4174</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-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="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-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</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-4180"><a href="#L-4180"><span class="linenos">4180</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-4181"><a href="#L-4181"><span class="linenos">4181</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-4182"><a href="#L-4182"><span class="linenos">4182</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-4183"><a href="#L-4183"><span class="linenos">4183</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="p">)</span>
+</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a>
+</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="k">def</span> <span class="nf">_parse_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">Func</span><span class="p">:</span>
+</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="c1"># Default argument order is base, expression</span>
+</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</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-4189"><a href="#L-4189"><span class="linenos">4189</span></a>
+</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</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-4191"><a href="#L-4191"><span class="linenos">4191</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-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</span><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="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-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">if</span> <span class="n">kind</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">BETWEEN</span><span class="p">)</span>
-</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
-</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4199"><a href="#L-4199"><span class="linenos">4199</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-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="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-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</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-4205"><a href="#L-4205"><span class="linenos">4205</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-4206"><a href="#L-4206"><span class="linenos">4206</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-4207"><a href="#L-4207"><span class="linenos">4207</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-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="p">)</span>
-</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a>
-</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</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-4218"><a href="#L-4218"><span class="linenos">4218</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</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-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
-</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
-</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a> <span class="p">)</span>
-</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a>
-</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
-</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a>
-</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="k">return</span> <span class="n">window</span>
-</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a>
-</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a> <span class="k">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-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="bp">self</span><span 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-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="k">return</span> <span class="p">{</span>
-</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
-</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
-</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</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-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="p">),</span>
-</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="p">}</span>
+</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="k">return</span> <span class="bp">self</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="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-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="p">)</span>
+</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a>
+</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
+</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</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-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_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-4203"><a href="#L-4203"><span class="linenos">4203</span></a>
+</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a> <span class="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-4205"><a href="#L-4205"><span class="linenos">4205</span></a>
+</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="k">if</span> <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-4207"><a href="#L-4207"><span class="linenos">4207</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-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="k">if</span> <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-4209"><a href="#L-4209"><span class="linenos">4209</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-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;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-4211"><a href="#L-4211"><span class="linenos">4211</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</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-4213"><a href="#L-4213"><span class="linenos">4213</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a>
+</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</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-4219"><a href="#L-4219"><span class="linenos">4219</span></a> <span class="p">)</span>
+</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://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
+</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</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-4224"><a href="#L-4224"><span class="linenos">4224</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-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 class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
+</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</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-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
+</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a>
+</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
+</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="p">)</span>
+</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a>
+</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="n">expressions</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</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-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
+</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a>
+</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-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="k">def</span> <span class="nf">_parse_alias</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="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-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</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-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="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-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</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-4245"><a href="#L-4245"><span class="linenos">4245</span></a>
+</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <span class="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-4248"><a href="#L-4248"><span class="linenos">4248</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-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="p">)</span>
</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a>
-</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-4252"><a href="#L-4252"><span class="linenos">4252</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-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</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-4256"><a href="#L-4256"><span class="linenos">4256</span></a> <span class="p">)</span>
-</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</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-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="k">return</span> <span class="n">aliases</span>
-</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a>
-</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <span class="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-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</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-4253"><a href="#L-4253"><span class="linenos">4253</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-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</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-4256"><a href="#L-4256"><span class="linenos">4256</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-4257"><a href="#L-4257"><span class="linenos">4257</span></a>
+</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="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-4259"><a href="#L-4259"><span class="linenos">4259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4264"><a href="#L-4264"><span class="linenos">4264</span></a>
-</span><span id="L-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a>
-</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</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-4270"><a href="#L-4270"><span class="linenos">4270</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-4271"><a href="#L-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="L-4272"><a href="#L-4272"><span class="linenos">4272</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-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">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
+</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</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-4264"><a href="#L-4264"><span class="linenos">4264</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-4265"><a href="#L-4265"><span class="linenos">4265</span></a>
+</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="k">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
+</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
+</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a>
+</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
+</span><span id="L-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="k">if</span> <span class="bp">self</span><span 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-4273"><a href="#L-4273"><span class="linenos">4273</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-4274"><a href="#L-4274"><span class="linenos">4274</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4275"><a href="#L-4275"><span class="linenos">4275</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-4276"><a href="#L-4276"><span class="linenos">4276</span></a>
-</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="k">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-4278"><a href="#L-4278"><span class="linenos">4278</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-4279"><a href="#L-4279"><span class="linenos">4279</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
-</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a>
-</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-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="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
+</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
</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">_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-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4286"><a href="#L-4286"><span class="linenos">4286</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-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_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
-</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</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-4290"><a href="#L-4290"><span class="linenos">4290</span></a>
-</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</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-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4293"><a href="#L-4293"><span class="linenos">4293</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-4294"><a href="#L-4294"><span class="linenos">4294</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</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-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="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-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_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-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</span></a>
-</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</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-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4298"><a href="#L-4298"><span class="linenos">4298</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4299"><a href="#L-4299"><span class="linenos">4299</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-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">_parse_var</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">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-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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</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-4306"><a href="#L-4306"><span class="linenos">4306</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-4307"><a href="#L-4307"><span class="linenos">4307</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-4308"><a href="#L-4308"><span class="linenos">4308</span></a> <span class="p">):</span>
-</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-4310"><a href="#L-4310"><span class="linenos">4310</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-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 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-4313"><a href="#L-4313"><span class="linenos">4313</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-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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4297"><a href="#L-4297"><span class="linenos">4297</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
+</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="p">)</span>
+</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a>
+</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</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-4305"><a href="#L-4305"><span class="linenos">4305</span></a>
+</span><span id="L-4306"><a href="#L-4306"><span class="linenos">4306</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-4307"><a href="#L-4307"><span class="linenos">4307</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-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">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</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-4311"><a href="#L-4311"><span class="linenos">4311</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a>
-</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">def</span> <span class="nf">_parse_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-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-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_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-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
-</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</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-4324"><a href="#L-4324"><span class="linenos">4324</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-4325"><a href="#L-4325"><span class="linenos">4325</span></a>
-</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="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-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4328"><a href="#L-4328"><span class="linenos">4328</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-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4331"><a href="#L-4331"><span class="linenos">4331</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-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">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-4334"><a href="#L-4334"><span class="linenos">4334</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
-</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</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-4336"><a href="#L-4336"><span class="linenos">4336</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-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">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-4320"><a href="#L-4320"><span class="linenos">4320</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="bp">self</span><span 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-4323"><a href="#L-4323"><span class="linenos">4323</span></a> <span class="n">this</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-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a> <span class="p">)</span>
+</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</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-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="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</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-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</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-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a>
-</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
-</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</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-4340"><a href="#L-4340"><span class="linenos">4340</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_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><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">_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-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a>
+</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</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">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-4345"><a href="#L-4345"><span class="linenos">4345</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-4346"><a href="#L-4346"><span class="linenos">4346</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-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="k">if</span> <span class="n">placeholder</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="n">placeholder</span>
-</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</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-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a>
-</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</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-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4356"><a href="#L-4356"><span class="linenos">4356</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-4357"><a href="#L-4357"><span class="linenos">4357</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-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</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-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</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-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="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="bp">self</span><span 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-4354"><a href="#L-4354"><span class="linenos">4354</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-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</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-4358"><a href="#L-4358"><span class="linenos">4358</span></a>
-</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="k">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-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4362"><a href="#L-4362"><span class="linenos">4362</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4363"><a href="#L-4363"><span class="linenos">4363</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-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="L-4359"><a href="#L-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="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="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-4361"><a href="#L-4361"><span class="linenos">4361</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-4362"><a href="#L-4362"><span class="linenos">4362</span></a> <span class="p">)</span>
+</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a>
+</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</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-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">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
-</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</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-4368"><a href="#L-4368"><span class="linenos">4368</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-4369"><a href="#L-4369"><span class="linenos">4369</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-4370"><a href="#L-4370"><span class="linenos">4370</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-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">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-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</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-4375"><a href="#L-4375"><span class="linenos">4375</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-4376"><a href="#L-4376"><span class="linenos">4376</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-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="k">return</span> <span class="n">items</span>
-</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a>
-</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
-</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</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-4382"><a href="#L-4382"><span class="linenos">4382</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</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-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">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-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="n">this</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-4387"><a href="#L-4387"><span class="linenos">4387</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-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</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-4390"><a href="#L-4390"><span class="linenos">4390</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-4391"><a href="#L-4391"><span class="linenos">4391</span></a> <span class="p">)</span>
-</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a>
-</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">return</span> <span class="n">this</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 class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
-</span><span id="L-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="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</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-4401"><a href="#L-4401"><span class="linenos">4401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
-</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
-</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="p">)</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">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
-</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
-</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</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-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
-</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</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-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="k">return</span> <span class="n">parse_result</span>
+</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</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-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="k">if</span> <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-4368"><a href="#L-4368"><span class="linenos">4368</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a>
+</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
+</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</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-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 class="k">if</span> <span class="n">kind</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">_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-4375"><a href="#L-4375"><span class="linenos">4375</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-4376"><a href="#L-4376"><span class="linenos">4376</span></a> <span class="bp">self</span><span 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-4377"><a href="#L-4377"><span class="linenos">4377</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-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="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-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</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-4383"><a href="#L-4383"><span class="linenos">4383</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-4384"><a href="#L-4384"><span class="linenos">4384</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-4385"><a href="#L-4385"><span class="linenos">4385</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-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="p">)</span>
+</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="n">spec</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a>
+</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</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-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</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-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a> <span class="p">)</span>
+</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a>
+</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
+</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a>
+</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a> <span class="k">return</span> <span class="n">window</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">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a>
-</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</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-4414"><a href="#L-4414"><span class="linenos">4414</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-4415"><a href="#L-4415"><span class="linenos">4415</span></a> <span class="bp">self</span><span 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-4416"><a href="#L-4416"><span class="linenos">4416</span></a>
-</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <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="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-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a> <span class="p">)</span>
-</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a>
-</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</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-4430"><a href="#L-4430"><span class="linenos">4430</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-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="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-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
+</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
+</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</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-4422"><a href="#L-4422"><span class="linenos">4422</span></a> <span class="p">),</span>
+</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <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="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</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-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</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-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 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-4432"><a href="#L-4432"><span class="linenos">4432</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a>
-</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</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-4438"><a href="#L-4438"><span class="linenos">4438</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-4439"><a href="#L-4439"><span class="linenos">4439</span></a>
-</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</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-4442"><a href="#L-4442"><span class="linenos">4442</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4443"><a href="#L-4443"><span class="linenos">4443</span></a> <span class="k">break</span>
+</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4435"><a href="#L-4435"><span class="linenos">4435</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-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</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-4439"><a href="#L-4439"><span class="linenos">4439</span></a> <span class="p">)</span>
+</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</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-4441"><a href="#L-4441"><span class="linenos">4441</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a>
+</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a> <span class="n">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-4444"><a href="#L-4444"><span class="linenos">4444</span></a>
-</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4446"><a href="#L-4446"><span class="linenos">4446</span></a>
-</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</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-4451"><a href="#L-4451"><span class="linenos">4451</span></a>
-</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a> <span class="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-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="k">if</span> <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-4455"><a href="#L-4455"><span class="linenos">4455</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-4456"><a href="#L-4456"><span class="linenos">4456</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-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="k">if</span> <span class="bp">self</span><span 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-4459"><a href="#L-4459"><span class="linenos">4459</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-4460"><a href="#L-4460"><span class="linenos">4460</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-4461"><a href="#L-4461"><span class="linenos">4461</span></a>
-</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4464"><a href="#L-4464"><span class="linenos">4464</span></a>
-</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_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-4468"><a href="#L-4468"><span class="linenos">4468</span></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-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="k">if</span> <span class="n">alias</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="bp">self</span><span 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-4447"><a href="#L-4447"><span class="linenos">4447</span></a>
+</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="k">return</span> <span class="n">this</span>
+</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">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</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-4453"><a href="#L-4453"><span class="linenos">4453</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-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</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-4456"><a href="#L-4456"><span class="linenos">4456</span></a>
+</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a>
+</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</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-4461"><a href="#L-4461"><span class="linenos">4461</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-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
+</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a>
+</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a>
+</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a> <span class="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-4467"><a href="#L-4467"><span class="linenos">4467</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4468"><a href="#L-4468"><span class="linenos">4468</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-4469"><a href="#L-4469"><span class="linenos">4469</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-4470"><a href="#L-4470"><span class="linenos">4470</span></a>
-</span><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="bp">self</span><span 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-4472"><a href="#L-4472"><span class="linenos">4472</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-4473"><a href="#L-4473"><span class="linenos">4473</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-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">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</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-4477"><a href="#L-4477"><span class="linenos">4477</span></a>
-</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4480"><a href="#L-4480"><span class="linenos">4480</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-4481"><a href="#L-4481"><span class="linenos">4481</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-4482"><a href="#L-4482"><span class="linenos">4482</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-4483"><a href="#L-4483"><span class="linenos">4483</span></a> <span class="p">)</span>
-</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</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-4485"><a href="#L-4485"><span class="linenos">4485</span></a>
-</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-4487"><a href="#L-4487"><span class="linenos">4487</span></a>
-</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</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-4490"><a href="#L-4490"><span class="linenos">4490</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-4491"><a href="#L-4491"><span class="linenos">4491</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-4492"><a href="#L-4492"><span class="linenos">4492</span></a> <span class="k">return</span> <span class="n">drop</span>
-</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a>
-</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
-</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="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-4497"><a href="#L-4497"><span class="linenos">4497</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-4498"><a href="#L-4498"><span class="linenos">4498</span></a> <span class="p">)</span>
-</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a>
-</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
-</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</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-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
+</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</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-4473"><a href="#L-4473"><span class="linenos">4473</span></a>
+</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a> <span class="k">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-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4476"><a href="#L-4476"><span class="linenos">4476</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4477"><a href="#L-4477"><span class="linenos">4477</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a>
+</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="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-4480"><a href="#L-4480"><span class="linenos">4480</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
+</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4482"><a href="#L-4482"><span class="linenos">4482</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-4483"><a href="#L-4483"><span class="linenos">4483</span></a>
+</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</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-4486"><a href="#L-4486"><span class="linenos">4486</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4487"><a href="#L-4487"><span class="linenos">4487</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</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-4489"><a href="#L-4489"><span class="linenos">4489</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-4490"><a href="#L-4490"><span class="linenos">4490</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-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="p">):</span>
+</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4493"><a href="#L-4493"><span class="linenos">4493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a>
+</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</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-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</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-4499"><a href="#L-4499"><span class="linenos">4499</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a>
+</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</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-4502"><a href="#L-4502"><span class="linenos">4502</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-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="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-4505"><a href="#L-4505"><span class="linenos">4505</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a>
-</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="k">if</span> <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-4508"><a href="#L-4508"><span class="linenos">4508</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-4509"><a href="#L-4509"><span class="linenos">4509</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-4510"><a href="#L-4510"><span class="linenos">4510</span></a>
-</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</span></a> <span class="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-4512"><a href="#L-4512"><span class="linenos">4512</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-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="p">)</span>
-</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a>
-</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</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-4516"><a href="#L-4516"><span class="linenos">4516</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-4517"><a href="#L-4517"><span class="linenos">4517</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-4518"><a href="#L-4518"><span class="linenos">4518</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-4519"><a href="#L-4519"><span class="linenos">4519</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-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 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-4525"><a href="#L-4525"><span class="linenos">4525</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-4504"><a href="#L-4504"><span class="linenos">4504</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-4505"><a href="#L-4505"><span class="linenos">4505</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4506"><a href="#L-4506"><span class="linenos">4506</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-4507"><a href="#L-4507"><span class="linenos">4507</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-4508"><a href="#L-4508"><span class="linenos">4508</span></a>
+</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a> <span class="k">def</span> <span class="nf">_parse_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-4510"><a href="#L-4510"><span class="linenos">4510</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
+</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</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-4512"><a href="#L-4512"><span class="linenos">4512</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4513"><a href="#L-4513"><span class="linenos">4513</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-4514"><a href="#L-4514"><span class="linenos">4514</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-4515"><a href="#L-4515"><span class="linenos">4515</span></a>
+</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</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-4517"><a href="#L-4517"><span class="linenos">4517</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4518"><a href="#L-4518"><span class="linenos">4518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4519"><a href="#L-4519"><span class="linenos">4519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a>
+</span><span id="L-4521"><a href="#L-4521"><span class="linenos">4521</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
+</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</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-4523"><a href="#L-4523"><span class="linenos">4523</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_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a> <span class="bp">self</span><span 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-4525"><a href="#L-4525"><span class="linenos">4525</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4526"><a href="#L-4526"><span class="linenos">4526</span></a>
-</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</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-4528"><a href="#L-4528"><span class="linenos">4528</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-4529"><a href="#L-4529"><span class="linenos">4529</span></a>
-</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="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-4531"><a href="#L-4531"><span class="linenos">4531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-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="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
-</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a> <span class="bp">self</span><span 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-4535"><a href="#L-4535"><span class="linenos">4535</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-4536"><a href="#L-4536"><span class="linenos">4536</span></a>
-</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</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-4538"><a href="#L-4538"><span class="linenos">4538</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4539"><a href="#L-4539"><span class="linenos">4539</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-4540"><a href="#L-4540"><span class="linenos">4540</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-4527"><a href="#L-4527"><span class="linenos">4527</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-4528"><a href="#L-4528"><span class="linenos">4528</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-4529"><a href="#L-4529"><span class="linenos">4529</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-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</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-4533"><a href="#L-4533"><span class="linenos">4533</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a>
+</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="k">def</span> <span class="nf">_parse_except</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4537"><a href="#L-4537"><span class="linenos">4537</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4538"><a href="#L-4538"><span class="linenos">4538</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4539"><a href="#L-4539"><span class="linenos">4539</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4540"><a href="#L-4540"><span class="linenos">4540</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-4541"><a href="#L-4541"><span class="linenos">4541</span></a>
-</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="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-4544"><a href="#L-4544"><span class="linenos">4544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</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-4547"><a href="#L-4547"><span class="linenos">4547</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-4548"><a href="#L-4548"><span class="linenos">4548</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-4549"><a href="#L-4549"><span class="linenos">4549</span></a> <span class="p">)</span>
-</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</span></a>
-</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</span></a> <span class="k">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-4552"><a href="#L-4552"><span class="linenos">4552</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-4553"><a href="#L-4553"><span class="linenos">4553</span></a>
-</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</span></a> <span class="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-4555"><a href="#L-4555"><span class="linenos">4555</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4556"><a href="#L-4556"><span class="linenos">4556</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-4557"><a href="#L-4557"><span class="linenos">4557</span></a>
-</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a> <span class="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-4559"><a href="#L-4559"><span class="linenos">4559</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-4542"><a href="#L-4542"><span class="linenos">4542</span></a> <span class="k">def</span> <span class="nf">_parse_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4544"><a href="#L-4544"><span class="linenos">4544</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4546"><a href="#L-4546"><span class="linenos">4546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-4547"><a href="#L-4547"><span class="linenos">4547</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</span></a>
+</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</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-4551"><a href="#L-4551"><span class="linenos">4551</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</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-4553"><a href="#L-4553"><span class="linenos">4553</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-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="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-4556"><a href="#L-4556"><span class="linenos">4556</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</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-4558"><a href="#L-4558"><span class="linenos">4558</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-4559"><a href="#L-4559"><span class="linenos">4559</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-4560"><a href="#L-4560"><span class="linenos">4560</span></a>
-</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="k">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">RenameTable</span><span class="p">:</span>
-</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-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="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</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-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="k">return</span> <span class="n">items</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="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
+</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</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-4565"><a href="#L-4565"><span class="linenos">4565</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</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-4567"><a href="#L-4567"><span class="linenos">4567</span></a>
-</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4569"><a href="#L-4569"><span class="linenos">4569</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-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="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-4572"><a href="#L-4572"><span class="linenos">4572</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-4573"><a href="#L-4573"><span class="linenos">4573</span></a>
-</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a>
-</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a> <span class="n">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-4578"><a href="#L-4578"><span class="linenos">4578</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-4579"><a href="#L-4579"><span class="linenos">4579</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-4568"><a href="#L-4568"><span class="linenos">4568</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-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</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-4571"><a href="#L-4571"><span class="linenos">4571</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</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-4573"><a href="#L-4573"><span class="linenos">4573</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-4574"><a href="#L-4574"><span class="linenos">4574</span></a> <span class="p">)</span>
+</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</span></a>
+</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a>
+</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4579"><a href="#L-4579"><span class="linenos">4579</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</span></a>
-</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="k">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-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="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-4583"><a href="#L-4583"><span class="linenos">4583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a> <span class="p">)</span>
-</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</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-4589"><a href="#L-4589"><span class="linenos">4589</span></a>
-</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
-</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</span></a> <span class="bp">self</span><span 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-4592"><a href="#L-4592"><span class="linenos">4592</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-4593"><a href="#L-4593"><span class="linenos">4593</span></a>
-</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4595"><a href="#L-4595"><span class="linenos">4595</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-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4583"><a href="#L-4583"><span class="linenos">4583</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
+</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
+</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="p">)</span>
+</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a>
+</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
+</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
+</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</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-4592"><a href="#L-4592"><span class="linenos">4592</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-4593"><a href="#L-4593"><span class="linenos">4593</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
+</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a>
-</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="bp">self</span><span 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-4598"><a href="#L-4598"><span class="linenos">4598</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-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</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-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">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</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-4602"><a href="#L-4602"><span class="linenos">4602</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-4603"><a href="#L-4603"><span class="linenos">4603</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-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="kc">False</span>
-</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="k">if</span> <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-4607"><a href="#L-4607"><span class="linenos">4607</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-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="p">)</span>
-</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a> <span class="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-4610"><a href="#L-4610"><span class="linenos">4610</span></a>
-</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a> <span class="bp">self</span><span 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-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">if</span> <span class="bp">self</span><span 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-4614"><a href="#L-4614"><span class="linenos">4614</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-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</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-4617"><a href="#L-4617"><span class="linenos">4617</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</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-4619"><a href="#L-4619"><span class="linenos">4619</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</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-4621"><a href="#L-4621"><span class="linenos">4621</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-4622"><a href="#L-4622"><span class="linenos">4622</span></a> <span class="p">)</span>
-</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</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-4624"><a href="#L-4624"><span class="linenos">4624</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-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</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-4627"><a href="#L-4627"><span class="linenos">4627</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</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-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</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-4631"><a href="#L-4631"><span class="linenos">4631</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-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="p">)</span>
-</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</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-4634"><a href="#L-4634"><span class="linenos">4634</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-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a>
-</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="L-4641"><a href="#L-4641"><span class="linenos">4641</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="p">)</span>
-</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a> <span class="p">)</span>
+</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="p">)</span>
+</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a>
+</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</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-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="p">)</span>
+</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a>
+</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</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-4613"><a href="#L-4613"><span class="linenos">4613</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-4614"><a href="#L-4614"><span class="linenos">4614</span></a>
+</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</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-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 class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</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-4621"><a href="#L-4621"><span class="linenos">4621</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-4622"><a href="#L-4622"><span class="linenos">4622</span></a>
+</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</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-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a> <span class="k">break</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="k">return</span> <span class="bp">self</span><span 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-4629"><a href="#L-4629"><span class="linenos">4629</span></a>
+</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</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-4634"><a href="#L-4634"><span class="linenos">4634</span></a>
+</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4636"><a href="#L-4636"><span class="linenos">4636</span></a>
+</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a> <span class="k">if</span> <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-4638"><a href="#L-4638"><span class="linenos">4638</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-4639"><a href="#L-4639"><span class="linenos">4639</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-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 class="k">if</span> <span class="bp">self</span><span 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-4642"><a href="#L-4642"><span class="linenos">4642</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-4643"><a href="#L-4643"><span class="linenos">4643</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-4644"><a href="#L-4644"><span class="linenos">4644</span></a>
+</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="k">if</span> <span class="n">is_rollback</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="bp">self</span><span 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-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="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-4649"><a href="#L-4649"><span class="linenos">4649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</span>
-</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a> <span class="p">)</span>
-</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a>
-</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a> <span class="k">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-4657"><a href="#L-4657"><span class="linenos">4657</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
-</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</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-4660"><a href="#L-4660"><span class="linenos">4660</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</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-4665"><a href="#L-4665"><span class="linenos">4665</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</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-4667"><a href="#L-4667"><span class="linenos">4667</span></a>
-</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</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-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-4651"><a href="#L-4651"><span class="linenos">4651</span></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-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a>
+</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a> <span class="bp">self</span><span 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-4655"><a href="#L-4655"><span class="linenos">4655</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-4656"><a href="#L-4656"><span class="linenos">4656</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
+</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a>
+</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</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-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="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</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-4663"><a href="#L-4663"><span class="linenos">4663</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-4664"><a href="#L-4664"><span class="linenos">4664</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-4665"><a href="#L-4665"><span class="linenos">4665</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-4666"><a href="#L-4666"><span class="linenos">4666</span></a> <span class="p">)</span>
+</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</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-4668"><a href="#L-4668"><span class="linenos">4668</span></a>
+</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-4670"><a href="#L-4670"><span class="linenos">4670</span></a>
-</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="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-4672"><a href="#L-4672"><span class="linenos">4672</span></a>
-</span><span id="L-4673"><a href="#L-4673"><span class="linenos">4673</span></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-4674"><a href="#L-4674"><span class="linenos">4674</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-4675"><a href="#L-4675"><span class="linenos">4675</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</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-4673"><a href="#L-4673"><span class="linenos">4673</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-4674"><a href="#L-4674"><span class="linenos">4674</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-4675"><a href="#L-4675"><span class="linenos">4675</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a>
-</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</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-4678"><a href="#L-4678"><span class="linenos">4678</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
-</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a>
-</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a>
-</span><span id="L-4682"><a href="#L-4682"><span class="linenos">4682</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-4683"><a href="#L-4683"><span class="linenos">4683</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-4684"><a href="#L-4684"><span class="linenos">4684</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-4685"><a href="#L-4685"><span class="linenos">4685</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-4686"><a href="#L-4686"><span class="linenos">4686</span></a> <span class="p">)</span>
-</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</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-4691"><a href="#L-4691"><span class="linenos">4691</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-4692"><a href="#L-4692"><span class="linenos">4692</span></a> <span class="p">)</span>
+</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
+</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a> <span class="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-4680"><a href="#L-4680"><span class="linenos">4680</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-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 class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
+</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</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-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="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-4688"><a href="#L-4688"><span class="linenos">4688</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-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 class="k">if</span> <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-4691"><a href="#L-4691"><span class="linenos">4691</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-4692"><a href="#L-4692"><span class="linenos">4692</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-4693"><a href="#L-4693"><span class="linenos">4693</span></a>
-</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</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-4695"><a href="#L-4695"><span class="linenos">4695</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
-</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</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-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="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-4695"><a href="#L-4695"><span class="linenos">4695</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-4696"><a href="#L-4696"><span class="linenos">4696</span></a> <span class="p">)</span>
</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a>
-</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</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-4700"><a href="#L-4700"><span class="linenos">4700</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
-</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <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 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-4705"><a href="#L-4705"><span class="linenos">4705</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-4706"><a href="#L-4706"><span class="linenos">4706</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-4707"><a href="#L-4707"><span class="linenos">4707</span></a>
-</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</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-4699"><a href="#L-4699"><span class="linenos">4699</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-4700"><a href="#L-4700"><span class="linenos">4700</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-4701"><a href="#L-4701"><span class="linenos">4701</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-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a>
+</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4706"><a href="#L-4706"><span class="linenos">4706</span></a>
+</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</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-4709"><a href="#L-4709"><span class="linenos">4709</span></a>
-</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
-</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</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-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="k">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-4713"><a href="#L-4713"><span class="linenos">4713</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
-</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</span></a>
-</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="k">def</span> <span class="nf">_parse_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-4717"><a href="#L-4717"><span class="linenos">4717</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-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</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-4720"><a href="#L-4720"><span class="linenos">4720</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-4721"><a href="#L-4721"><span class="linenos">4721</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-4710"><a href="#L-4710"><span class="linenos">4710</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-4711"><a href="#L-4711"><span class="linenos">4711</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-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="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-4714"><a href="#L-4714"><span class="linenos">4714</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
+</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</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_field_def</span><span class="p">)</span>
+</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a>
+</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</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-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="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
+</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</span></a> <span class="bp">self</span><span 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-4721"><a href="#L-4721"><span class="linenos">4721</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-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="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
-</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
-</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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a>
-</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-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="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a> <span class="k">break</span>
-</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
-</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a> <span class="bp">self</span><span 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-4738"><a href="#L-4738"><span class="linenos">4738</span></a>
-</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</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-4740"><a href="#L-4740"><span class="linenos">4740</span></a>
-</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</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">this</span><span class="p">,</span>
-</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
-</span><span id="L-4746"><a href="#L-4746"><span class="linenos">4746</span></a> <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">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
-</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</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-4750"><a href="#L-4750"><span class="linenos">4750</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
-</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
-</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</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-4759"><a href="#L-4759"><span class="linenos">4759</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
-</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</span></a>
-</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</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-4763"><a href="#L-4763"><span class="linenos">4763</span></a> <span class="p">)</span> <span class="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-4764"><a href="#L-4764"><span class="linenos">4764</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-4765"><a href="#L-4765"><span class="linenos">4765</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</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-4724"><a href="#L-4724"><span class="linenos">4724</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4725"><a href="#L-4725"><span class="linenos">4725</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4726"><a href="#L-4726"><span class="linenos">4726</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4727"><a href="#L-4727"><span class="linenos">4727</span></a>
+</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a> <span class="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-4729"><a href="#L-4729"><span class="linenos">4729</span></a> <span class="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-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
+</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</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-4733"><a href="#L-4733"><span class="linenos">4733</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-4734"><a href="#L-4734"><span class="linenos">4734</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-4735"><a href="#L-4735"><span class="linenos">4735</span></a> <span class="p">)</span>
+</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a>
+</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</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-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="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-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4742"><a href="#L-4742"><span class="linenos">4742</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-4743"><a href="#L-4743"><span class="linenos">4743</span></a>
+</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</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-4745"><a href="#L-4745"><span class="linenos">4745</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-4746"><a href="#L-4746"><span class="linenos">4746</span></a>
+</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="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">RenameTable</span><span class="p">:</span>
+</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</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-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4750"><a href="#L-4750"><span class="linenos">4750</span></a>
+</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</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-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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4755"><a href="#L-4755"><span class="linenos">4755</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-4756"><a href="#L-4756"><span class="linenos">4756</span></a>
+</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</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-4758"><a href="#L-4758"><span class="linenos">4758</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-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="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</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 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-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-4765"><a href="#L-4765"><span class="linenos">4765</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-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="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-4768"><a href="#L-4768"><span class="linenos">4768</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</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-4772"><a href="#L-4772"><span class="linenos">4772</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-4773"><a href="#L-4773"><span class="linenos">4773</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-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="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</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-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="k">break</span>
+</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</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-4768"><a href="#L-4768"><span class="linenos">4768</span></a> <span class="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-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a> <span class="p">)</span>
+</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</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-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="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
+</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="bp">self</span><span 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-4778"><a href="#L-4778"><span class="linenos">4778</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-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">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</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-4782"><a href="#L-4782"><span class="linenos">4782</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a>
-</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</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-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a>
-</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</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-4789"><a href="#L-4789"><span class="linenos">4789</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a>
-</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="k">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-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="k">return</span> <span class="kc">True</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 class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a>
-</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</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-4800"><a href="#L-4800"><span class="linenos">4800</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-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a>
-</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</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-4804"><a href="#L-4804"><span class="linenos">4804</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="k">return</span> <span class="kc">True</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">return</span> <span class="kc">None</span>
-</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a>
-</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</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-4811"><a href="#L-4811"><span class="linenos">4811</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-4812"><a href="#L-4812"><span class="linenos">4812</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a>
-</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</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-4815"><a href="#L-4815"><span class="linenos">4815</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a>
-</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a> <span class="k">return</span> <span class="kc">None</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 class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</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-4824"><a href="#L-4824"><span class="linenos">4824</span></a>
-</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</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-4828"><a href="#L-4828"><span class="linenos">4828</span></a>
-</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a> <span class="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-4830"><a href="#L-4830"><span class="linenos">4830</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-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a>
-</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</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-4837"><a href="#L-4837"><span class="linenos">4837</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-4838"><a href="#L-4838"><span class="linenos">4838</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-4839"><a href="#L-4839"><span class="linenos">4839</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-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="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-4843"><a href="#L-4843"><span class="linenos">4843</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-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="bp">self</span><span 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-4784"><a href="#L-4784"><span class="linenos">4784</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-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="bp">self</span><span 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-4787"><a href="#L-4787"><span class="linenos">4787</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-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 class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</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-4791"><a href="#L-4791"><span class="linenos">4791</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-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
+</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="kc">False</span>
+</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="k">if</span> <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-4796"><a href="#L-4796"><span class="linenos">4796</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-4797"><a href="#L-4797"><span class="linenos">4797</span></a> <span class="p">)</span>
+</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</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-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="bp">self</span><span 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-4801"><a href="#L-4801"><span class="linenos">4801</span></a>
+</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4803"><a href="#L-4803"><span class="linenos">4803</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-4804"><a href="#L-4804"><span class="linenos">4804</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</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-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</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-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</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-4810"><a href="#L-4810"><span class="linenos">4810</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-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="p">)</span>
+</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a> <span 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-4813"><a href="#L-4813"><span class="linenos">4813</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-4814"><a href="#L-4814"><span class="linenos">4814</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</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-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</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-4818"><a href="#L-4818"><span class="linenos">4818</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</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-4820"><a href="#L-4820"><span class="linenos">4820</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-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="p">)</span>
+</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</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-4823"><a href="#L-4823"><span class="linenos">4823</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-4824"><a href="#L-4824"><span class="linenos">4824</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
+</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="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a> <span class="p">)</span>
+</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a> <span class="p">)</span>
+</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a>
+</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a> <span class="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-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
+</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
+</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</span>
+</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a> <span class="p">)</span>
</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a>
-</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</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-4846"><a href="#L-4846"><span class="linenos">4846</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-4847"><a href="#L-4847"><span class="linenos">4847</span></a>
-</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a>
-</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a> <span class="o">...</span>
-</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="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
-</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</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-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a> <span class="o">...</span>
+</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</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-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
+</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</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-4849"><a href="#L-4849"><span class="linenos">4849</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4851"><a href="#L-4851"><span class="linenos">4851</span></a>
+</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</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-4854"><a href="#L-4854"><span class="linenos">4854</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</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-4856"><a href="#L-4856"><span class="linenos">4856</span></a>
+</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="k">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-4858"><a href="#L-4858"><span class="linenos">4858</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-4859"><a href="#L-4859"><span class="linenos">4859</span></a>
-</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a> <span class="k">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-4861"><a href="#L-4861"><span class="linenos">4861</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-4862"><a href="#L-4862"><span class="linenos">4862</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-4863"><a href="#L-4863"><span class="linenos">4863</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-4864"><a href="#L-4864"><span class="linenos">4864</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-4865"><a href="#L-4865"><span class="linenos">4865</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-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a> <span class="p">)</span>
-</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a>
-</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</span></a>
-</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
-</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a>
-</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="k">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-4879"><a href="#L-4879"><span class="linenos">4879</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-4880"><a href="#L-4880"><span class="linenos">4880</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-4881"><a href="#L-4881"><span class="linenos">4881</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-4860"><a href="#L-4860"><span class="linenos">4860</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-4861"><a href="#L-4861"><span class="linenos">4861</span></a>
+</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></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-4863"><a href="#L-4863"><span class="linenos">4863</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-4864"><a href="#L-4864"><span class="linenos">4864</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a>
+</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</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-4867"><a href="#L-4867"><span class="linenos">4867</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a>
+</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a>
+</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</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-4872"><a href="#L-4872"><span class="linenos">4872</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-4873"><a href="#L-4873"><span class="linenos">4873</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-4874"><a href="#L-4874"><span class="linenos">4874</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-4875"><a href="#L-4875"><span class="linenos">4875</span></a> <span class="p">)</span>
+</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="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-4877"><a href="#L-4877"><span class="linenos">4877</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</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-4880"><a href="#L-4880"><span class="linenos">4880</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-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="p">)</span>
</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a>
-</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="k">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-4884"><a href="#L-4884"><span class="linenos">4884</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-4885"><a href="#L-4885"><span class="linenos">4885</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-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <span class="k">break</span>
-</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</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-4888"><a href="#L-4888"><span class="linenos">4888</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</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-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</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-4893"><a href="#L-4893"><span class="linenos">4893</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</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-4884"><a href="#L-4884"><span class="linenos">4884</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
+</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</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-4886"><a href="#L-4886"><span class="linenos">4886</span></a>
+</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</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-4889"><a href="#L-4889"><span class="linenos">4889</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
+</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="p">)</span>
+</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a>
+</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a> <span class="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-4894"><a href="#L-4894"><span class="linenos">4894</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-4895"><a href="#L-4895"><span class="linenos">4895</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-4896"><a href="#L-4896"><span class="linenos">4896</span></a>
+</span><span id="L-4897"><a href="#L-4897"><span class="linenos">4897</span></a> <span class="k">return</span> <span class="n">set_</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="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
+</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</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-4901"><a href="#L-4901"><span class="linenos">4901</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4902"><a href="#L-4902"><span class="linenos">4902</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
+</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a>
+</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">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-4906"><a href="#L-4906"><span class="linenos">4906</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-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</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-4909"><a href="#L-4909"><span class="linenos">4909</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-4910"><a href="#L-4910"><span class="linenos">4910</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-4911"><a href="#L-4911"><span class="linenos">4911</span></a>
+</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
+</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="n">settings</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</span></a>
+</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4919"><a href="#L-4919"><span class="linenos">4919</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4922"><a href="#L-4922"><span class="linenos">4922</span></a>
+</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a> <span class="k">break</span>
+</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
+</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a> <span class="bp">self</span><span 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-4927"><a href="#L-4927"><span class="linenos">4927</span></a>
+</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a>
+</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
+</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
+</span><span id="L-4935"><a href="#L-4935"><span class="linenos">4935</span></a> <span class="p">)</span>
+</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a>
+</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
+</span><span id="L-4938"><a href="#L-4938"><span class="linenos">4938</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-4939"><a href="#L-4939"><span class="linenos">4939</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
+</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
+</span><span id="L-4941"><a href="#L-4941"><span class="linenos">4941</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="L-4943"><a href="#L-4943"><span class="linenos">4943</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</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-4948"><a href="#L-4948"><span class="linenos">4948</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a>
+</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</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">Comprehension</span><span class="p">:</span>
+</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a> <span class="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-4956"><a href="#L-4956"><span class="linenos">4956</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
+</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
+</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a> <span class="p">)</span>
+</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a>
+</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</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-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="p">)</span> <span class="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-4966"><a href="#L-4966"><span class="linenos">4966</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-4967"><a href="#L-4967"><span class="linenos">4967</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a>
+</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</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-4970"><a href="#L-4970"><span class="linenos">4970</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a> <span class="c1"># The current token might be multiple words</span>
+</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</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-4974"><a href="#L-4974"><span class="linenos">4974</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-4975"><a href="#L-4975"><span class="linenos">4975</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-4976"><a href="#L-4976"><span class="linenos">4976</span></a>
+</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</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-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</span></a> <span class="k">break</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 class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</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-4984"><a href="#L-4984"><span class="linenos">4984</span></a> <span class="k">return</span> <span class="n">subparser</span>
+</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a>
+</span><span id="L-4986"><a href="#L-4986"><span class="linenos">4986</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-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a>
+</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</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-4991"><a href="#L-4991"><span class="linenos">4991</span></a> <span class="k">return</span> <span class="kc">None</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">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-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a> <span class="k">return</span> <span class="kc">True</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="k">return</span> <span class="kc">None</span>
+</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a>
+</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="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-5002"><a href="#L-5002"><span class="linenos">5002</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-5003"><a href="#L-5003"><span class="linenos">5003</span></a> <span class="k">return</span> <span class="kc">None</span>
+</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">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-5006"><a href="#L-5006"><span class="linenos">5006</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a> <span class="k">return</span> <span class="kc">True</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">return</span> <span class="kc">None</span>
+</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a>
+</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</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-5013"><a href="#L-5013"><span class="linenos">5013</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-5014"><a href="#L-5014"><span class="linenos">5014</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a>
+</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="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-5017"><a href="#L-5017"><span class="linenos">5017</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</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-5019"><a href="#L-5019"><span class="linenos">5019</span></a> <span class="k">return</span> <span class="kc">True</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="k">return</span> <span class="kc">None</span>
+</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a>
+</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</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-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="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</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-5030"><a href="#L-5030"><span class="linenos">5030</span></a>
+</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</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-5032"><a href="#L-5032"><span class="linenos">5032</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-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="k">return</span> <span class="kc">False</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="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-5039"><a href="#L-5039"><span class="linenos">5039</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-5040"><a href="#L-5040"><span class="linenos">5040</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-5041"><a href="#L-5041"><span class="linenos">5041</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</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-5045"><a href="#L-5045"><span class="linenos">5045</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</span></a>
+</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</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-5048"><a href="#L-5048"><span class="linenos">5048</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-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="k">return</span> <span class="kc">True</span>
+</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a>
+</span><span id="L-5052"><a href="#L-5052"><span class="linenos">5052</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a> <span class="o">...</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="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
+</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</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-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="o">...</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">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-5063"><a href="#L-5063"><span class="linenos">5063</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-5064"><a href="#L-5064"><span class="linenos">5064</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-5065"><a href="#L-5065"><span class="linenos">5065</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-5066"><a href="#L-5066"><span class="linenos">5066</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-5067"><a href="#L-5067"><span class="linenos">5067</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-5068"><a href="#L-5068"><span class="linenos">5068</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="p">)</span>
+</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a>
+</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a> <span class="k">return</span> <span class="n">this</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="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
+</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="L-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">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-5081"><a href="#L-5081"><span class="linenos">5081</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-5082"><a href="#L-5082"><span class="linenos">5082</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-5083"><a href="#L-5083"><span class="linenos">5083</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-5084"><a href="#L-5084"><span class="linenos">5084</span></a>
+</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a> <span class="k">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-5086"><a href="#L-5086"><span class="linenos">5086</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-5087"><a href="#L-5087"><span class="linenos">5087</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-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="k">break</span>
+</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</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-5090"><a href="#L-5090"><span class="linenos">5090</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</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-5092"><a href="#L-5092"><span class="linenos">5092</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</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-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -5381,4795 +5604,4997 @@
</span><span id="Parser-103"><a href="#Parser-103"><span class="linenos"> 103</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">,</span>
</span><span id="Parser-104"><a href="#Parser-104"><span class="linenos"> 104</span></a> <span class="p">}</span>
</span><span id="Parser-105"><a href="#Parser-105"><span class="linenos"> 105</span></a>
-</span><span id="Parser-106"><a href="#Parser-106"><span class="linenos"> 106</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-107"><a href="#Parser-107"><span class="linenos"> 107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="Parser-108"><a href="#Parser-108"><span class="linenos"> 108</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="Parser-109"><a href="#Parser-109"><span class="linenos"> 109</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
-</span><span id="Parser-110"><a href="#Parser-110"><span class="linenos"> 110</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="Parser-111"><a href="#Parser-111"><span class="linenos"> 111</span></a> <span class="p">}</span>
-</span><span id="Parser-112"><a href="#Parser-112"><span class="linenos"> 112</span></a>
-</span><span id="Parser-113"><a href="#Parser-113"><span class="linenos"> 113</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-114"><a href="#Parser-114"><span class="linenos"> 114</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="Parser-115"><a href="#Parser-115"><span class="linenos"> 115</span></a> <span class="p">}</span>
-</span><span id="Parser-116"><a href="#Parser-116"><span class="linenos"> 116</span></a>
-</span><span id="Parser-117"><a href="#Parser-117"><span class="linenos"> 117</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-118"><a href="#Parser-118"><span class="linenos"> 118</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
-</span><span id="Parser-119"><a href="#Parser-119"><span class="linenos"> 119</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
-</span><span id="Parser-120"><a href="#Parser-120"><span class="linenos"> 120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="Parser-121"><a href="#Parser-121"><span class="linenos"> 121</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="Parser-122"><a href="#Parser-122"><span class="linenos"> 122</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="Parser-123"><a href="#Parser-123"><span class="linenos"> 123</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="Parser-124"><a href="#Parser-124"><span class="linenos"> 124</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="Parser-125"><a href="#Parser-125"><span class="linenos"> 125</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="Parser-126"><a href="#Parser-126"><span class="linenos"> 126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="Parser-127"><a href="#Parser-127"><span class="linenos"> 127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="Parser-128"><a href="#Parser-128"><span class="linenos"> 128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="Parser-129"><a href="#Parser-129"><span class="linenos"> 129</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="Parser-130"><a href="#Parser-130"><span class="linenos"> 130</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="Parser-131"><a href="#Parser-131"><span class="linenos"> 131</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="Parser-132"><a href="#Parser-132"><span class="linenos"> 132</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="Parser-133"><a href="#Parser-133"><span class="linenos"> 133</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="Parser-134"><a href="#Parser-134"><span class="linenos"> 134</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="Parser-135"><a href="#Parser-135"><span class="linenos"> 135</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="Parser-136"><a href="#Parser-136"><span class="linenos"> 136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Parser-137"><a href="#Parser-137"><span class="linenos"> 137</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="Parser-138"><a href="#Parser-138"><span class="linenos"> 138</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="Parser-139"><a href="#Parser-139"><span class="linenos"> 139</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
-</span><span id="Parser-140"><a href="#Parser-140"><span class="linenos"> 140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
-</span><span id="Parser-141"><a href="#Parser-141"><span class="linenos"> 141</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="Parser-142"><a href="#Parser-142"><span class="linenos"> 142</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="Parser-143"><a href="#Parser-143"><span class="linenos"> 143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
-</span><span id="Parser-144"><a href="#Parser-144"><span class="linenos"> 144</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Parser-145"><a href="#Parser-145"><span class="linenos"> 145</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
-</span><span id="Parser-146"><a href="#Parser-146"><span class="linenos"> 146</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="Parser-147"><a href="#Parser-147"><span class="linenos"> 147</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
-</span><span id="Parser-148"><a href="#Parser-148"><span class="linenos"> 148</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
-</span><span id="Parser-149"><a href="#Parser-149"><span class="linenos"> 149</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="Parser-150"><a href="#Parser-150"><span class="linenos"> 150</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Parser-151"><a href="#Parser-151"><span class="linenos"> 151</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="Parser-152"><a href="#Parser-152"><span class="linenos"> 152</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="Parser-153"><a href="#Parser-153"><span class="linenos"> 153</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="Parser-154"><a href="#Parser-154"><span class="linenos"> 154</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="Parser-155"><a href="#Parser-155"><span class="linenos"> 155</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
-</span><span id="Parser-156"><a href="#Parser-156"><span class="linenos"> 156</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
-</span><span id="Parser-157"><a href="#Parser-157"><span class="linenos"> 157</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
-</span><span id="Parser-158"><a href="#Parser-158"><span class="linenos"> 158</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
-</span><span id="Parser-159"><a href="#Parser-159"><span class="linenos"> 159</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
-</span><span id="Parser-160"><a href="#Parser-160"><span class="linenos"> 160</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
-</span><span id="Parser-161"><a href="#Parser-161"><span class="linenos"> 161</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
-</span><span id="Parser-162"><a href="#Parser-162"><span class="linenos"> 162</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
-</span><span id="Parser-163"><a href="#Parser-163"><span class="linenos"> 163</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
-</span><span id="Parser-164"><a href="#Parser-164"><span class="linenos"> 164</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
-</span><span id="Parser-165"><a href="#Parser-165"><span class="linenos"> 165</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
-</span><span id="Parser-166"><a href="#Parser-166"><span class="linenos"> 166</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
-</span><span id="Parser-167"><a href="#Parser-167"><span class="linenos"> 167</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="Parser-168"><a href="#Parser-168"><span class="linenos"> 168</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
-</span><span id="Parser-169"><a href="#Parser-169"><span class="linenos"> 169</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
-</span><span id="Parser-170"><a href="#Parser-170"><span class="linenos"> 170</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
-</span><span id="Parser-171"><a href="#Parser-171"><span class="linenos"> 171</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
-</span><span id="Parser-172"><a href="#Parser-172"><span class="linenos"> 172</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="Parser-173"><a href="#Parser-173"><span class="linenos"> 173</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
-</span><span id="Parser-174"><a href="#Parser-174"><span class="linenos"> 174</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="Parser-175"><a href="#Parser-175"><span class="linenos"> 175</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="Parser-176"><a href="#Parser-176"><span class="linenos"> 176</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="Parser-177"><a href="#Parser-177"><span class="linenos"> 177</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="Parser-178"><a href="#Parser-178"><span class="linenos"> 178</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
-</span><span id="Parser-179"><a href="#Parser-179"><span class="linenos"> 179</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="Parser-180"><a href="#Parser-180"><span class="linenos"> 180</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="Parser-181"><a href="#Parser-181"><span class="linenos"> 181</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
-</span><span id="Parser-182"><a href="#Parser-182"><span class="linenos"> 182</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="Parser-183"><a href="#Parser-183"><span class="linenos"> 183</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="Parser-184"><a href="#Parser-184"><span class="linenos"> 184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="Parser-185"><a href="#Parser-185"><span class="linenos"> 185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="Parser-186"><a href="#Parser-186"><span class="linenos"> 186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="Parser-187"><a href="#Parser-187"><span class="linenos"> 187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
-</span><span id="Parser-188"><a href="#Parser-188"><span class="linenos"> 188</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
-</span><span id="Parser-189"><a href="#Parser-189"><span class="linenos"> 189</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
-</span><span id="Parser-190"><a href="#Parser-190"><span class="linenos"> 190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
-</span><span id="Parser-191"><a href="#Parser-191"><span class="linenos"> 191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="Parser-192"><a href="#Parser-192"><span class="linenos"> 192</span></a> <span class="o">*</span><span class="n">NESTED_TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="Parser-193"><a href="#Parser-193"><span class="linenos"> 193</span></a> <span class="p">}</span>
-</span><span id="Parser-194"><a href="#Parser-194"><span class="linenos"> 194</span></a>
-</span><span id="Parser-195"><a href="#Parser-195"><span class="linenos"> 195</span></a> <span class="n">SUBQUERY_PREDICATES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-196"><a href="#Parser-196"><span class="linenos"> 196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
-</span><span id="Parser-197"><a href="#Parser-197"><span class="linenos"> 197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">All</span><span class="p">,</span>
-</span><span id="Parser-198"><a href="#Parser-198"><span class="linenos"> 198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">,</span>
-</span><span id="Parser-199"><a href="#Parser-199"><span class="linenos"> 199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
-</span><span id="Parser-200"><a href="#Parser-200"><span class="linenos"> 200</span></a> <span class="p">}</span>
-</span><span id="Parser-201"><a href="#Parser-201"><span class="linenos"> 201</span></a>
-</span><span id="Parser-202"><a href="#Parser-202"><span class="linenos"> 202</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-203"><a href="#Parser-203"><span class="linenos"> 203</span></a> <span class="o">*</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
-</span><span id="Parser-204"><a href="#Parser-204"><span class="linenos"> 204</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
-</span><span id="Parser-205"><a href="#Parser-205"><span class="linenos"> 205</span></a> <span class="p">}</span>
-</span><span id="Parser-206"><a href="#Parser-206"><span class="linenos"> 206</span></a>
-</span><span id="Parser-207"><a href="#Parser-207"><span class="linenos"> 207</span></a> <span class="n">DB_CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-208"><a href="#Parser-208"><span class="linenos"> 208</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
-</span><span id="Parser-209"><a href="#Parser-209"><span class="linenos"> 209</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
-</span><span id="Parser-210"><a href="#Parser-210"><span class="linenos"> 210</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="Parser-211"><a href="#Parser-211"><span class="linenos"> 211</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
-</span><span id="Parser-212"><a href="#Parser-212"><span class="linenos"> 212</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="Parser-213"><a href="#Parser-213"><span class="linenos"> 213</span></a> <span class="p">}</span>
-</span><span id="Parser-214"><a href="#Parser-214"><span class="linenos"> 214</span></a>
-</span><span id="Parser-215"><a href="#Parser-215"><span class="linenos"> 215</span></a> <span class="n">CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-216"><a href="#Parser-216"><span class="linenos"> 216</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="Parser-217"><a href="#Parser-217"><span class="linenos"> 217</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
-</span><span id="Parser-218"><a href="#Parser-218"><span class="linenos"> 218</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
-</span><span id="Parser-219"><a href="#Parser-219"><span class="linenos"> 219</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="Parser-220"><a href="#Parser-220"><span class="linenos"> 220</span></a> <span class="o">*</span><span class="n">DB_CREATABLES</span><span class="p">,</span>
-</span><span id="Parser-221"><a href="#Parser-221"><span class="linenos"> 221</span></a> <span class="p">}</span>
-</span><span id="Parser-222"><a href="#Parser-222"><span class="linenos"> 222</span></a>
-</span><span id="Parser-223"><a href="#Parser-223"><span class="linenos"> 223</span></a> <span class="c1"># Tokens that can represent identifiers</span>
-</span><span id="Parser-224"><a href="#Parser-224"><span class="linenos"> 224</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-225"><a href="#Parser-225"><span class="linenos"> 225</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
-</span><span id="Parser-226"><a href="#Parser-226"><span class="linenos"> 226</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="Parser-227"><a href="#Parser-227"><span class="linenos"> 227</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="Parser-228"><a href="#Parser-228"><span class="linenos"> 228</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
-</span><span id="Parser-229"><a href="#Parser-229"><span class="linenos"> 229</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
-</span><span id="Parser-230"><a href="#Parser-230"><span class="linenos"> 230</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Parser-231"><a href="#Parser-231"><span class="linenos"> 231</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
-</span><span id="Parser-232"><a href="#Parser-232"><span class="linenos"> 232</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
-</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">COLLATE</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">COMMAND</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">COMMENT</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">COMMIT</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">CONSTRAINT</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">DEFAULT</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">DELETE</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">DESC</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">DESCRIBE</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">DICTIONARY</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">DIV</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">END</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">EXECUTE</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">ESCAPE</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">FALSE</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">FIRST</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">FILTER</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">FORMAT</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">FULL</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">IS</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">ISNULL</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">INTERVAL</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">KEEP</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">LEFT</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">LOAD</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">MERGE</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">NATURAL</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">NEXT</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">OFFSET</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">ORDINALITY</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">OVERWRITE</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">PARTITION</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">PERCENT</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">PIVOT</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">PRAGMA</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">RANGE</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">REFERENCES</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">RIGHT</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">ROW</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">ROWS</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">SEMI</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">SET</span><span class="p">,</span>
-</span><span id="Parser-275"><a href="#Parser-275"><span class="linenos"> 275</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="Parser-276"><a href="#Parser-276"><span class="linenos"> 276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="Parser-277"><a href="#Parser-277"><span class="linenos"> 277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Parser-278"><a href="#Parser-278"><span class="linenos"> 278</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="Parser-279"><a href="#Parser-279"><span class="linenos"> 279</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
-</span><span id="Parser-280"><a href="#Parser-280"><span class="linenos"> 280</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
-</span><span id="Parser-281"><a href="#Parser-281"><span class="linenos"> 281</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
-</span><span id="Parser-282"><a href="#Parser-282"><span class="linenos"> 282</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</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">VOLATILE</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">WINDOW</span><span class="p">,</span>
-</span><span id="Parser-285"><a href="#Parser-285"><span class="linenos"> 285</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
-</span><span id="Parser-286"><a href="#Parser-286"><span class="linenos"> 286</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
-</span><span id="Parser-287"><a href="#Parser-287"><span class="linenos"> 287</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="Parser-288"><a href="#Parser-288"><span class="linenos"> 288</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
-</span><span id="Parser-289"><a href="#Parser-289"><span class="linenos"> 289</span></a> <span class="p">}</span>
-</span><span id="Parser-290"><a href="#Parser-290"><span class="linenos"> 290</span></a>
-</span><span id="Parser-291"><a href="#Parser-291"><span class="linenos"> 291</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-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">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-294"><a href="#Parser-294"><span class="linenos"> 294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="Parser-295"><a href="#Parser-295"><span class="linenos"> 295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="Parser-296"><a href="#Parser-296"><span class="linenos"> 296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
-</span><span id="Parser-297"><a href="#Parser-297"><span class="linenos"> 297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="Parser-298"><a href="#Parser-298"><span class="linenos"> 298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</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">NATURAL</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">OFFSET</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">RIGHT</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">WINDOW</span><span class="p">,</span>
+</span><span id="Parser-106"><a href="#Parser-106"><span class="linenos"> 106</span></a> <span class="n">STRUCT_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-107"><a href="#Parser-107"><span class="linenos"> 107</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="Parser-108"><a href="#Parser-108"><span class="linenos"> 108</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="Parser-109"><a href="#Parser-109"><span class="linenos"> 109</span></a> <span class="p">}</span>
+</span><span id="Parser-110"><a href="#Parser-110"><span class="linenos"> 110</span></a>
+</span><span id="Parser-111"><a href="#Parser-111"><span class="linenos"> 111</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-112"><a href="#Parser-112"><span class="linenos"> 112</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="Parser-113"><a href="#Parser-113"><span class="linenos"> 113</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="Parser-114"><a href="#Parser-114"><span class="linenos"> 114</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="Parser-115"><a href="#Parser-115"><span class="linenos"> 115</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
+</span><span id="Parser-116"><a href="#Parser-116"><span class="linenos"> 116</span></a> <span class="o">*</span><span class="n">STRUCT_TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-117"><a href="#Parser-117"><span class="linenos"> 117</span></a> <span class="p">}</span>
+</span><span id="Parser-118"><a href="#Parser-118"><span class="linenos"> 118</span></a>
+</span><span id="Parser-119"><a href="#Parser-119"><span class="linenos"> 119</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-120"><a href="#Parser-120"><span class="linenos"> 120</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="Parser-121"><a href="#Parser-121"><span class="linenos"> 121</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="Parser-122"><a href="#Parser-122"><span class="linenos"> 122</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="Parser-123"><a href="#Parser-123"><span class="linenos"> 123</span></a> <span class="p">}</span>
+</span><span id="Parser-124"><a href="#Parser-124"><span class="linenos"> 124</span></a>
+</span><span id="Parser-125"><a href="#Parser-125"><span class="linenos"> 125</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-126"><a href="#Parser-126"><span class="linenos"> 126</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
+</span><span id="Parser-127"><a href="#Parser-127"><span class="linenos"> 127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
+</span><span id="Parser-128"><a href="#Parser-128"><span class="linenos"> 128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="Parser-129"><a href="#Parser-129"><span class="linenos"> 129</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="Parser-130"><a href="#Parser-130"><span class="linenos"> 130</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="Parser-131"><a href="#Parser-131"><span class="linenos"> 131</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="Parser-132"><a href="#Parser-132"><span class="linenos"> 132</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="Parser-133"><a href="#Parser-133"><span class="linenos"> 133</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="Parser-134"><a href="#Parser-134"><span class="linenos"> 134</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="Parser-135"><a href="#Parser-135"><span class="linenos"> 135</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="Parser-136"><a href="#Parser-136"><span class="linenos"> 136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="Parser-137"><a href="#Parser-137"><span class="linenos"> 137</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="Parser-138"><a href="#Parser-138"><span class="linenos"> 138</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="Parser-139"><a href="#Parser-139"><span class="linenos"> 139</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="Parser-140"><a href="#Parser-140"><span class="linenos"> 140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
+</span><span id="Parser-141"><a href="#Parser-141"><span class="linenos"> 141</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="Parser-142"><a href="#Parser-142"><span class="linenos"> 142</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="Parser-143"><a href="#Parser-143"><span class="linenos"> 143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="Parser-144"><a href="#Parser-144"><span class="linenos"> 144</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="Parser-145"><a href="#Parser-145"><span class="linenos"> 145</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="Parser-146"><a href="#Parser-146"><span class="linenos"> 146</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Parser-147"><a href="#Parser-147"><span class="linenos"> 147</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="Parser-148"><a href="#Parser-148"><span class="linenos"> 148</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="Parser-149"><a href="#Parser-149"><span class="linenos"> 149</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
+</span><span id="Parser-150"><a href="#Parser-150"><span class="linenos"> 150</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
+</span><span id="Parser-151"><a href="#Parser-151"><span class="linenos"> 151</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
+</span><span id="Parser-152"><a href="#Parser-152"><span class="linenos"> 152</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
+</span><span id="Parser-153"><a href="#Parser-153"><span class="linenos"> 153</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
+</span><span id="Parser-154"><a href="#Parser-154"><span class="linenos"> 154</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Parser-155"><a href="#Parser-155"><span class="linenos"> 155</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
+</span><span id="Parser-156"><a href="#Parser-156"><span class="linenos"> 156</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
+</span><span id="Parser-157"><a href="#Parser-157"><span class="linenos"> 157</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
+</span><span id="Parser-158"><a href="#Parser-158"><span class="linenos"> 158</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="Parser-159"><a href="#Parser-159"><span class="linenos"> 159</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Parser-160"><a href="#Parser-160"><span class="linenos"> 160</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-161"><a href="#Parser-161"><span class="linenos"> 161</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Parser-162"><a href="#Parser-162"><span class="linenos"> 162</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="Parser-163"><a href="#Parser-163"><span class="linenos"> 163</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="Parser-164"><a href="#Parser-164"><span class="linenos"> 164</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="Parser-165"><a href="#Parser-165"><span class="linenos"> 165</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="Parser-166"><a href="#Parser-166"><span class="linenos"> 166</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
+</span><span id="Parser-167"><a href="#Parser-167"><span class="linenos"> 167</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
+</span><span id="Parser-168"><a href="#Parser-168"><span class="linenos"> 168</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
+</span><span id="Parser-169"><a href="#Parser-169"><span class="linenos"> 169</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
+</span><span id="Parser-170"><a href="#Parser-170"><span class="linenos"> 170</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
+</span><span id="Parser-171"><a href="#Parser-171"><span class="linenos"> 171</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
+</span><span id="Parser-172"><a href="#Parser-172"><span class="linenos"> 172</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
+</span><span id="Parser-173"><a href="#Parser-173"><span class="linenos"> 173</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
+</span><span id="Parser-174"><a href="#Parser-174"><span class="linenos"> 174</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
+</span><span id="Parser-175"><a href="#Parser-175"><span class="linenos"> 175</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
+</span><span id="Parser-176"><a href="#Parser-176"><span class="linenos"> 176</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
+</span><span id="Parser-177"><a href="#Parser-177"><span class="linenos"> 177</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
+</span><span id="Parser-178"><a href="#Parser-178"><span class="linenos"> 178</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="Parser-179"><a href="#Parser-179"><span class="linenos"> 179</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
+</span><span id="Parser-180"><a href="#Parser-180"><span class="linenos"> 180</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
+</span><span id="Parser-181"><a href="#Parser-181"><span class="linenos"> 181</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
+</span><span id="Parser-182"><a href="#Parser-182"><span class="linenos"> 182</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
+</span><span id="Parser-183"><a href="#Parser-183"><span class="linenos"> 183</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="Parser-184"><a href="#Parser-184"><span class="linenos"> 184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
+</span><span id="Parser-185"><a href="#Parser-185"><span class="linenos"> 185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
+</span><span id="Parser-186"><a href="#Parser-186"><span class="linenos"> 186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="Parser-187"><a href="#Parser-187"><span class="linenos"> 187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
+</span><span id="Parser-188"><a href="#Parser-188"><span class="linenos"> 188</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
+</span><span id="Parser-189"><a href="#Parser-189"><span class="linenos"> 189</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
+</span><span id="Parser-190"><a href="#Parser-190"><span class="linenos"> 190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="Parser-191"><a href="#Parser-191"><span class="linenos"> 191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</span>
+</span><span id="Parser-192"><a href="#Parser-192"><span class="linenos"> 192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="Parser-193"><a href="#Parser-193"><span class="linenos"> 193</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
+</span><span id="Parser-194"><a href="#Parser-194"><span class="linenos"> 194</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="Parser-195"><a href="#Parser-195"><span class="linenos"> 195</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="Parser-196"><a href="#Parser-196"><span class="linenos"> 196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="Parser-197"><a href="#Parser-197"><span class="linenos"> 197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="Parser-198"><a href="#Parser-198"><span class="linenos"> 198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="Parser-199"><a href="#Parser-199"><span class="linenos"> 199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
+</span><span id="Parser-200"><a href="#Parser-200"><span class="linenos"> 200</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
+</span><span id="Parser-201"><a href="#Parser-201"><span class="linenos"> 201</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
+</span><span id="Parser-202"><a href="#Parser-202"><span class="linenos"> 202</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
+</span><span id="Parser-203"><a href="#Parser-203"><span class="linenos"> 203</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="Parser-204"><a href="#Parser-204"><span class="linenos"> 204</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
+</span><span id="Parser-205"><a href="#Parser-205"><span class="linenos"> 205</span></a> <span class="o">*</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-206"><a href="#Parser-206"><span class="linenos"> 206</span></a> <span class="o">*</span><span class="n">NESTED_TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-207"><a href="#Parser-207"><span class="linenos"> 207</span></a> <span class="p">}</span>
+</span><span id="Parser-208"><a href="#Parser-208"><span class="linenos"> 208</span></a>
+</span><span id="Parser-209"><a href="#Parser-209"><span class="linenos"> 209</span></a> <span class="n">SUBQUERY_PREDICATES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-210"><a href="#Parser-210"><span class="linenos"> 210</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="Parser-211"><a href="#Parser-211"><span class="linenos"> 211</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">All</span><span class="p">,</span>
+</span><span id="Parser-212"><a href="#Parser-212"><span class="linenos"> 212</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">,</span>
+</span><span id="Parser-213"><a href="#Parser-213"><span class="linenos"> 213</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
+</span><span id="Parser-214"><a href="#Parser-214"><span class="linenos"> 214</span></a> <span class="p">}</span>
+</span><span id="Parser-215"><a href="#Parser-215"><span class="linenos"> 215</span></a>
+</span><span id="Parser-216"><a href="#Parser-216"><span class="linenos"> 216</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-217"><a href="#Parser-217"><span class="linenos"> 217</span></a> <span class="o">*</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
+</span><span id="Parser-218"><a href="#Parser-218"><span class="linenos"> 218</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
+</span><span id="Parser-219"><a href="#Parser-219"><span class="linenos"> 219</span></a> <span class="p">}</span>
+</span><span id="Parser-220"><a href="#Parser-220"><span class="linenos"> 220</span></a>
+</span><span id="Parser-221"><a href="#Parser-221"><span class="linenos"> 221</span></a> <span class="n">DB_CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-222"><a href="#Parser-222"><span class="linenos"> 222</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="Parser-223"><a href="#Parser-223"><span class="linenos"> 223</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="Parser-224"><a href="#Parser-224"><span class="linenos"> 224</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="Parser-225"><a href="#Parser-225"><span class="linenos"> 225</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
+</span><span id="Parser-226"><a href="#Parser-226"><span class="linenos"> 226</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="Parser-227"><a href="#Parser-227"><span class="linenos"> 227</span></a> <span class="p">}</span>
+</span><span id="Parser-228"><a href="#Parser-228"><span class="linenos"> 228</span></a>
+</span><span id="Parser-229"><a href="#Parser-229"><span class="linenos"> 229</span></a> <span class="n">CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-230"><a href="#Parser-230"><span class="linenos"> 230</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="Parser-231"><a href="#Parser-231"><span class="linenos"> 231</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
+</span><span id="Parser-232"><a href="#Parser-232"><span class="linenos"> 232</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</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">PROCEDURE</span><span class="p">,</span>
+</span><span id="Parser-234"><a href="#Parser-234"><span class="linenos"> 234</span></a> <span class="o">*</span><span class="n">DB_CREATABLES</span><span class="p">,</span>
+</span><span id="Parser-235"><a href="#Parser-235"><span class="linenos"> 235</span></a> <span class="p">}</span>
+</span><span id="Parser-236"><a href="#Parser-236"><span class="linenos"> 236</span></a>
+</span><span id="Parser-237"><a href="#Parser-237"><span class="linenos"> 237</span></a> <span class="c1"># Tokens that can represent identifiers</span>
+</span><span id="Parser-238"><a href="#Parser-238"><span class="linenos"> 238</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</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">VAR</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">ANTI</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">APPLY</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">ASC</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">AUTO_INCREMENT</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">BEGIN</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">CACHE</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">CASE</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">COLLATE</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">COMMAND</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">COMMENT</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">COMMIT</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">CONSTRAINT</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">DEFAULT</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">DELETE</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">DESC</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">DESCRIBE</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">DICTIONARY</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">DIV</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">END</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">EXECUTE</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">ESCAPE</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">FALSE</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">FIRST</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">FILTER</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">FORMAT</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">FULL</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">IS</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">ISNULL</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">INTERVAL</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">KEEP</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">LEFT</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">LOAD</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">MERGE</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">NATURAL</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">NEXT</span><span class="p">,</span>
+</span><span id="Parser-275"><a href="#Parser-275"><span class="linenos"> 275</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="Parser-276"><a href="#Parser-276"><span class="linenos"> 276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
+</span><span id="Parser-277"><a href="#Parser-277"><span class="linenos"> 277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
+</span><span id="Parser-278"><a href="#Parser-278"><span class="linenos"> 278</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
+</span><span id="Parser-279"><a href="#Parser-279"><span class="linenos"> 279</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
+</span><span id="Parser-280"><a href="#Parser-280"><span class="linenos"> 280</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
+</span><span id="Parser-281"><a href="#Parser-281"><span class="linenos"> 281</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
+</span><span id="Parser-282"><a href="#Parser-282"><span class="linenos"> 282</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</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">REFERENCES</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">RIGHT</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">ROW</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">ROWS</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">SEMI</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">SET</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">SETTINGS</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">SHOW</span><span class="p">,</span>
+</span><span id="Parser-291"><a href="#Parser-291"><span class="linenos"> 291</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="Parser-292"><a href="#Parser-292"><span class="linenos"> 292</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="Parser-293"><a href="#Parser-293"><span class="linenos"> 293</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
+</span><span id="Parser-294"><a href="#Parser-294"><span class="linenos"> 294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="Parser-295"><a href="#Parser-295"><span class="linenos"> 295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
+</span><span id="Parser-296"><a href="#Parser-296"><span class="linenos"> 296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
+</span><span id="Parser-297"><a href="#Parser-297"><span class="linenos"> 297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
+</span><span id="Parser-298"><a href="#Parser-298"><span class="linenos"> 298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="Parser-299"><a href="#Parser-299"><span class="linenos"> 299</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
+</span><span id="Parser-300"><a href="#Parser-300"><span class="linenos"> 300</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
+</span><span id="Parser-301"><a href="#Parser-301"><span class="linenos"> 301</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-302"><a href="#Parser-302"><span class="linenos"> 302</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
</span><span id="Parser-303"><a href="#Parser-303"><span class="linenos"> 303</span></a> <span class="p">}</span>
</span><span id="Parser-304"><a href="#Parser-304"><span class="linenos"> 304</span></a>
-</span><span id="Parser-305"><a href="#Parser-305"><span class="linenos"> 305</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-305"><a href="#Parser-305"><span class="linenos"> 305</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-306"><a href="#Parser-306"><span class="linenos"> 306</span></a>
-</span><span id="Parser-307"><a href="#Parser-307"><span class="linenos"> 307</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-308"><a href="#Parser-308"><span class="linenos"> 308</span></a>
-</span><span id="Parser-309"><a href="#Parser-309"><span class="linenos"> 309</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;LEADING&quot;</span><span class="p">,</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span> <span class="s2">&quot;BOTH&quot;</span><span class="p">}</span>
-</span><span id="Parser-310"><a href="#Parser-310"><span class="linenos"> 310</span></a>
-</span><span id="Parser-311"><a href="#Parser-311"><span class="linenos"> 311</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</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">COMMAND</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">CURRENT_DATE</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">CURRENT_DATETIME</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">CURRENT_TIMESTAMP</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">CURRENT_TIME</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">CURRENT_USER</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">FILTER</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">FIRST</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">FORMAT</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">GLOB</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">IDENTIFIER</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">INDEX</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">ISNULL</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">ILIKE</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">LIKE</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">MERGE</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">OFFSET</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">PRIMARY_KEY</span><span class="p">,</span>
-</span><span id="Parser-330"><a href="#Parser-330"><span class="linenos"> 330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
-</span><span id="Parser-331"><a href="#Parser-331"><span class="linenos"> 331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="Parser-332"><a href="#Parser-332"><span class="linenos"> 332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="Parser-333"><a href="#Parser-333"><span class="linenos"> 333</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</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">UNNEST</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">VAR</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">LEFT</span><span class="p">,</span>
-</span><span id="Parser-337"><a href="#Parser-337"><span class="linenos"> 337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="Parser-338"><a href="#Parser-338"><span class="linenos"> 338</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</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">DATETIME</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">TABLE</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">TIMESTAMP</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">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Parser-343"><a href="#Parser-343"><span class="linenos"> 343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="Parser-344"><a href="#Parser-344"><span class="linenos"> 344</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
-</span><span id="Parser-345"><a href="#Parser-345"><span class="linenos"> 345</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="Parser-346"><a href="#Parser-346"><span class="linenos"> 346</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
-</span><span id="Parser-347"><a href="#Parser-347"><span class="linenos"> 347</span></a> <span class="p">}</span>
-</span><span id="Parser-348"><a href="#Parser-348"><span class="linenos"> 348</span></a>
-</span><span id="Parser-349"><a href="#Parser-349"><span class="linenos"> 349</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-350"><a href="#Parser-350"><span class="linenos"> 350</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-351"><a href="#Parser-351"><span class="linenos"> 351</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-352"><a href="#Parser-352"><span class="linenos"> 352</span></a> <span class="p">}</span>
-</span><span id="Parser-353"><a href="#Parser-353"><span class="linenos"> 353</span></a>
-</span><span id="Parser-354"><a href="#Parser-354"><span class="linenos"> 354</span></a> <span class="n">EQUALITY</span> <span class="o">=</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">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-356"><a href="#Parser-356"><span class="linenos"> 356</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-357"><a href="#Parser-357"><span class="linenos"> 357</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-358"><a href="#Parser-358"><span class="linenos"> 358</span></a> <span class="p">}</span>
-</span><span id="Parser-359"><a href="#Parser-359"><span class="linenos"> 359</span></a>
-</span><span id="Parser-360"><a href="#Parser-360"><span class="linenos"> 360</span></a> <span class="n">COMPARISON</span> <span class="o">=</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">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-362"><a href="#Parser-362"><span class="linenos"> 362</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-363"><a href="#Parser-363"><span class="linenos"> 363</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-364"><a href="#Parser-364"><span class="linenos"> 364</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-365"><a href="#Parser-365"><span class="linenos"> 365</span></a> <span class="p">}</span>
-</span><span id="Parser-366"><a href="#Parser-366"><span class="linenos"> 366</span></a>
-</span><span id="Parser-367"><a href="#Parser-367"><span class="linenos"> 367</span></a> <span class="n">BITWISE</span> <span class="o">=</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">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-369"><a href="#Parser-369"><span class="linenos"> 369</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-370"><a href="#Parser-370"><span class="linenos"> 370</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-371"><a href="#Parser-371"><span class="linenos"> 371</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-372"><a href="#Parser-372"><span class="linenos"> 372</span></a> <span class="p">}</span>
-</span><span id="Parser-373"><a href="#Parser-373"><span class="linenos"> 373</span></a>
-</span><span id="Parser-374"><a href="#Parser-374"><span class="linenos"> 374</span></a> <span class="n">TERM</span> <span class="o">=</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">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-376"><a href="#Parser-376"><span class="linenos"> 376</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-377"><a href="#Parser-377"><span class="linenos"> 377</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-378"><a href="#Parser-378"><span class="linenos"> 378</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-379"><a href="#Parser-379"><span class="linenos"> 379</span></a> <span class="p">}</span>
-</span><span id="Parser-380"><a href="#Parser-380"><span class="linenos"> 380</span></a>
-</span><span id="Parser-381"><a href="#Parser-381"><span class="linenos"> 381</span></a> <span class="n">FACTOR</span> <span class="o">=</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">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-383"><a href="#Parser-383"><span class="linenos"> 383</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-384"><a href="#Parser-384"><span class="linenos"> 384</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-385"><a href="#Parser-385"><span class="linenos"> 385</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-386"><a href="#Parser-386"><span class="linenos"> 386</span></a> <span class="p">}</span>
-</span><span id="Parser-387"><a href="#Parser-387"><span class="linenos"> 387</span></a>
-</span><span id="Parser-388"><a href="#Parser-388"><span class="linenos"> 388</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</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">TIME</span><span class="p">,</span>
-</span><span id="Parser-390"><a href="#Parser-390"><span class="linenos"> 390</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="Parser-391"><a href="#Parser-391"><span class="linenos"> 391</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</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">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="Parser-393"><a href="#Parser-393"><span class="linenos"> 393</span></a> <span class="p">}</span>
-</span><span id="Parser-394"><a href="#Parser-394"><span class="linenos"> 394</span></a>
-</span><span id="Parser-395"><a href="#Parser-395"><span class="linenos"> 395</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</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">UNION</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">INTERSECT</span><span class="p">,</span>
-</span><span id="Parser-398"><a href="#Parser-398"><span class="linenos"> 398</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="Parser-399"><a href="#Parser-399"><span class="linenos"> 399</span></a> <span class="p">}</span>
-</span><span id="Parser-400"><a href="#Parser-400"><span class="linenos"> 400</span></a>
-</span><span id="Parser-401"><a href="#Parser-401"><span class="linenos"> 401</span></a> <span class="n">JOIN_METHODS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-402"><a href="#Parser-402"><span class="linenos"> 402</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="Parser-403"><a href="#Parser-403"><span class="linenos"> 403</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</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><span id="Parser-405"><a href="#Parser-405"><span class="linenos"> 405</span></a>
-</span><span id="Parser-406"><a href="#Parser-406"><span class="linenos"> 406</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-407"><a href="#Parser-407"><span class="linenos"> 407</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><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">RIGHT</span><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">FULL</span><span class="p">,</span>
-</span><span id="Parser-410"><a href="#Parser-410"><span class="linenos"> 410</span></a> <span class="p">}</span>
-</span><span id="Parser-411"><a href="#Parser-411"><span class="linenos"> 411</span></a>
-</span><span id="Parser-412"><a href="#Parser-412"><span class="linenos"> 412</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-413"><a href="#Parser-413"><span class="linenos"> 413</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
-</span><span id="Parser-414"><a href="#Parser-414"><span class="linenos"> 414</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
-</span><span id="Parser-415"><a href="#Parser-415"><span class="linenos"> 415</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</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">SEMI</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">ANTI</span><span class="p">,</span>
-</span><span id="Parser-418"><a href="#Parser-418"><span class="linenos"> 418</span></a> <span class="p">}</span>
-</span><span id="Parser-419"><a href="#Parser-419"><span class="linenos"> 419</span></a>
-</span><span id="Parser-420"><a href="#Parser-420"><span class="linenos"> 420</span></a> <span class="n">JOIN_HINTS</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="Parser-421"><a href="#Parser-421"><span class="linenos"> 421</span></a>
-</span><span id="Parser-422"><a href="#Parser-422"><span class="linenos"> 422</span></a> <span class="n">LAMBDAS</span> <span class="o">=</span> <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">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-424"><a href="#Parser-424"><span class="linenos"> 424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</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="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
-</span><span id="Parser-426"><a href="#Parser-426"><span class="linenos"> 426</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-427"><a href="#Parser-427"><span class="linenos"> 427</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-428"><a href="#Parser-428"><span class="linenos"> 428</span></a> <span class="p">),</span>
-</span><span id="Parser-429"><a href="#Parser-429"><span class="linenos"> 429</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-430"><a href="#Parser-430"><span class="linenos"> 430</span></a> <span class="p">),</span>
-</span><span id="Parser-431"><a href="#Parser-431"><span class="linenos"> 431</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-432"><a href="#Parser-432"><span class="linenos"> 432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
-</span><span id="Parser-433"><a href="#Parser-433"><span class="linenos"> 433</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">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-434"><a href="#Parser-434"><span class="linenos"> 434</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-435"><a href="#Parser-435"><span class="linenos"> 435</span></a> <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><span id="Parser-438"><a href="#Parser-438"><span class="linenos"> 438</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-439"><a href="#Parser-439"><span class="linenos"> 439</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-440"><a href="#Parser-440"><span class="linenos"> 440</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-441"><a href="#Parser-441"><span class="linenos"> 441</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-442"><a href="#Parser-442"><span class="linenos"> 442</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-443"><a href="#Parser-443"><span class="linenos"> 443</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="Parser-444"><a href="#Parser-444"><span class="linenos"> 444</span></a> <span class="p">),</span>
-</span><span id="Parser-445"><a href="#Parser-445"><span class="linenos"> 445</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-446"><a href="#Parser-446"><span class="linenos"> 446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
-</span><span id="Parser-447"><a href="#Parser-447"><span class="linenos"> 447</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-448"><a href="#Parser-448"><span class="linenos"> 448</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-449"><a href="#Parser-449"><span class="linenos"> 449</span></a> <span class="p">),</span>
-</span><span id="Parser-450"><a href="#Parser-450"><span class="linenos"> 450</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-451"><a href="#Parser-451"><span class="linenos"> 451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
-</span><span id="Parser-452"><a href="#Parser-452"><span class="linenos"> 452</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-453"><a href="#Parser-453"><span class="linenos"> 453</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-454"><a href="#Parser-454"><span class="linenos"> 454</span></a> <span class="p">),</span>
-</span><span id="Parser-455"><a href="#Parser-455"><span class="linenos"> 455</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-456"><a href="#Parser-456"><span class="linenos"> 456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
-</span><span id="Parser-457"><a href="#Parser-457"><span class="linenos"> 457</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-458"><a href="#Parser-458"><span class="linenos"> 458</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-459"><a href="#Parser-459"><span class="linenos"> 459</span></a> <span class="p">),</span>
-</span><span id="Parser-460"><a href="#Parser-460"><span class="linenos"> 460</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-461"><a href="#Parser-461"><span class="linenos"> 461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
+</span><span id="Parser-307"><a href="#Parser-307"><span class="linenos"> 307</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-308"><a href="#Parser-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</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">ASOF</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">FULL</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">LEFT</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">LOCK</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">NATURAL</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">OFFSET</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">RIGHT</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">WINDOW</span><span class="p">,</span>
+</span><span id="Parser-317"><a href="#Parser-317"><span class="linenos"> 317</span></a> <span class="p">}</span>
+</span><span id="Parser-318"><a href="#Parser-318"><span class="linenos"> 318</span></a>
+</span><span id="Parser-319"><a href="#Parser-319"><span class="linenos"> 319</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-320"><a href="#Parser-320"><span class="linenos"> 320</span></a>
+</span><span id="Parser-321"><a href="#Parser-321"><span class="linenos"> 321</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-322"><a href="#Parser-322"><span class="linenos"> 322</span></a>
+</span><span id="Parser-323"><a href="#Parser-323"><span class="linenos"> 323</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;LEADING&quot;</span><span class="p">,</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span> <span class="s2">&quot;BOTH&quot;</span><span class="p">}</span>
+</span><span id="Parser-324"><a href="#Parser-324"><span class="linenos"> 324</span></a>
+</span><span id="Parser-325"><a href="#Parser-325"><span class="linenos"> 325</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</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">COMMAND</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">CURRENT_DATE</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">CURRENT_DATETIME</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">CURRENT_TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-330"><a href="#Parser-330"><span class="linenos"> 330</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-331"><a href="#Parser-331"><span class="linenos"> 331</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-332"><a href="#Parser-332"><span class="linenos"> 332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
+</span><span id="Parser-333"><a href="#Parser-333"><span class="linenos"> 333</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</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">FORMAT</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">GLOB</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">IDENTIFIER</span><span class="p">,</span>
+</span><span id="Parser-337"><a href="#Parser-337"><span class="linenos"> 337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</span><span id="Parser-338"><a href="#Parser-338"><span class="linenos"> 338</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</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">ILIKE</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">INSERT</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">LIKE</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">MERGE</span><span class="p">,</span>
+</span><span id="Parser-343"><a href="#Parser-343"><span class="linenos"> 343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="Parser-344"><a href="#Parser-344"><span class="linenos"> 344</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-345"><a href="#Parser-345"><span class="linenos"> 345</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</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">REPLACE</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">RLIKE</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">ROW</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">UNNEST</span><span class="p">,</span>
+</span><span id="Parser-350"><a href="#Parser-350"><span class="linenos"> 350</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
+</span><span id="Parser-351"><a href="#Parser-351"><span class="linenos"> 351</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</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">RIGHT</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">DATE</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">DATETIME</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">TABLE</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">TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-357"><a href="#Parser-357"><span class="linenos"> 357</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Parser-358"><a href="#Parser-358"><span class="linenos"> 358</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</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">XOR</span><span class="p">,</span>
+</span><span id="Parser-360"><a href="#Parser-360"><span class="linenos"> 360</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-361"><a href="#Parser-361"><span class="linenos"> 361</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
+</span><span id="Parser-362"><a href="#Parser-362"><span class="linenos"> 362</span></a> <span class="p">}</span>
+</span><span id="Parser-363"><a href="#Parser-363"><span class="linenos"> 363</span></a>
+</span><span id="Parser-364"><a href="#Parser-364"><span class="linenos"> 364</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-365"><a href="#Parser-365"><span class="linenos"> 365</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-366"><a href="#Parser-366"><span class="linenos"> 366</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-367"><a href="#Parser-367"><span class="linenos"> 367</span></a> <span class="p">}</span>
+</span><span id="Parser-368"><a href="#Parser-368"><span class="linenos"> 368</span></a>
+</span><span id="Parser-369"><a href="#Parser-369"><span class="linenos"> 369</span></a> <span class="n">EQUALITY</span> <span class="o">=</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">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-371"><a href="#Parser-371"><span class="linenos"> 371</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-372"><a href="#Parser-372"><span class="linenos"> 372</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-373"><a href="#Parser-373"><span class="linenos"> 373</span></a> <span class="p">}</span>
+</span><span id="Parser-374"><a href="#Parser-374"><span class="linenos"> 374</span></a>
+</span><span id="Parser-375"><a href="#Parser-375"><span class="linenos"> 375</span></a> <span class="n">COMPARISON</span> <span class="o">=</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">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-377"><a href="#Parser-377"><span class="linenos"> 377</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-378"><a href="#Parser-378"><span class="linenos"> 378</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-379"><a href="#Parser-379"><span class="linenos"> 379</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-380"><a href="#Parser-380"><span class="linenos"> 380</span></a> <span class="p">}</span>
+</span><span id="Parser-381"><a href="#Parser-381"><span class="linenos"> 381</span></a>
+</span><span id="Parser-382"><a href="#Parser-382"><span class="linenos"> 382</span></a> <span class="n">BITWISE</span> <span class="o">=</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">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-384"><a href="#Parser-384"><span class="linenos"> 384</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-385"><a href="#Parser-385"><span class="linenos"> 385</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-386"><a href="#Parser-386"><span class="linenos"> 386</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-387"><a href="#Parser-387"><span class="linenos"> 387</span></a> <span class="p">}</span>
+</span><span id="Parser-388"><a href="#Parser-388"><span class="linenos"> 388</span></a>
+</span><span id="Parser-389"><a href="#Parser-389"><span class="linenos"> 389</span></a> <span class="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-390"><a href="#Parser-390"><span class="linenos"> 390</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-391"><a href="#Parser-391"><span class="linenos"> 391</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-392"><a href="#Parser-392"><span class="linenos"> 392</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-393"><a href="#Parser-393"><span class="linenos"> 393</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-394"><a href="#Parser-394"><span class="linenos"> 394</span></a> <span class="p">}</span>
+</span><span id="Parser-395"><a href="#Parser-395"><span class="linenos"> 395</span></a>
+</span><span id="Parser-396"><a href="#Parser-396"><span class="linenos"> 396</span></a> <span class="n">FACTOR</span> <span class="o">=</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">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-398"><a href="#Parser-398"><span class="linenos"> 398</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-399"><a href="#Parser-399"><span class="linenos"> 399</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-400"><a href="#Parser-400"><span class="linenos"> 400</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-401"><a href="#Parser-401"><span class="linenos"> 401</span></a> <span class="p">}</span>
+</span><span id="Parser-402"><a href="#Parser-402"><span class="linenos"> 402</span></a>
+</span><span id="Parser-403"><a href="#Parser-403"><span class="linenos"> 403</span></a> <span class="n">TIMES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-404"><a href="#Parser-404"><span class="linenos"> 404</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="Parser-405"><a href="#Parser-405"><span class="linenos"> 405</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</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><span id="Parser-408"><a href="#Parser-408"><span class="linenos"> 408</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</span> <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">TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-410"><a href="#Parser-410"><span class="linenos"> 410</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Parser-411"><a href="#Parser-411"><span class="linenos"> 411</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="Parser-412"><a href="#Parser-412"><span class="linenos"> 412</span></a> <span class="o">*</span><span class="n">TIMES</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><span id="Parser-415"><a href="#Parser-415"><span class="linenos"> 415</span></a> <span class="n">SET_OPERATIONS</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">UNION</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">INTERSECT</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">EXCEPT</span><span class="p">,</span>
+</span><span id="Parser-419"><a href="#Parser-419"><span class="linenos"> 419</span></a> <span class="p">}</span>
+</span><span id="Parser-420"><a href="#Parser-420"><span class="linenos"> 420</span></a>
+</span><span id="Parser-421"><a href="#Parser-421"><span class="linenos"> 421</span></a> <span class="n">JOIN_METHODS</span> <span class="o">=</span> <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">NATURAL</span><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">ASOF</span><span class="p">,</span>
+</span><span id="Parser-424"><a href="#Parser-424"><span class="linenos"> 424</span></a> <span class="p">}</span>
+</span><span id="Parser-425"><a href="#Parser-425"><span class="linenos"> 425</span></a>
+</span><span id="Parser-426"><a href="#Parser-426"><span class="linenos"> 426</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <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">LEFT</span><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">RIGHT</span><span class="p">,</span>
+</span><span id="Parser-429"><a href="#Parser-429"><span class="linenos"> 429</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="Parser-430"><a href="#Parser-430"><span class="linenos"> 430</span></a> <span class="p">}</span>
+</span><span id="Parser-431"><a href="#Parser-431"><span class="linenos"> 431</span></a>
+</span><span id="Parser-432"><a href="#Parser-432"><span class="linenos"> 432</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <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">INNER</span><span class="p">,</span>
+</span><span id="Parser-434"><a href="#Parser-434"><span class="linenos"> 434</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
+</span><span id="Parser-435"><a href="#Parser-435"><span class="linenos"> 435</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
+</span><span id="Parser-436"><a href="#Parser-436"><span class="linenos"> 436</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><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">ANTI</span><span class="p">,</span>
+</span><span id="Parser-438"><a href="#Parser-438"><span class="linenos"> 438</span></a> <span class="p">}</span>
+</span><span id="Parser-439"><a href="#Parser-439"><span class="linenos"> 439</span></a>
+</span><span id="Parser-440"><a href="#Parser-440"><span class="linenos"> 440</span></a> <span class="n">JOIN_HINTS</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="Parser-441"><a href="#Parser-441"><span class="linenos"> 441</span></a>
+</span><span id="Parser-442"><a href="#Parser-442"><span class="linenos"> 442</span></a> <span class="n">LAMBDAS</span> <span class="o">=</span> <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">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-444"><a href="#Parser-444"><span class="linenos"> 444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</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="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
+</span><span id="Parser-446"><a href="#Parser-446"><span class="linenos"> 446</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-447"><a href="#Parser-447"><span class="linenos"> 447</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-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 class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-450"><a href="#Parser-450"><span class="linenos"> 450</span></a> <span class="p">),</span>
+</span><span id="Parser-451"><a href="#Parser-451"><span class="linenos"> 451</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-452"><a href="#Parser-452"><span class="linenos"> 452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
+</span><span id="Parser-453"><a href="#Parser-453"><span class="linenos"> 453</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">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-454"><a href="#Parser-454"><span class="linenos"> 454</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-455"><a href="#Parser-455"><span class="linenos"> 455</span></a> <span class="p">),</span>
+</span><span id="Parser-456"><a href="#Parser-456"><span class="linenos"> 456</span></a> <span class="p">}</span>
+</span><span id="Parser-457"><a href="#Parser-457"><span class="linenos"> 457</span></a>
+</span><span id="Parser-458"><a href="#Parser-458"><span class="linenos"> 458</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-459"><a href="#Parser-459"><span class="linenos"> 459</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-460"><a href="#Parser-460"><span class="linenos"> 460</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-461"><a href="#Parser-461"><span class="linenos"> 461</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-462"><a href="#Parser-462"><span class="linenos"> 462</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-463"><a href="#Parser-463"><span class="linenos"> 463</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-463"><a href="#Parser-463"><span class="linenos"> 463</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="Parser-464"><a href="#Parser-464"><span class="linenos"> 464</span></a> <span class="p">),</span>
-</span><span id="Parser-465"><a href="#Parser-465"><span class="linenos"> 465</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-466"><a href="#Parser-466"><span class="linenos"> 466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
+</span><span id="Parser-465"><a href="#Parser-465"><span class="linenos"> 465</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-466"><a href="#Parser-466"><span class="linenos"> 466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="Parser-467"><a href="#Parser-467"><span class="linenos"> 467</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-468"><a href="#Parser-468"><span class="linenos"> 468</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="Parser-468"><a href="#Parser-468"><span class="linenos"> 468</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="Parser-469"><a href="#Parser-469"><span class="linenos"> 469</span></a> <span class="p">),</span>
-</span><span id="Parser-470"><a href="#Parser-470"><span class="linenos"> 470</span></a> <span class="p">}</span>
-</span><span id="Parser-471"><a href="#Parser-471"><span class="linenos"> 471</span></a>
-</span><span id="Parser-472"><a href="#Parser-472"><span class="linenos"> 472</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</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">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">exp</span><span class="o">.</span><span class="n">Cluster</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="Parser-474"><a href="#Parser-474"><span class="linenos"> 474</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-475"><a href="#Parser-475"><span class="linenos"> 475</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-476"><a href="#Parser-476"><span class="linenos"> 476</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-477"><a href="#Parser-477"><span class="linenos"> 477</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-478"><a href="#Parser-478"><span class="linenos"> 478</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-479"><a href="#Parser-479"><span class="linenos"> 479</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-480"><a href="#Parser-480"><span class="linenos"> 480</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-481"><a href="#Parser-481"><span class="linenos"> 481</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-482"><a href="#Parser-482"><span class="linenos"> 482</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-483"><a href="#Parser-483"><span class="linenos"> 483</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-484"><a href="#Parser-484"><span class="linenos"> 484</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-485"><a href="#Parser-485"><span class="linenos"> 485</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-486"><a href="#Parser-486"><span class="linenos"> 486</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-487"><a href="#Parser-487"><span class="linenos"> 487</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-488"><a href="#Parser-488"><span class="linenos"> 488</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-489"><a href="#Parser-489"><span class="linenos"> 489</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-490"><a href="#Parser-490"><span class="linenos"> 490</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-491"><a href="#Parser-491"><span class="linenos"> 491</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-492"><a href="#Parser-492"><span class="linenos"> 492</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">exp</span><span class="o">.</span><span class="n">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><span id="Parser-493"><a href="#Parser-493"><span class="linenos"> 493</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_parts</span><span class="p">(),</span>
-</span><span id="Parser-494"><a href="#Parser-494"><span class="linenos"> 494</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-495"><a href="#Parser-495"><span class="linenos"> 495</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-496"><a href="#Parser-496"><span class="linenos"> 496</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-497"><a href="#Parser-497"><span class="linenos"> 497</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-498"><a href="#Parser-498"><span class="linenos"> 498</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_parts</span><span class="p">(),</span>
-</span><span id="Parser-499"><a href="#Parser-499"><span class="linenos"> 499</span></a> <span class="p">}</span>
-</span><span id="Parser-500"><a href="#Parser-500"><span class="linenos"> 500</span></a>
-</span><span id="Parser-501"><a href="#Parser-501"><span class="linenos"> 501</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-502"><a href="#Parser-502"><span class="linenos"> 502</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-503"><a href="#Parser-503"><span class="linenos"> 503</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-504"><a href="#Parser-504"><span class="linenos"> 504</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-505"><a href="#Parser-505"><span class="linenos"> 505</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-506"><a href="#Parser-506"><span class="linenos"> 506</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-507"><a href="#Parser-507"><span class="linenos"> 507</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-508"><a href="#Parser-508"><span class="linenos"> 508</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-509"><a href="#Parser-509"><span class="linenos"> 509</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-510"><a href="#Parser-510"><span class="linenos"> 510</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-511"><a href="#Parser-511"><span class="linenos"> 511</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-512"><a href="#Parser-512"><span class="linenos"> 512</span></a> <span class="n">TokenType</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="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span>
-</span><span id="Parser-513"><a href="#Parser-513"><span class="linenos"> 513</span></a> <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">From</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 class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-514"><a href="#Parser-514"><span class="linenos"> 514</span></a> <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">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-516"><a href="#Parser-516"><span class="linenos"> 516</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">:</span> <span class="k">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</span><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">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-518"><a href="#Parser-518"><span class="linenos"> 518</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(),</span>
-</span><span id="Parser-519"><a href="#Parser-519"><span class="linenos"> 519</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-520"><a href="#Parser-520"><span class="linenos"> 520</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-521"><a href="#Parser-521"><span class="linenos"> 521</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-522"><a href="#Parser-522"><span class="linenos"> 522</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-523"><a href="#Parser-523"><span class="linenos"> 523</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-524"><a href="#Parser-524"><span class="linenos"> 524</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-525"><a href="#Parser-525"><span class="linenos"> 525</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
-</span><span id="Parser-526"><a href="#Parser-526"><span class="linenos"> 526</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-527"><a href="#Parser-527"><span class="linenos"> 527</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="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-528"><a href="#Parser-528"><span class="linenos"> 528</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-529"><a href="#Parser-529"><span class="linenos"> 529</span></a> <span class="p">),</span>
-</span><span id="Parser-530"><a href="#Parser-530"><span class="linenos"> 530</span></a> <span class="p">}</span>
-</span><span id="Parser-531"><a href="#Parser-531"><span class="linenos"> 531</span></a>
-</span><span id="Parser-532"><a href="#Parser-532"><span class="linenos"> 532</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</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">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-534"><a href="#Parser-534"><span class="linenos"> 534</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-535"><a href="#Parser-535"><span class="linenos"> 535</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-536"><a href="#Parser-536"><span class="linenos"> 536</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-537"><a href="#Parser-537"><span class="linenos"> 537</span></a> <span class="p">}</span>
-</span><span id="Parser-538"><a href="#Parser-538"><span class="linenos"> 538</span></a>
-</span><span id="Parser-539"><a href="#Parser-539"><span class="linenos"> 539</span></a> <span class="n">PRIMARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-540"><a href="#Parser-540"><span class="linenos"> 540</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-541"><a href="#Parser-541"><span class="linenos"> 541</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-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 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-544"><a href="#Parser-544"><span class="linenos"> 544</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-545"><a href="#Parser-545"><span class="linenos"> 545</span></a> <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">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-547"><a href="#Parser-547"><span class="linenos"> 547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span> <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-548"><a href="#Parser-548"><span class="linenos"> 548</span></a> <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">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-550"><a href="#Parser-550"><span class="linenos"> 550</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-551"><a href="#Parser-551"><span class="linenos"> 551</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-552"><a href="#Parser-552"><span class="linenos"> 552</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-553"><a href="#Parser-553"><span class="linenos"> 553</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-554"><a href="#Parser-554"><span class="linenos"> 554</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-555"><a href="#Parser-555"><span class="linenos"> 555</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-556"><a href="#Parser-556"><span class="linenos"> 556</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_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-557"><a href="#Parser-557"><span class="linenos"> 557</span></a> <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">token</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-558"><a href="#Parser-558"><span class="linenos"> 558</span></a> <span class="p">),</span>
-</span><span id="Parser-559"><a href="#Parser-559"><span class="linenos"> 559</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_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">RawString</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-560"><a href="#Parser-560"><span class="linenos"> 560</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-561"><a href="#Parser-561"><span class="linenos"> 561</span></a> <span class="p">}</span>
-</span><span id="Parser-562"><a href="#Parser-562"><span class="linenos"> 562</span></a>
-</span><span id="Parser-563"><a href="#Parser-563"><span class="linenos"> 563</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-564"><a href="#Parser-564"><span class="linenos"> 564</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-565"><a href="#Parser-565"><span class="linenos"> 565</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-566"><a href="#Parser-566"><span class="linenos"> 566</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-567"><a href="#Parser-567"><span class="linenos"> 567</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-568"><a href="#Parser-568"><span class="linenos"> 568</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-569"><a href="#Parser-569"><span class="linenos"> 569</span></a> <span class="p">}</span>
-</span><span id="Parser-570"><a href="#Parser-570"><span class="linenos"> 570</span></a>
-</span><span id="Parser-571"><a href="#Parser-571"><span class="linenos"> 571</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-572"><a href="#Parser-572"><span class="linenos"> 572</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-573"><a href="#Parser-573"><span class="linenos"> 573</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-574"><a href="#Parser-574"><span class="linenos"> 574</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-575"><a href="#Parser-575"><span class="linenos"> 575</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-576"><a href="#Parser-576"><span class="linenos"> 576</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-577"><a href="#Parser-577"><span class="linenos"> 577</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-578"><a href="#Parser-578"><span class="linenos"> 578</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-579"><a href="#Parser-579"><span class="linenos"> 579</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-580"><a href="#Parser-580"><span class="linenos"> 580</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-581"><a href="#Parser-581"><span class="linenos"> 581</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-582"><a href="#Parser-582"><span class="linenos"> 582</span></a> <span class="p">}</span>
-</span><span id="Parser-583"><a href="#Parser-583"><span class="linenos"> 583</span></a>
-</span><span id="Parser-584"><a href="#Parser-584"><span class="linenos"> 584</span></a> <span class="n">PROPERTY_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-585"><a href="#Parser-585"><span class="linenos"> 585</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-586"><a href="#Parser-586"><span class="linenos"> 586</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-587"><a href="#Parser-587"><span class="linenos"> 587</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-588"><a href="#Parser-588"><span class="linenos"> 588</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-589"><a href="#Parser-589"><span class="linenos"> 589</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-590"><a href="#Parser-590"><span class="linenos"> 590</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">_parse_cluster</span><span class="p">(),</span>
-</span><span id="Parser-591"><a href="#Parser-591"><span class="linenos"> 591</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_clustered_by</span><span class="p">(),</span>
-</span><span id="Parser-592"><a href="#Parser-592"><span class="linenos"> 592</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-593"><a href="#Parser-593"><span class="linenos"> 593</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-594"><a href="#Parser-594"><span class="linenos"> 594</span></a> <span class="s2">&quot;COPY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_property</span><span class="p">(),</span>
-</span><span id="Parser-595"><a href="#Parser-595"><span class="linenos"> 595</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="Parser-596"><a href="#Parser-596"><span class="linenos"> 596</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-597"><a href="#Parser-597"><span class="linenos"> 597</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-598"><a href="#Parser-598"><span class="linenos"> 598</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-599"><a href="#Parser-599"><span class="linenos"> 599</span></a> <span class="p">),</span>
-</span><span id="Parser-600"><a href="#Parser-600"><span class="linenos"> 600</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-601"><a href="#Parser-601"><span class="linenos"> 601</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-602"><a href="#Parser-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="k">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">EngineProperty</span><span class="p">),</span>
-</span><span id="Parser-603"><a href="#Parser-603"><span class="linenos"> 603</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-604"><a href="#Parser-604"><span class="linenos"> 604</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-605"><a href="#Parser-605"><span class="linenos"> 605</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="Parser-606"><a href="#Parser-606"><span class="linenos"> 606</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-607"><a href="#Parser-607"><span class="linenos"> 607</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-608"><a href="#Parser-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;HEAP&quot;</span><span class="p">:</span> <span class="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">HeapProperty</span><span class="p">),</span>
-</span><span id="Parser-609"><a href="#Parser-609"><span class="linenos"> 609</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-610"><a href="#Parser-610"><span class="linenos"> 610</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-611"><a href="#Parser-611"><span class="linenos"> 611</span></a> <span class="p">),</span>
-</span><span id="Parser-612"><a href="#Parser-612"><span class="linenos"> 612</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="Parser-613"><a href="#Parser-613"><span class="linenos"> 613</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-614"><a href="#Parser-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;LAYOUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LAYOUT&quot;</span><span class="p">),</span>
-</span><span id="Parser-615"><a href="#Parser-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;LIFETIME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LIFETIME&quot;</span><span class="p">),</span>
-</span><span id="Parser-616"><a href="#Parser-616"><span class="linenos"> 616</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-617"><a href="#Parser-617"><span class="linenos"> 617</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-618"><a href="#Parser-618"><span class="linenos"> 618</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-619"><a href="#Parser-619"><span class="linenos"> 619</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-620"><a href="#Parser-620"><span class="linenos"> 620</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="Parser-621"><a href="#Parser-621"><span class="linenos"> 621</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-622"><a href="#Parser-622"><span class="linenos"> 622</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-</span><span id="Parser-623"><a href="#Parser-623"><span class="linenos"> 623</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-624"><a href="#Parser-624"><span class="linenos"> 624</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_no_property</span><span class="p">(),</span>
-</span><span id="Parser-625"><a href="#Parser-625"><span class="linenos"> 625</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_on_property</span><span class="p">(),</span>
-</span><span id="Parser-626"><a href="#Parser-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;ORDER 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_order</span><span class="p">(</span><span class="n">skip_order_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-627"><a href="#Parser-627"><span class="linenos"> 627</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-628"><a href="#Parser-628"><span class="linenos"> 628</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-629"><a href="#Parser-629"><span class="linenos"> 629</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-630"><a href="#Parser-630"><span class="linenos"> 630</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 class="n">in_props</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-631"><a href="#Parser-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;RANGE&quot;</span><span class="p">),</span>
-</span><span id="Parser-632"><a href="#Parser-632"><span class="linenos"> 632</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-633"><a href="#Parser-633"><span class="linenos"> 633</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-634"><a href="#Parser-634"><span class="linenos"> 634</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-635"><a href="#Parser-635"><span class="linenos"> 635</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-636"><a href="#Parser-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="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-637"><a href="#Parser-637"><span class="linenos"> 637</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</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-638"><a href="#Parser-638"><span class="linenos"> 638</span></a> <span class="p">),</span>
-</span><span id="Parser-639"><a href="#Parser-639"><span class="linenos"> 639</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-640"><a href="#Parser-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">),</span>
-</span><span id="Parser-641"><a href="#Parser-641"><span class="linenos"> 641</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-642"><a href="#Parser-642"><span class="linenos"> 642</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-643"><a href="#Parser-643"><span class="linenos"> 643</span></a> <span class="p">),</span>
-</span><span id="Parser-644"><a href="#Parser-644"><span class="linenos"> 644</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-645"><a href="#Parser-645"><span class="linenos"> 645</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-646"><a href="#Parser-646"><span class="linenos"> 646</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">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><span id="Parser-647"><a href="#Parser-647"><span class="linenos"> 647</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">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><span id="Parser-648"><a href="#Parser-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;TO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_to_table</span><span class="p">(),</span>
-</span><span id="Parser-649"><a href="#Parser-649"><span class="linenos"> 649</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-650"><a href="#Parser-650"><span class="linenos"> 650</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ttl</span><span class="p">(),</span>
-</span><span id="Parser-651"><a href="#Parser-651"><span class="linenos"> 651</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">FileFormatProperty</span><span class="p">),</span>
-</span><span id="Parser-652"><a href="#Parser-652"><span class="linenos"> 652</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-653"><a href="#Parser-653"><span class="linenos"> 653</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-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><span id="Parser-656"><a href="#Parser-656"><span class="linenos"> 656</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-657"><a href="#Parser-657"><span class="linenos"> 657</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-658"><a href="#Parser-658"><span class="linenos"> 658</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-659"><a href="#Parser-659"><span class="linenos"> 659</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-660"><a href="#Parser-660"><span class="linenos"> 660</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-661"><a href="#Parser-661"><span class="linenos"> 661</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-662"><a href="#Parser-662"><span class="linenos"> 662</span></a> <span class="p">),</span>
-</span><span id="Parser-663"><a href="#Parser-663"><span class="linenos"> 663</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-664"><a href="#Parser-664"><span class="linenos"> 664</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-665"><a href="#Parser-665"><span class="linenos"> 665</span></a> <span class="p">),</span>
-</span><span id="Parser-666"><a href="#Parser-666"><span class="linenos"> 666</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-667"><a href="#Parser-667"><span class="linenos"> 667</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-668"><a href="#Parser-668"><span class="linenos"> 668</span></a> <span class="p">),</span>
-</span><span id="Parser-669"><a href="#Parser-669"><span class="linenos"> 669</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-670"><a href="#Parser-670"><span class="linenos"> 670</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-671"><a href="#Parser-671"><span class="linenos"> 671</span></a> <span class="p">),</span>
-</span><span id="Parser-672"><a href="#Parser-672"><span class="linenos"> 672</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-673"><a href="#Parser-673"><span class="linenos"> 673</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-674"><a href="#Parser-674"><span class="linenos"> 674</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-675"><a href="#Parser-675"><span class="linenos"> 675</span></a> <span class="p">),</span>
-</span><span id="Parser-676"><a href="#Parser-676"><span class="linenos"> 676</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-677"><a href="#Parser-677"><span class="linenos"> 677</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-678"><a href="#Parser-678"><span class="linenos"> 678</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-679"><a href="#Parser-679"><span class="linenos"> 679</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-470"><a href="#Parser-470"><span class="linenos"> 470</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-471"><a href="#Parser-471"><span class="linenos"> 471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
+</span><span id="Parser-472"><a href="#Parser-472"><span class="linenos"> 472</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-473"><a href="#Parser-473"><span class="linenos"> 473</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-474"><a href="#Parser-474"><span class="linenos"> 474</span></a> <span class="p">),</span>
+</span><span id="Parser-475"><a href="#Parser-475"><span class="linenos"> 475</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-476"><a href="#Parser-476"><span class="linenos"> 476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
+</span><span id="Parser-477"><a href="#Parser-477"><span class="linenos"> 477</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-478"><a href="#Parser-478"><span class="linenos"> 478</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-479"><a href="#Parser-479"><span class="linenos"> 479</span></a> <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">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-481"><a href="#Parser-481"><span class="linenos"> 481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
+</span><span id="Parser-482"><a href="#Parser-482"><span class="linenos"> 482</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-483"><a href="#Parser-483"><span class="linenos"> 483</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-484"><a href="#Parser-484"><span class="linenos"> 484</span></a> <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">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-486"><a href="#Parser-486"><span class="linenos"> 486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
+</span><span id="Parser-487"><a href="#Parser-487"><span class="linenos"> 487</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-488"><a href="#Parser-488"><span class="linenos"> 488</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="Parser-489"><a href="#Parser-489"><span class="linenos"> 489</span></a> <span class="p">),</span>
+</span><span id="Parser-490"><a href="#Parser-490"><span class="linenos"> 490</span></a> <span class="p">}</span>
+</span><span id="Parser-491"><a href="#Parser-491"><span class="linenos"> 491</span></a>
+</span><span id="Parser-492"><a href="#Parser-492"><span class="linenos"> 492</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-493"><a href="#Parser-493"><span class="linenos"> 493</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">exp</span><span class="o">.</span><span class="n">Cluster</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="Parser-494"><a href="#Parser-494"><span class="linenos"> 494</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-495"><a href="#Parser-495"><span class="linenos"> 495</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-496"><a href="#Parser-496"><span class="linenos"> 496</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 class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-497"><a href="#Parser-497"><span class="linenos"> 497</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-498"><a href="#Parser-498"><span class="linenos"> 498</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-499"><a href="#Parser-499"><span class="linenos"> 499</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-500"><a href="#Parser-500"><span class="linenos"> 500</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-501"><a href="#Parser-501"><span class="linenos"> 501</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-502"><a href="#Parser-502"><span class="linenos"> 502</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-503"><a href="#Parser-503"><span class="linenos"> 503</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-504"><a href="#Parser-504"><span class="linenos"> 504</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-505"><a href="#Parser-505"><span class="linenos"> 505</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-506"><a href="#Parser-506"><span class="linenos"> 506</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-507"><a href="#Parser-507"><span class="linenos"> 507</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-508"><a href="#Parser-508"><span class="linenos"> 508</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-509"><a href="#Parser-509"><span class="linenos"> 509</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-510"><a href="#Parser-510"><span class="linenos"> 510</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-511"><a href="#Parser-511"><span class="linenos"> 511</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-512"><a href="#Parser-512"><span class="linenos"> 512</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">exp</span><span class="o">.</span><span class="n">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><span id="Parser-513"><a href="#Parser-513"><span class="linenos"> 513</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_parts</span><span class="p">(),</span>
+</span><span id="Parser-514"><a href="#Parser-514"><span class="linenos"> 514</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-515"><a href="#Parser-515"><span class="linenos"> 515</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-516"><a href="#Parser-516"><span class="linenos"> 516</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-517"><a href="#Parser-517"><span class="linenos"> 517</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-518"><a href="#Parser-518"><span class="linenos"> 518</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_parts</span><span class="p">(),</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><span id="Parser-521"><a href="#Parser-521"><span class="linenos"> 521</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-522"><a href="#Parser-522"><span class="linenos"> 522</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-523"><a href="#Parser-523"><span class="linenos"> 523</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-524"><a href="#Parser-524"><span class="linenos"> 524</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-525"><a href="#Parser-525"><span class="linenos"> 525</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-526"><a href="#Parser-526"><span class="linenos"> 526</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-527"><a href="#Parser-527"><span class="linenos"> 527</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-528"><a href="#Parser-528"><span class="linenos"> 528</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-529"><a href="#Parser-529"><span class="linenos"> 529</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-530"><a href="#Parser-530"><span class="linenos"> 530</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-531"><a href="#Parser-531"><span class="linenos"> 531</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-532"><a href="#Parser-532"><span class="linenos"> 532</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-533"><a href="#Parser-533"><span class="linenos"> 533</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">:</span> <span class="k">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</span><span class="p">(),</span>
+</span><span id="Parser-534"><a href="#Parser-534"><span class="linenos"> 534</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-535"><a href="#Parser-535"><span class="linenos"> 535</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</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">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-537"><a href="#Parser-537"><span class="linenos"> 537</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-538"><a href="#Parser-538"><span class="linenos"> 538</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-539"><a href="#Parser-539"><span class="linenos"> 539</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-540"><a href="#Parser-540"><span class="linenos"> 540</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-541"><a href="#Parser-541"><span class="linenos"> 541</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-542"><a href="#Parser-542"><span class="linenos"> 542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
+</span><span id="Parser-543"><a href="#Parser-543"><span class="linenos"> 543</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-544"><a href="#Parser-544"><span class="linenos"> 544</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="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-545"><a href="#Parser-545"><span class="linenos"> 545</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-546"><a href="#Parser-546"><span class="linenos"> 546</span></a> <span class="p">),</span>
+</span><span id="Parser-547"><a href="#Parser-547"><span class="linenos"> 547</span></a> <span class="p">}</span>
+</span><span id="Parser-548"><a href="#Parser-548"><span class="linenos"> 548</span></a>
+</span><span id="Parser-549"><a href="#Parser-549"><span class="linenos"> 549</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</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">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-551"><a href="#Parser-551"><span class="linenos"> 551</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-552"><a href="#Parser-552"><span class="linenos"> 552</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-553"><a href="#Parser-553"><span class="linenos"> 553</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-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">PRIMARY_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="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-558"><a href="#Parser-558"><span class="linenos"> 558</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-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="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-561"><a href="#Parser-561"><span class="linenos"> 561</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-562"><a href="#Parser-562"><span class="linenos"> 562</span></a> <span class="p">),</span>
+</span><span id="Parser-563"><a href="#Parser-563"><span class="linenos"> 563</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-564"><a href="#Parser-564"><span class="linenos"> 564</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span> <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-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="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-567"><a href="#Parser-567"><span class="linenos"> 567</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-568"><a href="#Parser-568"><span class="linenos"> 568</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-569"><a href="#Parser-569"><span class="linenos"> 569</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-570"><a href="#Parser-570"><span class="linenos"> 570</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-571"><a href="#Parser-571"><span class="linenos"> 571</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-572"><a href="#Parser-572"><span class="linenos"> 572</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-573"><a href="#Parser-573"><span class="linenos"> 573</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_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-574"><a href="#Parser-574"><span class="linenos"> 574</span></a> <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">token</span><span class="o">.</span><span class="n">text</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="n">TokenType</span><span class="o">.</span><span class="n">RAW_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">RawString</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-577"><a href="#Parser-577"><span class="linenos"> 577</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-578"><a href="#Parser-578"><span class="linenos"> 578</span></a> <span class="p">}</span>
+</span><span id="Parser-579"><a href="#Parser-579"><span class="linenos"> 579</span></a>
+</span><span id="Parser-580"><a href="#Parser-580"><span class="linenos"> 580</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-581"><a href="#Parser-581"><span class="linenos"> 581</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-582"><a href="#Parser-582"><span class="linenos"> 582</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-583"><a href="#Parser-583"><span class="linenos"> 583</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-584"><a href="#Parser-584"><span class="linenos"> 584</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span> <span class="ow">or</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">ID_VAR_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-585"><a href="#Parser-585"><span class="linenos"> 585</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-586"><a href="#Parser-586"><span class="linenos"> 586</span></a> <span class="p">}</span>
+</span><span id="Parser-587"><a href="#Parser-587"><span class="linenos"> 587</span></a>
+</span><span id="Parser-588"><a href="#Parser-588"><span class="linenos"> 588</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-589"><a href="#Parser-589"><span class="linenos"> 589</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-590"><a href="#Parser-590"><span class="linenos"> 590</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-591"><a href="#Parser-591"><span class="linenos"> 591</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-592"><a href="#Parser-592"><span class="linenos"> 592</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-593"><a href="#Parser-593"><span class="linenos"> 593</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-594"><a href="#Parser-594"><span class="linenos"> 594</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-595"><a href="#Parser-595"><span class="linenos"> 595</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-596"><a href="#Parser-596"><span class="linenos"> 596</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-597"><a href="#Parser-597"><span class="linenos"> 597</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-598"><a href="#Parser-598"><span class="linenos"> 598</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-599"><a href="#Parser-599"><span class="linenos"> 599</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</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_comprehension</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Parser-600"><a href="#Parser-600"><span class="linenos"> 600</span></a> <span class="p">}</span>
+</span><span id="Parser-601"><a href="#Parser-601"><span class="linenos"> 601</span></a>
+</span><span id="Parser-602"><a href="#Parser-602"><span class="linenos"> 602</span></a> <span class="n">PROPERTY_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-603"><a href="#Parser-603"><span class="linenos"> 603</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-604"><a href="#Parser-604"><span class="linenos"> 604</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-605"><a href="#Parser-605"><span class="linenos"> 605</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-606"><a href="#Parser-606"><span class="linenos"> 606</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-607"><a href="#Parser-607"><span class="linenos"> 607</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-608"><a href="#Parser-608"><span class="linenos"> 608</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">_parse_cluster</span><span class="p">(),</span>
+</span><span id="Parser-609"><a href="#Parser-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_clustered_by</span><span class="p">(),</span>
+</span><span id="Parser-610"><a href="#Parser-610"><span class="linenos"> 610</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-611"><a href="#Parser-611"><span class="linenos"> 611</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-612"><a href="#Parser-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;COPY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_property</span><span class="p">(),</span>
+</span><span id="Parser-613"><a href="#Parser-613"><span class="linenos"> 613</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="Parser-614"><a href="#Parser-614"><span class="linenos"> 614</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-615"><a href="#Parser-615"><span class="linenos"> 615</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-616"><a href="#Parser-616"><span class="linenos"> 616</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-617"><a href="#Parser-617"><span class="linenos"> 617</span></a> <span class="p">),</span>
+</span><span id="Parser-618"><a href="#Parser-618"><span class="linenos"> 618</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-619"><a href="#Parser-619"><span class="linenos"> 619</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-620"><a href="#Parser-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="k">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">EngineProperty</span><span class="p">),</span>
+</span><span id="Parser-621"><a href="#Parser-621"><span class="linenos"> 621</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-622"><a href="#Parser-622"><span class="linenos"> 622</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-623"><a href="#Parser-623"><span class="linenos"> 623</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="Parser-624"><a href="#Parser-624"><span class="linenos"> 624</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-625"><a href="#Parser-625"><span class="linenos"> 625</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-626"><a href="#Parser-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;HEAP&quot;</span><span class="p">:</span> <span class="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">HeapProperty</span><span class="p">),</span>
+</span><span id="Parser-627"><a href="#Parser-627"><span class="linenos"> 627</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-628"><a href="#Parser-628"><span class="linenos"> 628</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-629"><a href="#Parser-629"><span class="linenos"> 629</span></a> <span class="p">),</span>
+</span><span id="Parser-630"><a href="#Parser-630"><span class="linenos"> 630</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="Parser-631"><a href="#Parser-631"><span class="linenos"> 631</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-632"><a href="#Parser-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;LAYOUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LAYOUT&quot;</span><span class="p">),</span>
+</span><span id="Parser-633"><a href="#Parser-633"><span class="linenos"> 633</span></a> <span class="s2">&quot;LIFETIME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LIFETIME&quot;</span><span class="p">),</span>
+</span><span id="Parser-634"><a href="#Parser-634"><span class="linenos"> 634</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-635"><a href="#Parser-635"><span class="linenos"> 635</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-636"><a href="#Parser-636"><span class="linenos"> 636</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-637"><a href="#Parser-637"><span class="linenos"> 637</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-638"><a href="#Parser-638"><span class="linenos"> 638</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="o">**</span><span class="n">kwargs</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="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="Parser-639"><a href="#Parser-639"><span class="linenos"> 639</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-640"><a href="#Parser-640"><span class="linenos"> 640</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="o">**</span><span class="n">kwargs</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 class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
+</span><span id="Parser-641"><a href="#Parser-641"><span class="linenos"> 641</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-642"><a href="#Parser-642"><span class="linenos"> 642</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_no_property</span><span class="p">(),</span>
+</span><span id="Parser-643"><a href="#Parser-643"><span class="linenos"> 643</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_on_property</span><span class="p">(),</span>
+</span><span id="Parser-644"><a href="#Parser-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;ORDER 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_order</span><span class="p">(</span><span class="n">skip_order_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-645"><a href="#Parser-645"><span class="linenos"> 645</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-646"><a href="#Parser-646"><span class="linenos"> 646</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-647"><a href="#Parser-647"><span class="linenos"> 647</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-648"><a href="#Parser-648"><span class="linenos"> 648</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 class="n">in_props</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-649"><a href="#Parser-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;RANGE&quot;</span><span class="p">),</span>
+</span><span id="Parser-650"><a href="#Parser-650"><span class="linenos"> 650</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-651"><a href="#Parser-651"><span class="linenos"> 651</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-652"><a href="#Parser-652"><span class="linenos"> 652</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-653"><a href="#Parser-653"><span class="linenos"> 653</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-654"><a href="#Parser-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="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-655"><a href="#Parser-655"><span class="linenos"> 655</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</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-656"><a href="#Parser-656"><span class="linenos"> 656</span></a> <span class="p">),</span>
+</span><span id="Parser-657"><a href="#Parser-657"><span class="linenos"> 657</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-658"><a href="#Parser-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">),</span>
+</span><span id="Parser-659"><a href="#Parser-659"><span class="linenos"> 659</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-660"><a href="#Parser-660"><span class="linenos"> 660</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-661"><a href="#Parser-661"><span class="linenos"> 661</span></a> <span class="p">),</span>
+</span><span id="Parser-662"><a href="#Parser-662"><span class="linenos"> 662</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-663"><a href="#Parser-663"><span class="linenos"> 663</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-664"><a href="#Parser-664"><span class="linenos"> 664</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">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><span id="Parser-665"><a href="#Parser-665"><span class="linenos"> 665</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">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><span id="Parser-666"><a href="#Parser-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;TO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_to_table</span><span class="p">(),</span>
+</span><span id="Parser-667"><a href="#Parser-667"><span class="linenos"> 667</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-668"><a href="#Parser-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ttl</span><span class="p">(),</span>
+</span><span id="Parser-669"><a href="#Parser-669"><span class="linenos"> 669</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">FileFormatProperty</span><span class="p">),</span>
+</span><span id="Parser-670"><a href="#Parser-670"><span class="linenos"> 670</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-671"><a href="#Parser-671"><span class="linenos"> 671</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-672"><a href="#Parser-672"><span class="linenos"> 672</span></a> <span class="p">}</span>
+</span><span id="Parser-673"><a href="#Parser-673"><span class="linenos"> 673</span></a>
+</span><span id="Parser-674"><a href="#Parser-674"><span class="linenos"> 674</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-675"><a href="#Parser-675"><span class="linenos"> 675</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-676"><a href="#Parser-676"><span class="linenos"> 676</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-677"><a href="#Parser-677"><span class="linenos"> 677</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-678"><a href="#Parser-678"><span class="linenos"> 678</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-679"><a href="#Parser-679"><span class="linenos"> 679</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-680"><a href="#Parser-680"><span class="linenos"> 680</span></a> <span class="p">),</span>
-</span><span id="Parser-681"><a href="#Parser-681"><span class="linenos"> 681</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-682"><a href="#Parser-682"><span class="linenos"> 682</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-683"><a href="#Parser-683"><span class="linenos"> 683</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-684"><a href="#Parser-684"><span class="linenos"> 684</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-685"><a href="#Parser-685"><span class="linenos"> 685</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-686"><a href="#Parser-686"><span class="linenos"> 686</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-687"><a href="#Parser-687"><span class="linenos"> 687</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-688"><a href="#Parser-688"><span class="linenos"> 688</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-689"><a href="#Parser-689"><span class="linenos"> 689</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-690"><a href="#Parser-690"><span class="linenos"> 690</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-691"><a href="#Parser-691"><span class="linenos"> 691</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-692"><a href="#Parser-692"><span class="linenos"> 692</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-693"><a href="#Parser-693"><span class="linenos"> 693</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-694"><a href="#Parser-694"><span class="linenos"> 694</span></a> <span class="p">),</span>
-</span><span id="Parser-695"><a href="#Parser-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="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">MergeTreeTTL</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_bitwise</span><span class="p">()]),</span>
-</span><span id="Parser-696"><a href="#Parser-696"><span class="linenos"> 696</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-697"><a href="#Parser-697"><span class="linenos"> 697</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-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">ALTER_PARSERS</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;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-702"><a href="#Parser-702"><span class="linenos"> 702</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-703"><a href="#Parser-703"><span class="linenos"> 703</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-704"><a href="#Parser-704"><span class="linenos"> 704</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-705"><a href="#Parser-705"><span class="linenos"> 705</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-706"><a href="#Parser-706"><span class="linenos"> 706</span></a> <span class="p">}</span>
-</span><span id="Parser-707"><a href="#Parser-707"><span class="linenos"> 707</span></a>
-</span><span id="Parser-708"><a href="#Parser-708"><span class="linenos"> 708</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-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">NO_PAREN_FUNCTION_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;ANY&quot;</span><span class="p">:</span> <span class="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-712"><a href="#Parser-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="k">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-713"><a href="#Parser-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="k">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-714"><a href="#Parser-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_next_value_for</span><span class="p">(),</span>
-</span><span id="Parser-715"><a href="#Parser-715"><span class="linenos"> 715</span></a> <span class="p">}</span>
-</span><span id="Parser-716"><a href="#Parser-716"><span class="linenos"> 716</span></a>
-</span><span id="Parser-717"><a href="#Parser-717"><span class="linenos"> 717</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">}</span>
-</span><span id="Parser-718"><a href="#Parser-718"><span class="linenos"> 718</span></a>
-</span><span id="Parser-719"><a href="#Parser-719"><span class="linenos"> 719</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-720"><a href="#Parser-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_any_value</span><span class="p">(),</span>
-</span><span id="Parser-721"><a href="#Parser-721"><span class="linenos"> 721</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-722"><a href="#Parser-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_concat</span><span class="p">(),</span>
-</span><span id="Parser-723"><a href="#Parser-723"><span class="linenos"> 723</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-724"><a href="#Parser-724"><span class="linenos"> 724</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-725"><a href="#Parser-725"><span class="linenos"> 725</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-726"><a href="#Parser-726"><span class="linenos"> 726</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-727"><a href="#Parser-727"><span class="linenos"> 727</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-728"><a href="#Parser-728"><span class="linenos"> 728</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-729"><a href="#Parser-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;OPENJSON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_open_json</span><span class="p">(),</span>
-</span><span id="Parser-730"><a href="#Parser-730"><span class="linenos"> 730</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-731"><a href="#Parser-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;SAFE_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-732"><a href="#Parser-732"><span class="linenos"> 732</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-733"><a href="#Parser-733"><span class="linenos"> 733</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-734"><a href="#Parser-734"><span class="linenos"> 734</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-735"><a href="#Parser-735"><span class="linenos"> 735</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-736"><a href="#Parser-736"><span class="linenos"> 736</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-737"><a href="#Parser-737"><span class="linenos"> 737</span></a> <span class="p">}</span>
-</span><span id="Parser-738"><a href="#Parser-738"><span class="linenos"> 738</span></a>
-</span><span id="Parser-739"><a href="#Parser-739"><span class="linenos"> 739</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-740"><a href="#Parser-740"><span class="linenos"> 740</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;match&quot;</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-741"><a href="#Parser-741"><span class="linenos"> 741</span></a> <span class="n">TokenType</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="p">(</span><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-742"><a href="#Parser-742"><span class="linenos"> 742</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;group&quot;</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-743"><a href="#Parser-743"><span class="linenos"> 743</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;having&quot;</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-744"><a href="#Parser-744"><span class="linenos"> 744</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;qualify&quot;</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-745"><a href="#Parser-745"><span class="linenos"> 745</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;windows&quot;</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-746"><a href="#Parser-746"><span class="linenos"> 746</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;order&quot;</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-747"><a href="#Parser-747"><span class="linenos"> 747</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;limit&quot;</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-748"><a href="#Parser-748"><span class="linenos"> 748</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</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-749"><a href="#Parser-749"><span class="linenos"> 749</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;offset&quot;</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-750"><a href="#Parser-750"><span class="linenos"> 750</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
-</span><span id="Parser-751"><a href="#Parser-751"><span class="linenos"> 751</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
-</span><span id="Parser-752"><a href="#Parser-752"><span class="linenos"> 752</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-753"><a href="#Parser-753"><span class="linenos"> 753</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-754"><a href="#Parser-754"><span class="linenos"> 754</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Parser-755"><a href="#Parser-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
-</span><span id="Parser-756"><a href="#Parser-756"><span class="linenos"> 756</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">),</span>
-</span><span id="Parser-757"><a href="#Parser-757"><span class="linenos"> 757</span></a> <span class="p">),</span>
-</span><span id="Parser-758"><a href="#Parser-758"><span class="linenos"> 758</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Parser-759"><a href="#Parser-759"><span class="linenos"> 759</span></a> <span class="s2">&quot;distribute&quot;</span><span class="p">,</span>
-</span><span id="Parser-760"><a href="#Parser-760"><span class="linenos"> 760</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">),</span>
-</span><span id="Parser-761"><a href="#Parser-761"><span class="linenos"> 761</span></a> <span class="p">),</span>
-</span><span id="Parser-762"><a href="#Parser-762"><span class="linenos"> 762</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sort&quot;</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">exp</span><span class="o">.</span><span class="n">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><span id="Parser-763"><a href="#Parser-763"><span class="linenos"> 763</span></a> <span class="p">}</span>
-</span><span id="Parser-764"><a href="#Parser-764"><span class="linenos"> 764</span></a>
-</span><span id="Parser-765"><a href="#Parser-765"><span class="linenos"> 765</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-766"><a href="#Parser-766"><span class="linenos"> 766</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-767"><a href="#Parser-767"><span class="linenos"> 767</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-768"><a href="#Parser-768"><span class="linenos"> 768</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-769"><a href="#Parser-769"><span class="linenos"> 769</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-770"><a href="#Parser-770"><span class="linenos"> 770</span></a> <span class="p">}</span>
-</span><span id="Parser-771"><a href="#Parser-771"><span class="linenos"> 771</span></a>
-</span><span id="Parser-772"><a href="#Parser-772"><span class="linenos"> 772</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-681"><a href="#Parser-681"><span class="linenos"> 681</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-682"><a href="#Parser-682"><span class="linenos"> 682</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-683"><a href="#Parser-683"><span class="linenos"> 683</span></a> <span class="p">),</span>
+</span><span id="Parser-684"><a href="#Parser-684"><span class="linenos"> 684</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-685"><a href="#Parser-685"><span class="linenos"> 685</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-686"><a href="#Parser-686"><span class="linenos"> 686</span></a> <span class="p">),</span>
+</span><span id="Parser-687"><a href="#Parser-687"><span class="linenos"> 687</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-688"><a href="#Parser-688"><span class="linenos"> 688</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-689"><a href="#Parser-689"><span class="linenos"> 689</span></a> <span class="p">),</span>
+</span><span id="Parser-690"><a href="#Parser-690"><span class="linenos"> 690</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-691"><a href="#Parser-691"><span class="linenos"> 691</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="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-692"><a href="#Parser-692"><span class="linenos"> 692</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredColumnConstraint</span><span 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_ordered</span><span class="p">)</span>
+</span><span id="Parser-693"><a href="#Parser-693"><span class="linenos"> 693</span></a> <span class="p">),</span>
+</span><span id="Parser-694"><a href="#Parser-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">:</span> <span class="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-695"><a href="#Parser-695"><span class="linenos"> 695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NonClusteredColumnConstraint</span><span 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_ordered</span><span class="p">)</span>
+</span><span id="Parser-696"><a href="#Parser-696"><span class="linenos"> 696</span></a> <span class="p">),</span>
+</span><span id="Parser-697"><a href="#Parser-697"><span class="linenos"> 697</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-698"><a href="#Parser-698"><span class="linenos"> 698</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-699"><a href="#Parser-699"><span class="linenos"> 699</span></a> <span class="p">),</span>
+</span><span id="Parser-700"><a href="#Parser-700"><span class="linenos"> 700</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-701"><a href="#Parser-701"><span class="linenos"> 701</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-702"><a href="#Parser-702"><span class="linenos"> 702</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-703"><a href="#Parser-703"><span class="linenos"> 703</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-704"><a href="#Parser-704"><span class="linenos"> 704</span></a> <span class="p">),</span>
+</span><span id="Parser-705"><a href="#Parser-705"><span class="linenos"> 705</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-706"><a href="#Parser-706"><span class="linenos"> 706</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-707"><a href="#Parser-707"><span class="linenos"> 707</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-708"><a href="#Parser-708"><span class="linenos"> 708</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-709"><a href="#Parser-709"><span class="linenos"> 709</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-710"><a href="#Parser-710"><span class="linenos"> 710</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-711"><a href="#Parser-711"><span class="linenos"> 711</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="p">(</span>
+</span><span id="Parser-712"><a href="#Parser-712"><span class="linenos"> 712</span></a> <span class="bp">self</span><span 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-713"><a href="#Parser-713"><span class="linenos"> 713</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-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 class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span 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-716"><a href="#Parser-716"><span class="linenos"> 716</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-717"><a href="#Parser-717"><span class="linenos"> 717</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-718"><a href="#Parser-718"><span class="linenos"> 718</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-719"><a href="#Parser-719"><span class="linenos"> 719</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-720"><a href="#Parser-720"><span class="linenos"> 720</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-721"><a href="#Parser-721"><span class="linenos"> 721</span></a> <span class="p">),</span>
+</span><span id="Parser-722"><a href="#Parser-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="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">MergeTreeTTL</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_bitwise</span><span class="p">()]),</span>
+</span><span id="Parser-723"><a href="#Parser-723"><span class="linenos"> 723</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-724"><a href="#Parser-724"><span class="linenos"> 724</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-725"><a href="#Parser-725"><span class="linenos"> 725</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">expression</span><span class="p">(</span>
+</span><span id="Parser-726"><a href="#Parser-726"><span class="linenos"> 726</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="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-727"><a href="#Parser-727"><span class="linenos"> 727</span></a> <span class="p">),</span>
+</span><span id="Parser-728"><a href="#Parser-728"><span class="linenos"> 728</span></a> <span class="p">}</span>
+</span><span id="Parser-729"><a href="#Parser-729"><span class="linenos"> 729</span></a>
+</span><span id="Parser-730"><a href="#Parser-730"><span class="linenos"> 730</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-731"><a href="#Parser-731"><span class="linenos"> 731</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-732"><a href="#Parser-732"><span class="linenos"> 732</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-733"><a href="#Parser-733"><span class="linenos"> 733</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-734"><a href="#Parser-734"><span class="linenos"> 734</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-735"><a href="#Parser-735"><span class="linenos"> 735</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-736"><a href="#Parser-736"><span class="linenos"> 736</span></a> <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">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-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">NO_PAREN_FUNCTION_PARSERS</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 class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="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-742"><a href="#Parser-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="k">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-743"><a href="#Parser-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="k">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-744"><a href="#Parser-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_next_value_for</span><span class="p">(),</span>
+</span><span id="Parser-745"><a href="#Parser-745"><span class="linenos"> 745</span></a> <span class="p">}</span>
+</span><span id="Parser-746"><a href="#Parser-746"><span class="linenos"> 746</span></a>
+</span><span id="Parser-747"><a href="#Parser-747"><span class="linenos"> 747</span></a> <span class="n">INVALID_FUNC_NAME_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-748"><a href="#Parser-748"><span class="linenos"> 748</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
+</span><span id="Parser-749"><a href="#Parser-749"><span class="linenos"> 749</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span>
+</span><span id="Parser-750"><a href="#Parser-750"><span class="linenos"> 750</span></a> <span class="p">}</span>
+</span><span id="Parser-751"><a href="#Parser-751"><span class="linenos"> 751</span></a>
+</span><span id="Parser-752"><a href="#Parser-752"><span class="linenos"> 752</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">}</span>
+</span><span id="Parser-753"><a href="#Parser-753"><span class="linenos"> 753</span></a>
+</span><span id="Parser-754"><a href="#Parser-754"><span class="linenos"> 754</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-755"><a href="#Parser-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;ANY_VALUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_any_value</span><span class="p">(),</span>
+</span><span id="Parser-756"><a href="#Parser-756"><span class="linenos"> 756</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-757"><a href="#Parser-757"><span class="linenos"> 757</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_concat</span><span class="p">(),</span>
+</span><span id="Parser-758"><a href="#Parser-758"><span class="linenos"> 758</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-759"><a href="#Parser-759"><span class="linenos"> 759</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-760"><a href="#Parser-760"><span class="linenos"> 760</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-761"><a href="#Parser-761"><span class="linenos"> 761</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-762"><a href="#Parser-762"><span class="linenos"> 762</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-763"><a href="#Parser-763"><span class="linenos"> 763</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-764"><a href="#Parser-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;OPENJSON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_open_json</span><span class="p">(),</span>
+</span><span id="Parser-765"><a href="#Parser-765"><span class="linenos"> 765</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-766"><a href="#Parser-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;SAFE_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-767"><a href="#Parser-767"><span class="linenos"> 767</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-768"><a href="#Parser-768"><span class="linenos"> 768</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-769"><a href="#Parser-769"><span class="linenos"> 769</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-770"><a href="#Parser-770"><span class="linenos"> 770</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-771"><a href="#Parser-771"><span class="linenos"> 771</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-772"><a href="#Parser-772"><span class="linenos"> 772</span></a> <span class="p">}</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="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-775"><a href="#Parser-775"><span class="linenos"> 775</span></a>
-</span><span id="Parser-776"><a href="#Parser-776"><span class="linenos"> 776</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-777"><a href="#Parser-777"><span class="linenos"> 777</span></a>
-</span><span id="Parser-778"><a href="#Parser-778"><span class="linenos"> 778</span></a> <span class="n">DDL_SELECT_TOKENS</span> <span class="o">=</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 class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</span>
-</span><span id="Parser-779"><a href="#Parser-779"><span class="linenos"> 779</span></a>
-</span><span id="Parser-780"><a href="#Parser-780"><span class="linenos"> 780</span></a> <span class="n">PRE_VOLATILE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</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-781"><a href="#Parser-781"><span class="linenos"> 781</span></a>
-</span><span id="Parser-782"><a href="#Parser-782"><span class="linenos"> 782</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-783"><a href="#Parser-783"><span class="linenos"> 783</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-784"><a href="#Parser-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&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;ISOLATION LEVEL READ COMMITTED&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;ISOLATION LEVEL READ UNCOMMITTED&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;ISOLATION LEVEL SERIALIZABLE&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;READ WRITE&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;READ ONLY&quot;</span><span class="p">,</span>
-</span><span id="Parser-790"><a href="#Parser-790"><span class="linenos"> 790</span></a> <span class="p">}</span>
-</span><span id="Parser-791"><a href="#Parser-791"><span class="linenos"> 791</span></a>
-</span><span id="Parser-792"><a href="#Parser-792"><span class="linenos"> 792</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-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="n">CLONE_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span> <span class="s2">&quot;STATEMENT&quot;</span><span class="p">}</span>
-</span><span id="Parser-795"><a href="#Parser-795"><span class="linenos"> 795</span></a>
-</span><span id="Parser-796"><a href="#Parser-796"><span class="linenos"> 796</span></a> <span class="n">TABLE_INDEX_HINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</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="Parser-797"><a href="#Parser-797"><span class="linenos"> 797</span></a>
-</span><span id="Parser-798"><a href="#Parser-798"><span class="linenos"> 798</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-799"><a href="#Parser-799"><span class="linenos"> 799</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-800"><a href="#Parser-800"><span class="linenos"> 800</span></a> <span class="n">WINDOW_SIDES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">}</span>
+</span><span id="Parser-774"><a href="#Parser-774"><span class="linenos"> 774</span></a> <span class="n">QUERY_MODIFIER_PARSERS</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="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;match&quot;</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-776"><a href="#Parser-776"><span class="linenos"> 776</span></a> <span class="n">TokenType</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="p">(</span><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-777"><a href="#Parser-777"><span class="linenos"> 777</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;group&quot;</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-778"><a href="#Parser-778"><span class="linenos"> 778</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;having&quot;</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-779"><a href="#Parser-779"><span class="linenos"> 779</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;qualify&quot;</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-780"><a href="#Parser-780"><span class="linenos"> 780</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;windows&quot;</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-781"><a href="#Parser-781"><span class="linenos"> 781</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;order&quot;</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-782"><a href="#Parser-782"><span class="linenos"> 782</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;limit&quot;</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-783"><a href="#Parser-783"><span class="linenos"> 783</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</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-784"><a href="#Parser-784"><span class="linenos"> 784</span></a> <span class="n">TokenType</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="p">(</span><span class="s2">&quot;offset&quot;</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-785"><a href="#Parser-785"><span class="linenos"> 785</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
+</span><span id="Parser-786"><a href="#Parser-786"><span class="linenos"> 786</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
+</span><span id="Parser-787"><a href="#Parser-787"><span class="linenos"> 787</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-788"><a href="#Parser-788"><span class="linenos"> 788</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</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-789"><a href="#Parser-789"><span class="linenos"> 789</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Parser-790"><a href="#Parser-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
+</span><span id="Parser-791"><a href="#Parser-791"><span class="linenos"> 791</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</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 class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Parser-794"><a href="#Parser-794"><span class="linenos"> 794</span></a> <span class="s2">&quot;distribute&quot;</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="o">.</span><span class="n">_parse_sort</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="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</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="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sort&quot;</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">exp</span><span class="o">.</span><span class="n">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><span id="Parser-798"><a href="#Parser-798"><span class="linenos"> 798</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">(</span><span class="n">skip_start_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
+</span><span id="Parser-799"><a href="#Parser-799"><span class="linenos"> 799</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">()),</span>
+</span><span id="Parser-800"><a href="#Parser-800"><span class="linenos"> 800</span></a> <span class="p">}</span>
</span><span id="Parser-801"><a href="#Parser-801"><span class="linenos"> 801</span></a>
-</span><span id="Parser-802"><a href="#Parser-802"><span class="linenos"> 802</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-803"><a href="#Parser-803"><span class="linenos"> 803</span></a>
-</span><span id="Parser-804"><a href="#Parser-804"><span class="linenos"> 804</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</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="c1"># A NULL arg in CONCAT yields NULL by default</span>
-</span><span id="Parser-807"><a href="#Parser-807"><span class="linenos"> 807</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-802"><a href="#Parser-802"><span class="linenos"> 802</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-803"><a href="#Parser-803"><span class="linenos"> 803</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-804"><a href="#Parser-804"><span class="linenos"> 804</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-805"><a href="#Parser-805"><span class="linenos"> 805</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-806"><a href="#Parser-806"><span class="linenos"> 806</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-807"><a href="#Parser-807"><span class="linenos"> 807</span></a> <span class="p">}</span>
</span><span id="Parser-808"><a href="#Parser-808"><span class="linenos"> 808</span></a>
-</span><span id="Parser-809"><a href="#Parser-809"><span class="linenos"> 809</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-810"><a href="#Parser-810"><span class="linenos"> 810</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-811"><a href="#Parser-811"><span class="linenos"> 811</span></a>
-</span><span id="Parser-812"><a href="#Parser-812"><span class="linenos"> 812</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-813"><a href="#Parser-813"><span class="linenos"> 813</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-809"><a href="#Parser-809"><span class="linenos"> 809</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-810"><a href="#Parser-810"><span class="linenos"> 810</span></a>
+</span><span id="Parser-811"><a href="#Parser-811"><span class="linenos"> 811</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-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="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-814"><a href="#Parser-814"><span class="linenos"> 814</span></a>
-</span><span id="Parser-815"><a href="#Parser-815"><span class="linenos"> 815</span></a> <span class="vm">__slots__</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="s2">&quot;error_level&quot;</span><span class="p">,</span>
-</span><span id="Parser-817"><a href="#Parser-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
-</span><span id="Parser-818"><a href="#Parser-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
-</span><span id="Parser-819"><a href="#Parser-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="Parser-820"><a href="#Parser-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
-</span><span id="Parser-821"><a href="#Parser-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
-</span><span id="Parser-822"><a href="#Parser-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
-</span><span id="Parser-823"><a href="#Parser-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
-</span><span id="Parser-824"><a href="#Parser-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
-</span><span id="Parser-825"><a href="#Parser-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
-</span><span id="Parser-826"><a href="#Parser-826"><span class="linenos"> 826</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
-</span><span id="Parser-827"><a href="#Parser-827"><span class="linenos"> 827</span></a> <span class="p">)</span>
+</span><span id="Parser-815"><a href="#Parser-815"><span class="linenos"> 815</span></a> <span class="n">DDL_SELECT_TOKENS</span> <span class="o">=</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 class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</span>
+</span><span id="Parser-816"><a href="#Parser-816"><span class="linenos"> 816</span></a>
+</span><span id="Parser-817"><a href="#Parser-817"><span class="linenos"> 817</span></a> <span class="n">PRE_VOLATILE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</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-818"><a href="#Parser-818"><span class="linenos"> 818</span></a>
+</span><span id="Parser-819"><a href="#Parser-819"><span class="linenos"> 819</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-820"><a href="#Parser-820"><span class="linenos"> 820</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-821"><a href="#Parser-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&quot;</span><span class="p">,</span>
+</span><span id="Parser-822"><a href="#Parser-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;ISOLATION LEVEL READ COMMITTED&quot;</span><span class="p">,</span>
+</span><span id="Parser-823"><a href="#Parser-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;ISOLATION LEVEL READ UNCOMMITTED&quot;</span><span class="p">,</span>
+</span><span id="Parser-824"><a href="#Parser-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;ISOLATION LEVEL SERIALIZABLE&quot;</span><span class="p">,</span>
+</span><span id="Parser-825"><a href="#Parser-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;READ WRITE&quot;</span><span class="p">,</span>
+</span><span id="Parser-826"><a href="#Parser-826"><span class="linenos"> 826</span></a> <span class="s2">&quot;READ ONLY&quot;</span><span class="p">,</span>
+</span><span id="Parser-827"><a href="#Parser-827"><span class="linenos"> 827</span></a> <span class="p">}</span>
</span><span id="Parser-828"><a href="#Parser-828"><span class="linenos"> 828</span></a>
-</span><span id="Parser-829"><a href="#Parser-829"><span class="linenos"> 829</span></a> <span class="c1"># Autofilled</span>
-</span><span id="Parser-830"><a href="#Parser-830"><span class="linenos"> 830</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><span id="Parser-831"><a href="#Parser-831"><span class="linenos"> 831</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><span id="Parser-832"><a href="#Parser-832"><span class="linenos"> 832</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><span id="Parser-833"><a href="#Parser-833"><span class="linenos"> 833</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-834"><a href="#Parser-834"><span class="linenos"> 834</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="Parser-835"><a href="#Parser-835"><span class="linenos"> 835</span></a> <span class="n">NULL_ORDERING</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Parser-836"><a href="#Parser-836"><span class="linenos"> 836</span></a> <span class="n">SHOW_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-837"><a href="#Parser-837"><span class="linenos"> 837</span></a> <span class="n">SET_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-838"><a href="#Parser-838"><span class="linenos"> 838</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-839"><a href="#Parser-839"><span class="linenos"> 839</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-840"><a href="#Parser-840"><span class="linenos"> 840</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="Parser-841"><a href="#Parser-841"><span class="linenos"> 841</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-829"><a href="#Parser-829"><span class="linenos"> 829</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-830"><a href="#Parser-830"><span class="linenos"> 830</span></a>
+</span><span id="Parser-831"><a href="#Parser-831"><span class="linenos"> 831</span></a> <span class="n">CLONE_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span> <span class="s2">&quot;STATEMENT&quot;</span><span class="p">}</span>
+</span><span id="Parser-832"><a href="#Parser-832"><span class="linenos"> 832</span></a>
+</span><span id="Parser-833"><a href="#Parser-833"><span class="linenos"> 833</span></a> <span class="n">TABLE_INDEX_HINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</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="Parser-834"><a href="#Parser-834"><span class="linenos"> 834</span></a>
+</span><span id="Parser-835"><a href="#Parser-835"><span class="linenos"> 835</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-836"><a href="#Parser-836"><span class="linenos"> 836</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-837"><a href="#Parser-837"><span class="linenos"> 837</span></a> <span class="n">WINDOW_SIDES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">}</span>
+</span><span id="Parser-838"><a href="#Parser-838"><span class="linenos"> 838</span></a>
+</span><span id="Parser-839"><a href="#Parser-839"><span class="linenos"> 839</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-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="n">DISTINCT_TOKENS</span> <span class="o">=</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-842"><a href="#Parser-842"><span class="linenos"> 842</span></a>
-</span><span id="Parser-843"><a href="#Parser-843"><span class="linenos"> 843</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Parser-844"><a href="#Parser-844"><span class="linenos"> 844</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-845"><a href="#Parser-845"><span class="linenos"> 845</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-846"><a href="#Parser-846"><span class="linenos"> 846</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-847"><a href="#Parser-847"><span class="linenos"> 847</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-848"><a href="#Parser-848"><span class="linenos"> 848</span></a> <span class="p">):</span>
-</span><span id="Parser-849"><a href="#Parser-849"><span class="linenos"> 849</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-850"><a href="#Parser-850"><span class="linenos"> 850</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-851"><a href="#Parser-851"><span class="linenos"> 851</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-852"><a href="#Parser-852"><span class="linenos"> 852</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Parser-843"><a href="#Parser-843"><span class="linenos"> 843</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</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="c1"># A NULL arg in CONCAT yields NULL by default</span>
+</span><span id="Parser-846"><a href="#Parser-846"><span class="linenos"> 846</span></a> <span class="n">CONCAT_NULL_OUTPUTS_STRING</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-847"><a href="#Parser-847"><span class="linenos"> 847</span></a>
+</span><span id="Parser-848"><a href="#Parser-848"><span class="linenos"> 848</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-849"><a href="#Parser-849"><span class="linenos"> 849</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-850"><a href="#Parser-850"><span class="linenos"> 850</span></a>
+</span><span id="Parser-851"><a href="#Parser-851"><span class="linenos"> 851</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-852"><a href="#Parser-852"><span class="linenos"> 852</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-853"><a href="#Parser-853"><span class="linenos"> 853</span></a>
-</span><span id="Parser-854"><a href="#Parser-854"><span class="linenos"> 854</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-855"><a href="#Parser-855"><span class="linenos"> 855</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-856"><a href="#Parser-856"><span class="linenos"> 856</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-857"><a href="#Parser-857"><span class="linenos"> 857</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-858"><a href="#Parser-858"><span class="linenos"> 858</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-859"><a href="#Parser-859"><span class="linenos"> 859</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-860"><a href="#Parser-860"><span class="linenos"> 860</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-861"><a href="#Parser-861"><span class="linenos"> 861</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-862"><a href="#Parser-862"><span class="linenos"> 862</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-863"><a href="#Parser-863"><span class="linenos"> 863</span></a>
-</span><span id="Parser-864"><a href="#Parser-864"><span class="linenos"> 864</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
-</span><span id="Parser-865"><a href="#Parser-865"><span class="linenos"> 865</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-866"><a href="#Parser-866"><span class="linenos"> 866</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-867"><a href="#Parser-867"><span class="linenos"> 867</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-868"><a href="#Parser-868"><span class="linenos"> 868</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
-</span><span id="Parser-869"><a href="#Parser-869"><span class="linenos"> 869</span></a><span class="sd"> per parsed SQL statement.</span>
-</span><span id="Parser-870"><a href="#Parser-870"><span class="linenos"> 870</span></a>
-</span><span id="Parser-871"><a href="#Parser-871"><span class="linenos"> 871</span></a><span class="sd"> Args:</span>
-</span><span id="Parser-872"><a href="#Parser-872"><span class="linenos"> 872</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
-</span><span id="Parser-873"><a href="#Parser-873"><span class="linenos"> 873</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
-</span><span id="Parser-876"><a href="#Parser-876"><span class="linenos"> 876</span></a><span class="sd"> The list of the produced syntax trees.</span>
-</span><span id="Parser-877"><a href="#Parser-877"><span class="linenos"> 877</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-878"><a href="#Parser-878"><span class="linenos"> 878</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-879"><a href="#Parser-879"><span class="linenos"> 879</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-880"><a href="#Parser-880"><span class="linenos"> 880</span></a> <span class="p">)</span>
-</span><span id="Parser-881"><a href="#Parser-881"><span class="linenos"> 881</span></a>
-</span><span id="Parser-882"><a href="#Parser-882"><span class="linenos"> 882</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Parser-883"><a href="#Parser-883"><span class="linenos"> 883</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-884"><a href="#Parser-884"><span class="linenos"> 884</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-885"><a href="#Parser-885"><span class="linenos"> 885</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-886"><a href="#Parser-886"><span class="linenos"> 886</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-887"><a href="#Parser-887"><span class="linenos"> 887</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-888"><a href="#Parser-888"><span class="linenos"> 888</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-889"><a href="#Parser-889"><span class="linenos"> 889</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-890"><a href="#Parser-890"><span class="linenos"> 890</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-891"><a href="#Parser-891"><span class="linenos"> 891</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</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="sd"> Args:</span>
-</span><span id="Parser-894"><a href="#Parser-894"><span class="linenos"> 894</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
-</span><span id="Parser-895"><a href="#Parser-895"><span class="linenos"> 895</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
-</span><span id="Parser-896"><a href="#Parser-896"><span class="linenos"> 896</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
-</span><span id="Parser-899"><a href="#Parser-899"><span class="linenos"> 899</span></a><span class="sd"> The target Expression.</span>
-</span><span id="Parser-900"><a href="#Parser-900"><span class="linenos"> 900</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-901"><a href="#Parser-901"><span class="linenos"> 901</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-902"><a href="#Parser-902"><span class="linenos"> 902</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
-</span><span id="Parser-903"><a href="#Parser-903"><span class="linenos"> 903</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-904"><a href="#Parser-904"><span class="linenos"> 904</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-905"><a href="#Parser-905"><span class="linenos"> 905</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-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">try</span><span class="p">:</span>
-</span><span id="Parser-908"><a href="#Parser-908"><span class="linenos"> 908</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-909"><a href="#Parser-909"><span class="linenos"> 909</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-910"><a href="#Parser-910"><span class="linenos"> 910</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-911"><a href="#Parser-911"><span class="linenos"> 911</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-912"><a href="#Parser-912"><span class="linenos"> 912</span></a>
-</span><span id="Parser-913"><a href="#Parser-913"><span class="linenos"> 913</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser-914"><a href="#Parser-914"><span class="linenos"> 914</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; 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-915"><a href="#Parser-915"><span class="linenos"> 915</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-916"><a href="#Parser-916"><span class="linenos"> 916</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-854"><a href="#Parser-854"><span class="linenos"> 854</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-855"><a href="#Parser-855"><span class="linenos"> 855</span></a>
+</span><span id="Parser-856"><a href="#Parser-856"><span class="linenos"> 856</span></a> <span class="c1"># Whether or not ADD is present for each column added by ALTER TABLE</span>
+</span><span id="Parser-857"><a href="#Parser-857"><span class="linenos"> 857</span></a> <span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-858"><a href="#Parser-858"><span class="linenos"> 858</span></a>
+</span><span id="Parser-859"><a href="#Parser-859"><span class="linenos"> 859</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-860"><a href="#Parser-860"><span class="linenos"> 860</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
+</span><span id="Parser-861"><a href="#Parser-861"><span class="linenos"> 861</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
+</span><span id="Parser-862"><a href="#Parser-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
+</span><span id="Parser-863"><a href="#Parser-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="Parser-864"><a href="#Parser-864"><span class="linenos"> 864</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
+</span><span id="Parser-865"><a href="#Parser-865"><span class="linenos"> 865</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
+</span><span id="Parser-866"><a href="#Parser-866"><span class="linenos"> 866</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
+</span><span id="Parser-867"><a href="#Parser-867"><span class="linenos"> 867</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
+</span><span id="Parser-868"><a href="#Parser-868"><span class="linenos"> 868</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
+</span><span id="Parser-869"><a href="#Parser-869"><span class="linenos"> 869</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
+</span><span id="Parser-870"><a href="#Parser-870"><span class="linenos"> 870</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
+</span><span id="Parser-871"><a href="#Parser-871"><span class="linenos"> 871</span></a> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">,</span>
+</span><span id="Parser-872"><a href="#Parser-872"><span class="linenos"> 872</span></a> <span class="p">)</span>
+</span><span id="Parser-873"><a href="#Parser-873"><span class="linenos"> 873</span></a>
+</span><span id="Parser-874"><a href="#Parser-874"><span class="linenos"> 874</span></a> <span class="c1"># Autofilled</span>
+</span><span id="Parser-875"><a href="#Parser-875"><span class="linenos"> 875</span></a> <span class="n">TOKENIZER_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">Tokenizer</span><span class="p">]</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="Parser-876"><a href="#Parser-876"><span class="linenos"> 876</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><span id="Parser-877"><a href="#Parser-877"><span class="linenos"> 877</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><span id="Parser-878"><a href="#Parser-878"><span class="linenos"> 878</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><span id="Parser-879"><a href="#Parser-879"><span class="linenos"> 879</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-880"><a href="#Parser-880"><span class="linenos"> 880</span></a> <span class="n">NORMALIZE_FUNCTIONS</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="Parser-881"><a href="#Parser-881"><span class="linenos"> 881</span></a> <span class="n">NULL_ORDERING</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Parser-882"><a href="#Parser-882"><span class="linenos"> 882</span></a> <span class="n">SHOW_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-883"><a href="#Parser-883"><span class="linenos"> 883</span></a> <span class="n">SET_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-884"><a href="#Parser-884"><span class="linenos"> 884</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-885"><a href="#Parser-885"><span class="linenos"> 885</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-886"><a href="#Parser-886"><span class="linenos"> 886</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="Parser-887"><a href="#Parser-887"><span class="linenos"> 887</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-888"><a href="#Parser-888"><span class="linenos"> 888</span></a>
+</span><span id="Parser-889"><a href="#Parser-889"><span class="linenos"> 889</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Parser-890"><a href="#Parser-890"><span class="linenos"> 890</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-891"><a href="#Parser-891"><span class="linenos"> 891</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-892"><a href="#Parser-892"><span class="linenos"> 892</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-893"><a href="#Parser-893"><span class="linenos"> 893</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-894"><a href="#Parser-894"><span class="linenos"> 894</span></a> <span class="p">):</span>
+</span><span id="Parser-895"><a href="#Parser-895"><span class="linenos"> 895</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-896"><a href="#Parser-896"><span class="linenos"> 896</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-897"><a href="#Parser-897"><span class="linenos"> 897</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-898"><a href="#Parser-898"><span class="linenos"> 898</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><span id="Parser-899"><a href="#Parser-899"><span class="linenos"> 899</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Parser-900"><a href="#Parser-900"><span class="linenos"> 900</span></a>
+</span><span id="Parser-901"><a href="#Parser-901"><span class="linenos"> 901</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-902"><a href="#Parser-902"><span class="linenos"> 902</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-903"><a href="#Parser-903"><span class="linenos"> 903</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-904"><a href="#Parser-904"><span class="linenos"> 904</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-905"><a href="#Parser-905"><span class="linenos"> 905</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-906"><a href="#Parser-906"><span class="linenos"> 906</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-907"><a href="#Parser-907"><span class="linenos"> 907</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-908"><a href="#Parser-908"><span class="linenos"> 908</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-909"><a href="#Parser-909"><span class="linenos"> 909</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-910"><a href="#Parser-910"><span class="linenos"> 910</span></a>
+</span><span id="Parser-911"><a href="#Parser-911"><span class="linenos"> 911</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
+</span><span id="Parser-912"><a href="#Parser-912"><span class="linenos"> 912</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-913"><a href="#Parser-913"><span class="linenos"> 913</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-914"><a href="#Parser-914"><span class="linenos"> 914</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-915"><a href="#Parser-915"><span class="linenos"> 915</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
+</span><span id="Parser-916"><a href="#Parser-916"><span class="linenos"> 916</span></a><span class="sd"> per parsed SQL statement.</span>
</span><span id="Parser-917"><a href="#Parser-917"><span class="linenos"> 917</span></a>
-</span><span id="Parser-918"><a href="#Parser-918"><span class="linenos"> 918</span></a> <span class="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
-</span><span id="Parser-919"><a href="#Parser-919"><span class="linenos"> 919</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-920"><a href="#Parser-920"><span class="linenos"> 920</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-921"><a href="#Parser-921"><span class="linenos"> 921</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-922"><a href="#Parser-922"><span class="linenos"> 922</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-923"><a href="#Parser-923"><span class="linenos"> 923</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-924"><a href="#Parser-924"><span class="linenos"> 924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Parser-925"><a href="#Parser-925"><span class="linenos"> 925</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-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">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-928"><a href="#Parser-928"><span class="linenos"> 928</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-929"><a href="#Parser-929"><span class="linenos"> 929</span></a>
-</span><span id="Parser-930"><a href="#Parser-930"><span class="linenos"> 930</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-931"><a href="#Parser-931"><span class="linenos"> 931</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-932"><a href="#Parser-932"><span class="linenos"> 932</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-933"><a href="#Parser-933"><span class="linenos"> 933</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
-</span><span id="Parser-934"><a href="#Parser-934"><span class="linenos"> 934</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-935"><a href="#Parser-935"><span class="linenos"> 935</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-936"><a href="#Parser-936"><span class="linenos"> 936</span></a>
-</span><span id="Parser-937"><a href="#Parser-937"><span class="linenos"> 937</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-938"><a href="#Parser-938"><span class="linenos"> 938</span></a>
-</span><span id="Parser-939"><a href="#Parser-939"><span class="linenos"> 939</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-940"><a href="#Parser-940"><span class="linenos"> 940</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-941"><a href="#Parser-941"><span class="linenos"> 941</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-942"><a href="#Parser-942"><span class="linenos"> 942</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-943"><a href="#Parser-943"><span class="linenos"> 943</span></a>
-</span><span id="Parser-944"><a href="#Parser-944"><span class="linenos"> 944</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-945"><a href="#Parser-945"><span class="linenos"> 945</span></a>
-</span><span id="Parser-946"><a href="#Parser-946"><span class="linenos"> 946</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-947"><a href="#Parser-947"><span class="linenos"> 947</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-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="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
-</span><span id="Parser-950"><a href="#Parser-950"><span class="linenos"> 950</span></a>
-</span><span id="Parser-951"><a href="#Parser-951"><span class="linenos"> 951</span></a> <span class="k">return</span> <span class="n">expressions</span>
-</span><span id="Parser-952"><a href="#Parser-952"><span class="linenos"> 952</span></a>
-</span><span id="Parser-953"><a href="#Parser-953"><span class="linenos"> 953</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-954"><a href="#Parser-954"><span class="linenos"> 954</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
-</span><span id="Parser-955"><a href="#Parser-955"><span class="linenos"> 955</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-956"><a href="#Parser-956"><span class="linenos"> 956</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-957"><a href="#Parser-957"><span class="linenos"> 957</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-958"><a href="#Parser-958"><span class="linenos"> 958</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-959"><a href="#Parser-959"><span class="linenos"> 959</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser-960"><a href="#Parser-960"><span class="linenos"> 960</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-961"><a href="#Parser-961"><span class="linenos"> 961</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-962"><a href="#Parser-962"><span class="linenos"> 962</span></a> <span class="p">)</span>
-</span><span id="Parser-963"><a href="#Parser-963"><span class="linenos"> 963</span></a>
-</span><span id="Parser-964"><a href="#Parser-964"><span class="linenos"> 964</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-965"><a href="#Parser-965"><span class="linenos"> 965</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-966"><a href="#Parser-966"><span class="linenos"> 966</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-967"><a href="#Parser-967"><span class="linenos"> 967</span></a><span class="sd"> error level setting.</span>
-</span><span id="Parser-968"><a href="#Parser-968"><span class="linenos"> 968</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-969"><a href="#Parser-969"><span class="linenos"> 969</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-970"><a href="#Parser-970"><span class="linenos"> 970</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-971"><a href="#Parser-971"><span class="linenos"> 971</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 class="o">+</span> <span class="mi">1</span>
-</span><span id="Parser-972"><a href="#Parser-972"><span class="linenos"> 972</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-973"><a href="#Parser-973"><span class="linenos"> 973</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-974"><a href="#Parser-974"><span class="linenos"> 974</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-975"><a href="#Parser-975"><span class="linenos"> 975</span></a>
-</span><span id="Parser-976"><a href="#Parser-976"><span class="linenos"> 976</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-977"><a href="#Parser-977"><span class="linenos"> 977</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-978"><a href="#Parser-978"><span class="linenos"> 978</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-979"><a href="#Parser-979"><span class="linenos"> 979</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
-</span><span id="Parser-980"><a href="#Parser-980"><span class="linenos"> 980</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-981"><a href="#Parser-981"><span class="linenos"> 981</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-982"><a href="#Parser-982"><span class="linenos"> 982</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-983"><a href="#Parser-983"><span class="linenos"> 983</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
-</span><span id="Parser-984"><a href="#Parser-984"><span class="linenos"> 984</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-985"><a href="#Parser-985"><span class="linenos"> 985</span></a> <span class="p">)</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">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-988"><a href="#Parser-988"><span class="linenos"> 988</span></a> <span class="k">raise</span> <span class="n">error</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="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-991"><a href="#Parser-991"><span class="linenos"> 991</span></a>
-</span><span id="Parser-992"><a href="#Parser-992"><span class="linenos"> 992</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
-</span><span id="Parser-993"><a href="#Parser-993"><span class="linenos"> 993</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-994"><a href="#Parser-994"><span class="linenos"> 994</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Parser-995"><a href="#Parser-995"><span class="linenos"> 995</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-996"><a href="#Parser-996"><span class="linenos"> 996</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="Parser-918"><a href="#Parser-918"><span class="linenos"> 918</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-919"><a href="#Parser-919"><span class="linenos"> 919</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
+</span><span id="Parser-920"><a href="#Parser-920"><span class="linenos"> 920</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
+</span><span id="Parser-923"><a href="#Parser-923"><span class="linenos"> 923</span></a><span class="sd"> The list of the produced syntax trees.</span>
+</span><span id="Parser-924"><a href="#Parser-924"><span class="linenos"> 924</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-925"><a href="#Parser-925"><span class="linenos"> 925</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-926"><a href="#Parser-926"><span class="linenos"> 926</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-927"><a href="#Parser-927"><span class="linenos"> 927</span></a> <span class="p">)</span>
+</span><span id="Parser-928"><a href="#Parser-928"><span class="linenos"> 928</span></a>
+</span><span id="Parser-929"><a href="#Parser-929"><span class="linenos"> 929</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Parser-930"><a href="#Parser-930"><span class="linenos"> 930</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-931"><a href="#Parser-931"><span class="linenos"> 931</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-932"><a href="#Parser-932"><span class="linenos"> 932</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-933"><a href="#Parser-933"><span class="linenos"> 933</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-934"><a href="#Parser-934"><span class="linenos"> 934</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-935"><a href="#Parser-935"><span class="linenos"> 935</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-936"><a href="#Parser-936"><span class="linenos"> 936</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-937"><a href="#Parser-937"><span class="linenos"> 937</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-938"><a href="#Parser-938"><span class="linenos"> 938</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
+</span><span id="Parser-939"><a href="#Parser-939"><span class="linenos"> 939</span></a>
+</span><span id="Parser-940"><a href="#Parser-940"><span class="linenos"> 940</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-941"><a href="#Parser-941"><span class="linenos"> 941</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
+</span><span id="Parser-942"><a href="#Parser-942"><span class="linenos"> 942</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
+</span><span id="Parser-943"><a href="#Parser-943"><span class="linenos"> 943</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</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="sd"> Returns:</span>
+</span><span id="Parser-946"><a href="#Parser-946"><span class="linenos"> 946</span></a><span class="sd"> The target Expression.</span>
+</span><span id="Parser-947"><a href="#Parser-947"><span class="linenos"> 947</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-948"><a href="#Parser-948"><span class="linenos"> 948</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-949"><a href="#Parser-949"><span class="linenos"> 949</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
+</span><span id="Parser-950"><a href="#Parser-950"><span class="linenos"> 950</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-951"><a href="#Parser-951"><span class="linenos"> 951</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-952"><a href="#Parser-952"><span class="linenos"> 952</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-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="k">try</span><span class="p">:</span>
+</span><span id="Parser-955"><a href="#Parser-955"><span class="linenos"> 955</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-956"><a href="#Parser-956"><span class="linenos"> 956</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-957"><a href="#Parser-957"><span class="linenos"> 957</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-958"><a href="#Parser-958"><span class="linenos"> 958</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-959"><a href="#Parser-959"><span class="linenos"> 959</span></a>
+</span><span id="Parser-960"><a href="#Parser-960"><span class="linenos"> 960</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser-961"><a href="#Parser-961"><span class="linenos"> 961</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; 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-962"><a href="#Parser-962"><span class="linenos"> 962</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-963"><a href="#Parser-963"><span class="linenos"> 963</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-964"><a href="#Parser-964"><span class="linenos"> 964</span></a>
+</span><span id="Parser-965"><a href="#Parser-965"><span class="linenos"> 965</span></a> <span class="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
+</span><span id="Parser-966"><a href="#Parser-966"><span class="linenos"> 966</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-967"><a href="#Parser-967"><span class="linenos"> 967</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-968"><a href="#Parser-968"><span class="linenos"> 968</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-969"><a href="#Parser-969"><span class="linenos"> 969</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-970"><a href="#Parser-970"><span class="linenos"> 970</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-971"><a href="#Parser-971"><span class="linenos"> 971</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Parser-972"><a href="#Parser-972"><span class="linenos"> 972</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-973"><a href="#Parser-973"><span class="linenos"> 973</span></a>
+</span><span id="Parser-974"><a href="#Parser-974"><span class="linenos"> 974</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-975"><a href="#Parser-975"><span class="linenos"> 975</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-976"><a href="#Parser-976"><span class="linenos"> 976</span></a>
+</span><span id="Parser-977"><a href="#Parser-977"><span class="linenos"> 977</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-978"><a href="#Parser-978"><span class="linenos"> 978</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-979"><a href="#Parser-979"><span class="linenos"> 979</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-980"><a href="#Parser-980"><span class="linenos"> 980</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
+</span><span id="Parser-981"><a href="#Parser-981"><span class="linenos"> 981</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-982"><a href="#Parser-982"><span class="linenos"> 982</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-983"><a href="#Parser-983"><span class="linenos"> 983</span></a>
+</span><span id="Parser-984"><a href="#Parser-984"><span class="linenos"> 984</span></a> <span class="n">expressions</span> <span class="o">=</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">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-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="o">-</span><span class="mi">1</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">_tokens</span> <span class="o">=</span> <span class="n">tokens</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">_advance</span><span class="p">()</span>
+</span><span id="Parser-990"><a href="#Parser-990"><span class="linenos"> 990</span></a>
+</span><span id="Parser-991"><a href="#Parser-991"><span class="linenos"> 991</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-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">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-994"><a href="#Parser-994"><span class="linenos"> 994</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-995"><a href="#Parser-995"><span class="linenos"> 995</span></a>
+</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">check_errors</span><span class="p">()</span>
</span><span id="Parser-997"><a href="#Parser-997"><span class="linenos"> 997</span></a>
-</span><span id="Parser-998"><a href="#Parser-998"><span class="linenos"> 998</span></a><span class="sd"> Args:</span>
-</span><span id="Parser-999"><a href="#Parser-999"><span class="linenos"> 999</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
-</span><span id="Parser-1000"><a href="#Parser-1000"><span class="linenos">1000</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
-</span><span id="Parser-1001"><a href="#Parser-1001"><span class="linenos">1001</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
-</span><span id="Parser-1002"><a href="#Parser-1002"><span class="linenos">1002</span></a>
-</span><span id="Parser-1003"><a href="#Parser-1003"><span class="linenos">1003</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser-1004"><a href="#Parser-1004"><span class="linenos">1004</span></a><span class="sd"> The target expression.</span>
-</span><span id="Parser-1005"><a href="#Parser-1005"><span class="linenos">1005</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-1006"><a href="#Parser-1006"><span class="linenos">1006</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-1007"><a href="#Parser-1007"><span class="linenos">1007</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
-</span><span id="Parser-1008"><a href="#Parser-1008"><span class="linenos">1008</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</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="k">def</span> <span class="nf">_add_comments</span><span 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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-1011"><a href="#Parser-1011"><span class="linenos">1011</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-1012"><a href="#Parser-1012"><span class="linenos">1012</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">add_comments</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-1013"><a href="#Parser-1013"><span class="linenos">1013</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-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">def</span> <span class="nf">validate_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">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 class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Parser-1016"><a href="#Parser-1016"><span class="linenos">1016</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-1017"><a href="#Parser-1017"><span class="linenos">1017</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</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="sd"> Args:</span>
-</span><span id="Parser-1020"><a href="#Parser-1020"><span class="linenos">1020</span></a><span class="sd"> expression: The expression to validate.</span>
-</span><span id="Parser-1021"><a href="#Parser-1021"><span class="linenos">1021</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-998"><a href="#Parser-998"><span class="linenos"> 998</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="Parser-999"><a href="#Parser-999"><span class="linenos"> 999</span></a>
+</span><span id="Parser-1000"><a href="#Parser-1000"><span class="linenos">1000</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-1001"><a href="#Parser-1001"><span class="linenos">1001</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
+</span><span id="Parser-1002"><a href="#Parser-1002"><span class="linenos">1002</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-1003"><a href="#Parser-1003"><span class="linenos">1003</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-1004"><a href="#Parser-1004"><span class="linenos">1004</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-1005"><a href="#Parser-1005"><span class="linenos">1005</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-1006"><a href="#Parser-1006"><span class="linenos">1006</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser-1007"><a href="#Parser-1007"><span class="linenos">1007</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-1008"><a href="#Parser-1008"><span class="linenos">1008</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-1009"><a href="#Parser-1009"><span class="linenos">1009</span></a> <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">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-1012"><a href="#Parser-1012"><span class="linenos">1012</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-1013"><a href="#Parser-1013"><span class="linenos">1013</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-1014"><a href="#Parser-1014"><span class="linenos">1014</span></a><span class="sd"> error level setting.</span>
+</span><span id="Parser-1015"><a href="#Parser-1015"><span class="linenos">1015</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-1016"><a href="#Parser-1016"><span class="linenos">1016</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-1017"><a href="#Parser-1017"><span class="linenos">1017</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-1018"><a href="#Parser-1018"><span class="linenos">1018</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 class="o">+</span> <span class="mi">1</span>
+</span><span id="Parser-1019"><a href="#Parser-1019"><span class="linenos">1019</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-1020"><a href="#Parser-1020"><span class="linenos">1020</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-1021"><a href="#Parser-1021"><span class="linenos">1021</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-1022"><a href="#Parser-1022"><span class="linenos">1022</span></a>
-</span><span id="Parser-1023"><a href="#Parser-1023"><span class="linenos">1023</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser-1024"><a href="#Parser-1024"><span class="linenos">1024</span></a><span class="sd"> The validated expression.</span>
-</span><span id="Parser-1025"><a href="#Parser-1025"><span class="linenos">1025</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-1026"><a href="#Parser-1026"><span class="linenos">1026</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-1027"><a href="#Parser-1027"><span class="linenos">1027</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-1028"><a href="#Parser-1028"><span class="linenos">1028</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-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">return</span> <span class="n">expression</span>
-</span><span id="Parser-1031"><a href="#Parser-1031"><span class="linenos">1031</span></a>
-</span><span id="Parser-1032"><a href="#Parser-1032"><span class="linenos">1032</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-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">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="o">+</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Parser-1034"><a href="#Parser-1034"><span class="linenos">1034</span></a>
-</span><span id="Parser-1035"><a href="#Parser-1035"><span class="linenos">1035</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-1036"><a href="#Parser-1036"><span class="linenos">1036</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-1037"><a href="#Parser-1037"><span class="linenos">1037</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-1038"><a href="#Parser-1038"><span class="linenos">1038</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-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="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-1041"><a href="#Parser-1041"><span class="linenos">1041</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-1042"><a href="#Parser-1042"><span class="linenos">1042</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-1043"><a href="#Parser-1043"><span class="linenos">1043</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1044"><a href="#Parser-1044"><span class="linenos">1044</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-1045"><a href="#Parser-1045"><span class="linenos">1045</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-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="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-1048"><a href="#Parser-1048"><span class="linenos">1048</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-1049"><a href="#Parser-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 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-1050"><a href="#Parser-1050"><span class="linenos">1050</span></a>
-</span><span id="Parser-1051"><a href="#Parser-1051"><span class="linenos">1051</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-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">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-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">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-1055"><a href="#Parser-1055"><span class="linenos">1055</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</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 class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-1057"><a href="#Parser-1057"><span class="linenos">1057</span></a>
-</span><span id="Parser-1058"><a href="#Parser-1058"><span class="linenos">1058</span></a> <span class="bp">self</span><span 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-1059"><a href="#Parser-1059"><span class="linenos">1059</span></a>
-</span><span id="Parser-1060"><a href="#Parser-1060"><span class="linenos">1060</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-1061"><a href="#Parser-1061"><span class="linenos">1061</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-1062"><a href="#Parser-1062"><span class="linenos">1062</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-1063"><a href="#Parser-1063"><span class="linenos">1063</span></a>
-</span><span id="Parser-1064"><a href="#Parser-1064"><span class="linenos">1064</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-1065"><a href="#Parser-1065"><span class="linenos">1065</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-1066"><a href="#Parser-1066"><span class="linenos">1066</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-1067"><a href="#Parser-1067"><span class="linenos">1067</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-1068"><a href="#Parser-1068"><span class="linenos">1068</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-1069"><a href="#Parser-1069"><span class="linenos">1069</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-1070"><a href="#Parser-1070"><span class="linenos">1070</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1071"><a href="#Parser-1071"><span class="linenos">1071</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-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="bp">self</span><span 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-1074"><a href="#Parser-1074"><span class="linenos">1074</span></a>
-</span><span id="Parser-1075"><a href="#Parser-1075"><span class="linenos">1075</span></a> <span class="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-1076"><a href="#Parser-1076"><span class="linenos">1076</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-1077"><a href="#Parser-1077"><span class="linenos">1077</span></a> <span class="p">)</span>
+</span><span id="Parser-1023"><a href="#Parser-1023"><span class="linenos">1023</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-1024"><a href="#Parser-1024"><span class="linenos">1024</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-1025"><a href="#Parser-1025"><span class="linenos">1025</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-1026"><a href="#Parser-1026"><span class="linenos">1026</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+</span><span id="Parser-1027"><a href="#Parser-1027"><span class="linenos">1027</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-1028"><a href="#Parser-1028"><span class="linenos">1028</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-1029"><a href="#Parser-1029"><span class="linenos">1029</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-1030"><a href="#Parser-1030"><span class="linenos">1030</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
+</span><span id="Parser-1031"><a href="#Parser-1031"><span class="linenos">1031</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-1032"><a href="#Parser-1032"><span class="linenos">1032</span></a> <span class="p">)</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">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-1035"><a href="#Parser-1035"><span class="linenos">1035</span></a> <span class="k">raise</span> <span class="n">error</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="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-1038"><a href="#Parser-1038"><span class="linenos">1038</span></a>
+</span><span id="Parser-1039"><a href="#Parser-1039"><span class="linenos">1039</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
+</span><span id="Parser-1040"><a href="#Parser-1040"><span class="linenos">1040</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-1041"><a href="#Parser-1041"><span class="linenos">1041</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Parser-1042"><a href="#Parser-1042"><span class="linenos">1042</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-1043"><a href="#Parser-1043"><span class="linenos">1043</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="Parser-1044"><a href="#Parser-1044"><span class="linenos">1044</span></a>
+</span><span id="Parser-1045"><a href="#Parser-1045"><span class="linenos">1045</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-1046"><a href="#Parser-1046"><span class="linenos">1046</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
+</span><span id="Parser-1047"><a href="#Parser-1047"><span class="linenos">1047</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
+</span><span id="Parser-1048"><a href="#Parser-1048"><span class="linenos">1048</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</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="sd"> Returns:</span>
+</span><span id="Parser-1051"><a href="#Parser-1051"><span class="linenos">1051</span></a><span class="sd"> The target expression.</span>
+</span><span id="Parser-1052"><a href="#Parser-1052"><span class="linenos">1052</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-1053"><a href="#Parser-1053"><span class="linenos">1053</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-1054"><a href="#Parser-1054"><span class="linenos">1054</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="Parser-1055"><a href="#Parser-1055"><span class="linenos">1055</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="Parser-1056"><a href="#Parser-1056"><span class="linenos">1056</span></a>
+</span><span id="Parser-1057"><a href="#Parser-1057"><span class="linenos">1057</span></a> <span class="k">def</span> <span class="nf">_add_comments</span><span 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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-1058"><a href="#Parser-1058"><span class="linenos">1058</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-1059"><a href="#Parser-1059"><span class="linenos">1059</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">add_comments</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-1060"><a href="#Parser-1060"><span class="linenos">1060</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-1061"><a href="#Parser-1061"><span class="linenos">1061</span></a>
+</span><span id="Parser-1062"><a href="#Parser-1062"><span class="linenos">1062</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">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 class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Parser-1063"><a href="#Parser-1063"><span class="linenos">1063</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-1064"><a href="#Parser-1064"><span class="linenos">1064</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</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="sd"> Args:</span>
+</span><span id="Parser-1067"><a href="#Parser-1067"><span class="linenos">1067</span></a><span class="sd"> expression: The expression to validate.</span>
+</span><span id="Parser-1068"><a href="#Parser-1068"><span class="linenos">1068</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-1069"><a href="#Parser-1069"><span class="linenos">1069</span></a>
+</span><span id="Parser-1070"><a href="#Parser-1070"><span class="linenos">1070</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser-1071"><a href="#Parser-1071"><span class="linenos">1071</span></a><span class="sd"> The validated expression.</span>
+</span><span id="Parser-1072"><a href="#Parser-1072"><span class="linenos">1072</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-1073"><a href="#Parser-1073"><span class="linenos">1073</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-1074"><a href="#Parser-1074"><span class="linenos">1074</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-1075"><a href="#Parser-1075"><span class="linenos">1075</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-1076"><a href="#Parser-1076"><span class="linenos">1076</span></a>
+</span><span id="Parser-1077"><a href="#Parser-1077"><span class="linenos">1077</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-1078"><a href="#Parser-1078"><span class="linenos">1078</span></a>
-</span><span id="Parser-1079"><a href="#Parser-1079"><span class="linenos">1079</span></a> <span class="k">def</span> <span class="nf">_parse_to_table</span><span class="p">(</span>
-</span><span id="Parser-1080"><a href="#Parser-1080"><span class="linenos">1080</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-1081"><a href="#Parser-1081"><span class="linenos">1081</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span>
-</span><span id="Parser-1082"><a href="#Parser-1082"><span class="linenos">1082</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1083"><a href="#Parser-1083"><span class="linenos">1083</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Parser-1084"><a href="#Parser-1084"><span class="linenos">1084</span></a>
-</span><span id="Parser-1085"><a href="#Parser-1085"><span class="linenos">1085</span></a> <span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
-</span><span id="Parser-1086"><a href="#Parser-1086"><span class="linenos">1086</span></a> <span class="k">def</span> <span class="nf">_parse_ttl</span><span class="p">(</span><span class="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-1087"><a href="#Parser-1087"><span class="linenos">1087</span></a> <span class="k">def</span> <span class="nf">_parse_ttl_action</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-1088"><a href="#Parser-1088"><span class="linenos">1088</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-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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELETE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1092"><a href="#Parser-1092"><span class="linenos">1092</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RECOMPRESS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1093"><a href="#Parser-1093"><span class="linenos">1093</span></a> <span class="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-1094"><a href="#Parser-1094"><span class="linenos">1094</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">recompress</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-1095"><a href="#Parser-1095"><span class="linenos">1095</span></a> <span class="p">)</span>
-</span><span id="Parser-1096"><a href="#Parser-1096"><span class="linenos">1096</span></a> <span class="k">if</span> <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;DISK&quot;</span><span class="p">):</span>
-</span><span id="Parser-1097"><a href="#Parser-1097"><span class="linenos">1097</span></a> <span class="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-1098"><a href="#Parser-1098"><span class="linenos">1098</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_disk</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-1099"><a href="#Parser-1099"><span class="linenos">1099</span></a> <span class="p">)</span>
-</span><span id="Parser-1100"><a href="#Parser-1100"><span class="linenos">1100</span></a> <span class="k">if</span> <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;VOLUME&quot;</span><span class="p">):</span>
-</span><span id="Parser-1101"><a href="#Parser-1101"><span class="linenos">1101</span></a> <span class="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-1102"><a href="#Parser-1102"><span class="linenos">1102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_volume</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-1103"><a href="#Parser-1103"><span class="linenos">1103</span></a> <span class="p">)</span>
+</span><span id="Parser-1079"><a href="#Parser-1079"><span class="linenos">1079</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-1080"><a href="#Parser-1080"><span class="linenos">1080</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="o">+</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Parser-1081"><a href="#Parser-1081"><span class="linenos">1081</span></a>
+</span><span id="Parser-1082"><a href="#Parser-1082"><span class="linenos">1082</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-1083"><a href="#Parser-1083"><span class="linenos">1083</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-1084"><a href="#Parser-1084"><span class="linenos">1084</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-1085"><a href="#Parser-1085"><span class="linenos">1085</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-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">_index</span> <span class="o">&gt;</span> <span class="mi">0</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">_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-1089"><a href="#Parser-1089"><span class="linenos">1089</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-1090"><a href="#Parser-1090"><span class="linenos">1090</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1091"><a href="#Parser-1091"><span class="linenos">1091</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-1092"><a href="#Parser-1092"><span class="linenos">1092</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-1093"><a href="#Parser-1093"><span class="linenos">1093</span></a>
+</span><span id="Parser-1094"><a href="#Parser-1094"><span class="linenos">1094</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-1095"><a href="#Parser-1095"><span class="linenos">1095</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-1096"><a href="#Parser-1096"><span class="linenos">1096</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-1097"><a href="#Parser-1097"><span class="linenos">1097</span></a>
+</span><span id="Parser-1098"><a href="#Parser-1098"><span class="linenos">1098</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-1099"><a href="#Parser-1099"><span class="linenos">1099</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1100"><a href="#Parser-1100"><span class="linenos">1100</span></a>
+</span><span id="Parser-1101"><a href="#Parser-1101"><span class="linenos">1101</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-1102"><a href="#Parser-1102"><span class="linenos">1102</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-1103"><a href="#Parser-1103"><span class="linenos">1103</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-1104"><a href="#Parser-1104"><span class="linenos">1104</span></a>
-</span><span id="Parser-1105"><a href="#Parser-1105"><span class="linenos">1105</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-1105"><a href="#Parser-1105"><span class="linenos">1105</span></a> <span class="bp">self</span><span 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-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="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_ttl_action</span><span class="p">)</span>
-</span><span id="Parser-1108"><a href="#Parser-1108"><span class="linenos">1108</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-1109"><a href="#Parser-1109"><span class="linenos">1109</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="Parser-1107"><a href="#Parser-1107"><span class="linenos">1107</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-1108"><a href="#Parser-1108"><span class="linenos">1108</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-1109"><a href="#Parser-1109"><span class="linenos">1109</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-1110"><a href="#Parser-1110"><span class="linenos">1110</span></a>
-</span><span id="Parser-1111"><a href="#Parser-1111"><span class="linenos">1111</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1112"><a href="#Parser-1112"><span class="linenos">1112</span></a> <span class="k">if</span> <span class="n">group</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">SET</span><span class="p">):</span>
-</span><span id="Parser-1113"><a href="#Parser-1113"><span class="linenos">1113</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-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="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-1116"><a href="#Parser-1116"><span class="linenos">1116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span>
-</span><span id="Parser-1117"><a href="#Parser-1117"><span class="linenos">1117</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-1118"><a href="#Parser-1118"><span class="linenos">1118</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
-</span><span id="Parser-1119"><a href="#Parser-1119"><span class="linenos">1119</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
-</span><span id="Parser-1120"><a href="#Parser-1120"><span class="linenos">1120</span></a> <span class="n">aggregates</span><span class="o">=</span><span class="n">aggregates</span><span class="p">,</span>
-</span><span id="Parser-1121"><a href="#Parser-1121"><span class="linenos">1121</span></a> <span class="p">)</span>
-</span><span id="Parser-1122"><a href="#Parser-1122"><span class="linenos">1122</span></a>
-</span><span id="Parser-1123"><a href="#Parser-1123"><span class="linenos">1123</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-1124"><a href="#Parser-1124"><span class="linenos">1124</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-1125"><a href="#Parser-1125"><span class="linenos">1125</span></a> <span class="k">return</span> <span class="kc">None</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="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-1128"><a href="#Parser-1128"><span class="linenos">1128</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-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="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-1131"><a href="#Parser-1131"><span class="linenos">1131</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-1132"><a href="#Parser-1132"><span class="linenos">1132</span></a>
-</span><span id="Parser-1133"><a href="#Parser-1133"><span class="linenos">1133</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-1134"><a href="#Parser-1134"><span class="linenos">1134</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-1135"><a href="#Parser-1135"><span class="linenos">1135</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-1111"><a href="#Parser-1111"><span class="linenos">1111</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-1112"><a href="#Parser-1112"><span class="linenos">1112</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-1113"><a href="#Parser-1113"><span class="linenos">1113</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-1114"><a href="#Parser-1114"><span class="linenos">1114</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-1115"><a href="#Parser-1115"><span class="linenos">1115</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-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_column</span><span class="p">()</span>
+</span><span id="Parser-1117"><a href="#Parser-1117"><span class="linenos">1117</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1118"><a href="#Parser-1118"><span class="linenos">1118</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-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="bp">self</span><span 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-1121"><a href="#Parser-1121"><span class="linenos">1121</span></a>
+</span><span id="Parser-1122"><a href="#Parser-1122"><span class="linenos">1122</span></a> <span class="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-1123"><a href="#Parser-1123"><span class="linenos">1123</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-1124"><a href="#Parser-1124"><span class="linenos">1124</span></a> <span class="p">)</span>
+</span><span id="Parser-1125"><a href="#Parser-1125"><span class="linenos">1125</span></a>
+</span><span id="Parser-1126"><a href="#Parser-1126"><span class="linenos">1126</span></a> <span class="k">def</span> <span class="nf">_parse_to_table</span><span class="p">(</span>
+</span><span id="Parser-1127"><a href="#Parser-1127"><span class="linenos">1127</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-1128"><a href="#Parser-1128"><span class="linenos">1128</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span>
+</span><span id="Parser-1129"><a href="#Parser-1129"><span class="linenos">1129</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1130"><a href="#Parser-1130"><span class="linenos">1130</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Parser-1131"><a href="#Parser-1131"><span class="linenos">1131</span></a>
+</span><span id="Parser-1132"><a href="#Parser-1132"><span class="linenos">1132</span></a> <span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
+</span><span id="Parser-1133"><a href="#Parser-1133"><span class="linenos">1133</span></a> <span class="k">def</span> <span class="nf">_parse_ttl</span><span class="p">(</span><span class="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-1134"><a href="#Parser-1134"><span class="linenos">1134</span></a> <span class="k">def</span> <span class="nf">_parse_ttl_action</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</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_bitwise</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="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">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-1138"><a href="#Parser-1138"><span class="linenos">1138</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-1139"><a href="#Parser-1139"><span class="linenos">1139</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-1140"><a href="#Parser-1140"><span class="linenos">1140</span></a> <span class="n">materialized</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;MATERIALIZED&quot;</span><span class="p">)</span>
-</span><span id="Parser-1141"><a href="#Parser-1141"><span class="linenos">1141</span></a>
-</span><span id="Parser-1142"><a href="#Parser-1142"><span class="linenos">1142</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-1143"><a href="#Parser-1143"><span class="linenos">1143</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-1144"><a href="#Parser-1144"><span class="linenos">1144</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-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="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-1147"><a href="#Parser-1147"><span class="linenos">1147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="Parser-1148"><a href="#Parser-1148"><span class="linenos">1148</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">start</span><span class="o">.</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-1149"><a href="#Parser-1149"><span class="linenos">1149</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-1150"><a href="#Parser-1150"><span class="linenos">1150</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-1151"><a href="#Parser-1151"><span class="linenos">1151</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-1152"><a href="#Parser-1152"><span class="linenos">1152</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
-</span><span id="Parser-1153"><a href="#Parser-1153"><span class="linenos">1153</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
-</span><span id="Parser-1154"><a href="#Parser-1154"><span class="linenos">1154</span></a> <span class="n">cascade</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;CASCADE&quot;</span><span class="p">),</span>
-</span><span id="Parser-1155"><a href="#Parser-1155"><span class="linenos">1155</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-1156"><a href="#Parser-1156"><span class="linenos">1156</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-1157"><a href="#Parser-1157"><span class="linenos">1157</span></a> <span class="p">)</span>
-</span><span id="Parser-1158"><a href="#Parser-1158"><span class="linenos">1158</span></a>
-</span><span id="Parser-1159"><a href="#Parser-1159"><span class="linenos">1159</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-1160"><a href="#Parser-1160"><span class="linenos">1160</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-1161"><a href="#Parser-1161"><span class="linenos">1161</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;IF&quot;</span><span class="p">)</span>
-</span><span id="Parser-1162"><a href="#Parser-1162"><span class="linenos">1162</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-1163"><a href="#Parser-1163"><span class="linenos">1163</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-1164"><a href="#Parser-1164"><span class="linenos">1164</span></a> <span class="p">)</span>
-</span><span id="Parser-1165"><a href="#Parser-1165"><span class="linenos">1165</span></a>
-</span><span id="Parser-1166"><a href="#Parser-1166"><span class="linenos">1166</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">exp</span><span class="o">.</span><span class="n">Create</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-1167"><a href="#Parser-1167"><span class="linenos">1167</span></a> <span class="c1"># Note: this can&#39;t be None because we&#39;ve matched a statement parser</span>
-</span><span id="Parser-1168"><a href="#Parser-1168"><span class="linenos">1168</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-1169"><a href="#Parser-1169"><span class="linenos">1169</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="n">start</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-1170"><a href="#Parser-1170"><span class="linenos">1170</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-1171"><a href="#Parser-1171"><span class="linenos">1171</span></a> <span class="p">)</span>
-</span><span id="Parser-1172"><a href="#Parser-1172"><span class="linenos">1172</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-1137"><a href="#Parser-1137"><span class="linenos">1137</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELETE&quot;</span><span class="p">):</span>
+</span><span id="Parser-1138"><a href="#Parser-1138"><span class="linenos">1138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RECOMPRESS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1140"><a href="#Parser-1140"><span class="linenos">1140</span></a> <span class="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-1141"><a href="#Parser-1141"><span class="linenos">1141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">recompress</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-1142"><a href="#Parser-1142"><span class="linenos">1142</span></a> <span class="p">)</span>
+</span><span id="Parser-1143"><a href="#Parser-1143"><span class="linenos">1143</span></a> <span class="k">if</span> <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;DISK&quot;</span><span class="p">):</span>
+</span><span id="Parser-1144"><a href="#Parser-1144"><span class="linenos">1144</span></a> <span class="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-1145"><a href="#Parser-1145"><span class="linenos">1145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_disk</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-1146"><a href="#Parser-1146"><span class="linenos">1146</span></a> <span class="p">)</span>
+</span><span id="Parser-1147"><a href="#Parser-1147"><span class="linenos">1147</span></a> <span class="k">if</span> <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;VOLUME&quot;</span><span class="p">):</span>
+</span><span id="Parser-1148"><a href="#Parser-1148"><span class="linenos">1148</span></a> <span class="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-1149"><a href="#Parser-1149"><span class="linenos">1149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</span><span 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_volume</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-1150"><a href="#Parser-1150"><span class="linenos">1150</span></a> <span class="p">)</span>
+</span><span id="Parser-1151"><a href="#Parser-1151"><span class="linenos">1151</span></a>
+</span><span id="Parser-1152"><a href="#Parser-1152"><span class="linenos">1152</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-1153"><a href="#Parser-1153"><span class="linenos">1153</span></a>
+</span><span id="Parser-1154"><a href="#Parser-1154"><span class="linenos">1154</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_ttl_action</span><span class="p">)</span>
+</span><span id="Parser-1155"><a href="#Parser-1155"><span class="linenos">1155</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-1156"><a href="#Parser-1156"><span class="linenos">1156</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="Parser-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">aggregates</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1159"><a href="#Parser-1159"><span class="linenos">1159</span></a> <span class="k">if</span> <span class="n">group</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">SET</span><span class="p">):</span>
+</span><span id="Parser-1160"><a href="#Parser-1160"><span class="linenos">1160</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-1161"><a href="#Parser-1161"><span class="linenos">1161</span></a>
+</span><span id="Parser-1162"><a href="#Parser-1162"><span class="linenos">1162</span></a> <span class="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-1163"><a href="#Parser-1163"><span class="linenos">1163</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span>
+</span><span id="Parser-1164"><a href="#Parser-1164"><span class="linenos">1164</span></a> <span class="n">expressions</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="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
+</span><span id="Parser-1166"><a href="#Parser-1166"><span class="linenos">1166</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
+</span><span id="Parser-1167"><a href="#Parser-1167"><span class="linenos">1167</span></a> <span class="n">aggregates</span><span class="o">=</span><span class="n">aggregates</span><span class="p">,</span>
+</span><span id="Parser-1168"><a href="#Parser-1168"><span class="linenos">1168</span></a> <span class="p">)</span>
+</span><span id="Parser-1169"><a href="#Parser-1169"><span class="linenos">1169</span></a>
+</span><span id="Parser-1170"><a href="#Parser-1170"><span class="linenos">1170</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-1171"><a href="#Parser-1171"><span class="linenos">1171</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-1172"><a href="#Parser-1172"><span class="linenos">1172</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1173"><a href="#Parser-1173"><span class="linenos">1173</span></a>
-</span><span id="Parser-1174"><a href="#Parser-1174"><span class="linenos">1174</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-1175"><a href="#Parser-1175"><span class="linenos">1175</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-1174"><a href="#Parser-1174"><span class="linenos">1174</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-1175"><a href="#Parser-1175"><span class="linenos">1175</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-1176"><a href="#Parser-1176"><span class="linenos">1176</span></a>
-</span><span id="Parser-1177"><a href="#Parser-1177"><span class="linenos">1177</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1178"><a href="#Parser-1178"><span class="linenos">1178</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-1177"><a href="#Parser-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_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-1178"><a href="#Parser-1178"><span class="linenos">1178</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-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">create_token</span><span class="p">:</span>
-</span><span id="Parser-1181"><a href="#Parser-1181"><span class="linenos">1181</span></a> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
-</span><span id="Parser-1182"><a href="#Parser-1182"><span class="linenos">1182</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><span id="Parser-1183"><a href="#Parser-1183"><span class="linenos">1183</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-1184"><a href="#Parser-1184"><span class="linenos">1184</span></a>
-</span><span id="Parser-1185"><a href="#Parser-1185"><span class="linenos">1185</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-1186"><a href="#Parser-1186"><span class="linenos">1186</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-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="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-1189"><a href="#Parser-1189"><span class="linenos">1189</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1190"><a href="#Parser-1190"><span class="linenos">1190</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><span id="Parser-1191"><a href="#Parser-1191"><span class="linenos">1191</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1192"><a href="#Parser-1192"><span class="linenos">1192</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1193"><a href="#Parser-1193"><span class="linenos">1193</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1194"><a href="#Parser-1194"><span class="linenos">1194</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1195"><a href="#Parser-1195"><span class="linenos">1195</span></a>
-</span><span id="Parser-1196"><a href="#Parser-1196"><span class="linenos">1196</span></a> <span class="k">def</span> <span class="nf">extend_props</span><span class="p">(</span><span class="n">temp_props</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="kc">None</span><span class="p">:</span>
-</span><span id="Parser-1197"><a href="#Parser-1197"><span class="linenos">1197</span></a> <span class="k">nonlocal</span> <span class="n">properties</span>
-</span><span id="Parser-1198"><a href="#Parser-1198"><span class="linenos">1198</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_props</span><span class="p">:</span>
-</span><span id="Parser-1199"><a href="#Parser-1199"><span class="linenos">1199</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_props</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1200"><a href="#Parser-1200"><span class="linenos">1200</span></a> <span class="k">elif</span> <span class="n">temp_props</span><span class="p">:</span>
-</span><span id="Parser-1201"><a href="#Parser-1201"><span class="linenos">1201</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_props</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="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-1204"><a href="#Parser-1204"><span class="linenos">1204</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-1180"><a href="#Parser-1180"><span class="linenos">1180</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-1181"><a href="#Parser-1181"><span class="linenos">1181</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-1182"><a href="#Parser-1182"><span class="linenos">1182</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-1183"><a href="#Parser-1183"><span class="linenos">1183</span></a>
+</span><span id="Parser-1184"><a href="#Parser-1184"><span class="linenos">1184</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="n">exists</span><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">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-1185"><a href="#Parser-1185"><span class="linenos">1185</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-1186"><a href="#Parser-1186"><span class="linenos">1186</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-1187"><a href="#Parser-1187"><span class="linenos">1187</span></a> <span class="n">materialized</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;MATERIALIZED&quot;</span><span class="p">)</span>
+</span><span id="Parser-1188"><a href="#Parser-1188"><span class="linenos">1188</span></a>
+</span><span id="Parser-1189"><a href="#Parser-1189"><span class="linenos">1189</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-1190"><a href="#Parser-1190"><span class="linenos">1190</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-1191"><a href="#Parser-1191"><span class="linenos">1191</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-1192"><a href="#Parser-1192"><span class="linenos">1192</span></a>
+</span><span id="Parser-1193"><a href="#Parser-1193"><span class="linenos">1193</span></a> <span class="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-1194"><a href="#Parser-1194"><span class="linenos">1194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="Parser-1195"><a href="#Parser-1195"><span class="linenos">1195</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">start</span><span class="o">.</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-1196"><a href="#Parser-1196"><span class="linenos">1196</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(),</span>
+</span><span id="Parser-1197"><a href="#Parser-1197"><span class="linenos">1197</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-1198"><a href="#Parser-1198"><span class="linenos">1198</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-1199"><a href="#Parser-1199"><span class="linenos">1199</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
+</span><span id="Parser-1200"><a href="#Parser-1200"><span class="linenos">1200</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
+</span><span id="Parser-1201"><a href="#Parser-1201"><span class="linenos">1201</span></a> <span class="n">cascade</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;CASCADE&quot;</span><span class="p">),</span>
+</span><span id="Parser-1202"><a href="#Parser-1202"><span class="linenos">1202</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-1203"><a href="#Parser-1203"><span class="linenos">1203</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-1204"><a href="#Parser-1204"><span class="linenos">1204</span></a> <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="c1"># exp.Properties.Location.POST_SCHEMA (&quot;schema&quot; here is the UDF&#39;s type signature)</span>
-</span><span id="Parser-1207"><a href="#Parser-1207"><span class="linenos">1207</span></a> <span class="n">extend_props</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-1208"><a href="#Parser-1208"><span class="linenos">1208</span></a>
-</span><span id="Parser-1209"><a href="#Parser-1209"><span class="linenos">1209</span></a> <span class="bp">self</span><span 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-1210"><a href="#Parser-1210"><span class="linenos">1210</span></a>
-</span><span id="Parser-1211"><a href="#Parser-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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">):</span>
-</span><span id="Parser-1212"><a href="#Parser-1212"><span class="linenos">1212</span></a> <span class="n">expression</span> <span class="o">=</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-1213"><a href="#Parser-1213"><span class="linenos">1213</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1214"><a href="#Parser-1214"><span class="linenos">1214</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-1215"><a href="#Parser-1215"><span class="linenos">1215</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-1216"><a href="#Parser-1216"><span class="linenos">1216</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-1206"><a href="#Parser-1206"><span class="linenos">1206</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-1207"><a href="#Parser-1207"><span class="linenos">1207</span></a> <span class="k">return</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;IF&quot;</span><span class="p">)</span>
+</span><span id="Parser-1209"><a href="#Parser-1209"><span class="linenos">1209</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-1210"><a href="#Parser-1210"><span class="linenos">1210</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-1211"><a href="#Parser-1211"><span class="linenos">1211</span></a> <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">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">exp</span><span class="o">.</span><span class="n">Create</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-1214"><a href="#Parser-1214"><span class="linenos">1214</span></a> <span class="c1"># Note: this can&#39;t be None because we&#39;ve matched a statement parser</span>
+</span><span id="Parser-1215"><a href="#Parser-1215"><span class="linenos">1215</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-1216"><a href="#Parser-1216"><span class="linenos">1216</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-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="n">return_</span><span class="p">:</span>
-</span><span id="Parser-1219"><a href="#Parser-1219"><span class="linenos">1219</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-1220"><a href="#Parser-1220"><span class="linenos">1220</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-1221"><a href="#Parser-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">_parse_index</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">_parse_id_var</span><span class="p">())</span>
-</span><span id="Parser-1222"><a href="#Parser-1222"><span class="linenos">1222</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-1223"><a href="#Parser-1223"><span class="linenos">1223</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-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="c1"># exp.Properties.Location.POST_NAME</span>
-</span><span id="Parser-1226"><a href="#Parser-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">COMMA</span><span class="p">)</span>
-</span><span id="Parser-1227"><a href="#Parser-1227"><span class="linenos">1227</span></a> <span class="n">extend_props</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 class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-1218"><a href="#Parser-1218"><span class="linenos">1218</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="n">start</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-1219"><a href="#Parser-1219"><span class="linenos">1219</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-1220"><a href="#Parser-1220"><span class="linenos">1220</span></a> <span class="p">)</span>
+</span><span id="Parser-1221"><a href="#Parser-1221"><span class="linenos">1221</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-1222"><a href="#Parser-1222"><span class="linenos">1222</span></a>
+</span><span id="Parser-1223"><a href="#Parser-1223"><span class="linenos">1223</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-1224"><a href="#Parser-1224"><span class="linenos">1224</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-1225"><a href="#Parser-1225"><span class="linenos">1225</span></a>
+</span><span id="Parser-1226"><a href="#Parser-1226"><span class="linenos">1226</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1227"><a href="#Parser-1227"><span class="linenos">1227</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-1228"><a href="#Parser-1228"><span class="linenos">1228</span></a>
-</span><span id="Parser-1229"><a href="#Parser-1229"><span class="linenos">1229</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-1230"><a href="#Parser-1230"><span class="linenos">1230</span></a>
-</span><span id="Parser-1231"><a href="#Parser-1231"><span class="linenos">1231</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
-</span><span id="Parser-1232"><a href="#Parser-1232"><span class="linenos">1232</span></a> <span class="n">extend_props</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-1229"><a href="#Parser-1229"><span class="linenos">1229</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-1230"><a href="#Parser-1230"><span class="linenos">1230</span></a> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
+</span><span id="Parser-1231"><a href="#Parser-1231"><span class="linenos">1231</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><span id="Parser-1232"><a href="#Parser-1232"><span class="linenos">1232</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-1233"><a href="#Parser-1233"><span class="linenos">1233</span></a>
-</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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-1235"><a href="#Parser-1235"><span class="linenos">1235</span></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">DDL_SELECT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-1236"><a href="#Parser-1236"><span class="linenos">1236</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
-</span><span id="Parser-1237"><a href="#Parser-1237"><span class="linenos">1237</span></a> <span class="n">extend_props</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-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="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-1240"><a href="#Parser-1240"><span class="linenos">1240</span></a>
-</span><span id="Parser-1241"><a href="#Parser-1241"><span class="linenos">1241</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-1242"><a href="#Parser-1242"><span class="linenos">1242</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
-</span><span id="Parser-1243"><a href="#Parser-1243"><span class="linenos">1243</span></a> <span class="n">extend_props</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-1234"><a href="#Parser-1234"><span class="linenos">1234</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-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">_parse_as_command</span><span class="p">(</span><span class="n">start</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="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-1238"><a href="#Parser-1238"><span class="linenos">1238</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1239"><a href="#Parser-1239"><span class="linenos">1239</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><span id="Parser-1240"><a href="#Parser-1240"><span class="linenos">1240</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1241"><a href="#Parser-1241"><span class="linenos">1241</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1242"><a href="#Parser-1242"><span class="linenos">1242</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1243"><a href="#Parser-1243"><span class="linenos">1243</span></a> <span class="n">clone</span> <span class="o">=</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="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1246"><a href="#Parser-1246"><span class="linenos">1246</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-1247"><a href="#Parser-1247"><span class="linenos">1247</span></a> <span class="n">index</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-1248"><a href="#Parser-1248"><span class="linenos">1248</span></a>
-</span><span id="Parser-1249"><a href="#Parser-1249"><span class="linenos">1249</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
-</span><span id="Parser-1250"><a href="#Parser-1250"><span class="linenos">1250</span></a> <span class="n">extend_props</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-1245"><a href="#Parser-1245"><span class="linenos">1245</span></a> <span class="k">def</span> <span class="nf">extend_props</span><span class="p">(</span><span class="n">temp_props</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="kc">None</span><span class="p">:</span>
+</span><span id="Parser-1246"><a href="#Parser-1246"><span class="linenos">1246</span></a> <span class="k">nonlocal</span> <span class="n">properties</span>
+</span><span id="Parser-1247"><a href="#Parser-1247"><span class="linenos">1247</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_props</span><span class="p">:</span>
+</span><span id="Parser-1248"><a href="#Parser-1248"><span class="linenos">1248</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_props</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1249"><a href="#Parser-1249"><span class="linenos">1249</span></a> <span class="k">elif</span> <span class="n">temp_props</span><span class="p">:</span>
+</span><span id="Parser-1250"><a href="#Parser-1250"><span class="linenos">1250</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_props</span>
</span><span id="Parser-1251"><a href="#Parser-1251"><span class="linenos">1251</span></a>
-</span><span id="Parser-1252"><a href="#Parser-1252"><span class="linenos">1252</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-1253"><a href="#Parser-1253"><span class="linenos">1253</span></a> <span class="k">break</span>
-</span><span id="Parser-1254"><a href="#Parser-1254"><span class="linenos">1254</span></a> <span class="k">else</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">COMMA</span><span class="p">)</span>
-</span><span id="Parser-1256"><a href="#Parser-1256"><span class="linenos">1256</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-1257"><a href="#Parser-1257"><span class="linenos">1257</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-1258"><a href="#Parser-1258"><span class="linenos">1258</span></a> <span class="k">if</span> <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-1259"><a href="#Parser-1259"><span class="linenos">1259</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1260"><a href="#Parser-1260"><span class="linenos">1260</span></a>
-</span><span id="Parser-1261"><a href="#Parser-1261"><span class="linenos">1261</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-1262"><a href="#Parser-1262"><span class="linenos">1262</span></a> <span class="n">clone</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-1263"><a href="#Parser-1263"><span class="linenos">1263</span></a> <span class="n">when</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;BEFORE&quot;</span><span class="p">})</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-1264"><a href="#Parser-1264"><span class="linenos">1264</span></a> <span class="n">clone_kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-1265"><a href="#Parser-1265"><span class="linenos">1265</span></a> <span class="bp">self</span><span 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-1266"><a href="#Parser-1266"><span class="linenos">1266</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="bp">self</span><span class="o">.</span><span class="n">CLONE_KINDS</span><span class="p">)</span>
-</span><span id="Parser-1267"><a href="#Parser-1267"><span class="linenos">1267</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-1268"><a href="#Parser-1268"><span class="linenos">1268</span></a> <span class="p">)</span>
-</span><span id="Parser-1269"><a href="#Parser-1269"><span class="linenos">1269</span></a> <span class="n">clone_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">FARROW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-1270"><a href="#Parser-1270"><span class="linenos">1270</span></a> <span class="bp">self</span><span 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-1271"><a href="#Parser-1271"><span class="linenos">1271</span></a> <span class="n">clone</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-1272"><a href="#Parser-1272"><span class="linenos">1272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span> <span class="n">when</span><span class="o">=</span><span class="n">when</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">clone_kind</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">clone_expression</span>
-</span><span id="Parser-1273"><a href="#Parser-1273"><span class="linenos">1273</span></a> <span class="p">)</span>
-</span><span id="Parser-1274"><a href="#Parser-1274"><span class="linenos">1274</span></a>
-</span><span id="Parser-1275"><a href="#Parser-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="Parser-1276"><a href="#Parser-1276"><span class="linenos">1276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
-</span><span id="Parser-1277"><a href="#Parser-1277"><span class="linenos">1277</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1278"><a href="#Parser-1278"><span class="linenos">1278</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-1279"><a href="#Parser-1279"><span class="linenos">1279</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
-</span><span id="Parser-1280"><a href="#Parser-1280"><span class="linenos">1280</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="Parser-1281"><a href="#Parser-1281"><span class="linenos">1281</span></a> <span class="n">expression</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="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="Parser-1283"><a href="#Parser-1283"><span class="linenos">1283</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
-</span><span id="Parser-1284"><a href="#Parser-1284"><span class="linenos">1284</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
-</span><span id="Parser-1285"><a href="#Parser-1285"><span class="linenos">1285</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-1286"><a href="#Parser-1286"><span class="linenos">1286</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
-</span><span id="Parser-1287"><a href="#Parser-1287"><span class="linenos">1287</span></a> <span class="n">clone</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
-</span><span id="Parser-1288"><a href="#Parser-1288"><span class="linenos">1288</span></a> <span class="p">)</span>
+</span><span id="Parser-1252"><a href="#Parser-1252"><span class="linenos">1252</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-1253"><a href="#Parser-1253"><span class="linenos">1253</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-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="c1"># exp.Properties.Location.POST_SCHEMA (&quot;schema&quot; here is the UDF&#39;s type signature)</span>
+</span><span id="Parser-1256"><a href="#Parser-1256"><span class="linenos">1256</span></a> <span class="n">extend_props</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-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="bp">self</span><span 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-1259"><a href="#Parser-1259"><span class="linenos">1259</span></a>
+</span><span id="Parser-1260"><a href="#Parser-1260"><span class="linenos">1260</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">):</span>
+</span><span id="Parser-1261"><a href="#Parser-1261"><span class="linenos">1261</span></a> <span class="n">expression</span> <span class="o">=</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-1262"><a href="#Parser-1262"><span class="linenos">1262</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1263"><a href="#Parser-1263"><span class="linenos">1263</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-1264"><a href="#Parser-1264"><span class="linenos">1264</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-1265"><a href="#Parser-1265"><span class="linenos">1265</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-1266"><a href="#Parser-1266"><span class="linenos">1266</span></a>
+</span><span id="Parser-1267"><a href="#Parser-1267"><span class="linenos">1267</span></a> <span class="k">if</span> <span class="n">return_</span><span class="p">:</span>
+</span><span id="Parser-1268"><a href="#Parser-1268"><span class="linenos">1268</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-1269"><a href="#Parser-1269"><span class="linenos">1269</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-1270"><a href="#Parser-1270"><span class="linenos">1270</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 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-1271"><a href="#Parser-1271"><span class="linenos">1271</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-1272"><a href="#Parser-1272"><span class="linenos">1272</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-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="c1"># exp.Properties.Location.POST_NAME</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</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-1276"><a href="#Parser-1276"><span class="linenos">1276</span></a> <span class="n">extend_props</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 class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-1277"><a href="#Parser-1277"><span class="linenos">1277</span></a>
+</span><span id="Parser-1278"><a href="#Parser-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">_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-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="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
+</span><span id="Parser-1281"><a href="#Parser-1281"><span class="linenos">1281</span></a> <span class="n">extend_props</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-1282"><a href="#Parser-1282"><span class="linenos">1282</span></a>
+</span><span id="Parser-1283"><a href="#Parser-1283"><span class="linenos">1283</span></a> <span class="bp">self</span><span 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-1284"><a href="#Parser-1284"><span class="linenos">1284</span></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">DDL_SELECT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-1285"><a href="#Parser-1285"><span class="linenos">1285</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
+</span><span id="Parser-1286"><a href="#Parser-1286"><span class="linenos">1286</span></a> <span class="n">extend_props</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-1287"><a href="#Parser-1287"><span class="linenos">1287</span></a>
+</span><span id="Parser-1288"><a href="#Parser-1288"><span class="linenos">1288</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-1289"><a href="#Parser-1289"><span class="linenos">1289</span></a>
-</span><span id="Parser-1290"><a href="#Parser-1290"><span class="linenos">1290</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-1291"><a href="#Parser-1291"><span class="linenos">1291</span></a> <span class="c1"># only used for teradata currently</span>
-</span><span id="Parser-1292"><a href="#Parser-1292"><span class="linenos">1292</span></a> <span class="bp">self</span><span 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-1290"><a href="#Parser-1290"><span class="linenos">1290</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-1291"><a href="#Parser-1291"><span class="linenos">1291</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
+</span><span id="Parser-1292"><a href="#Parser-1292"><span class="linenos">1292</span></a> <span class="n">extend_props</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-1293"><a href="#Parser-1293"><span class="linenos">1293</span></a>
-</span><span id="Parser-1294"><a href="#Parser-1294"><span class="linenos">1294</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-1295"><a href="#Parser-1295"><span class="linenos">1295</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">),</span>
-</span><span id="Parser-1296"><a href="#Parser-1296"><span class="linenos">1296</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">),</span>
-</span><span id="Parser-1297"><a href="#Parser-1297"><span class="linenos">1297</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BEFORE&quot;</span><span class="p">),</span>
-</span><span id="Parser-1298"><a href="#Parser-1298"><span class="linenos">1298</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">),</span>
-</span><span id="Parser-1299"><a href="#Parser-1299"><span class="linenos">1299</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1300"><a href="#Parser-1300"><span class="linenos">1300</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;NOT LOCAL&quot;</span><span class="p">),</span>
-</span><span id="Parser-1301"><a href="#Parser-1301"><span class="linenos">1301</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">),</span>
-</span><span id="Parser-1302"><a href="#Parser-1302"><span class="linenos">1302</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)),</span>
-</span><span id="Parser-1303"><a href="#Parser-1303"><span class="linenos">1303</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</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><span id="Parser-1305"><a href="#Parser-1305"><span class="linenos">1305</span></a>
-</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_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-1307"><a href="#Parser-1307"><span class="linenos">1307</span></a> <span class="n">parser</span> <span class="o">=</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><span id="Parser-1308"><a href="#Parser-1308"><span class="linenos">1308</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser-1309"><a href="#Parser-1309"><span class="linenos">1309</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="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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">v</span><span class="p">})</span>
-</span><span id="Parser-1310"><a href="#Parser-1310"><span class="linenos">1310</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
-</span><span id="Parser-1311"><a href="#Parser-1311"><span class="linenos">1311</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot parse property &#39;</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">&#39;&quot;</span><span class="p">)</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="kc">None</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="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-1316"><a href="#Parser-1316"><span class="linenos">1316</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-1317"><a href="#Parser-1317"><span class="linenos">1317</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-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="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-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_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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMPOUND&quot;</span><span class="p">,</span> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1323"><a href="#Parser-1323"><span class="linenos">1323</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-1324"><a href="#Parser-1324"><span class="linenos">1324</span></a>
-</span><span id="Parser-1325"><a href="#Parser-1325"><span class="linenos">1325</span></a> <span class="k">if</span> <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-1326"><a href="#Parser-1326"><span class="linenos">1326</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-1329"><a href="#Parser-1329"><span class="linenos">1329</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-1330"><a href="#Parser-1330"><span class="linenos">1330</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-1331"><a href="#Parser-1331"><span class="linenos">1331</span></a>
-</span><span id="Parser-1332"><a href="#Parser-1332"><span class="linenos">1332</span></a> <span class="k">if</span> <span class="n">assignment</span><span class="p">:</span>
-</span><span id="Parser-1333"><a href="#Parser-1333"><span class="linenos">1333</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-1334"><a href="#Parser-1334"><span class="linenos">1334</span></a> <span class="bp">self</span><span 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-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">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-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">return</span> <span class="kc">None</span>
-</span><span id="Parser-1338"><a href="#Parser-1338"><span class="linenos">1338</span></a>
-</span><span id="Parser-1339"><a href="#Parser-1339"><span class="linenos">1339</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">FileFormatProperty</span><span class="p">:</span>
-</span><span id="Parser-1340"><a href="#Parser-1340"><span class="linenos">1340</span></a> <span class="bp">self</span><span 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-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="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-1343"><a href="#Parser-1343"><span class="linenos">1343</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-1344"><a href="#Parser-1344"><span class="linenos">1344</span></a>
-</span><span id="Parser-1345"><a href="#Parser-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><span id="Parser-1346"><a href="#Parser-1346"><span class="linenos">1346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
-</span><span id="Parser-1347"><a href="#Parser-1347"><span class="linenos">1347</span></a> <span class="n">this</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-1348"><a href="#Parser-1348"><span class="linenos">1348</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-1349"><a href="#Parser-1349"><span class="linenos">1349</span></a> <span class="p">)</span>
-</span><span id="Parser-1350"><a href="#Parser-1350"><span class="linenos">1350</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-1351"><a href="#Parser-1351"><span class="linenos">1351</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-1352"><a href="#Parser-1352"><span class="linenos">1352</span></a> <span class="p">)</span>
-</span><span id="Parser-1353"><a href="#Parser-1353"><span class="linenos">1353</span></a>
-</span><span id="Parser-1354"><a href="#Parser-1354"><span class="linenos">1354</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">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Parser-1355"><a href="#Parser-1355"><span class="linenos">1355</span></a> <span class="bp">self</span><span 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-1356"><a href="#Parser-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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-1357"><a href="#Parser-1357"><span class="linenos">1357</span></a> <span class="k">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">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-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">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="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">t</span><span class="o">.</span><span class="n">Optional</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="Parser-1360"><a href="#Parser-1360"><span class="linenos">1360</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1361"><a href="#Parser-1361"><span class="linenos">1361</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-1362"><a href="#Parser-1362"><span class="linenos">1362</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
-</span><span id="Parser-1363"><a href="#Parser-1363"><span class="linenos">1363</span></a> <span class="n">prop</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-1364"><a href="#Parser-1364"><span class="linenos">1364</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1365"><a href="#Parser-1365"><span class="linenos">1365</span></a> <span class="n">prop</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-1366"><a href="#Parser-1366"><span class="linenos">1366</span></a>
-</span><span id="Parser-1367"><a href="#Parser-1367"><span class="linenos">1367</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">prop</span><span class="p">:</span>
-</span><span id="Parser-1368"><a href="#Parser-1368"><span class="linenos">1368</span></a> <span class="k">break</span>
-</span><span id="Parser-1369"><a href="#Parser-1369"><span class="linenos">1369</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">prop</span><span class="p">):</span>
-</span><span id="Parser-1370"><a href="#Parser-1370"><span class="linenos">1370</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-1294"><a href="#Parser-1294"><span class="linenos">1294</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1295"><a href="#Parser-1295"><span class="linenos">1295</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-1296"><a href="#Parser-1296"><span class="linenos">1296</span></a> <span class="n">index</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-1297"><a href="#Parser-1297"><span class="linenos">1297</span></a>
+</span><span id="Parser-1298"><a href="#Parser-1298"><span class="linenos">1298</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
+</span><span id="Parser-1299"><a href="#Parser-1299"><span class="linenos">1299</span></a> <span class="n">extend_props</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-1300"><a href="#Parser-1300"><span class="linenos">1300</span></a>
+</span><span id="Parser-1301"><a href="#Parser-1301"><span class="linenos">1301</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-1302"><a href="#Parser-1302"><span class="linenos">1302</span></a> <span class="k">break</span>
+</span><span id="Parser-1303"><a href="#Parser-1303"><span class="linenos">1303</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1304"><a href="#Parser-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">COMMA</span><span class="p">)</span>
+</span><span id="Parser-1305"><a href="#Parser-1305"><span class="linenos">1305</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-1306"><a href="#Parser-1306"><span class="linenos">1306</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-1307"><a href="#Parser-1307"><span class="linenos">1307</span></a> <span class="k">if</span> <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-1308"><a href="#Parser-1308"><span class="linenos">1308</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</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="n">shallow</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;SHALLOW&quot;</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;CLONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-1313"><a href="#Parser-1313"><span class="linenos">1313</span></a> <span class="n">clone</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-1314"><a href="#Parser-1314"><span class="linenos">1314</span></a> <span class="n">when</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;BEFORE&quot;</span><span class="p">})</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-1315"><a href="#Parser-1315"><span class="linenos">1315</span></a> <span class="n">clone_kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-1316"><a href="#Parser-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">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-1317"><a href="#Parser-1317"><span class="linenos">1317</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="bp">self</span><span class="o">.</span><span class="n">CLONE_KINDS</span><span class="p">)</span>
+</span><span id="Parser-1318"><a href="#Parser-1318"><span class="linenos">1318</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-1319"><a href="#Parser-1319"><span class="linenos">1319</span></a> <span class="p">)</span>
+</span><span id="Parser-1320"><a href="#Parser-1320"><span class="linenos">1320</span></a> <span class="n">clone_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">FARROW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-1321"><a href="#Parser-1321"><span class="linenos">1321</span></a> <span class="bp">self</span><span 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-1322"><a href="#Parser-1322"><span class="linenos">1322</span></a> <span class="n">clone</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-1323"><a href="#Parser-1323"><span class="linenos">1323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">,</span>
+</span><span id="Parser-1324"><a href="#Parser-1324"><span class="linenos">1324</span></a> <span class="n">this</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
+</span><span id="Parser-1325"><a href="#Parser-1325"><span class="linenos">1325</span></a> <span class="n">when</span><span class="o">=</span><span class="n">when</span><span class="p">,</span>
+</span><span id="Parser-1326"><a href="#Parser-1326"><span class="linenos">1326</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">clone_kind</span><span class="p">,</span>
+</span><span id="Parser-1327"><a href="#Parser-1327"><span class="linenos">1327</span></a> <span class="n">shallow</span><span class="o">=</span><span class="n">shallow</span><span class="p">,</span>
+</span><span id="Parser-1328"><a href="#Parser-1328"><span class="linenos">1328</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">clone_expression</span><span class="p">,</span>
+</span><span id="Parser-1329"><a href="#Parser-1329"><span class="linenos">1329</span></a> <span class="p">)</span>
+</span><span id="Parser-1330"><a href="#Parser-1330"><span class="linenos">1330</span></a>
+</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><span id="Parser-1332"><a href="#Parser-1332"><span class="linenos">1332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
+</span><span id="Parser-1333"><a href="#Parser-1333"><span class="linenos">1333</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-1334"><a href="#Parser-1334"><span class="linenos">1334</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1335"><a href="#Parser-1335"><span class="linenos">1335</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-1336"><a href="#Parser-1336"><span class="linenos">1336</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
+</span><span id="Parser-1337"><a href="#Parser-1337"><span class="linenos">1337</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="Parser-1338"><a href="#Parser-1338"><span class="linenos">1338</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-1339"><a href="#Parser-1339"><span class="linenos">1339</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="Parser-1340"><a href="#Parser-1340"><span class="linenos">1340</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
+</span><span id="Parser-1341"><a href="#Parser-1341"><span class="linenos">1341</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
+</span><span id="Parser-1342"><a href="#Parser-1342"><span class="linenos">1342</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-1343"><a href="#Parser-1343"><span class="linenos">1343</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
+</span><span id="Parser-1344"><a href="#Parser-1344"><span class="linenos">1344</span></a> <span class="n">clone</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
+</span><span id="Parser-1345"><a href="#Parser-1345"><span class="linenos">1345</span></a> <span class="p">)</span>
+</span><span id="Parser-1346"><a href="#Parser-1346"><span class="linenos">1346</span></a>
+</span><span id="Parser-1347"><a href="#Parser-1347"><span class="linenos">1347</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-1348"><a href="#Parser-1348"><span class="linenos">1348</span></a> <span class="c1"># only used for teradata currently</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</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-1350"><a href="#Parser-1350"><span class="linenos">1350</span></a>
+</span><span id="Parser-1351"><a href="#Parser-1351"><span class="linenos">1351</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-1352"><a href="#Parser-1352"><span class="linenos">1352</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">),</span>
+</span><span id="Parser-1353"><a href="#Parser-1353"><span class="linenos">1353</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">),</span>
+</span><span id="Parser-1354"><a href="#Parser-1354"><span class="linenos">1354</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BEFORE&quot;</span><span class="p">),</span>
+</span><span id="Parser-1355"><a href="#Parser-1355"><span class="linenos">1355</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">),</span>
+</span><span id="Parser-1356"><a href="#Parser-1356"><span class="linenos">1356</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1357"><a href="#Parser-1357"><span class="linenos">1357</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;NOT LOCAL&quot;</span><span class="p">),</span>
+</span><span id="Parser-1358"><a href="#Parser-1358"><span class="linenos">1358</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">),</span>
+</span><span id="Parser-1359"><a href="#Parser-1359"><span class="linenos">1359</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)),</span>
+</span><span id="Parser-1360"><a href="#Parser-1360"><span class="linenos">1360</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)),</span>
+</span><span id="Parser-1361"><a href="#Parser-1361"><span class="linenos">1361</span></a> <span class="p">}</span>
+</span><span id="Parser-1362"><a href="#Parser-1362"><span class="linenos">1362</span></a>
+</span><span id="Parser-1363"><a href="#Parser-1363"><span class="linenos">1363</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-1364"><a href="#Parser-1364"><span class="linenos">1364</span></a> <span class="n">parser</span> <span class="o">=</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><span id="Parser-1365"><a href="#Parser-1365"><span class="linenos">1365</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser-1366"><a href="#Parser-1366"><span class="linenos">1366</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="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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">v</span><span class="p">})</span>
+</span><span id="Parser-1367"><a href="#Parser-1367"><span class="linenos">1367</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
+</span><span id="Parser-1368"><a href="#Parser-1368"><span class="linenos">1368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot parse property &#39;</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">&#39;&quot;</span><span class="p">)</span>
+</span><span id="Parser-1369"><a href="#Parser-1369"><span class="linenos">1369</span></a>
+</span><span id="Parser-1370"><a href="#Parser-1370"><span class="linenos">1370</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="Parser-1373"><a href="#Parser-1373"><span class="linenos">1373</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1374"><a href="#Parser-1374"><span class="linenos">1374</span></a>
-</span><span id="Parser-1375"><a href="#Parser-1375"><span class="linenos">1375</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1376"><a href="#Parser-1376"><span class="linenos">1376</span></a>
-</span><span id="Parser-1377"><a href="#Parser-1377"><span class="linenos">1377</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="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">FallbackProperty</span><span class="p">:</span>
-</span><span id="Parser-1378"><a href="#Parser-1378"><span class="linenos">1378</span></a> <span class="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-1379"><a href="#Parser-1379"><span class="linenos">1379</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-1380"><a href="#Parser-1380"><span class="linenos">1380</span></a> <span class="p">)</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_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-1373"><a href="#Parser-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_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-1374"><a href="#Parser-1374"><span class="linenos">1374</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-1375"><a href="#Parser-1375"><span class="linenos">1375</span></a>
+</span><span id="Parser-1376"><a href="#Parser-1376"><span class="linenos">1376</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-1377"><a href="#Parser-1377"><span class="linenos">1377</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMPOUND&quot;</span><span class="p">,</span> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1380"><a href="#Parser-1380"><span class="linenos">1380</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-1381"><a href="#Parser-1381"><span class="linenos">1381</span></a>
-</span><span id="Parser-1382"><a href="#Parser-1382"><span class="linenos">1382</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">VolatileProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span>
-</span><span id="Parser-1383"><a href="#Parser-1383"><span class="linenos">1383</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-1384"><a href="#Parser-1384"><span class="linenos">1384</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-1385"><a href="#Parser-1385"><span class="linenos">1385</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1386"><a href="#Parser-1386"><span class="linenos">1386</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1387"><a href="#Parser-1387"><span class="linenos">1387</span></a>
-</span><span id="Parser-1388"><a href="#Parser-1388"><span class="linenos">1388</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="bp">self</span><span class="o">.</span><span class="n">PRE_VOLATILE_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-1389"><a href="#Parser-1389"><span class="linenos">1389</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-1390"><a href="#Parser-1390"><span class="linenos">1390</span></a>
-</span><span id="Parser-1391"><a href="#Parser-1391"><span class="linenos">1391</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1392"><a href="#Parser-1392"><span class="linenos">1392</span></a>
-</span><span id="Parser-1393"><a href="#Parser-1393"><span class="linenos">1393</span></a> <span class="k">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
-</span><span id="Parser-1394"><a href="#Parser-1394"><span class="linenos">1394</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-1395"><a href="#Parser-1395"><span class="linenos">1395</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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">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-1396"><a href="#Parser-1396"><span class="linenos">1396</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">_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-1398"><a href="#Parser-1398"><span class="linenos">1398</span></a>
-</span><span id="Parser-1399"><a href="#Parser-1399"><span class="linenos">1399</span></a> <span class="k">if</span> <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-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">_parse_withjournaltable</span><span class="p">()</span>
-</span><span id="Parser-1401"><a href="#Parser-1401"><span class="linenos">1401</span></a>
-</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_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA&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">_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-1404"><a href="#Parser-1404"><span class="linenos">1404</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-1405"><a href="#Parser-1405"><span class="linenos">1405</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-1406"><a href="#Parser-1406"><span class="linenos">1406</span></a>
-</span><span id="Parser-1407"><a href="#Parser-1407"><span class="linenos">1407</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-1408"><a href="#Parser-1408"><span class="linenos">1408</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1409"><a href="#Parser-1409"><span class="linenos">1409</span></a>
-</span><span id="Parser-1410"><a href="#Parser-1410"><span class="linenos">1410</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-1411"><a href="#Parser-1411"><span class="linenos">1411</span></a>
-</span><span id="Parser-1412"><a href="#Parser-1412"><span class="linenos">1412</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
-</span><span id="Parser-1413"><a href="#Parser-1413"><span class="linenos">1413</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">DefinerProperty</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</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-1415"><a href="#Parser-1415"><span class="linenos">1415</span></a>
-</span><span id="Parser-1416"><a href="#Parser-1416"><span class="linenos">1416</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-1417"><a href="#Parser-1417"><span class="linenos">1417</span></a> <span class="bp">self</span><span 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-1418"><a href="#Parser-1418"><span class="linenos">1418</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-1382"><a href="#Parser-1382"><span class="linenos">1382</span></a> <span class="k">if</span> <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-1383"><a href="#Parser-1383"><span class="linenos">1383</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1384"><a href="#Parser-1384"><span class="linenos">1384</span></a>
+</span><span id="Parser-1385"><a href="#Parser-1385"><span class="linenos">1385</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-1386"><a href="#Parser-1386"><span class="linenos">1386</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-1387"><a href="#Parser-1387"><span class="linenos">1387</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-1388"><a href="#Parser-1388"><span class="linenos">1388</span></a>
+</span><span id="Parser-1389"><a href="#Parser-1389"><span class="linenos">1389</span></a> <span class="k">if</span> <span class="n">assignment</span><span class="p">:</span>
+</span><span id="Parser-1390"><a href="#Parser-1390"><span class="linenos">1390</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-1391"><a href="#Parser-1391"><span class="linenos">1391</span></a> <span class="bp">self</span><span 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-1392"><a href="#Parser-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><span id="Parser-1393"><a href="#Parser-1393"><span class="linenos">1393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span>
+</span><span id="Parser-1394"><a href="#Parser-1394"><span class="linenos">1394</span></a> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="Parser-1395"><a href="#Parser-1395"><span class="linenos">1395</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 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-1396"><a href="#Parser-1396"><span class="linenos">1396</span></a> <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="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1399"><a href="#Parser-1399"><span class="linenos">1399</span></a>
+</span><span id="Parser-1400"><a href="#Parser-1400"><span class="linenos">1400</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">FileFormatProperty</span><span class="p">:</span>
+</span><span id="Parser-1401"><a href="#Parser-1401"><span class="linenos">1401</span></a> <span class="bp">self</span><span 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-1402"><a href="#Parser-1402"><span class="linenos">1402</span></a>
+</span><span id="Parser-1403"><a href="#Parser-1403"><span class="linenos">1403</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-1404"><a href="#Parser-1404"><span class="linenos">1404</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-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">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
+</span><span id="Parser-1408"><a href="#Parser-1408"><span class="linenos">1408</span></a> <span class="n">this</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-1409"><a href="#Parser-1409"><span class="linenos">1409</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-1410"><a href="#Parser-1410"><span class="linenos">1410</span></a> <span class="p">)</span>
+</span><span id="Parser-1411"><a href="#Parser-1411"><span class="linenos">1411</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-1412"><a href="#Parser-1412"><span class="linenos">1412</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-1413"><a href="#Parser-1413"><span class="linenos">1413</span></a> <span class="p">)</span>
+</span><span id="Parser-1414"><a href="#Parser-1414"><span class="linenos">1414</span></a>
+</span><span id="Parser-1415"><a href="#Parser-1415"><span class="linenos">1415</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">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Parser-1416"><a href="#Parser-1416"><span class="linenos">1416</span></a> <span class="bp">self</span><span 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-1417"><a href="#Parser-1417"><span class="linenos">1417</span></a> <span class="bp">self</span><span 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-1418"><a href="#Parser-1418"><span class="linenos">1418</span></a> <span class="k">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">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-1419"><a href="#Parser-1419"><span class="linenos">1419</span></a>
-</span><span id="Parser-1420"><a href="#Parser-1420"><span class="linenos">1420</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-1421"><a href="#Parser-1421"><span class="linenos">1421</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1422"><a href="#Parser-1422"><span class="linenos">1422</span></a>
-</span><span id="Parser-1423"><a href="#Parser-1423"><span class="linenos">1423</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-1424"><a href="#Parser-1424"><span class="linenos">1424</span></a>
-</span><span id="Parser-1425"><a href="#Parser-1425"><span class="linenos">1425</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">WithJournalTableProperty</span><span class="p">:</span>
-</span><span id="Parser-1426"><a href="#Parser-1426"><span class="linenos">1426</span></a> <span class="bp">self</span><span 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-1427"><a href="#Parser-1427"><span class="linenos">1427</span></a> <span class="bp">self</span><span 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-1428"><a href="#Parser-1428"><span class="linenos">1428</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1429"><a href="#Parser-1429"><span class="linenos">1429</span></a>
-</span><span id="Parser-1430"><a href="#Parser-1430"><span class="linenos">1430</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="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">LogProperty</span><span class="p">:</span>
-</span><span id="Parser-1431"><a href="#Parser-1431"><span class="linenos">1431</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1420"><a href="#Parser-1420"><span class="linenos">1420</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="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">t</span><span class="o">.</span><span class="n">Optional</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="Parser-1421"><a href="#Parser-1421"><span class="linenos">1421</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1422"><a href="#Parser-1422"><span class="linenos">1422</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-1423"><a href="#Parser-1423"><span class="linenos">1423</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
+</span><span id="Parser-1424"><a href="#Parser-1424"><span class="linenos">1424</span></a> <span class="n">prop</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-1425"><a href="#Parser-1425"><span class="linenos">1425</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1426"><a href="#Parser-1426"><span class="linenos">1426</span></a> <span class="n">prop</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-1427"><a href="#Parser-1427"><span class="linenos">1427</span></a>
+</span><span id="Parser-1428"><a href="#Parser-1428"><span class="linenos">1428</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">prop</span><span class="p">:</span>
+</span><span id="Parser-1429"><a href="#Parser-1429"><span class="linenos">1429</span></a> <span class="k">break</span>
+</span><span id="Parser-1430"><a href="#Parser-1430"><span class="linenos">1430</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">prop</span><span class="p">):</span>
+</span><span id="Parser-1431"><a href="#Parser-1431"><span class="linenos">1431</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-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_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span>
-</span><span id="Parser-1434"><a href="#Parser-1434"><span class="linenos">1434</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Parser-1433"><a href="#Parser-1433"><span class="linenos">1433</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="Parser-1434"><a href="#Parser-1434"><span class="linenos">1434</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1435"><a href="#Parser-1435"><span class="linenos">1435</span></a>
-</span><span id="Parser-1436"><a href="#Parser-1436"><span class="linenos">1436</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">ChecksumProperty</span><span class="p">:</span>
-</span><span id="Parser-1437"><a href="#Parser-1437"><span class="linenos">1437</span></a> <span class="bp">self</span><span 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-1438"><a href="#Parser-1438"><span class="linenos">1438</span></a>
-</span><span id="Parser-1439"><a href="#Parser-1439"><span class="linenos">1439</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1440"><a href="#Parser-1440"><span class="linenos">1440</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1441"><a href="#Parser-1441"><span class="linenos">1441</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1442"><a href="#Parser-1442"><span class="linenos">1442</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-1443"><a href="#Parser-1443"><span class="linenos">1443</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-1444"><a href="#Parser-1444"><span class="linenos">1444</span></a>
-</span><span id="Parser-1445"><a href="#Parser-1445"><span class="linenos">1445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">on</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">_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-1446"><a href="#Parser-1446"><span class="linenos">1446</span></a>
-</span><span id="Parser-1447"><a href="#Parser-1447"><span class="linenos">1447</span></a> <span class="k">def</span> <span class="nf">_parse_cluster</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span>
-</span><span id="Parser-1448"><a href="#Parser-1448"><span class="linenos">1448</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1449"><a href="#Parser-1449"><span class="linenos">1449</span></a>
-</span><span id="Parser-1450"><a href="#Parser-1450"><span class="linenos">1450</span></a> <span class="k">def</span> <span class="nf">_parse_clustered_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">ClusteredByProperty</span><span class="p">:</span>
-</span><span id="Parser-1451"><a href="#Parser-1451"><span class="linenos">1451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
-</span><span id="Parser-1452"><a href="#Parser-1452"><span class="linenos">1452</span></a>
-</span><span id="Parser-1453"><a href="#Parser-1453"><span class="linenos">1453</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-1454"><a href="#Parser-1454"><span class="linenos">1454</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-1455"><a href="#Parser-1455"><span class="linenos">1455</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-1456"><a href="#Parser-1456"><span class="linenos">1456</span></a>
-</span><span id="Parser-1457"><a href="#Parser-1457"><span class="linenos">1457</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1458"><a href="#Parser-1458"><span class="linenos">1458</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-1459"><a href="#Parser-1459"><span class="linenos">1459</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-1460"><a href="#Parser-1460"><span class="linenos">1460</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-1461"><a href="#Parser-1461"><span class="linenos">1461</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1462"><a href="#Parser-1462"><span class="linenos">1462</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1463"><a href="#Parser-1463"><span class="linenos">1463</span></a>
-</span><span id="Parser-1464"><a href="#Parser-1464"><span class="linenos">1464</span></a> <span class="bp">self</span><span 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-1465"><a href="#Parser-1465"><span class="linenos">1465</span></a> <span class="n">buckets</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-1466"><a href="#Parser-1466"><span class="linenos">1466</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;BUCKETS&quot;</span><span class="p">)</span>
+</span><span id="Parser-1436"><a href="#Parser-1436"><span class="linenos">1436</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1437"><a href="#Parser-1437"><span class="linenos">1437</span></a>
+</span><span id="Parser-1438"><a href="#Parser-1438"><span class="linenos">1438</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="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">FallbackProperty</span><span class="p">:</span>
+</span><span id="Parser-1439"><a href="#Parser-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="Parser-1440"><a href="#Parser-1440"><span class="linenos">1440</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-1441"><a href="#Parser-1441"><span class="linenos">1441</span></a> <span class="p">)</span>
+</span><span id="Parser-1442"><a href="#Parser-1442"><span class="linenos">1442</span></a>
+</span><span id="Parser-1443"><a href="#Parser-1443"><span class="linenos">1443</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">VolatileProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span>
+</span><span id="Parser-1444"><a href="#Parser-1444"><span class="linenos">1444</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-1445"><a href="#Parser-1445"><span class="linenos">1445</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-1446"><a href="#Parser-1446"><span class="linenos">1446</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1447"><a href="#Parser-1447"><span class="linenos">1447</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</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">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="bp">self</span><span class="o">.</span><span class="n">PRE_VOLATILE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-1450"><a href="#Parser-1450"><span class="linenos">1450</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-1451"><a href="#Parser-1451"><span class="linenos">1451</span></a>
+</span><span id="Parser-1452"><a href="#Parser-1452"><span class="linenos">1452</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
+</span><span id="Parser-1455"><a href="#Parser-1455"><span class="linenos">1455</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-1456"><a href="#Parser-1456"><span class="linenos">1456</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1457"><a href="#Parser-1457"><span class="linenos">1457</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1458"><a href="#Parser-1458"><span class="linenos">1458</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-1459"><a href="#Parser-1459"><span class="linenos">1459</span></a>
+</span><span id="Parser-1460"><a href="#Parser-1460"><span class="linenos">1460</span></a> <span class="k">if</span> <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-1461"><a href="#Parser-1461"><span class="linenos">1461</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-1462"><a href="#Parser-1462"><span class="linenos">1462</span></a>
+</span><span id="Parser-1463"><a href="#Parser-1463"><span class="linenos">1463</span></a> <span class="k">if</span> <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-1464"><a href="#Parser-1464"><span class="linenos">1464</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-1465"><a href="#Parser-1465"><span class="linenos">1465</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-1466"><a href="#Parser-1466"><span class="linenos">1466</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-1467"><a href="#Parser-1467"><span class="linenos">1467</span></a>
-</span><span id="Parser-1468"><a href="#Parser-1468"><span class="linenos">1468</span></a> <span class="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-1469"><a href="#Parser-1469"><span class="linenos">1469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">,</span>
-</span><span id="Parser-1470"><a href="#Parser-1470"><span class="linenos">1470</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-1471"><a href="#Parser-1471"><span class="linenos">1471</span></a> <span class="n">sorted_by</span><span class="o">=</span><span class="n">sorted_by</span><span class="p">,</span>
-</span><span id="Parser-1472"><a href="#Parser-1472"><span class="linenos">1472</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
-</span><span id="Parser-1473"><a href="#Parser-1473"><span class="linenos">1473</span></a> <span class="p">)</span>
-</span><span id="Parser-1474"><a href="#Parser-1474"><span class="linenos">1474</span></a>
-</span><span id="Parser-1475"><a href="#Parser-1475"><span class="linenos">1475</span></a> <span class="k">def</span> <span class="nf">_parse_copy_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">CopyGrantsProperty</span><span class="p">]:</span>
-</span><span id="Parser-1476"><a href="#Parser-1476"><span class="linenos">1476</span></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;GRANTS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1477"><a href="#Parser-1477"><span class="linenos">1477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-1478"><a href="#Parser-1478"><span class="linenos">1478</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1479"><a href="#Parser-1479"><span class="linenos">1479</span></a>
-</span><span id="Parser-1480"><a href="#Parser-1480"><span class="linenos">1480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">)</span>
-</span><span id="Parser-1481"><a href="#Parser-1481"><span class="linenos">1481</span></a>
-</span><span id="Parser-1482"><a href="#Parser-1482"><span class="linenos">1482</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">FreespaceProperty</span><span class="p">:</span>
-</span><span id="Parser-1483"><a href="#Parser-1483"><span class="linenos">1483</span></a> <span class="bp">self</span><span 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-1484"><a href="#Parser-1484"><span class="linenos">1484</span></a> <span class="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-1485"><a href="#Parser-1485"><span class="linenos">1485</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-1486"><a href="#Parser-1486"><span class="linenos">1486</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_mergeblockratio</span><span class="p">(</span>
-</span><span id="Parser-1489"><a href="#Parser-1489"><span class="linenos">1489</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">no</span><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">default</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-1490"><a href="#Parser-1490"><span class="linenos">1490</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span>
-</span><span id="Parser-1491"><a href="#Parser-1491"><span class="linenos">1491</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1492"><a href="#Parser-1492"><span class="linenos">1492</span></a> <span class="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-1493"><a href="#Parser-1493"><span class="linenos">1493</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
-</span><span id="Parser-1494"><a href="#Parser-1494"><span class="linenos">1494</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-1495"><a href="#Parser-1495"><span class="linenos">1495</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-1496"><a href="#Parser-1496"><span class="linenos">1496</span></a> <span class="p">)</span>
-</span><span id="Parser-1497"><a href="#Parser-1497"><span class="linenos">1497</span></a>
-</span><span id="Parser-1498"><a href="#Parser-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 class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</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">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="Parser-1468"><a href="#Parser-1468"><span class="linenos">1468</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-1469"><a href="#Parser-1469"><span class="linenos">1469</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1470"><a href="#Parser-1470"><span class="linenos">1470</span></a>
+</span><span id="Parser-1471"><a href="#Parser-1471"><span class="linenos">1471</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-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="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
+</span><span id="Parser-1474"><a href="#Parser-1474"><span class="linenos">1474</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">DefinerProperty</span><span class="p">]:</span>
+</span><span id="Parser-1475"><a href="#Parser-1475"><span class="linenos">1475</span></a> <span class="bp">self</span><span 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-1476"><a href="#Parser-1476"><span class="linenos">1476</span></a>
+</span><span id="Parser-1477"><a href="#Parser-1477"><span class="linenos">1477</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-1478"><a href="#Parser-1478"><span class="linenos">1478</span></a> <span class="bp">self</span><span 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-1479"><a href="#Parser-1479"><span class="linenos">1479</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-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="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-1482"><a href="#Parser-1482"><span class="linenos">1482</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1483"><a href="#Parser-1483"><span class="linenos">1483</span></a>
+</span><span id="Parser-1484"><a href="#Parser-1484"><span class="linenos">1484</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-1485"><a href="#Parser-1485"><span class="linenos">1485</span></a>
+</span><span id="Parser-1486"><a href="#Parser-1486"><span class="linenos">1486</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">WithJournalTableProperty</span><span class="p">:</span>
+</span><span id="Parser-1487"><a href="#Parser-1487"><span class="linenos">1487</span></a> <span class="bp">self</span><span 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-1488"><a href="#Parser-1488"><span class="linenos">1488</span></a> <span class="bp">self</span><span 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-1489"><a href="#Parser-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 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-1490"><a href="#Parser-1490"><span class="linenos">1490</span></a>
+</span><span id="Parser-1491"><a href="#Parser-1491"><span class="linenos">1491</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="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">LogProperty</span><span class="p">:</span>
+</span><span id="Parser-1492"><a href="#Parser-1492"><span class="linenos">1492</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1493"><a href="#Parser-1493"><span class="linenos">1493</span></a>
+</span><span id="Parser-1494"><a href="#Parser-1494"><span class="linenos">1494</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="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</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="bp">self</span><span 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="o">**</span><span class="n">kwargs</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_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">ChecksumProperty</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><span id="Parser-1500"><a href="#Parser-1500"><span class="linenos">1500</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span>
-</span><span id="Parser-1501"><a href="#Parser-1501"><span class="linenos">1501</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-1502"><a href="#Parser-1502"><span class="linenos">1502</span></a> <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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-1503"><a href="#Parser-1503"><span class="linenos">1503</span></a> <span class="n">minimum</span><span 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="Parser-1504"><a href="#Parser-1504"><span class="linenos">1504</span></a> <span class="n">maximum</span><span 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="Parser-1505"><a href="#Parser-1505"><span class="linenos">1505</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span>
-</span><span id="Parser-1506"><a href="#Parser-1506"><span class="linenos">1506</span></a> <span class="bp">self</span><span 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-1507"><a href="#Parser-1507"><span class="linenos">1507</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-1508"><a href="#Parser-1508"><span class="linenos">1508</span></a>
-</span><span id="Parser-1509"><a href="#Parser-1509"><span class="linenos">1509</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1510"><a href="#Parser-1510"><span class="linenos">1510</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-1511"><a href="#Parser-1511"><span class="linenos">1511</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-1512"><a href="#Parser-1512"><span class="linenos">1512</span></a>
-</span><span id="Parser-1513"><a href="#Parser-1513"><span class="linenos">1513</span></a> <span class="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-1514"><a href="#Parser-1514"><span class="linenos">1514</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">,</span>
-</span><span id="Parser-1515"><a href="#Parser-1515"><span class="linenos">1515</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="Parser-1516"><a href="#Parser-1516"><span class="linenos">1516</span></a> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">,</span>
-</span><span id="Parser-1517"><a href="#Parser-1517"><span class="linenos">1517</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="Parser-1518"><a href="#Parser-1518"><span class="linenos">1518</span></a> <span class="n">minimum</span><span class="o">=</span><span class="n">minimum</span><span class="p">,</span>
-</span><span id="Parser-1519"><a href="#Parser-1519"><span class="linenos">1519</span></a> <span class="n">maximum</span><span class="o">=</span><span class="n">maximum</span><span class="p">,</span>
-</span><span id="Parser-1520"><a href="#Parser-1520"><span class="linenos">1520</span></a> <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_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">BlockCompressionProperty</span><span class="p">:</span>
-</span><span id="Parser-1523"><a href="#Parser-1523"><span class="linenos">1523</span></a> <span class="bp">self</span><span 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-1524"><a href="#Parser-1524"><span class="linenos">1524</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-1525"><a href="#Parser-1525"><span class="linenos">1525</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-1526"><a href="#Parser-1526"><span class="linenos">1526</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-1527"><a href="#Parser-1527"><span class="linenos">1527</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-1500"><a href="#Parser-1500"><span class="linenos">1500</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1501"><a href="#Parser-1501"><span class="linenos">1501</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1502"><a href="#Parser-1502"><span class="linenos">1502</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1503"><a href="#Parser-1503"><span class="linenos">1503</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-1504"><a href="#Parser-1504"><span class="linenos">1504</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-1505"><a href="#Parser-1505"><span class="linenos">1505</span></a>
+</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 class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</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="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-1507"><a href="#Parser-1507"><span class="linenos">1507</span></a>
+</span><span id="Parser-1508"><a href="#Parser-1508"><span class="linenos">1508</span></a> <span class="k">def</span> <span class="nf">_parse_cluster</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span>
+</span><span id="Parser-1509"><a href="#Parser-1509"><span class="linenos">1509</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-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_clustered_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">ClusteredByProperty</span><span class="p">:</span>
+</span><span id="Parser-1512"><a href="#Parser-1512"><span class="linenos">1512</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
+</span><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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-1515"><a href="#Parser-1515"><span class="linenos">1515</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-1516"><a href="#Parser-1516"><span class="linenos">1516</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</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_l_paren</span><span class="p">()</span>
+</span><span id="Parser-1520"><a href="#Parser-1520"><span class="linenos">1520</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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-1521"><a href="#Parser-1521"><span class="linenos">1521</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-1522"><a href="#Parser-1522"><span class="linenos">1522</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1523"><a href="#Parser-1523"><span class="linenos">1523</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-1526"><a href="#Parser-1526"><span class="linenos">1526</span></a> <span class="n">buckets</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-1527"><a href="#Parser-1527"><span class="linenos">1527</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;BUCKETS&quot;</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="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1530"><a href="#Parser-1530"><span class="linenos">1530</span></a> <span class="k">if</span> <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-1531"><a href="#Parser-1531"><span class="linenos">1531</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-1532"><a href="#Parser-1532"><span class="linenos">1532</span></a>
-</span><span id="Parser-1533"><a href="#Parser-1533"><span class="linenos">1533</span></a> <span class="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-1534"><a href="#Parser-1534"><span class="linenos">1534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
-</span><span id="Parser-1535"><a href="#Parser-1535"><span class="linenos">1535</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
-</span><span id="Parser-1536"><a href="#Parser-1536"><span class="linenos">1536</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
-</span><span id="Parser-1537"><a href="#Parser-1537"><span class="linenos">1537</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
-</span><span id="Parser-1538"><a href="#Parser-1538"><span class="linenos">1538</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="Parser-1539"><a href="#Parser-1539"><span class="linenos">1539</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</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><span id="Parser-1542"><a href="#Parser-1542"><span class="linenos">1542</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">IsolatedLoadingProperty</span><span class="p">:</span>
-</span><span id="Parser-1543"><a href="#Parser-1543"><span class="linenos">1543</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-1544"><a href="#Parser-1544"><span class="linenos">1544</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-1545"><a href="#Parser-1545"><span class="linenos">1545</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-1546"><a href="#Parser-1546"><span class="linenos">1546</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-1547"><a href="#Parser-1547"><span class="linenos">1547</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-1548"><a href="#Parser-1548"><span class="linenos">1548</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-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><span id="Parser-1550"><a href="#Parser-1550"><span class="linenos">1550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
-</span><span id="Parser-1551"><a href="#Parser-1551"><span class="linenos">1551</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
-</span><span id="Parser-1552"><a href="#Parser-1552"><span class="linenos">1552</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
-</span><span id="Parser-1553"><a href="#Parser-1553"><span class="linenos">1553</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-1554"><a href="#Parser-1554"><span class="linenos">1554</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-1555"><a href="#Parser-1555"><span class="linenos">1555</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-1556"><a href="#Parser-1556"><span class="linenos">1556</span></a> <span class="p">)</span>
-</span><span id="Parser-1557"><a href="#Parser-1557"><span class="linenos">1557</span></a>
-</span><span id="Parser-1558"><a href="#Parser-1558"><span class="linenos">1558</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">LockingProperty</span><span class="p">:</span>
-</span><span id="Parser-1559"><a href="#Parser-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">TABLE</span><span class="p">):</span>
-</span><span id="Parser-1560"><a href="#Parser-1560"><span class="linenos">1560</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="Parser-1561"><a href="#Parser-1561"><span class="linenos">1561</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-1562"><a href="#Parser-1562"><span class="linenos">1562</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
-</span><span id="Parser-1563"><a href="#Parser-1563"><span class="linenos">1563</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-1564"><a href="#Parser-1564"><span class="linenos">1564</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
-</span><span id="Parser-1565"><a href="#Parser-1565"><span class="linenos">1565</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-1566"><a href="#Parser-1566"><span class="linenos">1566</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
-</span><span id="Parser-1567"><a href="#Parser-1567"><span class="linenos">1567</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1568"><a href="#Parser-1568"><span class="linenos">1568</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1529"><a href="#Parser-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><span id="Parser-1530"><a href="#Parser-1530"><span class="linenos">1530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">,</span>
+</span><span id="Parser-1531"><a href="#Parser-1531"><span class="linenos">1531</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-1532"><a href="#Parser-1532"><span class="linenos">1532</span></a> <span class="n">sorted_by</span><span class="o">=</span><span class="n">sorted_by</span><span class="p">,</span>
+</span><span id="Parser-1533"><a href="#Parser-1533"><span class="linenos">1533</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
+</span><span id="Parser-1534"><a href="#Parser-1534"><span class="linenos">1534</span></a> <span class="p">)</span>
+</span><span id="Parser-1535"><a href="#Parser-1535"><span class="linenos">1535</span></a>
+</span><span id="Parser-1536"><a href="#Parser-1536"><span class="linenos">1536</span></a> <span class="k">def</span> <span class="nf">_parse_copy_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">CopyGrantsProperty</span><span class="p">]:</span>
+</span><span id="Parser-1537"><a href="#Parser-1537"><span class="linenos">1537</span></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;GRANTS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1538"><a href="#Parser-1538"><span class="linenos">1538</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-1539"><a href="#Parser-1539"><span class="linenos">1539</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1540"><a href="#Parser-1540"><span class="linenos">1540</span></a>
+</span><span id="Parser-1541"><a href="#Parser-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">CopyGrantsProperty</span><span class="p">)</span>
+</span><span id="Parser-1542"><a href="#Parser-1542"><span class="linenos">1542</span></a>
+</span><span id="Parser-1543"><a href="#Parser-1543"><span class="linenos">1543</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">FreespaceProperty</span><span class="p">:</span>
+</span><span id="Parser-1544"><a href="#Parser-1544"><span class="linenos">1544</span></a> <span class="bp">self</span><span 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-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">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-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_mergeblockratio</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="p">,</span> <span class="n">no</span><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">default</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-1551"><a href="#Parser-1551"><span class="linenos">1551</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span>
+</span><span id="Parser-1552"><a href="#Parser-1552"><span class="linenos">1552</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1553"><a href="#Parser-1553"><span class="linenos">1553</span></a> <span class="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-1554"><a href="#Parser-1554"><span class="linenos">1554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
+</span><span id="Parser-1555"><a href="#Parser-1555"><span class="linenos">1555</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-1556"><a href="#Parser-1556"><span class="linenos">1556</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-1557"><a href="#Parser-1557"><span class="linenos">1557</span></a> <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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</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-1560"><a href="#Parser-1560"><span class="linenos">1560</span></a>
+</span><span id="Parser-1561"><a href="#Parser-1561"><span class="linenos">1561</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span>
+</span><span id="Parser-1562"><a href="#Parser-1562"><span class="linenos">1562</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-1563"><a href="#Parser-1563"><span class="linenos">1563</span></a> <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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-1564"><a href="#Parser-1564"><span class="linenos">1564</span></a> <span class="n">minimum</span><span 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="Parser-1565"><a href="#Parser-1565"><span class="linenos">1565</span></a> <span class="n">maximum</span><span 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="Parser-1566"><a href="#Parser-1566"><span class="linenos">1566</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</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">_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-1568"><a href="#Parser-1568"><span class="linenos">1568</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-1569"><a href="#Parser-1569"><span class="linenos">1569</span></a>
-</span><span id="Parser-1570"><a href="#Parser-1570"><span class="linenos">1570</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-1571"><a href="#Parser-1571"><span class="linenos">1571</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-1572"><a href="#Parser-1572"><span class="linenos">1572</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1573"><a href="#Parser-1573"><span class="linenos">1573</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-1576"><a href="#Parser-1576"><span class="linenos">1576</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
-</span><span id="Parser-1577"><a href="#Parser-1577"><span class="linenos">1577</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-1578"><a href="#Parser-1578"><span class="linenos">1578</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
-</span><span id="Parser-1579"><a href="#Parser-1579"><span class="linenos">1579</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1580"><a href="#Parser-1580"><span class="linenos">1580</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</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">if</span> <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-1583"><a href="#Parser-1583"><span class="linenos">1583</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
-</span><span id="Parser-1584"><a href="#Parser-1584"><span class="linenos">1584</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-1585"><a href="#Parser-1585"><span class="linenos">1585</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
-</span><span id="Parser-1586"><a href="#Parser-1586"><span class="linenos">1586</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-1587"><a href="#Parser-1587"><span class="linenos">1587</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
-</span><span id="Parser-1588"><a href="#Parser-1588"><span class="linenos">1588</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-1589"><a href="#Parser-1589"><span class="linenos">1589</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
-</span><span id="Parser-1590"><a href="#Parser-1590"><span class="linenos">1590</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-1591"><a href="#Parser-1591"><span class="linenos">1591</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
-</span><span id="Parser-1592"><a href="#Parser-1592"><span class="linenos">1592</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-1593"><a href="#Parser-1593"><span class="linenos">1593</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
-</span><span id="Parser-1594"><a href="#Parser-1594"><span class="linenos">1594</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1595"><a href="#Parser-1595"><span class="linenos">1595</span></a> <span class="n">lock_type</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="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-1598"><a href="#Parser-1598"><span class="linenos">1598</span></a>
-</span><span id="Parser-1599"><a href="#Parser-1599"><span class="linenos">1599</span></a> <span class="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-1600"><a href="#Parser-1600"><span class="linenos">1600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
-</span><span id="Parser-1601"><a href="#Parser-1601"><span class="linenos">1601</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1602"><a href="#Parser-1602"><span class="linenos">1602</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-1603"><a href="#Parser-1603"><span class="linenos">1603</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-1604"><a href="#Parser-1604"><span class="linenos">1604</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-1605"><a href="#Parser-1605"><span class="linenos">1605</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
-</span><span id="Parser-1606"><a href="#Parser-1606"><span class="linenos">1606</span></a> <span class="p">)</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="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-1609"><a href="#Parser-1609"><span class="linenos">1609</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1610"><a href="#Parser-1610"><span class="linenos">1610</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-1611"><a href="#Parser-1611"><span class="linenos">1611</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Parser-1612"><a href="#Parser-1612"><span class="linenos">1612</span></a>
-</span><span id="Parser-1613"><a href="#Parser-1613"><span class="linenos">1613</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">PartitionedByProperty</span><span class="p">:</span>
-</span><span id="Parser-1614"><a href="#Parser-1614"><span class="linenos">1614</span></a> <span class="bp">self</span><span 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-1615"><a href="#Parser-1615"><span class="linenos">1615</span></a> <span class="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-1616"><a href="#Parser-1616"><span class="linenos">1616</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
-</span><span id="Parser-1617"><a href="#Parser-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">_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-1618"><a href="#Parser-1618"><span class="linenos">1618</span></a> <span class="p">)</span>
-</span><span id="Parser-1619"><a href="#Parser-1619"><span class="linenos">1619</span></a>
-</span><span id="Parser-1620"><a href="#Parser-1620"><span class="linenos">1620</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="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">WithDataProperty</span><span class="p">:</span>
-</span><span id="Parser-1621"><a href="#Parser-1621"><span class="linenos">1621</span></a> <span class="k">if</span> <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-1622"><a href="#Parser-1622"><span class="linenos">1622</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1623"><a href="#Parser-1623"><span class="linenos">1623</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-1624"><a href="#Parser-1624"><span class="linenos">1624</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-1625"><a href="#Parser-1625"><span class="linenos">1625</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1626"><a href="#Parser-1626"><span class="linenos">1626</span></a> <span class="n">statistics</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><span id="Parser-1628"><a href="#Parser-1628"><span class="linenos">1628</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1629"><a href="#Parser-1629"><span class="linenos">1629</span></a>
-</span><span id="Parser-1630"><a href="#Parser-1630"><span class="linenos">1630</span></a> <span class="k">def</span> <span class="nf">_parse_no_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">NoPrimaryIndexProperty</span><span class="p">]:</span>
-</span><span id="Parser-1631"><a href="#Parser-1631"><span class="linenos">1631</span></a> <span class="k">if</span> <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-1632"><a href="#Parser-1632"><span class="linenos">1632</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-1633"><a href="#Parser-1633"><span class="linenos">1633</span></a> <span class="k">return</span> <span class="kc">None</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="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="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;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-1637"><a href="#Parser-1637"><span class="linenos">1637</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-1638"><a href="#Parser-1638"><span class="linenos">1638</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;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;DELETE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1639"><a href="#Parser-1639"><span class="linenos">1639</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 class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1640"><a href="#Parser-1640"><span class="linenos">1640</span></a> <span class="k">return</span> <span class="kc">None</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">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">DistKeyProperty</span><span class="p">:</span>
-</span><span id="Parser-1643"><a href="#Parser-1643"><span class="linenos">1643</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1644"><a href="#Parser-1644"><span class="linenos">1644</span></a>
-</span><span id="Parser-1645"><a href="#Parser-1645"><span class="linenos">1645</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">LikeProperty</span><span class="p">]:</span>
-</span><span id="Parser-1646"><a href="#Parser-1646"><span class="linenos">1646</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-1647"><a href="#Parser-1647"><span class="linenos">1647</span></a>
-</span><span id="Parser-1648"><a href="#Parser-1648"><span class="linenos">1648</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1649"><a href="#Parser-1649"><span class="linenos">1649</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-1650"><a href="#Parser-1650"><span class="linenos">1650</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-1651"><a href="#Parser-1651"><span class="linenos">1651</span></a>
-</span><span id="Parser-1652"><a href="#Parser-1652"><span class="linenos">1652</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-1653"><a href="#Parser-1653"><span class="linenos">1653</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-1654"><a href="#Parser-1654"><span class="linenos">1654</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1655"><a href="#Parser-1655"><span class="linenos">1655</span></a>
-</span><span id="Parser-1656"><a href="#Parser-1656"><span class="linenos">1656</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-1657"><a href="#Parser-1657"><span class="linenos">1657</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">Property</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <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">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-1658"><a href="#Parser-1658"><span class="linenos">1658</span></a> <span class="p">)</span>
+</span><span id="Parser-1570"><a href="#Parser-1570"><span class="linenos">1570</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1571"><a href="#Parser-1571"><span class="linenos">1571</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-1572"><a href="#Parser-1572"><span class="linenos">1572</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-1573"><a href="#Parser-1573"><span class="linenos">1573</span></a>
+</span><span id="Parser-1574"><a href="#Parser-1574"><span class="linenos">1574</span></a> <span class="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-1575"><a href="#Parser-1575"><span class="linenos">1575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">,</span>
+</span><span id="Parser-1576"><a href="#Parser-1576"><span class="linenos">1576</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="Parser-1577"><a href="#Parser-1577"><span class="linenos">1577</span></a> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">,</span>
+</span><span id="Parser-1578"><a href="#Parser-1578"><span class="linenos">1578</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="Parser-1579"><a href="#Parser-1579"><span class="linenos">1579</span></a> <span class="n">minimum</span><span class="o">=</span><span class="n">minimum</span><span class="p">,</span>
+</span><span id="Parser-1580"><a href="#Parser-1580"><span class="linenos">1580</span></a> <span class="n">maximum</span><span class="o">=</span><span class="n">maximum</span><span class="p">,</span>
+</span><span id="Parser-1581"><a href="#Parser-1581"><span class="linenos">1581</span></a> <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">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">BlockCompressionProperty</span><span class="p">:</span>
+</span><span id="Parser-1584"><a href="#Parser-1584"><span class="linenos">1584</span></a> <span class="bp">self</span><span 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-1585"><a href="#Parser-1585"><span class="linenos">1585</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-1586"><a href="#Parser-1586"><span class="linenos">1586</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-1587"><a href="#Parser-1587"><span class="linenos">1587</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-1588"><a href="#Parser-1588"><span class="linenos">1588</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-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="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1591"><a href="#Parser-1591"><span class="linenos">1591</span></a> <span class="k">if</span> <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-1592"><a href="#Parser-1592"><span class="linenos">1592</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-1593"><a href="#Parser-1593"><span class="linenos">1593</span></a>
+</span><span id="Parser-1594"><a href="#Parser-1594"><span class="linenos">1594</span></a> <span class="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-1595"><a href="#Parser-1595"><span class="linenos">1595</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
+</span><span id="Parser-1596"><a href="#Parser-1596"><span class="linenos">1596</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
+</span><span id="Parser-1597"><a href="#Parser-1597"><span class="linenos">1597</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
+</span><span id="Parser-1598"><a href="#Parser-1598"><span class="linenos">1598</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
+</span><span id="Parser-1599"><a href="#Parser-1599"><span class="linenos">1599</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="Parser-1600"><a href="#Parser-1600"><span class="linenos">1600</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
+</span><span id="Parser-1601"><a href="#Parser-1601"><span class="linenos">1601</span></a> <span class="p">)</span>
+</span><span id="Parser-1602"><a href="#Parser-1602"><span class="linenos">1602</span></a>
+</span><span id="Parser-1603"><a href="#Parser-1603"><span class="linenos">1603</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">IsolatedLoadingProperty</span><span class="p">:</span>
+</span><span id="Parser-1604"><a href="#Parser-1604"><span class="linenos">1604</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-1605"><a href="#Parser-1605"><span class="linenos">1605</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-1606"><a href="#Parser-1606"><span class="linenos">1606</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-1607"><a href="#Parser-1607"><span class="linenos">1607</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-1608"><a href="#Parser-1608"><span class="linenos">1608</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-1609"><a href="#Parser-1609"><span class="linenos">1609</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-1610"><a href="#Parser-1610"><span class="linenos">1610</span></a> <span class="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-1611"><a href="#Parser-1611"><span class="linenos">1611</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
+</span><span id="Parser-1612"><a href="#Parser-1612"><span class="linenos">1612</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
+</span><span id="Parser-1613"><a href="#Parser-1613"><span class="linenos">1613</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
+</span><span id="Parser-1614"><a href="#Parser-1614"><span class="linenos">1614</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-1615"><a href="#Parser-1615"><span class="linenos">1615</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-1616"><a href="#Parser-1616"><span class="linenos">1616</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-1617"><a href="#Parser-1617"><span class="linenos">1617</span></a> <span class="p">)</span>
+</span><span id="Parser-1618"><a href="#Parser-1618"><span class="linenos">1618</span></a>
+</span><span id="Parser-1619"><a href="#Parser-1619"><span class="linenos">1619</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">LockingProperty</span><span class="p">:</span>
+</span><span id="Parser-1620"><a href="#Parser-1620"><span class="linenos">1620</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1621"><a href="#Parser-1621"><span class="linenos">1621</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="Parser-1622"><a href="#Parser-1622"><span class="linenos">1622</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-1623"><a href="#Parser-1623"><span class="linenos">1623</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
+</span><span id="Parser-1624"><a href="#Parser-1624"><span class="linenos">1624</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-1625"><a href="#Parser-1625"><span class="linenos">1625</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
+</span><span id="Parser-1626"><a href="#Parser-1626"><span class="linenos">1626</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-1627"><a href="#Parser-1627"><span class="linenos">1627</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
+</span><span id="Parser-1628"><a href="#Parser-1628"><span class="linenos">1628</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1629"><a href="#Parser-1629"><span class="linenos">1629</span></a> <span class="n">kind</span> <span class="o">=</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="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-1632"><a href="#Parser-1632"><span class="linenos">1632</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-1633"><a href="#Parser-1633"><span class="linenos">1633</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1634"><a href="#Parser-1634"><span class="linenos">1634</span></a> <span class="n">this</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="bp">self</span><span 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-1637"><a href="#Parser-1637"><span class="linenos">1637</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
+</span><span id="Parser-1638"><a href="#Parser-1638"><span class="linenos">1638</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-1639"><a href="#Parser-1639"><span class="linenos">1639</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
+</span><span id="Parser-1640"><a href="#Parser-1640"><span class="linenos">1640</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1641"><a href="#Parser-1641"><span class="linenos">1641</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1642"><a href="#Parser-1642"><span class="linenos">1642</span></a>
+</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;ACCESS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1644"><a href="#Parser-1644"><span class="linenos">1644</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
+</span><span id="Parser-1645"><a href="#Parser-1645"><span class="linenos">1645</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-1646"><a href="#Parser-1646"><span class="linenos">1646</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
+</span><span id="Parser-1647"><a href="#Parser-1647"><span class="linenos">1647</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-1648"><a href="#Parser-1648"><span class="linenos">1648</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
+</span><span id="Parser-1649"><a href="#Parser-1649"><span class="linenos">1649</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-1650"><a href="#Parser-1650"><span class="linenos">1650</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
+</span><span id="Parser-1651"><a href="#Parser-1651"><span class="linenos">1651</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-1652"><a href="#Parser-1652"><span class="linenos">1652</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
+</span><span id="Parser-1653"><a href="#Parser-1653"><span class="linenos">1653</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-1654"><a href="#Parser-1654"><span class="linenos">1654</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
+</span><span id="Parser-1655"><a href="#Parser-1655"><span class="linenos">1655</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1656"><a href="#Parser-1656"><span class="linenos">1656</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</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="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-1659"><a href="#Parser-1659"><span class="linenos">1659</span></a>
-</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">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-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_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">SortKeyProperty</span><span class="p">:</span>
-</span><span id="Parser-1663"><a href="#Parser-1663"><span class="linenos">1663</span></a> <span class="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-1664"><a href="#Parser-1664"><span class="linenos">1664</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_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
-</span><span id="Parser-1665"><a href="#Parser-1665"><span class="linenos">1665</span></a> <span class="p">)</span>
-</span><span id="Parser-1666"><a href="#Parser-1666"><span class="linenos">1666</span></a>
-</span><span id="Parser-1667"><a href="#Parser-1667"><span class="linenos">1667</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">CharacterSetProperty</span><span class="p">:</span>
-</span><span id="Parser-1668"><a href="#Parser-1668"><span class="linenos">1668</span></a> <span class="bp">self</span><span 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-1669"><a href="#Parser-1669"><span class="linenos">1669</span></a> <span class="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-1670"><a href="#Parser-1670"><span class="linenos">1670</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-1671"><a href="#Parser-1671"><span class="linenos">1671</span></a> <span class="p">)</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">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">ReturnsProperty</span><span class="p">:</span>
-</span><span id="Parser-1674"><a href="#Parser-1674"><span class="linenos">1674</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-1675"><a href="#Parser-1675"><span class="linenos">1675</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-1676"><a href="#Parser-1676"><span class="linenos">1676</span></a>
-</span><span id="Parser-1677"><a href="#Parser-1677"><span class="linenos">1677</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
-</span><span id="Parser-1678"><a href="#Parser-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</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-1679"><a href="#Parser-1679"><span class="linenos">1679</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-1680"><a href="#Parser-1680"><span class="linenos">1680</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
-</span><span id="Parser-1681"><a href="#Parser-1681"><span class="linenos">1681</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-1682"><a href="#Parser-1682"><span class="linenos">1682</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">),</span>
-</span><span id="Parser-1683"><a href="#Parser-1683"><span class="linenos">1683</span></a> <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="ow">not</span> <span class="bp">self</span><span 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-1685"><a href="#Parser-1685"><span class="linenos">1685</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-1686"><a href="#Parser-1686"><span class="linenos">1686</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1687"><a href="#Parser-1687"><span class="linenos">1687</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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
-</span><span id="Parser-1688"><a href="#Parser-1688"><span class="linenos">1688</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1689"><a href="#Parser-1689"><span class="linenos">1689</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-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">expression</span><span class="p">(</span>
+</span><span id="Parser-1661"><a href="#Parser-1661"><span class="linenos">1661</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
+</span><span id="Parser-1662"><a href="#Parser-1662"><span class="linenos">1662</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1663"><a href="#Parser-1663"><span class="linenos">1663</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-1664"><a href="#Parser-1664"><span class="linenos">1664</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-1665"><a href="#Parser-1665"><span class="linenos">1665</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-1666"><a href="#Parser-1666"><span class="linenos">1666</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
+</span><span id="Parser-1667"><a href="#Parser-1667"><span class="linenos">1667</span></a> <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="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">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="bp">self</span><span 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-1671"><a href="#Parser-1671"><span class="linenos">1671</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-1672"><a href="#Parser-1672"><span class="linenos">1672</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="Parser-1673"><a href="#Parser-1673"><span class="linenos">1673</span></a>
+</span><span id="Parser-1674"><a href="#Parser-1674"><span class="linenos">1674</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">PartitionedByProperty</span><span class="p">:</span>
+</span><span id="Parser-1675"><a href="#Parser-1675"><span class="linenos">1675</span></a> <span class="bp">self</span><span 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-1676"><a href="#Parser-1676"><span class="linenos">1676</span></a> <span class="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-1677"><a href="#Parser-1677"><span class="linenos">1677</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
+</span><span id="Parser-1678"><a href="#Parser-1678"><span class="linenos">1678</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-1679"><a href="#Parser-1679"><span class="linenos">1679</span></a> <span class="p">)</span>
+</span><span id="Parser-1680"><a href="#Parser-1680"><span class="linenos">1680</span></a>
+</span><span id="Parser-1681"><a href="#Parser-1681"><span class="linenos">1681</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="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">WithDataProperty</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1683"><a href="#Parser-1683"><span class="linenos">1683</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1684"><a href="#Parser-1684"><span class="linenos">1684</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-1685"><a href="#Parser-1685"><span class="linenos">1685</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-1686"><a href="#Parser-1686"><span class="linenos">1686</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1687"><a href="#Parser-1687"><span class="linenos">1687</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1688"><a href="#Parser-1688"><span class="linenos">1688</span></a>
+</span><span id="Parser-1689"><a href="#Parser-1689"><span class="linenos">1689</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1690"><a href="#Parser-1690"><span class="linenos">1690</span></a>
-</span><span id="Parser-1691"><a href="#Parser-1691"><span class="linenos">1691</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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">Describe</span><span class="p">:</span>
-</span><span id="Parser-1694"><a href="#Parser-1694"><span class="linenos">1694</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-1695"><a href="#Parser-1695"><span class="linenos">1695</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-1696"><a href="#Parser-1696"><span class="linenos">1696</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1697"><a href="#Parser-1697"><span class="linenos">1697</span></a>
-</span><span id="Parser-1698"><a href="#Parser-1698"><span class="linenos">1698</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">Insert</span><span class="p">:</span>
-</span><span id="Parser-1699"><a href="#Parser-1699"><span class="linenos">1699</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">ensure_list</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-1700"><a href="#Parser-1700"><span class="linenos">1700</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-1701"><a href="#Parser-1701"><span class="linenos">1701</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="bp">self</span><span 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</span><span class="p">)</span>
-</span><span id="Parser-1702"><a href="#Parser-1702"><span class="linenos">1702</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1703"><a href="#Parser-1703"><span class="linenos">1703</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1704"><a href="#Parser-1704"><span class="linenos">1704</span></a>
-</span><span id="Parser-1705"><a href="#Parser-1705"><span class="linenos">1705</span></a> <span class="k">if</span> <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-1706"><a href="#Parser-1706"><span class="linenos">1706</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-1707"><a href="#Parser-1707"><span class="linenos">1707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
-</span><span id="Parser-1708"><a href="#Parser-1708"><span class="linenos">1708</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-1709"><a href="#Parser-1709"><span class="linenos">1709</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="Parser-1710"><a href="#Parser-1710"><span class="linenos">1710</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-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 class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1713"><a href="#Parser-1713"><span class="linenos">1713</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1714"><a href="#Parser-1714"><span class="linenos">1714</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-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="bp">self</span><span 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-1717"><a href="#Parser-1717"><span class="linenos">1717</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</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-1718"><a href="#Parser-1718"><span class="linenos">1718</span></a> <span class="bp">self</span><span 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-1719"><a href="#Parser-1719"><span class="linenos">1719</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-1691"><a href="#Parser-1691"><span class="linenos">1691</span></a> <span class="k">def</span> <span class="nf">_parse_no_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">NoPrimaryIndexProperty</span><span class="p">]:</span>
+</span><span id="Parser-1692"><a href="#Parser-1692"><span class="linenos">1692</span></a> <span class="k">if</span> <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-1693"><a href="#Parser-1693"><span class="linenos">1693</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-1694"><a href="#Parser-1694"><span class="linenos">1694</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1695"><a href="#Parser-1695"><span class="linenos">1695</span></a>
+</span><span id="Parser-1696"><a href="#Parser-1696"><span class="linenos">1696</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1697"><a href="#Parser-1697"><span class="linenos">1697</span></a> <span class="k">if</span> <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-1698"><a href="#Parser-1698"><span class="linenos">1698</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-1699"><a href="#Parser-1699"><span class="linenos">1699</span></a> <span class="k">if</span> <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;DELETE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1700"><a href="#Parser-1700"><span class="linenos">1700</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 class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1701"><a href="#Parser-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 class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span 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_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()))</span>
+</span><span id="Parser-1702"><a href="#Parser-1702"><span class="linenos">1702</span></a>
+</span><span id="Parser-1703"><a href="#Parser-1703"><span class="linenos">1703</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">DistKeyProperty</span><span class="p">:</span>
+</span><span id="Parser-1704"><a href="#Parser-1704"><span class="linenos">1704</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_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">LikeProperty</span><span class="p">]:</span>
+</span><span id="Parser-1707"><a href="#Parser-1707"><span class="linenos">1707</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-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="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1710"><a href="#Parser-1710"><span class="linenos">1710</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-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">_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-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="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-1714"><a href="#Parser-1714"><span class="linenos">1714</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-1715"><a href="#Parser-1715"><span class="linenos">1715</span></a> <span class="k">return</span> <span class="kc">None</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="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-1718"><a href="#Parser-1718"><span class="linenos">1718</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">Property</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <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">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-1719"><a href="#Parser-1719"><span class="linenos">1719</span></a> <span class="p">)</span>
</span><span id="Parser-1720"><a href="#Parser-1720"><span class="linenos">1720</span></a>
-</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-1721"><a href="#Parser-1721"><span class="linenos">1721</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1722"><a href="#Parser-1722"><span class="linenos">1722</span></a>
-</span><span id="Parser-1723"><a href="#Parser-1723"><span class="linenos">1723</span></a> <span class="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-1724"><a href="#Parser-1724"><span class="linenos">1724</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Parser-1725"><a href="#Parser-1725"><span class="linenos">1725</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-1726"><a href="#Parser-1726"><span class="linenos">1726</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1727"><a href="#Parser-1727"><span class="linenos">1727</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-1728"><a href="#Parser-1728"><span class="linenos">1728</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-1729"><a href="#Parser-1729"><span class="linenos">1729</span></a> <span class="n">where</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">REPLACE</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-1730"><a href="#Parser-1730"><span class="linenos">1730</span></a> <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-1731"><a href="#Parser-1731"><span class="linenos">1731</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-1732"><a href="#Parser-1732"><span class="linenos">1732</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-1733"><a href="#Parser-1733"><span class="linenos">1733</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="Parser-1734"><a href="#Parser-1734"><span class="linenos">1734</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="Parser-1735"><a href="#Parser-1735"><span class="linenos">1735</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
-</span><span id="Parser-1736"><a href="#Parser-1736"><span class="linenos">1736</span></a> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore</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_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">OnConflict</span><span class="p">]:</span>
-</span><span id="Parser-1740"><a href="#Parser-1740"><span class="linenos">1740</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-1741"><a href="#Parser-1741"><span class="linenos">1741</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-1742"><a href="#Parser-1742"><span class="linenos">1742</span></a>
-</span><span id="Parser-1743"><a href="#Parser-1743"><span class="linenos">1743</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">conflict</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">duplicate</span><span class="p">:</span>
-</span><span id="Parser-1744"><a href="#Parser-1744"><span class="linenos">1744</span></a> <span class="k">return</span> <span class="kc">None</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="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1747"><a href="#Parser-1747"><span class="linenos">1747</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1748"><a href="#Parser-1748"><span class="linenos">1748</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1749"><a href="#Parser-1749"><span class="linenos">1749</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1750"><a href="#Parser-1750"><span class="linenos">1750</span></a>
-</span><span id="Parser-1751"><a href="#Parser-1751"><span class="linenos">1751</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
-</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_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-1753"><a href="#Parser-1753"><span class="linenos">1753</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-1754"><a href="#Parser-1754"><span class="linenos">1754</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1755"><a href="#Parser-1755"><span class="linenos">1755</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-1756"><a href="#Parser-1756"><span class="linenos">1756</span></a>
-</span><span id="Parser-1757"><a href="#Parser-1757"><span class="linenos">1757</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-1758"><a href="#Parser-1758"><span class="linenos">1758</span></a> <span class="k">if</span> <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-1759"><a href="#Parser-1759"><span class="linenos">1759</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1760"><a href="#Parser-1760"><span class="linenos">1760</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1761"><a href="#Parser-1761"><span class="linenos">1761</span></a> <span class="bp">self</span><span 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-1762"><a href="#Parser-1762"><span class="linenos">1762</span></a> <span class="bp">self</span><span 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-1763"><a href="#Parser-1763"><span class="linenos">1763</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
-</span><span id="Parser-1764"><a href="#Parser-1764"><span class="linenos">1764</span></a>
-</span><span id="Parser-1765"><a href="#Parser-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="Parser-1766"><a href="#Parser-1766"><span class="linenos">1766</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
-</span><span id="Parser-1767"><a href="#Parser-1767"><span class="linenos">1767</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
-</span><span id="Parser-1768"><a href="#Parser-1768"><span class="linenos">1768</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-1769"><a href="#Parser-1769"><span class="linenos">1769</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
-</span><span id="Parser-1770"><a href="#Parser-1770"><span class="linenos">1770</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
-</span><span id="Parser-1771"><a href="#Parser-1771"><span class="linenos">1771</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
-</span><span id="Parser-1772"><a href="#Parser-1772"><span class="linenos">1772</span></a> <span class="p">)</span>
-</span><span id="Parser-1773"><a href="#Parser-1773"><span class="linenos">1773</span></a>
-</span><span id="Parser-1774"><a href="#Parser-1774"><span class="linenos">1774</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">Returning</span><span class="p">]:</span>
-</span><span id="Parser-1775"><a href="#Parser-1775"><span class="linenos">1775</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1776"><a href="#Parser-1776"><span class="linenos">1776</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1777"><a href="#Parser-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><span id="Parser-1778"><a href="#Parser-1778"><span class="linenos">1778</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</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_expression</span><span class="p">),</span>
-</span><span id="Parser-1780"><a href="#Parser-1780"><span class="linenos">1780</span></a> <span class="n">into</span><span class="o">=</span><span class="bp">self</span><span 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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(),</span>
-</span><span id="Parser-1781"><a href="#Parser-1781"><span class="linenos">1781</span></a> <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="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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</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="ow">not</span> <span class="bp">self</span><span 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-1785"><a href="#Parser-1785"><span class="linenos">1785</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1786"><a href="#Parser-1786"><span class="linenos">1786</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-1787"><a href="#Parser-1787"><span class="linenos">1787</span></a>
-</span><span id="Parser-1788"><a href="#Parser-1788"><span class="linenos">1788</span></a> <span class="k">def</span> <span class="nf">_parse_row_format</span><span class="p">(</span>
-</span><span id="Parser-1789"><a href="#Parser-1789"><span class="linenos">1789</span></a> <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><span id="Parser-1790"><a href="#Parser-1790"><span class="linenos">1790</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</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">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-1792"><a href="#Parser-1792"><span class="linenos">1792</span></a> <span class="k">return</span> <span class="kc">None</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="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-1795"><a href="#Parser-1795"><span class="linenos">1795</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-1796"><a href="#Parser-1796"><span class="linenos">1796</span></a>
-</span><span id="Parser-1797"><a href="#Parser-1797"><span class="linenos">1797</span></a> <span class="n">serde_properties</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1798"><a href="#Parser-1798"><span class="linenos">1798</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="Parser-1799"><a href="#Parser-1799"><span class="linenos">1799</span></a> <span class="n">serde_properties</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-1800"><a href="#Parser-1800"><span class="linenos">1800</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</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_property</span><span class="p">)</span>
-</span><span id="Parser-1801"><a href="#Parser-1801"><span class="linenos">1801</span></a> <span class="p">)</span>
-</span><span id="Parser-1802"><a href="#Parser-1802"><span class="linenos">1802</span></a>
-</span><span id="Parser-1803"><a href="#Parser-1803"><span class="linenos">1803</span></a> <span class="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-1804"><a href="#Parser-1804"><span class="linenos">1804</span></a> <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="n">this</span><span class="p">,</span> <span class="n">serde_properties</span><span class="o">=</span><span class="n">serde_properties</span>
-</span><span id="Parser-1805"><a href="#Parser-1805"><span class="linenos">1805</span></a> <span class="p">)</span>
-</span><span id="Parser-1806"><a href="#Parser-1806"><span class="linenos">1806</span></a>
-</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_text_seq</span><span class="p">(</span><span class="s2">&quot;DELIMITED&quot;</span><span class="p">)</span>
-</span><span id="Parser-1808"><a href="#Parser-1808"><span class="linenos">1808</span></a>
-</span><span id="Parser-1809"><a href="#Parser-1809"><span class="linenos">1809</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-1810"><a href="#Parser-1810"><span class="linenos">1810</span></a>
-</span><span id="Parser-1811"><a href="#Parser-1811"><span class="linenos">1811</span></a> <span class="k">if</span> <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-1812"><a href="#Parser-1812"><span class="linenos">1812</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-1813"><a href="#Parser-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <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-1814"><a href="#Parser-1814"><span class="linenos">1814</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-1815"><a href="#Parser-1815"><span class="linenos">1815</span></a> <span class="k">if</span> <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-1816"><a href="#Parser-1816"><span class="linenos">1816</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-1817"><a href="#Parser-1817"><span class="linenos">1817</span></a> <span class="k">if</span> <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-1818"><a href="#Parser-1818"><span class="linenos">1818</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-1819"><a href="#Parser-1819"><span class="linenos">1819</span></a> <span class="k">if</span> <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-1820"><a href="#Parser-1820"><span class="linenos">1820</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-1821"><a href="#Parser-1821"><span class="linenos">1821</span></a> <span class="k">if</span> <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-1822"><a href="#Parser-1822"><span class="linenos">1822</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-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="k">return</span> <span class="bp">self</span><span 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-1825"><a href="#Parser-1825"><span class="linenos">1825</span></a>
-</span><span id="Parser-1826"><a href="#Parser-1826"><span class="linenos">1826</span></a> <span class="k">def</span> <span class="nf">_parse_load</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</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-1827"><a href="#Parser-1827"><span class="linenos">1827</span></a> <span class="k">if</span> <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-1828"><a href="#Parser-1828"><span class="linenos">1828</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1829"><a href="#Parser-1829"><span class="linenos">1829</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-1830"><a href="#Parser-1830"><span class="linenos">1830</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-1831"><a href="#Parser-1831"><span class="linenos">1831</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-1832"><a href="#Parser-1832"><span class="linenos">1832</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-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="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-1835"><a href="#Parser-1835"><span class="linenos">1835</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</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="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-1837"><a href="#Parser-1837"><span class="linenos">1837</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="Parser-1838"><a href="#Parser-1838"><span class="linenos">1838</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="Parser-1839"><a href="#Parser-1839"><span class="linenos">1839</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
-</span><span id="Parser-1840"><a href="#Parser-1840"><span class="linenos">1840</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-1841"><a href="#Parser-1841"><span class="linenos">1841</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-1842"><a href="#Parser-1842"><span class="linenos">1842</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-1843"><a href="#Parser-1843"><span class="linenos">1843</span></a> <span class="p">)</span>
-</span><span id="Parser-1844"><a href="#Parser-1844"><span class="linenos">1844</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-1845"><a href="#Parser-1845"><span class="linenos">1845</span></a>
-</span><span id="Parser-1846"><a href="#Parser-1846"><span class="linenos">1846</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">Delete</span><span class="p">:</span>
-</span><span id="Parser-1847"><a href="#Parser-1847"><span class="linenos">1847</span></a> <span class="c1"># This handles MySQL&#39;s &quot;Multiple-Table Syntax&quot;</span>
-</span><span id="Parser-1848"><a href="#Parser-1848"><span class="linenos">1848</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/delete.html</span>
-</span><span id="Parser-1849"><a href="#Parser-1849"><span class="linenos">1849</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1850"><a href="#Parser-1850"><span class="linenos">1850</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-1851"><a href="#Parser-1851"><span class="linenos">1851</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-1852"><a href="#Parser-1852"><span class="linenos">1852</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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 class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-1853"><a href="#Parser-1853"><span class="linenos">1853</span></a>
-</span><span id="Parser-1854"><a href="#Parser-1854"><span class="linenos">1854</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-1723"><a href="#Parser-1723"><span class="linenos">1723</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">SortKeyProperty</span><span class="p">:</span>
+</span><span id="Parser-1724"><a href="#Parser-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="Parser-1725"><a href="#Parser-1725"><span class="linenos">1725</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_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</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><span id="Parser-1728"><a href="#Parser-1728"><span class="linenos">1728</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">CharacterSetProperty</span><span class="p">:</span>
+</span><span id="Parser-1729"><a href="#Parser-1729"><span class="linenos">1729</span></a> <span class="bp">self</span><span 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-1730"><a href="#Parser-1730"><span class="linenos">1730</span></a> <span class="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-1731"><a href="#Parser-1731"><span class="linenos">1731</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-1732"><a href="#Parser-1732"><span class="linenos">1732</span></a> <span class="p">)</span>
+</span><span id="Parser-1733"><a href="#Parser-1733"><span class="linenos">1733</span></a>
+</span><span id="Parser-1734"><a href="#Parser-1734"><span class="linenos">1734</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">ReturnsProperty</span><span class="p">:</span>
+</span><span id="Parser-1735"><a href="#Parser-1735"><span class="linenos">1735</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-1736"><a href="#Parser-1736"><span class="linenos">1736</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-1737"><a href="#Parser-1737"><span class="linenos">1737</span></a>
+</span><span id="Parser-1738"><a href="#Parser-1738"><span class="linenos">1738</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
+</span><span id="Parser-1739"><a href="#Parser-1739"><span class="linenos">1739</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1740"><a href="#Parser-1740"><span class="linenos">1740</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-1741"><a href="#Parser-1741"><span class="linenos">1741</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
+</span><span id="Parser-1742"><a href="#Parser-1742"><span class="linenos">1742</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-1743"><a href="#Parser-1743"><span class="linenos">1743</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">),</span>
+</span><span id="Parser-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 class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1746"><a href="#Parser-1746"><span class="linenos">1746</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-1747"><a href="#Parser-1747"><span class="linenos">1747</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1748"><a href="#Parser-1748"><span class="linenos">1748</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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
+</span><span id="Parser-1749"><a href="#Parser-1749"><span class="linenos">1749</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1750"><a href="#Parser-1750"><span class="linenos">1750</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-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">return</span> <span class="bp">self</span><span 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-1753"><a href="#Parser-1753"><span class="linenos">1753</span></a>
+</span><span id="Parser-1754"><a href="#Parser-1754"><span class="linenos">1754</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">Describe</span><span class="p">:</span>
+</span><span id="Parser-1755"><a href="#Parser-1755"><span class="linenos">1755</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-1756"><a href="#Parser-1756"><span class="linenos">1756</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-1757"><a href="#Parser-1757"><span class="linenos">1757</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1758"><a href="#Parser-1758"><span class="linenos">1758</span></a>
+</span><span id="Parser-1759"><a href="#Parser-1759"><span class="linenos">1759</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">Insert</span><span class="p">:</span>
+</span><span id="Parser-1760"><a href="#Parser-1760"><span class="linenos">1760</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">ensure_list</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-1761"><a href="#Parser-1761"><span class="linenos">1761</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-1762"><a href="#Parser-1762"><span class="linenos">1762</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="bp">self</span><span 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</span><span class="p">)</span>
+</span><span id="Parser-1763"><a href="#Parser-1763"><span class="linenos">1763</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1764"><a href="#Parser-1764"><span class="linenos">1764</span></a> <span class="n">alternative</span> <span class="o">=</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">if</span> <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-1767"><a href="#Parser-1767"><span class="linenos">1767</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-1768"><a href="#Parser-1768"><span class="linenos">1768</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
+</span><span id="Parser-1769"><a href="#Parser-1769"><span class="linenos">1769</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-1770"><a href="#Parser-1770"><span class="linenos">1770</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="Parser-1771"><a href="#Parser-1771"><span class="linenos">1771</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-1772"><a href="#Parser-1772"><span class="linenos">1772</span></a> <span class="p">)</span>
+</span><span id="Parser-1773"><a href="#Parser-1773"><span class="linenos">1773</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1774"><a href="#Parser-1774"><span class="linenos">1774</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1775"><a href="#Parser-1775"><span class="linenos">1775</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-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="bp">self</span><span 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-1778"><a href="#Parser-1778"><span class="linenos">1778</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</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-1779"><a href="#Parser-1779"><span class="linenos">1779</span></a> <span class="bp">self</span><span 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-1780"><a href="#Parser-1780"><span class="linenos">1780</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-1781"><a href="#Parser-1781"><span class="linenos">1781</span></a>
+</span><span id="Parser-1782"><a href="#Parser-1782"><span class="linenos">1782</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-1783"><a href="#Parser-1783"><span class="linenos">1783</span></a>
+</span><span id="Parser-1784"><a href="#Parser-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><span id="Parser-1785"><a href="#Parser-1785"><span class="linenos">1785</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Parser-1786"><a href="#Parser-1786"><span class="linenos">1786</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-1787"><a href="#Parser-1787"><span class="linenos">1787</span></a> <span class="n">this</span><span class="o">=</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="n">by_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">),</span>
+</span><span id="Parser-1789"><a href="#Parser-1789"><span class="linenos">1789</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-1790"><a href="#Parser-1790"><span class="linenos">1790</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-1791"><a href="#Parser-1791"><span class="linenos">1791</span></a> <span class="n">where</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">REPLACE</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-1792"><a href="#Parser-1792"><span class="linenos">1792</span></a> <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-1793"><a href="#Parser-1793"><span class="linenos">1793</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-1794"><a href="#Parser-1794"><span class="linenos">1794</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-1795"><a href="#Parser-1795"><span class="linenos">1795</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="Parser-1796"><a href="#Parser-1796"><span class="linenos">1796</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="Parser-1797"><a href="#Parser-1797"><span class="linenos">1797</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
+</span><span id="Parser-1798"><a href="#Parser-1798"><span class="linenos">1798</span></a> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore</span><span class="p">,</span>
+</span><span id="Parser-1799"><a href="#Parser-1799"><span class="linenos">1799</span></a> <span class="p">)</span>
+</span><span id="Parser-1800"><a href="#Parser-1800"><span class="linenos">1800</span></a>
+</span><span id="Parser-1801"><a href="#Parser-1801"><span class="linenos">1801</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">OnConflict</span><span class="p">]:</span>
+</span><span id="Parser-1802"><a href="#Parser-1802"><span class="linenos">1802</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-1803"><a href="#Parser-1803"><span class="linenos">1803</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-1804"><a href="#Parser-1804"><span class="linenos">1804</span></a>
+</span><span id="Parser-1805"><a href="#Parser-1805"><span class="linenos">1805</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">conflict</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">duplicate</span><span class="p">:</span>
+</span><span id="Parser-1806"><a href="#Parser-1806"><span class="linenos">1806</span></a> <span class="k">return</span> <span class="kc">None</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="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1809"><a href="#Parser-1809"><span class="linenos">1809</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1810"><a href="#Parser-1810"><span class="linenos">1810</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1811"><a href="#Parser-1811"><span class="linenos">1811</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1812"><a href="#Parser-1812"><span class="linenos">1812</span></a>
+</span><span id="Parser-1813"><a href="#Parser-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
+</span><span id="Parser-1814"><a href="#Parser-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <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-1815"><a href="#Parser-1815"><span class="linenos">1815</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-1816"><a href="#Parser-1816"><span class="linenos">1816</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1817"><a href="#Parser-1817"><span class="linenos">1817</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-1818"><a href="#Parser-1818"><span class="linenos">1818</span></a>
+</span><span id="Parser-1819"><a href="#Parser-1819"><span class="linenos">1819</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-1820"><a href="#Parser-1820"><span class="linenos">1820</span></a> <span class="k">if</span> <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-1821"><a href="#Parser-1821"><span class="linenos">1821</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1822"><a href="#Parser-1822"><span class="linenos">1822</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1823"><a href="#Parser-1823"><span class="linenos">1823</span></a> <span class="bp">self</span><span 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-1824"><a href="#Parser-1824"><span class="linenos">1824</span></a> <span class="bp">self</span><span 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-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_equality</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="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-1828"><a href="#Parser-1828"><span class="linenos">1828</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
+</span><span id="Parser-1829"><a href="#Parser-1829"><span class="linenos">1829</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
+</span><span id="Parser-1830"><a href="#Parser-1830"><span class="linenos">1830</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-1831"><a href="#Parser-1831"><span class="linenos">1831</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
+</span><span id="Parser-1832"><a href="#Parser-1832"><span class="linenos">1832</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="Parser-1833"><a href="#Parser-1833"><span class="linenos">1833</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</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><span id="Parser-1836"><a href="#Parser-1836"><span class="linenos">1836</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">Returning</span><span class="p">]:</span>
+</span><span id="Parser-1837"><a href="#Parser-1837"><span class="linenos">1837</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1838"><a href="#Parser-1838"><span class="linenos">1838</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1839"><a href="#Parser-1839"><span class="linenos">1839</span></a> <span class="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-1840"><a href="#Parser-1840"><span class="linenos">1840</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="Parser-1841"><a href="#Parser-1841"><span class="linenos">1841</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-1842"><a href="#Parser-1842"><span class="linenos">1842</span></a> <span class="n">into</span><span class="o">=</span><span class="bp">self</span><span 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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(),</span>
+</span><span id="Parser-1843"><a href="#Parser-1843"><span class="linenos">1843</span></a> <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="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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
+</span><span id="Parser-1846"><a href="#Parser-1846"><span class="linenos">1846</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1847"><a href="#Parser-1847"><span class="linenos">1847</span></a> <span class="k">return</span> <span class="kc">None</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_row_format</span><span class="p">()</span>
+</span><span id="Parser-1849"><a href="#Parser-1849"><span class="linenos">1849</span></a>
+</span><span id="Parser-1850"><a href="#Parser-1850"><span class="linenos">1850</span></a> <span class="k">def</span> <span class="nf">_parse_row_format</span><span class="p">(</span>
+</span><span id="Parser-1851"><a href="#Parser-1851"><span class="linenos">1851</span></a> <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><span id="Parser-1852"><a href="#Parser-1852"><span class="linenos">1852</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
+</span><span id="Parser-1853"><a href="#Parser-1853"><span class="linenos">1853</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-1854"><a href="#Parser-1854"><span class="linenos">1854</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1855"><a href="#Parser-1855"><span class="linenos">1855</span></a>
-</span><span id="Parser-1856"><a href="#Parser-1856"><span class="linenos">1856</span></a> <span class="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-1857"><a href="#Parser-1857"><span class="linenos">1857</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
-</span><span id="Parser-1858"><a href="#Parser-1858"><span class="linenos">1858</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-1859"><a href="#Parser-1859"><span class="linenos">1859</span></a> <span class="n">tables</span><span class="o">=</span><span class="n">tables</span><span class="p">,</span>
-</span><span id="Parser-1860"><a href="#Parser-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">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-1861"><a href="#Parser-1861"><span class="linenos">1861</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-1862"><a href="#Parser-1862"><span class="linenos">1862</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-1863"><a href="#Parser-1863"><span class="linenos">1863</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="Parser-1864"><a href="#Parser-1864"><span class="linenos">1864</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><span id="Parser-1865"><a href="#Parser-1865"><span class="linenos">1865</span></a> <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="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">Update</span><span class="p">:</span>
-</span><span id="Parser-1868"><a href="#Parser-1868"><span class="linenos">1868</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-1869"><a href="#Parser-1869"><span class="linenos">1869</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">UPDATE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-1870"><a href="#Parser-1870"><span class="linenos">1870</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-1871"><a href="#Parser-1871"><span class="linenos">1871</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-1872"><a href="#Parser-1872"><span class="linenos">1872</span></a> <span class="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-1873"><a href="#Parser-1873"><span class="linenos">1873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Parser-1874"><a href="#Parser-1874"><span class="linenos">1874</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-1875"><a href="#Parser-1875"><span class="linenos">1875</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-1876"><a href="#Parser-1876"><span class="linenos">1876</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1877"><a href="#Parser-1877"><span class="linenos">1877</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-1878"><a href="#Parser-1878"><span class="linenos">1878</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 class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-1879"><a href="#Parser-1879"><span class="linenos">1879</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-1880"><a href="#Parser-1880"><span class="linenos">1880</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="Parser-1881"><a href="#Parser-1881"><span class="linenos">1881</span></a> <span class="s2">&quot;limit&quot;</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-1882"><a href="#Parser-1882"><span class="linenos">1882</span></a> <span class="p">},</span>
-</span><span id="Parser-1883"><a href="#Parser-1883"><span class="linenos">1883</span></a> <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="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">Uncache</span><span class="p">:</span>
-</span><span id="Parser-1886"><a href="#Parser-1886"><span class="linenos">1886</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1887"><a href="#Parser-1887"><span class="linenos">1887</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-1888"><a href="#Parser-1888"><span class="linenos">1888</span></a>
-</span><span id="Parser-1889"><a href="#Parser-1889"><span class="linenos">1889</span></a> <span class="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-1890"><a href="#Parser-1890"><span class="linenos">1890</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span> <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">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-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_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">Cache</span><span class="p">:</span>
-</span><span id="Parser-1894"><a href="#Parser-1894"><span class="linenos">1894</span></a> <span class="n">lazy</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;LAZY&quot;</span><span class="p">)</span>
-</span><span id="Parser-1895"><a href="#Parser-1895"><span class="linenos">1895</span></a> <span class="bp">self</span><span 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-1896"><a href="#Parser-1896"><span class="linenos">1896</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-1897"><a href="#Parser-1897"><span class="linenos">1897</span></a>
-</span><span id="Parser-1898"><a href="#Parser-1898"><span class="linenos">1898</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1899"><a href="#Parser-1899"><span class="linenos">1899</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OPTIONS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1900"><a href="#Parser-1900"><span class="linenos">1900</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-1901"><a href="#Parser-1901"><span class="linenos">1901</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-1902"><a href="#Parser-1902"><span class="linenos">1902</span></a> <span class="bp">self</span><span 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-1903"><a href="#Parser-1903"><span class="linenos">1903</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-1904"><a href="#Parser-1904"><span class="linenos">1904</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-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><span id="Parser-1906"><a href="#Parser-1906"><span class="linenos">1906</span></a>
-</span><span id="Parser-1907"><a href="#Parser-1907"><span class="linenos">1907</span></a> <span class="bp">self</span><span 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-1908"><a href="#Parser-1908"><span class="linenos">1908</span></a> <span class="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-1909"><a href="#Parser-1909"><span class="linenos">1909</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
-</span><span id="Parser-1910"><a href="#Parser-1910"><span class="linenos">1910</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Parser-1911"><a href="#Parser-1911"><span class="linenos">1911</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
-</span><span id="Parser-1912"><a href="#Parser-1912"><span class="linenos">1912</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="Parser-1913"><a href="#Parser-1913"><span class="linenos">1913</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-1914"><a href="#Parser-1914"><span class="linenos">1914</span></a> <span class="p">)</span>
+</span><span id="Parser-1856"><a href="#Parser-1856"><span class="linenos">1856</span></a> <span class="k">if</span> <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-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">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-1858"><a href="#Parser-1858"><span class="linenos">1858</span></a>
+</span><span id="Parser-1859"><a href="#Parser-1859"><span class="linenos">1859</span></a> <span class="n">serde_properties</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1860"><a href="#Parser-1860"><span class="linenos">1860</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="Parser-1861"><a href="#Parser-1861"><span class="linenos">1861</span></a> <span class="n">serde_properties</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-1862"><a href="#Parser-1862"><span class="linenos">1862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</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_property</span><span class="p">)</span>
+</span><span id="Parser-1863"><a href="#Parser-1863"><span class="linenos">1863</span></a> <span class="p">)</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">expression</span><span class="p">(</span>
+</span><span id="Parser-1866"><a href="#Parser-1866"><span class="linenos">1866</span></a> <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="n">this</span><span class="p">,</span> <span class="n">serde_properties</span><span class="o">=</span><span class="n">serde_properties</span>
+</span><span id="Parser-1867"><a href="#Parser-1867"><span class="linenos">1867</span></a> <span class="p">)</span>
+</span><span id="Parser-1868"><a href="#Parser-1868"><span class="linenos">1868</span></a>
+</span><span id="Parser-1869"><a href="#Parser-1869"><span class="linenos">1869</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-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="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-1872"><a href="#Parser-1872"><span class="linenos">1872</span></a>
+</span><span id="Parser-1873"><a href="#Parser-1873"><span class="linenos">1873</span></a> <span class="k">if</span> <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-1874"><a href="#Parser-1874"><span class="linenos">1874</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-1875"><a href="#Parser-1875"><span class="linenos">1875</span></a> <span class="k">if</span> <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-1876"><a href="#Parser-1876"><span class="linenos">1876</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-1877"><a href="#Parser-1877"><span class="linenos">1877</span></a> <span class="k">if</span> <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-1878"><a href="#Parser-1878"><span class="linenos">1878</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-1879"><a href="#Parser-1879"><span class="linenos">1879</span></a> <span class="k">if</span> <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-1880"><a href="#Parser-1880"><span class="linenos">1880</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-1881"><a href="#Parser-1881"><span class="linenos">1881</span></a> <span class="k">if</span> <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-1882"><a href="#Parser-1882"><span class="linenos">1882</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-1883"><a href="#Parser-1883"><span class="linenos">1883</span></a> <span class="k">if</span> <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-1884"><a href="#Parser-1884"><span class="linenos">1884</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-1885"><a href="#Parser-1885"><span class="linenos">1885</span></a>
+</span><span id="Parser-1886"><a href="#Parser-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 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-1887"><a href="#Parser-1887"><span class="linenos">1887</span></a>
+</span><span id="Parser-1888"><a href="#Parser-1888"><span class="linenos">1888</span></a> <span class="k">def</span> <span class="nf">_parse_load</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</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-1889"><a href="#Parser-1889"><span class="linenos">1889</span></a> <span class="k">if</span> <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-1890"><a href="#Parser-1890"><span class="linenos">1890</span></a> <span class="n">local</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;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1891"><a href="#Parser-1891"><span class="linenos">1891</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-1892"><a href="#Parser-1892"><span class="linenos">1892</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-1893"><a href="#Parser-1893"><span class="linenos">1893</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-1894"><a href="#Parser-1894"><span class="linenos">1894</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-1895"><a href="#Parser-1895"><span class="linenos">1895</span></a>
+</span><span id="Parser-1896"><a href="#Parser-1896"><span class="linenos">1896</span></a> <span class="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-1897"><a href="#Parser-1897"><span class="linenos">1897</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
+</span><span id="Parser-1898"><a href="#Parser-1898"><span class="linenos">1898</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-1899"><a href="#Parser-1899"><span class="linenos">1899</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="Parser-1900"><a href="#Parser-1900"><span class="linenos">1900</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="Parser-1901"><a href="#Parser-1901"><span class="linenos">1901</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
+</span><span id="Parser-1902"><a href="#Parser-1902"><span class="linenos">1902</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-1903"><a href="#Parser-1903"><span class="linenos">1903</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-1904"><a href="#Parser-1904"><span class="linenos">1904</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-1905"><a href="#Parser-1905"><span class="linenos">1905</span></a> <span class="p">)</span>
+</span><span id="Parser-1906"><a href="#Parser-1906"><span class="linenos">1906</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-1907"><a href="#Parser-1907"><span class="linenos">1907</span></a>
+</span><span id="Parser-1908"><a href="#Parser-1908"><span class="linenos">1908</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">Delete</span><span class="p">:</span>
+</span><span id="Parser-1909"><a href="#Parser-1909"><span class="linenos">1909</span></a> <span class="c1"># This handles MySQL&#39;s &quot;Multiple-Table Syntax&quot;</span>
+</span><span id="Parser-1910"><a href="#Parser-1910"><span class="linenos">1910</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/delete.html</span>
+</span><span id="Parser-1911"><a href="#Parser-1911"><span class="linenos">1911</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1912"><a href="#Parser-1912"><span class="linenos">1912</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-1913"><a href="#Parser-1913"><span class="linenos">1913</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-1914"><a href="#Parser-1914"><span class="linenos">1914</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</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 class="ow">or</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">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">Partition</span><span class="p">]:</span>
-</span><span id="Parser-1917"><a href="#Parser-1917"><span class="linenos">1917</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1918"><a href="#Parser-1918"><span class="linenos">1918</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1919"><a href="#Parser-1919"><span class="linenos">1919</span></a>
-</span><span id="Parser-1920"><a href="#Parser-1920"><span class="linenos">1920</span></a> <span class="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-1921"><a href="#Parser-1921"><span class="linenos">1921</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-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_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">Tuple</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="bp">self</span><span 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-1926"><a href="#Parser-1926"><span class="linenos">1926</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-1927"><a href="#Parser-1927"><span class="linenos">1927</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-1928"><a href="#Parser-1928"><span class="linenos">1928</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
-</span><span id="Parser-1931"><a href="#Parser-1931"><span class="linenos">1931</span></a> <span class="c1"># https://prestodb.io/docs/current/sql/values.html</span>
-</span><span id="Parser-1932"><a href="#Parser-1932"><span class="linenos">1932</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1933"><a href="#Parser-1933"><span class="linenos">1933</span></a>
-</span><span id="Parser-1934"><a href="#Parser-1934"><span class="linenos">1934</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="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-1935"><a href="#Parser-1935"><span class="linenos">1935</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</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">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
-</span><span id="Parser-1938"><a href="#Parser-1938"><span class="linenos">1938</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-1939"><a href="#Parser-1939"><span class="linenos">1939</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-1940"><a href="#Parser-1940"><span class="linenos">1940</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-1941"><a href="#Parser-1941"><span class="linenos">1941</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
-</span><span id="Parser-1942"><a href="#Parser-1942"><span class="linenos">1942</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-1943"><a href="#Parser-1943"><span class="linenos">1943</span></a>
-</span><span id="Parser-1944"><a href="#Parser-1944"><span class="linenos">1944</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-1945"><a href="#Parser-1945"><span class="linenos">1945</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-1946"><a href="#Parser-1946"><span class="linenos">1946</span></a> <span class="k">return</span> <span class="n">cte</span>
+</span><span id="Parser-1916"><a href="#Parser-1916"><span class="linenos">1916</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-1917"><a href="#Parser-1917"><span class="linenos">1917</span></a>
+</span><span id="Parser-1918"><a href="#Parser-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><span id="Parser-1919"><a href="#Parser-1919"><span class="linenos">1919</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
+</span><span id="Parser-1920"><a href="#Parser-1920"><span class="linenos">1920</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-1921"><a href="#Parser-1921"><span class="linenos">1921</span></a> <span class="n">tables</span><span class="o">=</span><span class="n">tables</span><span class="p">,</span>
+</span><span id="Parser-1922"><a href="#Parser-1922"><span class="linenos">1922</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">FROM</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 class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-1923"><a href="#Parser-1923"><span class="linenos">1923</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-1924"><a href="#Parser-1924"><span class="linenos">1924</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-1925"><a href="#Parser-1925"><span class="linenos">1925</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="Parser-1926"><a href="#Parser-1926"><span class="linenos">1926</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><span id="Parser-1927"><a href="#Parser-1927"><span class="linenos">1927</span></a> <span class="p">)</span>
+</span><span id="Parser-1928"><a href="#Parser-1928"><span class="linenos">1928</span></a>
+</span><span id="Parser-1929"><a href="#Parser-1929"><span class="linenos">1929</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">Update</span><span class="p">:</span>
+</span><span id="Parser-1930"><a href="#Parser-1930"><span class="linenos">1930</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-1931"><a href="#Parser-1931"><span class="linenos">1931</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">UPDATE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-1932"><a href="#Parser-1932"><span class="linenos">1932</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-1933"><a href="#Parser-1933"><span class="linenos">1933</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-1934"><a href="#Parser-1934"><span class="linenos">1934</span></a> <span class="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-1935"><a href="#Parser-1935"><span class="linenos">1935</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Parser-1936"><a href="#Parser-1936"><span class="linenos">1936</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-1937"><a href="#Parser-1937"><span class="linenos">1937</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-1938"><a href="#Parser-1938"><span class="linenos">1938</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1939"><a href="#Parser-1939"><span class="linenos">1939</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-1940"><a href="#Parser-1940"><span class="linenos">1940</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 class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-1941"><a href="#Parser-1941"><span class="linenos">1941</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-1942"><a href="#Parser-1942"><span class="linenos">1942</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="Parser-1943"><a href="#Parser-1943"><span class="linenos">1943</span></a> <span class="s2">&quot;order&quot;</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-1944"><a href="#Parser-1944"><span class="linenos">1944</span></a> <span class="s2">&quot;limit&quot;</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-1945"><a href="#Parser-1945"><span class="linenos">1945</span></a> <span class="p">},</span>
+</span><span id="Parser-1946"><a href="#Parser-1946"><span class="linenos">1946</span></a> <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">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-1949"><a href="#Parser-1949"><span class="linenos">1949</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-1950"><a href="#Parser-1950"><span class="linenos">1950</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1951"><a href="#Parser-1951"><span class="linenos">1951</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-1952"><a href="#Parser-1952"><span class="linenos">1952</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
-</span><span id="Parser-1953"><a href="#Parser-1953"><span class="linenos">1953</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-1954"><a href="#Parser-1954"><span class="linenos">1954</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-1948"><a href="#Parser-1948"><span class="linenos">1948</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">Uncache</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="ow">not</span> <span class="bp">self</span><span 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-1950"><a href="#Parser-1950"><span class="linenos">1950</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-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">return</span> <span class="bp">self</span><span class="o">.</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 class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span> <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">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-1954"><a href="#Parser-1954"><span class="linenos">1954</span></a> <span class="p">)</span>
</span><span id="Parser-1955"><a href="#Parser-1955"><span class="linenos">1955</span></a>
-</span><span id="Parser-1956"><a href="#Parser-1956"><span class="linenos">1956</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-1957"><a href="#Parser-1957"><span class="linenos">1957</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-1958"><a href="#Parser-1958"><span class="linenos">1958</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-1959"><a href="#Parser-1959"><span class="linenos">1959</span></a>
-</span><span id="Parser-1960"><a href="#Parser-1960"><span class="linenos">1960</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-1961"><a href="#Parser-1961"><span class="linenos">1961</span></a> <span class="bp">self</span><span 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-1962"><a href="#Parser-1962"><span class="linenos">1962</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-1963"><a href="#Parser-1963"><span class="linenos">1963</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-1964"><a href="#Parser-1964"><span class="linenos">1964</span></a> <span class="p">)</span>
-</span><span id="Parser-1965"><a href="#Parser-1965"><span class="linenos">1965</span></a>
-</span><span id="Parser-1966"><a href="#Parser-1966"><span class="linenos">1966</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="Parser-1967"><a href="#Parser-1967"><span class="linenos">1967</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-1968"><a href="#Parser-1968"><span class="linenos">1968</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
-</span><span id="Parser-1969"><a href="#Parser-1969"><span class="linenos">1969</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-1970"><a href="#Parser-1970"><span class="linenos">1970</span></a> <span class="p">)</span>
-</span><span id="Parser-1971"><a href="#Parser-1971"><span class="linenos">1971</span></a>
-</span><span id="Parser-1972"><a href="#Parser-1972"><span class="linenos">1972</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-1973"><a href="#Parser-1973"><span class="linenos">1973</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-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="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-1976"><a href="#Parser-1976"><span class="linenos">1976</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_projections</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="n">this</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-1979"><a href="#Parser-1979"><span class="linenos">1979</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
-</span><span id="Parser-1980"><a href="#Parser-1980"><span class="linenos">1980</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-1981"><a href="#Parser-1981"><span class="linenos">1981</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
-</span><span id="Parser-1982"><a href="#Parser-1982"><span class="linenos">1982</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="Parser-1983"><a href="#Parser-1983"><span class="linenos">1983</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">projections</span><span class="p">,</span>
-</span><span id="Parser-1984"><a href="#Parser-1984"><span class="linenos">1984</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="Parser-1985"><a href="#Parser-1985"><span class="linenos">1985</span></a> <span class="p">)</span>
-</span><span id="Parser-1986"><a href="#Parser-1986"><span class="linenos">1986</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-1987"><a href="#Parser-1987"><span class="linenos">1987</span></a>
-</span><span id="Parser-1988"><a href="#Parser-1988"><span class="linenos">1988</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-1989"><a href="#Parser-1989"><span class="linenos">1989</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="Parser-1990"><a href="#Parser-1990"><span class="linenos">1990</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-1991"><a href="#Parser-1991"><span class="linenos">1991</span></a>
-</span><span id="Parser-1992"><a href="#Parser-1992"><span class="linenos">1992</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-1993"><a href="#Parser-1993"><span class="linenos">1993</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="Parser-1994"><a href="#Parser-1994"><span class="linenos">1994</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-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">this</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="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-1998"><a href="#Parser-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</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-1999"><a href="#Parser-1999"><span class="linenos">1999</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">()</span>
-</span><span id="Parser-2000"><a href="#Parser-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</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-2001"><a href="#Parser-2001"><span class="linenos">2001</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span>
-</span><span id="Parser-2002"><a href="#Parser-2002"><span class="linenos">2002</span></a> <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">From</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 class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-2003"><a href="#Parser-2003"><span class="linenos">2003</span></a> <span class="p">)</span>
-</span><span id="Parser-2004"><a href="#Parser-2004"><span class="linenos">2004</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2005"><a href="#Parser-2005"><span class="linenos">2005</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-2006"><a href="#Parser-2006"><span class="linenos">2006</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="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-1956"><a href="#Parser-1956"><span class="linenos">1956</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">Cache</span><span class="p">:</span>
+</span><span id="Parser-1957"><a href="#Parser-1957"><span class="linenos">1957</span></a> <span class="n">lazy</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;LAZY&quot;</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">_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-1959"><a href="#Parser-1959"><span class="linenos">1959</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-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="n">options</span> <span class="o">=</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_text_seq</span><span class="p">(</span><span class="s2">&quot;OPTIONS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1963"><a href="#Parser-1963"><span class="linenos">1963</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-1964"><a href="#Parser-1964"><span class="linenos">1964</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-1965"><a href="#Parser-1965"><span class="linenos">1965</span></a> <span class="bp">self</span><span 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-1966"><a href="#Parser-1966"><span class="linenos">1966</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-1967"><a href="#Parser-1967"><span class="linenos">1967</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-1968"><a href="#Parser-1968"><span class="linenos">1968</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-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="bp">self</span><span 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-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">Cache</span><span class="p">,</span>
+</span><span id="Parser-1973"><a href="#Parser-1973"><span class="linenos">1973</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Parser-1974"><a href="#Parser-1974"><span class="linenos">1974</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
+</span><span id="Parser-1975"><a href="#Parser-1975"><span class="linenos">1975</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
+</span><span id="Parser-1976"><a href="#Parser-1976"><span class="linenos">1976</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-1977"><a href="#Parser-1977"><span class="linenos">1977</span></a> <span class="p">)</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">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">Partition</span><span class="p">]:</span>
+</span><span id="Parser-1980"><a href="#Parser-1980"><span class="linenos">1980</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-1981"><a href="#Parser-1981"><span class="linenos">1981</span></a> <span class="k">return</span> <span class="kc">None</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">return</span> <span class="bp">self</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="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-1985"><a href="#Parser-1985"><span class="linenos">1985</span></a> <span class="p">)</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="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">Tuple</span><span class="p">:</span>
+</span><span id="Parser-1988"><a href="#Parser-1988"><span class="linenos">1988</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1989"><a href="#Parser-1989"><span class="linenos">1989</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-1990"><a href="#Parser-1990"><span class="linenos">1990</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-1991"><a href="#Parser-1991"><span class="linenos">1991</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1992"><a href="#Parser-1992"><span class="linenos">1992</span></a>
+</span><span id="Parser-1993"><a href="#Parser-1993"><span class="linenos">1993</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-1994"><a href="#Parser-1994"><span class="linenos">1994</span></a> <span class="c1"># https://prestodb.io/docs/current/sql/values.html</span>
+</span><span id="Parser-1995"><a href="#Parser-1995"><span class="linenos">1995</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1996"><a href="#Parser-1996"><span class="linenos">1996</span></a>
+</span><span id="Parser-1997"><a href="#Parser-1997"><span class="linenos">1997</span></a> <span class="k">def</span> <span class="nf">_parse_projections</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1998"><a href="#Parser-1998"><span class="linenos">1998</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="Parser-1999"><a href="#Parser-1999"><span class="linenos">1999</span></a>
+</span><span id="Parser-2000"><a href="#Parser-2000"><span class="linenos">2000</span></a> <span class="k">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
+</span><span id="Parser-2001"><a href="#Parser-2001"><span class="linenos">2001</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-2002"><a href="#Parser-2002"><span class="linenos">2002</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2003"><a href="#Parser-2003"><span class="linenos">2003</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-2004"><a href="#Parser-2004"><span class="linenos">2004</span></a>
+</span><span id="Parser-2005"><a href="#Parser-2005"><span class="linenos">2005</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
+</span><span id="Parser-2006"><a href="#Parser-2006"><span class="linenos">2006</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-2007"><a href="#Parser-2007"><span class="linenos">2007</span></a>
-</span><span id="Parser-2008"><a href="#Parser-2008"><span class="linenos">2008</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-2009"><a href="#Parser-2009"><span class="linenos">2009</span></a>
-</span><span id="Parser-2010"><a href="#Parser-2010"><span class="linenos">2010</span></a> <span class="c1"># We return early here so that the UNION isn&#39;t attached to the subquery by the</span>
-</span><span id="Parser-2011"><a href="#Parser-2011"><span class="linenos">2011</span></a> <span class="c1"># following call to _parse_set_operations, but instead becomes the parent node</span>
-</span><span id="Parser-2012"><a href="#Parser-2012"><span class="linenos">2012</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-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</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-2014"><a href="#Parser-2014"><span class="linenos">2014</span></a> <span class="n">this</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-2015"><a href="#Parser-2015"><span class="linenos">2015</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
-</span><span id="Parser-2016"><a href="#Parser-2016"><span class="linenos">2016</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-2017"><a href="#Parser-2017"><span class="linenos">2017</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-2018"><a href="#Parser-2018"><span class="linenos">2018</span></a> <span class="p">)</span>
-</span><span id="Parser-2019"><a href="#Parser-2019"><span class="linenos">2019</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2020"><a href="#Parser-2020"><span class="linenos">2020</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2021"><a href="#Parser-2021"><span class="linenos">2021</span></a>
-</span><span id="Parser-2022"><a href="#Parser-2022"><span class="linenos">2022</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-2023"><a href="#Parser-2023"><span class="linenos">2023</span></a>
-</span><span id="Parser-2024"><a href="#Parser-2024"><span class="linenos">2024</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">With</span><span class="p">]:</span>
-</span><span id="Parser-2025"><a href="#Parser-2025"><span class="linenos">2025</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-2026"><a href="#Parser-2026"><span class="linenos">2026</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2027"><a href="#Parser-2027"><span class="linenos">2027</span></a>
-</span><span id="Parser-2028"><a href="#Parser-2028"><span class="linenos">2028</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-2029"><a href="#Parser-2029"><span class="linenos">2029</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-2030"><a href="#Parser-2030"><span class="linenos">2030</span></a>
-</span><span id="Parser-2031"><a href="#Parser-2031"><span class="linenos">2031</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2032"><a href="#Parser-2032"><span class="linenos">2032</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-2033"><a href="#Parser-2033"><span class="linenos">2033</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-2034"><a href="#Parser-2034"><span class="linenos">2034</span></a>
-</span><span id="Parser-2035"><a href="#Parser-2035"><span class="linenos">2035</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2036"><a href="#Parser-2036"><span class="linenos">2036</span></a> <span class="k">break</span>
-</span><span id="Parser-2037"><a href="#Parser-2037"><span class="linenos">2037</span></a> <span class="k">else</span><span class="p">:</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">_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-2039"><a href="#Parser-2039"><span class="linenos">2039</span></a>
-</span><span id="Parser-2040"><a href="#Parser-2040"><span class="linenos">2040</span></a> <span class="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-2041"><a href="#Parser-2041"><span class="linenos">2041</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-2042"><a href="#Parser-2042"><span class="linenos">2042</span></a> <span class="p">)</span>
-</span><span id="Parser-2043"><a href="#Parser-2043"><span class="linenos">2043</span></a>
-</span><span id="Parser-2044"><a href="#Parser-2044"><span class="linenos">2044</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="Parser-2045"><a href="#Parser-2045"><span class="linenos">2045</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-2046"><a href="#Parser-2046"><span class="linenos">2046</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-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;Expected CTE to have alias&quot;</span><span class="p">)</span>
-</span><span id="Parser-2048"><a href="#Parser-2048"><span class="linenos">2048</span></a>
-</span><span id="Parser-2049"><a href="#Parser-2049"><span class="linenos">2049</span></a> <span class="bp">self</span><span 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-2050"><a href="#Parser-2050"><span class="linenos">2050</span></a> <span class="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-2051"><a href="#Parser-2051"><span class="linenos">2051</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="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 class="n">alias</span><span class="o">=</span><span class="n">alias</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><span id="Parser-2054"><a href="#Parser-2054"><span class="linenos">2054</span></a> <span class="k">def</span> <span class="nf">_parse_table_alias</span><span class="p">(</span>
-</span><span id="Parser-2055"><a href="#Parser-2055"><span class="linenos">2055</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-2056"><a href="#Parser-2056"><span class="linenos">2056</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]:</span>
-</span><span id="Parser-2057"><a href="#Parser-2057"><span class="linenos">2057</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-2058"><a href="#Parser-2058"><span class="linenos">2058</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2059"><a href="#Parser-2059"><span class="linenos">2059</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-2060"><a href="#Parser-2060"><span class="linenos">2060</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-2061"><a href="#Parser-2061"><span class="linenos">2061</span></a> <span class="p">)</span>
-</span><span id="Parser-2062"><a href="#Parser-2062"><span class="linenos">2062</span></a>
-</span><span id="Parser-2063"><a href="#Parser-2063"><span class="linenos">2063</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-2064"><a href="#Parser-2064"><span class="linenos">2064</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2065"><a href="#Parser-2065"><span class="linenos">2065</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-2066"><a href="#Parser-2066"><span class="linenos">2066</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-2067"><a href="#Parser-2067"><span class="linenos">2067</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2068"><a href="#Parser-2068"><span class="linenos">2068</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2069"><a href="#Parser-2069"><span class="linenos">2069</span></a>
-</span><span id="Parser-2070"><a href="#Parser-2070"><span class="linenos">2070</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-2071"><a href="#Parser-2071"><span class="linenos">2071</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2072"><a href="#Parser-2072"><span class="linenos">2072</span></a>
-</span><span id="Parser-2073"><a href="#Parser-2073"><span class="linenos">2073</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
-</span><span id="Parser-2076"><a href="#Parser-2076"><span class="linenos">2076</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-2077"><a href="#Parser-2077"><span class="linenos">2077</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="Parser-2078"><a href="#Parser-2078"><span class="linenos">2078</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-2079"><a href="#Parser-2079"><span class="linenos">2079</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2080"><a href="#Parser-2080"><span class="linenos">2080</span></a>
-</span><span id="Parser-2081"><a href="#Parser-2081"><span class="linenos">2081</span></a> <span class="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-2082"><a href="#Parser-2082"><span class="linenos">2082</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</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="n">this</span><span class="p">,</span>
-</span><span id="Parser-2084"><a href="#Parser-2084"><span class="linenos">2084</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-2085"><a href="#Parser-2085"><span class="linenos">2085</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-2086"><a href="#Parser-2086"><span class="linenos">2086</span></a> <span class="p">)</span>
-</span><span id="Parser-2087"><a href="#Parser-2087"><span class="linenos">2087</span></a>
-</span><span id="Parser-2088"><a href="#Parser-2088"><span class="linenos">2088</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="Parser-2089"><a href="#Parser-2089"><span class="linenos">2089</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-2090"><a href="#Parser-2090"><span class="linenos">2090</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2091"><a href="#Parser-2091"><span class="linenos">2091</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="bp">self</span><span class="o">.</span><span class="n">MODIFIABLES</span><span class="p">):</span>
-</span><span id="Parser-2092"><a href="#Parser-2092"><span class="linenos">2092</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-2093"><a href="#Parser-2093"><span class="linenos">2093</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-2094"><a href="#Parser-2094"><span class="linenos">2094</span></a> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-2095"><a href="#Parser-2095"><span class="linenos">2095</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-2096"><a href="#Parser-2096"><span class="linenos">2096</span></a>
-</span><span id="Parser-2097"><a href="#Parser-2097"><span class="linenos">2097</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-2098"><a href="#Parser-2098"><span class="linenos">2098</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">QUERY_MODIFIER_PARSERS</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-2099"><a href="#Parser-2099"><span class="linenos">2099</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_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">token_type</span><span class="p">]</span>
-</span><span id="Parser-2100"><a href="#Parser-2100"><span class="linenos">2100</span></a> <span class="n">key</span><span class="p">,</span> <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-2008"><a href="#Parser-2008"><span class="linenos">2008</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-2009"><a href="#Parser-2009"><span class="linenos">2009</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-2010"><a href="#Parser-2010"><span class="linenos">2010</span></a> <span class="k">return</span> <span class="n">cte</span>
+</span><span id="Parser-2011"><a href="#Parser-2011"><span class="linenos">2011</span></a>
+</span><span id="Parser-2012"><a href="#Parser-2012"><span class="linenos">2012</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-2013"><a href="#Parser-2013"><span class="linenos">2013</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-2014"><a href="#Parser-2014"><span class="linenos">2014</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2015"><a href="#Parser-2015"><span class="linenos">2015</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-2016"><a href="#Parser-2016"><span class="linenos">2016</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
+</span><span id="Parser-2017"><a href="#Parser-2017"><span class="linenos">2017</span></a>
+</span><span id="Parser-2018"><a href="#Parser-2018"><span class="linenos">2018</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2019"><a href="#Parser-2019"><span class="linenos">2019</span></a>
+</span><span id="Parser-2020"><a href="#Parser-2020"><span class="linenos">2020</span></a> <span class="c1"># duckdb supports leading with FROM x</span>
+</span><span id="Parser-2021"><a href="#Parser-2021"><span class="linenos">2021</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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">else</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</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-2024"><a href="#Parser-2024"><span class="linenos">2024</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-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="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-2027"><a href="#Parser-2027"><span class="linenos">2027</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-2028"><a href="#Parser-2028"><span class="linenos">2028</span></a> <span class="n">distinct</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">DISTINCT_TOKENS</span><span class="p">)</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="n">kind</span> <span class="o">=</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</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-2032"><a href="#Parser-2032"><span class="linenos">2032</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-2033"><a href="#Parser-2033"><span class="linenos">2033</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-2034"><a href="#Parser-2034"><span class="linenos">2034</span></a> <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="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="Parser-2037"><a href="#Parser-2037"><span class="linenos">2037</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-2038"><a href="#Parser-2038"><span class="linenos">2038</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
+</span><span id="Parser-2039"><a href="#Parser-2039"><span class="linenos">2039</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-2040"><a href="#Parser-2040"><span class="linenos">2040</span></a> <span class="p">)</span>
+</span><span id="Parser-2041"><a href="#Parser-2041"><span class="linenos">2041</span></a>
+</span><span id="Parser-2042"><a href="#Parser-2042"><span class="linenos">2042</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-2043"><a href="#Parser-2043"><span class="linenos">2043</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-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">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-2046"><a href="#Parser-2046"><span class="linenos">2046</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
+</span><span id="Parser-2047"><a href="#Parser-2047"><span class="linenos">2047</span></a>
+</span><span id="Parser-2048"><a href="#Parser-2048"><span class="linenos">2048</span></a> <span class="n">this</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-2049"><a href="#Parser-2049"><span class="linenos">2049</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
+</span><span id="Parser-2050"><a href="#Parser-2050"><span class="linenos">2050</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-2051"><a href="#Parser-2051"><span class="linenos">2051</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
+</span><span id="Parser-2052"><a href="#Parser-2052"><span class="linenos">2052</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="Parser-2053"><a href="#Parser-2053"><span class="linenos">2053</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">projections</span><span class="p">,</span>
+</span><span id="Parser-2054"><a href="#Parser-2054"><span class="linenos">2054</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</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 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-2057"><a href="#Parser-2057"><span class="linenos">2057</span></a>
+</span><span id="Parser-2058"><a href="#Parser-2058"><span class="linenos">2058</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-2059"><a href="#Parser-2059"><span class="linenos">2059</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="Parser-2060"><a href="#Parser-2060"><span class="linenos">2060</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-2061"><a href="#Parser-2061"><span class="linenos">2061</span></a>
+</span><span id="Parser-2062"><a href="#Parser-2062"><span class="linenos">2062</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="Parser-2063"><a href="#Parser-2063"><span class="linenos">2063</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-2064"><a href="#Parser-2064"><span class="linenos">2064</span></a>
+</span><span id="Parser-2065"><a href="#Parser-2065"><span class="linenos">2065</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="Parser-2066"><a href="#Parser-2066"><span class="linenos">2066</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-2067"><a href="#Parser-2067"><span class="linenos">2067</span></a>
+</span><span id="Parser-2068"><a href="#Parser-2068"><span class="linenos">2068</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-2069"><a href="#Parser-2069"><span class="linenos">2069</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-2070"><a href="#Parser-2070"><span class="linenos">2070</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2071"><a href="#Parser-2071"><span class="linenos">2071</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">()</span>
+</span><span id="Parser-2072"><a href="#Parser-2072"><span class="linenos">2072</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">FROM</span><span class="p">):</span>
+</span><span id="Parser-2073"><a href="#Parser-2073"><span class="linenos">2073</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span>
+</span><span id="Parser-2074"><a href="#Parser-2074"><span class="linenos">2074</span></a> <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">From</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 class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-2075"><a href="#Parser-2075"><span class="linenos">2075</span></a> <span class="p">)</span>
+</span><span id="Parser-2076"><a href="#Parser-2076"><span class="linenos">2076</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2077"><a href="#Parser-2077"><span class="linenos">2077</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-2078"><a href="#Parser-2078"><span class="linenos">2078</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="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-2079"><a href="#Parser-2079"><span class="linenos">2079</span></a>
+</span><span id="Parser-2080"><a href="#Parser-2080"><span class="linenos">2080</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-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="c1"># We return early here so that the UNION isn&#39;t attached to the subquery by the</span>
+</span><span id="Parser-2083"><a href="#Parser-2083"><span class="linenos">2083</span></a> <span class="c1"># following call to _parse_set_operations, but instead becomes the parent node</span>
+</span><span id="Parser-2084"><a href="#Parser-2084"><span class="linenos">2084</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-2085"><a href="#Parser-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">VALUES</span><span class="p">):</span>
+</span><span id="Parser-2086"><a href="#Parser-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">expression</span><span class="p">(</span>
+</span><span id="Parser-2087"><a href="#Parser-2087"><span class="linenos">2087</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
+</span><span id="Parser-2088"><a href="#Parser-2088"><span class="linenos">2088</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-2089"><a href="#Parser-2089"><span class="linenos">2089</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-2090"><a href="#Parser-2090"><span class="linenos">2090</span></a> <span class="p">)</span>
+</span><span id="Parser-2091"><a href="#Parser-2091"><span class="linenos">2091</span></a> <span class="k">elif</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="Parser-2092"><a href="#Parser-2092"><span class="linenos">2092</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2093"><a href="#Parser-2093"><span class="linenos">2093</span></a> <span class="k">else</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="kc">None</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">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-2097"><a href="#Parser-2097"><span class="linenos">2097</span></a>
+</span><span id="Parser-2098"><a href="#Parser-2098"><span class="linenos">2098</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">With</span><span class="p">]:</span>
+</span><span id="Parser-2099"><a href="#Parser-2099"><span class="linenos">2099</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-2100"><a href="#Parser-2100"><span class="linenos">2100</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2101"><a href="#Parser-2101"><span class="linenos">2101</span></a>
-</span><span id="Parser-2102"><a href="#Parser-2102"><span class="linenos">2102</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-2103"><a href="#Parser-2103"><span class="linenos">2103</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-2104"><a href="#Parser-2104"><span class="linenos">2104</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
-</span><span id="Parser-2105"><a href="#Parser-2105"><span class="linenos">2105</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2106"><a href="#Parser-2106"><span class="linenos">2106</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="Parser-2107"><a href="#Parser-2107"><span class="linenos">2107</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="Parser-2108"><a href="#Parser-2108"><span class="linenos">2108</span></a> <span class="k">continue</span>
-</span><span id="Parser-2109"><a href="#Parser-2109"><span class="linenos">2109</span></a> <span class="k">break</span>
-</span><span id="Parser-2110"><a href="#Parser-2110"><span class="linenos">2110</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2111"><a href="#Parser-2111"><span class="linenos">2111</span></a>
-</span><span id="Parser-2112"><a href="#Parser-2112"><span class="linenos">2112</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="Parser-2113"><a href="#Parser-2113"><span class="linenos">2113</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2114"><a href="#Parser-2114"><span class="linenos">2114</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2115"><a href="#Parser-2115"><span class="linenos">2115</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
-</span><span id="Parser-2116"><a href="#Parser-2116"><span class="linenos">2116</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2102"><a href="#Parser-2102"><span class="linenos">2102</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-2103"><a href="#Parser-2103"><span class="linenos">2103</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-2104"><a href="#Parser-2104"><span class="linenos">2104</span></a>
+</span><span id="Parser-2105"><a href="#Parser-2105"><span class="linenos">2105</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2106"><a href="#Parser-2106"><span class="linenos">2106</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-2107"><a href="#Parser-2107"><span class="linenos">2107</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-2108"><a href="#Parser-2108"><span class="linenos">2108</span></a>
+</span><span id="Parser-2109"><a href="#Parser-2109"><span class="linenos">2109</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2110"><a href="#Parser-2110"><span class="linenos">2110</span></a> <span class="k">break</span>
+</span><span id="Parser-2111"><a href="#Parser-2111"><span class="linenos">2111</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2112"><a href="#Parser-2112"><span class="linenos">2112</span></a> <span class="bp">self</span><span 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-2113"><a href="#Parser-2113"><span class="linenos">2113</span></a>
+</span><span id="Parser-2114"><a href="#Parser-2114"><span class="linenos">2114</span></a> <span class="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-2115"><a href="#Parser-2115"><span class="linenos">2115</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-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">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-2119"><a href="#Parser-2119"><span class="linenos">2119</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-2120"><a href="#Parser-2120"><span class="linenos">2120</span></a>
-</span><span id="Parser-2121"><a href="#Parser-2121"><span class="linenos">2121</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2118"><a href="#Parser-2118"><span class="linenos">2118</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="Parser-2119"><a href="#Parser-2119"><span class="linenos">2119</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-2120"><a href="#Parser-2120"><span class="linenos">2120</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-2121"><a href="#Parser-2121"><span class="linenos">2121</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-2122"><a href="#Parser-2122"><span class="linenos">2122</span></a>
-</span><span id="Parser-2123"><a href="#Parser-2123"><span class="linenos">2123</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2124"><a href="#Parser-2124"><span class="linenos">2124</span></a>
-</span><span id="Parser-2125"><a href="#Parser-2125"><span class="linenos">2125</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
-</span><span id="Parser-2126"><a href="#Parser-2126"><span class="linenos">2126</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2127"><a href="#Parser-2127"><span class="linenos">2127</span></a> <span class="k">return</span> <span class="kc">None</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="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-2130"><a href="#Parser-2130"><span class="linenos">2130</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
-</span><span id="Parser-2131"><a href="#Parser-2131"><span class="linenos">2131</span></a> <span class="bp">self</span><span 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-2132"><a href="#Parser-2132"><span class="linenos">2132</span></a>
-</span><span id="Parser-2133"><a href="#Parser-2133"><span class="linenos">2133</span></a> <span class="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-2134"><a href="#Parser-2134"><span class="linenos">2134</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-2123"><a href="#Parser-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">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-2124"><a href="#Parser-2124"><span class="linenos">2124</span></a> <span class="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-2125"><a href="#Parser-2125"><span class="linenos">2125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="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 class="n">alias</span><span class="o">=</span><span class="n">alias</span>
+</span><span id="Parser-2126"><a href="#Parser-2126"><span class="linenos">2126</span></a> <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">def</span> <span class="nf">_parse_table_alias</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="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-2130"><a href="#Parser-2130"><span class="linenos">2130</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]:</span>
+</span><span id="Parser-2131"><a href="#Parser-2131"><span class="linenos">2131</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-2132"><a href="#Parser-2132"><span class="linenos">2132</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2133"><a href="#Parser-2133"><span class="linenos">2133</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-2134"><a href="#Parser-2134"><span class="linenos">2134</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-2135"><a href="#Parser-2135"><span class="linenos">2135</span></a> <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">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
-</span><span id="Parser-2138"><a href="#Parser-2138"><span class="linenos">2138</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2139"><a href="#Parser-2139"><span class="linenos">2139</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
-</span><span id="Parser-2140"><a href="#Parser-2140"><span class="linenos">2140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="Parser-2141"><a href="#Parser-2141"><span class="linenos">2141</span></a> <span class="k">return</span> <span class="kc">None</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="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-2144"><a href="#Parser-2144"><span class="linenos">2144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
-</span><span id="Parser-2145"><a href="#Parser-2145"><span class="linenos">2145</span></a> <span class="p">)</span>
+</span><span id="Parser-2137"><a href="#Parser-2137"><span class="linenos">2137</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-2138"><a href="#Parser-2138"><span class="linenos">2138</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2139"><a href="#Parser-2139"><span class="linenos">2139</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-2140"><a href="#Parser-2140"><span class="linenos">2140</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-2141"><a href="#Parser-2141"><span class="linenos">2141</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2142"><a href="#Parser-2142"><span class="linenos">2142</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</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">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-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">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
-</span><span id="Parser-2148"><a href="#Parser-2148"><span class="linenos">2148</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2149"><a href="#Parser-2149"><span class="linenos">2149</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2150"><a href="#Parser-2150"><span class="linenos">2150</span></a>
-</span><span id="Parser-2151"><a href="#Parser-2151"><span class="linenos">2151</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-2152"><a href="#Parser-2152"><span class="linenos">2152</span></a>
-</span><span id="Parser-2153"><a href="#Parser-2153"><span class="linenos">2153</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-2154"><a href="#Parser-2154"><span class="linenos">2154</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-2155"><a href="#Parser-2155"><span class="linenos">2155</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2156"><a href="#Parser-2156"><span class="linenos">2156</span></a>
-</span><span id="Parser-2157"><a href="#Parser-2157"><span class="linenos">2157</span></a> <span class="k">if</span> <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-2158"><a href="#Parser-2158"><span class="linenos">2158</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="Parser-2159"><a href="#Parser-2159"><span class="linenos">2159</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-2160"><a href="#Parser-2160"><span class="linenos">2160</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-2161"><a href="#Parser-2161"><span class="linenos">2161</span></a> <span class="k">if</span> <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-2162"><a href="#Parser-2162"><span class="linenos">2162</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-2163"><a href="#Parser-2163"><span class="linenos">2163</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-2164"><a href="#Parser-2164"><span class="linenos">2164</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-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_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-2166"><a href="#Parser-2166"><span class="linenos">2166</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-2167"><a href="#Parser-2167"><span class="linenos">2167</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2168"><a href="#Parser-2168"><span class="linenos">2168</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2169"><a href="#Parser-2169"><span class="linenos">2169</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2147"><a href="#Parser-2147"><span class="linenos">2147</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2148"><a href="#Parser-2148"><span class="linenos">2148</span></a>
+</span><span id="Parser-2149"><a href="#Parser-2149"><span class="linenos">2149</span></a> <span class="k">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
+</span><span id="Parser-2150"><a href="#Parser-2150"><span class="linenos">2150</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-2151"><a href="#Parser-2151"><span class="linenos">2151</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</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="Parser-2152"><a href="#Parser-2152"><span class="linenos">2152</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-2153"><a href="#Parser-2153"><span class="linenos">2153</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2154"><a href="#Parser-2154"><span class="linenos">2154</span></a>
+</span><span id="Parser-2155"><a href="#Parser-2155"><span class="linenos">2155</span></a> <span class="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-2156"><a href="#Parser-2156"><span class="linenos">2156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
+</span><span id="Parser-2157"><a href="#Parser-2157"><span class="linenos">2157</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2158"><a href="#Parser-2158"><span class="linenos">2158</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-2159"><a href="#Parser-2159"><span class="linenos">2159</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-2160"><a href="#Parser-2160"><span class="linenos">2160</span></a> <span class="p">)</span>
+</span><span id="Parser-2161"><a href="#Parser-2161"><span class="linenos">2161</span></a>
+</span><span id="Parser-2162"><a href="#Parser-2162"><span class="linenos">2162</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="Parser-2163"><a href="#Parser-2163"><span class="linenos">2163</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-2164"><a href="#Parser-2164"><span class="linenos">2164</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2165"><a href="#Parser-2165"><span class="linenos">2165</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="bp">self</span><span class="o">.</span><span class="n">MODIFIABLES</span><span class="p">):</span>
+</span><span id="Parser-2166"><a href="#Parser-2166"><span class="linenos">2166</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-2167"><a href="#Parser-2167"><span class="linenos">2167</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-2168"><a href="#Parser-2168"><span class="linenos">2168</span></a> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-2169"><a href="#Parser-2169"><span class="linenos">2169</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-2170"><a href="#Parser-2170"><span class="linenos">2170</span></a>
-</span><span id="Parser-2171"><a href="#Parser-2171"><span class="linenos">2171</span></a> <span class="k">if</span> <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-2172"><a href="#Parser-2172"><span class="linenos">2172</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="Parser-2173"><a href="#Parser-2173"><span class="linenos">2173</span></a> <span class="k">if</span> <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-2174"><a href="#Parser-2174"><span class="linenos">2174</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-2175"><a href="#Parser-2175"><span class="linenos">2175</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-2176"><a href="#Parser-2176"><span class="linenos">2176</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-2177"><a href="#Parser-2177"><span class="linenos">2177</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-2178"><a href="#Parser-2178"><span class="linenos">2178</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-2179"><a href="#Parser-2179"><span class="linenos">2179</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-2180"><a href="#Parser-2180"><span class="linenos">2180</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-2181"><a href="#Parser-2181"><span class="linenos">2181</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2182"><a href="#Parser-2182"><span class="linenos">2182</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2183"><a href="#Parser-2183"><span class="linenos">2183</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2184"><a href="#Parser-2184"><span class="linenos">2184</span></a>
-</span><span id="Parser-2185"><a href="#Parser-2185"><span class="linenos">2185</span></a> <span class="k">if</span> <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-2186"><a href="#Parser-2186"><span class="linenos">2186</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-2187"><a href="#Parser-2187"><span class="linenos">2187</span></a>
-</span><span id="Parser-2188"><a href="#Parser-2188"><span class="linenos">2188</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-2189"><a href="#Parser-2189"><span class="linenos">2189</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-2190"><a href="#Parser-2190"><span class="linenos">2190</span></a>
-</span><span id="Parser-2191"><a href="#Parser-2191"><span class="linenos">2191</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Parser-2192"><a href="#Parser-2192"><span class="linenos">2192</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-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">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-2195"><a href="#Parser-2195"><span class="linenos">2195</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-2196"><a href="#Parser-2196"><span class="linenos">2196</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Parser-2197"><a href="#Parser-2197"><span class="linenos">2197</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-2198"><a href="#Parser-2198"><span class="linenos">2198</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
-</span><span id="Parser-2199"><a href="#Parser-2199"><span class="linenos">2199</span></a>
-</span><span id="Parser-2200"><a href="#Parser-2200"><span class="linenos">2200</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-2201"><a href="#Parser-2201"><span class="linenos">2201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-2171"><a href="#Parser-2171"><span class="linenos">2171</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-2172"><a href="#Parser-2172"><span class="linenos">2172</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">QUERY_MODIFIER_PARSERS</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-2173"><a href="#Parser-2173"><span class="linenos">2173</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_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">token_type</span><span class="p">]</span>
+</span><span id="Parser-2174"><a href="#Parser-2174"><span class="linenos">2174</span></a> <span class="n">key</span><span class="p">,</span> <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-2175"><a href="#Parser-2175"><span class="linenos">2175</span></a>
+</span><span id="Parser-2176"><a href="#Parser-2176"><span class="linenos">2176</span></a> <span class="k">if</span> <span class="n">expression</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">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-2178"><a href="#Parser-2178"><span class="linenos">2178</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
+</span><span id="Parser-2179"><a href="#Parser-2179"><span class="linenos">2179</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2180"><a href="#Parser-2180"><span class="linenos">2180</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="Parser-2181"><a href="#Parser-2181"><span class="linenos">2181</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
+</span><span id="Parser-2182"><a href="#Parser-2182"><span class="linenos">2182</span></a> <span class="k">continue</span>
+</span><span id="Parser-2183"><a href="#Parser-2183"><span class="linenos">2183</span></a> <span class="k">break</span>
+</span><span id="Parser-2184"><a href="#Parser-2184"><span class="linenos">2184</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2185"><a href="#Parser-2185"><span class="linenos">2185</span></a>
+</span><span id="Parser-2186"><a href="#Parser-2186"><span class="linenos">2186</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="Parser-2187"><a href="#Parser-2187"><span class="linenos">2187</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2188"><a href="#Parser-2188"><span class="linenos">2188</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2189"><a href="#Parser-2189"><span class="linenos">2189</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
+</span><span id="Parser-2190"><a href="#Parser-2190"><span class="linenos">2190</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2191"><a href="#Parser-2191"><span class="linenos">2191</span></a>
+</span><span id="Parser-2192"><a href="#Parser-2192"><span class="linenos">2192</span></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-2193"><a href="#Parser-2193"><span class="linenos">2193</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-2194"><a href="#Parser-2194"><span class="linenos">2194</span></a>
+</span><span id="Parser-2195"><a href="#Parser-2195"><span class="linenos">2195</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2196"><a href="#Parser-2196"><span class="linenos">2196</span></a>
+</span><span id="Parser-2197"><a href="#Parser-2197"><span class="linenos">2197</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2198"><a href="#Parser-2198"><span class="linenos">2198</span></a>
+</span><span id="Parser-2199"><a href="#Parser-2199"><span class="linenos">2199</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
+</span><span id="Parser-2200"><a href="#Parser-2200"><span class="linenos">2200</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2201"><a href="#Parser-2201"><span class="linenos">2201</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2202"><a href="#Parser-2202"><span class="linenos">2202</span></a>
-</span><span id="Parser-2203"><a href="#Parser-2203"><span class="linenos">2203</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-2204"><a href="#Parser-2204"><span class="linenos">2204</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-2205"><a href="#Parser-2205"><span class="linenos">2205</span></a>
-</span><span id="Parser-2206"><a href="#Parser-2206"><span class="linenos">2206</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="Parser-2207"><a href="#Parser-2207"><span class="linenos">2207</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2208"><a href="#Parser-2208"><span class="linenos">2208</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2209"><a href="#Parser-2209"><span class="linenos">2209</span></a>
-</span><span id="Parser-2210"><a href="#Parser-2210"><span class="linenos">2210</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2211"><a href="#Parser-2211"><span class="linenos">2211</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-2212"><a href="#Parser-2212"><span class="linenos">2212</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-2213"><a href="#Parser-2213"><span class="linenos">2213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="Parser-2214"><a href="#Parser-2214"><span class="linenos">2214</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-2215"><a href="#Parser-2215"><span class="linenos">2215</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-2216"><a href="#Parser-2216"><span class="linenos">2216</span></a> <span class="p">)</span>
-</span><span id="Parser-2217"><a href="#Parser-2217"><span class="linenos">2217</span></a> <span class="p">)</span>
-</span><span id="Parser-2218"><a href="#Parser-2218"><span class="linenos">2218</span></a> <span class="k">if</span> <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-2219"><a href="#Parser-2219"><span class="linenos">2219</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2220"><a href="#Parser-2220"><span class="linenos">2220</span></a> <span class="p">)</span>
-</span><span id="Parser-2221"><a href="#Parser-2221"><span class="linenos">2221</span></a>
-</span><span id="Parser-2222"><a href="#Parser-2222"><span class="linenos">2222</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-2223"><a href="#Parser-2223"><span class="linenos">2223</span></a>
-</span><span id="Parser-2224"><a href="#Parser-2224"><span class="linenos">2224</span></a> <span class="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-2225"><a href="#Parser-2225"><span class="linenos">2225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="Parser-2226"><a href="#Parser-2226"><span class="linenos">2226</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-2227"><a href="#Parser-2227"><span class="linenos">2227</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-2228"><a href="#Parser-2228"><span class="linenos">2228</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="Parser-2229"><a href="#Parser-2229"><span class="linenos">2229</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="Parser-2230"><a href="#Parser-2230"><span class="linenos">2230</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="Parser-2231"><a href="#Parser-2231"><span class="linenos">2231</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="Parser-2232"><a href="#Parser-2232"><span class="linenos">2232</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="Parser-2233"><a href="#Parser-2233"><span class="linenos">2233</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="Parser-2234"><a href="#Parser-2234"><span class="linenos">2234</span></a> <span class="p">)</span>
-</span><span id="Parser-2235"><a href="#Parser-2235"><span class="linenos">2235</span></a>
-</span><span id="Parser-2236"><a href="#Parser-2236"><span class="linenos">2236</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
-</span><span id="Parser-2237"><a href="#Parser-2237"><span class="linenos">2237</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-2238"><a href="#Parser-2238"><span class="linenos">2238</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-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">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="Parser-2241"><a href="#Parser-2241"><span class="linenos">2241</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-2242"><a href="#Parser-2242"><span class="linenos">2242</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2243"><a href="#Parser-2243"><span class="linenos">2243</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-2244"><a href="#Parser-2244"><span class="linenos">2244</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-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_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 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-2247"><a href="#Parser-2247"><span class="linenos">2247</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-2248"><a href="#Parser-2248"><span class="linenos">2248</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2249"><a href="#Parser-2249"><span class="linenos">2249</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2250"><a href="#Parser-2250"><span class="linenos">2250</span></a>
-</span><span id="Parser-2251"><a href="#Parser-2251"><span class="linenos">2251</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-2252"><a href="#Parser-2252"><span class="linenos">2252</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2253"><a href="#Parser-2253"><span class="linenos">2253</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="Parser-2254"><a href="#Parser-2254"><span class="linenos">2254</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-2255"><a href="#Parser-2255"><span class="linenos">2255</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-2256"><a href="#Parser-2256"><span class="linenos">2256</span></a> <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">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-2259"><a href="#Parser-2259"><span class="linenos">2259</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-2260"><a href="#Parser-2260"><span class="linenos">2260</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2261"><a href="#Parser-2261"><span class="linenos">2261</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-2262"><a href="#Parser-2262"><span class="linenos">2262</span></a> <span class="p">)</span>
-</span><span id="Parser-2263"><a href="#Parser-2263"><span class="linenos">2263</span></a>
-</span><span id="Parser-2264"><a href="#Parser-2264"><span class="linenos">2264</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="Parser-2265"><a href="#Parser-2265"><span class="linenos">2265</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-2266"><a href="#Parser-2266"><span class="linenos">2266</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-2267"><a href="#Parser-2267"><span class="linenos">2267</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2268"><a href="#Parser-2268"><span class="linenos">2268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
-</span><span id="Parser-2269"><a href="#Parser-2269"><span class="linenos">2269</span></a> <span class="p">)</span>
-</span><span id="Parser-2270"><a href="#Parser-2270"><span class="linenos">2270</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">Subquery</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2271"><a href="#Parser-2271"><span class="linenos">2271</span></a> <span class="c1"># Ensures parity between the Subquery&#39;s and the Lateral&#39;s &quot;alias&quot; args</span>
-</span><span id="Parser-2272"><a href="#Parser-2272"><span class="linenos">2272</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Parser-2273"><a href="#Parser-2273"><span class="linenos">2273</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2274"><a href="#Parser-2274"><span class="linenos">2274</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-2275"><a href="#Parser-2275"><span class="linenos">2275</span></a>
-</span><span id="Parser-2276"><a href="#Parser-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</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">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="Parser-2279"><a href="#Parser-2279"><span class="linenos">2279</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2280"><a href="#Parser-2280"><span class="linenos">2280</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-2281"><a href="#Parser-2281"><span class="linenos">2281</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2282"><a href="#Parser-2282"><span class="linenos">2282</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2283"><a href="#Parser-2283"><span class="linenos">2283</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-2284"><a href="#Parser-2284"><span class="linenos">2284</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-2285"><a href="#Parser-2285"><span class="linenos">2285</span></a> <span class="p">)</span>
-</span><span id="Parser-2286"><a href="#Parser-2286"><span class="linenos">2286</span></a>
-</span><span id="Parser-2287"><a href="#Parser-2287"><span class="linenos">2287</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="Parser-2288"><a href="#Parser-2288"><span class="linenos">2288</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2289"><a href="#Parser-2289"><span class="linenos">2289</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="Parser-2290"><a href="#Parser-2290"><span class="linenos">2290</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2291"><a href="#Parser-2291"><span class="linenos">2291</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
-</span><span id="Parser-2292"><a href="#Parser-2292"><span class="linenos">2292</span></a>
-</span><span id="Parser-2293"><a href="#Parser-2293"><span class="linenos">2293</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-2294"><a href="#Parser-2294"><span class="linenos">2294</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
-</span><span id="Parser-2295"><a href="#Parser-2295"><span class="linenos">2295</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-2296"><a href="#Parser-2296"><span class="linenos">2296</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-2203"><a href="#Parser-2203"><span class="linenos">2203</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-2204"><a href="#Parser-2204"><span class="linenos">2204</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
+</span><span id="Parser-2205"><a href="#Parser-2205"><span class="linenos">2205</span></a> <span class="bp">self</span><span 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-2206"><a href="#Parser-2206"><span class="linenos">2206</span></a>
+</span><span id="Parser-2207"><a href="#Parser-2207"><span class="linenos">2207</span></a> <span class="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-2208"><a href="#Parser-2208"><span class="linenos">2208</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-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">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
+</span><span id="Parser-2212"><a href="#Parser-2212"><span class="linenos">2212</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2213"><a href="#Parser-2213"><span class="linenos">2213</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
+</span><span id="Parser-2214"><a href="#Parser-2214"><span class="linenos">2214</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="Parser-2215"><a href="#Parser-2215"><span class="linenos">2215</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2216"><a href="#Parser-2216"><span class="linenos">2216</span></a>
+</span><span id="Parser-2217"><a href="#Parser-2217"><span class="linenos">2217</span></a> <span class="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-2218"><a href="#Parser-2218"><span class="linenos">2218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
+</span><span id="Parser-2219"><a href="#Parser-2219"><span class="linenos">2219</span></a> <span class="p">)</span>
+</span><span id="Parser-2220"><a href="#Parser-2220"><span class="linenos">2220</span></a>
+</span><span id="Parser-2221"><a href="#Parser-2221"><span class="linenos">2221</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
+</span><span id="Parser-2222"><a href="#Parser-2222"><span class="linenos">2222</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2223"><a href="#Parser-2223"><span class="linenos">2223</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><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="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-2228"><a href="#Parser-2228"><span class="linenos">2228</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-2229"><a href="#Parser-2229"><span class="linenos">2229</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2230"><a href="#Parser-2230"><span class="linenos">2230</span></a>
+</span><span id="Parser-2231"><a href="#Parser-2231"><span class="linenos">2231</span></a> <span class="k">if</span> <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-2232"><a href="#Parser-2232"><span class="linenos">2232</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="Parser-2233"><a href="#Parser-2233"><span class="linenos">2233</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-2234"><a href="#Parser-2234"><span class="linenos">2234</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-2235"><a href="#Parser-2235"><span class="linenos">2235</span></a> <span class="k">if</span> <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-2236"><a href="#Parser-2236"><span class="linenos">2236</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-2237"><a href="#Parser-2237"><span class="linenos">2237</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-2238"><a href="#Parser-2238"><span class="linenos">2238</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-2239"><a href="#Parser-2239"><span class="linenos">2239</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-2240"><a href="#Parser-2240"><span class="linenos">2240</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-2241"><a href="#Parser-2241"><span class="linenos">2241</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2242"><a href="#Parser-2242"><span class="linenos">2242</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2243"><a href="#Parser-2243"><span class="linenos">2243</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</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="k">if</span> <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-2246"><a href="#Parser-2246"><span class="linenos">2246</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="Parser-2247"><a href="#Parser-2247"><span class="linenos">2247</span></a> <span class="k">if</span> <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-2248"><a href="#Parser-2248"><span class="linenos">2248</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-2249"><a href="#Parser-2249"><span class="linenos">2249</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-2250"><a href="#Parser-2250"><span class="linenos">2250</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-2251"><a href="#Parser-2251"><span class="linenos">2251</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-2252"><a href="#Parser-2252"><span class="linenos">2252</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-2253"><a href="#Parser-2253"><span class="linenos">2253</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-2254"><a href="#Parser-2254"><span class="linenos">2254</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-2255"><a href="#Parser-2255"><span class="linenos">2255</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2256"><a href="#Parser-2256"><span class="linenos">2256</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2257"><a href="#Parser-2257"><span class="linenos">2257</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2258"><a href="#Parser-2258"><span class="linenos">2258</span></a>
+</span><span id="Parser-2259"><a href="#Parser-2259"><span class="linenos">2259</span></a> <span class="k">if</span> <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-2260"><a href="#Parser-2260"><span class="linenos">2260</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-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="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-2263"><a href="#Parser-2263"><span class="linenos">2263</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-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="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Parser-2266"><a href="#Parser-2266"><span class="linenos">2266</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-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">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-2269"><a href="#Parser-2269"><span class="linenos">2269</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-2270"><a href="#Parser-2270"><span class="linenos">2270</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Parser-2271"><a href="#Parser-2271"><span class="linenos">2271</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-2272"><a href="#Parser-2272"><span class="linenos">2272</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="Parser-2273"><a href="#Parser-2273"><span class="linenos">2273</span></a>
+</span><span id="Parser-2274"><a href="#Parser-2274"><span class="linenos">2274</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-2275"><a href="#Parser-2275"><span class="linenos">2275</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</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">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-2278"><a href="#Parser-2278"><span class="linenos">2278</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-2279"><a href="#Parser-2279"><span class="linenos">2279</span></a>
+</span><span id="Parser-2280"><a href="#Parser-2280"><span class="linenos">2280</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="Parser-2281"><a href="#Parser-2281"><span class="linenos">2281</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2282"><a href="#Parser-2282"><span class="linenos">2282</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</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="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2285"><a href="#Parser-2285"><span class="linenos">2285</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-2286"><a href="#Parser-2286"><span class="linenos">2286</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-2287"><a href="#Parser-2287"><span class="linenos">2287</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</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="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-2289"><a href="#Parser-2289"><span class="linenos">2289</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_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-2290"><a href="#Parser-2290"><span class="linenos">2290</span></a> <span class="p">)</span>
+</span><span id="Parser-2291"><a href="#Parser-2291"><span class="linenos">2291</span></a> <span class="p">)</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_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
+</span><span id="Parser-2293"><a href="#Parser-2293"><span class="linenos">2293</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2294"><a href="#Parser-2294"><span class="linenos">2294</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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="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-2299"><a href="#Parser-2299"><span class="linenos">2299</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-2300"><a href="#Parser-2300"><span class="linenos">2300</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2301"><a href="#Parser-2301"><span class="linenos">2301</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2302"><a href="#Parser-2302"><span class="linenos">2302</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</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="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-2305"><a href="#Parser-2305"><span class="linenos">2305</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-2306"><a href="#Parser-2306"><span class="linenos">2306</span></a>
-</span><span id="Parser-2307"><a href="#Parser-2307"><span class="linenos">2307</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-2308"><a href="#Parser-2308"><span class="linenos">2308</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2298"><a href="#Parser-2298"><span class="linenos">2298</span></a> <span class="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-2299"><a href="#Parser-2299"><span class="linenos">2299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="Parser-2300"><a href="#Parser-2300"><span class="linenos">2300</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-2301"><a href="#Parser-2301"><span class="linenos">2301</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-2302"><a href="#Parser-2302"><span class="linenos">2302</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="Parser-2303"><a href="#Parser-2303"><span class="linenos">2303</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="Parser-2304"><a href="#Parser-2304"><span class="linenos">2304</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="Parser-2305"><a href="#Parser-2305"><span class="linenos">2305</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="Parser-2306"><a href="#Parser-2306"><span class="linenos">2306</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="Parser-2308"><a href="#Parser-2308"><span class="linenos">2308</span></a> <span class="p">)</span>
</span><span id="Parser-2309"><a href="#Parser-2309"><span class="linenos">2309</span></a>
-</span><span id="Parser-2310"><a href="#Parser-2310"><span class="linenos">2310</span></a> <span class="k">if</span> <span class="n">outer_apply</span><span class="p">:</span>
-</span><span id="Parser-2311"><a href="#Parser-2311"><span class="linenos">2311</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-2312"><a href="#Parser-2312"><span class="linenos">2312</span></a>
-</span><span id="Parser-2313"><a href="#Parser-2313"><span class="linenos">2313</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
-</span><span id="Parser-2314"><a href="#Parser-2314"><span class="linenos">2314</span></a>
-</span><span id="Parser-2315"><a href="#Parser-2315"><span class="linenos">2315</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="Parser-2316"><a href="#Parser-2316"><span class="linenos">2316</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2317"><a href="#Parser-2317"><span class="linenos">2317</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Parser-2318"><a href="#Parser-2318"><span class="linenos">2318</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-2319"><a href="#Parser-2319"><span class="linenos">2319</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-2320"><a href="#Parser-2320"><span class="linenos">2320</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-2321"><a href="#Parser-2321"><span class="linenos">2321</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="Parser-2322"><a href="#Parser-2322"><span class="linenos">2322</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-2323"><a href="#Parser-2323"><span class="linenos">2323</span></a>
-</span><span id="Parser-2324"><a href="#Parser-2324"><span class="linenos">2324</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2325"><a href="#Parser-2325"><span class="linenos">2325</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-2326"><a href="#Parser-2326"><span class="linenos">2326</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-2327"><a href="#Parser-2327"><span class="linenos">2327</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-2328"><a href="#Parser-2328"><span class="linenos">2328</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
-</span><span id="Parser-2329"><a href="#Parser-2329"><span class="linenos">2329</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-2330"><a href="#Parser-2330"><span class="linenos">2330</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">()</span>
+</span><span id="Parser-2310"><a href="#Parser-2310"><span class="linenos">2310</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
+</span><span id="Parser-2311"><a href="#Parser-2311"><span class="linenos">2311</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-2312"><a href="#Parser-2312"><span class="linenos">2312</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-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">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-2315"><a href="#Parser-2315"><span class="linenos">2315</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-2316"><a href="#Parser-2316"><span class="linenos">2316</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2317"><a href="#Parser-2317"><span class="linenos">2317</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-2318"><a href="#Parser-2318"><span class="linenos">2318</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-2319"><a href="#Parser-2319"><span class="linenos">2319</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2320"><a href="#Parser-2320"><span class="linenos">2320</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-2321"><a href="#Parser-2321"><span class="linenos">2321</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-2322"><a href="#Parser-2322"><span class="linenos">2322</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2323"><a href="#Parser-2323"><span class="linenos">2323</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2324"><a href="#Parser-2324"><span class="linenos">2324</span></a>
+</span><span id="Parser-2325"><a href="#Parser-2325"><span class="linenos">2325</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-2326"><a href="#Parser-2326"><span class="linenos">2326</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2327"><a href="#Parser-2327"><span class="linenos">2327</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="Parser-2328"><a href="#Parser-2328"><span class="linenos">2328</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-2329"><a href="#Parser-2329"><span class="linenos">2329</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-2330"><a href="#Parser-2330"><span class="linenos">2330</span></a> <span class="p">)</span>
</span><span id="Parser-2331"><a href="#Parser-2331"><span class="linenos">2331</span></a>
-</span><span id="Parser-2332"><a href="#Parser-2332"><span class="linenos">2332</span></a> <span class="k">if</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="Parser-2333"><a href="#Parser-2333"><span class="linenos">2333</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-2334"><a href="#Parser-2334"><span class="linenos">2334</span></a> <span class="k">elif</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="Parser-2335"><a href="#Parser-2335"><span class="linenos">2335</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-2336"><a href="#Parser-2336"><span class="linenos">2336</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2337"><a href="#Parser-2337"><span class="linenos">2337</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="kc">None</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">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-2339"><a href="#Parser-2339"><span class="linenos">2339</span></a>
-</span><span id="Parser-2340"><a href="#Parser-2340"><span class="linenos">2340</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">joins</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="k">return</span> <span class="bp">self</span><span 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><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="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
-</span><span id="Parser-2345"><a href="#Parser-2345"><span class="linenos">2345</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2346"><a href="#Parser-2346"><span class="linenos">2346</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-2347"><a href="#Parser-2347"><span class="linenos">2347</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
-</span><span id="Parser-2348"><a href="#Parser-2348"><span class="linenos">2348</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="Parser-2349"><a href="#Parser-2349"><span class="linenos">2349</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2350"><a href="#Parser-2350"><span class="linenos">2350</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2351"><a href="#Parser-2351"><span class="linenos">2351</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2352"><a href="#Parser-2352"><span class="linenos">2352</span></a>
-</span><span id="Parser-2353"><a href="#Parser-2353"><span class="linenos">2353</span></a> <span class="bp">self</span><span 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-2354"><a href="#Parser-2354"><span class="linenos">2354</span></a> <span class="bp">self</span><span 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-2355"><a href="#Parser-2355"><span class="linenos">2355</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-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">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-2358"><a href="#Parser-2358"><span class="linenos">2358</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-2359"><a href="#Parser-2359"><span class="linenos">2359</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-2332"><a href="#Parser-2332"><span class="linenos">2332</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-2333"><a href="#Parser-2333"><span class="linenos">2333</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-2334"><a href="#Parser-2334"><span class="linenos">2334</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2335"><a href="#Parser-2335"><span class="linenos">2335</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-2336"><a href="#Parser-2336"><span class="linenos">2336</span></a> <span class="p">)</span>
+</span><span id="Parser-2337"><a href="#Parser-2337"><span class="linenos">2337</span></a>
+</span><span id="Parser-2338"><a href="#Parser-2338"><span class="linenos">2338</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="Parser-2339"><a href="#Parser-2339"><span class="linenos">2339</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-2340"><a href="#Parser-2340"><span class="linenos">2340</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-2341"><a href="#Parser-2341"><span class="linenos">2341</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2342"><a href="#Parser-2342"><span class="linenos">2342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
+</span><span id="Parser-2343"><a href="#Parser-2343"><span class="linenos">2343</span></a> <span class="p">)</span>
+</span><span id="Parser-2344"><a href="#Parser-2344"><span class="linenos">2344</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">Subquery</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2345"><a href="#Parser-2345"><span class="linenos">2345</span></a> <span class="c1"># Ensures parity between the Subquery&#39;s and the Lateral&#39;s &quot;alias&quot; args</span>
+</span><span id="Parser-2346"><a href="#Parser-2346"><span class="linenos">2346</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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">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-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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</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">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="Parser-2353"><a href="#Parser-2353"><span class="linenos">2353</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2354"><a href="#Parser-2354"><span class="linenos">2354</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-2355"><a href="#Parser-2355"><span class="linenos">2355</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2356"><a href="#Parser-2356"><span class="linenos">2356</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2357"><a href="#Parser-2357"><span class="linenos">2357</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-2358"><a href="#Parser-2358"><span class="linenos">2358</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-2359"><a href="#Parser-2359"><span class="linenos">2359</span></a> <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="ow">not</span> <span class="bp">self</span><span 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-2362"><a href="#Parser-2362"><span class="linenos">2362</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2363"><a href="#Parser-2363"><span class="linenos">2363</span></a>
-</span><span id="Parser-2364"><a href="#Parser-2364"><span class="linenos">2364</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-2365"><a href="#Parser-2365"><span class="linenos">2365</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2361"><a href="#Parser-2361"><span class="linenos">2361</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="Parser-2362"><a href="#Parser-2362"><span class="linenos">2362</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2363"><a href="#Parser-2363"><span class="linenos">2363</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="Parser-2364"><a href="#Parser-2364"><span class="linenos">2364</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2365"><a href="#Parser-2365"><span class="linenos">2365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
</span><span id="Parser-2366"><a href="#Parser-2366"><span class="linenos">2366</span></a>
-</span><span id="Parser-2367"><a href="#Parser-2367"><span class="linenos">2367</span></a> <span class="n">using</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2368"><a href="#Parser-2368"><span class="linenos">2368</span></a>
-</span><span id="Parser-2369"><a href="#Parser-2369"><span class="linenos">2369</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2370"><a href="#Parser-2370"><span class="linenos">2370</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_ordered</span><span class="p">)</span>
-</span><span id="Parser-2371"><a href="#Parser-2371"><span class="linenos">2371</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2372"><a href="#Parser-2372"><span class="linenos">2372</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2373"><a href="#Parser-2373"><span class="linenos">2373</span></a>
-</span><span id="Parser-2374"><a href="#Parser-2374"><span class="linenos">2374</span></a> <span class="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-2375"><a href="#Parser-2375"><span class="linenos">2375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="Parser-2376"><a href="#Parser-2376"><span class="linenos">2376</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="Parser-2377"><a href="#Parser-2377"><span class="linenos">2377</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Parser-2378"><a href="#Parser-2378"><span class="linenos">2378</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-2379"><a href="#Parser-2379"><span class="linenos">2379</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="Parser-2380"><a href="#Parser-2380"><span class="linenos">2380</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="Parser-2381"><a href="#Parser-2381"><span class="linenos">2381</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="Parser-2382"><a href="#Parser-2382"><span class="linenos">2382</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="Parser-2383"><a href="#Parser-2383"><span class="linenos">2383</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
-</span><span id="Parser-2384"><a href="#Parser-2384"><span class="linenos">2384</span></a> <span class="p">)</span>
-</span><span id="Parser-2385"><a href="#Parser-2385"><span class="linenos">2385</span></a>
-</span><span id="Parser-2386"><a href="#Parser-2386"><span class="linenos">2386</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-2387"><a href="#Parser-2387"><span class="linenos">2387</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2388"><a href="#Parser-2388"><span class="linenos">2388</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-2389"><a href="#Parser-2389"><span class="linenos">2389</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="Parser-2390"><a href="#Parser-2390"><span class="linenos">2390</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-2391"><a href="#Parser-2391"><span class="linenos">2391</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2392"><a href="#Parser-2392"><span class="linenos">2392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</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><span id="Parser-2394"><a href="#Parser-2394"><span class="linenos">2394</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2395"><a href="#Parser-2395"><span class="linenos">2395</span></a> <span class="p">),</span>
-</span><span id="Parser-2396"><a href="#Parser-2396"><span class="linenos">2396</span></a> <span class="p">)</span>
-</span><span id="Parser-2397"><a href="#Parser-2397"><span class="linenos">2397</span></a> <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">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2399"><a href="#Parser-2399"><span class="linenos">2399</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2400"><a href="#Parser-2400"><span class="linenos">2400</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="Parser-2401"><a href="#Parser-2401"><span class="linenos">2401</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-2402"><a href="#Parser-2402"><span class="linenos">2402</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-2403"><a href="#Parser-2403"><span class="linenos">2403</span></a>
-</span><span id="Parser-2404"><a href="#Parser-2404"><span class="linenos">2404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
-</span><span id="Parser-2405"><a href="#Parser-2405"><span class="linenos">2405</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2406"><a href="#Parser-2406"><span class="linenos">2406</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-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">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
-</span><span id="Parser-2409"><a href="#Parser-2409"><span class="linenos">2409</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="Parser-2410"><a href="#Parser-2410"><span class="linenos">2410</span></a>
-</span><span id="Parser-2411"><a href="#Parser-2411"><span class="linenos">2411</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-2412"><a href="#Parser-2412"><span class="linenos">2412</span></a>
-</span><span id="Parser-2413"><a href="#Parser-2413"><span class="linenos">2413</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2414"><a href="#Parser-2414"><span class="linenos">2414</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2415"><a href="#Parser-2415"><span class="linenos">2415</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-2416"><a href="#Parser-2416"><span class="linenos">2416</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-2417"><a href="#Parser-2417"><span class="linenos">2417</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-2418"><a href="#Parser-2418"><span class="linenos">2418</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-2419"><a href="#Parser-2419"><span class="linenos">2419</span></a> <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="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">Table</span><span class="p">:</span>
-</span><span id="Parser-2422"><a href="#Parser-2422"><span class="linenos">2422</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2423"><a href="#Parser-2423"><span class="linenos">2423</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2424"><a href="#Parser-2424"><span class="linenos">2424</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><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">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-2427"><a href="#Parser-2427"><span class="linenos">2427</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="Parser-2428"><a href="#Parser-2428"><span class="linenos">2428</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="Parser-2429"><a href="#Parser-2429"><span class="linenos">2429</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2430"><a href="#Parser-2430"><span class="linenos">2430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Parser-2431"><a href="#Parser-2431"><span class="linenos">2431</span></a> <span class="p">)</span>
-</span><span id="Parser-2432"><a href="#Parser-2432"><span class="linenos">2432</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2433"><a href="#Parser-2433"><span class="linenos">2433</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="Parser-2434"><a href="#Parser-2434"><span class="linenos">2434</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="Parser-2435"><a href="#Parser-2435"><span class="linenos">2435</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><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">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="Parser-2438"><a href="#Parser-2438"><span class="linenos">2438</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-2439"><a href="#Parser-2439"><span class="linenos">2439</span></a>
-</span><span id="Parser-2440"><a href="#Parser-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="Parser-2441"><a href="#Parser-2441"><span class="linenos">2441</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-2442"><a href="#Parser-2442"><span class="linenos">2442</span></a> <span class="p">)</span>
+</span><span id="Parser-2367"><a href="#Parser-2367"><span class="linenos">2367</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-2368"><a href="#Parser-2368"><span class="linenos">2368</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
+</span><span id="Parser-2369"><a href="#Parser-2369"><span class="linenos">2369</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-2370"><a href="#Parser-2370"><span class="linenos">2370</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-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">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-2373"><a href="#Parser-2373"><span class="linenos">2373</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-2374"><a href="#Parser-2374"><span class="linenos">2374</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2375"><a href="#Parser-2375"><span class="linenos">2375</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2376"><a href="#Parser-2376"><span class="linenos">2376</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</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="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-2379"><a href="#Parser-2379"><span class="linenos">2379</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-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">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-2382"><a href="#Parser-2382"><span class="linenos">2382</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="n">outer_apply</span><span class="p">:</span>
+</span><span id="Parser-2385"><a href="#Parser-2385"><span class="linenos">2385</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-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="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
+</span><span id="Parser-2388"><a href="#Parser-2388"><span class="linenos">2388</span></a>
+</span><span id="Parser-2389"><a href="#Parser-2389"><span class="linenos">2389</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="Parser-2390"><a href="#Parser-2390"><span class="linenos">2390</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2391"><a href="#Parser-2391"><span class="linenos">2391</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Parser-2392"><a href="#Parser-2392"><span class="linenos">2392</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-2393"><a href="#Parser-2393"><span class="linenos">2393</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-2394"><a href="#Parser-2394"><span class="linenos">2394</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-2395"><a href="#Parser-2395"><span class="linenos">2395</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="Parser-2396"><a href="#Parser-2396"><span class="linenos">2396</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-2397"><a href="#Parser-2397"><span class="linenos">2397</span></a>
+</span><span id="Parser-2398"><a href="#Parser-2398"><span class="linenos">2398</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2399"><a href="#Parser-2399"><span class="linenos">2399</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-2400"><a href="#Parser-2400"><span class="linenos">2400</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-2401"><a href="#Parser-2401"><span class="linenos">2401</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-2402"><a href="#Parser-2402"><span class="linenos">2402</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
+</span><span id="Parser-2403"><a href="#Parser-2403"><span class="linenos">2403</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-2404"><a href="#Parser-2404"><span class="linenos">2404</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</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="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="Parser-2407"><a href="#Parser-2407"><span class="linenos">2407</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-2408"><a href="#Parser-2408"><span class="linenos">2408</span></a> <span class="k">elif</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="Parser-2409"><a href="#Parser-2409"><span class="linenos">2409</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-2410"><a href="#Parser-2410"><span class="linenos">2410</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2411"><a href="#Parser-2411"><span class="linenos">2411</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2412"><a href="#Parser-2412"><span class="linenos">2412</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-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="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">joins</span><span class="p">)</span>
+</span><span id="Parser-2415"><a href="#Parser-2415"><span class="linenos">2415</span></a>
+</span><span id="Parser-2416"><a href="#Parser-2416"><span class="linenos">2416</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
+</span><span id="Parser-2417"><a href="#Parser-2417"><span class="linenos">2417</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Parser-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="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
+</span><span id="Parser-2420"><a href="#Parser-2420"><span class="linenos">2420</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2421"><a href="#Parser-2421"><span class="linenos">2421</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-2422"><a href="#Parser-2422"><span class="linenos">2422</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
+</span><span id="Parser-2423"><a href="#Parser-2423"><span class="linenos">2423</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="Parser-2424"><a href="#Parser-2424"><span class="linenos">2424</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2425"><a href="#Parser-2425"><span class="linenos">2425</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2426"><a href="#Parser-2426"><span class="linenos">2426</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-2429"><a href="#Parser-2429"><span class="linenos">2429</span></a> <span class="bp">self</span><span 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-2430"><a href="#Parser-2430"><span class="linenos">2430</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2431"><a href="#Parser-2431"><span class="linenos">2431</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2432"><a href="#Parser-2432"><span class="linenos">2432</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-2433"><a href="#Parser-2433"><span class="linenos">2433</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-2434"><a href="#Parser-2434"><span class="linenos">2434</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-2435"><a href="#Parser-2435"><span class="linenos">2435</span></a>
+</span><span id="Parser-2436"><a href="#Parser-2436"><span class="linenos">2436</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2437"><a href="#Parser-2437"><span class="linenos">2437</span></a> <span class="k">return</span> <span class="kc">None</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">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-2440"><a href="#Parser-2440"><span class="linenos">2440</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2441"><a href="#Parser-2441"><span class="linenos">2441</span></a>
+</span><span id="Parser-2442"><a href="#Parser-2442"><span class="linenos">2442</span></a> <span class="n">using</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-2443"><a href="#Parser-2443"><span class="linenos">2443</span></a>
-</span><span id="Parser-2444"><a href="#Parser-2444"><span class="linenos">2444</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="Parser-2445"><a href="#Parser-2445"><span class="linenos">2445</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2446"><a href="#Parser-2446"><span class="linenos">2446</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2447"><a href="#Parser-2447"><span class="linenos">2447</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2448"><a href="#Parser-2448"><span class="linenos">2448</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-2449"><a href="#Parser-2449"><span class="linenos">2449</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2450"><a href="#Parser-2450"><span class="linenos">2450</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</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">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-2452"><a href="#Parser-2452"><span class="linenos">2452</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="Parser-2453"><a href="#Parser-2453"><span class="linenos">2453</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="Parser-2454"><a href="#Parser-2454"><span class="linenos">2454</span></a>
-</span><span id="Parser-2455"><a href="#Parser-2455"><span class="linenos">2455</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-2456"><a href="#Parser-2456"><span class="linenos">2456</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-2457"><a href="#Parser-2457"><span class="linenos">2457</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="Parser-2458"><a href="#Parser-2458"><span class="linenos">2458</span></a>
-</span><span id="Parser-2459"><a href="#Parser-2459"><span class="linenos">2459</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-2460"><a href="#Parser-2460"><span class="linenos">2460</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="Parser-2461"><a href="#Parser-2461"><span class="linenos">2461</span></a> <span class="k">return</span> <span class="n">values</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">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-2464"><a href="#Parser-2464"><span class="linenos">2464</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="Parser-2465"><a href="#Parser-2465"><span class="linenos">2465</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-2466"><a href="#Parser-2466"><span class="linenos">2466</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-2467"><a href="#Parser-2467"><span class="linenos">2467</span></a> <span class="k">return</span> <span class="n">subquery</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">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <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="o">=</span> <span class="n">bracket</span> <span class="ow">or</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-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a>
-</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="Parser-2474"><a href="#Parser-2474"><span class="linenos">2474</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-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a>
-</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</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-2444"><a href="#Parser-2444"><span class="linenos">2444</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2445"><a href="#Parser-2445"><span class="linenos">2445</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_ordered</span><span class="p">)</span>
+</span><span id="Parser-2446"><a href="#Parser-2446"><span class="linenos">2446</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2447"><a href="#Parser-2447"><span class="linenos">2447</span></a> <span class="n">columns</span> <span class="o">=</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="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-2450"><a href="#Parser-2450"><span class="linenos">2450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="Parser-2451"><a href="#Parser-2451"><span class="linenos">2451</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="Parser-2452"><a href="#Parser-2452"><span class="linenos">2452</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Parser-2453"><a href="#Parser-2453"><span class="linenos">2453</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-2454"><a href="#Parser-2454"><span class="linenos">2454</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="Parser-2455"><a href="#Parser-2455"><span class="linenos">2455</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="Parser-2456"><a href="#Parser-2456"><span class="linenos">2456</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="Parser-2457"><a href="#Parser-2457"><span class="linenos">2457</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="Parser-2458"><a href="#Parser-2458"><span class="linenos">2458</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
+</span><span id="Parser-2459"><a href="#Parser-2459"><span class="linenos">2459</span></a> <span class="p">)</span>
+</span><span id="Parser-2460"><a href="#Parser-2460"><span class="linenos">2460</span></a>
+</span><span id="Parser-2461"><a href="#Parser-2461"><span class="linenos">2461</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-2462"><a href="#Parser-2462"><span class="linenos">2462</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2463"><a href="#Parser-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_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-2464"><a href="#Parser-2464"><span class="linenos">2464</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="Parser-2465"><a href="#Parser-2465"><span class="linenos">2465</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-2466"><a href="#Parser-2466"><span class="linenos">2466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2467"><a href="#Parser-2467"><span class="linenos">2467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
+</span><span id="Parser-2468"><a href="#Parser-2468"><span class="linenos">2468</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-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="p">),</span>
+</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <span class="p">)</span>
+</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="p">)</span>
+</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</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-2474"><a href="#Parser-2474"><span class="linenos">2474</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-2478"><a href="#Parser-2478"><span class="linenos">2478</span></a>
-</span><span id="Parser-2479"><a href="#Parser-2479"><span class="linenos">2479</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-2480"><a href="#Parser-2480"><span class="linenos">2480</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2481"><a href="#Parser-2481"><span class="linenos">2481</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-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">({</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">})</span>
+</span><span id="Parser-2480"><a href="#Parser-2480"><span class="linenos">2480</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2481"><a href="#Parser-2481"><span class="linenos">2481</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-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">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-2484"><a href="#Parser-2484"><span class="linenos">2484</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-2483"><a href="#Parser-2483"><span class="linenos">2483</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
+</span><span id="Parser-2484"><a href="#Parser-2484"><span class="linenos">2484</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
</span><span id="Parser-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="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
+</span><span id="Parser-2486"><a href="#Parser-2486"><span class="linenos">2486</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-2487"><a href="#Parser-2487"><span class="linenos">2487</span></a>
-</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="k">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-2489"><a href="#Parser-2489"><span class="linenos">2489</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-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">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</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-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
-</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a>
-</span><span id="Parser-2495"><a href="#Parser-2495"><span class="linenos">2495</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="Parser-2496"><a href="#Parser-2496"><span class="linenos">2496</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</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-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a>
-</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2490"><a href="#Parser-2490"><span class="linenos">2490</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-2491"><a href="#Parser-2491"><span class="linenos">2491</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-2492"><a href="#Parser-2492"><span class="linenos">2492</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-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a> <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_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">Table</span><span class="p">:</span>
+</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><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_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
-</span><span id="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="k">return</span> <span class="kc">None</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="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-2506"><a href="#Parser-2506"><span class="linenos">2506</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-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a>
-</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-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">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-2511"><a href="#Parser-2511"><span class="linenos">2511</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-2512"><a href="#Parser-2512"><span class="linenos">2512</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-2513"><a href="#Parser-2513"><span class="linenos">2513</span></a>
-</span><span id="Parser-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="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-2515"><a href="#Parser-2515"><span class="linenos">2515</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-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a>
-</span><span id="Parser-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</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-2519"><a href="#Parser-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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-2520"><a href="#Parser-2520"><span class="linenos">2520</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">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
-</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a>
-</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</span></a> <span class="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-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span>
-</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="p">)</span>
-</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a>
-</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
-</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</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-2528"><a href="#Parser-2528"><span class="linenos">2528</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-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a>
-</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</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-2532"><a href="#Parser-2532"><span class="linenos">2532</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-2501"><a href="#Parser-2501"><span class="linenos">2501</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-2502"><a href="#Parser-2502"><span class="linenos">2502</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="Parser-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2505"><a href="#Parser-2505"><span class="linenos">2505</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</span></a> <span class="p">)</span>
+</span><span id="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="Parser-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</span></a>
+</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="Parser-2513"><a href="#Parser-2513"><span class="linenos">2513</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-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a>
+</span><span id="Parser-2515"><a href="#Parser-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="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</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-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="p">)</span>
+</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a>
+</span><span id="Parser-2519"><a href="#Parser-2519"><span class="linenos">2519</span></a> <span class="k">def</span> <span class="nf">_parse_table</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="p">,</span>
+</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</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-2527"><a href="#Parser-2527"><span class="linenos">2527</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="Parser-2528"><a href="#Parser-2528"><span class="linenos">2528</span></a> <span class="k">return</span> <span class="n">lateral</span>
+</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a>
+</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</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-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</span></a> <span class="k">return</span> <span class="n">unnest</span>
</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a>
-</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</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-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a>
-</span><span id="Parser-2537"><a href="#Parser-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><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a> <span class="p">)</span>
-</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</span></a>
-</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
-</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2543"><a href="#Parser-2543"><span class="linenos">2543</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-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="k">return</span> <span class="kc">None</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="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2553"><a href="#Parser-2553"><span class="linenos">2553</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</span></a>
-</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2556"><a href="#Parser-2556"><span class="linenos">2556</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-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a> <span class="p">)</span>
-</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</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-2559"><a href="#Parser-2559"><span class="linenos">2559</span></a>
-</span><span id="Parser-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="bp">self</span><span 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-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a>
-</span><span id="Parser-2562"><a href="#Parser-2562"><span class="linenos">2562</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-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a>
-</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
-</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</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-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</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-2568"><a href="#Parser-2568"><span class="linenos">2568</span></a> <span class="bp">self</span><span 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-2569"><a href="#Parser-2569"><span class="linenos">2569</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-2570"><a href="#Parser-2570"><span class="linenos">2570</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-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</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-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2575"><a href="#Parser-2575"><span class="linenos">2575</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</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="bp">self</span><span 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-2534"><a href="#Parser-2534"><span class="linenos">2534</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-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a> <span class="k">return</span> <span class="n">values</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="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-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</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-2541"><a href="#Parser-2541"><span class="linenos">2541</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-2542"><a href="#Parser-2542"><span class="linenos">2542</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a>
+</span><span id="Parser-2544"><a href="#Parser-2544"><span class="linenos">2544</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</span></a> <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="o">=</span> <span class="n">bracket</span> <span class="ow">or</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-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a>
+</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</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-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a>
+</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
+</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a>
+</span><span id="Parser-2553"><a href="#Parser-2553"><span class="linenos">2553</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a>
+</span><span id="Parser-2556"><a href="#Parser-2556"><span class="linenos">2556</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-2557"><a href="#Parser-2557"><span class="linenos">2557</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-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a>
+</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</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-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</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-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">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
+</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a>
+</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</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-2566"><a href="#Parser-2566"><span class="linenos">2566</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-2567"><a href="#Parser-2567"><span class="linenos">2567</span></a>
+</span><span id="Parser-2568"><a href="#Parser-2568"><span class="linenos">2568</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-2569"><a href="#Parser-2569"><span class="linenos">2569</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-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a>
+</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</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-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</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">joins</span><span class="p">:</span>
+</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</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-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">if</span> <span class="bp">self</span><span 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-2580"><a href="#Parser-2580"><span class="linenos">2580</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-2581"><a href="#Parser-2581"><span class="linenos">2581</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-2582"><a href="#Parser-2582"><span class="linenos">2582</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-2583"><a href="#Parser-2583"><span class="linenos">2583</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-2584"><a href="#Parser-2584"><span class="linenos">2584</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Parser-2589"><a href="#Parser-2589"><span class="linenos">2589</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-2590"><a href="#Parser-2590"><span class="linenos">2590</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-2591"><a href="#Parser-2591"><span class="linenos">2591</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-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a> <span class="n">rows</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="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a> <span class="p">)</span>
-</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a>
-</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
-</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-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">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
-</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a>
-</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
-</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</span></a>
-</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</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-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
-</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
-</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a> <span class="p">)</span>
-</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
-</span><span id="Parser-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">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
-</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="p">)</span>
+</span><span id="Parser-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a>
+</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</span></a> <span class="k">def</span> <span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
+</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
+</span><span id="Parser-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
+</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a>
+</span><span id="Parser-2589"><a href="#Parser-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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</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-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
+</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="p">)</span>
+</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
+</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</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-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a> <span class="p">)</span>
+</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
+</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</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="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
+</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a>
+</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
+</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a>
+</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="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-2617"><a href="#Parser-2617"><span class="linenos">2617</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-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a>
+</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-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_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
-</span><span id="Parser-2622"><a href="#Parser-2622"><span class="linenos">2622</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-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">if</span> <span class="bp">self</span><span 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-2625"><a href="#Parser-2625"><span class="linenos">2625</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2626"><a href="#Parser-2626"><span class="linenos">2626</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-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</span></a> <span class="k">return</span> <span class="kc">None</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="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</span></a>
-</span><span id="Parser-2634"><a href="#Parser-2634"><span class="linenos">2634</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2635"><a href="#Parser-2635"><span class="linenos">2635</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-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a>
-</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-2639"><a href="#Parser-2639"><span class="linenos">2639</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-2640"><a href="#Parser-2640"><span class="linenos">2640</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</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-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a>
-</span><span id="Parser-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a> <span class="bp">self</span><span class="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-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="ow">not</span> <span class="bp">self</span><span 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-2647"><a href="#Parser-2647"><span class="linenos">2647</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-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="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-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a>
-</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2652"><a href="#Parser-2652"><span class="linenos">2652</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-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="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 class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a>
-</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</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-2621"><a href="#Parser-2621"><span class="linenos">2621</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-2622"><a href="#Parser-2622"><span class="linenos">2622</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-2623"><a href="#Parser-2623"><span class="linenos">2623</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-2624"><a href="#Parser-2624"><span class="linenos">2624</span></a>
+</span><span id="Parser-2625"><a href="#Parser-2625"><span class="linenos">2625</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-2626"><a href="#Parser-2626"><span class="linenos">2626</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-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a>
+</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</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-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a> <span class="bp">self</span><span 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-2631"><a href="#Parser-2631"><span class="linenos">2631</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">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</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">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span>
+</span><span id="Parser-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a> <span class="p">)</span>
+</span><span id="Parser-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a>
+</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
+</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</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-2639"><a href="#Parser-2639"><span class="linenos">2639</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-2640"><a href="#Parser-2640"><span class="linenos">2640</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a>
+</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</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-2643"><a href="#Parser-2643"><span class="linenos">2643</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-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="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</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-2647"><a href="#Parser-2647"><span class="linenos">2647</span></a>
+</span><span id="Parser-2648"><a href="#Parser-2648"><span class="linenos">2648</span></a> <span class="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-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="p">)</span>
+</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a>
+</span><span id="Parser-2652"><a href="#Parser-2652"><span class="linenos">2652</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
+</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2654"><a href="#Parser-2654"><span class="linenos">2654</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-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a> <span class="p">):</span>
+</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2657"><a href="#Parser-2657"><span class="linenos">2657</span></a>
-</span><span id="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="n">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-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a>
-</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2661"><a href="#Parser-2661"><span class="linenos">2661</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-2662"><a href="#Parser-2662"><span class="linenos">2662</span></a>
-</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</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-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2662"><a href="#Parser-2662"><span class="linenos">2662</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="n">seed</span> <span class="o">=</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">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-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-2668"><a href="#Parser-2668"><span class="linenos">2668</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</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-2670"><a href="#Parser-2670"><span class="linenos">2670</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-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</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-2668"><a href="#Parser-2668"><span class="linenos">2668</span></a> <span class="p">)</span>
+</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</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-2670"><a href="#Parser-2670"><span class="linenos">2670</span></a>
+</span><span id="Parser-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a> <span class="bp">self</span><span 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-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a>
+</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</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-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">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a>
-</span><span id="Parser-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a> <span class="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-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a>
-</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="k">return</span> <span class="n">pivot</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="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
-</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</span></a>
-</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
-</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</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-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
+</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</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-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="Parser-2678"><a href="#Parser-2678"><span class="linenos">2678</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-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="bp">self</span><span 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-2680"><a href="#Parser-2680"><span class="linenos">2680</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-2681"><a href="#Parser-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_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-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</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-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a>
-</span><span id="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</span></a> <span class="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-2689"><a href="#Parser-2689"><span class="linenos">2689</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-2690"><a href="#Parser-2690"><span class="linenos">2690</span></a> <span class="p">)</span>
-</span><span id="Parser-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a>
-</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
-</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</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-2694"><a href="#Parser-2694"><span class="linenos">2694</span></a> <span class="k">return</span> <span class="kc">None</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="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-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">if</span> <span class="bp">self</span><span 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-2699"><a href="#Parser-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">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a>
-</span><span id="Parser-2701"><a href="#Parser-2701"><span class="linenos">2701</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-2702"><a href="#Parser-2702"><span class="linenos">2702</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-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</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-2705"><a href="#Parser-2705"><span class="linenos">2705</span></a>
-</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</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-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</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-2688"><a href="#Parser-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">R_PAREN</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="k">if</span> <span class="bp">self</span><span 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-2691"><a href="#Parser-2691"><span class="linenos">2691</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-2692"><a href="#Parser-2692"><span class="linenos">2692</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-2693"><a href="#Parser-2693"><span class="linenos">2693</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-2694"><a href="#Parser-2694"><span class="linenos">2694</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-2695"><a href="#Parser-2695"><span class="linenos">2695</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-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a>
+</span><span id="Parser-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a> <span class="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-2698"><a href="#Parser-2698"><span class="linenos">2698</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="Parser-2699"><a href="#Parser-2699"><span class="linenos">2699</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</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-2701"><a href="#Parser-2701"><span class="linenos">2701</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-2702"><a href="#Parser-2702"><span class="linenos">2702</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-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</span></a> <span class="p">)</span>
</span><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a>
-</span><span id="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</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="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-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-2716"><a href="#Parser-2716"><span class="linenos">2716</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-2717"><a href="#Parser-2717"><span class="linenos">2717</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-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">if</span> <span class="bp">self</span><span 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-2720"><a href="#Parser-2720"><span class="linenos">2720</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-2721"><a href="#Parser-2721"><span class="linenos">2721</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-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a>
-</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
-</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</span></a>
-</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
-</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="k">break</span>
-</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a>
-</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
+</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</span></a>
+</span><span id="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a> <span class="k">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
+</span><span id="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a>
+</span><span id="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
+</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2719"><a href="#Parser-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_bitwise</span><span class="p">()</span>
+</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-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="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-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
+</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
+</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</span></a> <span class="p">)</span>
+</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="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-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
+</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="p">)</span>
</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a>
-</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="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-2733"><a href="#Parser-2733"><span class="linenos">2733</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
-</span><span id="Parser-2734"><a href="#Parser-2734"><span class="linenos">2734</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
+</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</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-2734"><a href="#Parser-2734"><span class="linenos">2734</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a>
-</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</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-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a>
-</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</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-2739"><a href="#Parser-2739"><span class="linenos">2739</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2740"><a href="#Parser-2740"><span class="linenos">2740</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-2741"><a href="#Parser-2741"><span class="linenos">2741</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-2742"><a href="#Parser-2742"><span class="linenos">2742</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a>
-</span><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</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-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a>
-</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
-</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</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-2748"><a href="#Parser-2748"><span class="linenos">2748</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-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_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
-</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</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</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-2739"><a href="#Parser-2739"><span class="linenos">2739</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2740"><a href="#Parser-2740"><span class="linenos">2740</span></a>
+</span><span id="Parser-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
+</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</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">return</span> <span class="kc">None</span>
+</span><span id="Parser-2748"><a href="#Parser-2748"><span class="linenos">2748</span></a>
+</span><span id="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</span></a>
+</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2753"><a href="#Parser-2753"><span class="linenos">2753</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-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</span></a>
-</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</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-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</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-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a> <span class="k">return</span> <span class="n">this</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">return</span> <span class="bp">self</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">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-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="p">)</span>
-</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a>
-</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
-</span><span id="Parser-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a> <span class="k">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-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">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">Ordered</span><span class="p">:</span>
-</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</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-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="bp">self</span><span 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-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="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-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
-</span><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
-</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</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-2779"><a href="#Parser-2779"><span class="linenos">2779</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-2780"><a href="#Parser-2780"><span class="linenos">2780</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-2781"><a href="#Parser-2781"><span class="linenos">2781</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-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="k">if</span> <span class="p">(</span>
-</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="Parser-2785"><a href="#Parser-2785"><span class="linenos">2785</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Parser-2786"><a href="#Parser-2786"><span class="linenos">2786</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-2787"><a href="#Parser-2787"><span class="linenos">2787</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-2788"><a href="#Parser-2788"><span class="linenos">2788</span></a> <span class="p">)</span>
-</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</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-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a> <span class="p">):</span>
-</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</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">return</span> <span class="bp">self</span><span 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-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a>
-</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</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-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2799"><a href="#Parser-2799"><span class="linenos">2799</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-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
-</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</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-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a> <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><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a>
-</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</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="k">else</span><span class="p">:</span>
-</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</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-2808"><a href="#Parser-2808"><span class="linenos">2808</span></a>
-</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</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-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</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="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-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
-</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</span></a> <span class="p">)</span>
-</span><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a>
-</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
-</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a>
-</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2822"><a href="#Parser-2822"><span class="linenos">2822</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-2823"><a href="#Parser-2823"><span class="linenos">2823</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-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</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-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</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-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a>
+</span><span id="Parser-2761"><a href="#Parser-2761"><span class="linenos">2761</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-2762"><a href="#Parser-2762"><span class="linenos">2762</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-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a>
+</span><span id="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2765"><a href="#Parser-2765"><span class="linenos">2765</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-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">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-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a>
+</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2770"><a href="#Parser-2770"><span class="linenos">2770</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-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a>
+</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</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 class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a>
+</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a>
+</span><span id="Parser-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
+</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="Parser-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
+</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
+</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a> <span class="p">)</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">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-2785"><a href="#Parser-2785"><span class="linenos">2785</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-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="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-2788"><a href="#Parser-2788"><span class="linenos">2788</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-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a>
+</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a> <span class="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-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</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-2794"><a href="#Parser-2794"><span class="linenos">2794</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-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a>
+</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Parser-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="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-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a>
+</span><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a> <span class="k">return</span> <span class="n">pivot</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="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
+</span><span id="Parser-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">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
+</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</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-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a>
+</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="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-2813"><a href="#Parser-2813"><span class="linenos">2813</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-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a> <span class="p">)</span>
+</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a>
+</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
+</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</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-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a>
+</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="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-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">if</span> <span class="bp">self</span><span 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-2823"><a href="#Parser-2823"><span class="linenos">2823</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2824"><a href="#Parser-2824"><span class="linenos">2824</span></a>
-</span><span id="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="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-2826"><a href="#Parser-2826"><span class="linenos">2826</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-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="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-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="k">while</span> <span class="kc">True</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="bp">self</span><span class="o">.</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-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</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-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="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</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-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a>
-</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</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-2834"><a href="#Parser-2834"><span class="linenos">2834</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-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="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-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</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-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a> <span class="p">)</span>
-</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</span></a>
-</span><span id="Parser-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="k">return</span> <span class="n">this</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">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-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="k">return</span> <span class="n">this</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">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</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-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2830"><a href="#Parser-2830"><span class="linenos">2830</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-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</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-2833"><a href="#Parser-2833"><span class="linenos">2833</span></a>
+</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</span></a> <span class="n">totals</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><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</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-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2840"><a href="#Parser-2840"><span class="linenos">2840</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-2841"><a href="#Parser-2841"><span class="linenos">2841</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-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="bp">self</span><span 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-2844"><a href="#Parser-2844"><span class="linenos">2844</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-2845"><a href="#Parser-2845"><span class="linenos">2845</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-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a>
+</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
+</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2850"><a href="#Parser-2850"><span class="linenos">2850</span></a>
+</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
+</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">break</span>
</span><span id="Parser-2853"><a href="#Parser-2853"><span class="linenos">2853</span></a>
-</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
-</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="k">if</span> <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-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
-</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
-</span><span id="Parser-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="p">):</span>
-</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="k">break</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="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="k">def</span> <span class="nf">_parse_grouping_sets</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a>
+</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="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-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a>
+</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</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-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2864"><a href="#Parser-2864"><span class="linenos">2864</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-2865"><a href="#Parser-2865"><span class="linenos">2865</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-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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-2869"><a href="#Parser-2869"><span class="linenos">2869</span></a>
-</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
-</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
-</span><span id="Parser-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
-</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</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="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
-</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</span></a> <span class="p">)</span>
-</span><span id="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a>
-</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="k">return</span> <span class="n">locks</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="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-2885"><a href="#Parser-2885"><span class="linenos">2885</span></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-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
+</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</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-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a>
+</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
+</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2877"><a href="#Parser-2877"><span class="linenos">2877</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2878"><a href="#Parser-2878"><span class="linenos">2878</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
+</span><span id="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
+</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a>
-</span><span id="Parser-2888"><a href="#Parser-2888"><span class="linenos">2888</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-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a>
-</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a> <span class="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-2891"><a href="#Parser-2891"><span class="linenos">2891</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-2892"><a href="#Parser-2892"><span class="linenos">2892</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-2893"><a href="#Parser-2893"><span class="linenos">2893</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-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</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-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">return</span> <span class="bp">self</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">expression</span><span class="p">,</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="n">this</span><span class="p">,</span>
-</span><span id="Parser-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="n">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-2901"><a href="#Parser-2901"><span class="linenos">2901</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-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="p">)</span>
-</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a>
-</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a> <span class="k">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-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_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-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a>
-</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</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-2908"><a href="#Parser-2908"><span class="linenos">2908</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-2909"><a href="#Parser-2909"><span class="linenos">2909</span></a>
-</span><span id="Parser-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a> <span class="k">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-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">_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-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">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-2914"><a href="#Parser-2914"><span class="linenos">2914</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-2915"><a href="#Parser-2915"><span class="linenos">2915</span></a>
-</span><span id="Parser-2916"><a href="#Parser-2916"><span class="linenos">2916</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-2917"><a href="#Parser-2917"><span class="linenos">2917</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-2918"><a href="#Parser-2918"><span class="linenos">2918</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-2919"><a href="#Parser-2919"><span class="linenos">2919</span></a>
-</span><span id="Parser-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</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-2922"><a href="#Parser-2922"><span class="linenos">2922</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-2923"><a href="#Parser-2923"><span class="linenos">2923</span></a> <span class="k">return</span> <span class="n">this</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="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
-</span><span id="Parser-2927"><a href="#Parser-2927"><span class="linenos">2927</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2928"><a href="#Parser-2928"><span class="linenos">2928</span></a>
-</span><span id="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2888"><a href="#Parser-2888"><span class="linenos">2888</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
+</span><span id="Parser-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-2891"><a href="#Parser-2891"><span class="linenos">2891</span></a> <span class="p">)</span>
+</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
+</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a>
+</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
+</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</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-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2899"><a href="#Parser-2899"><span class="linenos">2899</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-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2901"><a href="#Parser-2901"><span class="linenos">2901</span></a>
+</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</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-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a> <span class="p">)</span>
+</span><span id="Parser-2905"><a href="#Parser-2905"><span class="linenos">2905</span></a>
+</span><span id="Parser-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
+</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2909"><a href="#Parser-2909"><span class="linenos">2909</span></a> <span class="k">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-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a>
+</span><span id="Parser-2911"><a href="#Parser-2911"><span class="linenos">2911</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">Ordered</span><span class="p">:</span>
+</span><span id="Parser-2912"><a href="#Parser-2912"><span class="linenos">2912</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-2913"><a href="#Parser-2913"><span class="linenos">2913</span></a> <span class="bp">self</span><span 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-2914"><a href="#Parser-2914"><span class="linenos">2914</span></a>
+</span><span id="Parser-2915"><a href="#Parser-2915"><span class="linenos">2915</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-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
+</span><span id="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-2918"><a href="#Parser-2918"><span class="linenos">2918</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-2919"><a href="#Parser-2919"><span class="linenos">2919</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-2920"><a href="#Parser-2920"><span class="linenos">2920</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-2921"><a href="#Parser-2921"><span class="linenos">2921</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-2922"><a href="#Parser-2922"><span class="linenos">2922</span></a>
+</span><span id="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="p">(</span><span 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-2927"><a href="#Parser-2927"><span class="linenos">2927</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-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="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-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="p">):</span>
+</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a>
+</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a>
-</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</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">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-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="bp">self</span><span 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-2939"><a href="#Parser-2939"><span class="linenos">2939</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-2940"><a href="#Parser-2940"><span class="linenos">2940</span></a>
-</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a>
-</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a> <span class="k">def</span> <span class="nf">_parse_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-2944"><a href="#Parser-2944"><span class="linenos">2944</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-2945"><a href="#Parser-2945"><span class="linenos">2945</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-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a>
-</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
-</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</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-2949"><a href="#Parser-2949"><span class="linenos">2949</span></a> <span class="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-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a>
-</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</span></a> <span class="n">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-2952"><a href="#Parser-2952"><span class="linenos">2952</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-2953"><a href="#Parser-2953"><span class="linenos">2953</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-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</span></a>
-</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</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-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2939"><a href="#Parser-2939"><span class="linenos">2939</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-2940"><a href="#Parser-2940"><span class="linenos">2940</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
+</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</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-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a> <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><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="n">limit_paren</span><span class="p">:</span>
+</span><span id="Parser-2945"><a href="#Parser-2945"><span class="linenos">2945</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-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</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-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a>
+</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</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-2952"><a href="#Parser-2952"><span class="linenos">2952</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2953"><a href="#Parser-2953"><span class="linenos">2953</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a>
+</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</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-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
+</span><span id="Parser-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a> <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">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <span class="k">if</span> <span class="n">unnest</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">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-2963"><a href="#Parser-2963"><span class="linenos">2963</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-2964"><a href="#Parser-2964"><span class="linenos">2964</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
-</span><span id="Parser-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">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-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2968"><a href="#Parser-2968"><span class="linenos">2968</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2969"><a href="#Parser-2969"><span class="linenos">2969</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="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-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-2974"><a href="#Parser-2974"><span class="linenos">2974</span></a>
-</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2976"><a href="#Parser-2976"><span class="linenos">2976</span></a>
-</span><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</span></a> <span class="k">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">Between</span><span class="p">:</span>
-</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</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-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a> <span class="bp">self</span><span 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-2980"><a href="#Parser-2980"><span class="linenos">2980</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-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a>
-</span><span id="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</span></a> <span class="k">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-2984"><a href="#Parser-2984"><span class="linenos">2984</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2986"><a href="#Parser-2986"><span class="linenos">2986</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a>
-</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</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">Interval</span><span class="p">]:</span>
-</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a>
-</span><span id="Parser-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</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-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a>
-</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="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-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="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
-</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</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-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</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-2959"><a href="#Parser-2959"><span class="linenos">2959</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a>
+</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2962"><a href="#Parser-2962"><span class="linenos">2962</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-2963"><a href="#Parser-2963"><span class="linenos">2963</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-2964"><a href="#Parser-2964"><span class="linenos">2964</span></a>
+</span><span id="Parser-2965"><a href="#Parser-2965"><span class="linenos">2965</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-2966"><a href="#Parser-2966"><span class="linenos">2966</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-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a>
+</span><span id="Parser-2968"><a href="#Parser-2968"><span class="linenos">2968</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-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="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="Parser-2971"><a href="#Parser-2971"><span class="linenos">2971</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-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a>
+</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</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-2974"><a href="#Parser-2974"><span class="linenos">2974</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-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a>
+</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><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="Parser-2980"><a href="#Parser-2980"><span class="linenos">2980</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-2981"><a href="#Parser-2981"><span class="linenos">2981</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-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a> <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">return</span> <span class="n">this</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">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-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a>
+</span><span id="Parser-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</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-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a>
+</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
+</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
+</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
+</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="p">):</span>
+</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a> <span class="k">break</span>
</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</span></a>
-</span><span id="Parser-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="c1"># this is not actually a unit, it&#39;s something else</span>
-</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-</span><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">return</span> <span class="bp">self</span><span 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-3016"><a href="#Parser-3016"><span class="linenos">3016</span></a>
-</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</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-3018"><a href="#Parser-3018"><span class="linenos">3018</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-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="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3021"><a href="#Parser-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">BITWISE</span><span class="p">):</span>
-</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</span></a> <span class="n">this</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-3023"><a href="#Parser-3023"><span class="linenos">3023</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-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</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-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="p">)</span>
-</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
-</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
-</span><span id="Parser-3029"><a href="#Parser-3029"><span class="linenos">3029</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-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a> <span class="n">this</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-3031"><a href="#Parser-3031"><span class="linenos">3031</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-3032"><a href="#Parser-3032"><span class="linenos">3032</span></a> <span class="p">)</span>
-</span><span id="Parser-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-3034"><a href="#Parser-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">expression</span><span class="p">(</span>
-</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</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-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a> <span class="p">)</span>
-</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="k">break</span>
-</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a>
-</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a> <span class="k">return</span> <span class="n">this</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">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-3043"><a href="#Parser-3043"><span class="linenos">3043</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-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a>
+</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
+</span><span id="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</span></a>
+</span><span id="Parser-3018"><a href="#Parser-3018"><span class="linenos">3018</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
+</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</span></a> <span class="p">)</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">return</span> <span class="n">locks</span>
+</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a>
+</span><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="k">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-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">_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-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a>
+</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</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-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a>
+</span><span id="Parser-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a> <span class="k">if</span> <span class="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-3031"><a href="#Parser-3031"><span class="linenos">3031</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-3032"><a href="#Parser-3032"><span class="linenos">3032</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-3033"><a href="#Parser-3033"><span class="linenos">3033</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-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</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-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a>
+</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</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-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="n">by_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">),</span>
+</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</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-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="p">)</span>
</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</span></a>
-</span><span id="Parser-3045"><a href="#Parser-3045"><span class="linenos">3045</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-3046"><a href="#Parser-3046"><span class="linenos">3046</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-3045"><a href="#Parser-3045"><span class="linenos">3045</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-3046"><a href="#Parser-3046"><span class="linenos">3046</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-3047"><a href="#Parser-3047"><span class="linenos">3047</span></a>
-</span><span id="Parser-3048"><a href="#Parser-3048"><span class="linenos">3048</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-3049"><a href="#Parser-3049"><span class="linenos">3049</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-3050"><a href="#Parser-3050"><span class="linenos">3050</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-3051"><a href="#Parser-3051"><span class="linenos">3051</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-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">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-3054"><a href="#Parser-3054"><span class="linenos">3054</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-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a> <span class="k">return</span> <span class="n">interval</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="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-3059"><a href="#Parser-3059"><span class="linenos">3059</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-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a>
-</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</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-3064"><a href="#Parser-3064"><span class="linenos">3064</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-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</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-3067"><a href="#Parser-3067"><span class="linenos">3067</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</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-3070"><a href="#Parser-3070"><span class="linenos">3070</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-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
-</span><span id="Parser-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="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a>
-</span><span id="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">]:</span>
-</span><span id="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</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-3078"><a href="#Parser-3078"><span class="linenos">3078</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a>
-</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a> <span class="p">)</span>
+</span><span id="Parser-3048"><a href="#Parser-3048"><span class="linenos">3048</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-3049"><a href="#Parser-3049"><span class="linenos">3049</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-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">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-3052"><a href="#Parser-3052"><span class="linenos">3052</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-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="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-3055"><a href="#Parser-3055"><span class="linenos">3055</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-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">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-3058"><a href="#Parser-3058"><span class="linenos">3058</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="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-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a>
+</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="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-3062"><a href="#Parser-3062"><span class="linenos">3062</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-3063"><a href="#Parser-3063"><span class="linenos">3063</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-3064"><a href="#Parser-3064"><span class="linenos">3064</span></a> <span class="k">return</span> <span class="n">this</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">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-3067"><a href="#Parser-3067"><span class="linenos">3067</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-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3069"><a href="#Parser-3069"><span class="linenos">3069</span></a>
+</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3073"><a href="#Parser-3073"><span class="linenos">3073</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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">if</span> <span class="n">negate</span><span class="p">:</span>
+</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="bp">self</span><span 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-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">if</span> <span class="bp">self</span><span 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-3080"><a href="#Parser-3080"><span class="linenos">3080</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-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a>
+</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a> <span class="k">return</span> <span class="n">this</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">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3085"><a href="#Parser-3085"><span class="linenos">3085</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a>
-</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</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-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">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-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3093"><a href="#Parser-3093"><span class="linenos">3093</span></a>
-</span><span id="Parser-3094"><a href="#Parser-3094"><span class="linenos">3094</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-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a>
-</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</span></a> <span class="k">if</span> <span class="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-3097"><a href="#Parser-3097"><span class="linenos">3097</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-3100"><a href="#Parser-3100"><span class="linenos">3100</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-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a>
-</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
-</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="Parser-3108"><a href="#Parser-3108"><span class="linenos">3108</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-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a> <span class="p">)</span>
-</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="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 class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
+</span><span id="Parser-3084"><a href="#Parser-3084"><span class="linenos">3084</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-3085"><a href="#Parser-3085"><span class="linenos">3085</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-3086"><a href="#Parser-3086"><span class="linenos">3086</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
+</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</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-3090"><a href="#Parser-3090"><span class="linenos">3090</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">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-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a>
+</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a> <span class="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-3093"><a href="#Parser-3093"><span class="linenos">3093</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-3094"><a href="#Parser-3094"><span class="linenos">3094</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-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</span></a>
+</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">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-3098"><a href="#Parser-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">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-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a>
+</span><span id="Parser-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a>
+</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</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-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">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-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a>
+</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">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-3117"><a href="#Parser-3117"><span class="linenos">3117</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-3118"><a href="#Parser-3118"><span class="linenos">3118</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</span></a>
-</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</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="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-3123"><a href="#Parser-3123"><span class="linenos">3123</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-3124"><a href="#Parser-3124"><span class="linenos">3124</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-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><span id="Parser-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="Parser-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a> <span class="n">expressions</span><span class="o">=</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 class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a> <span class="p">)</span>
-</span><span id="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a> <span class="p">],</span>
-</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <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="n">this</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_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">Between</span><span class="p">:</span>
+</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</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-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a> <span class="bp">self</span><span 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-3121"><a href="#Parser-3121"><span class="linenos">3121</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-3122"><a href="#Parser-3122"><span class="linenos">3122</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3123"><a href="#Parser-3123"><span class="linenos">3123</span></a>
+</span><span id="Parser-3124"><a href="#Parser-3124"><span class="linenos">3124</span></a> <span class="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-3125"><a href="#Parser-3125"><span class="linenos">3125</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a>
+</span><span id="Parser-3129"><a href="#Parser-3129"><span class="linenos">3129</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">Interval</span><span class="p">]:</span>
+</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</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-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a>
+</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a>
-</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a> <span class="k">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-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3137"><a href="#Parser-3137"><span class="linenos">3137</span></a>
-</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3137"><a href="#Parser-3137"><span class="linenos">3137</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3138"><a href="#Parser-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_term</span><span class="p">()</span>
</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</span></a>
-</span><span id="Parser-3140"><a href="#Parser-3140"><span class="linenos">3140</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3140"><a href="#Parser-3140"><span class="linenos">3140</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-3141"><a href="#Parser-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="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="k">return</span> <span class="kc">None</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">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-3145"><a href="#Parser-3145"><span class="linenos">3145</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-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
-</span><span id="Parser-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="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-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</span></a> <span class="p">)</span>
+</span><span id="Parser-3144"><a href="#Parser-3144"><span class="linenos">3144</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 class="n">any_token</span><span class="o">=</span><span class="kc">True</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="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
+</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="Parser-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</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-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3154"><a href="#Parser-3154"><span class="linenos">3154</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-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">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-3157"><a href="#Parser-3157"><span class="linenos">3157</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-3158"><a href="#Parser-3158"><span class="linenos">3158</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-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="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-3161"><a href="#Parser-3161"><span class="linenos">3161</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-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</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-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</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-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3169"><a href="#Parser-3169"><span class="linenos">3169</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3170"><a href="#Parser-3170"><span class="linenos">3170</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-3171"><a href="#Parser-3171"><span class="linenos">3171</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-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a>
-</span><span id="Parser-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</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-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</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-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a>
-</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a> <span class="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-3179"><a href="#Parser-3179"><span class="linenos">3179</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-3180"><a href="#Parser-3180"><span class="linenos">3180</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-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a>
-</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="Parser-3183"><a href="#Parser-3183"><span class="linenos">3183</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-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a>
-</span><span id="Parser-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a> <span class="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-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a>
-</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a> <span class="k">return</span> <span class="n">value</span>
-</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a>
-</span><span id="Parser-3191"><a href="#Parser-3191"><span class="linenos">3191</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-3192"><a href="#Parser-3192"><span class="linenos">3192</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="Parser-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a> <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_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span> <span class="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-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a> <span class="bp">self</span><span 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-3202"><a href="#Parser-3202"><span class="linenos">3202</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="n">this</span><span class="p">)</span>
-</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a>
-</span><span id="Parser-3204"><a href="#Parser-3204"><span class="linenos">3204</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-3205"><a href="#Parser-3205"><span class="linenos">3205</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3153"><a href="#Parser-3153"><span class="linenos">3153</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a> <span class="c1"># this is not actually a unit, it&#39;s something else</span>
+</span><span id="Parser-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+</span><span id="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a>
+</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a>
+</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</span></a> <span class="k">def</span> <span class="nf">_parse_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-3165"><a href="#Parser-3165"><span class="linenos">3165</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-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="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</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-3169"><a href="#Parser-3169"><span class="linenos">3169</span></a> <span class="n">this</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-3170"><a href="#Parser-3170"><span class="linenos">3170</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-3171"><a href="#Parser-3171"><span class="linenos">3171</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3172"><a href="#Parser-3172"><span class="linenos">3172</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-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a> <span class="p">)</span>
+</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
+</span><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
+</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</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-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a> <span class="n">this</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-3178"><a href="#Parser-3178"><span class="linenos">3178</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-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="p">)</span>
+</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</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-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</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-3183"><a href="#Parser-3183"><span class="linenos">3183</span></a> <span class="p">)</span>
+</span><span id="Parser-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a> <span class="k">break</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">return</span> <span class="n">this</span>
+</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a>
+</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</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-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">_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-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_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-3193"><a href="#Parser-3193"><span class="linenos">3193</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-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a>
+</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</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-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_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-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">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-3198"><a href="#Parser-3198"><span class="linenos">3198</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-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a>
+</span><span id="Parser-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a> <span class="k">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-3201"><a href="#Parser-3201"><span class="linenos">3201</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-3202"><a href="#Parser-3202"><span class="linenos">3202</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="k">return</span> <span class="n">interval</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="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-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</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-3208"><a href="#Parser-3208"><span class="linenos">3208</span></a>
-</span><span id="Parser-3209"><a href="#Parser-3209"><span class="linenos">3209</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-3210"><a href="#Parser-3210"><span class="linenos">3210</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-3211"><a href="#Parser-3211"><span class="linenos">3211</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-3212"><a href="#Parser-3212"><span class="linenos">3212</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3213"><a href="#Parser-3213"><span class="linenos">3213</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-3214"><a href="#Parser-3214"><span class="linenos">3214</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-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-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_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</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-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="Parser-3210"><a href="#Parser-3210"><span class="linenos">3210</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-3211"><a href="#Parser-3211"><span class="linenos">3211</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-3212"><a href="#Parser-3212"><span class="linenos">3212</span></a> <span class="k">if</span> <span class="n">parser</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">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-3214"><a href="#Parser-3214"><span class="linenos">3214</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3216"><a href="#Parser-3216"><span class="linenos">3216</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-3217"><a href="#Parser-3217"><span class="linenos">3217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="Parser-3219"><a href="#Parser-3219"><span class="linenos">3219</span></a>
-</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</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-3221"><a href="#Parser-3221"><span class="linenos">3221</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-3222"><a href="#Parser-3222"><span class="linenos">3222</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-3223"><a href="#Parser-3223"><span class="linenos">3223</span></a>
-</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</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-3225"><a href="#Parser-3225"><span class="linenos">3225</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-3226"><a href="#Parser-3226"><span class="linenos">3226</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-3227"><a href="#Parser-3227"><span class="linenos">3227</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-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</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-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</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-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">_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-3234"><a href="#Parser-3234"><span class="linenos">3234</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-3235"><a href="#Parser-3235"><span class="linenos">3235</span></a> <span class="p">)</span>
-</span><span id="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></a>
-</span><span id="Parser-3239"><a href="#Parser-3239"><span class="linenos">3239</span></a> <span class="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-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="Parser-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</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-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">if</span> <span class="n">op</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">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-3247"><a href="#Parser-3247"><span class="linenos">3247</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-3248"><a href="#Parser-3248"><span class="linenos">3248</span></a> <span class="n">this</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-3249"><a href="#Parser-3249"><span class="linenos">3249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</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-3252"><a href="#Parser-3252"><span class="linenos">3252</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-3253"><a href="#Parser-3253"><span class="linenos">3253</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-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a> <span class="p">)</span>
+</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a>
+</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
+</span><span id="Parser-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">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</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-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a>
+</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</span></a> <span class="p">)</span>
+</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</span></a>
+</span><span id="Parser-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3233"><a href="#Parser-3233"><span class="linenos">3233</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3234"><a href="#Parser-3234"><span class="linenos">3234</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-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="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-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a>
+</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></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-3239"><a href="#Parser-3239"><span class="linenos">3239</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <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">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-3244"><a href="#Parser-3244"><span class="linenos">3244</span></a> <span class="n">tokens</span> <span class="o">=</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">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Parser-3245"><a href="#Parser-3245"><span class="linenos">3245</span></a>
+</span><span id="Parser-3246"><a href="#Parser-3246"><span class="linenos">3246</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-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">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
+</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="Parser-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a> <span class="k">else</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-3255"><a href="#Parser-3255"><span class="linenos">3255</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3257"><a href="#Parser-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_bracket</span><span class="p">(</span><span class="n">this</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="n">this</span>
+</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a>
+</span><span id="Parser-3258"><a href="#Parser-3258"><span class="linenos">3258</span></a> <span class="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-3259"><a href="#Parser-3259"><span class="linenos">3259</span></a>
-</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</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-3261"><a href="#Parser-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_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-3262"><a href="#Parser-3262"><span class="linenos">3262</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-3263"><a href="#Parser-3263"><span class="linenos">3263</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-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a>
-</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</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-3266"><a href="#Parser-3266"><span class="linenos">3266</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-3267"><a href="#Parser-3267"><span class="linenos">3267</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-3268"><a href="#Parser-3268"><span class="linenos">3268</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-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a>
-</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</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-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a>
-</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</span></a> <span class="k">return</span> <span class="n">primary</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="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-3276"><a href="#Parser-3276"><span class="linenos">3276</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-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">if</span> <span class="bp">self</span><span 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-3279"><a href="#Parser-3279"><span class="linenos">3279</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-3280"><a href="#Parser-3280"><span class="linenos">3280</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-3260"><a href="#Parser-3260"><span class="linenos">3260</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-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
+</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a>
+</span><span id="Parser-3268"><a href="#Parser-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</span><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-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
+</span><span id="Parser-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</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-3273"><a href="#Parser-3273"><span class="linenos">3273</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a> <span class="p">)</span>
+</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</span></a> <span class="p">)</span>
+</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
+</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3280"><a href="#Parser-3280"><span class="linenos">3280</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
</span><span id="Parser-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="k">if</span> <span class="n">query</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 class="n">query</span><span class="p">]</span>
-</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
-</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</span></a>
-</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a>
-</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="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-3290"><a href="#Parser-3290"><span class="linenos">3290</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-3291"><a href="#Parser-3291"><span class="linenos">3291</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-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="p">)</span>
-</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</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-3294"><a href="#Parser-3294"><span class="linenos">3294</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3297"><a href="#Parser-3297"><span class="linenos">3297</span></a>
-</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</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-3283"><a href="#Parser-3283"><span class="linenos">3283</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-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a> <span class="k">return</span> <span class="kc">None</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="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a>
+</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-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">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-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
+</span><span id="Parser-3294"><a href="#Parser-3294"><span class="linenos">3294</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3295"><a href="#Parser-3295"><span class="linenos">3295</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-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3297"><a href="#Parser-3297"><span class="linenos">3297</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="p">)</span>
+</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="p">)</span>
</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a>
-</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3302"><a href="#Parser-3302"><span class="linenos">3302</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-3303"><a href="#Parser-3303"><span class="linenos">3303</span></a>
-</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a>
-</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</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-3309"><a href="#Parser-3309"><span class="linenos">3309</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-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</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-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
-</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</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-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="p">)</span>
-</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a>
-</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</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-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</span></a>
-</span><span id="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</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-3328"><a href="#Parser-3328"><span class="linenos">3328</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-3329"><a href="#Parser-3329"><span class="linenos">3329</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-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">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-3332"><a href="#Parser-3332"><span class="linenos">3332</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-3333"><a href="#Parser-3333"><span class="linenos">3333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</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-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a>
-</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</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-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
-</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a> <span 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-3340"><a href="#Parser-3340"><span class="linenos">3340</span></a>
-</span><span id="Parser-3341"><a href="#Parser-3341"><span class="linenos">3341</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a>
-</span><span id="Parser-3343"><a href="#Parser-3343"><span class="linenos">3343</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-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</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-3305"><a href="#Parser-3305"><span class="linenos">3305</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-3306"><a href="#Parser-3306"><span class="linenos">3306</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-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a>
+</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a> <span class="k">if</span> <span class="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-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_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="n">tz_type</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
+</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
+</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
+</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</span></a> <span class="p">)</span>
+</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-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_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</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-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">):</span>
+</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</span></a> <span class="n">span</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalYearToMonthSpan</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;DAY&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">):</span>
+</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalDayToSecondSpan</span><span class="p">()]</span>
+</span><span id="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</span></a>
+</span><span id="Parser-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">span</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-3331"><a href="#Parser-3331"><span class="linenos">3331</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-3332"><a href="#Parser-3332"><span class="linenos">3332</span></a> <span class="n">this</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-3333"><a href="#Parser-3333"><span class="linenos">3333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
+</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</span></a> <span class="p">)</span>
+</span><span id="Parser-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a>
+</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</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-3340"><a href="#Parser-3340"><span class="linenos">3340</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-3341"><a href="#Parser-3341"><span class="linenos">3341</span></a>
+</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</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-3343"><a href="#Parser-3343"><span class="linenos">3343</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-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a>
-</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</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-3346"><a href="#Parser-3346"><span class="linenos">3346</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-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a>
-</span><span id="Parser-3348"><a href="#Parser-3348"><span class="linenos">3348</span></a> <span class="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-3349"><a href="#Parser-3349"><span class="linenos">3349</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-3350"><a href="#Parser-3350"><span class="linenos">3350</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-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</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-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="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-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <span class="n">this</span> <span 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-3356"><a href="#Parser-3356"><span class="linenos">3356</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-3357"><a href="#Parser-3357"><span class="linenos">3357</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3358"><a href="#Parser-3358"><span class="linenos">3358</span></a>
-</span><span id="Parser-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a> <span class="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-3360"><a href="#Parser-3360"><span class="linenos">3360</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-3348"><a href="#Parser-3348"><span class="linenos">3348</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-3349"><a href="#Parser-3349"><span class="linenos">3349</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-3350"><a href="#Parser-3350"><span class="linenos">3350</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
+</span><span id="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="Parser-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <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="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-3358"><a href="#Parser-3358"><span class="linenos">3358</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-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">return</span> <span class="n">this</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">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-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="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
-</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-3362"><a href="#Parser-3362"><span class="linenos">3362</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span> <span class="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-3364"><a href="#Parser-3364"><span class="linenos">3364</span></a> <span class="bp">self</span><span 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-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</span></a>
-</span><span id="Parser-3367"><a href="#Parser-3367"><span class="linenos">3367</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-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
-</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
-</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
-</span><span id="Parser-3372"><a href="#Parser-3372"><span class="linenos">3372</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="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-3376"><a href="#Parser-3376"><span class="linenos">3376</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a>
-</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</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-3379"><a href="#Parser-3379"><span class="linenos">3379</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-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a>
-</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</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-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</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-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">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-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3388"><a href="#Parser-3388"><span class="linenos">3388</span></a>
-</span><span id="Parser-3389"><a href="#Parser-3389"><span class="linenos">3389</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="k">return</span> <span class="n">this</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="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-3393"><a href="#Parser-3393"><span class="linenos">3393</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-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a> <span class="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-3395"><a href="#Parser-3395"><span class="linenos">3395</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-3396"><a href="#Parser-3396"><span class="linenos">3396</span></a> <span class="p">)</span>
-</span><span id="Parser-3397"><a href="#Parser-3397"><span class="linenos">3397</span></a>
-</span><span id="Parser-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</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-3400"><a href="#Parser-3400"><span class="linenos">3400</span></a> <span class="k">if</span> <span class="n">literal</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="bp">self</span><span 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-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="k">return</span> <span class="bp">self</span><span 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-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a>
-</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
-</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3407"><a href="#Parser-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">_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-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a>
-</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</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-3410"><a href="#Parser-3410"><span class="linenos">3410</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-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">_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-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">return</span> <span class="bp">self</span><span 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-3414"><a href="#Parser-3414"><span class="linenos">3414</span></a>
-</span><span id="Parser-3415"><a href="#Parser-3415"><span class="linenos">3415</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3416"><a href="#Parser-3416"><span class="linenos">3416</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-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="k">if</span> <span class="bp">self</span><span 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-3419"><a href="#Parser-3419"><span class="linenos">3419</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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3422"><a href="#Parser-3422"><span class="linenos">3422</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-3423"><a href="#Parser-3423"><span class="linenos">3423</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3424"><a href="#Parser-3424"><span class="linenos">3424</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-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">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-3427"><a href="#Parser-3427"><span class="linenos">3427</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-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a>
-</span><span id="Parser-3429"><a href="#Parser-3429"><span class="linenos">3429</span></a> <span class="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-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a>
-</span><span id="Parser-3431"><a href="#Parser-3431"><span class="linenos">3431</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-3367"><a href="#Parser-3367"><span class="linenos">3367</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-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a>
+</span><span id="Parser-3372"><a href="#Parser-3372"><span class="linenos">3372</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-3373"><a href="#Parser-3373"><span class="linenos">3373</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-3374"><a href="#Parser-3374"><span class="linenos">3374</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Parser-3375"><a href="#Parser-3375"><span class="linenos">3375</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-3376"><a href="#Parser-3376"><span class="linenos">3376</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-3377"><a href="#Parser-3377"><span class="linenos">3377</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-3378"><a href="#Parser-3378"><span class="linenos">3378</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-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="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a>
+</span><span id="Parser-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="k">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-3384"><a href="#Parser-3384"><span class="linenos">3384</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-3385"><a href="#Parser-3385"><span class="linenos">3385</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-3386"><a href="#Parser-3386"><span class="linenos">3386</span></a>
+</span><span id="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</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-3388"><a href="#Parser-3388"><span class="linenos">3388</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-3389"><a href="#Parser-3389"><span class="linenos">3389</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-3390"><a href="#Parser-3390"><span class="linenos">3390</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-3391"><a href="#Parser-3391"><span class="linenos">3391</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3393"><a href="#Parser-3393"><span class="linenos">3393</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-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</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-3396"><a href="#Parser-3396"><span class="linenos">3396</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-3397"><a href="#Parser-3397"><span class="linenos">3397</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-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a> <span class="p">)</span>
+</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3400"><a href="#Parser-3400"><span class="linenos">3400</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a>
+</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</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-3403"><a href="#Parser-3403"><span class="linenos">3403</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</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">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3407"><a href="#Parser-3407"><span class="linenos">3407</span></a>
+</span><span id="Parser-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</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-3410"><a href="#Parser-3410"><span class="linenos">3410</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-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><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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="n">field</span><span class="p">,</span>
+</span><span id="Parser-3414"><a href="#Parser-3414"><span class="linenos">3414</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-3415"><a href="#Parser-3415"><span class="linenos">3415</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-3416"><a href="#Parser-3416"><span class="linenos">3416</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-3417"><a href="#Parser-3417"><span class="linenos">3417</span></a> <span class="p">)</span>
+</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3420"><a href="#Parser-3420"><span class="linenos">3420</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-3421"><a href="#Parser-3421"><span class="linenos">3421</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a>
+</span><span id="Parser-3423"><a href="#Parser-3423"><span class="linenos">3423</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-3424"><a href="#Parser-3424"><span class="linenos">3424</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-3425"><a href="#Parser-3425"><span class="linenos">3425</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-3426"><a href="#Parser-3426"><span class="linenos">3426</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-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">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-3429"><a href="#Parser-3429"><span class="linenos">3429</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-3430"><a href="#Parser-3430"><span class="linenos">3430</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-3431"><a href="#Parser-3431"><span class="linenos">3431</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-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">if</span> <span class="bp">self</span><span 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-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="n">this</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-3435"><a href="#Parser-3435"><span class="linenos">3435</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-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="p">)</span>
-</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3438"><a href="#Parser-3438"><span class="linenos">3438</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</span></a>
-</span><span id="Parser-3440"><a href="#Parser-3440"><span class="linenos">3440</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-3441"><a href="#Parser-3441"><span class="linenos">3441</span></a>
-</span><span id="Parser-3442"><a href="#Parser-3442"><span class="linenos">3442</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-3443"><a href="#Parser-3443"><span class="linenos">3443</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-3433"><a href="#Parser-3433"><span class="linenos">3433</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-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a>
+</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="k">return</span> <span class="n">primary</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_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-3439"><a href="#Parser-3439"><span class="linenos">3439</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-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="bp">self</span><span 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-3442"><a href="#Parser-3442"><span class="linenos">3442</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-3443"><a href="#Parser-3443"><span class="linenos">3443</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-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="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser-3447"><a href="#Parser-3447"><span class="linenos">3447</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-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="k">pass</span>
-</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a> <span class="k">finally</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">errors</span><span class="o">.</span><span class="n">clear</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">_retreat</span><span class="p">(</span><span class="n">index</span><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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3457"><a href="#Parser-3457"><span class="linenos">3457</span></a>
-</span><span id="Parser-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="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-3459"><a href="#Parser-3459"><span class="linenos">3459</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-3460"><a href="#Parser-3460"><span class="linenos">3460</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-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="p">)</span>
-</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a>
-</span><span id="Parser-3463"><a href="#Parser-3463"><span class="linenos">3463</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-3464"><a href="#Parser-3464"><span class="linenos">3464</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a>
-</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a> <span class="k">def</span> <span class="nf">_parse_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-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
-</span><span id="Parser-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="Parser-3469"><a href="#Parser-3469"><span class="linenos">3469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a>
-</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-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">if</span> <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-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3475"><a href="#Parser-3475"><span class="linenos">3475</span></a>
-</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</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-3479"><a href="#Parser-3479"><span class="linenos">3479</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-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a> <span class="k">break</span>
-</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</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-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">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-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a> <span class="k">return</span> <span class="n">this</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">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-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_auto_increment</span><span class="p">(</span>
-</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3492"><a href="#Parser-3492"><span class="linenos">3492</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</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-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a>
+</span><span id="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a>
+</span><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="k">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-3453"><a href="#Parser-3453"><span class="linenos">3453</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-3454"><a href="#Parser-3454"><span class="linenos">3454</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-3455"><a href="#Parser-3455"><span class="linenos">3455</span></a> <span class="p">)</span>
+</span><span id="Parser-3456"><a href="#Parser-3456"><span class="linenos">3456</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-3457"><a href="#Parser-3457"><span class="linenos">3457</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3459"><a href="#Parser-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">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-3460"><a href="#Parser-3460"><span class="linenos">3460</span></a>
+</span><span id="Parser-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a> <span class="k">return</span> <span class="n">this</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">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="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
+</span><span id="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</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-3472"><a href="#Parser-3472"><span class="linenos">3472</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-3473"><a href="#Parser-3473"><span class="linenos">3473</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</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="p">(</span>
+</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</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-3477"><a href="#Parser-3477"><span class="linenos">3477</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
+</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</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-3479"><a href="#Parser-3479"><span class="linenos">3479</span></a> <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="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="Parser-3482"><a href="#Parser-3482"><span class="linenos">3482</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3485"><a href="#Parser-3485"><span class="linenos">3485</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3487"><a href="#Parser-3487"><span class="linenos">3487</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-3488"><a href="#Parser-3488"><span class="linenos">3488</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a>
+</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</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-3491"><a href="#Parser-3491"><span class="linenos">3491</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-3492"><a href="#Parser-3492"><span class="linenos">3492</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-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">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-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_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-3496"><a href="#Parser-3496"><span class="linenos">3496</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-3497"><a href="#Parser-3497"><span class="linenos">3497</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-3498"><a href="#Parser-3498"><span class="linenos">3498</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-3499"><a href="#Parser-3499"><span class="linenos">3499</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-3500"><a href="#Parser-3500"><span class="linenos">3500</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-3501"><a href="#Parser-3501"><span class="linenos">3501</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-3502"><a href="#Parser-3502"><span class="linenos">3502</span></a>
-</span><span id="Parser-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a> <span class="k">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-3504"><a href="#Parser-3504"><span class="linenos">3504</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-3494"><a href="#Parser-3494"><span class="linenos">3494</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="Parser-3495"><a href="#Parser-3495"><span class="linenos">3495</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3496"><a href="#Parser-3496"><span class="linenos">3496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</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-3498"><a href="#Parser-3498"><span class="linenos">3498</span></a>
+</span><span id="Parser-3499"><a href="#Parser-3499"><span class="linenos">3499</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-3500"><a href="#Parser-3500"><span class="linenos">3500</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
+</span><span id="Parser-3501"><a href="#Parser-3501"><span class="linenos">3501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="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-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">return</span> <span class="kc">None</span>
</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a>
-</span><span id="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</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-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a>
-</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</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-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a> <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="k">return</span> <span class="bp">self</span><span 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-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="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">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
-</span><span id="Parser-3518"><a href="#Parser-3518"><span class="linenos">3518</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="Parser-3519"><a href="#Parser-3519"><span class="linenos">3519</span></a> <span class="n">this</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-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
-</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a> <span class="p">)</span>
-</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3523"><a href="#Parser-3523"><span class="linenos">3523</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-3524"><a href="#Parser-3524"><span class="linenos">3524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-3525"><a href="#Parser-3525"><span class="linenos">3525</span></a>
-</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="bp">self</span><span 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-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</span></a>
-</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3530"><a href="#Parser-3530"><span class="linenos">3530</span></a> <span class="k">if</span> <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-3531"><a href="#Parser-3531"><span class="linenos">3531</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-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">_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-3533"><a href="#Parser-3533"><span class="linenos">3533</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-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="k">if</span> <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-3535"><a href="#Parser-3535"><span class="linenos">3535</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-3536"><a href="#Parser-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_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</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-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a>
-</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</span></a> <span class="k">if</span> <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-3540"><a href="#Parser-3540"><span class="linenos">3540</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-3541"><a href="#Parser-3541"><span class="linenos">3541</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-3542"><a href="#Parser-3542"><span class="linenos">3542</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-3506"><a href="#Parser-3506"><span class="linenos">3506</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-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</span></a>
+</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</span></a> <span class="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-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a>
+</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</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-3512"><a href="#Parser-3512"><span class="linenos">3512</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-3513"><a href="#Parser-3513"><span class="linenos">3513</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-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</span></a> <span class="n">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-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a>
+</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="n">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-3518"><a href="#Parser-3518"><span class="linenos">3518</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">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-3519"><a href="#Parser-3519"><span class="linenos">3519</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-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a>
+</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</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-3523"><a href="#Parser-3523"><span class="linenos">3523</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-3524"><a href="#Parser-3524"><span class="linenos">3524</span></a>
+</span><span id="Parser-3525"><a href="#Parser-3525"><span class="linenos">3525</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-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a>
+</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
+</span><span id="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a>
+</span><span id="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</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-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
+</span><span id="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
+</span><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3536"><a href="#Parser-3536"><span class="linenos">3536</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3537"><a href="#Parser-3537"><span class="linenos">3537</span></a>
+</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</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-3539"><a href="#Parser-3539"><span class="linenos">3539</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-3540"><a href="#Parser-3540"><span class="linenos">3540</span></a>
+</span><span id="Parser-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="k">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-3542"><a href="#Parser-3542"><span class="linenos">3542</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-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="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
-</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a>
-</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</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-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="bp">self</span><span class="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-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</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-3548"><a href="#Parser-3548"><span class="linenos">3548</span></a>
-</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</span></a>
-</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a> <span class="k">def</span> <span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</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-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3549"><a href="#Parser-3549"><span class="linenos">3549</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-3550"><a href="#Parser-3550"><span class="linenos">3550</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a>
+</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3554"><a href="#Parser-3554"><span class="linenos">3554</span></a>
-</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
-</span><span id="Parser-3556"><a href="#Parser-3556"><span class="linenos">3556</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">]:</span>
-</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a> <span class="k">if</span> <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-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
-</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a>
-</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</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-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3566"><a href="#Parser-3566"><span class="linenos">3566</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-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a> <span class="n">this</span> <span class="o">=</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="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-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a> <span class="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-3572"><a href="#Parser-3572"><span class="linenos">3572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</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-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a> <span class="p">)</span>
-</span><span id="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a>
-</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a>
-</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</span></a> <span class="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-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3581"><a href="#Parser-3581"><span class="linenos">3581</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-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a>
-</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="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-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</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-3556"><a href="#Parser-3556"><span class="linenos">3556</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-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a> <span class="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-3558"><a href="#Parser-3558"><span class="linenos">3558</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-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a> <span class="p">)</span>
+</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a>
+</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="Parser-3562"><a href="#Parser-3562"><span class="linenos">3562</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-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="k">if</span> <span class="n">literal</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">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-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="k">return</span> <span class="bp">self</span><span 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-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a>
+</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
+</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</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-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a>
+</span><span id="Parser-3572"><a href="#Parser-3572"><span class="linenos">3572</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-3573"><a href="#Parser-3573"><span class="linenos">3573</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-3574"><a href="#Parser-3574"><span class="linenos">3574</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-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a>
+</span><span id="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a>
+</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</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-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a>
+</span><span id="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
+</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="p">)</span>
</span><span id="Parser-3585"><a href="#Parser-3585"><span class="linenos">3585</span></a>
-</span><span id="Parser-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</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-3588"><a href="#Parser-3588"><span class="linenos">3588</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-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="k">break</span>
-</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</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-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">return</span> <span class="bp">self</span><span 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-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3587"><a href="#Parser-3587"><span class="linenos">3587</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-3588"><a href="#Parser-3588"><span class="linenos">3588</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3589"><a href="#Parser-3589"><span class="linenos">3589</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-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a>
+</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</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-3592"><a href="#Parser-3592"><span class="linenos">3592</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-3593"><a href="#Parser-3593"><span class="linenos">3593</span></a>
-</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
-</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</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-3596"><a href="#Parser-3596"><span class="linenos">3596</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</span></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-3598"><a href="#Parser-3598"><span class="linenos">3598</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a>
-</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</span></a> <span class="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-3601"><a href="#Parser-3601"><span class="linenos">3601</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-3602"><a href="#Parser-3602"><span class="linenos">3602</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-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a>
-</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</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-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a>
-</span><span id="Parser-3606"><a href="#Parser-3606"><span class="linenos">3606</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-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;KEY&quot;</span><span class="p">)</span>
-</span><span id="Parser-3608"><a href="#Parser-3608"><span class="linenos">3608</span></a> <span class="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-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span 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_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="p">)</span>
-</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a>
-</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="k">def</span> <span class="nf">_parse_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-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</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-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="k">break</span>
-</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</span></a>
-</span><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</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-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</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-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3631"><a href="#Parser-3631"><span class="linenos">3631</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-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a>
-</span><span id="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</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-3634"><a href="#Parser-3634"><span class="linenos">3634</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-3635"><a href="#Parser-3635"><span class="linenos">3635</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-3636"><a href="#Parser-3636"><span class="linenos">3636</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-3637"><a href="#Parser-3637"><span class="linenos">3637</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-3638"><a href="#Parser-3638"><span class="linenos">3638</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-3639"><a href="#Parser-3639"><span class="linenos">3639</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-3640"><a href="#Parser-3640"><span class="linenos">3640</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-3641"><a href="#Parser-3641"><span class="linenos">3641</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-3642"><a href="#Parser-3642"><span class="linenos">3642</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-3643"><a href="#Parser-3643"><span class="linenos">3643</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-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="k">break</span>
-</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a>
-</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</span></a> <span class="k">return</span> <span class="n">options</span>
-</span><span id="Parser-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a>
-</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
-</span><span id="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</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-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</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-3595"><a href="#Parser-3595"><span class="linenos">3595</span></a>
+</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</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-3597"><a href="#Parser-3597"><span class="linenos">3597</span></a>
+</span><span id="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</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-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="p">)</span>
+</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</span></a>
+</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">_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-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="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-3608"><a href="#Parser-3608"><span class="linenos">3608</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-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a>
+</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</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-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a> <span class="k">pass</span>
+</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+</span><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</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-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a>
+</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a> <span class="k">return</span> <span class="n">this</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="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
+</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a>
+</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</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-3626"><a href="#Parser-3626"><span class="linenos">3626</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a>
+</span><span id="Parser-3631"><a href="#Parser-3631"><span class="linenos">3631</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-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
+</span><span id="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="Parser-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-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="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-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">if</span> <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-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-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="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</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-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
+</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a> <span class="p">)</span>
+</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a> <span class="p">)</span>
</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a>
-</span><span id="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</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-3655"><a href="#Parser-3655"><span class="linenos">3655</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-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
-</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</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-3660"><a href="#Parser-3660"><span class="linenos">3660</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-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a>
-</span><span id="Parser-3663"><a href="#Parser-3663"><span class="linenos">3663</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-3664"><a href="#Parser-3664"><span class="linenos">3664</span></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-3665"><a href="#Parser-3665"><span class="linenos">3665</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-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a>
-</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-3671"><a href="#Parser-3671"><span class="linenos">3671</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-3672"><a href="#Parser-3672"><span class="linenos">3672</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-3673"><a href="#Parser-3673"><span class="linenos">3673</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-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a> <span class="k">else</span><span class="p">:</span>
-</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">_advance</span><span class="p">()</span>
-</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</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-3677"><a href="#Parser-3677"><span class="linenos">3677</span></a>
-</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</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-3679"><a href="#Parser-3679"><span class="linenos">3679</span></a>
-</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</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-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a> <span class="p">)</span>
+</span><span id="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</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-3655"><a href="#Parser-3655"><span class="linenos">3655</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-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a> <span class="k">break</span>
+</span><span id="Parser-3657"><a href="#Parser-3657"><span class="linenos">3657</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-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a>
+</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</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-3660"><a href="#Parser-3660"><span class="linenos">3660</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a>
+</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 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-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a>
+</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
+</span><span id="Parser-3665"><a href="#Parser-3665"><span class="linenos">3665</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</span></a> <span class="n">start</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 class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a>
+</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3671"><a href="#Parser-3671"><span class="linenos">3671</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-3672"><a href="#Parser-3672"><span class="linenos">3672</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-3673"><a href="#Parser-3673"><span class="linenos">3673</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-3674"><a href="#Parser-3674"><span class="linenos">3674</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-3675"><a href="#Parser-3675"><span class="linenos">3675</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-3676"><a href="#Parser-3676"><span class="linenos">3676</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-3677"><a href="#Parser-3677"><span class="linenos">3677</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-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">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-3680"><a href="#Parser-3680"><span class="linenos">3680</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-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a>
+</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a> <span class="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-3683"><a href="#Parser-3683"><span class="linenos">3683</span></a>
-</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</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-3689"><a href="#Parser-3689"><span class="linenos">3689</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-3690"><a href="#Parser-3690"><span class="linenos">3690</span></a> <span class="p">)</span>
+</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a> <span class="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-3687"><a href="#Parser-3687"><span class="linenos">3687</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-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <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="k">return</span> <span class="bp">self</span><span 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-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">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-3693"><a href="#Parser-3693"><span class="linenos">3693</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a>
-</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</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_field</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span><span class="p">)</span>
-</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</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-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_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-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="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-3701"><a href="#Parser-3701"><span class="linenos">3701</span></a> <span class="k">return</span> <span class="n">this</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">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-3692"><a href="#Parser-3692"><span class="linenos">3692</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">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-3693"><a href="#Parser-3693"><span class="linenos">3693</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</span></a> <span class="n">this</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-3696"><a href="#Parser-3696"><span class="linenos">3696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
+</span><span id="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="p">)</span>
+</span><span id="Parser-3698"><a href="#Parser-3698"><span class="linenos">3698</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</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-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="bp">self</span><span 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-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a>
-</span><span id="Parser-3705"><a href="#Parser-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">COLON</span><span class="p">):</span>
-</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</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 class="o">=</span> <span class="p">[</span>
-</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</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">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-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a> <span class="p">]</span>
-</span><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3710"><a href="#Parser-3710"><span class="linenos">3710</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-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a> <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><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a> <span class="p">)</span>
-</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="p">)</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="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</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-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3719"><a href="#Parser-3719"><span class="linenos">3719</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-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</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-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3705"><a href="#Parser-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">L_PAREN</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">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</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-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a> <span class="k">if</span> <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-3709"><a href="#Parser-3709"><span class="linenos">3709</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-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_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</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="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-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="k">if</span> <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-3713"><a href="#Parser-3713"><span class="linenos">3713</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-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a>
+</span><span id="Parser-3715"><a href="#Parser-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_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</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-3717"><a href="#Parser-3717"><span class="linenos">3717</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-3718"><a href="#Parser-3718"><span class="linenos">3718</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-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a>
+</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
+</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a>
+</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a>
-</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3726"><a href="#Parser-3726"><span class="linenos">3726</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-3727"><a href="#Parser-3727"><span class="linenos">3727</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-3728"><a href="#Parser-3728"><span class="linenos">3728</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-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="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-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_bracket</span><span class="p">(</span><span class="n">this</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_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-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a>
-</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</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-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a> <span class="k">return</span> <span class="n">this</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_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</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-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-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">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
+</span><span id="Parser-3732"><a href="#Parser-3732"><span class="linenos">3732</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="k">if</span> <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-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
+</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
+</span><span id="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
+</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</span></a> <span class="k">return</span> <span class="kc">None</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="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-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a>
-</span><span id="Parser-3744"><a href="#Parser-3744"><span class="linenos">3744</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-3745"><a href="#Parser-3745"><span class="linenos">3745</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-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="bp">self</span><span 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-3747"><a href="#Parser-3747"><span class="linenos">3747</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-3748"><a href="#Parser-3748"><span class="linenos">3748</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-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="k">if</span> <span class="bp">self</span><span 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-3751"><a href="#Parser-3751"><span class="linenos">3751</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-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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3754"><a href="#Parser-3754"><span class="linenos">3754</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-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="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-3757"><a href="#Parser-3757"><span class="linenos">3757</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-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="p">)</span>
-</span><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a>
-</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</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-3761"><a href="#Parser-3761"><span class="linenos">3761</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3762"><a href="#Parser-3762"><span class="linenos">3762</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-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">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</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-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</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-3767"><a href="#Parser-3767"><span class="linenos">3767</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-3768"><a href="#Parser-3768"><span class="linenos">3768</span></a>
-</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</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-3770"><a href="#Parser-3770"><span class="linenos">3770</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-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a>
-</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3774"><a href="#Parser-3774"><span class="linenos">3774</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-3775"><a href="#Parser-3775"><span class="linenos">3775</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-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a> <span class="bp">self</span><span 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-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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">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-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a>
-</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
-</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</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_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-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">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-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a> <span class="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-3750"><a href="#Parser-3750"><span class="linenos">3750</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</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-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <span class="p">)</span>
+</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a>
+</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="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_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-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3759"><a href="#Parser-3759"><span class="linenos">3759</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-3760"><a href="#Parser-3760"><span class="linenos">3760</span></a>
+</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">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="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="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</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-3766"><a href="#Parser-3766"><span class="linenos">3766</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-3767"><a href="#Parser-3767"><span class="linenos">3767</span></a> <span class="k">break</span>
+</span><span id="Parser-3768"><a href="#Parser-3768"><span class="linenos">3768</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-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="k">return</span> <span class="bp">self</span><span 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-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a>
+</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <span class="bp">self</span><span class="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-3774"><a href="#Parser-3774"><span class="linenos">3774</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="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-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a>
+</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</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-3779"><a href="#Parser-3779"><span class="linenos">3779</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-3780"><a href="#Parser-3780"><span class="linenos">3780</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-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a>
+</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</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-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a>
+</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</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-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="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-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
-</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</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-3789"><a href="#Parser-3789"><span class="linenos">3789</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-3790"><a href="#Parser-3790"><span class="linenos">3790</span></a> <span class="p">)</span>
-</span><span id="Parser-3791"><a href="#Parser-3791"><span class="linenos">3791</span></a>
-</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
-</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</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-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="bp">self</span><span 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-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 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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3799"><a href="#Parser-3799"><span class="linenos">3799</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-3800"><a href="#Parser-3800"><span class="linenos">3800</span></a>
-</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a>
-</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
-</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a>
-</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
-</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3812"><a href="#Parser-3812"><span class="linenos">3812</span></a>
-</span><span id="Parser-3813"><a href="#Parser-3813"><span class="linenos">3813</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
-</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</span></a>
-</span><span id="Parser-3815"><a href="#Parser-3815"><span class="linenos">3815</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-3816"><a href="#Parser-3816"><span class="linenos">3816</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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3819"><a href="#Parser-3819"><span class="linenos">3819</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3820"><a href="#Parser-3820"><span class="linenos">3820</span></a> <span class="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-3821"><a href="#Parser-3821"><span class="linenos">3821</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">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-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a> <span class="p">)</span>
-</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</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-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="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</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-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">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</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-3831"><a href="#Parser-3831"><span class="linenos">3831</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-3832"><a href="#Parser-3832"><span class="linenos">3832</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3833"><a href="#Parser-3833"><span class="linenos">3833</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-3834"><a href="#Parser-3834"><span class="linenos">3834</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">FORMAT</span><span class="p">):</span>
-</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
-</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a>
-</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">this</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-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
-</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
-</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="Parser-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_TRIE</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><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a> <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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
-</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
-</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a>
-</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span 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_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="p">)</span>
+</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</span></a>
+</span><span id="Parser-3790"><a href="#Parser-3790"><span class="linenos">3790</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-3791"><a href="#Parser-3791"><span class="linenos">3791</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</span></a> <span class="k">if</span> <span class="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-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="k">break</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="k">if</span> <span class="bp">self</span><span 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-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</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-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a>
+</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</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-3812"><a href="#Parser-3812"><span class="linenos">3812</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-3813"><a href="#Parser-3813"><span class="linenos">3813</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-3814"><a href="#Parser-3814"><span class="linenos">3814</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-3815"><a href="#Parser-3815"><span class="linenos">3815</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-3816"><a href="#Parser-3816"><span class="linenos">3816</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-3817"><a href="#Parser-3817"><span class="linenos">3817</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-3818"><a href="#Parser-3818"><span class="linenos">3818</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-3819"><a href="#Parser-3819"><span class="linenos">3819</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-3820"><a href="#Parser-3820"><span class="linenos">3820</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-3821"><a href="#Parser-3821"><span class="linenos">3821</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-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="k">break</span>
+</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a>
+</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a> <span class="k">return</span> <span class="n">options</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="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
+</span><span id="Parser-3828"><a href="#Parser-3828"><span class="linenos">3828</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-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a>
+</span><span id="Parser-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</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-3833"><a href="#Parser-3833"><span class="linenos">3833</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-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a>
+</span><span id="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
+</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</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-3838"><a href="#Parser-3838"><span class="linenos">3838</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-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a>
+</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="k">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-3842"><a href="#Parser-3842"><span class="linenos">3842</span></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-3843"><a href="#Parser-3843"><span class="linenos">3843</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-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a>
+</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</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-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a>
+</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-3849"><a href="#Parser-3849"><span class="linenos">3849</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-3850"><a href="#Parser-3850"><span class="linenos">3850</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-3851"><a href="#Parser-3851"><span class="linenos">3851</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-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">)</span>
+</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</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-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a>
-</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="k">def</span> <span class="nf">_parse_concat</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</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-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONCAT_NULL_OUTPUTS_STRING</span><span class="p">:</span>
-</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">))</span>
-</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span>
-</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a> <span class="k">if</span> <span class="n">arg</span>
-</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a> <span class="p">]</span>
-</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a>
-</span><span id="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</span></a> <span class="c1"># Some dialects (e.g. Trino) don&#39;t allow a single-argument CONCAT call, so when</span>
-</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a> <span class="c1"># we find such a call we replace it with its argument.</span>
-</span><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</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="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a> <span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a>
-</span><span id="Parser-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a> <span class="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-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span>
-</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a> <span class="p">)</span>
-</span><span id="Parser-3875"><a href="#Parser-3875"><span class="linenos">3875</span></a>
-</span><span id="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</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-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3878"><a href="#Parser-3878"><span class="linenos">3878</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Parser-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
-</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a> <span class="p">]</span>
-</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
-</span><span id="Parser-3883"><a href="#Parser-3883"><span class="linenos">3883</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</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-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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
-</span><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
-</span><span id="Parser-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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a>
-</span><span id="Parser-3893"><a href="#Parser-3893"><span class="linenos">3893</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-3894"><a href="#Parser-3894"><span class="linenos">3894</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-3895"><a href="#Parser-3895"><span class="linenos">3895</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-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</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-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-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="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-3901"><a href="#Parser-3901"><span class="linenos">3901</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Parser-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a>
-</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</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-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</span></a>
-</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">USING</span><span class="p">):</span>
-</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
-</span><span id="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a> <span class="p">)</span>
-</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</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-3912"><a href="#Parser-3912"><span class="linenos">3912</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-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3914"><a href="#Parser-3914"><span class="linenos">3914</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="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-3859"><a href="#Parser-3859"><span class="linenos">3859</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-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="p">)</span>
+</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a>
+</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</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-3867"><a href="#Parser-3867"><span class="linenos">3867</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-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a> <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">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-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">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-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="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_field</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span><span class="p">)</span>
+</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</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-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">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-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a>
+</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</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-3878"><a href="#Parser-3878"><span class="linenos">3878</span></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-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a>
+</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="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-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">if</span> <span class="bp">self</span><span 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-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</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">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-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="p">]</span>
+</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</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-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a> <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><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <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-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="p">)</span>
+</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a> <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="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="Parser-3895"><a href="#Parser-3895"><span class="linenos">3895</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-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3897"><a href="#Parser-3897"><span class="linenos">3897</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-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</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-3901"><a href="#Parser-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a>
+</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3904"><a href="#Parser-3904"><span class="linenos">3904</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-3905"><a href="#Parser-3905"><span class="linenos">3905</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-3906"><a href="#Parser-3906"><span class="linenos">3906</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-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="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-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_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a>
+</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</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-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">COLON</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">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-3914"><a href="#Parser-3914"><span class="linenos">3914</span></a> <span class="k">return</span> <span class="n">this</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">return</span> <span class="bp">self</span><span 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-3917"><a href="#Parser-3917"><span class="linenos">3917</span></a>
-</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="k">def</span> <span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
-</span><span id="Parser-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
-</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</span></a>
-</span><span id="Parser-3922"><a href="#Parser-3922"><span class="linenos">3922</span></a><span class="sd"> - DECODE(bin, charset)</span>
-</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
-</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a>
-</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="Parser-3927"><a href="#Parser-3927"><span class="linenos">3927</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="Parser-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</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-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a>
-</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a> <span class="k">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-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-3935"><a href="#Parser-3935"><span class="linenos">3935</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-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><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</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-3940"><a href="#Parser-3940"><span class="linenos">3940</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-3941"><a href="#Parser-3941"><span class="linenos">3941</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a>
-</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="k">if</span> <span class="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-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</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-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a> <span class="p">)</span>
-</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</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-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</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-3950"><a href="#Parser-3950"><span class="linenos">3950</span></a> <span class="p">)</span>
-</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</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-3953"><a href="#Parser-3953"><span class="linenos">3953</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-3954"><a href="#Parser-3954"><span class="linenos">3954</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</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-3956"><a href="#Parser-3956"><span class="linenos">3956</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-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</span></a> <span class="p">),</span>
-</span><span id="Parser-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="p">)</span>
-</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</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-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a>
-</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a> <span class="k">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-3916"><a href="#Parser-3916"><span class="linenos">3916</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-3917"><a href="#Parser-3917"><span class="linenos">3917</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="n">default</span> <span class="o">=</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="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-3921"><a href="#Parser-3921"><span class="linenos">3921</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-3922"><a href="#Parser-3922"><span class="linenos">3922</span></a>
+</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a> <span class="k">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-3924"><a href="#Parser-3924"><span class="linenos">3924</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-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a> <span class="bp">self</span><span 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-3926"><a href="#Parser-3926"><span class="linenos">3926</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-3927"><a href="#Parser-3927"><span class="linenos">3927</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-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a>
+</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3930"><a href="#Parser-3930"><span class="linenos">3930</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-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a>
+</span><span id="Parser-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3933"><a href="#Parser-3933"><span class="linenos">3933</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-3934"><a href="#Parser-3934"><span class="linenos">3934</span></a>
+</span><span id="Parser-3935"><a href="#Parser-3935"><span class="linenos">3935</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-3936"><a href="#Parser-3936"><span class="linenos">3936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="p">)</span>
+</span><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a>
+</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</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-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3941"><a href="#Parser-3941"><span class="linenos">3941</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-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</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-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</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-3946"><a href="#Parser-3946"><span class="linenos">3946</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-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">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</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="kc">None</span>
+</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a>
+</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</span></a> <span class="bp">self</span><span 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-3953"><a href="#Parser-3953"><span class="linenos">3953</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-3954"><a href="#Parser-3954"><span class="linenos">3954</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-3955"><a href="#Parser-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">END</span><span class="p">)</span>
+</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="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-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a>
+</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
+</span><span id="Parser-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</span></a>
-</span><span id="Parser-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
-</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</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-3967"><a href="#Parser-3967"><span class="linenos">3967</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-3968"><a href="#Parser-3968"><span class="linenos">3968</span></a> <span class="bp">self</span><span 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-3969"><a href="#Parser-3969"><span class="linenos">3969</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-3970"><a href="#Parser-3970"><span class="linenos">3970</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-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a>
-</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</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-3973"><a href="#Parser-3973"><span class="linenos">3973</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a>
-</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="k">def</span> <span class="nf">_parse_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">JSONObject</span><span class="p">:</span>
-</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">star</span><span class="p">]</span> <span class="k">if</span> <span class="n">star</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
+</span><span id="Parser-3968"><a href="#Parser-3968"><span class="linenos">3968</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-3969"><a href="#Parser-3969"><span class="linenos">3969</span></a> <span class="p">)</span>
+</span><span id="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a>
+</span><span id="Parser-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
+</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</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-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">if</span> <span class="bp">self</span><span 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-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3978"><a href="#Parser-3978"><span class="linenos">3978</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-3979"><a href="#Parser-3979"><span class="linenos">3979</span></a>
-</span><span id="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a> <span class="k">if</span> <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-3982"><a href="#Parser-3982"><span class="linenos">3982</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-3983"><a href="#Parser-3983"><span class="linenos">3983</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-3984"><a href="#Parser-3984"><span class="linenos">3984</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-3985"><a href="#Parser-3985"><span class="linenos">3985</span></a>
-</span><span id="Parser-3986"><a href="#Parser-3986"><span class="linenos">3986</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3987"><a href="#Parser-3987"><span class="linenos">3987</span></a> <span class="k">if</span> <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-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</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-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</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">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-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_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
+</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
+</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a>
-</span><span id="Parser-3992"><a href="#Parser-3992"><span class="linenos">3992</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-3992"><a href="#Parser-3992"><span class="linenos">3992</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
</span><span id="Parser-3993"><a href="#Parser-3993"><span class="linenos">3993</span></a>
-</span><span id="Parser-3994"><a href="#Parser-3994"><span class="linenos">3994</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-3995"><a href="#Parser-3995"><span class="linenos">3995</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-3996"><a href="#Parser-3996"><span class="linenos">3996</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-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a>
-</span><span id="Parser-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <span class="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-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</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-4002"><a href="#Parser-4002"><span class="linenos">4002</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-4003"><a href="#Parser-4003"><span class="linenos">4003</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-4004"><a href="#Parser-4004"><span class="linenos">4004</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-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</span></a> <span class="p">)</span>
-</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</span></a>
-</span><span id="Parser-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">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">Func</span><span class="p">:</span>
-</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="c1"># Default argument order is base, expression</span>
-</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</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-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">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-4013"><a href="#Parser-4013"><span class="linenos">4013</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-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
-</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</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-3994"><a href="#Parser-3994"><span class="linenos">3994</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-3995"><a href="#Parser-3995"><span class="linenos">3995</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-3996"><a href="#Parser-3996"><span class="linenos">3996</span></a>
+</span><span id="Parser-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-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="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-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a>
+</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4004"><a href="#Parser-4004"><span class="linenos">4004</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-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="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</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-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</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-4011"><a href="#Parser-4011"><span class="linenos">4011</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4012"><a href="#Parser-4012"><span class="linenos">4012</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-4013"><a href="#Parser-4013"><span class="linenos">4013</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">FORMAT</span><span class="p">):</span>
+</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</span></a>
-</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a> <span class="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-4018"><a href="#Parser-4018"><span class="linenos">4018</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-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a> <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_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
-</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</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-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a>
-</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</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-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="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-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;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-4029"><a href="#Parser-4029"><span class="linenos">4029</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-4030"><a href="#Parser-4030"><span class="linenos">4030</span></a> <span class="k">if</span> <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-4031"><a href="#Parser-4031"><span class="linenos">4031</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-4032"><a href="#Parser-4032"><span class="linenos">4032</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-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</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-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4038"><a href="#Parser-4038"><span class="linenos">4038</span></a>
-</span><span id="Parser-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</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-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="p">)</span>
-</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a>
-</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
-</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
-</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</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-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-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">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
-</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4050"><a href="#Parser-4050"><span class="linenos">4050</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-4051"><a href="#Parser-4051"><span class="linenos">4051</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
-</span><span id="Parser-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">return</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">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
-</span><span id="Parser-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><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="Parser-4060"><a href="#Parser-4060"><span class="linenos">4060</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-4061"><a href="#Parser-4061"><span class="linenos">4061</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
-</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a>
-</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a> <span class="n">this</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-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
+</span><span id="Parser-4020"><a href="#Parser-4020"><span class="linenos">4020</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4021"><a href="#Parser-4021"><span class="linenos">4021</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="Parser-4025"><a href="#Parser-4025"><span class="linenos">4025</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
+</span><span id="Parser-4026"><a href="#Parser-4026"><span class="linenos">4026</span></a> <span class="p">)</span>
+</span><span id="Parser-4027"><a href="#Parser-4027"><span class="linenos">4027</span></a> <span class="p">),</span>
+</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a> <span class="p">)</span>
+</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</span></a>
+</span><span id="Parser-4030"><a href="#Parser-4030"><span class="linenos">4030</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
+</span><span id="Parser-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
+</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a>
+</span><span id="Parser-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</span></a>
+</span><span id="Parser-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">)</span>
+</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a>
+</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="k">def</span> <span class="nf">_parse_concat</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4038"><a href="#Parser-4038"><span class="linenos">4038</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-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONCAT_NULL_OUTPUTS_STRING</span><span class="p">:</span>
+</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span>
+</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a> <span class="k">if</span> <span class="n">arg</span>
+</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a> <span class="p">]</span>
+</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</span></a>
+</span><span id="Parser-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a> <span class="c1"># Some dialects (e.g. Trino) don&#39;t allow a single-argument CONCAT call, so when</span>
+</span><span id="Parser-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a> <span class="c1"># we find such a call we replace it with its argument.</span>
+</span><span id="Parser-4048"><a href="#Parser-4048"><span class="linenos">4048</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="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</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="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-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span>
+</span><span id="Parser-4053"><a href="#Parser-4053"><span class="linenos">4053</span></a> <span class="p">)</span>
+</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</span></a>
+</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</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-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4057"><a href="#Parser-4057"><span class="linenos">4057</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
+</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a> <span class="p">]</span>
+</span><span id="Parser-4060"><a href="#Parser-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</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-4061"><a href="#Parser-4061"><span class="linenos">4061</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
+</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-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">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="Parser-4066"><a href="#Parser-4066"><span class="linenos">4066</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-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a>
-</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">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-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a> <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">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="Parser-4074"><a href="#Parser-4074"><span class="linenos">4074</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-4075"><a href="#Parser-4075"><span class="linenos">4075</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-4076"><a href="#Parser-4076"><span class="linenos">4076</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</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-4078"><a href="#Parser-4078"><span class="linenos">4078</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</span></a> <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">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
-</span><span id="Parser-4085"><a href="#Parser-4085"><span class="linenos">4085</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-4086"><a href="#Parser-4086"><span class="linenos">4086</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-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">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
-</span><span id="Parser-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</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="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-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">if</span> <span class="bp">self</span><span 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-4095"><a href="#Parser-4095"><span class="linenos">4095</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-4096"><a href="#Parser-4096"><span class="linenos">4096</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4097"><a href="#Parser-4097"><span class="linenos">4097</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-4098"><a href="#Parser-4098"><span class="linenos">4098</span></a>
-</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</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-4066"><a href="#Parser-4066"><span class="linenos">4066</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="Parser-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
+</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
+</span><span id="Parser-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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="Parser-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a>
+</span><span id="Parser-4072"><a href="#Parser-4072"><span class="linenos">4072</span></a> <span class="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-4073"><a href="#Parser-4073"><span class="linenos">4073</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-4074"><a href="#Parser-4074"><span class="linenos">4074</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-4075"><a href="#Parser-4075"><span class="linenos">4075</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</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-4077"><a href="#Parser-4077"><span class="linenos">4077</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4078"><a href="#Parser-4078"><span class="linenos">4078</span></a>
+</span><span id="Parser-4079"><a href="#Parser-4079"><span class="linenos">4079</span></a> <span class="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-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4082"><a href="#Parser-4082"><span class="linenos">4082</span></a>
+</span><span id="Parser-4083"><a href="#Parser-4083"><span class="linenos">4083</span></a> <span class="k">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-4084"><a href="#Parser-4084"><span class="linenos">4084</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-4085"><a href="#Parser-4085"><span class="linenos">4085</span></a>
+</span><span id="Parser-4086"><a href="#Parser-4086"><span class="linenos">4086</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-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="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-4091"><a href="#Parser-4091"><span class="linenos">4091</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-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">to</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">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-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_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
+</span><span id="Parser-4098"><a href="#Parser-4098"><span class="linenos">4098</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a>
-</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
-</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
-</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a>
-</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a>
-</span><span id="Parser-4108"><a href="#Parser-4108"><span class="linenos">4108</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="Parser-4109"><a href="#Parser-4109"><span class="linenos">4109</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-4110"><a href="#Parser-4110"><span class="linenos">4110</span></a>
-</span><span id="Parser-4111"><a href="#Parser-4111"><span class="linenos">4111</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-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_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-4113"><a href="#Parser-4113"><span class="linenos">4113</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-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-4116"><a href="#Parser-4116"><span class="linenos">4116</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4117"><a href="#Parser-4117"><span class="linenos">4117</span></a>
-</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4119"><a href="#Parser-4119"><span class="linenos">4119</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
-</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="p">)</span>
-</span><span id="Parser-4124"><a href="#Parser-4124"><span class="linenos">4124</span></a>
-</span><span id="Parser-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="k">def</span> <span class="nf">_parse_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-4126"><a href="#Parser-4126"><span class="linenos">4126</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-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">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-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_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-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="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
-</span><span id="Parser-4132"><a href="#Parser-4132"><span class="linenos">4132</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-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-4135"><a href="#Parser-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">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-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-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">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-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a>
-</span><span id="Parser-4140"><a href="#Parser-4140"><span class="linenos">4140</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="Parser-4141"><a href="#Parser-4141"><span class="linenos">4141</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-4142"><a href="#Parser-4142"><span class="linenos">4142</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4144"><a href="#Parser-4144"><span class="linenos">4144</span></a> <span class="bp">self</span><span 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-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">expression</span><span class="p">(</span>
-</span><span id="Parser-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a> <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">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a>
-</span><span id="Parser-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</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-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="Parser-4153"><a href="#Parser-4153"><span class="linenos">4153</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-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-4155"><a href="#Parser-4155"><span class="linenos">4155</span></a>
-</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="Parser-4158"><a href="#Parser-4158"><span class="linenos">4158</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</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="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</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="c1"># The below changes handle</span>
-</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</span></a>
-</span><span id="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="Parser-4167"><a href="#Parser-4167"><span class="linenos">4167</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-4168"><a href="#Parser-4168"><span class="linenos">4168</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="Parser-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="Parser-4170"><a href="#Parser-4170"><span class="linenos">4170</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-4171"><a href="#Parser-4171"><span class="linenos">4171</span></a>
-</span><span id="Parser-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4175"><a href="#Parser-4175"><span class="linenos">4175</span></a> <span class="bp">self</span><span 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-4176"><a href="#Parser-4176"><span class="linenos">4176</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-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</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-4180"><a href="#Parser-4180"><span class="linenos">4180</span></a>
-</span><span id="Parser-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4182"><a href="#Parser-4182"><span class="linenos">4182</span></a> <span class="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-4183"><a href="#Parser-4183"><span class="linenos">4183</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-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a> <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="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-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a>
-</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</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-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="k">if</span> <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-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a>
-</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</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-4193"><a href="#Parser-4193"><span class="linenos">4193</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-4194"><a href="#Parser-4194"><span class="linenos">4194</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-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a><span class="sd"> - DECODE(bin, charset)</span>
+</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
+</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a>
+</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-4108"><a href="#Parser-4108"><span class="linenos">4108</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-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="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-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">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-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="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-4114"><a href="#Parser-4114"><span class="linenos">4114</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-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a> <span class="k">return</span> <span class="kc">None</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="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</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-4119"><a href="#Parser-4119"><span class="linenos">4119</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-4120"><a href="#Parser-4120"><span class="linenos">4120</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</span></a>
+</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a> <span class="k">if</span> <span class="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-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4124"><a href="#Parser-4124"><span class="linenos">4124</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-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="p">)</span>
+</span><span id="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</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-4127"><a href="#Parser-4127"><span class="linenos">4127</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4128"><a href="#Parser-4128"><span class="linenos">4128</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-4129"><a href="#Parser-4129"><span class="linenos">4129</span></a> <span class="p">)</span>
+</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</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-4132"><a href="#Parser-4132"><span class="linenos">4132</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-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</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-4135"><a href="#Parser-4135"><span class="linenos">4135</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-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4137"><a href="#Parser-4137"><span class="linenos">4137</span></a> <span class="p">),</span>
+</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a> <span class="p">)</span>
+</span><span id="Parser-4140"><a href="#Parser-4140"><span class="linenos">4140</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-4141"><a href="#Parser-4141"><span class="linenos">4141</span></a>
+</span><span id="Parser-4142"><a href="#Parser-4142"><span class="linenos">4142</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-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="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
+</span><span id="Parser-4145"><a href="#Parser-4145"><span class="linenos">4145</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-4146"><a href="#Parser-4146"><span class="linenos">4146</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-4147"><a href="#Parser-4147"><span class="linenos">4147</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">COLON</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-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;VALUE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</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-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a>
+</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="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-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4153"><a href="#Parser-4153"><span class="linenos">4153</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a>
+</span><span id="Parser-4155"><a href="#Parser-4155"><span class="linenos">4155</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">JSONObject</span><span class="p">:</span>
+</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">star</span><span class="p">]</span> <span class="k">if</span> <span class="n">star</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">)</span>
+</span><span id="Parser-4158"><a href="#Parser-4158"><span class="linenos">4158</span></a>
+</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4160"><a href="#Parser-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_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-4161"><a href="#Parser-4161"><span class="linenos">4161</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-4162"><a href="#Parser-4162"><span class="linenos">4162</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-4163"><a href="#Parser-4163"><span class="linenos">4163</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-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a>
+</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a> <span class="k">if</span> <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-4167"><a href="#Parser-4167"><span class="linenos">4167</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</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-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</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="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-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">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-4174"><a href="#Parser-4174"><span class="linenos">4174</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-4175"><a href="#Parser-4175"><span class="linenos">4175</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-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="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-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</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-4181"><a href="#Parser-4181"><span class="linenos">4181</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-4182"><a href="#Parser-4182"><span class="linenos">4182</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-4183"><a href="#Parser-4183"><span class="linenos">4183</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-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</span></a> <span class="p">)</span>
+</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a>
+</span><span id="Parser-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a> <span class="k">def</span> <span class="nf">_parse_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">Func</span><span class="p">:</span>
+</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a> <span class="c1"># Default argument order is base, expression</span>
+</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</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-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a>
+</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</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-4192"><a href="#Parser-4192"><span class="linenos">4192</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-4193"><a href="#Parser-4193"><span class="linenos">4193</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</span><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="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-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">if</span> <span class="n">kind</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">BETWEEN</span><span class="p">)</span>
-</span><span id="Parser-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
-</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4200"><a href="#Parser-4200"><span class="linenos">4200</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-4201"><a href="#Parser-4201"><span class="linenos">4201</span></a>
-</span><span id="Parser-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a> <span class="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-4203"><a href="#Parser-4203"><span class="linenos">4203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="Parser-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</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-4206"><a href="#Parser-4206"><span class="linenos">4206</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-4207"><a href="#Parser-4207"><span class="linenos">4207</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-4208"><a href="#Parser-4208"><span class="linenos">4208</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-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="p">)</span>
-</span><span id="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a>
-</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a>
-</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</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-4219"><a href="#Parser-4219"><span class="linenos">4219</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</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-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
-</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
-</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</span></a> <span class="p">)</span>
-</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a>
-</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
-</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</span></a>
-</span><span id="Parser-4230"><a href="#Parser-4230"><span class="linenos">4230</span></a> <span class="k">return</span> <span class="n">window</span>
-</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a>
-</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</span></a> <span class="k">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-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a> <span class="bp">self</span><span 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-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a>
-</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
-</span><span id="Parser-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
-</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</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-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="p">),</span>
-</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</span></a> <span class="p">}</span>
+</span><span id="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</span></a> <span class="k">return</span> <span class="bp">self</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="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-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="p">)</span>
+</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a>
+</span><span id="Parser-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
+</span><span id="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</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-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_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-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a>
+</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a> <span class="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-4206"><a href="#Parser-4206"><span class="linenos">4206</span></a>
+</span><span id="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</span></a> <span class="k">if</span> <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-4208"><a href="#Parser-4208"><span class="linenos">4208</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-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="k">if</span> <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-4210"><a href="#Parser-4210"><span class="linenos">4210</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-4211"><a href="#Parser-4211"><span class="linenos">4211</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-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</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-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a>
+</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</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-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a> <span class="p">)</span>
+</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</span></a>
+</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
+</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
+</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</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-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a>
+</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
+</span><span id="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</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-4230"><a href="#Parser-4230"><span class="linenos">4230</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
+</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</span></a>
+</span><span id="Parser-4233"><a href="#Parser-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><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
+</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="p">)</span>
+</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a>
+</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</span></a> <span class="n">expressions</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</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-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
+</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a>
+</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-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="k">def</span> <span class="nf">_parse_alias</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="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-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</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-4248"><a href="#Parser-4248"><span class="linenos">4248</span></a>
-</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</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-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</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-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a>
+</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</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-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="p">)</span>
</span><span id="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</span></a>
-</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-4253"><a href="#Parser-4253"><span class="linenos">4253</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-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</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-4257"><a href="#Parser-4257"><span class="linenos">4257</span></a> <span class="p">)</span>
-</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</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-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="k">return</span> <span class="n">aliases</span>
-</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a>
-</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a> <span class="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-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</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-4254"><a href="#Parser-4254"><span class="linenos">4254</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-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</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-4257"><a href="#Parser-4257"><span class="linenos">4257</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-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a>
+</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="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-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-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">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4265"><a href="#Parser-4265"><span class="linenos">4265</span></a>
-</span><span id="Parser-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a>
-</span><span id="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</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-4271"><a href="#Parser-4271"><span class="linenos">4271</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-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</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-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">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="Parser-4276"><a href="#Parser-4276"><span class="linenos">4276</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="Parser-4263"><a href="#Parser-4263"><span class="linenos">4263</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
+</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</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-4265"><a href="#Parser-4265"><span class="linenos">4265</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-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a>
+</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="k">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
+</span><span id="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
+</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a>
+</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
+</span><span id="Parser-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a>
+</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4274"><a href="#Parser-4274"><span class="linenos">4274</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-4275"><a href="#Parser-4275"><span class="linenos">4275</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4276"><a href="#Parser-4276"><span class="linenos">4276</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-4277"><a href="#Parser-4277"><span class="linenos">4277</span></a>
-</span><span id="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a> <span class="k">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-4279"><a href="#Parser-4279"><span class="linenos">4279</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-4280"><a href="#Parser-4280"><span class="linenos">4280</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
-</span><span id="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a>
-</span><span id="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</span></a>
+</span><span id="Parser-4280"><a href="#Parser-4280"><span class="linenos">4280</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
+</span><span id="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
</span><span id="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</span></a>
-</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</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-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4286"><a href="#Parser-4286"><span class="linenos">4286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4287"><a href="#Parser-4287"><span class="linenos">4287</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-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_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
-</span><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</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-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a>
-</span><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</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-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4294"><a href="#Parser-4294"><span class="linenos">4294</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-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</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-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="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-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_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-4292"><a href="#Parser-4292"><span class="linenos">4292</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-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</span></a>
-</span><span id="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</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-4298"><a href="#Parser-4298"><span class="linenos">4298</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4299"><a href="#Parser-4299"><span class="linenos">4299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4300"><a href="#Parser-4300"><span class="linenos">4300</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-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">_parse_var</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">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-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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-4306"><a href="#Parser-4306"><span class="linenos">4306</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-4307"><a href="#Parser-4307"><span class="linenos">4307</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-4308"><a href="#Parser-4308"><span class="linenos">4308</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-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a> <span class="p">):</span>
-</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4311"><a href="#Parser-4311"><span class="linenos">4311</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-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a>
-</span><span id="Parser-4313"><a href="#Parser-4313"><span class="linenos">4313</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-4314"><a href="#Parser-4314"><span class="linenos">4314</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-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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-4298"><a href="#Parser-4298"><span class="linenos">4298</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-4299"><a href="#Parser-4299"><span class="linenos">4299</span></a>
+</span><span id="Parser-4300"><a href="#Parser-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="Parser-4301"><a href="#Parser-4301"><span class="linenos">4301</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
+</span><span id="Parser-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="p">)</span>
+</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</span></a>
+</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</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-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a>
+</span><span id="Parser-4307"><a href="#Parser-4307"><span class="linenos">4307</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-4308"><a href="#Parser-4308"><span class="linenos">4308</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-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a>
+</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</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-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-4314"><a href="#Parser-4314"><span class="linenos">4314</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-4316"><a href="#Parser-4316"><span class="linenos">4316</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</span></a>
-</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">def</span> <span class="nf">_parse_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-4320"><a href="#Parser-4320"><span class="linenos">4320</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-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_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-4323"><a href="#Parser-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</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-4324"><a href="#Parser-4324"><span class="linenos">4324</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-4325"><a href="#Parser-4325"><span class="linenos">4325</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-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a>
-</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="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-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4329"><a href="#Parser-4329"><span class="linenos">4329</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-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4332"><a href="#Parser-4332"><span class="linenos">4332</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-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">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-4335"><a href="#Parser-4335"><span class="linenos">4335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
-</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</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-4337"><a href="#Parser-4337"><span class="linenos">4337</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-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">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-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a> <span class="bp">self</span><span 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-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a> <span class="n">this</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-4325"><a href="#Parser-4325"><span class="linenos">4325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a> <span class="p">)</span>
+</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</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-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="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="Parser-4330"><a href="#Parser-4330"><span class="linenos">4330</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-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</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-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span 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-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="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="Parser-4337"><a href="#Parser-4337"><span class="linenos">4337</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="Parser-4338"><a href="#Parser-4338"><span class="linenos">4338</span></a>
-</span><span id="Parser-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
-</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</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-4341"><a href="#Parser-4341"><span class="linenos">4341</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_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><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">_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-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="Parser-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a>
+</span><span id="Parser-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</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">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-4346"><a href="#Parser-4346"><span class="linenos">4346</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4347"><a href="#Parser-4347"><span class="linenos">4347</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-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="k">if</span> <span class="n">placeholder</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="n">placeholder</span>
-</span><span id="Parser-4350"><a href="#Parser-4350"><span class="linenos">4350</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-4351"><a href="#Parser-4351"><span class="linenos">4351</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a>
-</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</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-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4355"><a href="#Parser-4355"><span class="linenos">4355</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4357"><a href="#Parser-4357"><span class="linenos">4357</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-4358"><a href="#Parser-4358"><span class="linenos">4358</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-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="Parser-4346"><a href="#Parser-4346"><span class="linenos">4346</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-4347"><a href="#Parser-4347"><span class="linenos">4347</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="Parser-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</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="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="bp">self</span><span 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-4355"><a href="#Parser-4355"><span class="linenos">4355</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-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</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-4359"><a href="#Parser-4359"><span class="linenos">4359</span></a>
-</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="k">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-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4362"><a href="#Parser-4362"><span class="linenos">4362</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4363"><a href="#Parser-4363"><span class="linenos">4363</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><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-4364"><a href="#Parser-4364"><span class="linenos">4364</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-4365"><a href="#Parser-4365"><span class="linenos">4365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="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-4362"><a href="#Parser-4362"><span class="linenos">4362</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-4363"><a href="#Parser-4363"><span class="linenos">4363</span></a> <span class="p">)</span>
+</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</span></a>
+</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</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-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">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</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-4369"><a href="#Parser-4369"><span class="linenos">4369</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-4370"><a href="#Parser-4370"><span class="linenos">4370</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-4371"><a href="#Parser-4371"><span class="linenos">4371</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-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">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-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</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-4376"><a href="#Parser-4376"><span class="linenos">4376</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-4377"><a href="#Parser-4377"><span class="linenos">4377</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-4378"><a href="#Parser-4378"><span class="linenos">4378</span></a>
-</span><span id="Parser-4379"><a href="#Parser-4379"><span class="linenos">4379</span></a> <span class="k">return</span> <span class="n">items</span>
-</span><span id="Parser-4380"><a href="#Parser-4380"><span class="linenos">4380</span></a>
-</span><span id="Parser-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
-</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</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-4383"><a href="#Parser-4383"><span class="linenos">4383</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4384"><a href="#Parser-4384"><span class="linenos">4384</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-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">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-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="n">this</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-4388"><a href="#Parser-4388"><span class="linenos">4388</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-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4390"><a href="#Parser-4390"><span class="linenos">4390</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-4391"><a href="#Parser-4391"><span class="linenos">4391</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-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a> <span class="p">)</span>
-</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a>
-</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a>
-</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
-</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</span></a>
-</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</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-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
-</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
-</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="p">)</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">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
-</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
-</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="Parser-4410"><a href="#Parser-4410"><span class="linenos">4410</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-4411"><a href="#Parser-4411"><span class="linenos">4411</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
-</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</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-4413"><a href="#Parser-4413"><span class="linenos">4413</span></a> <span class="k">return</span> <span class="n">parse_result</span>
+</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</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-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a> <span class="k">if</span> <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-4369"><a href="#Parser-4369"><span class="linenos">4369</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</span></a>
+</span><span id="Parser-4371"><a href="#Parser-4371"><span class="linenos">4371</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
+</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</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-4373"><a href="#Parser-4373"><span class="linenos">4373</span></a>
+</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="k">if</span> <span class="n">kind</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">_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-4376"><a href="#Parser-4376"><span class="linenos">4376</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-4377"><a href="#Parser-4377"><span class="linenos">4377</span></a> <span class="bp">self</span><span 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-4378"><a href="#Parser-4378"><span class="linenos">4378</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-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="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-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</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-4384"><a href="#Parser-4384"><span class="linenos">4384</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-4385"><a href="#Parser-4385"><span class="linenos">4385</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-4386"><a href="#Parser-4386"><span class="linenos">4386</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-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="p">)</span>
+</span><span id="Parser-4388"><a href="#Parser-4388"><span class="linenos">4388</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="n">spec</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a>
+</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</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-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</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-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a> <span class="p">)</span>
+</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a>
+</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
+</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a>
+</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a> <span class="k">return</span> <span class="n">window</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">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="Parser-4411"><a href="#Parser-4411"><span class="linenos">4411</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-4413"><a href="#Parser-4413"><span class="linenos">4413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
</span><span id="Parser-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a>
-</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</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-4415"><a href="#Parser-4415"><span class="linenos">4415</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-4416"><a href="#Parser-4416"><span class="linenos">4416</span></a> <span class="bp">self</span><span 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-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a>
-</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a> <span class="p">)</span>
-</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</span></a>
-</span><span id="Parser-4423"><a href="#Parser-4423"><span class="linenos">4423</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-4424"><a href="#Parser-4424"><span class="linenos">4424</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a> <span class="p">)</span>
-</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</span></a>
-</span><span id="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</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-4431"><a href="#Parser-4431"><span class="linenos">4431</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-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a>
-</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a> <span class="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-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
+</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
+</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</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-4423"><a href="#Parser-4423"><span class="linenos">4423</span></a> <span class="p">),</span>
+</span><span id="Parser-4424"><a href="#Parser-4424"><span class="linenos">4424</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a> <span class="p">}</span>
+</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a>
+</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</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-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</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-4431"><a href="#Parser-4431"><span class="linenos">4431</span></a>
+</span><span id="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</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-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a>
-</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</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-4439"><a href="#Parser-4439"><span class="linenos">4439</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-4440"><a href="#Parser-4440"><span class="linenos">4440</span></a>
-</span><span id="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="Parser-4442"><a href="#Parser-4442"><span class="linenos">4442</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-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a> <span class="k">break</span>
+</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4436"><a href="#Parser-4436"><span class="linenos">4436</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-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4439"><a href="#Parser-4439"><span class="linenos">4439</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-4440"><a href="#Parser-4440"><span class="linenos">4440</span></a> <span class="p">)</span>
+</span><span id="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</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-4442"><a href="#Parser-4442"><span class="linenos">4442</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="Parser-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a>
+</span><span id="Parser-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a> <span class="n">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-4445"><a href="#Parser-4445"><span class="linenos">4445</span></a>
-</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a>
-</span><span id="Parser-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</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-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a>
-</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a> <span class="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-4454"><a href="#Parser-4454"><span class="linenos">4454</span></a>
-</span><span id="Parser-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="k">if</span> <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-4456"><a href="#Parser-4456"><span class="linenos">4456</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-4457"><a href="#Parser-4457"><span class="linenos">4457</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-4458"><a href="#Parser-4458"><span class="linenos">4458</span></a>
-</span><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4460"><a href="#Parser-4460"><span class="linenos">4460</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-4461"><a href="#Parser-4461"><span class="linenos">4461</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-4462"><a href="#Parser-4462"><span class="linenos">4462</span></a>
-</span><span id="Parser-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a>
-</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4467"><a href="#Parser-4467"><span class="linenos">4467</span></a>
-</span><span id="Parser-4468"><a href="#Parser-4468"><span class="linenos">4468</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-4469"><a href="#Parser-4469"><span class="linenos">4469</span></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-4470"><a href="#Parser-4470"><span class="linenos">4470</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a>
+</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a>
+</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</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-4454"><a href="#Parser-4454"><span class="linenos">4454</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-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4456"><a href="#Parser-4456"><span class="linenos">4456</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-4457"><a href="#Parser-4457"><span class="linenos">4457</span></a>
+</span><span id="Parser-4458"><a href="#Parser-4458"><span class="linenos">4458</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="Parser-4460"><a href="#Parser-4460"><span class="linenos">4460</span></a>
+</span><span id="Parser-4461"><a href="#Parser-4461"><span class="linenos">4461</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-4462"><a href="#Parser-4462"><span class="linenos">4462</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-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
+</span><span id="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a>
+</span><span id="Parser-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a>
+</span><span id="Parser-4467"><a href="#Parser-4467"><span class="linenos">4467</span></a> <span class="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-4468"><a href="#Parser-4468"><span class="linenos">4468</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4469"><a href="#Parser-4469"><span class="linenos">4469</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-4470"><a href="#Parser-4470"><span class="linenos">4470</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-4471"><a href="#Parser-4471"><span class="linenos">4471</span></a>
-</span><span id="Parser-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="bp">self</span><span 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-4473"><a href="#Parser-4473"><span class="linenos">4473</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-4474"><a href="#Parser-4474"><span class="linenos">4474</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-4475"><a href="#Parser-4475"><span class="linenos">4475</span></a>
-</span><span id="Parser-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-4477"><a href="#Parser-4477"><span class="linenos">4477</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-4478"><a href="#Parser-4478"><span class="linenos">4478</span></a>
-</span><span id="Parser-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4481"><a href="#Parser-4481"><span class="linenos">4481</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-4482"><a href="#Parser-4482"><span class="linenos">4482</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-4483"><a href="#Parser-4483"><span class="linenos">4483</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-4484"><a href="#Parser-4484"><span class="linenos">4484</span></a> <span class="p">)</span>
-</span><span id="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</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-4486"><a href="#Parser-4486"><span class="linenos">4486</span></a>
-</span><span id="Parser-4487"><a href="#Parser-4487"><span class="linenos">4487</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a>
-</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="Parser-4490"><a href="#Parser-4490"><span class="linenos">4490</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-4491"><a href="#Parser-4491"><span class="linenos">4491</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-4492"><a href="#Parser-4492"><span class="linenos">4492</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-4493"><a href="#Parser-4493"><span class="linenos">4493</span></a> <span class="k">return</span> <span class="n">drop</span>
-</span><span id="Parser-4494"><a href="#Parser-4494"><span class="linenos">4494</span></a>
-</span><span id="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="Parser-4496"><a href="#Parser-4496"><span class="linenos">4496</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
-</span><span id="Parser-4497"><a href="#Parser-4497"><span class="linenos">4497</span></a> <span class="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-4498"><a href="#Parser-4498"><span class="linenos">4498</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-4499"><a href="#Parser-4499"><span class="linenos">4499</span></a> <span class="p">)</span>
-</span><span id="Parser-4500"><a href="#Parser-4500"><span class="linenos">4500</span></a>
-</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
-</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4503"><a href="#Parser-4503"><span class="linenos">4503</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-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
+</span><span id="Parser-4473"><a href="#Parser-4473"><span class="linenos">4473</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-4474"><a href="#Parser-4474"><span class="linenos">4474</span></a>
+</span><span id="Parser-4475"><a href="#Parser-4475"><span class="linenos">4475</span></a> <span class="k">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-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4477"><a href="#Parser-4477"><span class="linenos">4477</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4478"><a href="#Parser-4478"><span class="linenos">4478</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-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a>
+</span><span id="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</span></a> <span class="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-4481"><a href="#Parser-4481"><span class="linenos">4481</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4482"><a href="#Parser-4482"><span class="linenos">4482</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4483"><a href="#Parser-4483"><span class="linenos">4483</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-4484"><a href="#Parser-4484"><span class="linenos">4484</span></a>
+</span><span id="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="Parser-4486"><a href="#Parser-4486"><span class="linenos">4486</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-4487"><a href="#Parser-4487"><span class="linenos">4487</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</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-4490"><a href="#Parser-4490"><span class="linenos">4490</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-4491"><a href="#Parser-4491"><span class="linenos">4491</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-4492"><a href="#Parser-4492"><span class="linenos">4492</span></a> <span class="p">):</span>
+</span><span id="Parser-4493"><a href="#Parser-4493"><span class="linenos">4493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4494"><a href="#Parser-4494"><span class="linenos">4494</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a>
+</span><span id="Parser-4496"><a href="#Parser-4496"><span class="linenos">4496</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-4497"><a href="#Parser-4497"><span class="linenos">4497</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4498"><a href="#Parser-4498"><span class="linenos">4498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4499"><a href="#Parser-4499"><span class="linenos">4499</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-4500"><a href="#Parser-4500"><span class="linenos">4500</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a>
+</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</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-4503"><a href="#Parser-4503"><span class="linenos">4503</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-4504"><a href="#Parser-4504"><span class="linenos">4504</span></a>
-</span><span id="Parser-4505"><a href="#Parser-4505"><span class="linenos">4505</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-4506"><a href="#Parser-4506"><span class="linenos">4506</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-4507"><a href="#Parser-4507"><span class="linenos">4507</span></a>
-</span><span id="Parser-4508"><a href="#Parser-4508"><span class="linenos">4508</span></a> <span class="k">if</span> <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-4509"><a href="#Parser-4509"><span class="linenos">4509</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-4510"><a href="#Parser-4510"><span class="linenos">4510</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-4511"><a href="#Parser-4511"><span class="linenos">4511</span></a>
-</span><span id="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</span></a> <span class="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-4513"><a href="#Parser-4513"><span class="linenos">4513</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-4514"><a href="#Parser-4514"><span class="linenos">4514</span></a> <span class="p">)</span>
-</span><span id="Parser-4515"><a href="#Parser-4515"><span class="linenos">4515</span></a>
-</span><span id="Parser-4516"><a href="#Parser-4516"><span class="linenos">4516</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-4517"><a href="#Parser-4517"><span class="linenos">4517</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-4518"><a href="#Parser-4518"><span class="linenos">4518</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-4519"><a href="#Parser-4519"><span class="linenos">4519</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-4520"><a href="#Parser-4520"><span class="linenos">4520</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4522"><a href="#Parser-4522"><span class="linenos">4522</span></a>
-</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4524"><a href="#Parser-4524"><span class="linenos">4524</span></a>
-</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</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-4526"><a href="#Parser-4526"><span class="linenos">4526</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-4505"><a href="#Parser-4505"><span class="linenos">4505</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-4506"><a href="#Parser-4506"><span class="linenos">4506</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4507"><a href="#Parser-4507"><span class="linenos">4507</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-4508"><a href="#Parser-4508"><span class="linenos">4508</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-4509"><a href="#Parser-4509"><span class="linenos">4509</span></a>
+</span><span id="Parser-4510"><a href="#Parser-4510"><span class="linenos">4510</span></a> <span class="k">def</span> <span class="nf">_parse_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-4511"><a href="#Parser-4511"><span class="linenos">4511</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
+</span><span id="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</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-4513"><a href="#Parser-4513"><span class="linenos">4513</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4514"><a href="#Parser-4514"><span class="linenos">4514</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-4515"><a href="#Parser-4515"><span class="linenos">4515</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-4516"><a href="#Parser-4516"><span class="linenos">4516</span></a>
+</span><span id="Parser-4517"><a href="#Parser-4517"><span class="linenos">4517</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-4518"><a href="#Parser-4518"><span class="linenos">4518</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4519"><a href="#Parser-4519"><span class="linenos">4519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-4520"><a href="#Parser-4520"><span class="linenos">4520</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-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a>
+</span><span id="Parser-4522"><a href="#Parser-4522"><span class="linenos">4522</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
+</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</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-4524"><a href="#Parser-4524"><span class="linenos">4524</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_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</span></a> <span class="bp">self</span><span 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-4526"><a href="#Parser-4526"><span class="linenos">4526</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4527"><a href="#Parser-4527"><span class="linenos">4527</span></a>
-</span><span id="Parser-4528"><a href="#Parser-4528"><span class="linenos">4528</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-4529"><a href="#Parser-4529"><span class="linenos">4529</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-4530"><a href="#Parser-4530"><span class="linenos">4530</span></a>
-</span><span id="Parser-4531"><a href="#Parser-4531"><span class="linenos">4531</span></a> <span class="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-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_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-4533"><a href="#Parser-4533"><span class="linenos">4533</span></a>
-</span><span id="Parser-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
-</span><span id="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a> <span class="bp">self</span><span 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-4536"><a href="#Parser-4536"><span class="linenos">4536</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-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a>
-</span><span id="Parser-4538"><a href="#Parser-4538"><span class="linenos">4538</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-4539"><a href="#Parser-4539"><span class="linenos">4539</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span 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-4540"><a href="#Parser-4540"><span class="linenos">4540</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-4541"><a href="#Parser-4541"><span class="linenos">4541</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4528"><a href="#Parser-4528"><span class="linenos">4528</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-4529"><a href="#Parser-4529"><span class="linenos">4529</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-4530"><a href="#Parser-4530"><span class="linenos">4530</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-4531"><a href="#Parser-4531"><span class="linenos">4531</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="Parser-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="Parser-4533"><a href="#Parser-4533"><span class="linenos">4533</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-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a>
+</span><span id="Parser-4536"><a href="#Parser-4536"><span class="linenos">4536</span></a> <span class="k">def</span> <span class="nf">_parse_except</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4538"><a href="#Parser-4538"><span class="linenos">4538</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4539"><a href="#Parser-4539"><span class="linenos">4539</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4540"><a href="#Parser-4540"><span class="linenos">4540</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4541"><a href="#Parser-4541"><span class="linenos">4541</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-4542"><a href="#Parser-4542"><span class="linenos">4542</span></a>
-</span><span id="Parser-4543"><a href="#Parser-4543"><span class="linenos">4543</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4544"><a href="#Parser-4544"><span class="linenos">4544</span></a> <span class="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-4545"><a href="#Parser-4545"><span class="linenos">4545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="Parser-4547"><a href="#Parser-4547"><span class="linenos">4547</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-4548"><a href="#Parser-4548"><span class="linenos">4548</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-4549"><a href="#Parser-4549"><span class="linenos">4549</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-4550"><a href="#Parser-4550"><span class="linenos">4550</span></a> <span class="p">)</span>
-</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</span></a>
-</span><span id="Parser-4552"><a href="#Parser-4552"><span class="linenos">4552</span></a> <span class="k">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-4553"><a href="#Parser-4553"><span class="linenos">4553</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-4554"><a href="#Parser-4554"><span class="linenos">4554</span></a>
-</span><span id="Parser-4555"><a href="#Parser-4555"><span class="linenos">4555</span></a> <span class="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-4556"><a href="#Parser-4556"><span class="linenos">4556</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4557"><a href="#Parser-4557"><span class="linenos">4557</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-4558"><a href="#Parser-4558"><span class="linenos">4558</span></a>
-</span><span id="Parser-4559"><a href="#Parser-4559"><span class="linenos">4559</span></a> <span class="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-4560"><a href="#Parser-4560"><span class="linenos">4560</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-4543"><a href="#Parser-4543"><span class="linenos">4543</span></a> <span class="k">def</span> <span class="nf">_parse_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-4544"><a href="#Parser-4544"><span class="linenos">4544</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4545"><a href="#Parser-4545"><span class="linenos">4545</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4547"><a href="#Parser-4547"><span class="linenos">4547</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-4548"><a href="#Parser-4548"><span class="linenos">4548</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="Parser-4549"><a href="#Parser-4549"><span class="linenos">4549</span></a>
+</span><span id="Parser-4550"><a href="#Parser-4550"><span class="linenos">4550</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</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-4552"><a href="#Parser-4552"><span class="linenos">4552</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4553"><a href="#Parser-4553"><span class="linenos">4553</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-4554"><a href="#Parser-4554"><span class="linenos">4554</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-4555"><a href="#Parser-4555"><span class="linenos">4555</span></a>
+</span><span id="Parser-4556"><a href="#Parser-4556"><span class="linenos">4556</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-4557"><a href="#Parser-4557"><span class="linenos">4557</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="Parser-4558"><a href="#Parser-4558"><span class="linenos">4558</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-4559"><a href="#Parser-4559"><span class="linenos">4559</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-4560"><a href="#Parser-4560"><span class="linenos">4560</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-4561"><a href="#Parser-4561"><span class="linenos">4561</span></a>
-</span><span id="Parser-4562"><a href="#Parser-4562"><span class="linenos">4562</span></a> <span class="k">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">RenameTable</span><span class="p">:</span>
-</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4565"><a href="#Parser-4565"><span class="linenos">4565</span></a>
-</span><span id="Parser-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</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-4562"><a href="#Parser-4562"><span class="linenos">4562</span></a> <span class="k">return</span> <span class="n">items</span>
+</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</span></a>
+</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
+</span><span id="Parser-4565"><a href="#Parser-4565"><span class="linenos">4565</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-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</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-4568"><a href="#Parser-4568"><span class="linenos">4568</span></a>
-</span><span id="Parser-4569"><a href="#Parser-4569"><span class="linenos">4569</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4570"><a href="#Parser-4570"><span class="linenos">4570</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-4571"><a href="#Parser-4571"><span class="linenos">4571</span></a>
-</span><span id="Parser-4572"><a href="#Parser-4572"><span class="linenos">4572</span></a> <span class="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-4573"><a href="#Parser-4573"><span class="linenos">4573</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-4574"><a href="#Parser-4574"><span class="linenos">4574</span></a>
-</span><span id="Parser-4575"><a href="#Parser-4575"><span class="linenos">4575</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a>
-</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a> <span class="n">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-4579"><a href="#Parser-4579"><span class="linenos">4579</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</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-4569"><a href="#Parser-4569"><span class="linenos">4569</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-4570"><a href="#Parser-4570"><span class="linenos">4570</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4571"><a href="#Parser-4571"><span class="linenos">4571</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-4572"><a href="#Parser-4572"><span class="linenos">4572</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4573"><a href="#Parser-4573"><span class="linenos">4573</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-4574"><a href="#Parser-4574"><span class="linenos">4574</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-4575"><a href="#Parser-4575"><span class="linenos">4575</span></a> <span class="p">)</span>
+</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</span></a>
+</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a>
+</span><span id="Parser-4579"><a href="#Parser-4579"><span class="linenos">4579</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span><span id="Parser-4581"><a href="#Parser-4581"><span class="linenos">4581</span></a>
-</span><span id="Parser-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="k">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-4583"><a href="#Parser-4583"><span class="linenos">4583</span></a> <span class="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-4584"><a href="#Parser-4584"><span class="linenos">4584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</span></a> <span class="p">)</span>
-</span><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</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-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a>
-</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
-</span><span id="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</span></a> <span class="bp">self</span><span 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-4593"><a href="#Parser-4593"><span class="linenos">4593</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-4594"><a href="#Parser-4594"><span class="linenos">4594</span></a>
-</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4596"><a href="#Parser-4596"><span class="linenos">4596</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-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="Parser-4583"><a href="#Parser-4583"><span class="linenos">4583</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4584"><a href="#Parser-4584"><span class="linenos">4584</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
+</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
+</span><span id="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</span></a> <span class="p">)</span>
+</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</span></a>
+</span><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
+</span><span id="Parser-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
+</span><span id="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</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-4593"><a href="#Parser-4593"><span class="linenos">4593</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-4594"><a href="#Parser-4594"><span class="linenos">4594</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
+</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4596"><a href="#Parser-4596"><span class="linenos">4596</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="Parser-4597"><a href="#Parser-4597"><span class="linenos">4597</span></a>
-</span><span id="Parser-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="bp">self</span><span 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-4599"><a href="#Parser-4599"><span class="linenos">4599</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-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4599"><a href="#Parser-4599"><span class="linenos">4599</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-4600"><a href="#Parser-4600"><span class="linenos">4600</span></a>
-</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</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-4603"><a href="#Parser-4603"><span class="linenos">4603</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-4604"><a href="#Parser-4604"><span class="linenos">4604</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-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</span></a> <span class="kc">False</span>
-</span><span id="Parser-4607"><a href="#Parser-4607"><span class="linenos">4607</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4608"><a href="#Parser-4608"><span class="linenos">4608</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-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="p">)</span>
-</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a> <span class="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-4611"><a href="#Parser-4611"><span class="linenos">4611</span></a>
-</span><span id="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</span></a> <span class="bp">self</span><span 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-4613"><a href="#Parser-4613"><span class="linenos">4613</span></a>
-</span><span id="Parser-4614"><a href="#Parser-4614"><span class="linenos">4614</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4615"><a href="#Parser-4615"><span class="linenos">4615</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-4616"><a href="#Parser-4616"><span class="linenos">4616</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="Parser-4617"><a href="#Parser-4617"><span class="linenos">4617</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-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</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-4620"><a href="#Parser-4620"><span class="linenos">4620</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</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-4622"><a href="#Parser-4622"><span class="linenos">4622</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-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a> <span class="p">)</span>
-</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</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-4625"><a href="#Parser-4625"><span class="linenos">4625</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-4626"><a href="#Parser-4626"><span class="linenos">4626</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</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-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</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-4630"><a href="#Parser-4630"><span class="linenos">4630</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</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-4632"><a href="#Parser-4632"><span class="linenos">4632</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-4633"><a href="#Parser-4633"><span class="linenos">4633</span></a> <span class="p">)</span>
-</span><span id="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</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-4635"><a href="#Parser-4635"><span class="linenos">4635</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-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a>
-</span><span id="Parser-4639"><a href="#Parser-4639"><span class="linenos">4639</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4640"><a href="#Parser-4640"><span class="linenos">4640</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4641"><a href="#Parser-4641"><span class="linenos">4641</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="Parser-4643"><a href="#Parser-4643"><span class="linenos">4643</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="Parser-4644"><a href="#Parser-4644"><span class="linenos">4644</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="Parser-4645"><a href="#Parser-4645"><span class="linenos">4645</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</span></a> <span class="p">)</span>
-</span><span id="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a> <span class="p">)</span>
+</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="Parser-4603"><a href="#Parser-4603"><span class="linenos">4603</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4604"><a href="#Parser-4604"><span class="linenos">4604</span></a> <span class="p">)</span>
+</span><span id="Parser-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a>
+</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</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-4607"><a href="#Parser-4607"><span class="linenos">4607</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="Parser-4608"><a href="#Parser-4608"><span class="linenos">4608</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="p">)</span>
+</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a>
+</span><span id="Parser-4611"><a href="#Parser-4611"><span class="linenos">4611</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4613"><a href="#Parser-4613"><span class="linenos">4613</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-4614"><a href="#Parser-4614"><span class="linenos">4614</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-4615"><a href="#Parser-4615"><span class="linenos">4615</span></a>
+</span><span id="Parser-4616"><a href="#Parser-4616"><span class="linenos">4616</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-4617"><a href="#Parser-4617"><span class="linenos">4617</span></a>
+</span><span id="Parser-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4620"><a href="#Parser-4620"><span class="linenos">4620</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</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-4622"><a href="#Parser-4622"><span class="linenos">4622</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-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a>
+</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="Parser-4625"><a href="#Parser-4625"><span class="linenos">4625</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-4626"><a href="#Parser-4626"><span class="linenos">4626</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</span></a> <span class="k">break</span>
+</span><span id="Parser-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a>
+</span><span id="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4630"><a href="#Parser-4630"><span class="linenos">4630</span></a>
+</span><span id="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="Parser-4632"><a href="#Parser-4632"><span class="linenos">4632</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4633"><a href="#Parser-4633"><span class="linenos">4633</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</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-4635"><a href="#Parser-4635"><span class="linenos">4635</span></a>
+</span><span id="Parser-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a>
+</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a> <span class="k">if</span> <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-4639"><a href="#Parser-4639"><span class="linenos">4639</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-4640"><a href="#Parser-4640"><span class="linenos">4640</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-4641"><a href="#Parser-4641"><span class="linenos">4641</span></a>
+</span><span id="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4643"><a href="#Parser-4643"><span class="linenos">4643</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-4644"><a href="#Parser-4644"><span class="linenos">4644</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-4645"><a href="#Parser-4645"><span class="linenos">4645</span></a>
+</span><span id="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
+</span><span id="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4648"><a href="#Parser-4648"><span class="linenos">4648</span></a>
-</span><span id="Parser-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="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-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="Parser-4652"><a href="#Parser-4652"><span class="linenos">4652</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-4653"><a href="#Parser-4653"><span class="linenos">4653</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</span>
-</span><span id="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a> <span class="p">)</span>
-</span><span id="Parser-4656"><a href="#Parser-4656"><span class="linenos">4656</span></a>
-</span><span id="Parser-4657"><a href="#Parser-4657"><span class="linenos">4657</span></a> <span class="k">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-4658"><a href="#Parser-4658"><span class="linenos">4658</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
-</span><span id="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</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-4661"><a href="#Parser-4661"><span class="linenos">4661</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4663"><a href="#Parser-4663"><span class="linenos">4663</span></a>
-</span><span id="Parser-4664"><a href="#Parser-4664"><span class="linenos">4664</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="Parser-4665"><a href="#Parser-4665"><span class="linenos">4665</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-4666"><a href="#Parser-4666"><span class="linenos">4666</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4667"><a href="#Parser-4667"><span class="linenos">4667</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-4668"><a href="#Parser-4668"><span class="linenos">4668</span></a>
-</span><span id="Parser-4669"><a href="#Parser-4669"><span class="linenos">4669</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-4670"><a href="#Parser-4670"><span class="linenos">4670</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a>
+</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</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-4652"><a href="#Parser-4652"><span class="linenos">4652</span></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-4653"><a href="#Parser-4653"><span class="linenos">4653</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</span></a>
+</span><span id="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a> <span class="bp">self</span><span 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-4656"><a href="#Parser-4656"><span class="linenos">4656</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-4657"><a href="#Parser-4657"><span class="linenos">4657</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
+</span><span id="Parser-4658"><a href="#Parser-4658"><span class="linenos">4658</span></a>
+</span><span id="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</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-4661"><a href="#Parser-4661"><span class="linenos">4661</span></a>
+</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="Parser-4663"><a href="#Parser-4663"><span class="linenos">4663</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-4664"><a href="#Parser-4664"><span class="linenos">4664</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-4665"><a href="#Parser-4665"><span class="linenos">4665</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-4666"><a href="#Parser-4666"><span class="linenos">4666</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-4667"><a href="#Parser-4667"><span class="linenos">4667</span></a> <span class="p">)</span>
+</span><span id="Parser-4668"><a href="#Parser-4668"><span class="linenos">4668</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-4669"><a href="#Parser-4669"><span class="linenos">4669</span></a>
+</span><span id="Parser-4670"><a href="#Parser-4670"><span class="linenos">4670</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-4671"><a href="#Parser-4671"><span class="linenos">4671</span></a>
-</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="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-4673"><a href="#Parser-4673"><span class="linenos">4673</span></a>
-</span><span id="Parser-4674"><a href="#Parser-4674"><span class="linenos">4674</span></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-4675"><a href="#Parser-4675"><span class="linenos">4675</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-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="Parser-4673"><a href="#Parser-4673"><span class="linenos">4673</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-4674"><a href="#Parser-4674"><span class="linenos">4674</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-4675"><a href="#Parser-4675"><span class="linenos">4675</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-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="Parser-4677"><a href="#Parser-4677"><span class="linenos">4677</span></a>
-</span><span id="Parser-4678"><a href="#Parser-4678"><span class="linenos">4678</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-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
-</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a>
-</span><span id="Parser-4681"><a href="#Parser-4681"><span class="linenos">4681</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="Parser-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a>
-</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</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-4684"><a href="#Parser-4684"><span class="linenos">4684</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-4685"><a href="#Parser-4685"><span class="linenos">4685</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-4686"><a href="#Parser-4686"><span class="linenos">4686</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-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a> <span class="p">)</span>
-</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4689"><a href="#Parser-4689"><span class="linenos">4689</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="Parser-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</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-4692"><a href="#Parser-4692"><span class="linenos">4692</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-4693"><a href="#Parser-4693"><span class="linenos">4693</span></a> <span class="p">)</span>
+</span><span id="Parser-4678"><a href="#Parser-4678"><span class="linenos">4678</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="Parser-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
+</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a> <span class="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-4681"><a href="#Parser-4681"><span class="linenos">4681</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-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a> <span class="p">)</span>
+</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</span></a>
+</span><span id="Parser-4684"><a href="#Parser-4684"><span class="linenos">4684</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
+</span><span id="Parser-4685"><a href="#Parser-4685"><span class="linenos">4685</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4686"><a href="#Parser-4686"><span class="linenos">4686</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-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a>
+</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="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-4689"><a href="#Parser-4689"><span class="linenos">4689</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-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a>
+</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</span></a> <span class="k">if</span> <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-4692"><a href="#Parser-4692"><span class="linenos">4692</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-4693"><a href="#Parser-4693"><span class="linenos">4693</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-4694"><a href="#Parser-4694"><span class="linenos">4694</span></a>
-</span><span id="Parser-4695"><a href="#Parser-4695"><span class="linenos">4695</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-4696"><a href="#Parser-4696"><span class="linenos">4696</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
-</span><span id="Parser-4697"><a href="#Parser-4697"><span class="linenos">4697</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-4695"><a href="#Parser-4695"><span class="linenos">4695</span></a> <span class="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-4696"><a href="#Parser-4696"><span class="linenos">4696</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-4697"><a href="#Parser-4697"><span class="linenos">4697</span></a> <span class="p">)</span>
</span><span id="Parser-4698"><a href="#Parser-4698"><span class="linenos">4698</span></a>
-</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-4700"><a href="#Parser-4700"><span class="linenos">4700</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-4701"><a href="#Parser-4701"><span class="linenos">4701</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4702"><a href="#Parser-4702"><span class="linenos">4702</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
-</span><span id="Parser-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a> <span class="p">)</span>
-</span><span id="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a>
-</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</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-4706"><a href="#Parser-4706"><span class="linenos">4706</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-4707"><a href="#Parser-4707"><span class="linenos">4707</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-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a>
-</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</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-4700"><a href="#Parser-4700"><span class="linenos">4700</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-4701"><a href="#Parser-4701"><span class="linenos">4701</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-4702"><a href="#Parser-4702"><span class="linenos">4702</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-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</span></a>
+</span><span id="Parser-4706"><a href="#Parser-4706"><span class="linenos">4706</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4707"><a href="#Parser-4707"><span class="linenos">4707</span></a>
+</span><span id="Parser-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</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-4710"><a href="#Parser-4710"><span class="linenos">4710</span></a>
-</span><span id="Parser-4711"><a href="#Parser-4711"><span class="linenos">4711</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
-</span><span id="Parser-4712"><a href="#Parser-4712"><span class="linenos">4712</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-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a> <span class="k">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-4714"><a href="#Parser-4714"><span class="linenos">4714</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
-</span><span id="Parser-4715"><a href="#Parser-4715"><span class="linenos">4715</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4716"><a href="#Parser-4716"><span class="linenos">4716</span></a>
-</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a> <span class="k">def</span> <span class="nf">_parse_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-4718"><a href="#Parser-4718"><span class="linenos">4718</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-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</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-4721"><a href="#Parser-4721"><span class="linenos">4721</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-4722"><a href="#Parser-4722"><span class="linenos">4722</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-4711"><a href="#Parser-4711"><span class="linenos">4711</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-4712"><a href="#Parser-4712"><span class="linenos">4712</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-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a>
+</span><span id="Parser-4714"><a href="#Parser-4714"><span class="linenos">4714</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-4715"><a href="#Parser-4715"><span class="linenos">4715</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
+</span><span id="Parser-4716"><a href="#Parser-4716"><span class="linenos">4716</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_field_def</span><span class="p">)</span>
+</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a>
+</span><span id="Parser-4718"><a href="#Parser-4718"><span class="linenos">4718</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-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a>
+</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
+</span><span id="Parser-4721"><a href="#Parser-4721"><span class="linenos">4721</span></a> <span class="bp">self</span><span 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-4722"><a href="#Parser-4722"><span class="linenos">4722</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-4723"><a href="#Parser-4723"><span class="linenos">4723</span></a>
-</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
-</span><span id="Parser-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4726"><a href="#Parser-4726"><span class="linenos">4726</span></a>
-</span><span id="Parser-4727"><a href="#Parser-4727"><span class="linenos">4727</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-4728"><a href="#Parser-4728"><span class="linenos">4728</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a>
-</span><span id="Parser-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4734"><a href="#Parser-4734"><span class="linenos">4734</span></a>
-</span><span id="Parser-4735"><a href="#Parser-4735"><span class="linenos">4735</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a> <span class="k">break</span>
-</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
-</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a> <span class="bp">self</span><span 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-4739"><a href="#Parser-4739"><span class="linenos">4739</span></a>
-</span><span id="Parser-4740"><a href="#Parser-4740"><span class="linenos">4740</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-4741"><a href="#Parser-4741"><span class="linenos">4741</span></a>
-</span><span id="Parser-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4743"><a href="#Parser-4743"><span class="linenos">4743</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
-</span><span id="Parser-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-4746"><a href="#Parser-4746"><span class="linenos">4746</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
-</span><span id="Parser-4747"><a href="#Parser-4747"><span class="linenos">4747</span></a> <span class="p">)</span>
-</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a>
-</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
-</span><span id="Parser-4750"><a href="#Parser-4750"><span class="linenos">4750</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-4751"><a href="#Parser-4751"><span class="linenos">4751</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
-</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
-</span><span id="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4756"><a href="#Parser-4756"><span class="linenos">4756</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4758"><a href="#Parser-4758"><span class="linenos">4758</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="Parser-4759"><a href="#Parser-4759"><span class="linenos">4759</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-4760"><a href="#Parser-4760"><span class="linenos">4760</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
-</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</span></a>
-</span><span id="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</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-4764"><a href="#Parser-4764"><span class="linenos">4764</span></a> <span class="p">)</span> <span class="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-4765"><a href="#Parser-4765"><span class="linenos">4765</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-4766"><a href="#Parser-4766"><span class="linenos">4766</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</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-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4726"><a href="#Parser-4726"><span class="linenos">4726</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4727"><a href="#Parser-4727"><span class="linenos">4727</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">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-4728"><a href="#Parser-4728"><span class="linenos">4728</span></a>
+</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a> <span class="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-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a> <span class="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-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
+</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</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-4734"><a href="#Parser-4734"><span class="linenos">4734</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-4735"><a href="#Parser-4735"><span class="linenos">4735</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-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a> <span class="p">)</span>
+</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a>
+</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4739"><a href="#Parser-4739"><span class="linenos">4739</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-4740"><a href="#Parser-4740"><span class="linenos">4740</span></a>
+</span><span id="Parser-4741"><a href="#Parser-4741"><span class="linenos">4741</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-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4743"><a href="#Parser-4743"><span class="linenos">4743</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-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a>
+</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</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-4746"><a href="#Parser-4746"><span class="linenos">4746</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-4747"><a href="#Parser-4747"><span class="linenos">4747</span></a>
+</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a> <span class="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">RenameTable</span><span class="p">:</span>
+</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</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-4750"><a href="#Parser-4750"><span class="linenos">4750</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4751"><a href="#Parser-4751"><span class="linenos">4751</span></a>
+</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</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-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a>
+</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span 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-4756"><a href="#Parser-4756"><span class="linenos">4756</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-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a>
+</span><span id="Parser-4758"><a href="#Parser-4758"><span class="linenos">4758</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-4759"><a href="#Parser-4759"><span class="linenos">4759</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-4760"><a href="#Parser-4760"><span class="linenos">4760</span></a>
+</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</span></a>
+</span><span id="Parser-4764"><a href="#Parser-4764"><span class="linenos">4764</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-4765"><a href="#Parser-4765"><span class="linenos">4765</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-4766"><a href="#Parser-4766"><span class="linenos">4766</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-4767"><a href="#Parser-4767"><span class="linenos">4767</span></a>
-</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</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-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</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-4773"><a href="#Parser-4773"><span class="linenos">4773</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-4774"><a href="#Parser-4774"><span class="linenos">4774</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-4775"><a href="#Parser-4775"><span class="linenos">4775</span></a>
-</span><span id="Parser-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</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-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="Parser-4779"><a href="#Parser-4779"><span class="linenos">4779</span></a> <span class="k">break</span>
+</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</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-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a> <span class="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-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="Parser-4773"><a href="#Parser-4773"><span class="linenos">4773</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="Parser-4774"><a href="#Parser-4774"><span class="linenos">4774</span></a> <span class="p">)</span>
+</span><span id="Parser-4775"><a href="#Parser-4775"><span class="linenos">4775</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-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a>
+</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
+</span><span id="Parser-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="bp">self</span><span 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-4779"><a href="#Parser-4779"><span class="linenos">4779</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-4780"><a href="#Parser-4780"><span class="linenos">4780</span></a>
-</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</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-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</span></a>
-</span><span id="Parser-4785"><a href="#Parser-4785"><span class="linenos">4785</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-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a>
-</span><span id="Parser-4788"><a href="#Parser-4788"><span class="linenos">4788</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-4789"><a href="#Parser-4789"><span class="linenos">4789</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-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</span></a>
-</span><span id="Parser-4792"><a href="#Parser-4792"><span class="linenos">4792</span></a> <span class="k">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-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4797"><a href="#Parser-4797"><span class="linenos">4797</span></a>
-</span><span id="Parser-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</span></a>
-</span><span id="Parser-4800"><a href="#Parser-4800"><span class="linenos">4800</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-4801"><a href="#Parser-4801"><span class="linenos">4801</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-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a>
-</span><span id="Parser-4804"><a href="#Parser-4804"><span class="linenos">4804</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-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4807"><a href="#Parser-4807"><span class="linenos">4807</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</span></a>
-</span><span id="Parser-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</span></a>
-</span><span id="Parser-4811"><a href="#Parser-4811"><span class="linenos">4811</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-4812"><a href="#Parser-4812"><span class="linenos">4812</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-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a>
-</span><span id="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</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-4816"><a href="#Parser-4816"><span class="linenos">4816</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-4818"><a href="#Parser-4818"><span class="linenos">4818</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a>
-</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4821"><a href="#Parser-4821"><span class="linenos">4821</span></a>
-</span><span id="Parser-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="Parser-4824"><a href="#Parser-4824"><span class="linenos">4824</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-4825"><a href="#Parser-4825"><span class="linenos">4825</span></a>
-</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</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-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a>
-</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a> <span class="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-4831"><a href="#Parser-4831"><span class="linenos">4831</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-4832"><a href="#Parser-4832"><span class="linenos">4832</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</span></a>
-</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</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-4838"><a href="#Parser-4838"><span class="linenos">4838</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-4839"><a href="#Parser-4839"><span class="linenos">4839</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-4840"><a href="#Parser-4840"><span class="linenos">4840</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-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="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-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a>
+</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</span></a> <span class="bp">self</span><span 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-4785"><a href="#Parser-4785"><span class="linenos">4785</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-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a>
+</span><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a> <span class="bp">self</span><span 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-4788"><a href="#Parser-4788"><span class="linenos">4788</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-4789"><a href="#Parser-4789"><span class="linenos">4789</span></a>
+</span><span id="Parser-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</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-4792"><a href="#Parser-4792"><span class="linenos">4792</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-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
+</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="kc">False</span>
+</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a> <span class="k">if</span> <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-4797"><a href="#Parser-4797"><span class="linenos">4797</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-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a> <span class="p">)</span>
+</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</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-4800"><a href="#Parser-4800"><span class="linenos">4800</span></a>
+</span><span id="Parser-4801"><a href="#Parser-4801"><span class="linenos">4801</span></a> <span class="bp">self</span><span 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-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a>
+</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4804"><a href="#Parser-4804"><span class="linenos">4804</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-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</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-4807"><a href="#Parser-4807"><span class="linenos">4807</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</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-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</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-4811"><a href="#Parser-4811"><span class="linenos">4811</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-4812"><a href="#Parser-4812"><span class="linenos">4812</span></a> <span class="p">)</span>
+</span><span id="Parser-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a> <span 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-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-4816"><a href="#Parser-4816"><span class="linenos">4816</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-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4818"><a href="#Parser-4818"><span class="linenos">4818</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-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</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-4821"><a href="#Parser-4821"><span class="linenos">4821</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-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="p">)</span>
+</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</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-4824"><a href="#Parser-4824"><span class="linenos">4824</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-4825"><a href="#Parser-4825"><span class="linenos">4825</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</span></a>
+</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="Parser-4831"><a href="#Parser-4831"><span class="linenos">4831</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="Parser-4832"><a href="#Parser-4832"><span class="linenos">4832</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a> <span class="p">)</span>
+</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</span></a> <span class="p">)</span>
+</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</span></a>
+</span><span id="Parser-4838"><a href="#Parser-4838"><span class="linenos">4838</span></a> <span class="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-4839"><a href="#Parser-4839"><span class="linenos">4839</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
+</span><span id="Parser-4840"><a href="#Parser-4840"><span class="linenos">4840</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
+</span><span id="Parser-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</span>
+</span><span id="Parser-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a> <span class="p">)</span>
</span><span id="Parser-4845"><a href="#Parser-4845"><span class="linenos">4845</span></a>
-</span><span id="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</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-4847"><a href="#Parser-4847"><span class="linenos">4847</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-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a>
-</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a>
-</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a> <span class="o">...</span>
-</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</span></a>
-</span><span id="Parser-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
-</span><span id="Parser-4857"><a href="#Parser-4857"><span class="linenos">4857</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-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4859"><a href="#Parser-4859"><span class="linenos">4859</span></a> <span class="o">...</span>
+</span><span id="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</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-4847"><a href="#Parser-4847"><span class="linenos">4847</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
+</span><span id="Parser-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</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-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a>
+</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</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-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</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-4857"><a href="#Parser-4857"><span class="linenos">4857</span></a>
+</span><span id="Parser-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="k">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-4859"><a href="#Parser-4859"><span class="linenos">4859</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-4860"><a href="#Parser-4860"><span class="linenos">4860</span></a>
-</span><span id="Parser-4861"><a href="#Parser-4861"><span class="linenos">4861</span></a> <span class="k">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-4862"><a href="#Parser-4862"><span class="linenos">4862</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-4863"><a href="#Parser-4863"><span class="linenos">4863</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-4864"><a href="#Parser-4864"><span class="linenos">4864</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-4865"><a href="#Parser-4865"><span class="linenos">4865</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-4866"><a href="#Parser-4866"><span class="linenos">4866</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-4867"><a href="#Parser-4867"><span class="linenos">4867</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</span></a> <span class="p">)</span>
-</span><span id="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a>
-</span><span id="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</span></a>
-</span><span id="Parser-4873"><a href="#Parser-4873"><span class="linenos">4873</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
-</span><span id="Parser-4874"><a href="#Parser-4874"><span class="linenos">4874</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-</span><span id="Parser-4875"><a href="#Parser-4875"><span class="linenos">4875</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="Parser-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a>
-</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="k">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-4880"><a href="#Parser-4880"><span class="linenos">4880</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-4881"><a href="#Parser-4881"><span class="linenos">4881</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-4882"><a href="#Parser-4882"><span class="linenos">4882</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-4861"><a href="#Parser-4861"><span class="linenos">4861</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-4862"><a href="#Parser-4862"><span class="linenos">4862</span></a>
+</span><span id="Parser-4863"><a href="#Parser-4863"><span class="linenos">4863</span></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-4864"><a href="#Parser-4864"><span class="linenos">4864</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-4865"><a href="#Parser-4865"><span class="linenos">4865</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4866"><a href="#Parser-4866"><span class="linenos">4866</span></a>
+</span><span id="Parser-4867"><a href="#Parser-4867"><span class="linenos">4867</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-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</span></a>
+</span><span id="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a>
+</span><span id="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</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-4873"><a href="#Parser-4873"><span class="linenos">4873</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-4874"><a href="#Parser-4874"><span class="linenos">4874</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-4875"><a href="#Parser-4875"><span class="linenos">4875</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-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a> <span class="p">)</span>
+</span><span id="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="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-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="Parser-4880"><a href="#Parser-4880"><span class="linenos">4880</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-4881"><a href="#Parser-4881"><span class="linenos">4881</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-4882"><a href="#Parser-4882"><span class="linenos">4882</span></a> <span class="p">)</span>
</span><span id="Parser-4883"><a href="#Parser-4883"><span class="linenos">4883</span></a>
-</span><span id="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</span></a> <span class="k">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-4885"><a href="#Parser-4885"><span class="linenos">4885</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-4886"><a href="#Parser-4886"><span class="linenos">4886</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-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a> <span class="k">break</span>
-</span><span id="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</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-4889"><a href="#Parser-4889"><span class="linenos">4889</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4890"><a href="#Parser-4890"><span class="linenos">4890</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-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</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-4894"><a href="#Parser-4894"><span class="linenos">4894</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</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-4885"><a href="#Parser-4885"><span class="linenos">4885</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
+</span><span id="Parser-4886"><a href="#Parser-4886"><span class="linenos">4886</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-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a>
+</span><span id="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-4889"><a href="#Parser-4889"><span class="linenos">4889</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-4890"><a href="#Parser-4890"><span class="linenos">4890</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
+</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a> <span class="p">)</span>
+</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</span></a>
+</span><span id="Parser-4894"><a href="#Parser-4894"><span class="linenos">4894</span></a> <span class="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-4895"><a href="#Parser-4895"><span class="linenos">4895</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-4896"><a href="#Parser-4896"><span class="linenos">4896</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-4897"><a href="#Parser-4897"><span class="linenos">4897</span></a>
+</span><span id="Parser-4898"><a href="#Parser-4898"><span class="linenos">4898</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="Parser-4899"><a href="#Parser-4899"><span class="linenos">4899</span></a>
+</span><span id="Parser-4900"><a href="#Parser-4900"><span class="linenos">4900</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
+</span><span id="Parser-4901"><a href="#Parser-4901"><span class="linenos">4901</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-4902"><a href="#Parser-4902"><span class="linenos">4902</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_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-4903"><a href="#Parser-4903"><span class="linenos">4903</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
+</span><span id="Parser-4904"><a href="#Parser-4904"><span class="linenos">4904</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4905"><a href="#Parser-4905"><span class="linenos">4905</span></a>
+</span><span id="Parser-4906"><a href="#Parser-4906"><span class="linenos">4906</span></a> <span class="k">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-4907"><a href="#Parser-4907"><span class="linenos">4907</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-4908"><a href="#Parser-4908"><span class="linenos">4908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4909"><a href="#Parser-4909"><span class="linenos">4909</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-4910"><a href="#Parser-4910"><span class="linenos">4910</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-4911"><a href="#Parser-4911"><span class="linenos">4911</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-4912"><a href="#Parser-4912"><span class="linenos">4912</span></a>
+</span><span id="Parser-4913"><a href="#Parser-4913"><span class="linenos">4913</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
+</span><span id="Parser-4914"><a href="#Parser-4914"><span class="linenos">4914</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4915"><a href="#Parser-4915"><span class="linenos">4915</span></a>
+</span><span id="Parser-4916"><a href="#Parser-4916"><span class="linenos">4916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-4917"><a href="#Parser-4917"><span class="linenos">4917</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-4918"><a href="#Parser-4918"><span class="linenos">4918</span></a>
+</span><span id="Parser-4919"><a href="#Parser-4919"><span class="linenos">4919</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4920"><a href="#Parser-4920"><span class="linenos">4920</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4921"><a href="#Parser-4921"><span class="linenos">4921</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-4922"><a href="#Parser-4922"><span class="linenos">4922</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4923"><a href="#Parser-4923"><span class="linenos">4923</span></a>
+</span><span id="Parser-4924"><a href="#Parser-4924"><span class="linenos">4924</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-4925"><a href="#Parser-4925"><span class="linenos">4925</span></a> <span class="k">break</span>
+</span><span id="Parser-4926"><a href="#Parser-4926"><span class="linenos">4926</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
+</span><span id="Parser-4927"><a href="#Parser-4927"><span class="linenos">4927</span></a> <span class="bp">self</span><span 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-4928"><a href="#Parser-4928"><span class="linenos">4928</span></a>
+</span><span id="Parser-4929"><a href="#Parser-4929"><span class="linenos">4929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4930"><a href="#Parser-4930"><span class="linenos">4930</span></a>
+</span><span id="Parser-4931"><a href="#Parser-4931"><span class="linenos">4931</span></a> <span class="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-4932"><a href="#Parser-4932"><span class="linenos">4932</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
+</span><span id="Parser-4933"><a href="#Parser-4933"><span class="linenos">4933</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4934"><a href="#Parser-4934"><span class="linenos">4934</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-4935"><a href="#Parser-4935"><span class="linenos">4935</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
+</span><span id="Parser-4936"><a href="#Parser-4936"><span class="linenos">4936</span></a> <span class="p">)</span>
+</span><span id="Parser-4937"><a href="#Parser-4937"><span class="linenos">4937</span></a>
+</span><span id="Parser-4938"><a href="#Parser-4938"><span class="linenos">4938</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
+</span><span id="Parser-4939"><a href="#Parser-4939"><span class="linenos">4939</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-4940"><a href="#Parser-4940"><span class="linenos">4940</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
+</span><span id="Parser-4941"><a href="#Parser-4941"><span class="linenos">4941</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
+</span><span id="Parser-4942"><a href="#Parser-4942"><span class="linenos">4942</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4943"><a href="#Parser-4943"><span class="linenos">4943</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Parser-4944"><a href="#Parser-4944"><span class="linenos">4944</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4945"><a href="#Parser-4945"><span class="linenos">4945</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4946"><a href="#Parser-4946"><span class="linenos">4946</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4947"><a href="#Parser-4947"><span class="linenos">4947</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="Parser-4948"><a href="#Parser-4948"><span class="linenos">4948</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-4949"><a href="#Parser-4949"><span class="linenos">4949</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="Parser-4950"><a href="#Parser-4950"><span class="linenos">4950</span></a>
+</span><span id="Parser-4951"><a href="#Parser-4951"><span class="linenos">4951</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</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">Comprehension</span><span class="p">:</span>
+</span><span id="Parser-4952"><a href="#Parser-4952"><span class="linenos">4952</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-4953"><a href="#Parser-4953"><span class="linenos">4953</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="Parser-4954"><a href="#Parser-4954"><span class="linenos">4954</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-4955"><a href="#Parser-4955"><span class="linenos">4955</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-4956"><a href="#Parser-4956"><span class="linenos">4956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4957"><a href="#Parser-4957"><span class="linenos">4957</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
+</span><span id="Parser-4958"><a href="#Parser-4958"><span class="linenos">4958</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4959"><a href="#Parser-4959"><span class="linenos">4959</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-4960"><a href="#Parser-4960"><span class="linenos">4960</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
+</span><span id="Parser-4961"><a href="#Parser-4961"><span class="linenos">4961</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-4962"><a href="#Parser-4962"><span class="linenos">4962</span></a> <span class="p">)</span>
+</span><span id="Parser-4963"><a href="#Parser-4963"><span class="linenos">4963</span></a>
+</span><span id="Parser-4964"><a href="#Parser-4964"><span class="linenos">4964</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="Parser-4965"><a href="#Parser-4965"><span class="linenos">4965</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-4966"><a href="#Parser-4966"><span class="linenos">4966</span></a> <span class="p">)</span> <span class="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-4967"><a href="#Parser-4967"><span class="linenos">4967</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-4968"><a href="#Parser-4968"><span class="linenos">4968</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4969"><a href="#Parser-4969"><span class="linenos">4969</span></a>
+</span><span id="Parser-4970"><a href="#Parser-4970"><span class="linenos">4970</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-4971"><a href="#Parser-4971"><span class="linenos">4971</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4972"><a href="#Parser-4972"><span class="linenos">4972</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4973"><a href="#Parser-4973"><span class="linenos">4973</span></a> <span class="c1"># The current token might be multiple words</span>
+</span><span id="Parser-4974"><a href="#Parser-4974"><span class="linenos">4974</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-4975"><a href="#Parser-4975"><span class="linenos">4975</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-4976"><a href="#Parser-4976"><span class="linenos">4976</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-4977"><a href="#Parser-4977"><span class="linenos">4977</span></a>
+</span><span id="Parser-4978"><a href="#Parser-4978"><span class="linenos">4978</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4979"><a href="#Parser-4979"><span class="linenos">4979</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-4980"><a href="#Parser-4980"><span class="linenos">4980</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="Parser-4981"><a href="#Parser-4981"><span class="linenos">4981</span></a> <span class="k">break</span>
+</span><span id="Parser-4982"><a href="#Parser-4982"><span class="linenos">4982</span></a>
+</span><span id="Parser-4983"><a href="#Parser-4983"><span class="linenos">4983</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="Parser-4984"><a href="#Parser-4984"><span class="linenos">4984</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-4985"><a href="#Parser-4985"><span class="linenos">4985</span></a> <span class="k">return</span> <span class="n">subparser</span>
+</span><span id="Parser-4986"><a href="#Parser-4986"><span class="linenos">4986</span></a>
+</span><span id="Parser-4987"><a href="#Parser-4987"><span class="linenos">4987</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-4988"><a href="#Parser-4988"><span class="linenos">4988</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4989"><a href="#Parser-4989"><span class="linenos">4989</span></a>
+</span><span id="Parser-4990"><a href="#Parser-4990"><span class="linenos">4990</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-4991"><a href="#Parser-4991"><span class="linenos">4991</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-4992"><a href="#Parser-4992"><span class="linenos">4992</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4993"><a href="#Parser-4993"><span class="linenos">4993</span></a>
+</span><span id="Parser-4994"><a href="#Parser-4994"><span class="linenos">4994</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-4995"><a href="#Parser-4995"><span class="linenos">4995</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-4996"><a href="#Parser-4996"><span class="linenos">4996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4997"><a href="#Parser-4997"><span class="linenos">4997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-4998"><a href="#Parser-4998"><span class="linenos">4998</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-4999"><a href="#Parser-4999"><span class="linenos">4999</span></a>
+</span><span id="Parser-5000"><a href="#Parser-5000"><span class="linenos">5000</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5001"><a href="#Parser-5001"><span class="linenos">5001</span></a>
+</span><span id="Parser-5002"><a href="#Parser-5002"><span class="linenos">5002</span></a> <span class="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-5003"><a href="#Parser-5003"><span class="linenos">5003</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-5004"><a href="#Parser-5004"><span class="linenos">5004</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5005"><a href="#Parser-5005"><span class="linenos">5005</span></a>
+</span><span id="Parser-5006"><a href="#Parser-5006"><span class="linenos">5006</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-5007"><a href="#Parser-5007"><span class="linenos">5007</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5008"><a href="#Parser-5008"><span class="linenos">5008</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5009"><a href="#Parser-5009"><span class="linenos">5009</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5010"><a href="#Parser-5010"><span class="linenos">5010</span></a>
+</span><span id="Parser-5011"><a href="#Parser-5011"><span class="linenos">5011</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5012"><a href="#Parser-5012"><span class="linenos">5012</span></a>
+</span><span id="Parser-5013"><a href="#Parser-5013"><span class="linenos">5013</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-5014"><a href="#Parser-5014"><span class="linenos">5014</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-5015"><a href="#Parser-5015"><span class="linenos">5015</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5016"><a href="#Parser-5016"><span class="linenos">5016</span></a>
+</span><span id="Parser-5017"><a href="#Parser-5017"><span class="linenos">5017</span></a> <span class="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-5018"><a href="#Parser-5018"><span class="linenos">5018</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5019"><a href="#Parser-5019"><span class="linenos">5019</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-5020"><a href="#Parser-5020"><span class="linenos">5020</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5021"><a href="#Parser-5021"><span class="linenos">5021</span></a>
+</span><span id="Parser-5022"><a href="#Parser-5022"><span class="linenos">5022</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5023"><a href="#Parser-5023"><span class="linenos">5023</span></a>
+</span><span id="Parser-5024"><a href="#Parser-5024"><span class="linenos">5024</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5025"><a href="#Parser-5025"><span class="linenos">5025</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="Parser-5026"><a href="#Parser-5026"><span class="linenos">5026</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-5027"><a href="#Parser-5027"><span class="linenos">5027</span></a>
+</span><span id="Parser-5028"><a href="#Parser-5028"><span class="linenos">5028</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5029"><a href="#Parser-5029"><span class="linenos">5029</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="Parser-5030"><a href="#Parser-5030"><span class="linenos">5030</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-5031"><a href="#Parser-5031"><span class="linenos">5031</span></a>
+</span><span id="Parser-5032"><a href="#Parser-5032"><span class="linenos">5032</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-5033"><a href="#Parser-5033"><span class="linenos">5033</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-5034"><a href="#Parser-5034"><span class="linenos">5034</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5035"><a href="#Parser-5035"><span class="linenos">5035</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5036"><a href="#Parser-5036"><span class="linenos">5036</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5037"><a href="#Parser-5037"><span class="linenos">5037</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Parser-5038"><a href="#Parser-5038"><span class="linenos">5038</span></a>
+</span><span id="Parser-5039"><a href="#Parser-5039"><span class="linenos">5039</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-5040"><a href="#Parser-5040"><span class="linenos">5040</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-5041"><a href="#Parser-5041"><span class="linenos">5041</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-5042"><a href="#Parser-5042"><span class="linenos">5042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-5043"><a href="#Parser-5043"><span class="linenos">5043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5044"><a href="#Parser-5044"><span class="linenos">5044</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5045"><a href="#Parser-5045"><span class="linenos">5045</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-5046"><a href="#Parser-5046"><span class="linenos">5046</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Parser-5047"><a href="#Parser-5047"><span class="linenos">5047</span></a>
+</span><span id="Parser-5048"><a href="#Parser-5048"><span class="linenos">5048</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-5049"><a href="#Parser-5049"><span class="linenos">5049</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-5050"><a href="#Parser-5050"><span class="linenos">5050</span></a>
+</span><span id="Parser-5051"><a href="#Parser-5051"><span class="linenos">5051</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5052"><a href="#Parser-5052"><span class="linenos">5052</span></a>
+</span><span id="Parser-5053"><a href="#Parser-5053"><span class="linenos">5053</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-5054"><a href="#Parser-5054"><span class="linenos">5054</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-5055"><a href="#Parser-5055"><span class="linenos">5055</span></a> <span class="o">...</span>
+</span><span id="Parser-5056"><a href="#Parser-5056"><span class="linenos">5056</span></a>
+</span><span id="Parser-5057"><a href="#Parser-5057"><span class="linenos">5057</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-5058"><a href="#Parser-5058"><span class="linenos">5058</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
+</span><span id="Parser-5059"><a href="#Parser-5059"><span class="linenos">5059</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-5060"><a href="#Parser-5060"><span class="linenos">5060</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5061"><a href="#Parser-5061"><span class="linenos">5061</span></a> <span class="o">...</span>
+</span><span id="Parser-5062"><a href="#Parser-5062"><span class="linenos">5062</span></a>
+</span><span id="Parser-5063"><a href="#Parser-5063"><span class="linenos">5063</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-5064"><a href="#Parser-5064"><span class="linenos">5064</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-5065"><a href="#Parser-5065"><span class="linenos">5065</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-5066"><a href="#Parser-5066"><span class="linenos">5066</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-5067"><a href="#Parser-5067"><span class="linenos">5067</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-5068"><a href="#Parser-5068"><span class="linenos">5068</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-5069"><a href="#Parser-5069"><span class="linenos">5069</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-5070"><a href="#Parser-5070"><span class="linenos">5070</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5071"><a href="#Parser-5071"><span class="linenos">5071</span></a> <span class="p">)</span>
+</span><span id="Parser-5072"><a href="#Parser-5072"><span class="linenos">5072</span></a>
+</span><span id="Parser-5073"><a href="#Parser-5073"><span class="linenos">5073</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5074"><a href="#Parser-5074"><span class="linenos">5074</span></a>
+</span><span id="Parser-5075"><a href="#Parser-5075"><span class="linenos">5075</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
+</span><span id="Parser-5076"><a href="#Parser-5076"><span class="linenos">5076</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span><span id="Parser-5077"><a href="#Parser-5077"><span class="linenos">5077</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5078"><a href="#Parser-5078"><span class="linenos">5078</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="Parser-5079"><a href="#Parser-5079"><span class="linenos">5079</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-5080"><a href="#Parser-5080"><span class="linenos">5080</span></a>
+</span><span id="Parser-5081"><a href="#Parser-5081"><span class="linenos">5081</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-5082"><a href="#Parser-5082"><span class="linenos">5082</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-5083"><a href="#Parser-5083"><span class="linenos">5083</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-5084"><a href="#Parser-5084"><span class="linenos">5084</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-5085"><a href="#Parser-5085"><span class="linenos">5085</span></a>
+</span><span id="Parser-5086"><a href="#Parser-5086"><span class="linenos">5086</span></a> <span class="k">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-5087"><a href="#Parser-5087"><span class="linenos">5087</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-5088"><a href="#Parser-5088"><span class="linenos">5088</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-5089"><a href="#Parser-5089"><span class="linenos">5089</span></a> <span class="k">break</span>
+</span><span id="Parser-5090"><a href="#Parser-5090"><span class="linenos">5090</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-5091"><a href="#Parser-5091"><span class="linenos">5091</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5092"><a href="#Parser-5092"><span class="linenos">5092</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-5093"><a href="#Parser-5093"><span class="linenos">5093</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="Parser-5094"><a href="#Parser-5094"><span class="linenos">5094</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5095"><a href="#Parser-5095"><span class="linenos">5095</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-5096"><a href="#Parser-5096"><span class="linenos">5096</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -10200,16 +10625,17 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Parser.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.__init__-843"><a href="#Parser.__init__-843"><span class="linenos">843</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Parser.__init__-844"><a href="#Parser.__init__-844"><span class="linenos">844</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser.__init__-845"><a href="#Parser.__init__-845"><span class="linenos">845</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__-846"><a href="#Parser.__init__-846"><span class="linenos">846</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__-847"><a href="#Parser.__init__-847"><span class="linenos">847</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__-848"><a href="#Parser.__init__-848"><span class="linenos">848</span></a> <span class="p">):</span>
-</span><span id="Parser.__init__-849"><a href="#Parser.__init__-849"><span class="linenos">849</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__-850"><a href="#Parser.__init__-850"><span class="linenos">850</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__-851"><a href="#Parser.__init__-851"><span class="linenos">851</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__-852"><a href="#Parser.__init__-852"><span class="linenos">852</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__-889"><a href="#Parser.__init__-889"><span class="linenos">889</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Parser.__init__-890"><a href="#Parser.__init__-890"><span class="linenos">890</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser.__init__-891"><a href="#Parser.__init__-891"><span class="linenos">891</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__-892"><a href="#Parser.__init__-892"><span class="linenos">892</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__-893"><a href="#Parser.__init__-893"><span class="linenos">893</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__-894"><a href="#Parser.__init__-894"><span class="linenos">894</span></a> <span class="p">):</span>
+</span><span id="Parser.__init__-895"><a href="#Parser.__init__-895"><span class="linenos">895</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__-896"><a href="#Parser.__init__-896"><span class="linenos">896</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__-897"><a href="#Parser.__init__-897"><span class="linenos">897</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__-898"><a href="#Parser.__init__-898"><span class="linenos">898</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><span id="Parser.__init__-899"><a href="#Parser.__init__-899"><span class="linenos">899</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span></pre></div>
@@ -10220,7 +10646,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span><span class="annotation">: Dict[str, Callable]</span> =
<input id="Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DATE_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LastDateOfMonth">sqlglot.expressions.LastDateOfMonth</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SafeConcat">sqlglot.expressions.SafeConcat</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SET_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SetAgg">sqlglot.expressions.SetAgg</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;}</span>
</div>
@@ -10242,11 +10668,23 @@ Default: 3</li>
</div>
+ <div id="Parser.STRUCT_TYPE_TOKENS" class="classattr">
+ <div class="attr variable">
+ <span class="name">STRUCT_TYPE_TOKENS</span> =
+<span class="default_value">{&lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.STRUCT_TYPE_TOKENS"></a>
+
+
+
+ </div>
<div id="Parser.NESTED_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">NESTED_TYPE_TOKENS</span> =
<input id="Parser.NESTED_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
</div>
@@ -10258,7 +10696,7 @@ Default: 3</li>
<div id="Parser.ENUM_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ENUM_TYPE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.ENUM: &#39;ENUM&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;}</span>
</div>
@@ -10271,7 +10709,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TYPE_TOKENS</span> =
<input id="Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;}</span>
</div>
@@ -10297,7 +10735,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RESERVED_KEYWORDS</span> =
<input id="Parser.RESERVED_KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.QUOTE: &#39;QUOTE&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.QUOTE: &#39;QUOTE&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;}</span>
</div>
@@ -10310,7 +10748,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">DB_CREATABLES</span> =
<input id="Parser.DB_CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;}</span>
</div>
@@ -10323,7 +10761,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CREATABLES</span> =
<input id="Parser.CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;}</span>
</div>
@@ -10336,7 +10774,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="Parser.ID_VAR_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -10349,7 +10787,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">INTERVAL_VARS</span> =
<input id="Parser.INTERVAL_VARS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.INTERVAL_VARS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.INTERVAL_VARS-view-value"></label><span class="default_value">{&lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -10362,7 +10800,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -10375,7 +10813,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">COMMENT_TABLE_ALIAS_TOKENS</span> =
<input id="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -10388,7 +10826,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">UPDATE_ALIAS_TOKENS</span> =
<input id="Parser.UPDATE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -10400,7 +10838,7 @@ Default: 3</li>
<div id="Parser.TRIM_TYPES" class="classattr">
<div class="attr variable">
<span class="name">TRIM_TYPES</span> =
-<span class="default_value">{&#39;LEADING&#39;, &#39;BOTH&#39;, &#39;TRAILING&#39;}</span>
+<span class="default_value">{&#39;TRAILING&#39;, &#39;BOTH&#39;, &#39;LEADING&#39;}</span>
</div>
@@ -10413,7 +10851,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;}</span>
</div>
@@ -10500,11 +10938,23 @@ Default: 3</li>
</div>
+ <div id="Parser.TIMES" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIMES</span> =
+<span class="default_value">{&lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.TIMES"></a>
+
+
+
+ </div>
<div id="Parser.TIMESTAMPS" class="classattr">
<div class="attr variable">
<span class="name">TIMESTAMPS</span> =
<input id="Parser.TIMESTAMPS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;}</span>
</div>
@@ -10528,7 +10978,7 @@ Default: 3</li>
<div id="Parser.JOIN_METHODS" class="classattr">
<div class="attr variable">
<span class="name">JOIN_METHODS</span> =
-<span class="default_value">{&lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;}</span>
</div>
@@ -10540,7 +10990,7 @@ Default: 3</li>
<div id="Parser.JOIN_SIDES" class="classattr">
<div class="attr variable">
<span class="name">JOIN_SIDES</span> =
-<span class="default_value">{&lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;}</span>
</div>
@@ -10553,7 +11003,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">JOIN_KINDS</span> =
<input id="Parser.JOIN_KINDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;}</span>
</div>
@@ -10617,7 +11067,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">STATEMENT_PARSERS</span> =
<input id="Parser.STATEMENT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FROM: &#39;FROM&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
@@ -10669,7 +11119,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RANGE_PARSERS</span> =
<input id="Parser.RANGE_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
@@ -10695,7 +11145,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CONSTRAINT_PARSERS</span> =
<input id="Parser.CONSTRAINT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NONCLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;WITH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
@@ -10720,7 +11170,7 @@ Default: 3</li>
<div id="Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="classattr">
<div class="attr variable">
<span class="name">SCHEMA_UNNAMED_CONSTRAINTS</span> =
-<span class="default_value">{&#39;FOREIGN KEY&#39;, &#39;PRIMARY KEY&#39;, &#39;CHECK&#39;, &#39;LIKE&#39;, &#39;UNIQUE&#39;}</span>
+<span class="default_value">{&#39;CHECK&#39;, &#39;UNIQUE&#39;, &#39;FOREIGN KEY&#39;, &#39;PRIMARY KEY&#39;, &#39;LIKE&#39;}</span>
</div>
@@ -10742,6 +11192,18 @@ Default: 3</li>
</div>
+ <div id="Parser.INVALID_FUNC_NAME_TOKENS" class="classattr">
+ <div class="attr variable">
+ <span class="name">INVALID_FUNC_NAME_TOKENS</span> =
+<span class="default_value">{&lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.STRING: &#39;STRING&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.INVALID_FUNC_NAME_TOKENS"></a>
+
+
+
+ </div>
<div id="Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS_WITH_ALIASED_ARGS</span> =
@@ -10771,7 +11233,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">QUERY_MODIFIER_PARSERS</span> =
<input id="Parser.QUERY_MODIFIER_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.QUERY_MODIFIER_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USING: &#39;USING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.QUERY_MODIFIER_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USING: &#39;USING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
@@ -10845,7 +11307,7 @@ Default: 3</li>
<div id="Parser.PRE_VOLATILE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">PRE_VOLATILE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;}</span>
</div>
@@ -10857,7 +11319,7 @@ Default: 3</li>
<div id="Parser.TRANSACTION_KIND" class="classattr">
<div class="attr variable">
<span class="name">TRANSACTION_KIND</span> =
-<span class="default_value">{&#39;DEFERRED&#39;, &#39;IMMEDIATE&#39;, &#39;EXCLUSIVE&#39;}</span>
+<span class="default_value">{&#39;DEFERRED&#39;, &#39;EXCLUSIVE&#39;, &#39;IMMEDIATE&#39;}</span>
</div>
@@ -10870,7 +11332,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TRANSACTION_CHARACTERISTICS</span> =
<input id="Parser.TRANSACTION_CHARACTERISTICS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;ISOLATION LEVEL READ UNCOMMITTED&#39;, &#39;READ WRITE&#39;, &#39;ISOLATION LEVEL REPEATABLE READ&#39;, &#39;READ ONLY&#39;, &#39;ISOLATION LEVEL READ COMMITTED&#39;, &#39;ISOLATION LEVEL SERIALIZABLE&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;ISOLATION LEVEL REPEATABLE READ&#39;, &#39;ISOLATION LEVEL READ UNCOMMITTED&#39;, &#39;READ WRITE&#39;, &#39;ISOLATION LEVEL SERIALIZABLE&#39;, &#39;READ ONLY&#39;, &#39;ISOLATION LEVEL READ COMMITTED&#39;}</span>
</div>
@@ -10882,7 +11344,7 @@ Default: 3</li>
<div id="Parser.INSERT_ALTERNATIVES" class="classattr">
<div class="attr variable">
<span class="name">INSERT_ALTERNATIVES</span> =
-<span class="default_value">{&#39;REPLACE&#39;, &#39;IGNORE&#39;, &#39;ABORT&#39;, &#39;FAIL&#39;, &#39;ROLLBACK&#39;}</span>
+<span class="default_value">{&#39;REPLACE&#39;, &#39;ROLLBACK&#39;, &#39;FAIL&#39;, &#39;ABORT&#39;, &#39;IGNORE&#39;}</span>
</div>
@@ -10894,7 +11356,7 @@ Default: 3</li>
<div id="Parser.CLONE_KINDS" class="classattr">
<div class="attr variable">
<span class="name">CLONE_KINDS</span> =
-<span class="default_value">{&#39;OFFSET&#39;, &#39;STATEMENT&#39;, &#39;TIMESTAMP&#39;}</span>
+<span class="default_value">{&#39;STATEMENT&#39;, &#39;OFFSET&#39;, &#39;TIMESTAMP&#39;}</span>
</div>
@@ -10919,7 +11381,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">WINDOW_ALIAS_TOKENS</span> =
<input id="Parser.WINDOW_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;}</span>
</div>
@@ -10943,7 +11405,7 @@ Default: 3</li>
<div id="Parser.WINDOW_SIDES" class="classattr">
<div class="attr variable">
<span class="name">WINDOW_SIDES</span> =
-<span class="default_value">{&#39;FOLLOWING&#39;, &#39;PRECEDING&#39;}</span>
+<span class="default_value">{&#39;PRECEDING&#39;, &#39;FOLLOWING&#39;}</span>
</div>
@@ -10956,7 +11418,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ADD_CONSTRAINT_TOKENS</span> =
<input id="Parser.ADD_CONSTRAINT_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;}</span>
</div>
@@ -10965,6 +11427,18 @@ Default: 3</li>
</div>
+ <div id="Parser.DISTINCT_TOKENS" class="classattr">
+ <div class="attr variable">
+ <span class="name">DISTINCT_TOKENS</span> =
+<span class="default_value">{&lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.DISTINCT_TOKENS"></a>
+
+
+
+ </div>
<div id="Parser.STRICT_CAST" class="classattr">
<div class="attr variable">
<span class="name">STRICT_CAST</span> =
@@ -11037,6 +11511,42 @@ Default: 3</li>
</div>
+ <div id="Parser.SUPPORTS_USER_DEFINED_TYPES" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTS_USER_DEFINED_TYPES</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.SUPPORTS_USER_DEFINED_TYPES"></a>
+
+
+
+ </div>
+ <div id="Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD" class="classattr">
+ <div class="attr variable">
+ <span class="name">ALTER_TABLE_ADD_COLUMN_KEYWORD</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.ALTER_TABLE_ADD_COLUMN_KEYWORD"></a>
+
+
+
+ </div>
+ <div id="Parser.TOKENIZER_CLASS" class="classattr">
+ <div class="attr variable">
+ <span class="name">TOKENIZER_CLASS</span><span class="annotation">: Type[<a href="tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a>]</span> =
+<span class="default_value">&lt;class &#39;<a href="executor/python.html#Python.Tokenizer">sqlglot.executor.python.Python.Tokenizer</a>&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Parser.TOKENIZER_CLASS"></a>
+
+
+
+ </div>
<div id="Parser.INDEX_OFFSET" class="classattr">
<div class="attr variable">
<span class="name">INDEX_OFFSET</span><span class="annotation">: int</span> =
@@ -11225,15 +11735,15 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Parser.reset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.reset-854"><a href="#Parser.reset-854"><span class="linenos">854</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-855"><a href="#Parser.reset-855"><span class="linenos">855</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-856"><a href="#Parser.reset-856"><span class="linenos">856</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-857"><a href="#Parser.reset-857"><span class="linenos">857</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-858"><a href="#Parser.reset-858"><span class="linenos">858</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-859"><a href="#Parser.reset-859"><span class="linenos">859</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-860"><a href="#Parser.reset-860"><span class="linenos">860</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-861"><a href="#Parser.reset-861"><span class="linenos">861</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-862"><a href="#Parser.reset-862"><span class="linenos">862</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-901"><a href="#Parser.reset-901"><span class="linenos">901</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-902"><a href="#Parser.reset-902"><span class="linenos">902</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-903"><a href="#Parser.reset-903"><span class="linenos">903</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-904"><a href="#Parser.reset-904"><span class="linenos">904</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-905"><a href="#Parser.reset-905"><span class="linenos">905</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-906"><a href="#Parser.reset-906"><span class="linenos">906</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-907"><a href="#Parser.reset-907"><span class="linenos">907</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-908"><a href="#Parser.reset-908"><span class="linenos">908</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-909"><a href="#Parser.reset-909"><span class="linenos">909</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>
@@ -11251,23 +11761,23 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Parser.parse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse-864"><a href="#Parser.parse-864"><span class="linenos">864</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
-</span><span id="Parser.parse-865"><a href="#Parser.parse-865"><span class="linenos">865</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-866"><a href="#Parser.parse-866"><span class="linenos">866</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-867"><a href="#Parser.parse-867"><span class="linenos">867</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.parse-868"><a href="#Parser.parse-868"><span class="linenos">868</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-869"><a href="#Parser.parse-869"><span class="linenos">869</span></a><span class="sd"> per parsed SQL statement.</span>
-</span><span id="Parser.parse-870"><a href="#Parser.parse-870"><span class="linenos">870</span></a>
-</span><span id="Parser.parse-871"><a href="#Parser.parse-871"><span class="linenos">871</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.parse-872"><a href="#Parser.parse-872"><span class="linenos">872</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
-</span><span id="Parser.parse-873"><a href="#Parser.parse-873"><span class="linenos">873</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
-</span><span id="Parser.parse-874"><a href="#Parser.parse-874"><span class="linenos">874</span></a>
-</span><span id="Parser.parse-875"><a href="#Parser.parse-875"><span class="linenos">875</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.parse-876"><a href="#Parser.parse-876"><span class="linenos">876</span></a><span class="sd"> The list of the produced syntax trees.</span>
-</span><span id="Parser.parse-877"><a href="#Parser.parse-877"><span class="linenos">877</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.parse-878"><a href="#Parser.parse-878"><span class="linenos">878</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-879"><a href="#Parser.parse-879"><span class="linenos">879</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-880"><a href="#Parser.parse-880"><span class="linenos">880</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse-911"><a href="#Parser.parse-911"><span class="linenos">911</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
+</span><span id="Parser.parse-912"><a href="#Parser.parse-912"><span class="linenos">912</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-913"><a href="#Parser.parse-913"><span class="linenos">913</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-914"><a href="#Parser.parse-914"><span class="linenos">914</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.parse-915"><a href="#Parser.parse-915"><span class="linenos">915</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-916"><a href="#Parser.parse-916"><span class="linenos">916</span></a><span class="sd"> per parsed SQL statement.</span>
+</span><span id="Parser.parse-917"><a href="#Parser.parse-917"><span class="linenos">917</span></a>
+</span><span id="Parser.parse-918"><a href="#Parser.parse-918"><span class="linenos">918</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.parse-919"><a href="#Parser.parse-919"><span class="linenos">919</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
+</span><span id="Parser.parse-920"><a href="#Parser.parse-920"><span class="linenos">920</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
+</span><span id="Parser.parse-921"><a href="#Parser.parse-921"><span class="linenos">921</span></a>
+</span><span id="Parser.parse-922"><a href="#Parser.parse-922"><span class="linenos">922</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.parse-923"><a href="#Parser.parse-923"><span class="linenos">923</span></a><span class="sd"> The list of the produced syntax trees.</span>
+</span><span id="Parser.parse-924"><a href="#Parser.parse-924"><span class="linenos">924</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.parse-925"><a href="#Parser.parse-925"><span class="linenos">925</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-926"><a href="#Parser.parse-926"><span class="linenos">926</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-927"><a href="#Parser.parse-927"><span class="linenos">927</span></a> <span class="p">)</span>
</span></pre></div>
@@ -11301,41 +11811,41 @@ 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-882"><a href="#Parser.parse_into-882"><span class="linenos">882</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Parser.parse_into-883"><a href="#Parser.parse_into-883"><span class="linenos">883</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser.parse_into-884"><a href="#Parser.parse_into-884"><span class="linenos">884</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-885"><a href="#Parser.parse_into-885"><span class="linenos">885</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-886"><a href="#Parser.parse_into-886"><span class="linenos">886</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-887"><a href="#Parser.parse_into-887"><span class="linenos">887</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-888"><a href="#Parser.parse_into-888"><span class="linenos">888</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.parse_into-889"><a href="#Parser.parse_into-889"><span class="linenos">889</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-890"><a href="#Parser.parse_into-890"><span class="linenos">890</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-891"><a href="#Parser.parse_into-891"><span class="linenos">891</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
-</span><span id="Parser.parse_into-892"><a href="#Parser.parse_into-892"><span class="linenos">892</span></a>
-</span><span id="Parser.parse_into-893"><a href="#Parser.parse_into-893"><span class="linenos">893</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.parse_into-894"><a href="#Parser.parse_into-894"><span class="linenos">894</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-895"><a href="#Parser.parse_into-895"><span class="linenos">895</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
-</span><span id="Parser.parse_into-896"><a href="#Parser.parse_into-896"><span class="linenos">896</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
-</span><span id="Parser.parse_into-897"><a href="#Parser.parse_into-897"><span class="linenos">897</span></a>
-</span><span id="Parser.parse_into-898"><a href="#Parser.parse_into-898"><span class="linenos">898</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.parse_into-899"><a href="#Parser.parse_into-899"><span class="linenos">899</span></a><span class="sd"> The target Expression.</span>
-</span><span id="Parser.parse_into-900"><a href="#Parser.parse_into-900"><span class="linenos">900</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.parse_into-901"><a href="#Parser.parse_into-901"><span class="linenos">901</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser.parse_into-902"><a href="#Parser.parse_into-902"><span class="linenos">902</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
-</span><span id="Parser.parse_into-903"><a href="#Parser.parse_into-903"><span class="linenos">903</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-904"><a href="#Parser.parse_into-904"><span class="linenos">904</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-905"><a href="#Parser.parse_into-905"><span class="linenos">905</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-906"><a href="#Parser.parse_into-906"><span class="linenos">906</span></a>
-</span><span id="Parser.parse_into-907"><a href="#Parser.parse_into-907"><span class="linenos">907</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser.parse_into-908"><a href="#Parser.parse_into-908"><span class="linenos">908</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-909"><a href="#Parser.parse_into-909"><span class="linenos">909</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-910"><a href="#Parser.parse_into-910"><span class="linenos">910</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-911"><a href="#Parser.parse_into-911"><span class="linenos">911</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-912"><a href="#Parser.parse_into-912"><span class="linenos">912</span></a>
-</span><span id="Parser.parse_into-913"><a href="#Parser.parse_into-913"><span class="linenos">913</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser.parse_into-914"><a href="#Parser.parse_into-914"><span class="linenos">914</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; 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-915"><a href="#Parser.parse_into-915"><span class="linenos">915</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-916"><a href="#Parser.parse_into-916"><span class="linenos">916</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-929"><a href="#Parser.parse_into-929"><span class="linenos">929</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Parser.parse_into-930"><a href="#Parser.parse_into-930"><span class="linenos">930</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser.parse_into-931"><a href="#Parser.parse_into-931"><span class="linenos">931</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-932"><a href="#Parser.parse_into-932"><span class="linenos">932</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-933"><a href="#Parser.parse_into-933"><span class="linenos">933</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-934"><a href="#Parser.parse_into-934"><span class="linenos">934</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-935"><a href="#Parser.parse_into-935"><span class="linenos">935</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.parse_into-936"><a href="#Parser.parse_into-936"><span class="linenos">936</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-937"><a href="#Parser.parse_into-937"><span class="linenos">937</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-938"><a href="#Parser.parse_into-938"><span class="linenos">938</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
+</span><span id="Parser.parse_into-939"><a href="#Parser.parse_into-939"><span class="linenos">939</span></a>
+</span><span id="Parser.parse_into-940"><a href="#Parser.parse_into-940"><span class="linenos">940</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.parse_into-941"><a href="#Parser.parse_into-941"><span class="linenos">941</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-942"><a href="#Parser.parse_into-942"><span class="linenos">942</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
+</span><span id="Parser.parse_into-943"><a href="#Parser.parse_into-943"><span class="linenos">943</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
+</span><span id="Parser.parse_into-944"><a href="#Parser.parse_into-944"><span class="linenos">944</span></a>
+</span><span id="Parser.parse_into-945"><a href="#Parser.parse_into-945"><span class="linenos">945</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.parse_into-946"><a href="#Parser.parse_into-946"><span class="linenos">946</span></a><span class="sd"> The target Expression.</span>
+</span><span id="Parser.parse_into-947"><a href="#Parser.parse_into-947"><span class="linenos">947</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.parse_into-948"><a href="#Parser.parse_into-948"><span class="linenos">948</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser.parse_into-949"><a href="#Parser.parse_into-949"><span class="linenos">949</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
+</span><span id="Parser.parse_into-950"><a href="#Parser.parse_into-950"><span class="linenos">950</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-951"><a href="#Parser.parse_into-951"><span class="linenos">951</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-952"><a href="#Parser.parse_into-952"><span class="linenos">952</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-953"><a href="#Parser.parse_into-953"><span class="linenos">953</span></a>
+</span><span id="Parser.parse_into-954"><a href="#Parser.parse_into-954"><span class="linenos">954</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser.parse_into-955"><a href="#Parser.parse_into-955"><span class="linenos">955</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-956"><a href="#Parser.parse_into-956"><span class="linenos">956</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-957"><a href="#Parser.parse_into-957"><span class="linenos">957</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-958"><a href="#Parser.parse_into-958"><span class="linenos">958</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-959"><a href="#Parser.parse_into-959"><span class="linenos">959</span></a>
+</span><span id="Parser.parse_into-960"><a href="#Parser.parse_into-960"><span class="linenos">960</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser.parse_into-961"><a href="#Parser.parse_into-961"><span class="linenos">961</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; 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-962"><a href="#Parser.parse_into-962"><span class="linenos">962</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-963"><a href="#Parser.parse_into-963"><span class="linenos">963</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>
@@ -11371,16 +11881,16 @@ 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-953"><a href="#Parser.check_errors-953"><span class="linenos">953</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-954"><a href="#Parser.check_errors-954"><span class="linenos">954</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
-</span><span id="Parser.check_errors-955"><a href="#Parser.check_errors-955"><span class="linenos">955</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-956"><a href="#Parser.check_errors-956"><span class="linenos">956</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-957"><a href="#Parser.check_errors-957"><span class="linenos">957</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-958"><a href="#Parser.check_errors-958"><span class="linenos">958</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-959"><a href="#Parser.check_errors-959"><span class="linenos">959</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser.check_errors-960"><a href="#Parser.check_errors-960"><span class="linenos">960</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-961"><a href="#Parser.check_errors-961"><span class="linenos">961</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-962"><a href="#Parser.check_errors-962"><span class="linenos">962</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.check_errors-1000"><a href="#Parser.check_errors-1000"><span class="linenos">1000</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-1001"><a href="#Parser.check_errors-1001"><span class="linenos">1001</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
+</span><span id="Parser.check_errors-1002"><a href="#Parser.check_errors-1002"><span class="linenos">1002</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-1003"><a href="#Parser.check_errors-1003"><span class="linenos">1003</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-1004"><a href="#Parser.check_errors-1004"><span class="linenos">1004</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-1005"><a href="#Parser.check_errors-1005"><span class="linenos">1005</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-1006"><a href="#Parser.check_errors-1006"><span class="linenos">1006</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser.check_errors-1007"><a href="#Parser.check_errors-1007"><span class="linenos">1007</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-1008"><a href="#Parser.check_errors-1008"><span class="linenos">1008</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-1009"><a href="#Parser.check_errors-1009"><span class="linenos">1009</span></a> <span class="p">)</span>
</span></pre></div>
@@ -11400,33 +11910,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-964"><a href="#Parser.raise_error-964"><span class="linenos">964</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-965"><a href="#Parser.raise_error-965"><span class="linenos">965</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.raise_error-966"><a href="#Parser.raise_error-966"><span class="linenos">966</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-967"><a href="#Parser.raise_error-967"><span class="linenos">967</span></a><span class="sd"> error level setting.</span>
-</span><span id="Parser.raise_error-968"><a href="#Parser.raise_error-968"><span class="linenos">968</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.raise_error-969"><a href="#Parser.raise_error-969"><span class="linenos">969</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-970"><a href="#Parser.raise_error-970"><span class="linenos">970</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-971"><a href="#Parser.raise_error-971"><span class="linenos">971</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 class="o">+</span> <span class="mi">1</span>
-</span><span id="Parser.raise_error-972"><a href="#Parser.raise_error-972"><span class="linenos">972</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-973"><a href="#Parser.raise_error-973"><span class="linenos">973</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-974"><a href="#Parser.raise_error-974"><span class="linenos">974</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-975"><a href="#Parser.raise_error-975"><span class="linenos">975</span></a>
-</span><span id="Parser.raise_error-976"><a href="#Parser.raise_error-976"><span class="linenos">976</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-977"><a href="#Parser.raise_error-977"><span class="linenos">977</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-978"><a href="#Parser.raise_error-978"><span class="linenos">978</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-979"><a href="#Parser.raise_error-979"><span class="linenos">979</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-980"><a href="#Parser.raise_error-980"><span class="linenos">980</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-981"><a href="#Parser.raise_error-981"><span class="linenos">981</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-982"><a href="#Parser.raise_error-982"><span class="linenos">982</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-983"><a href="#Parser.raise_error-983"><span class="linenos">983</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-984"><a href="#Parser.raise_error-984"><span class="linenos">984</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-985"><a href="#Parser.raise_error-985"><span class="linenos">985</span></a> <span class="p">)</span>
-</span><span id="Parser.raise_error-986"><a href="#Parser.raise_error-986"><span class="linenos">986</span></a>
-</span><span id="Parser.raise_error-987"><a href="#Parser.raise_error-987"><span class="linenos">987</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-988"><a href="#Parser.raise_error-988"><span class="linenos">988</span></a> <span class="k">raise</span> <span class="n">error</span>
-</span><span id="Parser.raise_error-989"><a href="#Parser.raise_error-989"><span class="linenos">989</span></a>
-</span><span id="Parser.raise_error-990"><a href="#Parser.raise_error-990"><span class="linenos">990</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-1011"><a href="#Parser.raise_error-1011"><span class="linenos">1011</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-1012"><a href="#Parser.raise_error-1012"><span class="linenos">1012</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.raise_error-1013"><a href="#Parser.raise_error-1013"><span class="linenos">1013</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-1014"><a href="#Parser.raise_error-1014"><span class="linenos">1014</span></a><span class="sd"> error level setting.</span>
+</span><span id="Parser.raise_error-1015"><a href="#Parser.raise_error-1015"><span class="linenos">1015</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.raise_error-1016"><a href="#Parser.raise_error-1016"><span class="linenos">1016</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-1017"><a href="#Parser.raise_error-1017"><span class="linenos">1017</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-1018"><a href="#Parser.raise_error-1018"><span class="linenos">1018</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 class="o">+</span> <span class="mi">1</span>
+</span><span id="Parser.raise_error-1019"><a href="#Parser.raise_error-1019"><span class="linenos">1019</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-1020"><a href="#Parser.raise_error-1020"><span class="linenos">1020</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-1021"><a href="#Parser.raise_error-1021"><span class="linenos">1021</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-1022"><a href="#Parser.raise_error-1022"><span class="linenos">1022</span></a>
+</span><span id="Parser.raise_error-1023"><a href="#Parser.raise_error-1023"><span class="linenos">1023</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-1024"><a href="#Parser.raise_error-1024"><span class="linenos">1024</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-1025"><a href="#Parser.raise_error-1025"><span class="linenos">1025</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-1026"><a href="#Parser.raise_error-1026"><span class="linenos">1026</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-1027"><a href="#Parser.raise_error-1027"><span class="linenos">1027</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-1028"><a href="#Parser.raise_error-1028"><span class="linenos">1028</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-1029"><a href="#Parser.raise_error-1029"><span class="linenos">1029</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-1030"><a href="#Parser.raise_error-1030"><span class="linenos">1030</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-1031"><a href="#Parser.raise_error-1031"><span class="linenos">1031</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-1032"><a href="#Parser.raise_error-1032"><span class="linenos">1032</span></a> <span class="p">)</span>
+</span><span id="Parser.raise_error-1033"><a href="#Parser.raise_error-1033"><span class="linenos">1033</span></a>
+</span><span id="Parser.raise_error-1034"><a href="#Parser.raise_error-1034"><span class="linenos">1034</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-1035"><a href="#Parser.raise_error-1035"><span class="linenos">1035</span></a> <span class="k">raise</span> <span class="n">error</span>
+</span><span id="Parser.raise_error-1036"><a href="#Parser.raise_error-1036"><span class="linenos">1036</span></a>
+</span><span id="Parser.raise_error-1037"><a href="#Parser.raise_error-1037"><span class="linenos">1037</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>
@@ -11447,23 +11957,23 @@ error level setting.</p>
</div>
<a class="headerlink" href="#Parser.expression"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.expression-992"><a href="#Parser.expression-992"><span class="linenos"> 992</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
-</span><span id="Parser.expression-993"><a href="#Parser.expression-993"><span class="linenos"> 993</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-994"><a href="#Parser.expression-994"><span class="linenos"> 994</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-995"><a href="#Parser.expression-995"><span class="linenos"> 995</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.expression-996"><a href="#Parser.expression-996"><span class="linenos"> 996</span></a><span class="sd"> Creates a new, validated Expression.</span>
-</span><span id="Parser.expression-997"><a href="#Parser.expression-997"><span class="linenos"> 997</span></a>
-</span><span id="Parser.expression-998"><a href="#Parser.expression-998"><span class="linenos"> 998</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.expression-999"><a href="#Parser.expression-999"><span class="linenos"> 999</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
-</span><span id="Parser.expression-1000"><a href="#Parser.expression-1000"><span class="linenos">1000</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
-</span><span id="Parser.expression-1001"><a href="#Parser.expression-1001"><span class="linenos">1001</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
-</span><span id="Parser.expression-1002"><a href="#Parser.expression-1002"><span class="linenos">1002</span></a>
-</span><span id="Parser.expression-1003"><a href="#Parser.expression-1003"><span class="linenos">1003</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.expression-1004"><a href="#Parser.expression-1004"><span class="linenos">1004</span></a><span class="sd"> The target expression.</span>
-</span><span id="Parser.expression-1005"><a href="#Parser.expression-1005"><span class="linenos">1005</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.expression-1006"><a href="#Parser.expression-1006"><span class="linenos">1006</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-1007"><a href="#Parser.expression-1007"><span class="linenos">1007</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
-</span><span id="Parser.expression-1008"><a href="#Parser.expression-1008"><span class="linenos">1008</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.expression-1039"><a href="#Parser.expression-1039"><span class="linenos">1039</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
+</span><span id="Parser.expression-1040"><a href="#Parser.expression-1040"><span class="linenos">1040</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-1041"><a href="#Parser.expression-1041"><span class="linenos">1041</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-1042"><a href="#Parser.expression-1042"><span class="linenos">1042</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.expression-1043"><a href="#Parser.expression-1043"><span class="linenos">1043</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="Parser.expression-1044"><a href="#Parser.expression-1044"><span class="linenos">1044</span></a>
+</span><span id="Parser.expression-1045"><a href="#Parser.expression-1045"><span class="linenos">1045</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.expression-1046"><a href="#Parser.expression-1046"><span class="linenos">1046</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
+</span><span id="Parser.expression-1047"><a href="#Parser.expression-1047"><span class="linenos">1047</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
+</span><span id="Parser.expression-1048"><a href="#Parser.expression-1048"><span class="linenos">1048</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
+</span><span id="Parser.expression-1049"><a href="#Parser.expression-1049"><span class="linenos">1049</span></a>
+</span><span id="Parser.expression-1050"><a href="#Parser.expression-1050"><span class="linenos">1050</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.expression-1051"><a href="#Parser.expression-1051"><span class="linenos">1051</span></a><span class="sd"> The target expression.</span>
+</span><span id="Parser.expression-1052"><a href="#Parser.expression-1052"><span class="linenos">1052</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.expression-1053"><a href="#Parser.expression-1053"><span class="linenos">1053</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-1054"><a href="#Parser.expression-1054"><span class="linenos">1054</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="Parser.expression-1055"><a href="#Parser.expression-1055"><span class="linenos">1055</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span></pre></div>
@@ -11497,22 +12007,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-1015"><a href="#Parser.validate_expression-1015"><span class="linenos">1015</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">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 class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Parser.validate_expression-1016"><a href="#Parser.validate_expression-1016"><span class="linenos">1016</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.validate_expression-1017"><a href="#Parser.validate_expression-1017"><span class="linenos">1017</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</span>
-</span><span id="Parser.validate_expression-1018"><a href="#Parser.validate_expression-1018"><span class="linenos">1018</span></a>
-</span><span id="Parser.validate_expression-1019"><a href="#Parser.validate_expression-1019"><span class="linenos">1019</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.validate_expression-1020"><a href="#Parser.validate_expression-1020"><span class="linenos">1020</span></a><span class="sd"> expression: The expression to validate.</span>
-</span><span id="Parser.validate_expression-1021"><a href="#Parser.validate_expression-1021"><span class="linenos">1021</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-1022"><a href="#Parser.validate_expression-1022"><span class="linenos">1022</span></a>
-</span><span id="Parser.validate_expression-1023"><a href="#Parser.validate_expression-1023"><span class="linenos">1023</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.validate_expression-1024"><a href="#Parser.validate_expression-1024"><span class="linenos">1024</span></a><span class="sd"> The validated expression.</span>
-</span><span id="Parser.validate_expression-1025"><a href="#Parser.validate_expression-1025"><span class="linenos">1025</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.validate_expression-1026"><a href="#Parser.validate_expression-1026"><span class="linenos">1026</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-1027"><a href="#Parser.validate_expression-1027"><span class="linenos">1027</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-1028"><a href="#Parser.validate_expression-1028"><span class="linenos">1028</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-1029"><a href="#Parser.validate_expression-1029"><span class="linenos">1029</span></a>
-</span><span id="Parser.validate_expression-1030"><a href="#Parser.validate_expression-1030"><span class="linenos">1030</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.validate_expression-1062"><a href="#Parser.validate_expression-1062"><span class="linenos">1062</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span> <span class="n">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 class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Parser.validate_expression-1063"><a href="#Parser.validate_expression-1063"><span class="linenos">1063</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.validate_expression-1064"><a href="#Parser.validate_expression-1064"><span class="linenos">1064</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</span>
+</span><span id="Parser.validate_expression-1065"><a href="#Parser.validate_expression-1065"><span class="linenos">1065</span></a>
+</span><span id="Parser.validate_expression-1066"><a href="#Parser.validate_expression-1066"><span class="linenos">1066</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.validate_expression-1067"><a href="#Parser.validate_expression-1067"><span class="linenos">1067</span></a><span class="sd"> expression: The expression to validate.</span>
+</span><span id="Parser.validate_expression-1068"><a href="#Parser.validate_expression-1068"><span class="linenos">1068</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-1069"><a href="#Parser.validate_expression-1069"><span class="linenos">1069</span></a>
+</span><span id="Parser.validate_expression-1070"><a href="#Parser.validate_expression-1070"><span class="linenos">1070</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.validate_expression-1071"><a href="#Parser.validate_expression-1071"><span class="linenos">1071</span></a><span class="sd"> The validated expression.</span>
+</span><span id="Parser.validate_expression-1072"><a href="#Parser.validate_expression-1072"><span class="linenos">1072</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.validate_expression-1073"><a href="#Parser.validate_expression-1073"><span class="linenos">1073</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-1074"><a href="#Parser.validate_expression-1074"><span class="linenos">1074</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-1075"><a href="#Parser.validate_expression-1075"><span class="linenos">1075</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-1076"><a href="#Parser.validate_expression-1076"><span class="linenos">1076</span></a>
+</span><span id="Parser.validate_expression-1077"><a href="#Parser.validate_expression-1077"><span class="linenos">1077</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
diff --git a/docs/sqlglot/schema.html b/docs/sqlglot/schema.html
index 10ba142..7eedaaf 100644
--- a/docs/sqlglot/schema.html
+++ b/docs/sqlglot/schema.html
@@ -115,6 +115,9 @@
</li>
<li>
+ <a class="function" href="#normalize_name">normalize_name</a>
+ </li>
+ <li>
<a class="function" href="#ensure_schema">ensure_schema</a>
</li>
<li>
@@ -526,155 +529,166 @@
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <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="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span>
-</span><span id="L-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">try</span><span class="p">:</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">name</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">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="n">name</span> <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="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">name</span><span class="o">.</span><span class="n">name</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="n">name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">return</span> <span class="n">name</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="c1"># This can be useful for normalize_identifier</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
-</span><span id="L-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">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</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="sd"> Args:</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a><span class="sd"> schema_type: the type we want to convert.</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</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="sd"> Returns:</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a><span class="sd"> The resulting expression type.</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="n">normalize_name</span><span class="p">(</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">name</span><span class="p">,</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">normalize</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span><span class="p">,</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <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">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</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="sd"> Args:</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> schema_type: the type we want to convert.</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a><span class="sd"> Returns:</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a><span class="sd"> The resulting expression type.</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
</span><span id="L-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">try</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
-</span><span id="L-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><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
-</span><span id="L-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">schema</span><span class="p">,</span> <span class="n">Schema</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">schema</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a><span class="k">def</span> <span class="nf">normalize_name</span><span class="p">(</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</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 class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">name</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">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="n">name</span> <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="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">name</span><span class="o">.</span><span class="n">name</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">name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="n">name</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">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="k">return</span> <span class="n">mapping</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">}</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-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">flatten_schema</span><span class="p">(</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">tables</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">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
-</span><span id="L-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">return</span> <span class="n">tables</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><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a><span class="sd"> Get a value for a nested dictionary.</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="sd"> Args:</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a><span class="sd"> d: the dictionary to search.</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
-</span><span id="L-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="sd"> Returns:</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="c1"># This can be useful for normalize_identifier</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span><span class="o">.</span><span class="n">name</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">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
+</span><span id="L-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">schema</span><span class="p">,</span> <span class="n">Schema</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">schema</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-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">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="n">mapping</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="p">}</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="L-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">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="n">tables</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="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-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">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
+</span><span id="L-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">return</span> <span class="n">tables</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><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a><span class="sd"> Get a value for a nested dictionary.</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="sd"> Args:</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a><span class="sd"> d: the dictionary to search.</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">return</span> <span class="n">d</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><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a><span class="sd"> In-place set a value for a nested dictionary</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="sd"> Example:</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a><span class="sd"> Returns:</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="kc">None</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="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>
</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a><span class="sd"> Args:</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a><span class="sd"> d: dictionary to update.</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</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="sd"> Returns:</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a><span class="sd"> The (possibly) updated dictionary.</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a><span class="sd"> In-place set a value for a nested dictionary</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="sd"> Example:</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</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="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="n">d</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="n">subd</span> <span class="o">=</span> <span class="n">d</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a><span class="sd"> Args:</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a><span class="sd"> d: dictionary to update.</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a><span class="sd"> Returns:</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a><span class="sd"> The (possibly) updated dictionary.</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">return</span> <span class="n">d</span>
</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="n">d</span>
</span></pre></div>
@@ -1475,50 +1489,41 @@ For example, a generic mapping type might be defined as::</p>
</span><span id="MappingSchema-373"><a href="#MappingSchema-373"><span class="linenos">373</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="MappingSchema-374"><a href="#MappingSchema-374"><span class="linenos">374</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="MappingSchema-375"><a href="#MappingSchema-375"><span class="linenos">375</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MappingSchema-376"><a href="#MappingSchema-376"><span class="linenos">376</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="MappingSchema-377"><a href="#MappingSchema-377"><span class="linenos">377</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span>
-</span><span id="MappingSchema-378"><a href="#MappingSchema-378"><span class="linenos">378</span></a>
-</span><span id="MappingSchema-379"><a href="#MappingSchema-379"><span class="linenos">379</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="MappingSchema-380"><a href="#MappingSchema-380"><span class="linenos">380</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">name</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">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
-</span><span id="MappingSchema-381"><a href="#MappingSchema-381"><span class="linenos">381</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="MappingSchema-382"><a href="#MappingSchema-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="n">name</span> <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="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">name</span><span class="o">.</span><span class="n">name</span>
-</span><span id="MappingSchema-383"><a href="#MappingSchema-383"><span class="linenos">383</span></a>
-</span><span id="MappingSchema-384"><a href="#MappingSchema-384"><span class="linenos">384</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
-</span><span id="MappingSchema-385"><a href="#MappingSchema-385"><span class="linenos">385</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
-</span><span id="MappingSchema-386"><a href="#MappingSchema-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="n">name</span>
-</span><span id="MappingSchema-387"><a href="#MappingSchema-387"><span class="linenos">387</span></a>
-</span><span id="MappingSchema-388"><a href="#MappingSchema-388"><span class="linenos">388</span></a> <span class="c1"># This can be useful for normalize_identifier</span>
-</span><span id="MappingSchema-389"><a href="#MappingSchema-389"><span class="linenos">389</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
-</span><span id="MappingSchema-390"><a href="#MappingSchema-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
-</span><span id="MappingSchema-391"><a href="#MappingSchema-391"><span class="linenos">391</span></a>
-</span><span id="MappingSchema-392"><a href="#MappingSchema-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="MappingSchema-393"><a href="#MappingSchema-393"><span class="linenos">393</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
-</span><span id="MappingSchema-394"><a href="#MappingSchema-394"><span class="linenos">394</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
-</span><span id="MappingSchema-395"><a href="#MappingSchema-395"><span class="linenos">395</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="MappingSchema-396"><a href="#MappingSchema-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
-</span><span id="MappingSchema-397"><a href="#MappingSchema-397"><span class="linenos">397</span></a>
-</span><span id="MappingSchema-398"><a href="#MappingSchema-398"><span class="linenos">398</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="MappingSchema-399"><a href="#MappingSchema-399"><span class="linenos">399</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="MappingSchema-400"><a href="#MappingSchema-400"><span class="linenos">400</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</span>
-</span><span id="MappingSchema-401"><a href="#MappingSchema-401"><span class="linenos">401</span></a>
-</span><span id="MappingSchema-402"><a href="#MappingSchema-402"><span class="linenos">402</span></a><span class="sd"> Args:</span>
-</span><span id="MappingSchema-403"><a href="#MappingSchema-403"><span class="linenos">403</span></a><span class="sd"> schema_type: the type we want to convert.</span>
-</span><span id="MappingSchema-404"><a href="#MappingSchema-404"><span class="linenos">404</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
-</span><span id="MappingSchema-405"><a href="#MappingSchema-405"><span class="linenos">405</span></a>
-</span><span id="MappingSchema-406"><a href="#MappingSchema-406"><span class="linenos">406</span></a><span class="sd"> Returns:</span>
-</span><span id="MappingSchema-407"><a href="#MappingSchema-407"><span class="linenos">407</span></a><span class="sd"> The resulting expression type.</span>
-</span><span id="MappingSchema-408"><a href="#MappingSchema-408"><span class="linenos">408</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MappingSchema-409"><a href="#MappingSchema-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
-</span><span id="MappingSchema-410"><a href="#MappingSchema-410"><span class="linenos">410</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="MappingSchema-411"><a href="#MappingSchema-411"><span class="linenos">411</span></a>
-</span><span id="MappingSchema-412"><a href="#MappingSchema-412"><span class="linenos">412</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="MappingSchema-413"><a href="#MappingSchema-413"><span class="linenos">413</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="MappingSchema-414"><a href="#MappingSchema-414"><span class="linenos">414</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="MappingSchema-415"><a href="#MappingSchema-415"><span class="linenos">415</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
-</span><span id="MappingSchema-416"><a href="#MappingSchema-416"><span class="linenos">416</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MappingSchema-417"><a href="#MappingSchema-417"><span class="linenos">417</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="MappingSchema-418"><a href="#MappingSchema-418"><span class="linenos">418</span></a>
-</span><span id="MappingSchema-419"><a href="#MappingSchema-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
+</span><span id="MappingSchema-376"><a href="#MappingSchema-376"><span class="linenos">376</span></a> <span class="k">return</span> <span class="n">normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema-377"><a href="#MappingSchema-377"><span class="linenos">377</span></a> <span class="n">name</span><span class="p">,</span>
+</span><span id="MappingSchema-378"><a href="#MappingSchema-378"><span class="linenos">378</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="MappingSchema-379"><a href="#MappingSchema-379"><span class="linenos">379</span></a> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span>
+</span><span id="MappingSchema-380"><a href="#MappingSchema-380"><span class="linenos">380</span></a> <span class="n">normalize</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span><span class="p">,</span>
+</span><span id="MappingSchema-381"><a href="#MappingSchema-381"><span class="linenos">381</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-382"><a href="#MappingSchema-382"><span class="linenos">382</span></a>
+</span><span id="MappingSchema-383"><a href="#MappingSchema-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="MappingSchema-384"><a href="#MappingSchema-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
+</span><span id="MappingSchema-385"><a href="#MappingSchema-385"><span class="linenos">385</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
+</span><span id="MappingSchema-386"><a href="#MappingSchema-386"><span class="linenos">386</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="MappingSchema-387"><a href="#MappingSchema-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
+</span><span id="MappingSchema-388"><a href="#MappingSchema-388"><span class="linenos">388</span></a>
+</span><span id="MappingSchema-389"><a href="#MappingSchema-389"><span class="linenos">389</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="MappingSchema-390"><a href="#MappingSchema-390"><span class="linenos">390</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="MappingSchema-391"><a href="#MappingSchema-391"><span class="linenos">391</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</span>
+</span><span id="MappingSchema-392"><a href="#MappingSchema-392"><span class="linenos">392</span></a>
+</span><span id="MappingSchema-393"><a href="#MappingSchema-393"><span class="linenos">393</span></a><span class="sd"> Args:</span>
+</span><span id="MappingSchema-394"><a href="#MappingSchema-394"><span class="linenos">394</span></a><span class="sd"> schema_type: the type we want to convert.</span>
+</span><span id="MappingSchema-395"><a href="#MappingSchema-395"><span class="linenos">395</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
+</span><span id="MappingSchema-396"><a href="#MappingSchema-396"><span class="linenos">396</span></a>
+</span><span id="MappingSchema-397"><a href="#MappingSchema-397"><span class="linenos">397</span></a><span class="sd"> Returns:</span>
+</span><span id="MappingSchema-398"><a href="#MappingSchema-398"><span class="linenos">398</span></a><span class="sd"> The resulting expression type.</span>
+</span><span id="MappingSchema-399"><a href="#MappingSchema-399"><span class="linenos">399</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MappingSchema-400"><a href="#MappingSchema-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
+</span><span id="MappingSchema-401"><a href="#MappingSchema-401"><span class="linenos">401</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="MappingSchema-402"><a href="#MappingSchema-402"><span class="linenos">402</span></a>
+</span><span id="MappingSchema-403"><a href="#MappingSchema-403"><span class="linenos">403</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="MappingSchema-404"><a href="#MappingSchema-404"><span class="linenos">404</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="MappingSchema-405"><a href="#MappingSchema-405"><span class="linenos">405</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="MappingSchema-406"><a href="#MappingSchema-406"><span class="linenos">406</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+</span><span id="MappingSchema-407"><a href="#MappingSchema-407"><span class="linenos">407</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MappingSchema-408"><a href="#MappingSchema-408"><span class="linenos">408</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="MappingSchema-409"><a href="#MappingSchema-409"><span class="linenos">409</span></a>
+</span><span id="MappingSchema-410"><a href="#MappingSchema-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
</span></pre></div>
@@ -1663,11 +1668,11 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#MappingSchema.depth"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.depth-392"><a href="#MappingSchema.depth-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="MappingSchema.depth-393"><a href="#MappingSchema.depth-393"><span class="linenos">393</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
-</span><span id="MappingSchema.depth-394"><a href="#MappingSchema.depth-394"><span class="linenos">394</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
-</span><span id="MappingSchema.depth-395"><a href="#MappingSchema.depth-395"><span class="linenos">395</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="MappingSchema.depth-396"><a href="#MappingSchema.depth-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.depth-383"><a href="#MappingSchema.depth-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="MappingSchema.depth-384"><a href="#MappingSchema.depth-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
+</span><span id="MappingSchema.depth-385"><a href="#MappingSchema.depth-385"><span class="linenos">385</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
+</span><span id="MappingSchema.depth-386"><a href="#MappingSchema.depth-386"><span class="linenos">386</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="MappingSchema.depth-387"><a href="#MappingSchema.depth-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
</span></pre></div>
@@ -1697,6 +1702,41 @@ are assumed to be visible. The nesting should mirror that of the schema:
</dl>
</div>
</section>
+ <section id="normalize_name">
+ <input id="normalize_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+
+ <span class="def">def</span>
+ <span class="name">normalize_name</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Identifier">sqlglot.expressions.Identifier</a></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">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="normalize_name-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#normalize_name"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="normalize_name-413"><a href="#normalize_name-413"><span class="linenos">413</span></a><span class="k">def</span> <span class="nf">normalize_name</span><span class="p">(</span>
+</span><span id="normalize_name-414"><a href="#normalize_name-414"><span class="linenos">414</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="normalize_name-415"><a href="#normalize_name-415"><span class="linenos">415</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="normalize_name-416"><a href="#normalize_name-416"><span class="linenos">416</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="normalize_name-417"><a href="#normalize_name-417"><span class="linenos">417</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="normalize_name-418"><a href="#normalize_name-418"><span class="linenos">418</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="normalize_name-419"><a href="#normalize_name-419"><span class="linenos">419</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="normalize_name-420"><a href="#normalize_name-420"><span class="linenos">420</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">name</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">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
+</span><span id="normalize_name-421"><a href="#normalize_name-421"><span class="linenos">421</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="normalize_name-422"><a href="#normalize_name-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="n">name</span> <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="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">name</span><span class="o">.</span><span class="n">name</span>
+</span><span id="normalize_name-423"><a href="#normalize_name-423"><span class="linenos">423</span></a>
+</span><span id="normalize_name-424"><a href="#normalize_name-424"><span class="linenos">424</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="normalize_name-425"><a href="#normalize_name-425"><span class="linenos">425</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
+</span><span id="normalize_name-426"><a href="#normalize_name-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="n">name</span>
+</span><span id="normalize_name-427"><a href="#normalize_name-427"><span class="linenos">427</span></a>
+</span><span id="normalize_name-428"><a href="#normalize_name-428"><span class="linenos">428</span></a> <span class="c1"># This can be useful for normalize_identifier</span>
+</span><span id="normalize_name-429"><a href="#normalize_name-429"><span class="linenos">429</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
+</span><span id="normalize_name-430"><a href="#normalize_name-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
+</span></pre></div>
+
+
+
+
+ </section>
<section id="ensure_schema">
<input id="ensure_schema-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
@@ -1708,11 +1748,11 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#ensure_schema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_schema-422"><a href="#ensure_schema-422"><span class="linenos">422</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
-</span><span id="ensure_schema-423"><a href="#ensure_schema-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
-</span><span id="ensure_schema-424"><a href="#ensure_schema-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">schema</span>
-</span><span id="ensure_schema-425"><a href="#ensure_schema-425"><span class="linenos">425</span></a>
-</span><span id="ensure_schema-426"><a href="#ensure_schema-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_schema-433"><a href="#ensure_schema-433"><span class="linenos">433</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
+</span><span id="ensure_schema-434"><a href="#ensure_schema-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
+</span><span id="ensure_schema-435"><a href="#ensure_schema-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">schema</span>
+</span><span id="ensure_schema-436"><a href="#ensure_schema-436"><span class="linenos">436</span></a>
+</span><span id="ensure_schema-437"><a href="#ensure_schema-437"><span class="linenos">437</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
@@ -1730,24 +1770,24 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#ensure_column_mapping"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_column_mapping-429"><a href="#ensure_column_mapping-429"><span class="linenos">429</span></a><span class="k">def</span> <span class="nf">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="ensure_column_mapping-430"><a href="#ensure_column_mapping-430"><span class="linenos">430</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="ensure_column_mapping-431"><a href="#ensure_column_mapping-431"><span class="linenos">431</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="ensure_column_mapping-432"><a href="#ensure_column_mapping-432"><span class="linenos">432</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-433"><a href="#ensure_column_mapping-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="n">mapping</span>
-</span><span id="ensure_column_mapping-434"><a href="#ensure_column_mapping-434"><span class="linenos">434</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-435"><a href="#ensure_column_mapping-435"><span class="linenos">435</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
-</span><span id="ensure_column_mapping-436"><a href="#ensure_column_mapping-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="ensure_column_mapping-437"><a href="#ensure_column_mapping-437"><span class="linenos">437</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="ensure_column_mapping-438"><a href="#ensure_column_mapping-438"><span class="linenos">438</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
-</span><span id="ensure_column_mapping-439"><a href="#ensure_column_mapping-439"><span class="linenos">439</span></a> <span class="p">}</span>
-</span><span id="ensure_column_mapping-440"><a href="#ensure_column_mapping-440"><span class="linenos">440</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
-</span><span id="ensure_column_mapping-441"><a href="#ensure_column_mapping-441"><span class="linenos">441</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-442"><a href="#ensure_column_mapping-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="ensure_column_mapping-443"><a href="#ensure_column_mapping-443"><span class="linenos">443</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-444"><a href="#ensure_column_mapping-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="ensure_column_mapping-445"><a href="#ensure_column_mapping-445"><span class="linenos">445</span></a>
-</span><span id="ensure_column_mapping-446"><a href="#ensure_column_mapping-446"><span class="linenos">446</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_column_mapping-440"><a href="#ensure_column_mapping-440"><span class="linenos">440</span></a><span class="k">def</span> <span class="nf">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="ensure_column_mapping-441"><a href="#ensure_column_mapping-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="ensure_column_mapping-442"><a href="#ensure_column_mapping-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="ensure_column_mapping-443"><a href="#ensure_column_mapping-443"><span class="linenos">443</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-444"><a href="#ensure_column_mapping-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="n">mapping</span>
+</span><span id="ensure_column_mapping-445"><a href="#ensure_column_mapping-445"><span class="linenos">445</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-446"><a href="#ensure_column_mapping-446"><span class="linenos">446</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
+</span><span id="ensure_column_mapping-447"><a href="#ensure_column_mapping-447"><span class="linenos">447</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="ensure_column_mapping-448"><a href="#ensure_column_mapping-448"><span class="linenos">448</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="ensure_column_mapping-449"><a href="#ensure_column_mapping-449"><span class="linenos">449</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
+</span><span id="ensure_column_mapping-450"><a href="#ensure_column_mapping-450"><span class="linenos">450</span></a> <span class="p">}</span>
+</span><span id="ensure_column_mapping-451"><a href="#ensure_column_mapping-451"><span class="linenos">451</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
+</span><span id="ensure_column_mapping-452"><a href="#ensure_column_mapping-452"><span class="linenos">452</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-453"><a href="#ensure_column_mapping-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="ensure_column_mapping-454"><a href="#ensure_column_mapping-454"><span class="linenos">454</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-455"><a href="#ensure_column_mapping-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="ensure_column_mapping-456"><a href="#ensure_column_mapping-456"><span class="linenos">456</span></a>
+</span><span id="ensure_column_mapping-457"><a href="#ensure_column_mapping-457"><span class="linenos">457</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1765,19 +1805,19 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#flatten_schema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="flatten_schema-449"><a href="#flatten_schema-449"><span class="linenos">449</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
-</span><span id="flatten_schema-450"><a href="#flatten_schema-450"><span class="linenos">450</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="flatten_schema-451"><a href="#flatten_schema-451"><span class="linenos">451</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="flatten_schema-452"><a href="#flatten_schema-452"><span class="linenos">452</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="flatten_schema-453"><a href="#flatten_schema-453"><span class="linenos">453</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="flatten_schema-454"><a href="#flatten_schema-454"><span class="linenos">454</span></a>
-</span><span id="flatten_schema-455"><a href="#flatten_schema-455"><span class="linenos">455</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="flatten_schema-456"><a href="#flatten_schema-456"><span class="linenos">456</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="flatten_schema-457"><a href="#flatten_schema-457"><span class="linenos">457</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
-</span><span id="flatten_schema-458"><a href="#flatten_schema-458"><span class="linenos">458</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="flatten_schema-459"><a href="#flatten_schema-459"><span class="linenos">459</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
-</span><span id="flatten_schema-460"><a href="#flatten_schema-460"><span class="linenos">460</span></a>
-</span><span id="flatten_schema-461"><a href="#flatten_schema-461"><span class="linenos">461</span></a> <span class="k">return</span> <span class="n">tables</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="flatten_schema-460"><a href="#flatten_schema-460"><span class="linenos">460</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
+</span><span id="flatten_schema-461"><a href="#flatten_schema-461"><span class="linenos">461</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="flatten_schema-462"><a href="#flatten_schema-462"><span class="linenos">462</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="flatten_schema-463"><a href="#flatten_schema-463"><span class="linenos">463</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="flatten_schema-464"><a href="#flatten_schema-464"><span class="linenos">464</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="flatten_schema-465"><a href="#flatten_schema-465"><span class="linenos">465</span></a>
+</span><span id="flatten_schema-466"><a href="#flatten_schema-466"><span class="linenos">466</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="flatten_schema-467"><a href="#flatten_schema-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="flatten_schema-468"><a href="#flatten_schema-468"><span class="linenos">468</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
+</span><span id="flatten_schema-469"><a href="#flatten_schema-469"><span class="linenos">469</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="flatten_schema-470"><a href="#flatten_schema-470"><span class="linenos">470</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
+</span><span id="flatten_schema-471"><a href="#flatten_schema-471"><span class="linenos">471</span></a>
+</span><span id="flatten_schema-472"><a href="#flatten_schema-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">tables</span>
</span></pre></div>
@@ -1795,30 +1835,30 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#nested_get"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="nested_get-464"><a href="#nested_get-464"><span class="linenos">464</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="nested_get-465"><a href="#nested_get-465"><span class="linenos">465</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="nested_get-466"><a href="#nested_get-466"><span class="linenos">466</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="nested_get-467"><a href="#nested_get-467"><span class="linenos">467</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="nested_get-468"><a href="#nested_get-468"><span class="linenos">468</span></a><span class="sd"> Get a value for a nested dictionary.</span>
-</span><span id="nested_get-469"><a href="#nested_get-469"><span class="linenos">469</span></a>
-</span><span id="nested_get-470"><a href="#nested_get-470"><span class="linenos">470</span></a><span class="sd"> Args:</span>
-</span><span id="nested_get-471"><a href="#nested_get-471"><span class="linenos">471</span></a><span class="sd"> d: the dictionary to search.</span>
-</span><span id="nested_get-472"><a href="#nested_get-472"><span class="linenos">472</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
-</span><span id="nested_get-473"><a href="#nested_get-473"><span class="linenos">473</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
-</span><span id="nested_get-474"><a href="#nested_get-474"><span class="linenos">474</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
-</span><span id="nested_get-475"><a href="#nested_get-475"><span class="linenos">475</span></a>
-</span><span id="nested_get-476"><a href="#nested_get-476"><span class="linenos">476</span></a><span class="sd"> Returns:</span>
-</span><span id="nested_get-477"><a href="#nested_get-477"><span class="linenos">477</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
-</span><span id="nested_get-478"><a href="#nested_get-478"><span class="linenos">478</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="nested_get-479"><a href="#nested_get-479"><span class="linenos">479</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
-</span><span id="nested_get-480"><a href="#nested_get-480"><span class="linenos">480</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="nested_get-481"><a href="#nested_get-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="nested_get-482"><a href="#nested_get-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="nested_get-483"><a href="#nested_get-483"><span class="linenos">483</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
-</span><span id="nested_get-484"><a href="#nested_get-484"><span class="linenos">484</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="nested_get-485"><a href="#nested_get-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="nested_get-475"><a href="#nested_get-475"><span class="linenos">475</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="nested_get-476"><a href="#nested_get-476"><span class="linenos">476</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="nested_get-477"><a href="#nested_get-477"><span class="linenos">477</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="nested_get-478"><a href="#nested_get-478"><span class="linenos">478</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="nested_get-479"><a href="#nested_get-479"><span class="linenos">479</span></a><span class="sd"> Get a value for a nested dictionary.</span>
+</span><span id="nested_get-480"><a href="#nested_get-480"><span class="linenos">480</span></a>
+</span><span id="nested_get-481"><a href="#nested_get-481"><span class="linenos">481</span></a><span class="sd"> Args:</span>
+</span><span id="nested_get-482"><a href="#nested_get-482"><span class="linenos">482</span></a><span class="sd"> d: the dictionary to search.</span>
+</span><span id="nested_get-483"><a href="#nested_get-483"><span class="linenos">483</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
+</span><span id="nested_get-484"><a href="#nested_get-484"><span class="linenos">484</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
+</span><span id="nested_get-485"><a href="#nested_get-485"><span class="linenos">485</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
</span><span id="nested_get-486"><a href="#nested_get-486"><span class="linenos">486</span></a>
-</span><span id="nested_get-487"><a href="#nested_get-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="nested_get-487"><a href="#nested_get-487"><span class="linenos">487</span></a><span class="sd"> Returns:</span>
+</span><span id="nested_get-488"><a href="#nested_get-488"><span class="linenos">488</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
+</span><span id="nested_get-489"><a href="#nested_get-489"><span class="linenos">489</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="nested_get-490"><a href="#nested_get-490"><span class="linenos">490</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
+</span><span id="nested_get-491"><a href="#nested_get-491"><span class="linenos">491</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="nested_get-492"><a href="#nested_get-492"><span class="linenos">492</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="nested_get-493"><a href="#nested_get-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="nested_get-494"><a href="#nested_get-494"><span class="linenos">494</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
+</span><span id="nested_get-495"><a href="#nested_get-495"><span class="linenos">495</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="nested_get-496"><a href="#nested_get-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="nested_get-497"><a href="#nested_get-497"><span class="linenos">497</span></a>
+</span><span id="nested_get-498"><a href="#nested_get-498"><span class="linenos">498</span></a> <span class="k">return</span> <span class="n">d</span>
</span></pre></div>
@@ -1853,41 +1893,41 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#nested_set"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="nested_set-490"><a href="#nested_set-490"><span class="linenos">490</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="nested_set-491"><a href="#nested_set-491"><span class="linenos">491</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="nested_set-492"><a href="#nested_set-492"><span class="linenos">492</span></a><span class="sd"> In-place set a value for a nested dictionary</span>
-</span><span id="nested_set-493"><a href="#nested_set-493"><span class="linenos">493</span></a>
-</span><span id="nested_set-494"><a href="#nested_set-494"><span class="linenos">494</span></a><span class="sd"> Example:</span>
-</span><span id="nested_set-495"><a href="#nested_set-495"><span class="linenos">495</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="nested_set-496"><a href="#nested_set-496"><span class="linenos">496</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
-</span><span id="nested_set-497"><a href="#nested_set-497"><span class="linenos">497</span></a>
-</span><span id="nested_set-498"><a href="#nested_set-498"><span class="linenos">498</span></a><span class="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="nested_set-499"><a href="#nested_set-499"><span class="linenos">499</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
-</span><span id="nested_set-500"><a href="#nested_set-500"><span class="linenos">500</span></a>
-</span><span id="nested_set-501"><a href="#nested_set-501"><span class="linenos">501</span></a><span class="sd"> Args:</span>
-</span><span id="nested_set-502"><a href="#nested_set-502"><span class="linenos">502</span></a><span class="sd"> d: dictionary to update.</span>
-</span><span id="nested_set-503"><a href="#nested_set-503"><span class="linenos">503</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
-</span><span id="nested_set-504"><a href="#nested_set-504"><span class="linenos">504</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
-</span><span id="nested_set-505"><a href="#nested_set-505"><span class="linenos">505</span></a>
-</span><span id="nested_set-506"><a href="#nested_set-506"><span class="linenos">506</span></a><span class="sd"> Returns:</span>
-</span><span id="nested_set-507"><a href="#nested_set-507"><span class="linenos">507</span></a><span class="sd"> The (possibly) updated dictionary.</span>
-</span><span id="nested_set-508"><a href="#nested_set-508"><span class="linenos">508</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="nested_set-509"><a href="#nested_set-509"><span class="linenos">509</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
-</span><span id="nested_set-510"><a href="#nested_set-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="n">d</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="nested_set-501"><a href="#nested_set-501"><span class="linenos">501</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="nested_set-502"><a href="#nested_set-502"><span class="linenos">502</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="nested_set-503"><a href="#nested_set-503"><span class="linenos">503</span></a><span class="sd"> In-place set a value for a nested dictionary</span>
+</span><span id="nested_set-504"><a href="#nested_set-504"><span class="linenos">504</span></a>
+</span><span id="nested_set-505"><a href="#nested_set-505"><span class="linenos">505</span></a><span class="sd"> Example:</span>
+</span><span id="nested_set-506"><a href="#nested_set-506"><span class="linenos">506</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="nested_set-507"><a href="#nested_set-507"><span class="linenos">507</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
+</span><span id="nested_set-508"><a href="#nested_set-508"><span class="linenos">508</span></a>
+</span><span id="nested_set-509"><a href="#nested_set-509"><span class="linenos">509</span></a><span class="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="nested_set-510"><a href="#nested_set-510"><span class="linenos">510</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
</span><span id="nested_set-511"><a href="#nested_set-511"><span class="linenos">511</span></a>
-</span><span id="nested_set-512"><a href="#nested_set-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="nested_set-513"><a href="#nested_set-513"><span class="linenos">513</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="nested_set-514"><a href="#nested_set-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="n">d</span>
-</span><span id="nested_set-515"><a href="#nested_set-515"><span class="linenos">515</span></a>
-</span><span id="nested_set-516"><a href="#nested_set-516"><span class="linenos">516</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
-</span><span id="nested_set-517"><a href="#nested_set-517"><span class="linenos">517</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="nested_set-518"><a href="#nested_set-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
-</span><span id="nested_set-519"><a href="#nested_set-519"><span class="linenos">519</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
-</span><span id="nested_set-520"><a href="#nested_set-520"><span class="linenos">520</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="nested_set-521"><a href="#nested_set-521"><span class="linenos">521</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="nested_set-512"><a href="#nested_set-512"><span class="linenos">512</span></a><span class="sd"> Args:</span>
+</span><span id="nested_set-513"><a href="#nested_set-513"><span class="linenos">513</span></a><span class="sd"> d: dictionary to update.</span>
+</span><span id="nested_set-514"><a href="#nested_set-514"><span class="linenos">514</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
+</span><span id="nested_set-515"><a href="#nested_set-515"><span class="linenos">515</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
+</span><span id="nested_set-516"><a href="#nested_set-516"><span class="linenos">516</span></a>
+</span><span id="nested_set-517"><a href="#nested_set-517"><span class="linenos">517</span></a><span class="sd"> Returns:</span>
+</span><span id="nested_set-518"><a href="#nested_set-518"><span class="linenos">518</span></a><span class="sd"> The (possibly) updated dictionary.</span>
+</span><span id="nested_set-519"><a href="#nested_set-519"><span class="linenos">519</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="nested_set-520"><a href="#nested_set-520"><span class="linenos">520</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
+</span><span id="nested_set-521"><a href="#nested_set-521"><span class="linenos">521</span></a> <span class="k">return</span> <span class="n">d</span>
</span><span id="nested_set-522"><a href="#nested_set-522"><span class="linenos">522</span></a>
-</span><span id="nested_set-523"><a href="#nested_set-523"><span class="linenos">523</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="nested_set-524"><a href="#nested_set-524"><span class="linenos">524</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="nested_set-523"><a href="#nested_set-523"><span class="linenos">523</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="nested_set-524"><a href="#nested_set-524"><span class="linenos">524</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="nested_set-525"><a href="#nested_set-525"><span class="linenos">525</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="nested_set-526"><a href="#nested_set-526"><span class="linenos">526</span></a>
+</span><span id="nested_set-527"><a href="#nested_set-527"><span class="linenos">527</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
+</span><span id="nested_set-528"><a href="#nested_set-528"><span class="linenos">528</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="nested_set-529"><a href="#nested_set-529"><span class="linenos">529</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
+</span><span id="nested_set-530"><a href="#nested_set-530"><span class="linenos">530</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
+</span><span id="nested_set-531"><a href="#nested_set-531"><span class="linenos">531</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="nested_set-532"><a href="#nested_set-532"><span class="linenos">532</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="nested_set-533"><a href="#nested_set-533"><span class="linenos">533</span></a>
+</span><span id="nested_set-534"><a href="#nested_set-534"><span class="linenos">534</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="nested_set-535"><a href="#nested_set-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="n">d</span>
</span></pre></div>
diff --git a/docs/sqlglot/tokens.html b/docs/sqlglot/tokens.html
index 59e0fc6..ac9693c 100644
--- a/docs/sqlglot/tokens.html
+++ b/docs/sqlglot/tokens.html
@@ -151,6 +151,9 @@
<a class="variable" href="#TokenType.LR_ARROW">LR_ARROW</a>
</li>
<li>
+ <a class="variable" href="#TokenType.DAT">DAT</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.LT_AT">LT_AT</a>
</li>
<li>
@@ -244,6 +247,9 @@
<a class="variable" href="#TokenType.USMALLINT">USMALLINT</a>
</li>
<li>
+ <a class="variable" href="#TokenType.MEDIUMINT">MEDIUMINT</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.INT">INT</a>
</li>
<li>
@@ -322,6 +328,9 @@
<a class="variable" href="#TokenType.TIME">TIME</a>
</li>
<li>
+ <a class="variable" href="#TokenType.TIMETZ">TIMETZ</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.TIMESTAMP">TIMESTAMP</a>
</li>
<li>
@@ -409,6 +418,9 @@
<a class="variable" href="#TokenType.XML">XML</a>
</li>
<li>
+ <a class="variable" href="#TokenType.YEAR">YEAR</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.UNIQUEIDENTIFIER">UNIQUEIDENTIFIER</a>
</li>
<li>
@@ -445,6 +457,24 @@
<a class="variable" href="#TokenType.ENUM">ENUM</a>
</li>
<li>
+ <a class="variable" href="#TokenType.ENUM8">ENUM8</a>
+ </li>
+ <li>
+ <a class="variable" href="#TokenType.ENUM16">ENUM16</a>
+ </li>
+ <li>
+ <a class="variable" href="#TokenType.FIXEDSTRING">FIXEDSTRING</a>
+ </li>
+ <li>
+ <a class="variable" href="#TokenType.LOWCARDINALITY">LOWCARDINALITY</a>
+ </li>
+ <li>
+ <a class="variable" href="#TokenType.NESTED">NESTED</a>
+ </li>
+ <li>
+ <a class="variable" href="#TokenType.UNKNOWN">UNKNOWN</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.ALIAS">ALIAS</a>
</li>
<li>
@@ -508,6 +538,9 @@
<a class="variable" href="#TokenType.COMMIT">COMMIT</a>
</li>
<li>
+ <a class="variable" href="#TokenType.CONNECT_BY">CONNECT_BY</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.CONSTRAINT">CONSTRAINT</a>
</li>
<li>
@@ -862,6 +895,9 @@
<a class="variable" href="#TokenType.SORT_BY">SORT_BY</a>
</li>
<li>
+ <a class="variable" href="#TokenType.START_WITH">START_WITH</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.STRUCT">STRUCT</a>
</li>
<li>
@@ -924,6 +960,12 @@
<li>
<a class="variable" href="#TokenType.UNIQUE">UNIQUE</a>
</li>
+ <li>
+ <a class="variable" href="#TokenType.VERSION_SNAPSHOT">VERSION_SNAPSHOT</a>
+ </li>
+ <li>
+ <a class="variable" href="#TokenType.TIMESTAMP_SNAPSHOT">TIMESTAMP_SNAPSHOT</a>
+ </li>
</ul>
</li>
@@ -1120,1114 +1162,1140 @@
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">HASH_ARROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">DHASH_ARROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">LR_ARROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">LT_AT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">AT_GT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">DOLLAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">SESSION_PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">DAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">XOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">BLOCK_START</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">BLOCK_END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">SPACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">BREAK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">NUMBER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">IDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">DATABASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">COLUMN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">COLUMN_DEF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">TABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">VAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">BIT_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">HEX_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">BYTE_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">NATIONAL_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">RAW_STRING</span> <span class="o">=</span> <span class="n">auto</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="c1"># types</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a> <span class="n">TIME</span> <span class="o">=</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">TIMESTAMP</span> <span class="o">=</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">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</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"># keywords</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="n">ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="n">ALTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="n">ALWAYS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a> <span class="n">ALL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="n">ANTI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="n">ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a> <span class="n">APPLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a> <span class="n">ASC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="n">ASOF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a> <span class="n">AUTO_INCREMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="n">BEGIN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">BETWEEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="n">CACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="n">CASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="n">CHARACTER_SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="n">CLUSTER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="n">COLLATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="n">COMMAND</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">COMMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="n">COMMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">CONSTRAINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a> <span class="n">CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a> <span class="n">CROSS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="n">CUBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a> <span class="n">CURRENT_DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="n">CURRENT_DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">CURRENT_TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a> <span class="n">CURRENT_TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a> <span class="n">CURRENT_USER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="n">DEFAULT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a> <span class="n">DELETE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a> <span class="n">DESC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="n">DESCRIBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="n">DICTIONARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a> <span class="n">DISTINCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="n">DISTRIBUTE_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="n">DIV</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="n">DROP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="n">ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="n">END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="n">ESCAPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="n">EXCEPT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="n">EXECUTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="n">EXISTS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a> <span class="n">FALSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="n">FETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">FILTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a> <span class="n">FINAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a> <span class="n">FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="n">FOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a> <span class="n">FORCE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="n">FOREIGN_KEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="n">FORMAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">FROM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="n">FULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="n">FUNCTION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="n">GLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="n">GLOBAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="n">GROUP_BY</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">GROUPING_SETS</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">HAVING</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">HINT</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">IGNORE</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">ILIKE</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">ILIKE_ANY</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">IN</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">INDEX</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">INNER</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">INSERT</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">INTERSECT</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">INTERVAL</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">INTO</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">INTRODUCER</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">IRLIKE</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">IS</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">ISNULL</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">JOIN</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">JOIN_MARKER</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">KEEP</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">LANGUAGE</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">LATERAL</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">LEFT</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">LIKE</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">LIKE_ANY</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">LIMIT</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">LOAD</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">LOCK</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">MAP</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">MATCH_RECOGNIZE</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">MEMBER_OF</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">MERGE</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">MOD</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">NATURAL</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">NEXT</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">NOTNULL</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">NULL</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">OFFSET</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">ON</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">ORDER_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">ORDERED</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">ORDINALITY</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">OUTER</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">OVER</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">OVERLAPS</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">OVERWRITE</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">PARTITION</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">PARTITION_BY</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">PERCENT</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">PIVOT</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">PLACEHOLDER</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">PRAGMA</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">PRIMARY_KEY</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">PROCEDURE</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">PROPERTIES</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">PSEUDO_TYPE</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">QUALIFY</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">QUOTE</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">RANGE</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">RECURSIVE</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">REPLACE</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">RETURNING</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">REFERENCES</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">RIGHT</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">RLIKE</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">ROLLBACK</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">ROLLUP</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">ROW</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">ROWS</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">SELECT</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">SEMI</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">SEPARATOR</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">SERDE_PROPERTIES</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">SET</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">SETTINGS</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">SHOW</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">SIMILAR_TO</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">SOME</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">SORT_BY</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">STRUCT</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">TABLE_SAMPLE</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">TEMPORARY</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">TOP</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">THEN</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">TRUE</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">UNCACHE</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">UNION</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">UNNEST</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">UNPIVOT</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">UPDATE</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">USE</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">USING</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">VALUES</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">VIEW</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">VOLATILE</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">WHEN</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">WHERE</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">WINDOW</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</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;start&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-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">DAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">LT_AT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">AT_GT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">DOLLAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">SESSION_PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">DAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">XOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">BLOCK_START</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">BLOCK_END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">SPACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">BREAK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">NUMBER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">IDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">DATABASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">COLUMN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">COLUMN_DEF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">TABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">VAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">BIT_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">HEX_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">BYTE_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">NATIONAL_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">RAW_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="c1"># types</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">MEDIUMINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a> <span class="n">JSON</span> <span class="o">=</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">JSONB</span> <span class="o">=</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">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a> <span class="n">TIMETZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="n">YEAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="n">ENUM8</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a> <span class="n">ENUM16</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="n">FIXEDSTRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="n">LOWCARDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a> <span class="n">NESTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</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="c1"># keywords</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a> <span class="n">ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="n">ALTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">ALWAYS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="n">ALL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="n">ANTI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="n">ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="n">APPLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="n">ASC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">ASOF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="n">AUTO_INCREMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">BEGIN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a> <span class="n">BETWEEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a> <span class="n">CACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="n">CASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a> <span class="n">CHARACTER_SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="n">CLUSTER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">COLLATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a> <span class="n">COMMAND</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a> <span class="n">COMMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="n">COMMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a> <span class="n">CONNECT_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a> <span class="n">CONSTRAINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="n">CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="n">CROSS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a> <span class="n">CUBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="n">CURRENT_DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="n">CURRENT_DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="n">CURRENT_TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="n">CURRENT_TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="n">CURRENT_USER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="n">DEFAULT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="n">DELETE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="n">DESC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="n">DESCRIBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a> <span class="n">DICTIONARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="n">DISTINCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">DISTRIBUTE_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a> <span class="n">DIV</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a> <span class="n">DROP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="n">ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a> <span class="n">END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="n">ESCAPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="n">EXCEPT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">EXECUTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="n">EXISTS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="n">FALSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="n">FETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="n">FILTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="n">FINAL</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">FIRST</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">FOR</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">FORCE</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">FOREIGN_KEY</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">FORMAT</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">FROM</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">FULL</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">FUNCTION</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">GLOB</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">GLOBAL</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">GROUP_BY</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">GROUPING_SETS</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">HAVING</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">HINT</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">IGNORE</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">ILIKE</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">ILIKE_ANY</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">IN</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">INDEX</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">INNER</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">INSERT</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">INTERSECT</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">INTERVAL</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">INTO</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">INTRODUCER</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">IRLIKE</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">IS</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">ISNULL</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">JOIN</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">JOIN_MARKER</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">KEEP</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">LANGUAGE</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">LATERAL</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">LEFT</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">LIKE</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">LIKE_ANY</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">LIMIT</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">LOAD</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">LOCK</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">MAP</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">MATCH_RECOGNIZE</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">MEMBER_OF</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">MERGE</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">MOD</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">NATURAL</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">NEXT</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">NOTNULL</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">NULL</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">OFFSET</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">ON</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">ORDER_BY</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">ORDERED</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">ORDINALITY</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">OUTER</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">OVER</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">OVERLAPS</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">OVERWRITE</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">PARTITION</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">PARTITION_BY</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">PERCENT</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">PIVOT</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">PLACEHOLDER</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">PRAGMA</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">PRIMARY_KEY</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">PROCEDURE</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">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">PSEUDO_TYPE</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">QUALIFY</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">QUOTE</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">RANGE</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">RECURSIVE</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">REPLACE</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">RETURNING</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">REFERENCES</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">RIGHT</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">RLIKE</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">ROLLBACK</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">ROLLUP</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">ROW</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">ROWS</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">SELECT</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">SEMI</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">SEPARATOR</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">SERDE_PROPERTIES</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">SET</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">SETTINGS</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">SHOW</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">SIMILAR_TO</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">SOME</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">SORT_BY</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">START_WITH</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">STRUCT</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">TABLE_SAMPLE</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">TEMPORARY</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">TOP</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">THEN</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">TRUE</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">UNCACHE</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">UNION</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">UNNEST</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">UNPIVOT</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">UPDATE</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 class="n">USE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">USING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="n">VALUES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">VIEW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">VOLATILE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="n">WHEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="n">WHERE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="n">WINDOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a> <span class="n">WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="n">UNIQUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="n">VERSION_SNAPSHOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="n">TIMESTAMP_SNAPSHOT</span> <span class="o">=</span> <span class="n">auto</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">start</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">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-349"><a href="#L-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="L-350"><a href="#L-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="L-351"><a href="#L-351"><span class="linenos"> 351</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Token initializer.</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="sd"> Args:</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a><span class="sd"> token_type: The TokenType Enum.</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a><span class="sd"> text: The text of the token.</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a><span class="sd"> line: The line that the token ends on.</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a><span class="sd"> col: The column that the token ends on.</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a><span class="sd"> start: The start index of the token.</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a><span class="sd"> end: The ending index of the token.</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a><span class="sd"> comments: The comments to attach to the token.</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</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-363"><a href="#L-363"><span class="linenos"> 363</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-364"><a href="#L-364"><span class="linenos"> 364</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-365"><a href="#L-365"><span class="linenos"> 365</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-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">=</span> <span class="n">end</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</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-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="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-371"><a href="#L-371"><span class="linenos"> 371</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-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;&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-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><span id="L-375"><a href="#L-375"><span class="linenos"> 375</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-376"><a href="#L-376"><span class="linenos"> 376</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-377"><a href="#L-377"><span class="linenos"> 377</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-378"><a href="#L-378"><span class="linenos"> 378</span></a>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="k">def</span> <span class="nf">_convert_quotes</span><span class="p">(</span><span class="n">arr</span><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-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="p">(</span><span 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="n">arr</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</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">class</span> <span class="nc">Token</span><span class="p">:</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</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;start&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-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="nd">@classmethod</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</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-337"><a href="#L-337"><span class="linenos"> 337</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-338"><a href="#L-338"><span class="linenos"> 338</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-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="nd">@classmethod</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</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-342"><a href="#L-342"><span class="linenos"> 342</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-343"><a href="#L-343"><span class="linenos"> 343</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-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="nd">@classmethod</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</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-347"><a href="#L-347"><span class="linenos"> 347</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-348"><a href="#L-348"><span class="linenos"> 348</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-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="nd">@classmethod</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</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-352"><a href="#L-352"><span class="linenos"> 352</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-353"><a href="#L-353"><span class="linenos"> 353</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-354"><a href="#L-354"><span class="linenos"> 354</span></a>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="k">def</span> <span class="fm">__init__</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="p">,</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</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-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</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-360"><a href="#L-360"><span class="linenos"> 360</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-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">start</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-362"><a href="#L-362"><span class="linenos"> 362</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-363"><a href="#L-363"><span class="linenos"> 363</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-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Token initializer.</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="sd"> Args:</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a><span class="sd"> token_type: The TokenType Enum.</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a><span class="sd"> text: The text of the token.</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a><span class="sd"> line: The line that the token ends on.</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a><span class="sd"> col: The column that the token ends on.</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a><span class="sd"> start: The start index of the token.</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a><span class="sd"> end: The ending index of the token.</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a><span class="sd"> comments: The comments to attach to the token.</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</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-378"><a href="#L-378"><span class="linenos"> 378</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-379"><a href="#L-379"><span class="linenos"> 379</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-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">=</span> <span class="n">end</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</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-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">_quotes_to_format</span><span class="p">(</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">arr</span><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><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">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]:</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">token_type</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">_convert_quotes</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</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-385"><a href="#L-385"><span class="linenos"> 385</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-386"><a href="#L-386"><span class="linenos"> 386</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-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><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="o">=</span> <span class="n">_convert_quotes</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">QUOTES</span><span class="p">)</span>
-</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">_IDENTIFIERS</span> <span class="o">=</span> <span class="n">_convert_quotes</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-391"><a href="#L-391"><span class="linenos"> 391</span></a>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span> <span class="o">=</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><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">p</span> <span class="o">+</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_STRING</span><span class="p">)</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</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="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">items</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">p</span> <span class="ow">in</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-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="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_STRINGS</span><span class="p">),</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_STRINGS</span><span class="p">),</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_STRINGS</span><span class="p">),</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">RAW_STRINGS</span><span class="p">),</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="p">}</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">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-405"><a href="#L-405"><span class="linenos"> 405</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-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="o">**</span><span class="nb">dict</span><span class="p">(</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</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-409"><a href="#L-409"><span class="linenos"> 409</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-410"><a href="#L-410"><span class="linenos"> 410</span></a> <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="s2">&quot;#}&quot;</span><span class="p">,</span> <span class="c1"># Ensure Jinja comments are tokenized correctly in all dialects</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">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-415"><a href="#L-415"><span class="linenos"> 415</span></a> <span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</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-417"><a href="#L-417"><span class="linenos"> 417</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-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="o">*</span><span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="o">*</span><span class="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">,</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="o">*</span><span class="n">klass</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</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="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-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="p">)</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="k">return</span> <span class="n">klass</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a>
+</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</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-390"><a href="#L-390"><span class="linenos"> 390</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-391"><a href="#L-391"><span class="linenos"> 391</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-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">def</span> <span class="nf">_convert_quotes</span><span class="p">(</span><span class="n">arr</span><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-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="k">return</span> <span class="nb">dict</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 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="n">arr</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="p">)</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a>
+</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="k">def</span> <span class="nf">_quotes_to_format</span><span class="p">(</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">arr</span><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><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">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">token_type</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">_convert_quotes</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="o">=</span> <span class="n">_convert_quotes</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">QUOTES</span><span class="p">)</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_IDENTIFIERS</span> <span class="o">=</span> <span class="n">_convert_quotes</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-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="n">klass</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="n">p</span> <span class="o">+</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_STRING</span><span class="p">)</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</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="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</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-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="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_STRINGS</span><span class="p">),</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_STRINGS</span><span class="p">),</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_STRINGS</span><span class="p">),</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a> <span class="o">**</span><span class="n">_quotes_to_format</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">RAW_STRINGS</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">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-419"><a href="#L-419"><span class="linenos"> 419</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-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="o">**</span><span class="nb">dict</span><span class="p">(</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="p">(</span><span class="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-423"><a href="#L-423"><span class="linenos"> 423</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-424"><a href="#L-424"><span class="linenos"> 424</span></a> <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="s2">&quot;#}&quot;</span><span class="p">,</span> <span class="c1"># Ensure Jinja comments are tokenized correctly in all dialects</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="p">}</span>
</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a>
-</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a><span class="k">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-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</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">L_PAREN</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">R_PAREN</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">L_BRACKET</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">R_BRACKET</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">L_BRACE</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">R_BRACE</span><span class="p">,</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</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-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">CARET</span><span class="p">,</span>
-</span><span id="L-438"><a href="#L-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">COLON</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">COMMA</span><span class="p">,</span>
-</span><span id="L-440"><a href="#L-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">DOT</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">DASH</span><span class="p">,</span>
-</span><span id="L-442"><a href="#L-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">EQ</span><span class="p">,</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</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-444"><a href="#L-444"><span class="linenos"> 444</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-445"><a href="#L-445"><span class="linenos"> 445</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-446"><a href="#L-446"><span class="linenos"> 446</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-447"><a href="#L-447"><span class="linenos"> 447</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-448"><a href="#L-448"><span class="linenos"> 448</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-449"><a href="#L-449"><span class="linenos"> 449</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-450"><a href="#L-450"><span class="linenos"> 450</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-451"><a href="#L-451"><span class="linenos"> 451</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-452"><a href="#L-452"><span class="linenos"> 452</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-453"><a href="#L-453"><span class="linenos"> 453</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-454"><a href="#L-454"><span class="linenos"> 454</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-455"><a href="#L-455"><span class="linenos"> 455</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-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</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-459"><a href="#L-459"><span class="linenos"> 459</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-460"><a href="#L-460"><span class="linenos"> 460</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-461"><a href="#L-461"><span class="linenos"> 461</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-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><span id="L-464"><a href="#L-464"><span class="linenos"> 464</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-465"><a href="#L-465"><span class="linenos"> 465</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-466"><a href="#L-466"><span class="linenos"> 466</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-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</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-469"><a href="#L-469"><span class="linenos"> 469</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-470"><a href="#L-470"><span class="linenos"> 470</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-471"><a href="#L-471"><span class="linenos"> 471</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-472"><a href="#L-472"><span class="linenos"> 472</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-473"><a href="#L-473"><span class="linenos"> 473</span></a>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="c1"># Autofilled</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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">_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-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</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-480"><a href="#L-480"><span class="linenos"> 480</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-481"><a href="#L-481"><span class="linenos"> 481</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-482"><a href="#L-482"><span class="linenos"> 482</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-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-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">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</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-487"><a href="#L-487"><span class="linenos"> 487</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-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</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-491"><a href="#L-491"><span class="linenos"> 491</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-492"><a href="#L-492"><span class="linenos"> 492</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-493"><a href="#L-493"><span class="linenos"> 493</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-494"><a href="#L-494"><span class="linenos"> 494</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-495"><a href="#L-495"><span class="linenos"> 495</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-496"><a href="#L-496"><span class="linenos"> 496</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-497"><a href="#L-497"><span class="linenos"> 497</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-498"><a href="#L-498"><span class="linenos"> 498</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-499"><a href="#L-499"><span class="linenos"> 499</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-500"><a href="#L-500"><span class="linenos"> 500</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-501"><a href="#L-501"><span class="linenos"> 501</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-502"><a href="#L-502"><span class="linenos"> 502</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-503"><a href="#L-503"><span class="linenos"> 503</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-504"><a href="#L-504"><span class="linenos"> 504</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-505"><a href="#L-505"><span class="linenos"> 505</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-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</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-508"><a href="#L-508"><span class="linenos"> 508</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-509"><a href="#L-509"><span class="linenos"> 509</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-510"><a href="#L-510"><span class="linenos"> 510</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-511"><a href="#L-511"><span class="linenos"> 511</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-512"><a href="#L-512"><span class="linenos"> 512</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-513"><a href="#L-513"><span class="linenos"> 513</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-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</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-516"><a href="#L-516"><span class="linenos"> 516</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-517"><a href="#L-517"><span class="linenos"> 517</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-518"><a href="#L-518"><span class="linenos"> 518</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-519"><a href="#L-519"><span class="linenos"> 519</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-520"><a href="#L-520"><span class="linenos"> 520</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-521"><a href="#L-521"><span class="linenos"> 521</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-522"><a href="#L-522"><span class="linenos"> 522</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-523"><a href="#L-523"><span class="linenos"> 523</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-524"><a href="#L-524"><span class="linenos"> 524</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-525"><a href="#L-525"><span class="linenos"> 525</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-526"><a href="#L-526"><span class="linenos"> 526</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-527"><a href="#L-527"><span class="linenos"> 527</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-528"><a href="#L-528"><span class="linenos"> 528</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-529"><a href="#L-529"><span class="linenos"> 529</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-530"><a href="#L-530"><span class="linenos"> 530</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-531"><a href="#L-531"><span class="linenos"> 531</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-532"><a href="#L-532"><span class="linenos"> 532</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-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</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-535"><a href="#L-535"><span class="linenos"> 535</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-536"><a href="#L-536"><span class="linenos"> 536</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-537"><a href="#L-537"><span class="linenos"> 537</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-538"><a href="#L-538"><span class="linenos"> 538</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-539"><a href="#L-539"><span class="linenos"> 539</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-540"><a href="#L-540"><span class="linenos"> 540</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-541"><a href="#L-541"><span class="linenos"> 541</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-542"><a href="#L-542"><span class="linenos"> 542</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-543"><a href="#L-543"><span class="linenos"> 543</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-544"><a href="#L-544"><span class="linenos"> 544</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-545"><a href="#L-545"><span class="linenos"> 545</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-546"><a href="#L-546"><span class="linenos"> 546</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-547"><a href="#L-547"><span class="linenos"> 547</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-548"><a href="#L-548"><span class="linenos"> 548</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-549"><a href="#L-549"><span class="linenos"> 549</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-550"><a href="#L-550"><span class="linenos"> 550</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-551"><a href="#L-551"><span class="linenos"> 551</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-552"><a href="#L-552"><span class="linenos"> 552</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-553"><a href="#L-553"><span class="linenos"> 553</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-554"><a href="#L-554"><span class="linenos"> 554</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-555"><a href="#L-555"><span class="linenos"> 555</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-556"><a href="#L-556"><span class="linenos"> 556</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-557"><a href="#L-557"><span class="linenos"> 557</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-558"><a href="#L-558"><span class="linenos"> 558</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-559"><a href="#L-559"><span class="linenos"> 559</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-560"><a href="#L-560"><span class="linenos"> 560</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-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</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-563"><a href="#L-563"><span class="linenos"> 563</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-564"><a href="#L-564"><span class="linenos"> 564</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-565"><a href="#L-565"><span class="linenos"> 565</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-566"><a href="#L-566"><span class="linenos"> 566</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-567"><a href="#L-567"><span class="linenos"> 567</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-568"><a href="#L-568"><span class="linenos"> 568</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-569"><a href="#L-569"><span class="linenos"> 569</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-570"><a href="#L-570"><span class="linenos"> 570</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-571"><a href="#L-571"><span class="linenos"> 571</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-572"><a href="#L-572"><span class="linenos"> 572</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-573"><a href="#L-573"><span class="linenos"> 573</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-574"><a href="#L-574"><span class="linenos"> 574</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-575"><a href="#L-575"><span class="linenos"> 575</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-576"><a href="#L-576"><span class="linenos"> 576</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-577"><a href="#L-577"><span class="linenos"> 577</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-578"><a href="#L-578"><span class="linenos"> 578</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-579"><a href="#L-579"><span class="linenos"> 579</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-580"><a href="#L-580"><span class="linenos"> 580</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-581"><a href="#L-581"><span class="linenos"> 581</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-582"><a href="#L-582"><span class="linenos"> 582</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-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</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-586"><a href="#L-586"><span class="linenos"> 586</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-587"><a href="#L-587"><span class="linenos"> 587</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-588"><a href="#L-588"><span class="linenos"> 588</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-589"><a href="#L-589"><span class="linenos"> 589</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-590"><a href="#L-590"><span class="linenos"> 590</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-591"><a href="#L-591"><span class="linenos"> 591</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-592"><a href="#L-592"><span class="linenos"> 592</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-593"><a href="#L-593"><span class="linenos"> 593</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-594"><a href="#L-594"><span class="linenos"> 594</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-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</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-597"><a href="#L-597"><span class="linenos"> 597</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-598"><a href="#L-598"><span class="linenos"> 598</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-599"><a href="#L-599"><span class="linenos"> 599</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-600"><a href="#L-600"><span class="linenos"> 600</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-601"><a href="#L-601"><span class="linenos"> 601</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-602"><a href="#L-602"><span class="linenos"> 602</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-603"><a href="#L-603"><span class="linenos"> 603</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-604"><a href="#L-604"><span class="linenos"> 604</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-605"><a href="#L-605"><span class="linenos"> 605</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-606"><a href="#L-606"><span class="linenos"> 606</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-607"><a href="#L-607"><span class="linenos"> 607</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-608"><a href="#L-608"><span class="linenos"> 608</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-609"><a href="#L-609"><span class="linenos"> 609</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-610"><a href="#L-610"><span class="linenos"> 610</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-611"><a href="#L-611"><span class="linenos"> 611</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-612"><a href="#L-612"><span class="linenos"> 612</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-613"><a href="#L-613"><span class="linenos"> 613</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-614"><a href="#L-614"><span class="linenos"> 614</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-615"><a href="#L-615"><span class="linenos"> 615</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-616"><a href="#L-616"><span class="linenos"> 616</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-617"><a href="#L-617"><span class="linenos"> 617</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-618"><a href="#L-618"><span class="linenos"> 618</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-619"><a href="#L-619"><span class="linenos"> 619</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-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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-622"><a href="#L-622"><span class="linenos"> 622</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-623"><a href="#L-623"><span class="linenos"> 623</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-624"><a href="#L-624"><span class="linenos"> 624</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-625"><a href="#L-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="L-626"><a href="#L-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="L-627"><a href="#L-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="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</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-630"><a href="#L-630"><span class="linenos"> 630</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-631"><a href="#L-631"><span class="linenos"> 631</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-632"><a href="#L-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="L-633"><a href="#L-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="L-634"><a href="#L-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="L-635"><a href="#L-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="L-636"><a href="#L-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="L-637"><a href="#L-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="L-638"><a href="#L-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="L-639"><a href="#L-639"><span class="linenos"> 639</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-640"><a href="#L-640"><span class="linenos"> 640</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-641"><a href="#L-641"><span class="linenos"> 641</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-642"><a href="#L-642"><span class="linenos"> 642</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-643"><a href="#L-643"><span class="linenos"> 643</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-644"><a href="#L-644"><span class="linenos"> 644</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-645"><a href="#L-645"><span class="linenos"> 645</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-646"><a href="#L-646"><span class="linenos"> 646</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-647"><a href="#L-647"><span class="linenos"> 647</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-648"><a href="#L-648"><span class="linenos"> 648</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-649"><a href="#L-649"><span class="linenos"> 649</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-650"><a href="#L-650"><span class="linenos"> 650</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-651"><a href="#L-651"><span class="linenos"> 651</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-652"><a href="#L-652"><span class="linenos"> 652</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-653"><a href="#L-653"><span class="linenos"> 653</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-654"><a href="#L-654"><span class="linenos"> 654</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-655"><a href="#L-655"><span class="linenos"> 655</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-656"><a href="#L-656"><span class="linenos"> 656</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-657"><a href="#L-657"><span class="linenos"> 657</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-658"><a href="#L-658"><span class="linenos"> 658</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-659"><a href="#L-659"><span class="linenos"> 659</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-660"><a href="#L-660"><span class="linenos"> 660</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-661"><a href="#L-661"><span class="linenos"> 661</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-662"><a href="#L-662"><span class="linenos"> 662</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-663"><a href="#L-663"><span class="linenos"> 663</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-664"><a href="#L-664"><span class="linenos"> 664</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-665"><a href="#L-665"><span class="linenos"> 665</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-666"><a href="#L-666"><span class="linenos"> 666</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-667"><a href="#L-667"><span class="linenos"> 667</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-668"><a href="#L-668"><span class="linenos"> 668</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-669"><a href="#L-669"><span class="linenos"> 669</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-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</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-672"><a href="#L-672"><span class="linenos"> 672</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-673"><a href="#L-673"><span class="linenos"> 673</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-674"><a href="#L-674"><span class="linenos"> 674</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-675"><a href="#L-675"><span class="linenos"> 675</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-676"><a href="#L-676"><span class="linenos"> 676</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-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</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-679"><a href="#L-679"><span class="linenos"> 679</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-680"><a href="#L-680"><span class="linenos"> 680</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-681"><a href="#L-681"><span class="linenos"> 681</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-682"><a href="#L-682"><span class="linenos"> 682</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-683"><a href="#L-683"><span class="linenos"> 683</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-684"><a href="#L-684"><span class="linenos"> 684</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-685"><a href="#L-685"><span class="linenos"> 685</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-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</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-688"><a href="#L-688"><span class="linenos"> 688</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-689"><a href="#L-689"><span class="linenos"> 689</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-690"><a href="#L-690"><span class="linenos"> 690</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-691"><a href="#L-691"><span class="linenos"> 691</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-692"><a href="#L-692"><span class="linenos"> 692</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-693"><a href="#L-693"><span class="linenos"> 693</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-694"><a href="#L-694"><span class="linenos"> 694</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-695"><a href="#L-695"><span class="linenos"> 695</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-696"><a href="#L-696"><span class="linenos"> 696</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-697"><a href="#L-697"><span class="linenos"> 697</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-698"><a href="#L-698"><span class="linenos"> 698</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-699"><a href="#L-699"><span class="linenos"> 699</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-700"><a href="#L-700"><span class="linenos"> 700</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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</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-703"><a href="#L-703"><span class="linenos"> 703</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-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</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-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
-</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
-</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
-</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</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-720"><a href="#L-720"><span class="linenos"> 720</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-721"><a href="#L-721"><span class="linenos"> 721</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-722"><a href="#L-722"><span class="linenos"> 722</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-723"><a href="#L-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="L-724"><a href="#L-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="L-725"><a href="#L-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="L-726"><a href="#L-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="L-727"><a href="#L-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="L-728"><a href="#L-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="L-729"><a href="#L-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="L-730"><a href="#L-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="L-731"><a href="#L-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="L-732"><a href="#L-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="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="p">}</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="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-737"><a href="#L-737"><span class="linenos"> 737</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-738"><a href="#L-738"><span class="linenos"> 738</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-739"><a href="#L-739"><span class="linenos"> 739</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-740"><a href="#L-740"><span class="linenos"> 740</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-741"><a href="#L-741"><span class="linenos"> 741</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-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="p">}</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="n">COMMANDS</span> <span class="o">=</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">COMMAND</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">EXECUTE</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">FETCH</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">SHOW</span><span class="p">,</span>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <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="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-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="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</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-755"><a href="#L-755"><span class="linenos"> 755</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-428"><a href="#L-428"><span class="linenos"> 428</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-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</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-431"><a href="#L-431"><span class="linenos"> 431</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-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="o">*</span><span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">,</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="o">*</span><span class="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">,</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="o">*</span><span class="n">klass</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</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="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-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="p">)</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a>
+</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="k">return</span> <span class="n">klass</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><span id="L-442"><a href="#L-442"><span class="linenos"> 442</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-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="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-445"><a href="#L-445"><span class="linenos"> 445</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-446"><a href="#L-446"><span class="linenos"> 446</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-447"><a href="#L-447"><span class="linenos"> 447</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-448"><a href="#L-448"><span class="linenos"> 448</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-449"><a href="#L-449"><span class="linenos"> 449</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-450"><a href="#L-450"><span class="linenos"> 450</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-451"><a href="#L-451"><span class="linenos"> 451</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-452"><a href="#L-452"><span class="linenos"> 452</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-453"><a href="#L-453"><span class="linenos"> 453</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-454"><a href="#L-454"><span class="linenos"> 454</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-455"><a href="#L-455"><span class="linenos"> 455</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-456"><a href="#L-456"><span class="linenos"> 456</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-457"><a href="#L-457"><span class="linenos"> 457</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-458"><a href="#L-458"><span class="linenos"> 458</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-459"><a href="#L-459"><span class="linenos"> 459</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-460"><a href="#L-460"><span class="linenos"> 460</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-461"><a href="#L-461"><span class="linenos"> 461</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-462"><a href="#L-462"><span class="linenos"> 462</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-463"><a href="#L-463"><span class="linenos"> 463</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-464"><a href="#L-464"><span class="linenos"> 464</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-465"><a href="#L-465"><span class="linenos"> 465</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-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">STAR</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">TILDA</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">PLACEHOLDER</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">PARAMETER</span><span class="p">,</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</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-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">IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</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-475"><a href="#L-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">HASH</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">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-479"><a href="#L-479"><span class="linenos"> 479</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-480"><a href="#L-480"><span class="linenos"> 480</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-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</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-483"><a href="#L-483"><span class="linenos"> 483</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-484"><a href="#L-484"><span class="linenos"> 484</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-485"><a href="#L-485"><span class="linenos"> 485</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-486"><a href="#L-486"><span class="linenos"> 486</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-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="c1"># Autofilled</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a>
+</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="n">_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-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</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-494"><a href="#L-494"><span class="linenos"> 494</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-495"><a href="#L-495"><span class="linenos"> 495</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-496"><a href="#L-496"><span class="linenos"> 496</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-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-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="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</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-501"><a href="#L-501"><span class="linenos"> 501</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-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</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-505"><a href="#L-505"><span class="linenos"> 505</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-506"><a href="#L-506"><span class="linenos"> 506</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-507"><a href="#L-507"><span class="linenos"> 507</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-508"><a href="#L-508"><span class="linenos"> 508</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-509"><a href="#L-509"><span class="linenos"> 509</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-510"><a href="#L-510"><span class="linenos"> 510</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-511"><a href="#L-511"><span class="linenos"> 511</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-512"><a href="#L-512"><span class="linenos"> 512</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-513"><a href="#L-513"><span class="linenos"> 513</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-514"><a href="#L-514"><span class="linenos"> 514</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-515"><a href="#L-515"><span class="linenos"> 515</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-516"><a href="#L-516"><span class="linenos"> 516</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-517"><a href="#L-517"><span class="linenos"> 517</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-518"><a href="#L-518"><span class="linenos"> 518</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-519"><a href="#L-519"><span class="linenos"> 519</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-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</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-522"><a href="#L-522"><span class="linenos"> 522</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-523"><a href="#L-523"><span class="linenos"> 523</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-524"><a href="#L-524"><span class="linenos"> 524</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-525"><a href="#L-525"><span class="linenos"> 525</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-526"><a href="#L-526"><span class="linenos"> 526</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-527"><a href="#L-527"><span class="linenos"> 527</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-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</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-530"><a href="#L-530"><span class="linenos"> 530</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-531"><a href="#L-531"><span class="linenos"> 531</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-532"><a href="#L-532"><span class="linenos"> 532</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-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</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-535"><a href="#L-535"><span class="linenos"> 535</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-536"><a href="#L-536"><span class="linenos"> 536</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-537"><a href="#L-537"><span class="linenos"> 537</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-538"><a href="#L-538"><span class="linenos"> 538</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-539"><a href="#L-539"><span class="linenos"> 539</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-540"><a href="#L-540"><span class="linenos"> 540</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-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="s2">&quot;CONNECT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">,</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</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-543"><a href="#L-543"><span class="linenos"> 543</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-544"><a href="#L-544"><span class="linenos"> 544</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-545"><a href="#L-545"><span class="linenos"> 545</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-546"><a href="#L-546"><span class="linenos"> 546</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-547"><a href="#L-547"><span class="linenos"> 547</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-548"><a href="#L-548"><span class="linenos"> 548</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-549"><a href="#L-549"><span class="linenos"> 549</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-550"><a href="#L-550"><span class="linenos"> 550</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-551"><a href="#L-551"><span class="linenos"> 551</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-552"><a href="#L-552"><span class="linenos"> 552</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-553"><a href="#L-553"><span class="linenos"> 553</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-554"><a href="#L-554"><span class="linenos"> 554</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-555"><a href="#L-555"><span class="linenos"> 555</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-556"><a href="#L-556"><span class="linenos"> 556</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-557"><a href="#L-557"><span class="linenos"> 557</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-558"><a href="#L-558"><span class="linenos"> 558</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-559"><a href="#L-559"><span class="linenos"> 559</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-560"><a href="#L-560"><span class="linenos"> 560</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-561"><a href="#L-561"><span class="linenos"> 561</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-562"><a href="#L-562"><span class="linenos"> 562</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-563"><a href="#L-563"><span class="linenos"> 563</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-564"><a href="#L-564"><span class="linenos"> 564</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-565"><a href="#L-565"><span class="linenos"> 565</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-566"><a href="#L-566"><span class="linenos"> 566</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-567"><a href="#L-567"><span class="linenos"> 567</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-568"><a href="#L-568"><span class="linenos"> 568</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-569"><a href="#L-569"><span class="linenos"> 569</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-570"><a href="#L-570"><span class="linenos"> 570</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-571"><a href="#L-571"><span class="linenos"> 571</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-572"><a href="#L-572"><span class="linenos"> 572</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-573"><a href="#L-573"><span class="linenos"> 573</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-574"><a href="#L-574"><span class="linenos"> 574</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-575"><a href="#L-575"><span class="linenos"> 575</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-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</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-578"><a href="#L-578"><span class="linenos"> 578</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-579"><a href="#L-579"><span class="linenos"> 579</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-580"><a href="#L-580"><span class="linenos"> 580</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-581"><a href="#L-581"><span class="linenos"> 581</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-582"><a href="#L-582"><span class="linenos"> 582</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-583"><a href="#L-583"><span class="linenos"> 583</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-584"><a href="#L-584"><span class="linenos"> 584</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-585"><a href="#L-585"><span class="linenos"> 585</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-586"><a href="#L-586"><span class="linenos"> 586</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-587"><a href="#L-587"><span class="linenos"> 587</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-588"><a href="#L-588"><span class="linenos"> 588</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-589"><a href="#L-589"><span class="linenos"> 589</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-590"><a href="#L-590"><span class="linenos"> 590</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-591"><a href="#L-591"><span class="linenos"> 591</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-592"><a href="#L-592"><span class="linenos"> 592</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-593"><a href="#L-593"><span class="linenos"> 593</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-594"><a href="#L-594"><span class="linenos"> 594</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-595"><a href="#L-595"><span class="linenos"> 595</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-596"><a href="#L-596"><span class="linenos"> 596</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-597"><a href="#L-597"><span class="linenos"> 597</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-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</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-601"><a href="#L-601"><span class="linenos"> 601</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-602"><a href="#L-602"><span class="linenos"> 602</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-603"><a href="#L-603"><span class="linenos"> 603</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-604"><a href="#L-604"><span class="linenos"> 604</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-605"><a href="#L-605"><span class="linenos"> 605</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-606"><a href="#L-606"><span class="linenos"> 606</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-607"><a href="#L-607"><span class="linenos"> 607</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-608"><a href="#L-608"><span class="linenos"> 608</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-609"><a href="#L-609"><span class="linenos"> 609</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-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</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-612"><a href="#L-612"><span class="linenos"> 612</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-613"><a href="#L-613"><span class="linenos"> 613</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-614"><a href="#L-614"><span class="linenos"> 614</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-615"><a href="#L-615"><span class="linenos"> 615</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-616"><a href="#L-616"><span class="linenos"> 616</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-617"><a href="#L-617"><span class="linenos"> 617</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-618"><a href="#L-618"><span class="linenos"> 618</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-619"><a href="#L-619"><span class="linenos"> 619</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-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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-622"><a href="#L-622"><span class="linenos"> 622</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-623"><a href="#L-623"><span class="linenos"> 623</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-624"><a href="#L-624"><span class="linenos"> 624</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-625"><a href="#L-625"><span class="linenos"> 625</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-626"><a href="#L-626"><span class="linenos"> 626</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-627"><a href="#L-627"><span class="linenos"> 627</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-628"><a href="#L-628"><span class="linenos"> 628</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-629"><a href="#L-629"><span class="linenos"> 629</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-630"><a href="#L-630"><span class="linenos"> 630</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-631"><a href="#L-631"><span class="linenos"> 631</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-632"><a href="#L-632"><span class="linenos"> 632</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-633"><a href="#L-633"><span class="linenos"> 633</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-634"><a href="#L-634"><span class="linenos"> 634</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-635"><a href="#L-635"><span class="linenos"> 635</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-636"><a href="#L-636"><span class="linenos"> 636</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-637"><a href="#L-637"><span class="linenos"> 637</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-638"><a href="#L-638"><span class="linenos"> 638</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-639"><a href="#L-639"><span class="linenos"> 639</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-640"><a href="#L-640"><span class="linenos"> 640</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-641"><a href="#L-641"><span class="linenos"> 641</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-642"><a href="#L-642"><span class="linenos"> 642</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-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</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-645"><a href="#L-645"><span class="linenos"> 645</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-646"><a href="#L-646"><span class="linenos"> 646</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-647"><a href="#L-647"><span class="linenos"> 647</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-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;START WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">,</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</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-650"><a href="#L-650"><span class="linenos"> 650</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-651"><a href="#L-651"><span class="linenos"> 651</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-652"><a href="#L-652"><span class="linenos"> 652</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-653"><a href="#L-653"><span class="linenos"> 653</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-654"><a href="#L-654"><span class="linenos"> 654</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-655"><a href="#L-655"><span class="linenos"> 655</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-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</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-658"><a href="#L-658"><span class="linenos"> 658</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-659"><a href="#L-659"><span class="linenos"> 659</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-660"><a href="#L-660"><span class="linenos"> 660</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-661"><a href="#L-661"><span class="linenos"> 661</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-662"><a href="#L-662"><span class="linenos"> 662</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-663"><a href="#L-663"><span class="linenos"> 663</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-664"><a href="#L-664"><span class="linenos"> 664</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-665"><a href="#L-665"><span class="linenos"> 665</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-666"><a href="#L-666"><span class="linenos"> 666</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-667"><a href="#L-667"><span class="linenos"> 667</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-668"><a href="#L-668"><span class="linenos"> 668</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-669"><a href="#L-669"><span class="linenos"> 669</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-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</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-672"><a href="#L-672"><span class="linenos"> 672</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-673"><a href="#L-673"><span class="linenos"> 673</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-674"><a href="#L-674"><span class="linenos"> 674</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-675"><a href="#L-675"><span class="linenos"> 675</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-676"><a href="#L-676"><span class="linenos"> 676</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-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</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-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</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-681"><a href="#L-681"><span class="linenos"> 681</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-682"><a href="#L-682"><span class="linenos"> 682</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-683"><a href="#L-683"><span class="linenos"> 683</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-684"><a href="#L-684"><span class="linenos"> 684</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-685"><a href="#L-685"><span class="linenos"> 685</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-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</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-688"><a href="#L-688"><span class="linenos"> 688</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-689"><a href="#L-689"><span class="linenos"> 689</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-690"><a href="#L-690"><span class="linenos"> 690</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-691"><a href="#L-691"><span class="linenos"> 691</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-692"><a href="#L-692"><span class="linenos"> 692</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-693"><a href="#L-693"><span class="linenos"> 693</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-694"><a href="#L-694"><span class="linenos"> 694</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-695"><a href="#L-695"><span class="linenos"> 695</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-696"><a href="#L-696"><span class="linenos"> 696</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-697"><a href="#L-697"><span class="linenos"> 697</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-698"><a href="#L-698"><span class="linenos"> 698</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-699"><a href="#L-699"><span class="linenos"> 699</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-700"><a href="#L-700"><span class="linenos"> 700</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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</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-703"><a href="#L-703"><span class="linenos"> 703</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-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</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-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</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-708"><a href="#L-708"><span class="linenos"> 708</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-709"><a href="#L-709"><span class="linenos"> 709</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-710"><a href="#L-710"><span class="linenos"> 710</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-711"><a href="#L-711"><span class="linenos"> 711</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-712"><a href="#L-712"><span class="linenos"> 712</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-713"><a href="#L-713"><span class="linenos"> 713</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-714"><a href="#L-714"><span class="linenos"> 714</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-715"><a href="#L-715"><span class="linenos"> 715</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-716"><a href="#L-716"><span class="linenos"> 716</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-717"><a href="#L-717"><span class="linenos"> 717</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-718"><a href="#L-718"><span class="linenos"> 718</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-719"><a href="#L-719"><span class="linenos"> 719</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-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</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-722"><a href="#L-722"><span class="linenos"> 722</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-723"><a href="#L-723"><span class="linenos"> 723</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-724"><a href="#L-724"><span class="linenos"> 724</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-725"><a href="#L-725"><span class="linenos"> 725</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-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</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-739"><a href="#L-739"><span class="linenos"> 739</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-740"><a href="#L-740"><span class="linenos"> 740</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-741"><a href="#L-741"><span class="linenos"> 741</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-742"><a href="#L-742"><span class="linenos"> 742</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-743"><a href="#L-743"><span class="linenos"> 743</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-744"><a href="#L-744"><span class="linenos"> 744</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-745"><a href="#L-745"><span class="linenos"> 745</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-746"><a href="#L-746"><span class="linenos"> 746</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-747"><a href="#L-747"><span class="linenos"> 747</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-748"><a href="#L-748"><span class="linenos"> 748</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-749"><a href="#L-749"><span class="linenos"> 749</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-750"><a href="#L-750"><span class="linenos"> 750</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-751"><a href="#L-751"><span class="linenos"> 751</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-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;FOR VERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;FOR TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="p">}</span>
</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
-</span><span id="L-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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;size&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;tokens&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;_start&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;_current&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;_line&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;_col&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;_comments&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;_char&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;_end&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;_peek&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;_prev_token_line&quot;</span><span class="p">,</span>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="p">)</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</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-758"><a href="#L-758"><span class="linenos"> 758</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-759"><a href="#L-759"><span class="linenos"> 759</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-760"><a href="#L-760"><span class="linenos"> 760</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-761"><a href="#L-761"><span class="linenos"> 761</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-762"><a href="#L-762"><span class="linenos"> 762</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-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="p">}</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">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <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="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-773"><a href="#L-773"><span class="linenos"> 773</span></a>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</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-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><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="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-778"><a href="#L-778"><span class="linenos"> 778</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-779"><a href="#L-779"><span class="linenos"> 779</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-780"><a href="#L-780"><span class="linenos"> 780</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-781"><a href="#L-781"><span class="linenos"> 781</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-782"><a href="#L-782"><span class="linenos"> 782</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-783"><a href="#L-783"><span class="linenos"> 783</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-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</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-786"><a href="#L-786"><span class="linenos"> 786</span></a>
-</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">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_end</span> <span class="o">=</span> <span class="kc">False</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">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_prev_token_line</span> <span class="o">=</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><span id="L-792"><a href="#L-792"><span class="linenos"> 792</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-793"><a href="#L-793"><span class="linenos"> 793</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-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</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">sql</span> <span class="o">=</span> <span class="n">sql</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">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-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</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-776"><a href="#L-776"><span class="linenos"> 776</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-777"><a href="#L-777"><span class="linenos"> 777</span></a>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
+</span><span id="L-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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;sql&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;size&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;_start&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;_current&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;_line&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;_col&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;_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;_char&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;_end&quot;</span><span class="p">,</span>
+</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
+</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="p">)</span>
+</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a>
+</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</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-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="k">try</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">_scan</span><span class="p">()</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</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-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</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-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
-</span><span id="L-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 class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</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-799"><a href="#L-799"><span class="linenos"> 799</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-800"><a href="#L-800"><span class="linenos"> 800</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-801"><a href="#L-801"><span class="linenos"> 801</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-802"><a href="#L-802"><span class="linenos"> 802</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-803"><a href="#L-803"><span class="linenos"> 803</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-804"><a href="#L-804"><span class="linenos"> 804</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-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</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-807"><a href="#L-807"><span class="linenos"> 807</span></a>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</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-809"><a href="#L-809"><span class="linenos"> 809</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-810"><a href="#L-810"><span class="linenos"> 810</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-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_end</span> <span class="o">=</span> <span class="kc">False</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">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a>
-</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="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-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="k">break</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">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-817"><a href="#L-817"><span class="linenos"> 817</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-818"><a href="#L-818"><span class="linenos"> 818</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-819"><a href="#L-819"><span class="linenos"> 819</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-820"><a href="#L-820"><span class="linenos"> 820</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-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</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-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">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-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">break</span>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</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-814"><a href="#L-814"><span class="linenos"> 814</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-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</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">sql</span> <span class="o">=</span> <span class="n">sql</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">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-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">try</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">_scan</span><span class="p">()</span>
+</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</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-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</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-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
</span><span id="L-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</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-829"><a href="#L-829"><span class="linenos"> 829</span></a>
-</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="k">def</span> <span class="nf">_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-831"><a href="#L-831"><span class="linenos"> 831</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-832"><a href="#L-832"><span class="linenos"> 832</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-827"><a href="#L-827"><span class="linenos"> 827</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-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="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-830"><a href="#L-830"><span class="linenos"> 830</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-831"><a href="#L-831"><span class="linenos"> 831</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-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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-835"><a href="#L-835"><span class="linenos"> 835</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-834"><a href="#L-834"><span class="linenos"> 834</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a>
-</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</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-841"><a href="#L-841"><span class="linenos"> 841</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-842"><a href="#L-842"><span class="linenos"> 842</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-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</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-845"><a href="#L-845"><span class="linenos"> 845</span></a>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</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-847"><a href="#L-847"><span class="linenos"> 847</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-848"><a href="#L-848"><span class="linenos"> 848</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-849"><a href="#L-849"><span class="linenos"> 849</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-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">_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-838"><a href="#L-838"><span class="linenos"> 838</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-839"><a href="#L-839"><span class="linenos"> 839</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-840"><a href="#L-840"><span class="linenos"> 840</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-841"><a href="#L-841"><span class="linenos"> 841</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-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</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-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">until</span> <span class="ow">and</span> <span class="n">until</span><span class="p">():</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="k">break</span>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</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-850"><a href="#L-850"><span class="linenos"> 850</span></a>
-</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
-</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</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-852"><a href="#L-852"><span class="linenos"> 852</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-853"><a href="#L-853"><span class="linenos"> 853</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-854"><a href="#L-854"><span class="linenos"> 854</span></a>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</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-856"><a href="#L-856"><span class="linenos"> 856</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-857"><a href="#L-857"><span class="linenos"> 857</span></a>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="L-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="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-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
-</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="nd">@property</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</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-872"><a href="#L-872"><span class="linenos"> 872</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-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">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="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-881"><a href="#L-881"><span class="linenos"> 881</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-882"><a href="#L-882"><span class="linenos"> 882</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-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">Token</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="p">,</span>
-</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
-</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
-</span><span id="L-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">_start</span><span class="p">,</span>
-</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
-</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="p">)</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="p">)</span>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</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-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">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a>
+</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</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-862"><a href="#L-862"><span class="linenos"> 862</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-863"><a href="#L-863"><span class="linenos"> 863</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-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="k">else</span><span class="p">:</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">_col</span> <span class="o">+=</span> <span class="n">i</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="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-868"><a href="#L-868"><span class="linenos"> 868</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-869"><a href="#L-869"><span class="linenos"> 869</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-870"><a href="#L-870"><span class="linenos"> 870</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-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 class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
+</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
+</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-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="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="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-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="L-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="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-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a>
+</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="nd">@property</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</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-893"><a href="#L-893"><span class="linenos"> 893</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-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="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-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
-</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</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-899"><a href="#L-899"><span class="linenos"> 899</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-900"><a href="#L-900"><span class="linenos"> 900</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-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="p">):</span>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</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-903"><a href="#L-903"><span class="linenos"> 903</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-904"><a href="#L-904"><span class="linenos"> 904</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-905"><a href="#L-905"><span class="linenos"> 905</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-906"><a href="#L-906"><span class="linenos"> 906</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-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-909"><a href="#L-909"><span class="linenos"> 909</span></a>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">def</span> <span class="nf">_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-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</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-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</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-918"><a href="#L-918"><span class="linenos"> 918</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-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">while</span> <span class="n">chars</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">skip</span><span class="p">:</span>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
-</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</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-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="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="k">break</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</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">size</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span 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-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">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-935"><a href="#L-935"><span class="linenos"> 935</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-936"><a href="#L-936"><span class="linenos"> 936</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-937"><a href="#L-937"><span class="linenos"> 937</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-938"><a href="#L-938"><span class="linenos"> 938</span></a>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</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-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
-</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</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">if</span> <span class="ow">not</span> <span class="n">word</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="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-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">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-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">return</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</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-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">return</span>
-</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">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-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="k">return</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</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-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="k">return</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="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-964"><a href="#L-964"><span class="linenos"> 964</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-965"><a href="#L-965"><span class="linenos"> 965</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-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="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-968"><a href="#L-968"><span class="linenos"> 968</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-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="k">return</span> <span class="kc">False</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="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-972"><a href="#L-972"><span class="linenos"> 972</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-973"><a href="#L-973"><span class="linenos"> 973</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-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">if</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</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">_advance</span><span class="p">(</span><span class="n">comment_start_size</span><span class="p">)</span>
-</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="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-980"><a href="#L-980"><span class="linenos"> 980</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-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-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="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-984"><a href="#L-984"><span class="linenos"> 984</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-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</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-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</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-989"><a href="#L-989"><span class="linenos"> 989</span></a>
-</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</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-993"><a href="#L-993"><span class="linenos"> 993</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-994"><a href="#L-994"><span class="linenos"> 994</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-995"><a href="#L-995"><span class="linenos"> 995</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-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
+</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="L-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">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">_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-902"><a href="#L-902"><span class="linenos"> 902</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-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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
+</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</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-906"><a href="#L-906"><span class="linenos"> 906</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-907"><a href="#L-907"><span class="linenos"> 907</span></a>
+</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">Token</span><span class="p">(</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="n">token_type</span><span class="p">,</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
+</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
+</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="n">start</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="p">,</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="p">)</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="p">)</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span 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-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="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-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</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-925"><a href="#L-925"><span class="linenos"> 925</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-926"><a href="#L-926"><span class="linenos"> 926</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-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="p">):</span>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</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-930"><a href="#L-930"><span class="linenos"> 930</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-931"><a href="#L-931"><span class="linenos"> 931</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-932"><a href="#L-932"><span class="linenos"> 932</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-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</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-935"><a href="#L-935"><span class="linenos"> 935</span></a>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</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-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</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-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</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-944"><a href="#L-944"><span class="linenos"> 944</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-945"><a href="#L-945"><span class="linenos"> 945</span></a>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</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-951"><a href="#L-951"><span class="linenos"> 951</span></a>
+</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">break</span>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</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 class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</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-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="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-961"><a href="#L-961"><span class="linenos"> 961</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-962"><a href="#L-962"><span class="linenos"> 962</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-963"><a href="#L-963"><span class="linenos"> 963</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-964"><a href="#L-964"><span class="linenos"> 964</span></a>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="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-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
+</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</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="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a>
+</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</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-978"><a href="#L-978"><span class="linenos"> 978</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-979"><a href="#L-979"><span class="linenos"> 979</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-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">return</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">_scan_var</span><span class="p">()</span>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="k">return</span>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a>
+</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="k">return</span>
+</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</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-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="k">return</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="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-990"><a href="#L-990"><span class="linenos"> 990</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-991"><a href="#L-991"><span class="linenos"> 991</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-992"><a href="#L-992"><span class="linenos"> 992</span></a>
+</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</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-994"><a href="#L-994"><span class="linenos"> 994</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-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">return</span> <span class="kc">True</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">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-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
-</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</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-1002"><a href="#L-1002"><span class="linenos">1002</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-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</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-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="L-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="n">decimal</span> <span class="o">=</span> <span class="kc">False</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">0</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="kc">True</span><span class="p">:</span>
-</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</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-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-1013"><a href="#L-1013"><span class="linenos">1013</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-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</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">_advance</span><span class="p">()</span>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">else</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">TokenType</span><span class="o">.</span><span class="n">VAR</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">_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-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</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-1027"><a href="#L-1027"><span class="linenos">1027</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-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="k">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-1031"><a href="#L-1031"><span class="linenos">1031</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-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="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 class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</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-998"><a href="#L-998"><span class="linenos"> 998</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-999"><a href="#L-999"><span class="linenos"> 999</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-1000"><a href="#L-1000"><span class="linenos">1000</span></a>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</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 class="n">comment_start_size</span><span class="p">)</span>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a>
+</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="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-1006"><a href="#L-1006"><span class="linenos">1006</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-1007"><a href="#L-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 class="n">alnum</span><span class="o">=</span><span class="kc">True</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="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-1010"><a href="#L-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 class="n">comment_end_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</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-1013"><a href="#L-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 class="n">alnum</span><span class="o">=</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 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-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="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
+</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</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-1019"><a href="#L-1019"><span class="linenos">1019</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-1020"><a href="#L-1020"><span class="linenos">1020</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-1021"><a href="#L-1021"><span class="linenos">1021</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-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">return</span> <span class="kc">True</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">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-1026"><a href="#L-1026"><span class="linenos">1026</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-1027"><a href="#L-1027"><span class="linenos">1027</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-1028"><a href="#L-1028"><span class="linenos">1028</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-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</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-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="L-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="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</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="n">token_type</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">_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-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">DCOLON</span><span class="p">,</span> <span class="s2">&quot;::&quot;</span><span class="p">)</span>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</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">_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-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="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-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">_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-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="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-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">_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-1049"><a href="#L-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="L-1050"><a href="#L-1050"><span class="linenos">1050</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-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</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-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_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-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><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</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-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</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">IDENTIFIER</span><span class="p">)</span>
-</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="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-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</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-1071"><a href="#L-1071"><span class="linenos">1071</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-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">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-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="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="L-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">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">while</span> <span class="kc">True</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">_peek</span><span class="o">.</span><span class="n">isdigit</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">_advance</span><span class="p">()</span>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</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-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">else</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">_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-1046"><a href="#L-1046"><span class="linenos">1046</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-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</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">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-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</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-1053"><a href="#L-1053"><span class="linenos">1053</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-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="k">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-1057"><a href="#L-1057"><span class="linenos">1057</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-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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 class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1064"><a href="#L-1064"><span class="linenos">1064</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-1065"><a href="#L-1065"><span class="linenos">1065</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-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</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="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-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="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-1070"><a href="#L-1070"><span class="linenos">1070</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-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</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-1073"><a href="#L-1073"><span class="linenos">1073</span></a>
+</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</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-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</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-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</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">_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-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">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-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</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-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
+</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
+</span><span id="L-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">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="L-1092"><a href="#L-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">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a>
-</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">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
-</span><span id="L-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="k">if</span> <span class="n">base</span><span class="p">:</span>
-</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="k">except</span><span class="p">:</span>
-</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</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-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="p">)</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">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-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">_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-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="k">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-1111"><a href="#L-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="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</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-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="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-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</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-1118"><a href="#L-1118"><span class="linenos">1118</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-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">break</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</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-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</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-1097"><a href="#L-1097"><span class="linenos">1097</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-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
+</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
+</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="L-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">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
+</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
+</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="k">return</span> <span class="kc">False</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="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
-</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</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-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <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="k">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">text</span> <span class="o">=</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">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-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
-</span><span id="L-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">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</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="n">escapes</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">):</span>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</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-1137"><a href="#L-1137"><span class="linenos">1137</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-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</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-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="k">except</span><span class="p">:</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</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-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="p">)</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</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-1132"><a href="#L-1132"><span class="linenos">1132</span></a>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="k">return</span> <span class="kc">True</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">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-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</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-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 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-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">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-1147"><a href="#L-1147"><span class="linenos">1147</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-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="k">break</span>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="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-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-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="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-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">return</span> <span class="n">text</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</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-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</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-1144"><a href="#L-1144"><span class="linenos">1144</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-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="k">break</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="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
+</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</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-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="p">)</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">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="n">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-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
+</span><span id="L-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">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="n">escapes</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">):</span>
+</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</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-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</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-1166"><a href="#L-1166"><span class="linenos">1166</span></a>
+</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="k">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-1168"><a href="#L-1168"><span class="linenos">1168</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-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="k">if</span> <span class="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-1173"><a href="#L-1173"><span class="linenos">1173</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-1174"><a href="#L-1174"><span class="linenos">1174</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-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="k">break</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-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="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -2283,271 +2351,285 @@
</span><span id="TokenType-49"><a href="#TokenType-49"><span class="linenos"> 49</span></a> <span class="n">HASH_ARROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="TokenType-50"><a href="#TokenType-50"><span class="linenos"> 50</span></a> <span class="n">DHASH_ARROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="TokenType-51"><a href="#TokenType-51"><span class="linenos"> 51</span></a> <span class="n">LR_ARROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-52"><a href="#TokenType-52"><span class="linenos"> 52</span></a> <span class="n">LT_AT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-53"><a href="#TokenType-53"><span class="linenos"> 53</span></a> <span class="n">AT_GT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-54"><a href="#TokenType-54"><span class="linenos"> 54</span></a> <span class="n">DOLLAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-55"><a href="#TokenType-55"><span class="linenos"> 55</span></a> <span class="n">PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-56"><a href="#TokenType-56"><span class="linenos"> 56</span></a> <span class="n">SESSION_PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-57"><a href="#TokenType-57"><span class="linenos"> 57</span></a> <span class="n">DAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-58"><a href="#TokenType-58"><span class="linenos"> 58</span></a> <span class="n">XOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-59"><a href="#TokenType-59"><span class="linenos"> 59</span></a>
-</span><span id="TokenType-60"><a href="#TokenType-60"><span class="linenos"> 60</span></a> <span class="n">BLOCK_START</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-61"><a href="#TokenType-61"><span class="linenos"> 61</span></a> <span class="n">BLOCK_END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-62"><a href="#TokenType-62"><span class="linenos"> 62</span></a>
-</span><span id="TokenType-63"><a href="#TokenType-63"><span class="linenos"> 63</span></a> <span class="n">SPACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-64"><a href="#TokenType-64"><span class="linenos"> 64</span></a> <span class="n">BREAK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-65"><a href="#TokenType-65"><span class="linenos"> 65</span></a>
-</span><span id="TokenType-66"><a href="#TokenType-66"><span class="linenos"> 66</span></a> <span class="n">STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-67"><a href="#TokenType-67"><span class="linenos"> 67</span></a> <span class="n">NUMBER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-68"><a href="#TokenType-68"><span class="linenos"> 68</span></a> <span class="n">IDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-69"><a href="#TokenType-69"><span class="linenos"> 69</span></a> <span class="n">DATABASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-70"><a href="#TokenType-70"><span class="linenos"> 70</span></a> <span class="n">COLUMN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-71"><a href="#TokenType-71"><span class="linenos"> 71</span></a> <span class="n">COLUMN_DEF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-72"><a href="#TokenType-72"><span class="linenos"> 72</span></a> <span class="n">SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-73"><a href="#TokenType-73"><span class="linenos"> 73</span></a> <span class="n">TABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-74"><a href="#TokenType-74"><span class="linenos"> 74</span></a> <span class="n">VAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-75"><a href="#TokenType-75"><span class="linenos"> 75</span></a> <span class="n">BIT_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-76"><a href="#TokenType-76"><span class="linenos"> 76</span></a> <span class="n">HEX_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-77"><a href="#TokenType-77"><span class="linenos"> 77</span></a> <span class="n">BYTE_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-78"><a href="#TokenType-78"><span class="linenos"> 78</span></a> <span class="n">NATIONAL_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-79"><a href="#TokenType-79"><span class="linenos"> 79</span></a> <span class="n">RAW_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-80"><a href="#TokenType-80"><span class="linenos"> 80</span></a>
-</span><span id="TokenType-81"><a href="#TokenType-81"><span class="linenos"> 81</span></a> <span class="c1"># types</span>
-</span><span id="TokenType-82"><a href="#TokenType-82"><span class="linenos"> 82</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-83"><a href="#TokenType-83"><span class="linenos"> 83</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-84"><a href="#TokenType-84"><span class="linenos"> 84</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-85"><a href="#TokenType-85"><span class="linenos"> 85</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-86"><a href="#TokenType-86"><span class="linenos"> 86</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-87"><a href="#TokenType-87"><span class="linenos"> 87</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-88"><a href="#TokenType-88"><span class="linenos"> 88</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-89"><a href="#TokenType-89"><span class="linenos"> 89</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-90"><a href="#TokenType-90"><span class="linenos"> 90</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-91"><a href="#TokenType-91"><span class="linenos"> 91</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-92"><a href="#TokenType-92"><span class="linenos"> 92</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-93"><a href="#TokenType-93"><span class="linenos"> 93</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-94"><a href="#TokenType-94"><span class="linenos"> 94</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-95"><a href="#TokenType-95"><span class="linenos"> 95</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-96"><a href="#TokenType-96"><span class="linenos"> 96</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-97"><a href="#TokenType-97"><span class="linenos"> 97</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-98"><a href="#TokenType-98"><span class="linenos"> 98</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-99"><a href="#TokenType-99"><span class="linenos"> 99</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-100"><a href="#TokenType-100"><span class="linenos">100</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-101"><a href="#TokenType-101"><span class="linenos">101</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-102"><a href="#TokenType-102"><span class="linenos">102</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-103"><a href="#TokenType-103"><span class="linenos">103</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-104"><a href="#TokenType-104"><span class="linenos">104</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-105"><a href="#TokenType-105"><span class="linenos">105</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-106"><a href="#TokenType-106"><span class="linenos">106</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-107"><a href="#TokenType-107"><span class="linenos">107</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-108"><a href="#TokenType-108"><span class="linenos">108</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-109"><a href="#TokenType-109"><span class="linenos">109</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-110"><a href="#TokenType-110"><span class="linenos">110</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-111"><a href="#TokenType-111"><span class="linenos">111</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-112"><a href="#TokenType-112"><span class="linenos">112</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-113"><a href="#TokenType-113"><span class="linenos">113</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-114"><a href="#TokenType-114"><span class="linenos">114</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-115"><a href="#TokenType-115"><span class="linenos">115</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-116"><a href="#TokenType-116"><span class="linenos">116</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-117"><a href="#TokenType-117"><span class="linenos">117</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-118"><a href="#TokenType-118"><span class="linenos">118</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-119"><a href="#TokenType-119"><span class="linenos">119</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-120"><a href="#TokenType-120"><span class="linenos">120</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-121"><a href="#TokenType-121"><span class="linenos">121</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-122"><a href="#TokenType-122"><span class="linenos">122</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-123"><a href="#TokenType-123"><span class="linenos">123</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-124"><a href="#TokenType-124"><span class="linenos">124</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-125"><a href="#TokenType-125"><span class="linenos">125</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-126"><a href="#TokenType-126"><span class="linenos">126</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-127"><a href="#TokenType-127"><span class="linenos">127</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-128"><a href="#TokenType-128"><span class="linenos">128</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-129"><a href="#TokenType-129"><span class="linenos">129</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-130"><a href="#TokenType-130"><span class="linenos">130</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-131"><a href="#TokenType-131"><span class="linenos">131</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-132"><a href="#TokenType-132"><span class="linenos">132</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-133"><a href="#TokenType-133"><span class="linenos">133</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-134"><a href="#TokenType-134"><span class="linenos">134</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-135"><a href="#TokenType-135"><span class="linenos">135</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-136"><a href="#TokenType-136"><span class="linenos">136</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-137"><a href="#TokenType-137"><span class="linenos">137</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-138"><a href="#TokenType-138"><span class="linenos">138</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-139"><a href="#TokenType-139"><span class="linenos">139</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-140"><a href="#TokenType-140"><span class="linenos">140</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-141"><a href="#TokenType-141"><span class="linenos">141</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-142"><a href="#TokenType-142"><span class="linenos">142</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-143"><a href="#TokenType-143"><span class="linenos">143</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-144"><a href="#TokenType-144"><span class="linenos">144</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-145"><a href="#TokenType-145"><span class="linenos">145</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-146"><a href="#TokenType-146"><span class="linenos">146</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-147"><a href="#TokenType-147"><span class="linenos">147</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-148"><a href="#TokenType-148"><span class="linenos">148</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-149"><a href="#TokenType-149"><span class="linenos">149</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-150"><a href="#TokenType-150"><span class="linenos">150</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-151"><a href="#TokenType-151"><span class="linenos">151</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-152"><a href="#TokenType-152"><span class="linenos">152</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-153"><a href="#TokenType-153"><span class="linenos">153</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-154"><a href="#TokenType-154"><span class="linenos">154</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-155"><a href="#TokenType-155"><span class="linenos">155</span></a>
-</span><span id="TokenType-156"><a href="#TokenType-156"><span class="linenos">156</span></a> <span class="c1"># keywords</span>
-</span><span id="TokenType-157"><a href="#TokenType-157"><span class="linenos">157</span></a> <span class="n">ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-158"><a href="#TokenType-158"><span class="linenos">158</span></a> <span class="n">ALTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-159"><a href="#TokenType-159"><span class="linenos">159</span></a> <span class="n">ALWAYS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-160"><a href="#TokenType-160"><span class="linenos">160</span></a> <span class="n">ALL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-161"><a href="#TokenType-161"><span class="linenos">161</span></a> <span class="n">ANTI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-162"><a href="#TokenType-162"><span class="linenos">162</span></a> <span class="n">ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-163"><a href="#TokenType-163"><span class="linenos">163</span></a> <span class="n">APPLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-164"><a href="#TokenType-164"><span class="linenos">164</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-165"><a href="#TokenType-165"><span class="linenos">165</span></a> <span class="n">ASC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-166"><a href="#TokenType-166"><span class="linenos">166</span></a> <span class="n">ASOF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-167"><a href="#TokenType-167"><span class="linenos">167</span></a> <span class="n">AUTO_INCREMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-168"><a href="#TokenType-168"><span class="linenos">168</span></a> <span class="n">BEGIN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-169"><a href="#TokenType-169"><span class="linenos">169</span></a> <span class="n">BETWEEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-170"><a href="#TokenType-170"><span class="linenos">170</span></a> <span class="n">CACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-171"><a href="#TokenType-171"><span class="linenos">171</span></a> <span class="n">CASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-172"><a href="#TokenType-172"><span class="linenos">172</span></a> <span class="n">CHARACTER_SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-173"><a href="#TokenType-173"><span class="linenos">173</span></a> <span class="n">CLUSTER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-174"><a href="#TokenType-174"><span class="linenos">174</span></a> <span class="n">COLLATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-175"><a href="#TokenType-175"><span class="linenos">175</span></a> <span class="n">COMMAND</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-176"><a href="#TokenType-176"><span class="linenos">176</span></a> <span class="n">COMMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-177"><a href="#TokenType-177"><span class="linenos">177</span></a> <span class="n">COMMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-178"><a href="#TokenType-178"><span class="linenos">178</span></a> <span class="n">CONSTRAINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-179"><a href="#TokenType-179"><span class="linenos">179</span></a> <span class="n">CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-180"><a href="#TokenType-180"><span class="linenos">180</span></a> <span class="n">CROSS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-181"><a href="#TokenType-181"><span class="linenos">181</span></a> <span class="n">CUBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-182"><a href="#TokenType-182"><span class="linenos">182</span></a> <span class="n">CURRENT_DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-183"><a href="#TokenType-183"><span class="linenos">183</span></a> <span class="n">CURRENT_DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-184"><a href="#TokenType-184"><span class="linenos">184</span></a> <span class="n">CURRENT_TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-185"><a href="#TokenType-185"><span class="linenos">185</span></a> <span class="n">CURRENT_TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-186"><a href="#TokenType-186"><span class="linenos">186</span></a> <span class="n">CURRENT_USER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-187"><a href="#TokenType-187"><span class="linenos">187</span></a> <span class="n">DEFAULT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-188"><a href="#TokenType-188"><span class="linenos">188</span></a> <span class="n">DELETE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-189"><a href="#TokenType-189"><span class="linenos">189</span></a> <span class="n">DESC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-190"><a href="#TokenType-190"><span class="linenos">190</span></a> <span class="n">DESCRIBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-191"><a href="#TokenType-191"><span class="linenos">191</span></a> <span class="n">DICTIONARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-192"><a href="#TokenType-192"><span class="linenos">192</span></a> <span class="n">DISTINCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-193"><a href="#TokenType-193"><span class="linenos">193</span></a> <span class="n">DISTRIBUTE_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-194"><a href="#TokenType-194"><span class="linenos">194</span></a> <span class="n">DIV</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-195"><a href="#TokenType-195"><span class="linenos">195</span></a> <span class="n">DROP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-196"><a href="#TokenType-196"><span class="linenos">196</span></a> <span class="n">ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-197"><a href="#TokenType-197"><span class="linenos">197</span></a> <span class="n">END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-198"><a href="#TokenType-198"><span class="linenos">198</span></a> <span class="n">ESCAPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-199"><a href="#TokenType-199"><span class="linenos">199</span></a> <span class="n">EXCEPT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-200"><a href="#TokenType-200"><span class="linenos">200</span></a> <span class="n">EXECUTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-201"><a href="#TokenType-201"><span class="linenos">201</span></a> <span class="n">EXISTS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-202"><a href="#TokenType-202"><span class="linenos">202</span></a> <span class="n">FALSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-203"><a href="#TokenType-203"><span class="linenos">203</span></a> <span class="n">FETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-204"><a href="#TokenType-204"><span class="linenos">204</span></a> <span class="n">FILTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-205"><a href="#TokenType-205"><span class="linenos">205</span></a> <span class="n">FINAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-206"><a href="#TokenType-206"><span class="linenos">206</span></a> <span class="n">FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-207"><a href="#TokenType-207"><span class="linenos">207</span></a> <span class="n">FOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-208"><a href="#TokenType-208"><span class="linenos">208</span></a> <span class="n">FORCE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-209"><a href="#TokenType-209"><span class="linenos">209</span></a> <span class="n">FOREIGN_KEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-210"><a href="#TokenType-210"><span class="linenos">210</span></a> <span class="n">FORMAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-211"><a href="#TokenType-211"><span class="linenos">211</span></a> <span class="n">FROM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-212"><a href="#TokenType-212"><span class="linenos">212</span></a> <span class="n">FULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-213"><a href="#TokenType-213"><span class="linenos">213</span></a> <span class="n">FUNCTION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-214"><a href="#TokenType-214"><span class="linenos">214</span></a> <span class="n">GLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-215"><a href="#TokenType-215"><span class="linenos">215</span></a> <span class="n">GLOBAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-216"><a href="#TokenType-216"><span class="linenos">216</span></a> <span class="n">GROUP_BY</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">GROUPING_SETS</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">HAVING</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">HINT</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">IGNORE</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">ILIKE</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">ILIKE_ANY</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">IN</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">INDEX</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">INNER</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">INSERT</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">INTERSECT</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">INTERVAL</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">INTO</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">INTRODUCER</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">IRLIKE</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">IS</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">ISNULL</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">JOIN</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">JOIN_MARKER</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">KEEP</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">LANGUAGE</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">LATERAL</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">LEFT</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">LIKE</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">LIKE_ANY</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">LIMIT</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">LOAD</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">LOCK</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">MAP</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">MATCH_RECOGNIZE</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">MEMBER_OF</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">MERGE</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">MOD</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">NATURAL</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">NEXT</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">NOTNULL</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">NULL</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">OFFSET</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">ON</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">ORDER_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">ORDERED</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">ORDINALITY</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">OUTER</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">OVER</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">OVERLAPS</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">OVERWRITE</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">PARTITION</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">PARTITION_BY</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">PERCENT</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">PIVOT</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">PLACEHOLDER</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">PRAGMA</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">PRIMARY_KEY</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">PROCEDURE</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">PROPERTIES</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">PSEUDO_TYPE</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">QUALIFY</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">QUOTE</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">RANGE</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">RECURSIVE</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">REPLACE</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">RETURNING</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">REFERENCES</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">RIGHT</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">RLIKE</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">ROLLBACK</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">ROLLUP</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">ROW</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">ROWS</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">SELECT</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">SEMI</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">SEPARATOR</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">SERDE_PROPERTIES</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">SET</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">SETTINGS</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">SHOW</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">SIMILAR_TO</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">SOME</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">SORT_BY</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">STRUCT</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">TABLE_SAMPLE</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">TEMPORARY</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">TOP</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">THEN</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">TRUE</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">UNCACHE</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">UNION</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">UNNEST</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">UNPIVOT</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">UPDATE</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">USE</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">USING</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">VALUES</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">VIEW</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">VOLATILE</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">WHEN</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">WHERE</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">WINDOW</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</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-52"><a href="#TokenType-52"><span class="linenos"> 52</span></a> <span class="n">DAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-53"><a href="#TokenType-53"><span class="linenos"> 53</span></a> <span class="n">LT_AT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-54"><a href="#TokenType-54"><span class="linenos"> 54</span></a> <span class="n">AT_GT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-55"><a href="#TokenType-55"><span class="linenos"> 55</span></a> <span class="n">DOLLAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-56"><a href="#TokenType-56"><span class="linenos"> 56</span></a> <span class="n">PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-57"><a href="#TokenType-57"><span class="linenos"> 57</span></a> <span class="n">SESSION_PARAMETER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-58"><a href="#TokenType-58"><span class="linenos"> 58</span></a> <span class="n">DAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-59"><a href="#TokenType-59"><span class="linenos"> 59</span></a> <span class="n">XOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-60"><a href="#TokenType-60"><span class="linenos"> 60</span></a>
+</span><span id="TokenType-61"><a href="#TokenType-61"><span class="linenos"> 61</span></a> <span class="n">BLOCK_START</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-62"><a href="#TokenType-62"><span class="linenos"> 62</span></a> <span class="n">BLOCK_END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-63"><a href="#TokenType-63"><span class="linenos"> 63</span></a>
+</span><span id="TokenType-64"><a href="#TokenType-64"><span class="linenos"> 64</span></a> <span class="n">SPACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-65"><a href="#TokenType-65"><span class="linenos"> 65</span></a> <span class="n">BREAK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-66"><a href="#TokenType-66"><span class="linenos"> 66</span></a>
+</span><span id="TokenType-67"><a href="#TokenType-67"><span class="linenos"> 67</span></a> <span class="n">STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-68"><a href="#TokenType-68"><span class="linenos"> 68</span></a> <span class="n">NUMBER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-69"><a href="#TokenType-69"><span class="linenos"> 69</span></a> <span class="n">IDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-70"><a href="#TokenType-70"><span class="linenos"> 70</span></a> <span class="n">DATABASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-71"><a href="#TokenType-71"><span class="linenos"> 71</span></a> <span class="n">COLUMN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-72"><a href="#TokenType-72"><span class="linenos"> 72</span></a> <span class="n">COLUMN_DEF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-73"><a href="#TokenType-73"><span class="linenos"> 73</span></a> <span class="n">SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-74"><a href="#TokenType-74"><span class="linenos"> 74</span></a> <span class="n">TABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-75"><a href="#TokenType-75"><span class="linenos"> 75</span></a> <span class="n">VAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-76"><a href="#TokenType-76"><span class="linenos"> 76</span></a> <span class="n">BIT_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-77"><a href="#TokenType-77"><span class="linenos"> 77</span></a> <span class="n">HEX_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-78"><a href="#TokenType-78"><span class="linenos"> 78</span></a> <span class="n">BYTE_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-79"><a href="#TokenType-79"><span class="linenos"> 79</span></a> <span class="n">NATIONAL_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-80"><a href="#TokenType-80"><span class="linenos"> 80</span></a> <span class="n">RAW_STRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-81"><a href="#TokenType-81"><span class="linenos"> 81</span></a>
+</span><span id="TokenType-82"><a href="#TokenType-82"><span class="linenos"> 82</span></a> <span class="c1"># types</span>
+</span><span id="TokenType-83"><a href="#TokenType-83"><span class="linenos"> 83</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-84"><a href="#TokenType-84"><span class="linenos"> 84</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-85"><a href="#TokenType-85"><span class="linenos"> 85</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-86"><a href="#TokenType-86"><span class="linenos"> 86</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-87"><a href="#TokenType-87"><span class="linenos"> 87</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-88"><a href="#TokenType-88"><span class="linenos"> 88</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-89"><a href="#TokenType-89"><span class="linenos"> 89</span></a> <span class="n">MEDIUMINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-90"><a href="#TokenType-90"><span class="linenos"> 90</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-91"><a href="#TokenType-91"><span class="linenos"> 91</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-92"><a href="#TokenType-92"><span class="linenos"> 92</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-93"><a href="#TokenType-93"><span class="linenos"> 93</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-94"><a href="#TokenType-94"><span class="linenos"> 94</span></a> <span class="n">INT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-95"><a href="#TokenType-95"><span class="linenos"> 95</span></a> <span class="n">UINT128</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-96"><a href="#TokenType-96"><span class="linenos"> 96</span></a> <span class="n">INT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-97"><a href="#TokenType-97"><span class="linenos"> 97</span></a> <span class="n">UINT256</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-98"><a href="#TokenType-98"><span class="linenos"> 98</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-99"><a href="#TokenType-99"><span class="linenos"> 99</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-100"><a href="#TokenType-100"><span class="linenos">100</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-101"><a href="#TokenType-101"><span class="linenos">101</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-102"><a href="#TokenType-102"><span class="linenos">102</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-103"><a href="#TokenType-103"><span class="linenos">103</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-104"><a href="#TokenType-104"><span class="linenos">104</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-105"><a href="#TokenType-105"><span class="linenos">105</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-106"><a href="#TokenType-106"><span class="linenos">106</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-107"><a href="#TokenType-107"><span class="linenos">107</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-108"><a href="#TokenType-108"><span class="linenos">108</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-109"><a href="#TokenType-109"><span class="linenos">109</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-110"><a href="#TokenType-110"><span class="linenos">110</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-111"><a href="#TokenType-111"><span class="linenos">111</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-112"><a href="#TokenType-112"><span class="linenos">112</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-113"><a href="#TokenType-113"><span class="linenos">113</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-114"><a href="#TokenType-114"><span class="linenos">114</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-115"><a href="#TokenType-115"><span class="linenos">115</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-116"><a href="#TokenType-116"><span class="linenos">116</span></a> <span class="n">TIMETZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-117"><a href="#TokenType-117"><span class="linenos">117</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-118"><a href="#TokenType-118"><span class="linenos">118</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-119"><a href="#TokenType-119"><span class="linenos">119</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-120"><a href="#TokenType-120"><span class="linenos">120</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-121"><a href="#TokenType-121"><span class="linenos">121</span></a> <span class="n">DATETIME64</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-122"><a href="#TokenType-122"><span class="linenos">122</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-123"><a href="#TokenType-123"><span class="linenos">123</span></a> <span class="n">INT4RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-124"><a href="#TokenType-124"><span class="linenos">124</span></a> <span class="n">INT4MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-125"><a href="#TokenType-125"><span class="linenos">125</span></a> <span class="n">INT8RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-126"><a href="#TokenType-126"><span class="linenos">126</span></a> <span class="n">INT8MULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-127"><a href="#TokenType-127"><span class="linenos">127</span></a> <span class="n">NUMRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-128"><a href="#TokenType-128"><span class="linenos">128</span></a> <span class="n">NUMMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-129"><a href="#TokenType-129"><span class="linenos">129</span></a> <span class="n">TSRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-130"><a href="#TokenType-130"><span class="linenos">130</span></a> <span class="n">TSMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-131"><a href="#TokenType-131"><span class="linenos">131</span></a> <span class="n">TSTZRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-132"><a href="#TokenType-132"><span class="linenos">132</span></a> <span class="n">TSTZMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-133"><a href="#TokenType-133"><span class="linenos">133</span></a> <span class="n">DATERANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-134"><a href="#TokenType-134"><span class="linenos">134</span></a> <span class="n">DATEMULTIRANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-135"><a href="#TokenType-135"><span class="linenos">135</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-136"><a href="#TokenType-136"><span class="linenos">136</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-137"><a href="#TokenType-137"><span class="linenos">137</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-138"><a href="#TokenType-138"><span class="linenos">138</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-139"><a href="#TokenType-139"><span class="linenos">139</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-140"><a href="#TokenType-140"><span class="linenos">140</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-141"><a href="#TokenType-141"><span class="linenos">141</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-142"><a href="#TokenType-142"><span class="linenos">142</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-143"><a href="#TokenType-143"><span class="linenos">143</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-144"><a href="#TokenType-144"><span class="linenos">144</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-145"><a href="#TokenType-145"><span class="linenos">145</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-146"><a href="#TokenType-146"><span class="linenos">146</span></a> <span class="n">YEAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-147"><a href="#TokenType-147"><span class="linenos">147</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-148"><a href="#TokenType-148"><span class="linenos">148</span></a> <span class="n">USERDEFINED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-149"><a href="#TokenType-149"><span class="linenos">149</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-150"><a href="#TokenType-150"><span class="linenos">150</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-151"><a href="#TokenType-151"><span class="linenos">151</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-152"><a href="#TokenType-152"><span class="linenos">152</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-153"><a href="#TokenType-153"><span class="linenos">153</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-154"><a href="#TokenType-154"><span class="linenos">154</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-155"><a href="#TokenType-155"><span class="linenos">155</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-156"><a href="#TokenType-156"><span class="linenos">156</span></a> <span class="n">IPADDRESS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-157"><a href="#TokenType-157"><span class="linenos">157</span></a> <span class="n">IPPREFIX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-158"><a href="#TokenType-158"><span class="linenos">158</span></a> <span class="n">ENUM</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-159"><a href="#TokenType-159"><span class="linenos">159</span></a> <span class="n">ENUM8</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-160"><a href="#TokenType-160"><span class="linenos">160</span></a> <span class="n">ENUM16</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-161"><a href="#TokenType-161"><span class="linenos">161</span></a> <span class="n">FIXEDSTRING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-162"><a href="#TokenType-162"><span class="linenos">162</span></a> <span class="n">LOWCARDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-163"><a href="#TokenType-163"><span class="linenos">163</span></a> <span class="n">NESTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-164"><a href="#TokenType-164"><span class="linenos">164</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-165"><a href="#TokenType-165"><span class="linenos">165</span></a>
+</span><span id="TokenType-166"><a href="#TokenType-166"><span class="linenos">166</span></a> <span class="c1"># keywords</span>
+</span><span id="TokenType-167"><a href="#TokenType-167"><span class="linenos">167</span></a> <span class="n">ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-168"><a href="#TokenType-168"><span class="linenos">168</span></a> <span class="n">ALTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-169"><a href="#TokenType-169"><span class="linenos">169</span></a> <span class="n">ALWAYS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-170"><a href="#TokenType-170"><span class="linenos">170</span></a> <span class="n">ALL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-171"><a href="#TokenType-171"><span class="linenos">171</span></a> <span class="n">ANTI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-172"><a href="#TokenType-172"><span class="linenos">172</span></a> <span class="n">ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-173"><a href="#TokenType-173"><span class="linenos">173</span></a> <span class="n">APPLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-174"><a href="#TokenType-174"><span class="linenos">174</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-175"><a href="#TokenType-175"><span class="linenos">175</span></a> <span class="n">ASC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-176"><a href="#TokenType-176"><span class="linenos">176</span></a> <span class="n">ASOF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-177"><a href="#TokenType-177"><span class="linenos">177</span></a> <span class="n">AUTO_INCREMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-178"><a href="#TokenType-178"><span class="linenos">178</span></a> <span class="n">BEGIN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-179"><a href="#TokenType-179"><span class="linenos">179</span></a> <span class="n">BETWEEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-180"><a href="#TokenType-180"><span class="linenos">180</span></a> <span class="n">CACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-181"><a href="#TokenType-181"><span class="linenos">181</span></a> <span class="n">CASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-182"><a href="#TokenType-182"><span class="linenos">182</span></a> <span class="n">CHARACTER_SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-183"><a href="#TokenType-183"><span class="linenos">183</span></a> <span class="n">CLUSTER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-184"><a href="#TokenType-184"><span class="linenos">184</span></a> <span class="n">COLLATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-185"><a href="#TokenType-185"><span class="linenos">185</span></a> <span class="n">COMMAND</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-186"><a href="#TokenType-186"><span class="linenos">186</span></a> <span class="n">COMMENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-187"><a href="#TokenType-187"><span class="linenos">187</span></a> <span class="n">COMMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-188"><a href="#TokenType-188"><span class="linenos">188</span></a> <span class="n">CONNECT_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-189"><a href="#TokenType-189"><span class="linenos">189</span></a> <span class="n">CONSTRAINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-190"><a href="#TokenType-190"><span class="linenos">190</span></a> <span class="n">CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-191"><a href="#TokenType-191"><span class="linenos">191</span></a> <span class="n">CROSS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-192"><a href="#TokenType-192"><span class="linenos">192</span></a> <span class="n">CUBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-193"><a href="#TokenType-193"><span class="linenos">193</span></a> <span class="n">CURRENT_DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-194"><a href="#TokenType-194"><span class="linenos">194</span></a> <span class="n">CURRENT_DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-195"><a href="#TokenType-195"><span class="linenos">195</span></a> <span class="n">CURRENT_TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-196"><a href="#TokenType-196"><span class="linenos">196</span></a> <span class="n">CURRENT_TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-197"><a href="#TokenType-197"><span class="linenos">197</span></a> <span class="n">CURRENT_USER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-198"><a href="#TokenType-198"><span class="linenos">198</span></a> <span class="n">DEFAULT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-199"><a href="#TokenType-199"><span class="linenos">199</span></a> <span class="n">DELETE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-200"><a href="#TokenType-200"><span class="linenos">200</span></a> <span class="n">DESC</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-201"><a href="#TokenType-201"><span class="linenos">201</span></a> <span class="n">DESCRIBE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-202"><a href="#TokenType-202"><span class="linenos">202</span></a> <span class="n">DICTIONARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-203"><a href="#TokenType-203"><span class="linenos">203</span></a> <span class="n">DISTINCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-204"><a href="#TokenType-204"><span class="linenos">204</span></a> <span class="n">DISTRIBUTE_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-205"><a href="#TokenType-205"><span class="linenos">205</span></a> <span class="n">DIV</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-206"><a href="#TokenType-206"><span class="linenos">206</span></a> <span class="n">DROP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-207"><a href="#TokenType-207"><span class="linenos">207</span></a> <span class="n">ELSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-208"><a href="#TokenType-208"><span class="linenos">208</span></a> <span class="n">END</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-209"><a href="#TokenType-209"><span class="linenos">209</span></a> <span class="n">ESCAPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-210"><a href="#TokenType-210"><span class="linenos">210</span></a> <span class="n">EXCEPT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-211"><a href="#TokenType-211"><span class="linenos">211</span></a> <span class="n">EXECUTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-212"><a href="#TokenType-212"><span class="linenos">212</span></a> <span class="n">EXISTS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-213"><a href="#TokenType-213"><span class="linenos">213</span></a> <span class="n">FALSE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-214"><a href="#TokenType-214"><span class="linenos">214</span></a> <span class="n">FETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-215"><a href="#TokenType-215"><span class="linenos">215</span></a> <span class="n">FILTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-216"><a href="#TokenType-216"><span class="linenos">216</span></a> <span class="n">FINAL</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">FIRST</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">FOR</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">FORCE</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">FOREIGN_KEY</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">FORMAT</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">FROM</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">FULL</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">FUNCTION</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">GLOB</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">GLOBAL</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">GROUP_BY</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">GROUPING_SETS</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">HAVING</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">HINT</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">IGNORE</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">ILIKE</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">ILIKE_ANY</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">IN</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">INDEX</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">INNER</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">INSERT</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">INTERSECT</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">INTERVAL</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">INTO</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">INTRODUCER</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">IRLIKE</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">IS</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">ISNULL</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">JOIN</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">JOIN_MARKER</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">KEEP</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">LANGUAGE</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">LATERAL</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">LEFT</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">LIKE</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">LIKE_ANY</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">LIMIT</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">LOAD</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">LOCK</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">MAP</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">MATCH_RECOGNIZE</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">MEMBER_OF</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">MERGE</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">MOD</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">NATURAL</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">NEXT</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">NOTNULL</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">NULL</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">OFFSET</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">ON</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">ORDER_BY</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">ORDERED</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">ORDINALITY</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">OUTER</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">OVER</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">OVERLAPS</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">OVERWRITE</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">PARTITION</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">PARTITION_BY</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">PERCENT</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">PIVOT</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">PLACEHOLDER</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">PRAGMA</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">PRIMARY_KEY</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">PROCEDURE</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">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">PSEUDO_TYPE</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">QUALIFY</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">QUOTE</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">RANGE</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">RECURSIVE</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">REPLACE</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">RETURNING</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">REFERENCES</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">RIGHT</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">RLIKE</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">ROLLBACK</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">ROLLUP</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">ROW</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">ROWS</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">SELECT</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">SEMI</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">SEPARATOR</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">SERDE_PROPERTIES</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">SET</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">SETTINGS</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">SHOW</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">SIMILAR_TO</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">SOME</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">SORT_BY</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">START_WITH</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">STRUCT</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">TABLE_SAMPLE</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">TEMPORARY</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">TOP</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">THEN</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">TRUE</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">UNCACHE</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">UNION</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">UNNEST</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">UNPIVOT</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">UPDATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-319"><a href="#TokenType-319"><span class="linenos">319</span></a> <span class="n">USE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-320"><a href="#TokenType-320"><span class="linenos">320</span></a> <span class="n">USING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-321"><a href="#TokenType-321"><span class="linenos">321</span></a> <span class="n">VALUES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-322"><a href="#TokenType-322"><span class="linenos">322</span></a> <span class="n">VIEW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-323"><a href="#TokenType-323"><span class="linenos">323</span></a> <span class="n">VOLATILE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-324"><a href="#TokenType-324"><span class="linenos">324</span></a> <span class="n">WHEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-325"><a href="#TokenType-325"><span class="linenos">325</span></a> <span class="n">WHERE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-326"><a href="#TokenType-326"><span class="linenos">326</span></a> <span class="n">WINDOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-327"><a href="#TokenType-327"><span class="linenos">327</span></a> <span class="n">WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-328"><a href="#TokenType-328"><span class="linenos">328</span></a> <span class="n">UNIQUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-329"><a href="#TokenType-329"><span class="linenos">329</span></a> <span class="n">VERSION_SNAPSHOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-330"><a href="#TokenType-330"><span class="linenos">330</span></a> <span class="n">TIMESTAMP_SNAPSHOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span></pre></div>
@@ -3023,6 +3105,18 @@
</div>
+ <div id="TokenType.DAT" class="classattr">
+ <div class="attr variable">
+ <span class="name">DAT</span> =
+<span class="default_value">&lt;<a href="#TokenType.DAT">TokenType.DAT</a>: &#39;DAT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.DAT"></a>
+
+
+
+ </div>
<div id="TokenType.LT_AT" class="classattr">
<div class="attr variable">
<span class="name">LT_AT</span> =
@@ -3395,6 +3489,18 @@
</div>
+ <div id="TokenType.MEDIUMINT" class="classattr">
+ <div class="attr variable">
+ <span class="name">MEDIUMINT</span> =
+<span class="default_value">&lt;<a href="#TokenType.MEDIUMINT">TokenType.MEDIUMINT</a>: &#39;MEDIUMINT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.MEDIUMINT"></a>
+
+
+
+ </div>
<div id="TokenType.INT" class="classattr">
<div class="attr variable">
<span class="name">INT</span> =
@@ -3707,6 +3813,18 @@
</div>
+ <div id="TokenType.TIMETZ" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIMETZ</span> =
+<span class="default_value">&lt;<a href="#TokenType.TIMETZ">TokenType.TIMETZ</a>: &#39;TIMETZ&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.TIMETZ"></a>
+
+
+
+ </div>
<div id="TokenType.TIMESTAMP" class="classattr">
<div class="attr variable">
<span class="name">TIMESTAMP</span> =
@@ -4055,6 +4173,18 @@
</div>
+ <div id="TokenType.YEAR" class="classattr">
+ <div class="attr variable">
+ <span class="name">YEAR</span> =
+<span class="default_value">&lt;<a href="#TokenType.YEAR">TokenType.YEAR</a>: &#39;YEAR&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.YEAR"></a>
+
+
+
+ </div>
<div id="TokenType.UNIQUEIDENTIFIER" class="classattr">
<div class="attr variable">
<span class="name">UNIQUEIDENTIFIER</span> =
@@ -4199,6 +4329,78 @@
</div>
+ <div id="TokenType.ENUM8" class="classattr">
+ <div class="attr variable">
+ <span class="name">ENUM8</span> =
+<span class="default_value">&lt;<a href="#TokenType.ENUM8">TokenType.ENUM8</a>: &#39;ENUM8&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.ENUM8"></a>
+
+
+
+ </div>
+ <div id="TokenType.ENUM16" class="classattr">
+ <div class="attr variable">
+ <span class="name">ENUM16</span> =
+<span class="default_value">&lt;<a href="#TokenType.ENUM16">TokenType.ENUM16</a>: &#39;ENUM16&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.ENUM16"></a>
+
+
+
+ </div>
+ <div id="TokenType.FIXEDSTRING" class="classattr">
+ <div class="attr variable">
+ <span class="name">FIXEDSTRING</span> =
+<span class="default_value">&lt;<a href="#TokenType.FIXEDSTRING">TokenType.FIXEDSTRING</a>: &#39;FIXEDSTRING&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.FIXEDSTRING"></a>
+
+
+
+ </div>
+ <div id="TokenType.LOWCARDINALITY" class="classattr">
+ <div class="attr variable">
+ <span class="name">LOWCARDINALITY</span> =
+<span class="default_value">&lt;<a href="#TokenType.LOWCARDINALITY">TokenType.LOWCARDINALITY</a>: &#39;LOWCARDINALITY&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.LOWCARDINALITY"></a>
+
+
+
+ </div>
+ <div id="TokenType.NESTED" class="classattr">
+ <div class="attr variable">
+ <span class="name">NESTED</span> =
+<span class="default_value">&lt;<a href="#TokenType.NESTED">TokenType.NESTED</a>: &#39;NESTED&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.NESTED"></a>
+
+
+
+ </div>
+ <div id="TokenType.UNKNOWN" class="classattr">
+ <div class="attr variable">
+ <span class="name">UNKNOWN</span> =
+<span class="default_value">&lt;<a href="#TokenType.UNKNOWN">TokenType.UNKNOWN</a>: &#39;UNKNOWN&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.UNKNOWN"></a>
+
+
+
+ </div>
<div id="TokenType.ALIAS" class="classattr">
<div class="attr variable">
<span class="name">ALIAS</span> =
@@ -4451,6 +4653,18 @@
</div>
+ <div id="TokenType.CONNECT_BY" class="classattr">
+ <div class="attr variable">
+ <span class="name">CONNECT_BY</span> =
+<span class="default_value">&lt;<a href="#TokenType.CONNECT_BY">TokenType.CONNECT_BY</a>: &#39;CONNECT_BY&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.CONNECT_BY"></a>
+
+
+
+ </div>
<div id="TokenType.CONSTRAINT" class="classattr">
<div class="attr variable">
<span class="name">CONSTRAINT</span> =
@@ -5867,6 +6081,18 @@
</div>
+ <div id="TokenType.START_WITH" class="classattr">
+ <div class="attr variable">
+ <span class="name">START_WITH</span> =
+<span class="default_value">&lt;<a href="#TokenType.START_WITH">TokenType.START_WITH</a>: &#39;START_WITH&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.START_WITH"></a>
+
+
+
+ </div>
<div id="TokenType.STRUCT" class="classattr">
<div class="attr variable">
<span class="name">STRUCT</span> =
@@ -6119,6 +6345,30 @@
</div>
+ <div id="TokenType.VERSION_SNAPSHOT" class="classattr">
+ <div class="attr variable">
+ <span class="name">VERSION_SNAPSHOT</span> =
+<span class="default_value">&lt;<a href="#TokenType.VERSION_SNAPSHOT">TokenType.VERSION_SNAPSHOT</a>: &#39;VERSION_SNAPSHOT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.VERSION_SNAPSHOT"></a>
+
+
+
+ </div>
+ <div id="TokenType.TIMESTAMP_SNAPSHOT" class="classattr">
+ <div class="attr variable">
+ <span class="name">TIMESTAMP_SNAPSHOT</span> =
+<span class="default_value">&lt;<a href="#TokenType.TIMESTAMP_SNAPSHOT">TokenType.TIMESTAMP_SNAPSHOT</a>: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.TIMESTAMP_SNAPSHOT"></a>
+
+
+
+ </div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
@@ -6141,61 +6391,61 @@
</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;start&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">start</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">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-350"><a href="#Token-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="Token-351"><a href="#Token-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="Token-352"><a href="#Token-352"><span class="linenos">352</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Token initializer.</span>
-</span><span id="Token-353"><a href="#Token-353"><span class="linenos">353</span></a>
-</span><span id="Token-354"><a href="#Token-354"><span class="linenos">354</span></a><span class="sd"> Args:</span>
-</span><span id="Token-355"><a href="#Token-355"><span class="linenos">355</span></a><span class="sd"> token_type: The TokenType Enum.</span>
-</span><span id="Token-356"><a href="#Token-356"><span class="linenos">356</span></a><span class="sd"> text: The text of the token.</span>
-</span><span id="Token-357"><a href="#Token-357"><span class="linenos">357</span></a><span class="sd"> line: The line that the token ends on.</span>
-</span><span id="Token-358"><a href="#Token-358"><span class="linenos">358</span></a><span class="sd"> col: The column that the token ends on.</span>
-</span><span id="Token-359"><a href="#Token-359"><span class="linenos">359</span></a><span class="sd"> start: The start index of the token.</span>
-</span><span id="Token-360"><a href="#Token-360"><span class="linenos">360</span></a><span class="sd"> end: The ending index of the token.</span>
-</span><span id="Token-361"><a href="#Token-361"><span class="linenos">361</span></a><span class="sd"> comments: The comments to attach to the token.</span>
-</span><span id="Token-362"><a href="#Token-362"><span class="linenos">362</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Token-363"><a href="#Token-363"><span class="linenos">363</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-364"><a href="#Token-364"><span class="linenos">364</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-365"><a href="#Token-365"><span class="linenos">365</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-366"><a href="#Token-366"><span class="linenos">366</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-367"><a href="#Token-367"><span class="linenos">367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
-</span><span id="Token-368"><a href="#Token-368"><span class="linenos">368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">=</span> <span class="n">end</span>
-</span><span id="Token-369"><a href="#Token-369"><span class="linenos">369</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-370"><a href="#Token-370"><span class="linenos">370</span></a>
-</span><span id="Token-371"><a href="#Token-371"><span class="linenos">371</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-372"><a href="#Token-372"><span class="linenos">372</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-373"><a href="#Token-373"><span class="linenos">373</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-333"><a href="#Token-333"><span class="linenos">333</span></a><span class="k">class</span> <span class="nc">Token</span><span class="p">:</span>
+</span><span id="Token-334"><a href="#Token-334"><span class="linenos">334</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;start&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-335"><a href="#Token-335"><span class="linenos">335</span></a>
+</span><span id="Token-336"><a href="#Token-336"><span class="linenos">336</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-337"><a href="#Token-337"><span class="linenos">337</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-338"><a href="#Token-338"><span class="linenos">338</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-339"><a href="#Token-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">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-340"><a href="#Token-340"><span class="linenos">340</span></a>
+</span><span id="Token-341"><a href="#Token-341"><span class="linenos">341</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-342"><a href="#Token-342"><span class="linenos">342</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-343"><a href="#Token-343"><span class="linenos">343</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-344"><a href="#Token-344"><span class="linenos">344</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-345"><a href="#Token-345"><span class="linenos">345</span></a>
+</span><span id="Token-346"><a href="#Token-346"><span class="linenos">346</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-347"><a href="#Token-347"><span class="linenos">347</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-348"><a href="#Token-348"><span class="linenos">348</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-349"><a href="#Token-349"><span class="linenos">349</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-350"><a href="#Token-350"><span class="linenos">350</span></a>
+</span><span id="Token-351"><a href="#Token-351"><span class="linenos">351</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-352"><a href="#Token-352"><span class="linenos">352</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-353"><a href="#Token-353"><span class="linenos">353</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-354"><a href="#Token-354"><span class="linenos">354</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-355"><a href="#Token-355"><span class="linenos">355</span></a>
+</span><span id="Token-356"><a href="#Token-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="fm">__init__</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="p">,</span>
+</span><span id="Token-358"><a href="#Token-358"><span class="linenos">358</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-359"><a href="#Token-359"><span class="linenos">359</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Token-360"><a href="#Token-360"><span class="linenos">360</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-361"><a href="#Token-361"><span class="linenos">361</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-362"><a href="#Token-362"><span class="linenos">362</span></a> <span class="n">start</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-363"><a href="#Token-363"><span class="linenos">363</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-364"><a href="#Token-364"><span class="linenos">364</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-365"><a href="#Token-365"><span class="linenos">365</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Token-366"><a href="#Token-366"><span class="linenos">366</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Token initializer.</span>
+</span><span id="Token-367"><a href="#Token-367"><span class="linenos">367</span></a>
+</span><span id="Token-368"><a href="#Token-368"><span class="linenos">368</span></a><span class="sd"> Args:</span>
+</span><span id="Token-369"><a href="#Token-369"><span class="linenos">369</span></a><span class="sd"> token_type: The TokenType Enum.</span>
+</span><span id="Token-370"><a href="#Token-370"><span class="linenos">370</span></a><span class="sd"> text: The text of the token.</span>
+</span><span id="Token-371"><a href="#Token-371"><span class="linenos">371</span></a><span class="sd"> line: The line that the token ends on.</span>
+</span><span id="Token-372"><a href="#Token-372"><span class="linenos">372</span></a><span class="sd"> col: The column that the token ends on.</span>
+</span><span id="Token-373"><a href="#Token-373"><span class="linenos">373</span></a><span class="sd"> start: The start index of the token.</span>
+</span><span id="Token-374"><a href="#Token-374"><span class="linenos">374</span></a><span class="sd"> end: The ending index of the token.</span>
+</span><span id="Token-375"><a href="#Token-375"><span class="linenos">375</span></a><span class="sd"> comments: The comments to attach to the token.</span>
+</span><span id="Token-376"><a href="#Token-376"><span class="linenos">376</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Token-377"><a href="#Token-377"><span class="linenos">377</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-378"><a href="#Token-378"><span class="linenos">378</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-379"><a href="#Token-379"><span class="linenos">379</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-380"><a href="#Token-380"><span class="linenos">380</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-381"><a href="#Token-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
+</span><span id="Token-382"><a href="#Token-382"><span class="linenos">382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">=</span> <span class="n">end</span>
+</span><span id="Token-383"><a href="#Token-383"><span class="linenos">383</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-384"><a href="#Token-384"><span class="linenos">384</span></a>
+</span><span id="Token-385"><a href="#Token-385"><span class="linenos">385</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-386"><a href="#Token-386"><span class="linenos">386</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-387"><a href="#Token-387"><span class="linenos">387</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>
@@ -6211,34 +6461,34 @@
</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">start</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">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__-350"><a href="#Token.__init__-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="Token.__init__-351"><a href="#Token.__init__-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="Token.__init__-352"><a href="#Token.__init__-352"><span class="linenos">352</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Token initializer.</span>
-</span><span id="Token.__init__-353"><a href="#Token.__init__-353"><span class="linenos">353</span></a>
-</span><span id="Token.__init__-354"><a href="#Token.__init__-354"><span class="linenos">354</span></a><span class="sd"> Args:</span>
-</span><span id="Token.__init__-355"><a href="#Token.__init__-355"><span class="linenos">355</span></a><span class="sd"> token_type: The TokenType Enum.</span>
-</span><span id="Token.__init__-356"><a href="#Token.__init__-356"><span class="linenos">356</span></a><span class="sd"> text: The text of the token.</span>
-</span><span id="Token.__init__-357"><a href="#Token.__init__-357"><span class="linenos">357</span></a><span class="sd"> line: The line that the token ends on.</span>
-</span><span id="Token.__init__-358"><a href="#Token.__init__-358"><span class="linenos">358</span></a><span class="sd"> col: The column that the token ends on.</span>
-</span><span id="Token.__init__-359"><a href="#Token.__init__-359"><span class="linenos">359</span></a><span class="sd"> start: The start index of the token.</span>
-</span><span id="Token.__init__-360"><a href="#Token.__init__-360"><span class="linenos">360</span></a><span class="sd"> end: The ending index of the token.</span>
-</span><span id="Token.__init__-361"><a href="#Token.__init__-361"><span class="linenos">361</span></a><span class="sd"> comments: The comments to attach to the token.</span>
-</span><span id="Token.__init__-362"><a href="#Token.__init__-362"><span class="linenos">362</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Token.__init__-363"><a href="#Token.__init__-363"><span class="linenos">363</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__-364"><a href="#Token.__init__-364"><span class="linenos">364</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__-365"><a href="#Token.__init__-365"><span class="linenos">365</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__-366"><a href="#Token.__init__-366"><span class="linenos">366</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__-367"><a href="#Token.__init__-367"><span class="linenos">367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
-</span><span id="Token.__init__-368"><a href="#Token.__init__-368"><span class="linenos">368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">=</span> <span class="n">end</span>
-</span><span id="Token.__init__-369"><a href="#Token.__init__-369"><span class="linenos">369</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__-356"><a href="#Token.__init__-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="fm">__init__</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="p">,</span>
+</span><span id="Token.__init__-358"><a href="#Token.__init__-358"><span class="linenos">358</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__-359"><a href="#Token.__init__-359"><span class="linenos">359</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__-360"><a href="#Token.__init__-360"><span class="linenos">360</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__-361"><a href="#Token.__init__-361"><span class="linenos">361</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__-362"><a href="#Token.__init__-362"><span class="linenos">362</span></a> <span class="n">start</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__-363"><a href="#Token.__init__-363"><span class="linenos">363</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__-364"><a href="#Token.__init__-364"><span class="linenos">364</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__-365"><a href="#Token.__init__-365"><span class="linenos">365</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__-366"><a href="#Token.__init__-366"><span class="linenos">366</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Token initializer.</span>
+</span><span id="Token.__init__-367"><a href="#Token.__init__-367"><span class="linenos">367</span></a>
+</span><span id="Token.__init__-368"><a href="#Token.__init__-368"><span class="linenos">368</span></a><span class="sd"> Args:</span>
+</span><span id="Token.__init__-369"><a href="#Token.__init__-369"><span class="linenos">369</span></a><span class="sd"> token_type: The TokenType Enum.</span>
+</span><span id="Token.__init__-370"><a href="#Token.__init__-370"><span class="linenos">370</span></a><span class="sd"> text: The text of the token.</span>
+</span><span id="Token.__init__-371"><a href="#Token.__init__-371"><span class="linenos">371</span></a><span class="sd"> line: The line that the token ends on.</span>
+</span><span id="Token.__init__-372"><a href="#Token.__init__-372"><span class="linenos">372</span></a><span class="sd"> col: The column that the token ends on.</span>
+</span><span id="Token.__init__-373"><a href="#Token.__init__-373"><span class="linenos">373</span></a><span class="sd"> start: The start index of the token.</span>
+</span><span id="Token.__init__-374"><a href="#Token.__init__-374"><span class="linenos">374</span></a><span class="sd"> end: The ending index of the token.</span>
+</span><span id="Token.__init__-375"><a href="#Token.__init__-375"><span class="linenos">375</span></a><span class="sd"> comments: The comments to attach to the token.</span>
+</span><span id="Token.__init__-376"><a href="#Token.__init__-376"><span class="linenos">376</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Token.__init__-377"><a href="#Token.__init__-377"><span class="linenos">377</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__-378"><a href="#Token.__init__-378"><span class="linenos">378</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__-379"><a href="#Token.__init__-379"><span class="linenos">379</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__-380"><a href="#Token.__init__-380"><span class="linenos">380</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__-381"><a href="#Token.__init__-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">start</span> <span class="o">=</span> <span class="n">start</span>
+</span><span id="Token.__init__-382"><a href="#Token.__init__-382"><span class="linenos">382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">=</span> <span class="n">end</span>
+</span><span id="Token.__init__-383"><a href="#Token.__init__-383"><span class="linenos">383</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>
@@ -6271,10 +6521,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-336"><a href="#Token.number-336"><span class="linenos">336</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.number-337"><a href="#Token.number-337"><span class="linenos">337</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-338"><a href="#Token.number-338"><span class="linenos">338</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-339"><a href="#Token.number-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">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>
@@ -6295,10 +6545,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-341"><a href="#Token.string-341"><span class="linenos">341</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.string-342"><a href="#Token.string-342"><span class="linenos">342</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-343"><a href="#Token.string-343"><span class="linenos">343</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-344"><a href="#Token.string-344"><span class="linenos">344</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>
@@ -6319,10 +6569,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-346"><a href="#Token.identifier-346"><span class="linenos">346</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.identifier-347"><a href="#Token.identifier-347"><span class="linenos">347</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-348"><a href="#Token.identifier-348"><span class="linenos">348</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-349"><a href="#Token.identifier-349"><span class="linenos">349</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>
@@ -6343,10 +6593,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-351"><a href="#Token.var-351"><span class="linenos">351</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.var-352"><a href="#Token.var-352"><span class="linenos">352</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-353"><a href="#Token.var-353"><span class="linenos">353</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-354"><a href="#Token.var-354"><span class="linenos">354</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>
@@ -6444,737 +6694,749 @@
</div>
<a class="headerlink" href="#Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer-429"><a href="#Tokenizer-429"><span class="linenos"> 429</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-430"><a href="#Tokenizer-430"><span class="linenos"> 430</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</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">L_PAREN</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">R_PAREN</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">L_BRACKET</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">R_BRACKET</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">L_BRACE</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">R_BRACE</span><span class="p">,</span>
-</span><span id="Tokenizer-437"><a href="#Tokenizer-437"><span class="linenos"> 437</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-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">CARET</span><span class="p">,</span>
-</span><span id="Tokenizer-439"><a href="#Tokenizer-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">COLON</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">COMMA</span><span class="p">,</span>
-</span><span id="Tokenizer-441"><a href="#Tokenizer-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">DOT</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">DASH</span><span class="p">,</span>
-</span><span id="Tokenizer-443"><a href="#Tokenizer-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">EQ</span><span class="p">,</span>
-</span><span id="Tokenizer-444"><a href="#Tokenizer-444"><span class="linenos"> 444</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-445"><a href="#Tokenizer-445"><span class="linenos"> 445</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-446"><a href="#Tokenizer-446"><span class="linenos"> 446</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-447"><a href="#Tokenizer-447"><span class="linenos"> 447</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-448"><a href="#Tokenizer-448"><span class="linenos"> 448</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-449"><a href="#Tokenizer-449"><span class="linenos"> 449</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-450"><a href="#Tokenizer-450"><span class="linenos"> 450</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-451"><a href="#Tokenizer-451"><span class="linenos"> 451</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-452"><a href="#Tokenizer-452"><span class="linenos"> 452</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-453"><a href="#Tokenizer-453"><span class="linenos"> 453</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-454"><a href="#Tokenizer-454"><span class="linenos"> 454</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-455"><a href="#Tokenizer-455"><span class="linenos"> 455</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-456"><a href="#Tokenizer-456"><span class="linenos"> 456</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-457"><a href="#Tokenizer-457"><span class="linenos"> 457</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
-</span><span id="Tokenizer-458"><a href="#Tokenizer-458"><span class="linenos"> 458</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
-</span><span id="Tokenizer-459"><a href="#Tokenizer-459"><span class="linenos"> 459</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-460"><a href="#Tokenizer-460"><span class="linenos"> 460</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-461"><a href="#Tokenizer-461"><span class="linenos"> 461</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-462"><a href="#Tokenizer-462"><span class="linenos"> 462</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-463"><a href="#Tokenizer-463"><span class="linenos"> 463</span></a> <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">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-466"><a href="#Tokenizer-466"><span class="linenos"> 466</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-467"><a href="#Tokenizer-467"><span class="linenos"> 467</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-468"><a href="#Tokenizer-468"><span class="linenos"> 468</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-469"><a href="#Tokenizer-469"><span class="linenos"> 469</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-470"><a href="#Tokenizer-470"><span class="linenos"> 470</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-471"><a href="#Tokenizer-471"><span class="linenos"> 471</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-472"><a href="#Tokenizer-472"><span class="linenos"> 472</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-473"><a href="#Tokenizer-473"><span class="linenos"> 473</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-474"><a href="#Tokenizer-474"><span class="linenos"> 474</span></a>
-</span><span id="Tokenizer-475"><a href="#Tokenizer-475"><span class="linenos"> 475</span></a> <span class="c1"># Autofilled</span>
-</span><span id="Tokenizer-476"><a href="#Tokenizer-476"><span class="linenos"> 476</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-477"><a href="#Tokenizer-477"><span class="linenos"> 477</span></a>
-</span><span id="Tokenizer-478"><a href="#Tokenizer-478"><span class="linenos"> 478</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-479"><a href="#Tokenizer-479"><span class="linenos"> 479</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-480"><a href="#Tokenizer-480"><span class="linenos"> 480</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-481"><a href="#Tokenizer-481"><span class="linenos"> 481</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-482"><a href="#Tokenizer-482"><span class="linenos"> 482</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-483"><a href="#Tokenizer-483"><span class="linenos"> 483</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-484"><a href="#Tokenizer-484"><span class="linenos"> 484</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-485"><a href="#Tokenizer-485"><span class="linenos"> 485</span></a>
-</span><span id="Tokenizer-486"><a href="#Tokenizer-486"><span class="linenos"> 486</span></a> <span class="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-487"><a href="#Tokenizer-487"><span class="linenos"> 487</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-488"><a href="#Tokenizer-488"><span class="linenos"> 488</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-489"><a href="#Tokenizer-489"><span class="linenos"> 489</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="Tokenizer-490"><a href="#Tokenizer-490"><span class="linenos"> 490</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="Tokenizer-491"><a href="#Tokenizer-491"><span class="linenos"> 491</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-492"><a href="#Tokenizer-492"><span class="linenos"> 492</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-493"><a href="#Tokenizer-493"><span class="linenos"> 493</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-494"><a href="#Tokenizer-494"><span class="linenos"> 494</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-495"><a href="#Tokenizer-495"><span class="linenos"> 495</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-496"><a href="#Tokenizer-496"><span class="linenos"> 496</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-497"><a href="#Tokenizer-497"><span class="linenos"> 497</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-498"><a href="#Tokenizer-498"><span class="linenos"> 498</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-499"><a href="#Tokenizer-499"><span class="linenos"> 499</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-500"><a href="#Tokenizer-500"><span class="linenos"> 500</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-501"><a href="#Tokenizer-501"><span class="linenos"> 501</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-502"><a href="#Tokenizer-502"><span class="linenos"> 502</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-503"><a href="#Tokenizer-503"><span class="linenos"> 503</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-504"><a href="#Tokenizer-504"><span class="linenos"> 504</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-505"><a href="#Tokenizer-505"><span class="linenos"> 505</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-506"><a href="#Tokenizer-506"><span class="linenos"> 506</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-507"><a href="#Tokenizer-507"><span class="linenos"> 507</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
-</span><span id="Tokenizer-508"><a href="#Tokenizer-508"><span class="linenos"> 508</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-509"><a href="#Tokenizer-509"><span class="linenos"> 509</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-510"><a href="#Tokenizer-510"><span class="linenos"> 510</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-511"><a href="#Tokenizer-511"><span class="linenos"> 511</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-512"><a href="#Tokenizer-512"><span class="linenos"> 512</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-513"><a href="#Tokenizer-513"><span class="linenos"> 513</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-514"><a href="#Tokenizer-514"><span class="linenos"> 514</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-515"><a href="#Tokenizer-515"><span class="linenos"> 515</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="Tokenizer-516"><a href="#Tokenizer-516"><span class="linenos"> 516</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-517"><a href="#Tokenizer-517"><span class="linenos"> 517</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-518"><a href="#Tokenizer-518"><span class="linenos"> 518</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-519"><a href="#Tokenizer-519"><span class="linenos"> 519</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-520"><a href="#Tokenizer-520"><span class="linenos"> 520</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-521"><a href="#Tokenizer-521"><span class="linenos"> 521</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-522"><a href="#Tokenizer-522"><span class="linenos"> 522</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-523"><a href="#Tokenizer-523"><span class="linenos"> 523</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-524"><a href="#Tokenizer-524"><span class="linenos"> 524</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-525"><a href="#Tokenizer-525"><span class="linenos"> 525</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-526"><a href="#Tokenizer-526"><span class="linenos"> 526</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-527"><a href="#Tokenizer-527"><span class="linenos"> 527</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-528"><a href="#Tokenizer-528"><span class="linenos"> 528</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-529"><a href="#Tokenizer-529"><span class="linenos"> 529</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-530"><a href="#Tokenizer-530"><span class="linenos"> 530</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-531"><a href="#Tokenizer-531"><span class="linenos"> 531</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-532"><a href="#Tokenizer-532"><span class="linenos"> 532</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-533"><a href="#Tokenizer-533"><span class="linenos"> 533</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-534"><a href="#Tokenizer-534"><span class="linenos"> 534</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-535"><a href="#Tokenizer-535"><span class="linenos"> 535</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-536"><a href="#Tokenizer-536"><span class="linenos"> 536</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-537"><a href="#Tokenizer-537"><span class="linenos"> 537</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-538"><a href="#Tokenizer-538"><span class="linenos"> 538</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-539"><a href="#Tokenizer-539"><span class="linenos"> 539</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-540"><a href="#Tokenizer-540"><span class="linenos"> 540</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-541"><a href="#Tokenizer-541"><span class="linenos"> 541</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-542"><a href="#Tokenizer-542"><span class="linenos"> 542</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-543"><a href="#Tokenizer-543"><span class="linenos"> 543</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-544"><a href="#Tokenizer-544"><span class="linenos"> 544</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-545"><a href="#Tokenizer-545"><span class="linenos"> 545</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-546"><a href="#Tokenizer-546"><span class="linenos"> 546</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-547"><a href="#Tokenizer-547"><span class="linenos"> 547</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-548"><a href="#Tokenizer-548"><span class="linenos"> 548</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-549"><a href="#Tokenizer-549"><span class="linenos"> 549</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-550"><a href="#Tokenizer-550"><span class="linenos"> 550</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-551"><a href="#Tokenizer-551"><span class="linenos"> 551</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-552"><a href="#Tokenizer-552"><span class="linenos"> 552</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-553"><a href="#Tokenizer-553"><span class="linenos"> 553</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-554"><a href="#Tokenizer-554"><span class="linenos"> 554</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-555"><a href="#Tokenizer-555"><span class="linenos"> 555</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-556"><a href="#Tokenizer-556"><span class="linenos"> 556</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-557"><a href="#Tokenizer-557"><span class="linenos"> 557</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-558"><a href="#Tokenizer-558"><span class="linenos"> 558</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-559"><a href="#Tokenizer-559"><span class="linenos"> 559</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-560"><a href="#Tokenizer-560"><span class="linenos"> 560</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-561"><a href="#Tokenizer-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;GEOGRAPHY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
-</span><span id="Tokenizer-562"><a href="#Tokenizer-562"><span class="linenos"> 562</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
-</span><span id="Tokenizer-563"><a href="#Tokenizer-563"><span class="linenos"> 563</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-564"><a href="#Tokenizer-564"><span class="linenos"> 564</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-565"><a href="#Tokenizer-565"><span class="linenos"> 565</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-566"><a href="#Tokenizer-566"><span class="linenos"> 566</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-567"><a href="#Tokenizer-567"><span class="linenos"> 567</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-568"><a href="#Tokenizer-568"><span class="linenos"> 568</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-569"><a href="#Tokenizer-569"><span class="linenos"> 569</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-570"><a href="#Tokenizer-570"><span class="linenos"> 570</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-571"><a href="#Tokenizer-571"><span class="linenos"> 571</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-572"><a href="#Tokenizer-572"><span class="linenos"> 572</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-573"><a href="#Tokenizer-573"><span class="linenos"> 573</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-574"><a href="#Tokenizer-574"><span class="linenos"> 574</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-575"><a href="#Tokenizer-575"><span class="linenos"> 575</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-576"><a href="#Tokenizer-576"><span class="linenos"> 576</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-577"><a href="#Tokenizer-577"><span class="linenos"> 577</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-578"><a href="#Tokenizer-578"><span class="linenos"> 578</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-579"><a href="#Tokenizer-579"><span class="linenos"> 579</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-580"><a href="#Tokenizer-580"><span class="linenos"> 580</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-581"><a href="#Tokenizer-581"><span class="linenos"> 581</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-582"><a href="#Tokenizer-582"><span class="linenos"> 582</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-583"><a href="#Tokenizer-583"><span class="linenos"> 583</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-584"><a href="#Tokenizer-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
-</span><span id="Tokenizer-585"><a href="#Tokenizer-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
-</span><span id="Tokenizer-586"><a href="#Tokenizer-586"><span class="linenos"> 586</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-587"><a href="#Tokenizer-587"><span class="linenos"> 587</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-588"><a href="#Tokenizer-588"><span class="linenos"> 588</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-589"><a href="#Tokenizer-589"><span class="linenos"> 589</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-590"><a href="#Tokenizer-590"><span class="linenos"> 590</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-591"><a href="#Tokenizer-591"><span class="linenos"> 591</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-592"><a href="#Tokenizer-592"><span class="linenos"> 592</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-593"><a href="#Tokenizer-593"><span class="linenos"> 593</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-594"><a href="#Tokenizer-594"><span class="linenos"> 594</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-595"><a href="#Tokenizer-595"><span class="linenos"> 595</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-596"><a href="#Tokenizer-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
-</span><span id="Tokenizer-597"><a href="#Tokenizer-597"><span class="linenos"> 597</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-598"><a href="#Tokenizer-598"><span class="linenos"> 598</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-599"><a href="#Tokenizer-599"><span class="linenos"> 599</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-600"><a href="#Tokenizer-600"><span class="linenos"> 600</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-601"><a href="#Tokenizer-601"><span class="linenos"> 601</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-602"><a href="#Tokenizer-602"><span class="linenos"> 602</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-603"><a href="#Tokenizer-603"><span class="linenos"> 603</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-604"><a href="#Tokenizer-604"><span class="linenos"> 604</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-605"><a href="#Tokenizer-605"><span class="linenos"> 605</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-606"><a href="#Tokenizer-606"><span class="linenos"> 606</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-607"><a href="#Tokenizer-607"><span class="linenos"> 607</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-608"><a href="#Tokenizer-608"><span class="linenos"> 608</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-609"><a href="#Tokenizer-609"><span class="linenos"> 609</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-610"><a href="#Tokenizer-610"><span class="linenos"> 610</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-611"><a href="#Tokenizer-611"><span class="linenos"> 611</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-612"><a href="#Tokenizer-612"><span class="linenos"> 612</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-613"><a href="#Tokenizer-613"><span class="linenos"> 613</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-614"><a href="#Tokenizer-614"><span class="linenos"> 614</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-615"><a href="#Tokenizer-615"><span class="linenos"> 615</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-616"><a href="#Tokenizer-616"><span class="linenos"> 616</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-617"><a href="#Tokenizer-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
-</span><span id="Tokenizer-618"><a href="#Tokenizer-618"><span class="linenos"> 618</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-619"><a href="#Tokenizer-619"><span class="linenos"> 619</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-620"><a href="#Tokenizer-620"><span class="linenos"> 620</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-621"><a href="#Tokenizer-621"><span class="linenos"> 621</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-622"><a href="#Tokenizer-622"><span class="linenos"> 622</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-623"><a href="#Tokenizer-623"><span class="linenos"> 623</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-624"><a href="#Tokenizer-624"><span class="linenos"> 624</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-625"><a href="#Tokenizer-625"><span class="linenos"> 625</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-626"><a href="#Tokenizer-626"><span class="linenos"> 626</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-627"><a href="#Tokenizer-627"><span class="linenos"> 627</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-628"><a href="#Tokenizer-628"><span class="linenos"> 628</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-629"><a href="#Tokenizer-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="Tokenizer-630"><a href="#Tokenizer-630"><span class="linenos"> 630</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-631"><a href="#Tokenizer-631"><span class="linenos"> 631</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-632"><a href="#Tokenizer-632"><span class="linenos"> 632</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-633"><a href="#Tokenizer-633"><span class="linenos"> 633</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-634"><a href="#Tokenizer-634"><span class="linenos"> 634</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-635"><a href="#Tokenizer-635"><span class="linenos"> 635</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-636"><a href="#Tokenizer-636"><span class="linenos"> 636</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-637"><a href="#Tokenizer-637"><span class="linenos"> 637</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-638"><a href="#Tokenizer-638"><span class="linenos"> 638</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-639"><a href="#Tokenizer-639"><span class="linenos"> 639</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-640"><a href="#Tokenizer-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="Tokenizer-641"><a href="#Tokenizer-641"><span class="linenos"> 641</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-642"><a href="#Tokenizer-642"><span class="linenos"> 642</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-643"><a href="#Tokenizer-643"><span class="linenos"> 643</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-644"><a href="#Tokenizer-644"><span class="linenos"> 644</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-645"><a href="#Tokenizer-645"><span class="linenos"> 645</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-646"><a href="#Tokenizer-646"><span class="linenos"> 646</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-647"><a href="#Tokenizer-647"><span class="linenos"> 647</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-648"><a href="#Tokenizer-648"><span class="linenos"> 648</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-649"><a href="#Tokenizer-649"><span class="linenos"> 649</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-650"><a href="#Tokenizer-650"><span class="linenos"> 650</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-651"><a href="#Tokenizer-651"><span class="linenos"> 651</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-652"><a href="#Tokenizer-652"><span class="linenos"> 652</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-653"><a href="#Tokenizer-653"><span class="linenos"> 653</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-654"><a href="#Tokenizer-654"><span class="linenos"> 654</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-655"><a href="#Tokenizer-655"><span class="linenos"> 655</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-656"><a href="#Tokenizer-656"><span class="linenos"> 656</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-657"><a href="#Tokenizer-657"><span class="linenos"> 657</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-658"><a href="#Tokenizer-658"><span class="linenos"> 658</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-659"><a href="#Tokenizer-659"><span class="linenos"> 659</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-660"><a href="#Tokenizer-660"><span class="linenos"> 660</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-661"><a href="#Tokenizer-661"><span class="linenos"> 661</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-662"><a href="#Tokenizer-662"><span class="linenos"> 662</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-663"><a href="#Tokenizer-663"><span class="linenos"> 663</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-664"><a href="#Tokenizer-664"><span class="linenos"> 664</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-665"><a href="#Tokenizer-665"><span class="linenos"> 665</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-666"><a href="#Tokenizer-666"><span class="linenos"> 666</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-667"><a href="#Tokenizer-667"><span class="linenos"> 667</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-668"><a href="#Tokenizer-668"><span class="linenos"> 668</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-669"><a href="#Tokenizer-669"><span class="linenos"> 669</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-670"><a href="#Tokenizer-670"><span class="linenos"> 670</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-671"><a href="#Tokenizer-671"><span class="linenos"> 671</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-672"><a href="#Tokenizer-672"><span class="linenos"> 672</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-673"><a href="#Tokenizer-673"><span class="linenos"> 673</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-674"><a href="#Tokenizer-674"><span class="linenos"> 674</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-675"><a href="#Tokenizer-675"><span class="linenos"> 675</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-676"><a href="#Tokenizer-676"><span class="linenos"> 676</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-677"><a href="#Tokenizer-677"><span class="linenos"> 677</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-678"><a href="#Tokenizer-678"><span class="linenos"> 678</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-679"><a href="#Tokenizer-679"><span class="linenos"> 679</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-680"><a href="#Tokenizer-680"><span class="linenos"> 680</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-681"><a href="#Tokenizer-681"><span class="linenos"> 681</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-682"><a href="#Tokenizer-682"><span class="linenos"> 682</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-683"><a href="#Tokenizer-683"><span class="linenos"> 683</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-684"><a href="#Tokenizer-684"><span class="linenos"> 684</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-685"><a href="#Tokenizer-685"><span class="linenos"> 685</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-686"><a href="#Tokenizer-686"><span class="linenos"> 686</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-687"><a href="#Tokenizer-687"><span class="linenos"> 687</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-688"><a href="#Tokenizer-688"><span class="linenos"> 688</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-689"><a href="#Tokenizer-689"><span class="linenos"> 689</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-690"><a href="#Tokenizer-690"><span class="linenos"> 690</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-691"><a href="#Tokenizer-691"><span class="linenos"> 691</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-692"><a href="#Tokenizer-692"><span class="linenos"> 692</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-693"><a href="#Tokenizer-693"><span class="linenos"> 693</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-694"><a href="#Tokenizer-694"><span class="linenos"> 694</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-695"><a href="#Tokenizer-695"><span class="linenos"> 695</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-696"><a href="#Tokenizer-696"><span class="linenos"> 696</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-697"><a href="#Tokenizer-697"><span class="linenos"> 697</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-698"><a href="#Tokenizer-698"><span class="linenos"> 698</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-699"><a href="#Tokenizer-699"><span class="linenos"> 699</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-700"><a href="#Tokenizer-700"><span class="linenos"> 700</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-701"><a href="#Tokenizer-701"><span class="linenos"> 701</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-702"><a href="#Tokenizer-702"><span class="linenos"> 702</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-703"><a href="#Tokenizer-703"><span class="linenos"> 703</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-704"><a href="#Tokenizer-704"><span class="linenos"> 704</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-705"><a href="#Tokenizer-705"><span class="linenos"> 705</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-706"><a href="#Tokenizer-706"><span class="linenos"> 706</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-707"><a href="#Tokenizer-707"><span class="linenos"> 707</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-708"><a href="#Tokenizer-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-709"><a href="#Tokenizer-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-710"><a href="#Tokenizer-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-711"><a href="#Tokenizer-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-712"><a href="#Tokenizer-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-713"><a href="#Tokenizer-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-714"><a href="#Tokenizer-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-715"><a href="#Tokenizer-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-716"><a href="#Tokenizer-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-717"><a href="#Tokenizer-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-718"><a href="#Tokenizer-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-719"><a href="#Tokenizer-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-720"><a href="#Tokenizer-720"><span class="linenos"> 720</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-721"><a href="#Tokenizer-721"><span class="linenos"> 721</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-722"><a href="#Tokenizer-722"><span class="linenos"> 722</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-723"><a href="#Tokenizer-723"><span class="linenos"> 723</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-724"><a href="#Tokenizer-724"><span class="linenos"> 724</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-725"><a href="#Tokenizer-725"><span class="linenos"> 725</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-726"><a href="#Tokenizer-726"><span class="linenos"> 726</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-727"><a href="#Tokenizer-727"><span class="linenos"> 727</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-728"><a href="#Tokenizer-728"><span class="linenos"> 728</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-729"><a href="#Tokenizer-729"><span class="linenos"> 729</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-730"><a href="#Tokenizer-730"><span class="linenos"> 730</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-731"><a href="#Tokenizer-731"><span class="linenos"> 731</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-732"><a href="#Tokenizer-732"><span class="linenos"> 732</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-733"><a href="#Tokenizer-733"><span class="linenos"> 733</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-734"><a href="#Tokenizer-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
-</span><span id="Tokenizer-735"><a href="#Tokenizer-735"><span class="linenos"> 735</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-736"><a href="#Tokenizer-736"><span class="linenos"> 736</span></a>
-</span><span id="Tokenizer-737"><a href="#Tokenizer-737"><span class="linenos"> 737</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-738"><a href="#Tokenizer-738"><span class="linenos"> 738</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-739"><a href="#Tokenizer-739"><span class="linenos"> 739</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-740"><a href="#Tokenizer-740"><span class="linenos"> 740</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-741"><a href="#Tokenizer-741"><span class="linenos"> 741</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-742"><a href="#Tokenizer-742"><span class="linenos"> 742</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-743"><a href="#Tokenizer-743"><span class="linenos"> 743</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-744"><a href="#Tokenizer-744"><span class="linenos"> 744</span></a>
-</span><span id="Tokenizer-745"><a href="#Tokenizer-745"><span class="linenos"> 745</span></a> <span class="n">COMMANDS</span> <span class="o">=</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">COMMAND</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">EXECUTE</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">FETCH</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">SHOW</span><span class="p">,</span>
-</span><span id="Tokenizer-750"><a href="#Tokenizer-750"><span class="linenos"> 750</span></a> <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="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-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="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
-</span><span id="Tokenizer-755"><a href="#Tokenizer-755"><span class="linenos"> 755</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-756"><a href="#Tokenizer-756"><span class="linenos"> 756</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-443"><a href="#Tokenizer-443"><span class="linenos"> 443</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-444"><a href="#Tokenizer-444"><span class="linenos"> 444</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-445"><a href="#Tokenizer-445"><span class="linenos"> 445</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-446"><a href="#Tokenizer-446"><span class="linenos"> 446</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-447"><a href="#Tokenizer-447"><span class="linenos"> 447</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-448"><a href="#Tokenizer-448"><span class="linenos"> 448</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-449"><a href="#Tokenizer-449"><span class="linenos"> 449</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-450"><a href="#Tokenizer-450"><span class="linenos"> 450</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-451"><a href="#Tokenizer-451"><span class="linenos"> 451</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-452"><a href="#Tokenizer-452"><span class="linenos"> 452</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-453"><a href="#Tokenizer-453"><span class="linenos"> 453</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-454"><a href="#Tokenizer-454"><span class="linenos"> 454</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-455"><a href="#Tokenizer-455"><span class="linenos"> 455</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-456"><a href="#Tokenizer-456"><span class="linenos"> 456</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-457"><a href="#Tokenizer-457"><span class="linenos"> 457</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-458"><a href="#Tokenizer-458"><span class="linenos"> 458</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-459"><a href="#Tokenizer-459"><span class="linenos"> 459</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-460"><a href="#Tokenizer-460"><span class="linenos"> 460</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-461"><a href="#Tokenizer-461"><span class="linenos"> 461</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-462"><a href="#Tokenizer-462"><span class="linenos"> 462</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-463"><a href="#Tokenizer-463"><span class="linenos"> 463</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-464"><a href="#Tokenizer-464"><span class="linenos"> 464</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-465"><a href="#Tokenizer-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">SLASH</span><span class="p">,</span>
+</span><span id="Tokenizer-466"><a href="#Tokenizer-466"><span class="linenos"> 466</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-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">STAR</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">TILDA</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">PLACEHOLDER</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">PARAMETER</span><span class="p">,</span>
+</span><span id="Tokenizer-471"><a href="#Tokenizer-471"><span class="linenos"> 471</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
+</span><span id="Tokenizer-472"><a href="#Tokenizer-472"><span class="linenos"> 472</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
+</span><span id="Tokenizer-473"><a href="#Tokenizer-473"><span class="linenos"> 473</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-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">IDENTIFIER</span><span class="p">,</span>
+</span><span id="Tokenizer-475"><a href="#Tokenizer-475"><span class="linenos"> 475</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-476"><a href="#Tokenizer-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">HASH</span><span class="p">,</span>
+</span><span id="Tokenizer-477"><a href="#Tokenizer-477"><span class="linenos"> 477</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-478"><a href="#Tokenizer-478"><span class="linenos"> 478</span></a>
+</span><span id="Tokenizer-479"><a href="#Tokenizer-479"><span class="linenos"> 479</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-480"><a href="#Tokenizer-480"><span class="linenos"> 480</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-481"><a href="#Tokenizer-481"><span class="linenos"> 481</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-482"><a href="#Tokenizer-482"><span class="linenos"> 482</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-483"><a href="#Tokenizer-483"><span class="linenos"> 483</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-484"><a href="#Tokenizer-484"><span class="linenos"> 484</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-485"><a href="#Tokenizer-485"><span class="linenos"> 485</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-486"><a href="#Tokenizer-486"><span class="linenos"> 486</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-487"><a href="#Tokenizer-487"><span class="linenos"> 487</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-488"><a href="#Tokenizer-488"><span class="linenos"> 488</span></a>
+</span><span id="Tokenizer-489"><a href="#Tokenizer-489"><span class="linenos"> 489</span></a> <span class="c1"># Autofilled</span>
+</span><span id="Tokenizer-490"><a href="#Tokenizer-490"><span class="linenos"> 490</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-491"><a href="#Tokenizer-491"><span class="linenos"> 491</span></a>
+</span><span id="Tokenizer-492"><a href="#Tokenizer-492"><span class="linenos"> 492</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-493"><a href="#Tokenizer-493"><span class="linenos"> 493</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-494"><a href="#Tokenizer-494"><span class="linenos"> 494</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-495"><a href="#Tokenizer-495"><span class="linenos"> 495</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-496"><a href="#Tokenizer-496"><span class="linenos"> 496</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-497"><a href="#Tokenizer-497"><span class="linenos"> 497</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-498"><a href="#Tokenizer-498"><span class="linenos"> 498</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-499"><a href="#Tokenizer-499"><span class="linenos"> 499</span></a>
+</span><span id="Tokenizer-500"><a href="#Tokenizer-500"><span class="linenos"> 500</span></a> <span class="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-501"><a href="#Tokenizer-501"><span class="linenos"> 501</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-502"><a href="#Tokenizer-502"><span class="linenos"> 502</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-503"><a href="#Tokenizer-503"><span class="linenos"> 503</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="Tokenizer-504"><a href="#Tokenizer-504"><span class="linenos"> 504</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="Tokenizer-505"><a href="#Tokenizer-505"><span class="linenos"> 505</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-506"><a href="#Tokenizer-506"><span class="linenos"> 506</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-507"><a href="#Tokenizer-507"><span class="linenos"> 507</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-508"><a href="#Tokenizer-508"><span class="linenos"> 508</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-509"><a href="#Tokenizer-509"><span class="linenos"> 509</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-510"><a href="#Tokenizer-510"><span class="linenos"> 510</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-511"><a href="#Tokenizer-511"><span class="linenos"> 511</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-512"><a href="#Tokenizer-512"><span class="linenos"> 512</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-513"><a href="#Tokenizer-513"><span class="linenos"> 513</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-514"><a href="#Tokenizer-514"><span class="linenos"> 514</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-515"><a href="#Tokenizer-515"><span class="linenos"> 515</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-516"><a href="#Tokenizer-516"><span class="linenos"> 516</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-517"><a href="#Tokenizer-517"><span class="linenos"> 517</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-518"><a href="#Tokenizer-518"><span class="linenos"> 518</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-519"><a href="#Tokenizer-519"><span class="linenos"> 519</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-520"><a href="#Tokenizer-520"><span class="linenos"> 520</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-521"><a href="#Tokenizer-521"><span class="linenos"> 521</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
+</span><span id="Tokenizer-522"><a href="#Tokenizer-522"><span class="linenos"> 522</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-523"><a href="#Tokenizer-523"><span class="linenos"> 523</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-524"><a href="#Tokenizer-524"><span class="linenos"> 524</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-525"><a href="#Tokenizer-525"><span class="linenos"> 525</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-526"><a href="#Tokenizer-526"><span class="linenos"> 526</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-527"><a href="#Tokenizer-527"><span class="linenos"> 527</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-528"><a href="#Tokenizer-528"><span class="linenos"> 528</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-529"><a href="#Tokenizer-529"><span class="linenos"> 529</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="Tokenizer-530"><a href="#Tokenizer-530"><span class="linenos"> 530</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-531"><a href="#Tokenizer-531"><span class="linenos"> 531</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-532"><a href="#Tokenizer-532"><span class="linenos"> 532</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-533"><a href="#Tokenizer-533"><span class="linenos"> 533</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-534"><a href="#Tokenizer-534"><span class="linenos"> 534</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-535"><a href="#Tokenizer-535"><span class="linenos"> 535</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-536"><a href="#Tokenizer-536"><span class="linenos"> 536</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-537"><a href="#Tokenizer-537"><span class="linenos"> 537</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-538"><a href="#Tokenizer-538"><span class="linenos"> 538</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-539"><a href="#Tokenizer-539"><span class="linenos"> 539</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-540"><a href="#Tokenizer-540"><span class="linenos"> 540</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-541"><a href="#Tokenizer-541"><span class="linenos"> 541</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-542"><a href="#Tokenizer-542"><span class="linenos"> 542</span></a> <span class="s2">&quot;CONNECT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-543"><a href="#Tokenizer-543"><span class="linenos"> 543</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-544"><a href="#Tokenizer-544"><span class="linenos"> 544</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-545"><a href="#Tokenizer-545"><span class="linenos"> 545</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-546"><a href="#Tokenizer-546"><span class="linenos"> 546</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-547"><a href="#Tokenizer-547"><span class="linenos"> 547</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-548"><a href="#Tokenizer-548"><span class="linenos"> 548</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-549"><a href="#Tokenizer-549"><span class="linenos"> 549</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-550"><a href="#Tokenizer-550"><span class="linenos"> 550</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-551"><a href="#Tokenizer-551"><span class="linenos"> 551</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-552"><a href="#Tokenizer-552"><span class="linenos"> 552</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-553"><a href="#Tokenizer-553"><span class="linenos"> 553</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-554"><a href="#Tokenizer-554"><span class="linenos"> 554</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-555"><a href="#Tokenizer-555"><span class="linenos"> 555</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-556"><a href="#Tokenizer-556"><span class="linenos"> 556</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-557"><a href="#Tokenizer-557"><span class="linenos"> 557</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-558"><a href="#Tokenizer-558"><span class="linenos"> 558</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-559"><a href="#Tokenizer-559"><span class="linenos"> 559</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-560"><a href="#Tokenizer-560"><span class="linenos"> 560</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-561"><a href="#Tokenizer-561"><span class="linenos"> 561</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-562"><a href="#Tokenizer-562"><span class="linenos"> 562</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-563"><a href="#Tokenizer-563"><span class="linenos"> 563</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-564"><a href="#Tokenizer-564"><span class="linenos"> 564</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-565"><a href="#Tokenizer-565"><span class="linenos"> 565</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-566"><a href="#Tokenizer-566"><span class="linenos"> 566</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-567"><a href="#Tokenizer-567"><span class="linenos"> 567</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-568"><a href="#Tokenizer-568"><span class="linenos"> 568</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-569"><a href="#Tokenizer-569"><span class="linenos"> 569</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-570"><a href="#Tokenizer-570"><span class="linenos"> 570</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-571"><a href="#Tokenizer-571"><span class="linenos"> 571</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-572"><a href="#Tokenizer-572"><span class="linenos"> 572</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-573"><a href="#Tokenizer-573"><span class="linenos"> 573</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-574"><a href="#Tokenizer-574"><span class="linenos"> 574</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-575"><a href="#Tokenizer-575"><span class="linenos"> 575</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-576"><a href="#Tokenizer-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;GEOGRAPHY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
+</span><span id="Tokenizer-577"><a href="#Tokenizer-577"><span class="linenos"> 577</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
+</span><span id="Tokenizer-578"><a href="#Tokenizer-578"><span class="linenos"> 578</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-579"><a href="#Tokenizer-579"><span class="linenos"> 579</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-580"><a href="#Tokenizer-580"><span class="linenos"> 580</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-581"><a href="#Tokenizer-581"><span class="linenos"> 581</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-582"><a href="#Tokenizer-582"><span class="linenos"> 582</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-583"><a href="#Tokenizer-583"><span class="linenos"> 583</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-584"><a href="#Tokenizer-584"><span class="linenos"> 584</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-585"><a href="#Tokenizer-585"><span class="linenos"> 585</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-586"><a href="#Tokenizer-586"><span class="linenos"> 586</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-587"><a href="#Tokenizer-587"><span class="linenos"> 587</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-588"><a href="#Tokenizer-588"><span class="linenos"> 588</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-589"><a href="#Tokenizer-589"><span class="linenos"> 589</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-590"><a href="#Tokenizer-590"><span class="linenos"> 590</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-591"><a href="#Tokenizer-591"><span class="linenos"> 591</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-592"><a href="#Tokenizer-592"><span class="linenos"> 592</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-593"><a href="#Tokenizer-593"><span class="linenos"> 593</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-594"><a href="#Tokenizer-594"><span class="linenos"> 594</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-595"><a href="#Tokenizer-595"><span class="linenos"> 595</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-596"><a href="#Tokenizer-596"><span class="linenos"> 596</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-597"><a href="#Tokenizer-597"><span class="linenos"> 597</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-598"><a href="#Tokenizer-598"><span class="linenos"> 598</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-599"><a href="#Tokenizer-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
+</span><span id="Tokenizer-600"><a href="#Tokenizer-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
+</span><span id="Tokenizer-601"><a href="#Tokenizer-601"><span class="linenos"> 601</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-602"><a href="#Tokenizer-602"><span class="linenos"> 602</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-603"><a href="#Tokenizer-603"><span class="linenos"> 603</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-604"><a href="#Tokenizer-604"><span class="linenos"> 604</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-605"><a href="#Tokenizer-605"><span class="linenos"> 605</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-606"><a href="#Tokenizer-606"><span class="linenos"> 606</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-607"><a href="#Tokenizer-607"><span class="linenos"> 607</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-608"><a href="#Tokenizer-608"><span class="linenos"> 608</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-609"><a href="#Tokenizer-609"><span class="linenos"> 609</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-610"><a href="#Tokenizer-610"><span class="linenos"> 610</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-611"><a href="#Tokenizer-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
+</span><span id="Tokenizer-612"><a href="#Tokenizer-612"><span class="linenos"> 612</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-613"><a href="#Tokenizer-613"><span class="linenos"> 613</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-614"><a href="#Tokenizer-614"><span class="linenos"> 614</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-615"><a href="#Tokenizer-615"><span class="linenos"> 615</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-616"><a href="#Tokenizer-616"><span class="linenos"> 616</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-617"><a href="#Tokenizer-617"><span class="linenos"> 617</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-618"><a href="#Tokenizer-618"><span class="linenos"> 618</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-619"><a href="#Tokenizer-619"><span class="linenos"> 619</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-620"><a href="#Tokenizer-620"><span class="linenos"> 620</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-621"><a href="#Tokenizer-621"><span class="linenos"> 621</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-622"><a href="#Tokenizer-622"><span class="linenos"> 622</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-623"><a href="#Tokenizer-623"><span class="linenos"> 623</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-624"><a href="#Tokenizer-624"><span class="linenos"> 624</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-625"><a href="#Tokenizer-625"><span class="linenos"> 625</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-626"><a href="#Tokenizer-626"><span class="linenos"> 626</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-627"><a href="#Tokenizer-627"><span class="linenos"> 627</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-628"><a href="#Tokenizer-628"><span class="linenos"> 628</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-629"><a href="#Tokenizer-629"><span class="linenos"> 629</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-630"><a href="#Tokenizer-630"><span class="linenos"> 630</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-631"><a href="#Tokenizer-631"><span class="linenos"> 631</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-632"><a href="#Tokenizer-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
+</span><span id="Tokenizer-633"><a href="#Tokenizer-633"><span class="linenos"> 633</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-634"><a href="#Tokenizer-634"><span class="linenos"> 634</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-635"><a href="#Tokenizer-635"><span class="linenos"> 635</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-636"><a href="#Tokenizer-636"><span class="linenos"> 636</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-637"><a href="#Tokenizer-637"><span class="linenos"> 637</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-638"><a href="#Tokenizer-638"><span class="linenos"> 638</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-639"><a href="#Tokenizer-639"><span class="linenos"> 639</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-640"><a href="#Tokenizer-640"><span class="linenos"> 640</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-641"><a href="#Tokenizer-641"><span class="linenos"> 641</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-642"><a href="#Tokenizer-642"><span class="linenos"> 642</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-643"><a href="#Tokenizer-643"><span class="linenos"> 643</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-644"><a href="#Tokenizer-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="Tokenizer-645"><a href="#Tokenizer-645"><span class="linenos"> 645</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-646"><a href="#Tokenizer-646"><span class="linenos"> 646</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-647"><a href="#Tokenizer-647"><span class="linenos"> 647</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-648"><a href="#Tokenizer-648"><span class="linenos"> 648</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-649"><a href="#Tokenizer-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;START WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">,</span>
+</span><span id="Tokenizer-650"><a href="#Tokenizer-650"><span class="linenos"> 650</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-651"><a href="#Tokenizer-651"><span class="linenos"> 651</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-652"><a href="#Tokenizer-652"><span class="linenos"> 652</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-653"><a href="#Tokenizer-653"><span class="linenos"> 653</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-654"><a href="#Tokenizer-654"><span class="linenos"> 654</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-655"><a href="#Tokenizer-655"><span class="linenos"> 655</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-656"><a href="#Tokenizer-656"><span class="linenos"> 656</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-657"><a href="#Tokenizer-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="Tokenizer-658"><a href="#Tokenizer-658"><span class="linenos"> 658</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-659"><a href="#Tokenizer-659"><span class="linenos"> 659</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-660"><a href="#Tokenizer-660"><span class="linenos"> 660</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-661"><a href="#Tokenizer-661"><span class="linenos"> 661</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-662"><a href="#Tokenizer-662"><span class="linenos"> 662</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-663"><a href="#Tokenizer-663"><span class="linenos"> 663</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-664"><a href="#Tokenizer-664"><span class="linenos"> 664</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-665"><a href="#Tokenizer-665"><span class="linenos"> 665</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-666"><a href="#Tokenizer-666"><span class="linenos"> 666</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-667"><a href="#Tokenizer-667"><span class="linenos"> 667</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-668"><a href="#Tokenizer-668"><span class="linenos"> 668</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-669"><a href="#Tokenizer-669"><span class="linenos"> 669</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-670"><a href="#Tokenizer-670"><span class="linenos"> 670</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-671"><a href="#Tokenizer-671"><span class="linenos"> 671</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-672"><a href="#Tokenizer-672"><span class="linenos"> 672</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-673"><a href="#Tokenizer-673"><span class="linenos"> 673</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-674"><a href="#Tokenizer-674"><span class="linenos"> 674</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-675"><a href="#Tokenizer-675"><span class="linenos"> 675</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-676"><a href="#Tokenizer-676"><span class="linenos"> 676</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-677"><a href="#Tokenizer-677"><span class="linenos"> 677</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-678"><a href="#Tokenizer-678"><span class="linenos"> 678</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-679"><a href="#Tokenizer-679"><span class="linenos"> 679</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-680"><a href="#Tokenizer-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="Tokenizer-681"><a href="#Tokenizer-681"><span class="linenos"> 681</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-682"><a href="#Tokenizer-682"><span class="linenos"> 682</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-683"><a href="#Tokenizer-683"><span class="linenos"> 683</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-684"><a href="#Tokenizer-684"><span class="linenos"> 684</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-685"><a href="#Tokenizer-685"><span class="linenos"> 685</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-686"><a href="#Tokenizer-686"><span class="linenos"> 686</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-687"><a href="#Tokenizer-687"><span class="linenos"> 687</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-688"><a href="#Tokenizer-688"><span class="linenos"> 688</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-689"><a href="#Tokenizer-689"><span class="linenos"> 689</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-690"><a href="#Tokenizer-690"><span class="linenos"> 690</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-691"><a href="#Tokenizer-691"><span class="linenos"> 691</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-692"><a href="#Tokenizer-692"><span class="linenos"> 692</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-693"><a href="#Tokenizer-693"><span class="linenos"> 693</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-694"><a href="#Tokenizer-694"><span class="linenos"> 694</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-695"><a href="#Tokenizer-695"><span class="linenos"> 695</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-696"><a href="#Tokenizer-696"><span class="linenos"> 696</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-697"><a href="#Tokenizer-697"><span class="linenos"> 697</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-698"><a href="#Tokenizer-698"><span class="linenos"> 698</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-699"><a href="#Tokenizer-699"><span class="linenos"> 699</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-700"><a href="#Tokenizer-700"><span class="linenos"> 700</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-701"><a href="#Tokenizer-701"><span class="linenos"> 701</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-702"><a href="#Tokenizer-702"><span class="linenos"> 702</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-703"><a href="#Tokenizer-703"><span class="linenos"> 703</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-704"><a href="#Tokenizer-704"><span class="linenos"> 704</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-705"><a href="#Tokenizer-705"><span class="linenos"> 705</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-706"><a href="#Tokenizer-706"><span class="linenos"> 706</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-707"><a href="#Tokenizer-707"><span class="linenos"> 707</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-708"><a href="#Tokenizer-708"><span class="linenos"> 708</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-709"><a href="#Tokenizer-709"><span class="linenos"> 709</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-710"><a href="#Tokenizer-710"><span class="linenos"> 710</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-711"><a href="#Tokenizer-711"><span class="linenos"> 711</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-712"><a href="#Tokenizer-712"><span class="linenos"> 712</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-713"><a href="#Tokenizer-713"><span class="linenos"> 713</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-714"><a href="#Tokenizer-714"><span class="linenos"> 714</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-715"><a href="#Tokenizer-715"><span class="linenos"> 715</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-716"><a href="#Tokenizer-716"><span class="linenos"> 716</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-717"><a href="#Tokenizer-717"><span class="linenos"> 717</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-718"><a href="#Tokenizer-718"><span class="linenos"> 718</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-719"><a href="#Tokenizer-719"><span class="linenos"> 719</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-720"><a href="#Tokenizer-720"><span class="linenos"> 720</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-721"><a href="#Tokenizer-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Tokenizer-722"><a href="#Tokenizer-722"><span class="linenos"> 722</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-723"><a href="#Tokenizer-723"><span class="linenos"> 723</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-724"><a href="#Tokenizer-724"><span class="linenos"> 724</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-725"><a href="#Tokenizer-725"><span class="linenos"> 725</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-726"><a href="#Tokenizer-726"><span class="linenos"> 726</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-727"><a href="#Tokenizer-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-728"><a href="#Tokenizer-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-729"><a href="#Tokenizer-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-730"><a href="#Tokenizer-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-731"><a href="#Tokenizer-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-732"><a href="#Tokenizer-732"><span class="linenos"> 732</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-733"><a href="#Tokenizer-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-734"><a href="#Tokenizer-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-735"><a href="#Tokenizer-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-736"><a href="#Tokenizer-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-737"><a href="#Tokenizer-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-738"><a href="#Tokenizer-738"><span class="linenos"> 738</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-739"><a href="#Tokenizer-739"><span class="linenos"> 739</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-740"><a href="#Tokenizer-740"><span class="linenos"> 740</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-741"><a href="#Tokenizer-741"><span class="linenos"> 741</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-742"><a href="#Tokenizer-742"><span class="linenos"> 742</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-743"><a href="#Tokenizer-743"><span class="linenos"> 743</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-744"><a href="#Tokenizer-744"><span class="linenos"> 744</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-745"><a href="#Tokenizer-745"><span class="linenos"> 745</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-746"><a href="#Tokenizer-746"><span class="linenos"> 746</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-747"><a href="#Tokenizer-747"><span class="linenos"> 747</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-748"><a href="#Tokenizer-748"><span class="linenos"> 748</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-749"><a href="#Tokenizer-749"><span class="linenos"> 749</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-750"><a href="#Tokenizer-750"><span class="linenos"> 750</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-751"><a href="#Tokenizer-751"><span class="linenos"> 751</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-752"><a href="#Tokenizer-752"><span class="linenos"> 752</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-753"><a href="#Tokenizer-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
+</span><span id="Tokenizer-754"><a href="#Tokenizer-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;FOR VERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Tokenizer-755"><a href="#Tokenizer-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;FOR TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Tokenizer-756"><a href="#Tokenizer-756"><span class="linenos"> 756</span></a> <span class="p">}</span>
</span><span id="Tokenizer-757"><a href="#Tokenizer-757"><span class="linenos"> 757</span></a>
-</span><span id="Tokenizer-758"><a href="#Tokenizer-758"><span class="linenos"> 758</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
-</span><span id="Tokenizer-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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Tokenizer-761"><a href="#Tokenizer-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-762"><a href="#Tokenizer-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;size&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;tokens&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;_start&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;_current&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;_line&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;_col&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;_comments&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;_char&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;_end&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;_peek&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;_prev_token_line&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-773"><a href="#Tokenizer-773"><span class="linenos"> 773</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-758"><a href="#Tokenizer-758"><span class="linenos"> 758</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-759"><a href="#Tokenizer-759"><span class="linenos"> 759</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-760"><a href="#Tokenizer-760"><span class="linenos"> 760</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-761"><a href="#Tokenizer-761"><span class="linenos"> 761</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-762"><a href="#Tokenizer-762"><span class="linenos"> 762</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-763"><a href="#Tokenizer-763"><span class="linenos"> 763</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-764"><a href="#Tokenizer-764"><span class="linenos"> 764</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-765"><a href="#Tokenizer-765"><span class="linenos"> 765</span></a>
+</span><span id="Tokenizer-766"><a href="#Tokenizer-766"><span class="linenos"> 766</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-767"><a href="#Tokenizer-767"><span class="linenos"> 767</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Tokenizer-768"><a href="#Tokenizer-768"><span class="linenos"> 768</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="Tokenizer-769"><a href="#Tokenizer-769"><span class="linenos"> 769</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="Tokenizer-770"><a href="#Tokenizer-770"><span class="linenos"> 770</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="Tokenizer-771"><a href="#Tokenizer-771"><span class="linenos"> 771</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-772"><a href="#Tokenizer-772"><span class="linenos"> 772</span></a>
+</span><span id="Tokenizer-773"><a href="#Tokenizer-773"><span class="linenos"> 773</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-774"><a href="#Tokenizer-774"><span class="linenos"> 774</span></a>
-</span><span id="Tokenizer-775"><a href="#Tokenizer-775"><span class="linenos"> 775</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-776"><a href="#Tokenizer-776"><span class="linenos"> 776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><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="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-779"><a href="#Tokenizer-779"><span class="linenos"> 779</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-780"><a href="#Tokenizer-780"><span class="linenos"> 780</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-781"><a href="#Tokenizer-781"><span class="linenos"> 781</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-782"><a href="#Tokenizer-782"><span class="linenos"> 782</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-783"><a href="#Tokenizer-783"><span class="linenos"> 783</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-784"><a href="#Tokenizer-784"><span class="linenos"> 784</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-785"><a href="#Tokenizer-785"><span class="linenos"> 785</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-786"><a href="#Tokenizer-786"><span class="linenos"> 786</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-787"><a href="#Tokenizer-787"><span class="linenos"> 787</span></a>
-</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">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_end</span> <span class="o">=</span> <span class="kc">False</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">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_prev_token_line</span> <span class="o">=</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><span id="Tokenizer-793"><a href="#Tokenizer-793"><span class="linenos"> 793</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-794"><a href="#Tokenizer-794"><span class="linenos"> 794</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-795"><a href="#Tokenizer-795"><span class="linenos"> 795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</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">sql</span> <span class="o">=</span> <span class="n">sql</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">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-775"><a href="#Tokenizer-775"><span class="linenos"> 775</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
+</span><span id="Tokenizer-776"><a href="#Tokenizer-776"><span class="linenos"> 776</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-777"><a href="#Tokenizer-777"><span class="linenos"> 777</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-778"><a href="#Tokenizer-778"><span class="linenos"> 778</span></a>
+</span><span id="Tokenizer-779"><a href="#Tokenizer-779"><span class="linenos"> 779</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;/*&quot;</span><span class="p">,</span> <span class="s2">&quot;*/&quot;</span><span class="p">)]</span>
+</span><span id="Tokenizer-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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Tokenizer-782"><a href="#Tokenizer-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-783"><a href="#Tokenizer-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-784"><a href="#Tokenizer-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-785"><a href="#Tokenizer-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-786"><a href="#Tokenizer-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-787"><a href="#Tokenizer-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-788"><a href="#Tokenizer-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-789"><a href="#Tokenizer-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-790"><a href="#Tokenizer-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-791"><a href="#Tokenizer-791"><span class="linenos"> 791</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-792"><a href="#Tokenizer-792"><span class="linenos"> 792</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-793"><a href="#Tokenizer-793"><span class="linenos"> 793</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-794"><a href="#Tokenizer-794"><span class="linenos"> 794</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-795"><a href="#Tokenizer-795"><span class="linenos"> 795</span></a>
+</span><span id="Tokenizer-796"><a href="#Tokenizer-796"><span class="linenos"> 796</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-797"><a href="#Tokenizer-797"><span class="linenos"> 797</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span><span id="Tokenizer-798"><a href="#Tokenizer-798"><span class="linenos"> 798</span></a>
-</span><span id="Tokenizer-799"><a href="#Tokenizer-799"><span class="linenos"> 799</span></a> <span class="k">try</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">_scan</span><span class="p">()</span>
-</span><span id="Tokenizer-801"><a href="#Tokenizer-801"><span class="linenos"> 801</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-802"><a href="#Tokenizer-802"><span class="linenos"> 802</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Tokenizer-803"><a href="#Tokenizer-803"><span class="linenos"> 803</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-804"><a href="#Tokenizer-804"><span class="linenos"> 804</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-805"><a href="#Tokenizer-805"><span class="linenos"> 805</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
-</span><span id="Tokenizer-806"><a href="#Tokenizer-806"><span class="linenos"> 806</span></a>
-</span><span id="Tokenizer-807"><a href="#Tokenizer-807"><span class="linenos"> 807</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-799"><a href="#Tokenizer-799"><span class="linenos"> 799</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-800"><a href="#Tokenizer-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="s2">&quot;&quot;</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">size</span> <span class="o">=</span> <span class="mi">0</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">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-803"><a href="#Tokenizer-803"><span class="linenos"> 803</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-804"><a href="#Tokenizer-804"><span class="linenos"> 804</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-805"><a href="#Tokenizer-805"><span class="linenos"> 805</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-806"><a href="#Tokenizer-806"><span class="linenos"> 806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-807"><a href="#Tokenizer-807"><span class="linenos"> 807</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-808"><a href="#Tokenizer-808"><span class="linenos"> 808</span></a>
-</span><span id="Tokenizer-809"><a href="#Tokenizer-809"><span class="linenos"> 809</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-810"><a href="#Tokenizer-810"><span class="linenos"> 810</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-811"><a href="#Tokenizer-811"><span class="linenos"> 811</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-812"><a href="#Tokenizer-812"><span class="linenos"> 812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-809"><a href="#Tokenizer-809"><span class="linenos"> 809</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-810"><a href="#Tokenizer-810"><span class="linenos"> 810</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-811"><a href="#Tokenizer-811"><span class="linenos"> 811</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-812"><a href="#Tokenizer-812"><span class="linenos"> 812</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-813"><a href="#Tokenizer-813"><span class="linenos"> 813</span></a>
-</span><span id="Tokenizer-814"><a href="#Tokenizer-814"><span class="linenos"> 814</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-815"><a href="#Tokenizer-815"><span class="linenos"> 815</span></a> <span class="k">break</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">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-818"><a href="#Tokenizer-818"><span class="linenos"> 818</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-819"><a href="#Tokenizer-819"><span class="linenos"> 819</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-820"><a href="#Tokenizer-820"><span class="linenos"> 820</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-821"><a href="#Tokenizer-821"><span class="linenos"> 821</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-822"><a href="#Tokenizer-822"><span class="linenos"> 822</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-823"><a href="#Tokenizer-823"><span class="linenos"> 823</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-824"><a href="#Tokenizer-824"><span class="linenos"> 824</span></a>
-</span><span id="Tokenizer-825"><a href="#Tokenizer-825"><span class="linenos"> 825</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-826"><a href="#Tokenizer-826"><span class="linenos"> 826</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-814"><a href="#Tokenizer-814"><span class="linenos"> 814</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-815"><a href="#Tokenizer-815"><span class="linenos"> 815</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-816"><a href="#Tokenizer-816"><span class="linenos"> 816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</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">sql</span> <span class="o">=</span> <span class="n">sql</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">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-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">try</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">_scan</span><span class="p">()</span>
+</span><span id="Tokenizer-822"><a href="#Tokenizer-822"><span class="linenos"> 822</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-823"><a href="#Tokenizer-823"><span class="linenos"> 823</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Tokenizer-824"><a href="#Tokenizer-824"><span class="linenos"> 824</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-825"><a href="#Tokenizer-825"><span class="linenos"> 825</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-826"><a href="#Tokenizer-826"><span class="linenos"> 826</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
</span><span id="Tokenizer-827"><a href="#Tokenizer-827"><span class="linenos"> 827</span></a>
-</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">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
-</span><span id="Tokenizer-829"><a href="#Tokenizer-829"><span class="linenos"> 829</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-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">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-832"><a href="#Tokenizer-832"><span class="linenos"> 832</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-833"><a href="#Tokenizer-833"><span class="linenos"> 833</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-828"><a href="#Tokenizer-828"><span class="linenos"> 828</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-829"><a href="#Tokenizer-829"><span class="linenos"> 829</span></a>
+</span><span id="Tokenizer-830"><a href="#Tokenizer-830"><span class="linenos"> 830</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-831"><a href="#Tokenizer-831"><span class="linenos"> 831</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-832"><a href="#Tokenizer-832"><span class="linenos"> 832</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-833"><a href="#Tokenizer-833"><span class="linenos"> 833</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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-836"><a href="#Tokenizer-836"><span class="linenos"> 836</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-835"><a href="#Tokenizer-835"><span class="linenos"> 835</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-839"><a href="#Tokenizer-839"><span class="linenos"> 839</span></a>
-</span><span id="Tokenizer-840"><a href="#Tokenizer-840"><span class="linenos"> 840</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-841"><a href="#Tokenizer-841"><span class="linenos"> 841</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-842"><a href="#Tokenizer-842"><span class="linenos"> 842</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-843"><a href="#Tokenizer-843"><span class="linenos"> 843</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-844"><a href="#Tokenizer-844"><span class="linenos"> 844</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-845"><a href="#Tokenizer-845"><span class="linenos"> 845</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-846"><a href="#Tokenizer-846"><span class="linenos"> 846</span></a>
-</span><span id="Tokenizer-847"><a href="#Tokenizer-847"><span class="linenos"> 847</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-848"><a href="#Tokenizer-848"><span class="linenos"> 848</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-849"><a href="#Tokenizer-849"><span class="linenos"> 849</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-850"><a href="#Tokenizer-850"><span class="linenos"> 850</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-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">_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-839"><a href="#Tokenizer-839"><span class="linenos"> 839</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-840"><a href="#Tokenizer-840"><span class="linenos"> 840</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-841"><a href="#Tokenizer-841"><span class="linenos"> 841</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-842"><a href="#Tokenizer-842"><span class="linenos"> 842</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-843"><a href="#Tokenizer-843"><span class="linenos"> 843</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-844"><a href="#Tokenizer-844"><span class="linenos"> 844</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-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">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-847"><a href="#Tokenizer-847"><span class="linenos"> 847</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-848"><a href="#Tokenizer-848"><span class="linenos"> 848</span></a>
+</span><span id="Tokenizer-849"><a href="#Tokenizer-849"><span class="linenos"> 849</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
+</span><span id="Tokenizer-850"><a href="#Tokenizer-850"><span class="linenos"> 850</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-851"><a href="#Tokenizer-851"><span class="linenos"> 851</span></a>
-</span><span id="Tokenizer-852"><a href="#Tokenizer-852"><span class="linenos"> 852</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="Tokenizer-853"><a href="#Tokenizer-853"><span class="linenos"> 853</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
-</span><span id="Tokenizer-854"><a href="#Tokenizer-854"><span class="linenos"> 854</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
-</span><span id="Tokenizer-855"><a href="#Tokenizer-855"><span class="linenos"> 855</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="Tokenizer-856"><a href="#Tokenizer-856"><span class="linenos"> 856</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
-</span><span id="Tokenizer-857"><a href="#Tokenizer-857"><span class="linenos"> 857</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-852"><a href="#Tokenizer-852"><span class="linenos"> 852</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-853"><a href="#Tokenizer-853"><span class="linenos"> 853</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-854"><a href="#Tokenizer-854"><span class="linenos"> 854</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-855"><a href="#Tokenizer-855"><span class="linenos"> 855</span></a>
+</span><span id="Tokenizer-856"><a href="#Tokenizer-856"><span class="linenos"> 856</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-857"><a href="#Tokenizer-857"><span class="linenos"> 857</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-858"><a href="#Tokenizer-858"><span class="linenos"> 858</span></a>
-</span><span id="Tokenizer-859"><a href="#Tokenizer-859"><span class="linenos"> 859</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="Tokenizer-860"><a href="#Tokenizer-860"><span class="linenos"> 860</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-861"><a href="#Tokenizer-861"><span class="linenos"> 861</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-862"><a href="#Tokenizer-862"><span class="linenos"> 862</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
-</span><span id="Tokenizer-863"><a href="#Tokenizer-863"><span class="linenos"> 863</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="Tokenizer-864"><a href="#Tokenizer-864"><span class="linenos"> 864</span></a>
-</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">_col</span> <span class="o">=</span> <span class="n">_col</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">_current</span> <span class="o">=</span> <span class="n">_current</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">_end</span> <span class="o">=</span> <span class="n">_end</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">_peek</span> <span class="o">=</span> <span class="n">_peek</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">_char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Tokenizer-870"><a href="#Tokenizer-870"><span class="linenos"> 870</span></a>
-</span><span id="Tokenizer-871"><a href="#Tokenizer-871"><span class="linenos"> 871</span></a> <span class="nd">@property</span>
-</span><span id="Tokenizer-872"><a href="#Tokenizer-872"><span class="linenos"> 872</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-873"><a href="#Tokenizer-873"><span class="linenos"> 873</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-874"><a href="#Tokenizer-874"><span class="linenos"> 874</span></a>
-</span><span id="Tokenizer-875"><a href="#Tokenizer-875"><span class="linenos"> 875</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-876"><a href="#Tokenizer-876"><span class="linenos"> 876</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
-</span><span id="Tokenizer-877"><a href="#Tokenizer-877"><span class="linenos"> 877</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer-878"><a href="#Tokenizer-878"><span class="linenos"> 878</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-</span><span id="Tokenizer-879"><a href="#Tokenizer-879"><span class="linenos"> 879</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-880"><a href="#Tokenizer-880"><span class="linenos"> 880</span></a>
-</span><span id="Tokenizer-881"><a href="#Tokenizer-881"><span class="linenos"> 881</span></a> <span class="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-882"><a href="#Tokenizer-882"><span class="linenos"> 882</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-883"><a href="#Tokenizer-883"><span class="linenos"> 883</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-884"><a href="#Tokenizer-884"><span class="linenos"> 884</span></a> <span class="n">Token</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="p">,</span>
-</span><span id="Tokenizer-886"><a href="#Tokenizer-886"><span class="linenos"> 886</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
-</span><span id="Tokenizer-887"><a href="#Tokenizer-887"><span class="linenos"> 887</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
-</span><span id="Tokenizer-888"><a href="#Tokenizer-888"><span class="linenos"> 888</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
-</span><span id="Tokenizer-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">_start</span><span class="p">,</span>
-</span><span id="Tokenizer-890"><a href="#Tokenizer-890"><span class="linenos"> 890</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="Tokenizer-891"><a href="#Tokenizer-891"><span class="linenos"> 891</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
-</span><span id="Tokenizer-892"><a href="#Tokenizer-892"><span class="linenos"> 892</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-893"><a href="#Tokenizer-893"><span class="linenos"> 893</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-894"><a href="#Tokenizer-894"><span class="linenos"> 894</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-859"><a href="#Tokenizer-859"><span class="linenos"> 859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-860"><a href="#Tokenizer-860"><span class="linenos"> 860</span></a>
+</span><span id="Tokenizer-861"><a href="#Tokenizer-861"><span class="linenos"> 861</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-862"><a href="#Tokenizer-862"><span class="linenos"> 862</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-863"><a href="#Tokenizer-863"><span class="linenos"> 863</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-864"><a href="#Tokenizer-864"><span class="linenos"> 864</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-865"><a href="#Tokenizer-865"><span class="linenos"> 865</span></a> <span class="k">else</span><span class="p">:</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">_col</span> <span class="o">+=</span> <span class="n">i</span>
+</span><span id="Tokenizer-867"><a href="#Tokenizer-867"><span class="linenos"> 867</span></a>
+</span><span id="Tokenizer-868"><a href="#Tokenizer-868"><span class="linenos"> 868</span></a> <span class="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-869"><a href="#Tokenizer-869"><span class="linenos"> 869</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-870"><a href="#Tokenizer-870"><span class="linenos"> 870</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-871"><a href="#Tokenizer-871"><span class="linenos"> 871</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-872"><a href="#Tokenizer-872"><span class="linenos"> 872</span></a>
+</span><span id="Tokenizer-873"><a href="#Tokenizer-873"><span class="linenos"> 873</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="Tokenizer-874"><a href="#Tokenizer-874"><span class="linenos"> 874</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
+</span><span id="Tokenizer-875"><a href="#Tokenizer-875"><span class="linenos"> 875</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
+</span><span id="Tokenizer-876"><a href="#Tokenizer-876"><span class="linenos"> 876</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="Tokenizer-877"><a href="#Tokenizer-877"><span class="linenos"> 877</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
+</span><span id="Tokenizer-878"><a href="#Tokenizer-878"><span class="linenos"> 878</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-879"><a href="#Tokenizer-879"><span class="linenos"> 879</span></a>
+</span><span id="Tokenizer-880"><a href="#Tokenizer-880"><span class="linenos"> 880</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="Tokenizer-881"><a href="#Tokenizer-881"><span class="linenos"> 881</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-882"><a href="#Tokenizer-882"><span class="linenos"> 882</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-883"><a href="#Tokenizer-883"><span class="linenos"> 883</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
+</span><span id="Tokenizer-884"><a href="#Tokenizer-884"><span class="linenos"> 884</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="Tokenizer-885"><a href="#Tokenizer-885"><span class="linenos"> 885</span></a>
+</span><span id="Tokenizer-886"><a href="#Tokenizer-886"><span class="linenos"> 886</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="n">_col</span>
+</span><span id="Tokenizer-887"><a href="#Tokenizer-887"><span class="linenos"> 887</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
+</span><span id="Tokenizer-888"><a href="#Tokenizer-888"><span class="linenos"> 888</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
+</span><span id="Tokenizer-889"><a href="#Tokenizer-889"><span class="linenos"> 889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
+</span><span id="Tokenizer-890"><a href="#Tokenizer-890"><span class="linenos"> 890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Tokenizer-891"><a href="#Tokenizer-891"><span class="linenos"> 891</span></a>
+</span><span id="Tokenizer-892"><a href="#Tokenizer-892"><span class="linenos"> 892</span></a> <span class="nd">@property</span>
+</span><span id="Tokenizer-893"><a href="#Tokenizer-893"><span class="linenos"> 893</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-894"><a href="#Tokenizer-894"><span class="linenos"> 894</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-895"><a href="#Tokenizer-895"><span class="linenos"> 895</span></a>
-</span><span id="Tokenizer-896"><a href="#Tokenizer-896"><span class="linenos"> 896</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-897"><a href="#Tokenizer-897"><span class="linenos"> 897</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
-</span><span id="Tokenizer-898"><a href="#Tokenizer-898"><span class="linenos"> 898</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Tokenizer-899"><a href="#Tokenizer-899"><span class="linenos"> 899</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-900"><a href="#Tokenizer-900"><span class="linenos"> 900</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-901"><a href="#Tokenizer-901"><span class="linenos"> 901</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-902"><a href="#Tokenizer-902"><span class="linenos"> 902</span></a> <span class="p">):</span>
-</span><span id="Tokenizer-903"><a href="#Tokenizer-903"><span class="linenos"> 903</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-904"><a href="#Tokenizer-904"><span class="linenos"> 904</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-905"><a href="#Tokenizer-905"><span class="linenos"> 905</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-906"><a href="#Tokenizer-906"><span class="linenos"> 906</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-907"><a href="#Tokenizer-907"><span class="linenos"> 907</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-908"><a href="#Tokenizer-908"><span class="linenos"> 908</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="Tokenizer-909"><a href="#Tokenizer-909"><span class="linenos"> 909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-910"><a href="#Tokenizer-910"><span class="linenos"> 910</span></a>
-</span><span id="Tokenizer-911"><a href="#Tokenizer-911"><span class="linenos"> 911</span></a> <span class="k">def</span> <span class="nf">_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-912"><a href="#Tokenizer-912"><span class="linenos"> 912</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-913"><a href="#Tokenizer-913"><span class="linenos"> 913</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-914"><a href="#Tokenizer-914"><span class="linenos"> 914</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-915"><a href="#Tokenizer-915"><span class="linenos"> 915</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="Tokenizer-916"><a href="#Tokenizer-916"><span class="linenos"> 916</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-917"><a href="#Tokenizer-917"><span class="linenos"> 917</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-918"><a href="#Tokenizer-918"><span class="linenos"> 918</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-919"><a href="#Tokenizer-919"><span class="linenos"> 919</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-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">while</span> <span class="n">chars</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">skip</span><span class="p">:</span>
-</span><span id="Tokenizer-923"><a href="#Tokenizer-923"><span class="linenos"> 923</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
-</span><span id="Tokenizer-924"><a href="#Tokenizer-924"><span class="linenos"> 924</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-925"><a href="#Tokenizer-925"><span class="linenos"> 925</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-926"><a href="#Tokenizer-926"><span class="linenos"> 926</span></a>
-</span><span id="Tokenizer-927"><a href="#Tokenizer-927"><span class="linenos"> 927</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="Tokenizer-928"><a href="#Tokenizer-928"><span class="linenos"> 928</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-929"><a href="#Tokenizer-929"><span class="linenos"> 929</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="Tokenizer-930"><a href="#Tokenizer-930"><span class="linenos"> 930</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</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">size</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-933"><a href="#Tokenizer-933"><span class="linenos"> 933</span></a> <span 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-934"><a href="#Tokenizer-934"><span class="linenos"> 934</span></a>
-</span><span id="Tokenizer-935"><a href="#Tokenizer-935"><span class="linenos"> 935</span></a> <span class="k">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-936"><a href="#Tokenizer-936"><span class="linenos"> 936</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-937"><a href="#Tokenizer-937"><span class="linenos"> 937</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-938"><a href="#Tokenizer-938"><span class="linenos"> 938</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-939"><a href="#Tokenizer-939"><span class="linenos"> 939</span></a>
-</span><span id="Tokenizer-940"><a href="#Tokenizer-940"><span class="linenos"> 940</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-941"><a href="#Tokenizer-941"><span class="linenos"> 941</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
-</span><span id="Tokenizer-942"><a href="#Tokenizer-942"><span class="linenos"> 942</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Tokenizer-943"><a href="#Tokenizer-943"><span class="linenos"> 943</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
-</span><span id="Tokenizer-944"><a href="#Tokenizer-944"><span class="linenos"> 944</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
-</span><span id="Tokenizer-945"><a href="#Tokenizer-945"><span class="linenos"> 945</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-946"><a href="#Tokenizer-946"><span class="linenos"> 946</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-947"><a href="#Tokenizer-947"><span class="linenos"> 947</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Tokenizer-948"><a href="#Tokenizer-948"><span class="linenos"> 948</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-949"><a href="#Tokenizer-949"><span class="linenos"> 949</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-950"><a href="#Tokenizer-950"><span class="linenos"> 950</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</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">if</span> <span class="ow">not</span> <span class="n">word</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="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-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">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-955"><a href="#Tokenizer-955"><span class="linenos"> 955</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-956"><a href="#Tokenizer-956"><span class="linenos"> 956</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-957"><a href="#Tokenizer-957"><span class="linenos"> 957</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-958"><a href="#Tokenizer-958"><span class="linenos"> 958</span></a>
-</span><span id="Tokenizer-959"><a href="#Tokenizer-959"><span class="linenos"> 959</span></a> <span class="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-960"><a href="#Tokenizer-960"><span class="linenos"> 960</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-961"><a href="#Tokenizer-961"><span class="linenos"> 961</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-962"><a href="#Tokenizer-962"><span class="linenos"> 962</span></a> <span class="k">return</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="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-965"><a href="#Tokenizer-965"><span class="linenos"> 965</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-966"><a href="#Tokenizer-966"><span class="linenos"> 966</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-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="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-969"><a href="#Tokenizer-969"><span class="linenos"> 969</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-970"><a href="#Tokenizer-970"><span class="linenos"> 970</span></a> <span class="k">return</span> <span class="kc">False</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="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-973"><a href="#Tokenizer-973"><span class="linenos"> 973</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-974"><a href="#Tokenizer-974"><span class="linenos"> 974</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-975"><a href="#Tokenizer-975"><span class="linenos"> 975</span></a>
-</span><span id="Tokenizer-976"><a href="#Tokenizer-976"><span class="linenos"> 976</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="Tokenizer-977"><a href="#Tokenizer-977"><span class="linenos"> 977</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</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">_advance</span><span class="p">(</span><span class="n">comment_start_size</span><span class="p">)</span>
-</span><span id="Tokenizer-979"><a href="#Tokenizer-979"><span class="linenos"> 979</span></a>
-</span><span id="Tokenizer-980"><a href="#Tokenizer-980"><span class="linenos"> 980</span></a> <span class="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-981"><a href="#Tokenizer-981"><span class="linenos"> 981</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-982"><a href="#Tokenizer-982"><span class="linenos"> 982</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-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="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-985"><a href="#Tokenizer-985"><span class="linenos"> 985</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-986"><a href="#Tokenizer-986"><span class="linenos"> 986</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-987"><a href="#Tokenizer-987"><span class="linenos"> 987</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-988"><a href="#Tokenizer-988"><span class="linenos"> 988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-989"><a href="#Tokenizer-989"><span class="linenos"> 989</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-990"><a href="#Tokenizer-990"><span class="linenos"> 990</span></a>
-</span><span id="Tokenizer-991"><a href="#Tokenizer-991"><span class="linenos"> 991</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
-</span><span id="Tokenizer-992"><a href="#Tokenizer-992"><span class="linenos"> 992</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
-</span><span id="Tokenizer-993"><a href="#Tokenizer-993"><span class="linenos"> 993</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-994"><a href="#Tokenizer-994"><span class="linenos"> 994</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-995"><a href="#Tokenizer-995"><span class="linenos"> 995</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-996"><a href="#Tokenizer-996"><span class="linenos"> 996</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-896"><a href="#Tokenizer-896"><span class="linenos"> 896</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-897"><a href="#Tokenizer-897"><span class="linenos"> 897</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
+</span><span id="Tokenizer-898"><a href="#Tokenizer-898"><span class="linenos"> 898</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer-899"><a href="#Tokenizer-899"><span class="linenos"> 899</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+</span><span id="Tokenizer-900"><a href="#Tokenizer-900"><span class="linenos"> 900</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-901"><a href="#Tokenizer-901"><span class="linenos"> 901</span></a>
+</span><span id="Tokenizer-902"><a href="#Tokenizer-902"><span class="linenos"> 902</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-903"><a href="#Tokenizer-903"><span class="linenos"> 903</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-904"><a href="#Tokenizer-904"><span class="linenos"> 904</span></a>
+</span><span id="Tokenizer-905"><a href="#Tokenizer-905"><span class="linenos"> 905</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
+</span><span id="Tokenizer-906"><a href="#Tokenizer-906"><span class="linenos"> 906</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-907"><a href="#Tokenizer-907"><span class="linenos"> 907</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-908"><a href="#Tokenizer-908"><span class="linenos"> 908</span></a>
+</span><span id="Tokenizer-909"><a href="#Tokenizer-909"><span class="linenos"> 909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Tokenizer-910"><a href="#Tokenizer-910"><span class="linenos"> 910</span></a> <span class="n">Token</span><span class="p">(</span>
+</span><span id="Tokenizer-911"><a href="#Tokenizer-911"><span class="linenos"> 911</span></a> <span class="n">token_type</span><span class="p">,</span>
+</span><span id="Tokenizer-912"><a href="#Tokenizer-912"><span class="linenos"> 912</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
+</span><span id="Tokenizer-913"><a href="#Tokenizer-913"><span class="linenos"> 913</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
+</span><span id="Tokenizer-914"><a href="#Tokenizer-914"><span class="linenos"> 914</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
+</span><span id="Tokenizer-915"><a href="#Tokenizer-915"><span class="linenos"> 915</span></a> <span class="n">start</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="p">,</span>
+</span><span id="Tokenizer-916"><a href="#Tokenizer-916"><span class="linenos"> 916</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="Tokenizer-917"><a href="#Tokenizer-917"><span class="linenos"> 917</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
+</span><span id="Tokenizer-918"><a href="#Tokenizer-918"><span class="linenos"> 918</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-919"><a href="#Tokenizer-919"><span class="linenos"> 919</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-920"><a href="#Tokenizer-920"><span class="linenos"> 920</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-921"><a href="#Tokenizer-921"><span class="linenos"> 921</span></a>
+</span><span id="Tokenizer-922"><a href="#Tokenizer-922"><span class="linenos"> 922</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-923"><a href="#Tokenizer-923"><span class="linenos"> 923</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
+</span><span id="Tokenizer-924"><a href="#Tokenizer-924"><span class="linenos"> 924</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Tokenizer-925"><a href="#Tokenizer-925"><span class="linenos"> 925</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-926"><a href="#Tokenizer-926"><span class="linenos"> 926</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-927"><a href="#Tokenizer-927"><span class="linenos"> 927</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-928"><a href="#Tokenizer-928"><span class="linenos"> 928</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-929"><a href="#Tokenizer-929"><span class="linenos"> 929</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-930"><a href="#Tokenizer-930"><span class="linenos"> 930</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-931"><a href="#Tokenizer-931"><span class="linenos"> 931</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-932"><a href="#Tokenizer-932"><span class="linenos"> 932</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-933"><a href="#Tokenizer-933"><span class="linenos"> 933</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-934"><a href="#Tokenizer-934"><span class="linenos"> 934</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="Tokenizer-935"><a href="#Tokenizer-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="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-936"><a href="#Tokenizer-936"><span class="linenos"> 936</span></a>
+</span><span id="Tokenizer-937"><a href="#Tokenizer-937"><span class="linenos"> 937</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-938"><a href="#Tokenizer-938"><span class="linenos"> 938</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-939"><a href="#Tokenizer-939"><span class="linenos"> 939</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-940"><a href="#Tokenizer-940"><span class="linenos"> 940</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-941"><a href="#Tokenizer-941"><span class="linenos"> 941</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="Tokenizer-942"><a href="#Tokenizer-942"><span class="linenos"> 942</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-943"><a href="#Tokenizer-943"><span class="linenos"> 943</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-944"><a href="#Tokenizer-944"><span class="linenos"> 944</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-945"><a href="#Tokenizer-945"><span class="linenos"> 945</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-946"><a href="#Tokenizer-946"><span class="linenos"> 946</span></a>
+</span><span id="Tokenizer-947"><a href="#Tokenizer-947"><span class="linenos"> 947</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
+</span><span id="Tokenizer-948"><a href="#Tokenizer-948"><span class="linenos"> 948</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+</span><span id="Tokenizer-949"><a href="#Tokenizer-949"><span class="linenos"> 949</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
+</span><span id="Tokenizer-950"><a href="#Tokenizer-950"><span class="linenos"> 950</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-951"><a href="#Tokenizer-951"><span class="linenos"> 951</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-952"><a href="#Tokenizer-952"><span class="linenos"> 952</span></a>
+</span><span id="Tokenizer-953"><a href="#Tokenizer-953"><span class="linenos"> 953</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="Tokenizer-954"><a href="#Tokenizer-954"><span class="linenos"> 954</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-955"><a href="#Tokenizer-955"><span class="linenos"> 955</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="Tokenizer-956"><a href="#Tokenizer-956"><span class="linenos"> 956</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="Tokenizer-957"><a href="#Tokenizer-957"><span class="linenos"> 957</span></a>
+</span><span id="Tokenizer-958"><a href="#Tokenizer-958"><span class="linenos"> 958</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-959"><a href="#Tokenizer-959"><span class="linenos"> 959</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-960"><a href="#Tokenizer-960"><span class="linenos"> 960</span></a>
+</span><span id="Tokenizer-961"><a href="#Tokenizer-961"><span class="linenos"> 961</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-962"><a href="#Tokenizer-962"><span class="linenos"> 962</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-963"><a href="#Tokenizer-963"><span class="linenos"> 963</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-964"><a href="#Tokenizer-964"><span class="linenos"> 964</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-965"><a href="#Tokenizer-965"><span class="linenos"> 965</span></a>
+</span><span id="Tokenizer-966"><a href="#Tokenizer-966"><span class="linenos"> 966</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="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-967"><a href="#Tokenizer-967"><span class="linenos"> 967</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
+</span><span id="Tokenizer-968"><a href="#Tokenizer-968"><span class="linenos"> 968</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Tokenizer-969"><a href="#Tokenizer-969"><span class="linenos"> 969</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
+</span><span id="Tokenizer-970"><a href="#Tokenizer-970"><span class="linenos"> 970</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
+</span><span id="Tokenizer-971"><a href="#Tokenizer-971"><span class="linenos"> 971</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-972"><a href="#Tokenizer-972"><span class="linenos"> 972</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-973"><a href="#Tokenizer-973"><span class="linenos"> 973</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</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="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-976"><a href="#Tokenizer-976"><span class="linenos"> 976</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Tokenizer-977"><a href="#Tokenizer-977"><span class="linenos"> 977</span></a>
+</span><span id="Tokenizer-978"><a href="#Tokenizer-978"><span class="linenos"> 978</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-979"><a href="#Tokenizer-979"><span class="linenos"> 979</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-980"><a href="#Tokenizer-980"><span class="linenos"> 980</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-981"><a href="#Tokenizer-981"><span class="linenos"> 981</span></a> <span class="k">return</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">_scan_var</span><span class="p">()</span>
+</span><span id="Tokenizer-983"><a href="#Tokenizer-983"><span class="linenos"> 983</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-984"><a href="#Tokenizer-984"><span class="linenos"> 984</span></a>
+</span><span id="Tokenizer-985"><a href="#Tokenizer-985"><span class="linenos"> 985</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="Tokenizer-986"><a href="#Tokenizer-986"><span class="linenos"> 986</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-987"><a href="#Tokenizer-987"><span class="linenos"> 987</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-988"><a href="#Tokenizer-988"><span class="linenos"> 988</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-989"><a href="#Tokenizer-989"><span class="linenos"> 989</span></a>
+</span><span id="Tokenizer-990"><a href="#Tokenizer-990"><span class="linenos"> 990</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-991"><a href="#Tokenizer-991"><span class="linenos"> 991</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-992"><a href="#Tokenizer-992"><span class="linenos"> 992</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-993"><a href="#Tokenizer-993"><span class="linenos"> 993</span></a>
+</span><span id="Tokenizer-994"><a href="#Tokenizer-994"><span class="linenos"> 994</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-995"><a href="#Tokenizer-995"><span class="linenos"> 995</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-996"><a href="#Tokenizer-996"><span class="linenos"> 996</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Tokenizer-997"><a href="#Tokenizer-997"><span class="linenos"> 997</span></a>
-</span><span id="Tokenizer-998"><a href="#Tokenizer-998"><span class="linenos"> 998</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Tokenizer-999"><a href="#Tokenizer-999"><span class="linenos"> 999</span></a>
-</span><span id="Tokenizer-1000"><a href="#Tokenizer-1000"><span class="linenos">1000</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-1001"><a href="#Tokenizer-1001"><span class="linenos">1001</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-1002"><a href="#Tokenizer-1002"><span class="linenos">1002</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-1003"><a href="#Tokenizer-1003"><span class="linenos">1003</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-1004"><a href="#Tokenizer-1004"><span class="linenos">1004</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="Tokenizer-1005"><a href="#Tokenizer-1005"><span class="linenos">1005</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-1006"><a href="#Tokenizer-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="Tokenizer-1007"><a href="#Tokenizer-1007"><span class="linenos">1007</span></a>
-</span><span id="Tokenizer-1008"><a href="#Tokenizer-1008"><span class="linenos">1008</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">False</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">0</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="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1012"><a href="#Tokenizer-1012"><span class="linenos">1012</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-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-1014"><a href="#Tokenizer-1014"><span class="linenos">1014</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-1015"><a href="#Tokenizer-1015"><span class="linenos">1015</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-1016"><a href="#Tokenizer-1016"><span class="linenos">1016</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
-</span><span id="Tokenizer-1017"><a href="#Tokenizer-1017"><span class="linenos">1017</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</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">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1019"><a href="#Tokenizer-1019"><span class="linenos">1019</span></a> <span class="k">else</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">TokenType</span><span class="o">.</span><span class="n">VAR</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">_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-1022"><a href="#Tokenizer-1022"><span class="linenos">1022</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1023"><a href="#Tokenizer-1023"><span class="linenos">1023</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1024"><a href="#Tokenizer-1024"><span class="linenos">1024</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-1025"><a href="#Tokenizer-1025"><span class="linenos">1025</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1026"><a href="#Tokenizer-1026"><span class="linenos">1026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1027"><a href="#Tokenizer-1027"><span class="linenos">1027</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-1028"><a href="#Tokenizer-1028"><span class="linenos">1028</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-1029"><a href="#Tokenizer-1029"><span class="linenos">1029</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1030"><a href="#Tokenizer-1030"><span class="linenos">1030</span></a>
-</span><span id="Tokenizer-1031"><a href="#Tokenizer-1031"><span class="linenos">1031</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-1032"><a href="#Tokenizer-1032"><span class="linenos">1032</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-1033"><a href="#Tokenizer-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="Tokenizer-1034"><a href="#Tokenizer-1034"><span class="linenos">1034</span></a>
-</span><span id="Tokenizer-1035"><a href="#Tokenizer-1035"><span class="linenos">1035</span></a> <span class="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 class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="Tokenizer-998"><a href="#Tokenizer-998"><span class="linenos"> 998</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-999"><a href="#Tokenizer-999"><span class="linenos"> 999</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-1000"><a href="#Tokenizer-1000"><span class="linenos">1000</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-1001"><a href="#Tokenizer-1001"><span class="linenos">1001</span></a>
+</span><span id="Tokenizer-1002"><a href="#Tokenizer-1002"><span class="linenos">1002</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1003"><a href="#Tokenizer-1003"><span class="linenos">1003</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</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 class="n">comment_start_size</span><span class="p">)</span>
+</span><span id="Tokenizer-1005"><a href="#Tokenizer-1005"><span class="linenos">1005</span></a>
+</span><span id="Tokenizer-1006"><a href="#Tokenizer-1006"><span class="linenos">1006</span></a> <span class="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-1007"><a href="#Tokenizer-1007"><span class="linenos">1007</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-1008"><a href="#Tokenizer-1008"><span class="linenos">1008</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1009"><a href="#Tokenizer-1009"><span class="linenos">1009</span></a>
+</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">_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-1011"><a href="#Tokenizer-1011"><span class="linenos">1011</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-1012"><a href="#Tokenizer-1012"><span class="linenos">1012</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1013"><a href="#Tokenizer-1013"><span class="linenos">1013</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-1014"><a href="#Tokenizer-1014"><span class="linenos">1014</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1015"><a href="#Tokenizer-1015"><span class="linenos">1015</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-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="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
+</span><span id="Tokenizer-1018"><a href="#Tokenizer-1018"><span class="linenos">1018</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
+</span><span id="Tokenizer-1019"><a href="#Tokenizer-1019"><span class="linenos">1019</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-1020"><a href="#Tokenizer-1020"><span class="linenos">1020</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-1021"><a href="#Tokenizer-1021"><span class="linenos">1021</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-1022"><a href="#Tokenizer-1022"><span class="linenos">1022</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-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="k">return</span> <span class="kc">True</span>
+</span><span id="Tokenizer-1025"><a href="#Tokenizer-1025"><span class="linenos">1025</span></a>
+</span><span id="Tokenizer-1026"><a href="#Tokenizer-1026"><span class="linenos">1026</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-1027"><a href="#Tokenizer-1027"><span class="linenos">1027</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-1028"><a href="#Tokenizer-1028"><span class="linenos">1028</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-1029"><a href="#Tokenizer-1029"><span class="linenos">1029</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-1030"><a href="#Tokenizer-1030"><span class="linenos">1030</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="Tokenizer-1031"><a href="#Tokenizer-1031"><span class="linenos">1031</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-1032"><a href="#Tokenizer-1032"><span class="linenos">1032</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="Tokenizer-1033"><a href="#Tokenizer-1033"><span class="linenos">1033</span></a>
+</span><span id="Tokenizer-1034"><a href="#Tokenizer-1034"><span class="linenos">1034</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1035"><a href="#Tokenizer-1035"><span class="linenos">1035</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</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">if</span> <span class="n">token_type</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">_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-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">DCOLON</span><span class="p">,</span> <span class="s2">&quot;::&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1040"><a href="#Tokenizer-1040"><span class="linenos">1040</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1041"><a href="#Tokenizer-1041"><span class="linenos">1041</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span>
-</span><span id="Tokenizer-1042"><a href="#Tokenizer-1042"><span class="linenos">1042</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-1043"><a href="#Tokenizer-1043"><span class="linenos">1043</span></a>
-</span><span id="Tokenizer-1044"><a href="#Tokenizer-1044"><span class="linenos">1044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1045"><a href="#Tokenizer-1045"><span class="linenos">1045</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-1046"><a href="#Tokenizer-1046"><span class="linenos">1046</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1047"><a href="#Tokenizer-1047"><span class="linenos">1047</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-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">_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-1050"><a href="#Tokenizer-1050"><span class="linenos">1050</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1051"><a href="#Tokenizer-1051"><span class="linenos">1051</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-1052"><a href="#Tokenizer-1052"><span class="linenos">1052</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1053"><a href="#Tokenizer-1053"><span class="linenos">1053</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
-</span><span id="Tokenizer-1054"><a href="#Tokenizer-1054"><span class="linenos">1054</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="Tokenizer-1055"><a href="#Tokenizer-1055"><span class="linenos">1055</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
-</span><span id="Tokenizer-1056"><a href="#Tokenizer-1056"><span class="linenos">1056</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Tokenizer-1057"><a href="#Tokenizer-1057"><span class="linenos">1057</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-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_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-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><span id="Tokenizer-1061"><a href="#Tokenizer-1061"><span class="linenos">1061</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-1062"><a href="#Tokenizer-1062"><span class="linenos">1062</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1063"><a href="#Tokenizer-1063"><span class="linenos">1063</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
-</span><span id="Tokenizer-1064"><a href="#Tokenizer-1064"><span class="linenos">1064</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
-</span><span id="Tokenizer-1065"><a href="#Tokenizer-1065"><span class="linenos">1065</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
-</span><span id="Tokenizer-1066"><a href="#Tokenizer-1066"><span class="linenos">1066</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</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">IDENTIFIER</span><span class="p">)</span>
-</span><span id="Tokenizer-1068"><a href="#Tokenizer-1068"><span class="linenos">1068</span></a>
-</span><span id="Tokenizer-1069"><a href="#Tokenizer-1069"><span class="linenos">1069</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-1070"><a href="#Tokenizer-1070"><span class="linenos">1070</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1071"><a href="#Tokenizer-1071"><span class="linenos">1071</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-1072"><a href="#Tokenizer-1072"><span class="linenos">1072</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-1073"><a href="#Tokenizer-1073"><span class="linenos">1073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1074"><a href="#Tokenizer-1074"><span class="linenos">1074</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1075"><a href="#Tokenizer-1075"><span class="linenos">1075</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1076"><a href="#Tokenizer-1076"><span class="linenos">1076</span></a>
-</span><span id="Tokenizer-1077"><a href="#Tokenizer-1077"><span class="linenos">1077</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-1078"><a href="#Tokenizer-1078"><span class="linenos">1078</span></a>
-</span><span id="Tokenizer-1079"><a href="#Tokenizer-1079"><span class="linenos">1079</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Tokenizer-1080"><a href="#Tokenizer-1080"><span class="linenos">1080</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-1081"><a href="#Tokenizer-1081"><span class="linenos">1081</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="Tokenizer-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="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
-</span><span id="Tokenizer-1084"><a href="#Tokenizer-1084"><span class="linenos">1084</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="Tokenizer-1085"><a href="#Tokenizer-1085"><span class="linenos">1085</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
-</span><span id="Tokenizer-1086"><a href="#Tokenizer-1086"><span class="linenos">1086</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="Tokenizer-1087"><a href="#Tokenizer-1087"><span class="linenos">1087</span></a>
-</span><span id="Tokenizer-1088"><a href="#Tokenizer-1088"><span class="linenos">1088</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
-</span><span id="Tokenizer-1089"><a href="#Tokenizer-1089"><span class="linenos">1089</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
-</span><span id="Tokenizer-1090"><a href="#Tokenizer-1090"><span class="linenos">1090</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
-</span><span id="Tokenizer-1091"><a href="#Tokenizer-1091"><span class="linenos">1091</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="Tokenizer-1092"><a href="#Tokenizer-1092"><span class="linenos">1092</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1093"><a href="#Tokenizer-1093"><span class="linenos">1093</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1037"><a href="#Tokenizer-1037"><span class="linenos">1037</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1038"><a href="#Tokenizer-1038"><span class="linenos">1038</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isdigit</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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1040"><a href="#Tokenizer-1040"><span class="linenos">1040</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-1041"><a href="#Tokenizer-1041"><span class="linenos">1041</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-1042"><a href="#Tokenizer-1042"><span class="linenos">1042</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
+</span><span id="Tokenizer-1043"><a href="#Tokenizer-1043"><span class="linenos">1043</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Tokenizer-1044"><a href="#Tokenizer-1044"><span class="linenos">1044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1045"><a href="#Tokenizer-1045"><span class="linenos">1045</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1046"><a href="#Tokenizer-1046"><span class="linenos">1046</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-1047"><a href="#Tokenizer-1047"><span class="linenos">1047</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-1048"><a href="#Tokenizer-1048"><span class="linenos">1048</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</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">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-1051"><a href="#Tokenizer-1051"><span class="linenos">1051</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1052"><a href="#Tokenizer-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="Tokenizer-1053"><a href="#Tokenizer-1053"><span class="linenos">1053</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-1054"><a href="#Tokenizer-1054"><span class="linenos">1054</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-1055"><a href="#Tokenizer-1055"><span class="linenos">1055</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">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-1058"><a href="#Tokenizer-1058"><span class="linenos">1058</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-1059"><a href="#Tokenizer-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><span id="Tokenizer-1060"><a href="#Tokenizer-1060"><span class="linenos">1060</span></a>
+</span><span id="Tokenizer-1061"><a href="#Tokenizer-1061"><span class="linenos">1061</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 class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="Tokenizer-1062"><a href="#Tokenizer-1062"><span class="linenos">1062</span></a>
+</span><span id="Tokenizer-1063"><a href="#Tokenizer-1063"><span class="linenos">1063</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="Tokenizer-1064"><a href="#Tokenizer-1064"><span class="linenos">1064</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1065"><a href="#Tokenizer-1065"><span class="linenos">1065</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-1066"><a href="#Tokenizer-1066"><span class="linenos">1066</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-1067"><a href="#Tokenizer-1067"><span class="linenos">1067</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</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="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-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="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-1071"><a href="#Tokenizer-1071"><span class="linenos">1071</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-1072"><a href="#Tokenizer-1072"><span class="linenos">1072</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1073"><a href="#Tokenizer-1073"><span class="linenos">1073</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-1074"><a href="#Tokenizer-1074"><span class="linenos">1074</span></a>
+</span><span id="Tokenizer-1075"><a href="#Tokenizer-1075"><span class="linenos">1075</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-1076"><a href="#Tokenizer-1076"><span class="linenos">1076</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1077"><a href="#Tokenizer-1077"><span class="linenos">1077</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-1078"><a href="#Tokenizer-1078"><span class="linenos">1078</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1079"><a href="#Tokenizer-1079"><span class="linenos">1079</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
+</span><span id="Tokenizer-1080"><a href="#Tokenizer-1080"><span class="linenos">1080</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="Tokenizer-1081"><a href="#Tokenizer-1081"><span class="linenos">1081</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
+</span><span id="Tokenizer-1082"><a href="#Tokenizer-1082"><span class="linenos">1082</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</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">_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-1084"><a href="#Tokenizer-1084"><span class="linenos">1084</span></a>
+</span><span id="Tokenizer-1085"><a href="#Tokenizer-1085"><span class="linenos">1085</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-1086"><a href="#Tokenizer-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><span id="Tokenizer-1087"><a href="#Tokenizer-1087"><span class="linenos">1087</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-1088"><a href="#Tokenizer-1088"><span class="linenos">1088</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1089"><a href="#Tokenizer-1089"><span class="linenos">1089</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
+</span><span id="Tokenizer-1090"><a href="#Tokenizer-1090"><span class="linenos">1090</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
+</span><span id="Tokenizer-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">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
+</span><span id="Tokenizer-1092"><a href="#Tokenizer-1092"><span class="linenos">1092</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="Tokenizer-1093"><a href="#Tokenizer-1093"><span class="linenos">1093</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-1094"><a href="#Tokenizer-1094"><span class="linenos">1094</span></a>
-</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">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
-</span><span id="Tokenizer-1096"><a href="#Tokenizer-1096"><span class="linenos">1096</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
-</span><span id="Tokenizer-1097"><a href="#Tokenizer-1097"><span class="linenos">1097</span></a>
-</span><span id="Tokenizer-1098"><a href="#Tokenizer-1098"><span class="linenos">1098</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
-</span><span id="Tokenizer-1099"><a href="#Tokenizer-1099"><span class="linenos">1099</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1100"><a href="#Tokenizer-1100"><span class="linenos">1100</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
-</span><span id="Tokenizer-1101"><a href="#Tokenizer-1101"><span class="linenos">1101</span></a> <span class="k">except</span><span class="p">:</span>
-</span><span id="Tokenizer-1102"><a href="#Tokenizer-1102"><span class="linenos">1102</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
-</span><span id="Tokenizer-1103"><a href="#Tokenizer-1103"><span class="linenos">1103</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-1104"><a href="#Tokenizer-1104"><span class="linenos">1104</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1105"><a href="#Tokenizer-1105"><span class="linenos">1105</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1106"><a href="#Tokenizer-1106"><span class="linenos">1106</span></a> <span class="n">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-1107"><a href="#Tokenizer-1107"><span class="linenos">1107</span></a>
-</span><span id="Tokenizer-1108"><a href="#Tokenizer-1108"><span class="linenos">1108</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-1109"><a href="#Tokenizer-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Tokenizer-1110"><a href="#Tokenizer-1110"><span class="linenos">1110</span></a>
-</span><span id="Tokenizer-1111"><a href="#Tokenizer-1111"><span class="linenos">1111</span></a> <span class="k">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-1112"><a href="#Tokenizer-1112"><span class="linenos">1112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1113"><a href="#Tokenizer-1113"><span class="linenos">1113</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
-</span><span id="Tokenizer-1114"><a href="#Tokenizer-1114"><span class="linenos">1114</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-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="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-1117"><a href="#Tokenizer-1117"><span class="linenos">1117</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1118"><a href="#Tokenizer-1118"><span class="linenos">1118</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-1119"><a href="#Tokenizer-1119"><span class="linenos">1119</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-1120"><a href="#Tokenizer-1120"><span class="linenos">1120</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1121"><a href="#Tokenizer-1121"><span class="linenos">1121</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1122"><a href="#Tokenizer-1122"><span class="linenos">1122</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1095"><a href="#Tokenizer-1095"><span class="linenos">1095</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-1096"><a href="#Tokenizer-1096"><span class="linenos">1096</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1097"><a href="#Tokenizer-1097"><span class="linenos">1097</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-1098"><a href="#Tokenizer-1098"><span class="linenos">1098</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-1099"><a href="#Tokenizer-1099"><span class="linenos">1099</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1100"><a href="#Tokenizer-1100"><span class="linenos">1100</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1101"><a href="#Tokenizer-1101"><span class="linenos">1101</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="Tokenizer-1104"><a href="#Tokenizer-1104"><span class="linenos">1104</span></a>
+</span><span id="Tokenizer-1105"><a href="#Tokenizer-1105"><span class="linenos">1105</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Tokenizer-1106"><a href="#Tokenizer-1106"><span class="linenos">1106</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-1107"><a href="#Tokenizer-1107"><span class="linenos">1107</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="Tokenizer-1108"><a href="#Tokenizer-1108"><span class="linenos">1108</span></a>
+</span><span id="Tokenizer-1109"><a href="#Tokenizer-1109"><span class="linenos">1109</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
+</span><span id="Tokenizer-1110"><a href="#Tokenizer-1110"><span class="linenos">1110</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="Tokenizer-1111"><a href="#Tokenizer-1111"><span class="linenos">1111</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
+</span><span id="Tokenizer-1112"><a href="#Tokenizer-1112"><span class="linenos">1112</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="Tokenizer-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">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
+</span><span id="Tokenizer-1115"><a href="#Tokenizer-1115"><span class="linenos">1115</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
+</span><span id="Tokenizer-1116"><a href="#Tokenizer-1116"><span class="linenos">1116</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
+</span><span id="Tokenizer-1117"><a href="#Tokenizer-1117"><span class="linenos">1117</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="Tokenizer-1118"><a href="#Tokenizer-1118"><span class="linenos">1118</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1119"><a href="#Tokenizer-1119"><span class="linenos">1119</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1120"><a href="#Tokenizer-1120"><span class="linenos">1120</span></a>
+</span><span id="Tokenizer-1121"><a href="#Tokenizer-1121"><span class="linenos">1121</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
+</span><span id="Tokenizer-1122"><a href="#Tokenizer-1122"><span class="linenos">1122</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
</span><span id="Tokenizer-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="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
-</span><span id="Tokenizer-1125"><a href="#Tokenizer-1125"><span class="linenos">1125</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
-</span><span id="Tokenizer-1126"><a href="#Tokenizer-1126"><span class="linenos">1126</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
-</span><span id="Tokenizer-1127"><a href="#Tokenizer-1127"><span class="linenos">1127</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-1128"><a href="#Tokenizer-1128"><span class="linenos">1128</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1129"><a href="#Tokenizer-1129"><span class="linenos">1129</span></a>
-</span><span id="Tokenizer-1130"><a href="#Tokenizer-1130"><span class="linenos">1130</span></a> <span class="k">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-1131"><a href="#Tokenizer-1131"><span class="linenos">1131</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1132"><a href="#Tokenizer-1132"><span class="linenos">1132</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-1133"><a href="#Tokenizer-1133"><span class="linenos">1133</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
-</span><span id="Tokenizer-1134"><a href="#Tokenizer-1134"><span class="linenos">1134</span></a>
-</span><span id="Tokenizer-1135"><a href="#Tokenizer-1135"><span class="linenos">1135</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1136"><a href="#Tokenizer-1136"><span class="linenos">1136</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="n">escapes</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">):</span>
-</span><span id="Tokenizer-1137"><a href="#Tokenizer-1137"><span class="linenos">1137</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-1138"><a href="#Tokenizer-1138"><span class="linenos">1138</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-1139"><a href="#Tokenizer-1139"><span class="linenos">1139</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1140"><a href="#Tokenizer-1140"><span class="linenos">1140</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-1124"><a href="#Tokenizer-1124"><span class="linenos">1124</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
+</span><span id="Tokenizer-1125"><a href="#Tokenizer-1125"><span class="linenos">1125</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1126"><a href="#Tokenizer-1126"><span class="linenos">1126</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
+</span><span id="Tokenizer-1127"><a href="#Tokenizer-1127"><span class="linenos">1127</span></a> <span class="k">except</span><span class="p">:</span>
+</span><span id="Tokenizer-1128"><a href="#Tokenizer-1128"><span class="linenos">1128</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
+</span><span id="Tokenizer-1129"><a href="#Tokenizer-1129"><span class="linenos">1129</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-1130"><a href="#Tokenizer-1130"><span class="linenos">1130</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-1131"><a href="#Tokenizer-1131"><span class="linenos">1131</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1132"><a href="#Tokenizer-1132"><span class="linenos">1132</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-1133"><a href="#Tokenizer-1133"><span class="linenos">1133</span></a>
+</span><span id="Tokenizer-1134"><a href="#Tokenizer-1134"><span class="linenos">1134</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-1135"><a href="#Tokenizer-1135"><span class="linenos">1135</span></a> <span class="k">return</span> <span class="kc">True</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">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-1138"><a href="#Tokenizer-1138"><span class="linenos">1138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1139"><a href="#Tokenizer-1139"><span class="linenos">1139</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
+</span><span id="Tokenizer-1140"><a href="#Tokenizer-1140"><span class="linenos">1140</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-1141"><a href="#Tokenizer-1141"><span class="linenos">1141</span></a>
-</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">_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-1143"><a href="#Tokenizer-1143"><span class="linenos">1143</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-1144"><a href="#Tokenizer-1144"><span class="linenos">1144</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1145"><a href="#Tokenizer-1145"><span class="linenos">1145</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1146"><a href="#Tokenizer-1146"><span class="linenos">1146</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1147"><a href="#Tokenizer-1147"><span class="linenos">1147</span></a> <span class="k">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-1148"><a href="#Tokenizer-1148"><span class="linenos">1148</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-1149"><a href="#Tokenizer-1149"><span class="linenos">1149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-1150"><a href="#Tokenizer-1150"><span class="linenos">1150</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1151"><a href="#Tokenizer-1151"><span class="linenos">1151</span></a>
-</span><span id="Tokenizer-1152"><a href="#Tokenizer-1152"><span class="linenos">1152</span></a> <span class="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-1153"><a href="#Tokenizer-1153"><span class="linenos">1153</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1154"><a href="#Tokenizer-1154"><span class="linenos">1154</span></a>
-</span><span id="Tokenizer-1155"><a href="#Tokenizer-1155"><span class="linenos">1155</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1156"><a href="#Tokenizer-1156"><span class="linenos">1156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1157"><a href="#Tokenizer-1157"><span class="linenos">1157</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Tokenizer-1158"><a href="#Tokenizer-1158"><span class="linenos">1158</span></a>
-</span><span id="Tokenizer-1159"><a href="#Tokenizer-1159"><span class="linenos">1159</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Tokenizer-1142"><a href="#Tokenizer-1142"><span class="linenos">1142</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-1143"><a href="#Tokenizer-1143"><span class="linenos">1143</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1144"><a href="#Tokenizer-1144"><span class="linenos">1144</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-1145"><a href="#Tokenizer-1145"><span class="linenos">1145</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-1146"><a href="#Tokenizer-1146"><span class="linenos">1146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="k">break</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="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
+</span><span id="Tokenizer-1151"><a href="#Tokenizer-1151"><span class="linenos">1151</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="Tokenizer-1152"><a href="#Tokenizer-1152"><span class="linenos">1152</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="Tokenizer-1153"><a href="#Tokenizer-1153"><span class="linenos">1153</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-1154"><a href="#Tokenizer-1154"><span class="linenos">1154</span></a> <span class="p">)</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">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-1157"><a href="#Tokenizer-1157"><span class="linenos">1157</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1158"><a href="#Tokenizer-1158"><span class="linenos">1158</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-1159"><a href="#Tokenizer-1159"><span class="linenos">1159</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
+</span><span id="Tokenizer-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">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1162"><a href="#Tokenizer-1162"><span class="linenos">1162</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="n">escapes</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">):</span>
+</span><span id="Tokenizer-1163"><a href="#Tokenizer-1163"><span class="linenos">1163</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-1164"><a href="#Tokenizer-1164"><span class="linenos">1164</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-1165"><a href="#Tokenizer-1165"><span class="linenos">1165</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1166"><a href="#Tokenizer-1166"><span class="linenos">1166</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-1167"><a href="#Tokenizer-1167"><span class="linenos">1167</span></a>
+</span><span id="Tokenizer-1168"><a href="#Tokenizer-1168"><span class="linenos">1168</span></a> <span class="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-1169"><a href="#Tokenizer-1169"><span class="linenos">1169</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-1170"><a href="#Tokenizer-1170"><span class="linenos">1170</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1171"><a href="#Tokenizer-1171"><span class="linenos">1171</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1172"><a href="#Tokenizer-1172"><span class="linenos">1172</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1173"><a href="#Tokenizer-1173"><span class="linenos">1173</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-1174"><a href="#Tokenizer-1174"><span class="linenos">1174</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-1175"><a href="#Tokenizer-1175"><span class="linenos">1175</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-1176"><a href="#Tokenizer-1176"><span class="linenos">1176</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1177"><a href="#Tokenizer-1177"><span class="linenos">1177</span></a>
+</span><span id="Tokenizer-1178"><a href="#Tokenizer-1178"><span class="linenos">1178</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-1179"><a href="#Tokenizer-1179"><span class="linenos">1179</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1180"><a href="#Tokenizer-1180"><span class="linenos">1180</span></a>
+</span><span id="Tokenizer-1181"><a href="#Tokenizer-1181"><span class="linenos">1181</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1182"><a href="#Tokenizer-1182"><span class="linenos">1182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1183"><a href="#Tokenizer-1183"><span class="linenos">1183</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Tokenizer-1184"><a href="#Tokenizer-1184"><span class="linenos">1184</span></a>
+</span><span id="Tokenizer-1185"><a href="#Tokenizer-1185"><span class="linenos">1185</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -7317,7 +7579,7 @@
<div class="attr variable">
<span class="name">KEYWORDS</span><span class="annotation">: Dict[str, <a href="#TokenType">sqlglot.tokens.TokenType</a>]</span> =
<input id="Tokenizer.KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;<a href="#TokenType.HINT">TokenType.HINT</a>: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;<a href="#TokenType.EQ">TokenType.EQ</a>: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;<a href="#TokenType.DCOLON">TokenType.DCOLON</a>: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;<a href="#TokenType.DPIPE">TokenType.DPIPE</a>: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;<a href="#TokenType.GTE">TokenType.GTE</a>: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;<a href="#TokenType.LTE">TokenType.LTE</a>: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;<a href="#TokenType.NEQ">TokenType.NEQ</a>: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;<a href="#TokenType.NEQ">TokenType.NEQ</a>: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;<a href="#TokenType.NULLSAFE_EQ">TokenType.NULLSAFE_EQ</a>: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;<a href="#TokenType.ARROW">TokenType.ARROW</a>: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;<a href="#TokenType.DARROW">TokenType.DARROW</a>: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;<a href="#TokenType.FARROW">TokenType.FARROW</a>: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;<a href="#TokenType.HASH_ARROW">TokenType.HASH_ARROW</a>: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;<a href="#TokenType.DHASH_ARROW">TokenType.DHASH_ARROW</a>: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;<a href="#TokenType.LR_ARROW">TokenType.LR_ARROW</a>: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;<a href="#TokenType.DAMP">TokenType.DAMP</a>: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;<a href="#TokenType.DQMARK">TokenType.DQMARK</a>: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;<a href="#TokenType.ALL">TokenType.ALL</a>: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;<a href="#TokenType.ALWAYS">TokenType.ALWAYS</a>: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;<a href="#TokenType.AND">TokenType.AND</a>: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;<a href="#TokenType.ANTI">TokenType.ANTI</a>: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;<a href="#TokenType.ANY">TokenType.ANY</a>: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;<a href="#TokenType.ASC">TokenType.ASC</a>: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;<a href="#TokenType.ALIAS">TokenType.ALIAS</a>: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;<a href="#TokenType.ASOF">TokenType.ASOF</a>: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;<a href="#TokenType.AUTO_INCREMENT">TokenType.AUTO_INCREMENT</a>: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;<a href="#TokenType.AUTO_INCREMENT">TokenType.AUTO_INCREMENT</a>: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;<a href="#TokenType.BEGIN">TokenType.BEGIN</a>: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;<a href="#TokenType.BETWEEN">TokenType.BETWEEN</a>: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;<a href="#TokenType.CACHE">TokenType.CACHE</a>: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;<a href="#TokenType.UNCACHE">TokenType.UNCACHE</a>: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;<a href="#TokenType.CASE">TokenType.CASE</a>: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;<a href="#TokenType.CHARACTER_SET">TokenType.CHARACTER_SET</a>: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;<a href="#TokenType.CLUSTER_BY">TokenType.CLUSTER_BY</a>: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;<a href="#TokenType.COLLATE">TokenType.COLLATE</a>: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;<a href="#TokenType.COLUMN">TokenType.COLUMN</a>: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;<a href="#TokenType.COMMIT">TokenType.COMMIT</a>: &#39;COMMIT&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;<a href="#TokenType.CONSTRAINT">TokenType.CONSTRAINT</a>: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;<a href="#TokenType.CREATE">TokenType.CREATE</a>: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;<a href="#TokenType.CROSS">TokenType.CROSS</a>: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;<a href="#TokenType.CUBE">TokenType.CUBE</a>: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;<a href="#TokenType.CURRENT_DATE">TokenType.CURRENT_DATE</a>: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;<a href="#TokenType.CURRENT_TIME">TokenType.CURRENT_TIME</a>: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;<a href="#TokenType.CURRENT_TIMESTAMP">TokenType.CURRENT_TIMESTAMP</a>: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;<a href="#TokenType.CURRENT_USER">TokenType.CURRENT_USER</a>: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;<a href="#TokenType.DATABASE">TokenType.DATABASE</a>: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;<a href="#TokenType.DEFAULT">TokenType.DEFAULT</a>: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;<a href="#TokenType.DELETE">TokenType.DELETE</a>: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;<a href="#TokenType.DESC">TokenType.DESC</a>: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;<a href="#TokenType.DESCRIBE">TokenType.DESCRIBE</a>: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;<a href="#TokenType.DISTINCT">TokenType.DISTINCT</a>: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;<a href="#TokenType.DISTRIBUTE_BY">TokenType.DISTRIBUTE_BY</a>: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;<a href="#TokenType.DIV">TokenType.DIV</a>: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;<a href="#TokenType.DROP">TokenType.DROP</a>: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;<a href="#TokenType.ELSE">TokenType.ELSE</a>: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;<a href="#TokenType.END">TokenType.END</a>: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;<a href="#TokenType.ESCAPE">TokenType.ESCAPE</a>: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;<a href="#TokenType.EXCEPT">TokenType.EXCEPT</a>: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;<a href="#TokenType.EXISTS">TokenType.EXISTS</a>: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;<a href="#TokenType.FALSE">TokenType.FALSE</a>: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;<a href="#TokenType.FETCH">TokenType.FETCH</a>: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;<a href="#TokenType.FILTER">TokenType.FILTER</a>: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;<a href="#TokenType.FIRST">TokenType.FIRST</a>: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;<a href="#TokenType.FULL">TokenType.FULL</a>: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;<a href="#TokenType.FUNCTION">TokenType.FUNCTION</a>: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;<a href="#TokenType.FOR">TokenType.FOR</a>: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;<a href="#TokenType.FOREIGN_KEY">TokenType.FOREIGN_KEY</a>: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;<a href="#TokenType.FORMAT">TokenType.FORMAT</a>: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;<a href="#TokenType.FROM">TokenType.FROM</a>: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;<a href="#TokenType.GEOGRAPHY">TokenType.GEOGRAPHY</a>: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;<a href="#TokenType.GEOMETRY">TokenType.GEOMETRY</a>: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;<a href="#TokenType.GLOB">TokenType.GLOB</a>: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;<a href="#TokenType.GROUP_BY">TokenType.GROUP_BY</a>: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;<a href="#TokenType.GROUPING_SETS">TokenType.GROUPING_SETS</a>: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;<a href="#TokenType.HAVING">TokenType.HAVING</a>: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;<a href="#TokenType.ILIKE">TokenType.ILIKE</a>: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;<a href="#TokenType.IN">TokenType.IN</a>: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;<a href="#TokenType.INDEX">TokenType.INDEX</a>: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;<a href="#TokenType.INET">TokenType.INET</a>: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;<a href="#TokenType.INNER">TokenType.INNER</a>: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;<a href="#TokenType.INSERT">TokenType.INSERT</a>: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;<a href="#TokenType.INTERVAL">TokenType.INTERVAL</a>: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;<a href="#TokenType.INTERSECT">TokenType.INTERSECT</a>: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;<a href="#TokenType.INTO">TokenType.INTO</a>: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;<a href="#TokenType.IS">TokenType.IS</a>: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;<a href="#TokenType.ISNULL">TokenType.ISNULL</a>: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;<a href="#TokenType.JOIN">TokenType.JOIN</a>: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;<a href="#TokenType.KEEP">TokenType.KEEP</a>: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;<a href="#TokenType.LATERAL">TokenType.LATERAL</a>: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;<a href="#TokenType.LEFT">TokenType.LEFT</a>: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;<a href="#TokenType.LIKE">TokenType.LIKE</a>: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;<a href="#TokenType.LIMIT">TokenType.LIMIT</a>: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;<a href="#TokenType.LOAD">TokenType.LOAD</a>: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;<a href="#TokenType.LOCK">TokenType.LOCK</a>: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;<a href="#TokenType.MERGE">TokenType.MERGE</a>: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;<a href="#TokenType.NATURAL">TokenType.NATURAL</a>: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;<a href="#TokenType.NEXT">TokenType.NEXT</a>: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;<a href="#TokenType.NOT">TokenType.NOT</a>: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;<a href="#TokenType.NOTNULL">TokenType.NOTNULL</a>: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;<a href="#TokenType.NULL">TokenType.NULL</a>: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;<a href="#TokenType.OBJECT">TokenType.OBJECT</a>: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;<a href="#TokenType.OFFSET">TokenType.OFFSET</a>: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;<a href="#TokenType.ON">TokenType.ON</a>: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;<a href="#TokenType.OR">TokenType.OR</a>: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;<a href="#TokenType.XOR">TokenType.XOR</a>: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;<a href="#TokenType.ORDER_BY">TokenType.ORDER_BY</a>: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;<a href="#TokenType.ORDINALITY">TokenType.ORDINALITY</a>: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;<a href="#TokenType.OUTER">TokenType.OUTER</a>: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;<a href="#TokenType.OVER">TokenType.OVER</a>: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;<a href="#TokenType.OVERLAPS">TokenType.OVERLAPS</a>: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;<a href="#TokenType.OVERWRITE">TokenType.OVERWRITE</a>: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;<a href="#TokenType.PARTITION">TokenType.PARTITION</a>: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;<a href="#TokenType.PARTITION_BY">TokenType.PARTITION_BY</a>: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;<a href="#TokenType.PARTITION_BY">TokenType.PARTITION_BY</a>: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;<a href="#TokenType.PARTITION_BY">TokenType.PARTITION_BY</a>: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;<a href="#TokenType.PERCENT">TokenType.PERCENT</a>: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;<a href="#TokenType.PIVOT">TokenType.PIVOT</a>: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;<a href="#TokenType.PRAGMA">TokenType.PRAGMA</a>: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;<a href="#TokenType.PRIMARY_KEY">TokenType.PRIMARY_KEY</a>: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;<a href="#TokenType.PROCEDURE">TokenType.PROCEDURE</a>: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;<a href="#TokenType.QUALIFY">TokenType.QUALIFY</a>: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;<a href="#TokenType.RANGE">TokenType.RANGE</a>: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;<a href="#TokenType.RECURSIVE">TokenType.RECURSIVE</a>: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;<a href="#TokenType.RLIKE">TokenType.RLIKE</a>: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;<a href="#TokenType.REPLACE">TokenType.REPLACE</a>: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;<a href="#TokenType.RETURNING">TokenType.RETURNING</a>: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;<a href="#TokenType.REFERENCES">TokenType.REFERENCES</a>: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;<a href="#TokenType.RIGHT">TokenType.RIGHT</a>: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;<a href="#TokenType.RLIKE">TokenType.RLIKE</a>: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;<a href="#TokenType.ROLLBACK">TokenType.ROLLBACK</a>: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;<a href="#TokenType.ROLLUP">TokenType.ROLLUP</a>: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;<a href="#TokenType.ROW">TokenType.ROW</a>: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;<a href="#TokenType.ROWS">TokenType.ROWS</a>: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;<a href="#TokenType.SCHEMA">TokenType.SCHEMA</a>: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;<a href="#TokenType.SELECT">TokenType.SELECT</a>: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;<a href="#TokenType.SEMI">TokenType.SEMI</a>: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;<a href="#TokenType.SET">TokenType.SET</a>: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;<a href="#TokenType.SETTINGS">TokenType.SETTINGS</a>: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;<a href="#TokenType.SHOW">TokenType.SHOW</a>: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;<a href="#TokenType.SIMILAR_TO">TokenType.SIMILAR_TO</a>: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;<a href="#TokenType.SOME">TokenType.SOME</a>: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;<a href="#TokenType.SORT_BY">TokenType.SORT_BY</a>: &#39;SORT_BY&#39;&gt;, &#39;TABLE&#39;: &lt;<a href="#TokenType.TABLE">TokenType.TABLE</a>: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;<a href="#TokenType.TABLE_SAMPLE">TokenType.TABLE_SAMPLE</a>: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;<a href="#TokenType.TEMPORARY">TokenType.TEMPORARY</a>: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;<a href="#TokenType.TEMPORARY">TokenType.TEMPORARY</a>: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;<a href="#TokenType.THEN">TokenType.THEN</a>: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;<a href="#TokenType.TRUE">TokenType.TRUE</a>: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;<a href="#TokenType.UNION">TokenType.UNION</a>: &#39;UNION&#39;&gt;, &#39;UNNEST&#39;: &lt;<a href="#TokenType.UNNEST">TokenType.UNNEST</a>: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;<a href="#TokenType.UNPIVOT">TokenType.UNPIVOT</a>: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;<a href="#TokenType.USE">TokenType.USE</a>: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;<a href="#TokenType.USING">TokenType.USING</a>: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;<a href="#TokenType.UUID">TokenType.UUID</a>: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;<a href="#TokenType.VALUES">TokenType.VALUES</a>: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;<a href="#TokenType.VIEW">TokenType.VIEW</a>: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;<a href="#TokenType.VOLATILE">TokenType.VOLATILE</a>: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;<a href="#TokenType.WHEN">TokenType.WHEN</a>: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;<a href="#TokenType.WHERE">TokenType.WHERE</a>: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;<a href="#TokenType.WINDOW">TokenType.WINDOW</a>: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;<a href="#TokenType.WITH">TokenType.WITH</a>: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;<a href="#TokenType.APPLY">TokenType.APPLY</a>: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;<a href="#TokenType.ARRAY">TokenType.ARRAY</a>: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;<a href="#TokenType.BIT">TokenType.BIT</a>: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;<a href="#TokenType.BOOLEAN">TokenType.BOOLEAN</a>: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;<a href="#TokenType.BOOLEAN">TokenType.BOOLEAN</a>: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;<a href="#TokenType.TINYINT">TokenType.TINYINT</a>: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;<a href="#TokenType.TINYINT">TokenType.TINYINT</a>: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;<a href="#TokenType.SMALLINT">TokenType.SMALLINT</a>: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;<a href="#TokenType.SMALLINT">TokenType.SMALLINT</a>: &#39;SMALLINT&#39;&gt;, &#39;INT2&#39;: &lt;<a href="#TokenType.SMALLINT">TokenType.SMALLINT</a>: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;<a href="#TokenType.INT">TokenType.INT</a>: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;<a href="#TokenType.INT">TokenType.INT</a>: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;<a href="#TokenType.INT">TokenType.INT</a>: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;<a href="#TokenType.BIGINT">TokenType.BIGINT</a>: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;<a href="#TokenType.BIGINT">TokenType.BIGINT</a>: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;<a href="#TokenType.BIGINT">TokenType.BIGINT</a>: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;<a href="#TokenType.BIGDECIMAL">TokenType.BIGDECIMAL</a>: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;<a href="#TokenType.BIGDECIMAL">TokenType.BIGDECIMAL</a>: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;<a href="#TokenType.MAP">TokenType.MAP</a>: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;<a href="#TokenType.NULLABLE">TokenType.NULLABLE</a>: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;<a href="#TokenType.FLOAT">TokenType.FLOAT</a>: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;<a href="#TokenType.FLOAT">TokenType.FLOAT</a>: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;<a href="#TokenType.FLOAT">TokenType.FLOAT</a>: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;<a href="#TokenType.DOUBLE">TokenType.DOUBLE</a>: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;<a href="#TokenType.DOUBLE">TokenType.DOUBLE</a>: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;<a href="#TokenType.DOUBLE">TokenType.DOUBLE</a>: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;<a href="#TokenType.JSON">TokenType.JSON</a>: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;<a href="#TokenType.CHAR">TokenType.CHAR</a>: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;<a href="#TokenType.CHAR">TokenType.CHAR</a>: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;<a href="#TokenType.NCHAR">TokenType.NCHAR</a>: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;<a href="#TokenType.VARCHAR">TokenType.VARCHAR</a>: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;<a href="#TokenType.VARCHAR">TokenType.VARCHAR</a>: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;<a href="#TokenType.NVARCHAR">TokenType.NVARCHAR</a>: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;<a href="#TokenType.NVARCHAR">TokenType.NVARCHAR</a>: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;<a href="#TokenType.BINARY">TokenType.BINARY</a>: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;<a href="#TokenType.VARBINARY">TokenType.VARBINARY</a>: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;<a href="#TokenType.VARBINARY">TokenType.VARBINARY</a>: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;<a href="#TokenType.VARBINARY">TokenType.VARBINARY</a>: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;<a href="#TokenType.TIME">TokenType.TIME</a>: &#39;TIME&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;<a href="#TokenType.TIMESTAMP">TokenType.TIMESTAMP</a>: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;<a href="#TokenType.TIMESTAMPTZ">TokenType.TIMESTAMPTZ</a>: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;<a href="#TokenType.TIMESTAMPLTZ">TokenType.TIMESTAMPLTZ</a>: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;<a href="#TokenType.DATE">TokenType.DATE</a>: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;<a href="#TokenType.DATETIME">TokenType.DATETIME</a>: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;<a href="#TokenType.INT4RANGE">TokenType.INT4RANGE</a>: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;<a href="#TokenType.INT4MULTIRANGE">TokenType.INT4MULTIRANGE</a>: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;<a href="#TokenType.INT8RANGE">TokenType.INT8RANGE</a>: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;<a href="#TokenType.INT8MULTIRANGE">TokenType.INT8MULTIRANGE</a>: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;<a href="#TokenType.NUMRANGE">TokenType.NUMRANGE</a>: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;<a href="#TokenType.NUMMULTIRANGE">TokenType.NUMMULTIRANGE</a>: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;<a href="#TokenType.TSRANGE">TokenType.TSRANGE</a>: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;<a href="#TokenType.TSMULTIRANGE">TokenType.TSMULTIRANGE</a>: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;<a href="#TokenType.TSTZRANGE">TokenType.TSTZRANGE</a>: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;<a href="#TokenType.TSTZMULTIRANGE">TokenType.TSTZMULTIRANGE</a>: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;<a href="#TokenType.DATERANGE">TokenType.DATERANGE</a>: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;<a href="#TokenType.DATEMULTIRANGE">TokenType.DATEMULTIRANGE</a>: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;<a href="#TokenType.UNIQUE">TokenType.UNIQUE</a>: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;<a href="#TokenType.STRUCT">TokenType.STRUCT</a>: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;<a href="#TokenType.VARIANT">TokenType.VARIANT</a>: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;<a href="#TokenType.ALTER">TokenType.ALTER</a>: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;<a href="#TokenType.COMMENT">TokenType.COMMENT</a>: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;<a href="#TokenType.USERDEFINED">TokenType.USERDEFINED</a>: &#39;USERDEFINED&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Tokenizer.KEYWORDS-view-value"></label><span class="default_value">{&#39;{%&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;{%+&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;{%-&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;%}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;+%}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;-%}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;{{+&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;{{-&#39;: &lt;<a href="#TokenType.BLOCK_START">TokenType.BLOCK_START</a>: &#39;BLOCK_START&#39;&gt;, &#39;+}}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;-}}&#39;: &lt;<a href="#TokenType.BLOCK_END">TokenType.BLOCK_END</a>: &#39;BLOCK_END&#39;&gt;, &#39;/*+&#39;: &lt;<a href="#TokenType.HINT">TokenType.HINT</a>: &#39;HINT&#39;&gt;, &#39;==&#39;: &lt;<a href="#TokenType.EQ">TokenType.EQ</a>: &#39;EQ&#39;&gt;, &#39;::&#39;: &lt;<a href="#TokenType.DCOLON">TokenType.DCOLON</a>: &#39;DCOLON&#39;&gt;, &#39;||&#39;: &lt;<a href="#TokenType.DPIPE">TokenType.DPIPE</a>: &#39;DPIPE&#39;&gt;, &#39;&gt;=&#39;: &lt;<a href="#TokenType.GTE">TokenType.GTE</a>: &#39;GTE&#39;&gt;, &#39;&lt;=&#39;: &lt;<a href="#TokenType.LTE">TokenType.LTE</a>: &#39;LTE&#39;&gt;, &#39;&lt;&gt;&#39;: &lt;<a href="#TokenType.NEQ">TokenType.NEQ</a>: &#39;NEQ&#39;&gt;, &#39;!=&#39;: &lt;<a href="#TokenType.NEQ">TokenType.NEQ</a>: &#39;NEQ&#39;&gt;, &#39;&lt;=&gt;&#39;: &lt;<a href="#TokenType.NULLSAFE_EQ">TokenType.NULLSAFE_EQ</a>: &#39;NULLSAFE_EQ&#39;&gt;, &#39;-&gt;&#39;: &lt;<a href="#TokenType.ARROW">TokenType.ARROW</a>: &#39;ARROW&#39;&gt;, &#39;-&gt;&gt;&#39;: &lt;<a href="#TokenType.DARROW">TokenType.DARROW</a>: &#39;DARROW&#39;&gt;, &#39;=&gt;&#39;: &lt;<a href="#TokenType.FARROW">TokenType.FARROW</a>: &#39;FARROW&#39;&gt;, &#39;#&gt;&#39;: &lt;<a href="#TokenType.HASH_ARROW">TokenType.HASH_ARROW</a>: &#39;HASH_ARROW&#39;&gt;, &#39;#&gt;&gt;&#39;: &lt;<a href="#TokenType.DHASH_ARROW">TokenType.DHASH_ARROW</a>: &#39;DHASH_ARROW&#39;&gt;, &#39;&lt;-&gt;&#39;: &lt;<a href="#TokenType.LR_ARROW">TokenType.LR_ARROW</a>: &#39;LR_ARROW&#39;&gt;, &#39;&amp;&amp;&#39;: &lt;<a href="#TokenType.DAMP">TokenType.DAMP</a>: &#39;DAMP&#39;&gt;, &#39;??&#39;: &lt;<a href="#TokenType.DQMARK">TokenType.DQMARK</a>: &#39;DQMARK&#39;&gt;, &#39;ALL&#39;: &lt;<a href="#TokenType.ALL">TokenType.ALL</a>: &#39;ALL&#39;&gt;, &#39;ALWAYS&#39;: &lt;<a href="#TokenType.ALWAYS">TokenType.ALWAYS</a>: &#39;ALWAYS&#39;&gt;, &#39;AND&#39;: &lt;<a href="#TokenType.AND">TokenType.AND</a>: &#39;AND&#39;&gt;, &#39;ANTI&#39;: &lt;<a href="#TokenType.ANTI">TokenType.ANTI</a>: &#39;ANTI&#39;&gt;, &#39;ANY&#39;: &lt;<a href="#TokenType.ANY">TokenType.ANY</a>: &#39;ANY&#39;&gt;, &#39;ASC&#39;: &lt;<a href="#TokenType.ASC">TokenType.ASC</a>: &#39;ASC&#39;&gt;, &#39;AS&#39;: &lt;<a href="#TokenType.ALIAS">TokenType.ALIAS</a>: &#39;ALIAS&#39;&gt;, &#39;ASOF&#39;: &lt;<a href="#TokenType.ASOF">TokenType.ASOF</a>: &#39;ASOF&#39;&gt;, &#39;AUTOINCREMENT&#39;: &lt;<a href="#TokenType.AUTO_INCREMENT">TokenType.AUTO_INCREMENT</a>: &#39;AUTO_INCREMENT&#39;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;<a href="#TokenType.AUTO_INCREMENT">TokenType.AUTO_INCREMENT</a>: &#39;AUTO_INCREMENT&#39;&gt;, &#39;BEGIN&#39;: &lt;<a href="#TokenType.BEGIN">TokenType.BEGIN</a>: &#39;BEGIN&#39;&gt;, &#39;BETWEEN&#39;: &lt;<a href="#TokenType.BETWEEN">TokenType.BETWEEN</a>: &#39;BETWEEN&#39;&gt;, &#39;CACHE&#39;: &lt;<a href="#TokenType.CACHE">TokenType.CACHE</a>: &#39;CACHE&#39;&gt;, &#39;UNCACHE&#39;: &lt;<a href="#TokenType.UNCACHE">TokenType.UNCACHE</a>: &#39;UNCACHE&#39;&gt;, &#39;CASE&#39;: &lt;<a href="#TokenType.CASE">TokenType.CASE</a>: &#39;CASE&#39;&gt;, &#39;CHARACTER SET&#39;: &lt;<a href="#TokenType.CHARACTER_SET">TokenType.CHARACTER_SET</a>: &#39;CHARACTER_SET&#39;&gt;, &#39;CLUSTER BY&#39;: &lt;<a href="#TokenType.CLUSTER_BY">TokenType.CLUSTER_BY</a>: &#39;CLUSTER_BY&#39;&gt;, &#39;COLLATE&#39;: &lt;<a href="#TokenType.COLLATE">TokenType.COLLATE</a>: &#39;COLLATE&#39;&gt;, &#39;COLUMN&#39;: &lt;<a href="#TokenType.COLUMN">TokenType.COLUMN</a>: &#39;COLUMN&#39;&gt;, &#39;COMMIT&#39;: &lt;<a href="#TokenType.COMMIT">TokenType.COMMIT</a>: &#39;COMMIT&#39;&gt;, &#39;CONNECT BY&#39;: &lt;<a href="#TokenType.CONNECT_BY">TokenType.CONNECT_BY</a>: &#39;CONNECT_BY&#39;&gt;, &#39;CONSTRAINT&#39;: &lt;<a href="#TokenType.CONSTRAINT">TokenType.CONSTRAINT</a>: &#39;CONSTRAINT&#39;&gt;, &#39;CREATE&#39;: &lt;<a href="#TokenType.CREATE">TokenType.CREATE</a>: &#39;CREATE&#39;&gt;, &#39;CROSS&#39;: &lt;<a href="#TokenType.CROSS">TokenType.CROSS</a>: &#39;CROSS&#39;&gt;, &#39;CUBE&#39;: &lt;<a href="#TokenType.CUBE">TokenType.CUBE</a>: &#39;CUBE&#39;&gt;, &#39;CURRENT_DATE&#39;: &lt;<a href="#TokenType.CURRENT_DATE">TokenType.CURRENT_DATE</a>: &#39;CURRENT_DATE&#39;&gt;, &#39;CURRENT_TIME&#39;: &lt;<a href="#TokenType.CURRENT_TIME">TokenType.CURRENT_TIME</a>: &#39;CURRENT_TIME&#39;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;<a href="#TokenType.CURRENT_TIMESTAMP">TokenType.CURRENT_TIMESTAMP</a>: &#39;CURRENT_TIMESTAMP&#39;&gt;, &#39;CURRENT_USER&#39;: &lt;<a href="#TokenType.CURRENT_USER">TokenType.CURRENT_USER</a>: &#39;CURRENT_USER&#39;&gt;, &#39;DATABASE&#39;: &lt;<a href="#TokenType.DATABASE">TokenType.DATABASE</a>: &#39;DATABASE&#39;&gt;, &#39;DEFAULT&#39;: &lt;<a href="#TokenType.DEFAULT">TokenType.DEFAULT</a>: &#39;DEFAULT&#39;&gt;, &#39;DELETE&#39;: &lt;<a href="#TokenType.DELETE">TokenType.DELETE</a>: &#39;DELETE&#39;&gt;, &#39;DESC&#39;: &lt;<a href="#TokenType.DESC">TokenType.DESC</a>: &#39;DESC&#39;&gt;, &#39;DESCRIBE&#39;: &lt;<a href="#TokenType.DESCRIBE">TokenType.DESCRIBE</a>: &#39;DESCRIBE&#39;&gt;, &#39;DISTINCT&#39;: &lt;<a href="#TokenType.DISTINCT">TokenType.DISTINCT</a>: &#39;DISTINCT&#39;&gt;, &#39;DISTRIBUTE BY&#39;: &lt;<a href="#TokenType.DISTRIBUTE_BY">TokenType.DISTRIBUTE_BY</a>: &#39;DISTRIBUTE_BY&#39;&gt;, &#39;DIV&#39;: &lt;<a href="#TokenType.DIV">TokenType.DIV</a>: &#39;DIV&#39;&gt;, &#39;DROP&#39;: &lt;<a href="#TokenType.DROP">TokenType.DROP</a>: &#39;DROP&#39;&gt;, &#39;ELSE&#39;: &lt;<a href="#TokenType.ELSE">TokenType.ELSE</a>: &#39;ELSE&#39;&gt;, &#39;END&#39;: &lt;<a href="#TokenType.END">TokenType.END</a>: &#39;END&#39;&gt;, &#39;ESCAPE&#39;: &lt;<a href="#TokenType.ESCAPE">TokenType.ESCAPE</a>: &#39;ESCAPE&#39;&gt;, &#39;EXCEPT&#39;: &lt;<a href="#TokenType.EXCEPT">TokenType.EXCEPT</a>: &#39;EXCEPT&#39;&gt;, &#39;EXECUTE&#39;: &lt;<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: &#39;EXECUTE&#39;&gt;, &#39;EXISTS&#39;: &lt;<a href="#TokenType.EXISTS">TokenType.EXISTS</a>: &#39;EXISTS&#39;&gt;, &#39;FALSE&#39;: &lt;<a href="#TokenType.FALSE">TokenType.FALSE</a>: &#39;FALSE&#39;&gt;, &#39;FETCH&#39;: &lt;<a href="#TokenType.FETCH">TokenType.FETCH</a>: &#39;FETCH&#39;&gt;, &#39;FILTER&#39;: &lt;<a href="#TokenType.FILTER">TokenType.FILTER</a>: &#39;FILTER&#39;&gt;, &#39;FIRST&#39;: &lt;<a href="#TokenType.FIRST">TokenType.FIRST</a>: &#39;FIRST&#39;&gt;, &#39;FULL&#39;: &lt;<a href="#TokenType.FULL">TokenType.FULL</a>: &#39;FULL&#39;&gt;, &#39;FUNCTION&#39;: &lt;<a href="#TokenType.FUNCTION">TokenType.FUNCTION</a>: &#39;FUNCTION&#39;&gt;, &#39;FOR&#39;: &lt;<a href="#TokenType.FOR">TokenType.FOR</a>: &#39;FOR&#39;&gt;, &#39;FOREIGN KEY&#39;: &lt;<a href="#TokenType.FOREIGN_KEY">TokenType.FOREIGN_KEY</a>: &#39;FOREIGN_KEY&#39;&gt;, &#39;FORMAT&#39;: &lt;<a href="#TokenType.FORMAT">TokenType.FORMAT</a>: &#39;FORMAT&#39;&gt;, &#39;FROM&#39;: &lt;<a href="#TokenType.FROM">TokenType.FROM</a>: &#39;FROM&#39;&gt;, &#39;GEOGRAPHY&#39;: &lt;<a href="#TokenType.GEOGRAPHY">TokenType.GEOGRAPHY</a>: &#39;GEOGRAPHY&#39;&gt;, &#39;GEOMETRY&#39;: &lt;<a href="#TokenType.GEOMETRY">TokenType.GEOMETRY</a>: &#39;GEOMETRY&#39;&gt;, &#39;GLOB&#39;: &lt;<a href="#TokenType.GLOB">TokenType.GLOB</a>: &#39;GLOB&#39;&gt;, &#39;GROUP BY&#39;: &lt;<a href="#TokenType.GROUP_BY">TokenType.GROUP_BY</a>: &#39;GROUP_BY&#39;&gt;, &#39;GROUPING SETS&#39;: &lt;<a href="#TokenType.GROUPING_SETS">TokenType.GROUPING_SETS</a>: &#39;GROUPING_SETS&#39;&gt;, &#39;HAVING&#39;: &lt;<a href="#TokenType.HAVING">TokenType.HAVING</a>: &#39;HAVING&#39;&gt;, &#39;ILIKE&#39;: &lt;<a href="#TokenType.ILIKE">TokenType.ILIKE</a>: &#39;ILIKE&#39;&gt;, &#39;IN&#39;: &lt;<a href="#TokenType.IN">TokenType.IN</a>: &#39;IN&#39;&gt;, &#39;INDEX&#39;: &lt;<a href="#TokenType.INDEX">TokenType.INDEX</a>: &#39;INDEX&#39;&gt;, &#39;INET&#39;: &lt;<a href="#TokenType.INET">TokenType.INET</a>: &#39;INET&#39;&gt;, &#39;INNER&#39;: &lt;<a href="#TokenType.INNER">TokenType.INNER</a>: &#39;INNER&#39;&gt;, &#39;INSERT&#39;: &lt;<a href="#TokenType.INSERT">TokenType.INSERT</a>: &#39;INSERT&#39;&gt;, &#39;INTERVAL&#39;: &lt;<a href="#TokenType.INTERVAL">TokenType.INTERVAL</a>: &#39;INTERVAL&#39;&gt;, &#39;INTERSECT&#39;: &lt;<a href="#TokenType.INTERSECT">TokenType.INTERSECT</a>: &#39;INTERSECT&#39;&gt;, &#39;INTO&#39;: &lt;<a href="#TokenType.INTO">TokenType.INTO</a>: &#39;INTO&#39;&gt;, &#39;IS&#39;: &lt;<a href="#TokenType.IS">TokenType.IS</a>: &#39;IS&#39;&gt;, &#39;ISNULL&#39;: &lt;<a href="#TokenType.ISNULL">TokenType.ISNULL</a>: &#39;ISNULL&#39;&gt;, &#39;JOIN&#39;: &lt;<a href="#TokenType.JOIN">TokenType.JOIN</a>: &#39;JOIN&#39;&gt;, &#39;KEEP&#39;: &lt;<a href="#TokenType.KEEP">TokenType.KEEP</a>: &#39;KEEP&#39;&gt;, &#39;LATERAL&#39;: &lt;<a href="#TokenType.LATERAL">TokenType.LATERAL</a>: &#39;LATERAL&#39;&gt;, &#39;LEFT&#39;: &lt;<a href="#TokenType.LEFT">TokenType.LEFT</a>: &#39;LEFT&#39;&gt;, &#39;LIKE&#39;: &lt;<a href="#TokenType.LIKE">TokenType.LIKE</a>: &#39;LIKE&#39;&gt;, &#39;LIMIT&#39;: &lt;<a href="#TokenType.LIMIT">TokenType.LIMIT</a>: &#39;LIMIT&#39;&gt;, &#39;LOAD&#39;: &lt;<a href="#TokenType.LOAD">TokenType.LOAD</a>: &#39;LOAD&#39;&gt;, &#39;LOCK&#39;: &lt;<a href="#TokenType.LOCK">TokenType.LOCK</a>: &#39;LOCK&#39;&gt;, &#39;MERGE&#39;: &lt;<a href="#TokenType.MERGE">TokenType.MERGE</a>: &#39;MERGE&#39;&gt;, &#39;NATURAL&#39;: &lt;<a href="#TokenType.NATURAL">TokenType.NATURAL</a>: &#39;NATURAL&#39;&gt;, &#39;NEXT&#39;: &lt;<a href="#TokenType.NEXT">TokenType.NEXT</a>: &#39;NEXT&#39;&gt;, &#39;NOT&#39;: &lt;<a href="#TokenType.NOT">TokenType.NOT</a>: &#39;NOT&#39;&gt;, &#39;NOTNULL&#39;: &lt;<a href="#TokenType.NOTNULL">TokenType.NOTNULL</a>: &#39;NOTNULL&#39;&gt;, &#39;NULL&#39;: &lt;<a href="#TokenType.NULL">TokenType.NULL</a>: &#39;NULL&#39;&gt;, &#39;OBJECT&#39;: &lt;<a href="#TokenType.OBJECT">TokenType.OBJECT</a>: &#39;OBJECT&#39;&gt;, &#39;OFFSET&#39;: &lt;<a href="#TokenType.OFFSET">TokenType.OFFSET</a>: &#39;OFFSET&#39;&gt;, &#39;ON&#39;: &lt;<a href="#TokenType.ON">TokenType.ON</a>: &#39;ON&#39;&gt;, &#39;OR&#39;: &lt;<a href="#TokenType.OR">TokenType.OR</a>: &#39;OR&#39;&gt;, &#39;XOR&#39;: &lt;<a href="#TokenType.XOR">TokenType.XOR</a>: &#39;XOR&#39;&gt;, &#39;ORDER BY&#39;: &lt;<a href="#TokenType.ORDER_BY">TokenType.ORDER_BY</a>: &#39;ORDER_BY&#39;&gt;, &#39;ORDINALITY&#39;: &lt;<a href="#TokenType.ORDINALITY">TokenType.ORDINALITY</a>: &#39;ORDINALITY&#39;&gt;, &#39;OUTER&#39;: &lt;<a href="#TokenType.OUTER">TokenType.OUTER</a>: &#39;OUTER&#39;&gt;, &#39;OVER&#39;: &lt;<a href="#TokenType.OVER">TokenType.OVER</a>: &#39;OVER&#39;&gt;, &#39;OVERLAPS&#39;: &lt;<a href="#TokenType.OVERLAPS">TokenType.OVERLAPS</a>: &#39;OVERLAPS&#39;&gt;, &#39;OVERWRITE&#39;: &lt;<a href="#TokenType.OVERWRITE">TokenType.OVERWRITE</a>: &#39;OVERWRITE&#39;&gt;, &#39;PARTITION&#39;: &lt;<a href="#TokenType.PARTITION">TokenType.PARTITION</a>: &#39;PARTITION&#39;&gt;, &#39;PARTITION BY&#39;: &lt;<a href="#TokenType.PARTITION_BY">TokenType.PARTITION_BY</a>: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED BY&#39;: &lt;<a href="#TokenType.PARTITION_BY">TokenType.PARTITION_BY</a>: &#39;PARTITION_BY&#39;&gt;, &#39;PARTITIONED_BY&#39;: &lt;<a href="#TokenType.PARTITION_BY">TokenType.PARTITION_BY</a>: &#39;PARTITION_BY&#39;&gt;, &#39;PERCENT&#39;: &lt;<a href="#TokenType.PERCENT">TokenType.PERCENT</a>: &#39;PERCENT&#39;&gt;, &#39;PIVOT&#39;: &lt;<a href="#TokenType.PIVOT">TokenType.PIVOT</a>: &#39;PIVOT&#39;&gt;, &#39;PRAGMA&#39;: &lt;<a href="#TokenType.PRAGMA">TokenType.PRAGMA</a>: &#39;PRAGMA&#39;&gt;, &#39;PRIMARY KEY&#39;: &lt;<a href="#TokenType.PRIMARY_KEY">TokenType.PRIMARY_KEY</a>: &#39;PRIMARY_KEY&#39;&gt;, &#39;PROCEDURE&#39;: &lt;<a href="#TokenType.PROCEDURE">TokenType.PROCEDURE</a>: &#39;PROCEDURE&#39;&gt;, &#39;QUALIFY&#39;: &lt;<a href="#TokenType.QUALIFY">TokenType.QUALIFY</a>: &#39;QUALIFY&#39;&gt;, &#39;RANGE&#39;: &lt;<a href="#TokenType.RANGE">TokenType.RANGE</a>: &#39;RANGE&#39;&gt;, &#39;RECURSIVE&#39;: &lt;<a href="#TokenType.RECURSIVE">TokenType.RECURSIVE</a>: &#39;RECURSIVE&#39;&gt;, &#39;REGEXP&#39;: &lt;<a href="#TokenType.RLIKE">TokenType.RLIKE</a>: &#39;RLIKE&#39;&gt;, &#39;REPLACE&#39;: &lt;<a href="#TokenType.REPLACE">TokenType.REPLACE</a>: &#39;REPLACE&#39;&gt;, &#39;RETURNING&#39;: &lt;<a href="#TokenType.RETURNING">TokenType.RETURNING</a>: &#39;RETURNING&#39;&gt;, &#39;REFERENCES&#39;: &lt;<a href="#TokenType.REFERENCES">TokenType.REFERENCES</a>: &#39;REFERENCES&#39;&gt;, &#39;RIGHT&#39;: &lt;<a href="#TokenType.RIGHT">TokenType.RIGHT</a>: &#39;RIGHT&#39;&gt;, &#39;RLIKE&#39;: &lt;<a href="#TokenType.RLIKE">TokenType.RLIKE</a>: &#39;RLIKE&#39;&gt;, &#39;ROLLBACK&#39;: &lt;<a href="#TokenType.ROLLBACK">TokenType.ROLLBACK</a>: &#39;ROLLBACK&#39;&gt;, &#39;ROLLUP&#39;: &lt;<a href="#TokenType.ROLLUP">TokenType.ROLLUP</a>: &#39;ROLLUP&#39;&gt;, &#39;ROW&#39;: &lt;<a href="#TokenType.ROW">TokenType.ROW</a>: &#39;ROW&#39;&gt;, &#39;ROWS&#39;: &lt;<a href="#TokenType.ROWS">TokenType.ROWS</a>: &#39;ROWS&#39;&gt;, &#39;SCHEMA&#39;: &lt;<a href="#TokenType.SCHEMA">TokenType.SCHEMA</a>: &#39;SCHEMA&#39;&gt;, &#39;SELECT&#39;: &lt;<a href="#TokenType.SELECT">TokenType.SELECT</a>: &#39;SELECT&#39;&gt;, &#39;SEMI&#39;: &lt;<a href="#TokenType.SEMI">TokenType.SEMI</a>: &#39;SEMI&#39;&gt;, &#39;SET&#39;: &lt;<a href="#TokenType.SET">TokenType.SET</a>: &#39;SET&#39;&gt;, &#39;SETTINGS&#39;: &lt;<a href="#TokenType.SETTINGS">TokenType.SETTINGS</a>: &#39;SETTINGS&#39;&gt;, &#39;SHOW&#39;: &lt;<a href="#TokenType.SHOW">TokenType.SHOW</a>: &#39;SHOW&#39;&gt;, &#39;SIMILAR TO&#39;: &lt;<a href="#TokenType.SIMILAR_TO">TokenType.SIMILAR_TO</a>: &#39;SIMILAR_TO&#39;&gt;, &#39;SOME&#39;: &lt;<a href="#TokenType.SOME">TokenType.SOME</a>: &#39;SOME&#39;&gt;, &#39;SORT BY&#39;: &lt;<a href="#TokenType.SORT_BY">TokenType.SORT_BY</a>: &#39;SORT_BY&#39;&gt;, &#39;START WITH&#39;: &lt;<a href="#TokenType.START_WITH">TokenType.START_WITH</a>: &#39;START_WITH&#39;&gt;, &#39;TABLE&#39;: &lt;<a href="#TokenType.TABLE">TokenType.TABLE</a>: &#39;TABLE&#39;&gt;, &#39;TABLESAMPLE&#39;: &lt;<a href="#TokenType.TABLE_SAMPLE">TokenType.TABLE_SAMPLE</a>: &#39;TABLE_SAMPLE&#39;&gt;, &#39;TEMP&#39;: &lt;<a href="#TokenType.TEMPORARY">TokenType.TEMPORARY</a>: &#39;TEMPORARY&#39;&gt;, &#39;TEMPORARY&#39;: &lt;<a href="#TokenType.TEMPORARY">TokenType.TEMPORARY</a>: &#39;TEMPORARY&#39;&gt;, &#39;THEN&#39;: &lt;<a href="#TokenType.THEN">TokenType.THEN</a>: &#39;THEN&#39;&gt;, &#39;TRUE&#39;: &lt;<a href="#TokenType.TRUE">TokenType.TRUE</a>: &#39;TRUE&#39;&gt;, &#39;UNION&#39;: &lt;<a href="#TokenType.UNION">TokenType.UNION</a>: &#39;UNION&#39;&gt;, &#39;UNKNOWN&#39;: &lt;<a href="#TokenType.UNKNOWN">TokenType.UNKNOWN</a>: &#39;UNKNOWN&#39;&gt;, &#39;UNNEST&#39;: &lt;<a href="#TokenType.UNNEST">TokenType.UNNEST</a>: &#39;UNNEST&#39;&gt;, &#39;UNPIVOT&#39;: &lt;<a href="#TokenType.UNPIVOT">TokenType.UNPIVOT</a>: &#39;UNPIVOT&#39;&gt;, &#39;UPDATE&#39;: &lt;<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: &#39;UPDATE&#39;&gt;, &#39;USE&#39;: &lt;<a href="#TokenType.USE">TokenType.USE</a>: &#39;USE&#39;&gt;, &#39;USING&#39;: &lt;<a href="#TokenType.USING">TokenType.USING</a>: &#39;USING&#39;&gt;, &#39;UUID&#39;: &lt;<a href="#TokenType.UUID">TokenType.UUID</a>: &#39;UUID&#39;&gt;, &#39;VALUES&#39;: &lt;<a href="#TokenType.VALUES">TokenType.VALUES</a>: &#39;VALUES&#39;&gt;, &#39;VIEW&#39;: &lt;<a href="#TokenType.VIEW">TokenType.VIEW</a>: &#39;VIEW&#39;&gt;, &#39;VOLATILE&#39;: &lt;<a href="#TokenType.VOLATILE">TokenType.VOLATILE</a>: &#39;VOLATILE&#39;&gt;, &#39;WHEN&#39;: &lt;<a href="#TokenType.WHEN">TokenType.WHEN</a>: &#39;WHEN&#39;&gt;, &#39;WHERE&#39;: &lt;<a href="#TokenType.WHERE">TokenType.WHERE</a>: &#39;WHERE&#39;&gt;, &#39;WINDOW&#39;: &lt;<a href="#TokenType.WINDOW">TokenType.WINDOW</a>: &#39;WINDOW&#39;&gt;, &#39;WITH&#39;: &lt;<a href="#TokenType.WITH">TokenType.WITH</a>: &#39;WITH&#39;&gt;, &#39;APPLY&#39;: &lt;<a href="#TokenType.APPLY">TokenType.APPLY</a>: &#39;APPLY&#39;&gt;, &#39;ARRAY&#39;: &lt;<a href="#TokenType.ARRAY">TokenType.ARRAY</a>: &#39;ARRAY&#39;&gt;, &#39;BIT&#39;: &lt;<a href="#TokenType.BIT">TokenType.BIT</a>: &#39;BIT&#39;&gt;, &#39;BOOL&#39;: &lt;<a href="#TokenType.BOOLEAN">TokenType.BOOLEAN</a>: &#39;BOOLEAN&#39;&gt;, &#39;BOOLEAN&#39;: &lt;<a href="#TokenType.BOOLEAN">TokenType.BOOLEAN</a>: &#39;BOOLEAN&#39;&gt;, &#39;BYTE&#39;: &lt;<a href="#TokenType.TINYINT">TokenType.TINYINT</a>: &#39;TINYINT&#39;&gt;, &#39;TINYINT&#39;: &lt;<a href="#TokenType.TINYINT">TokenType.TINYINT</a>: &#39;TINYINT&#39;&gt;, &#39;SHORT&#39;: &lt;<a href="#TokenType.SMALLINT">TokenType.SMALLINT</a>: &#39;SMALLINT&#39;&gt;, &#39;SMALLINT&#39;: &lt;<a href="#TokenType.SMALLINT">TokenType.SMALLINT</a>: &#39;SMALLINT&#39;&gt;, &#39;INT128&#39;: &lt;<a href="#TokenType.INT128">TokenType.INT128</a>: &#39;INT128&#39;&gt;, &#39;INT2&#39;: &lt;<a href="#TokenType.SMALLINT">TokenType.SMALLINT</a>: &#39;SMALLINT&#39;&gt;, &#39;INTEGER&#39;: &lt;<a href="#TokenType.INT">TokenType.INT</a>: &#39;INT&#39;&gt;, &#39;INT&#39;: &lt;<a href="#TokenType.INT">TokenType.INT</a>: &#39;INT&#39;&gt;, &#39;INT4&#39;: &lt;<a href="#TokenType.INT">TokenType.INT</a>: &#39;INT&#39;&gt;, &#39;LONG&#39;: &lt;<a href="#TokenType.BIGINT">TokenType.BIGINT</a>: &#39;BIGINT&#39;&gt;, &#39;BIGINT&#39;: &lt;<a href="#TokenType.BIGINT">TokenType.BIGINT</a>: &#39;BIGINT&#39;&gt;, &#39;INT8&#39;: &lt;<a href="#TokenType.BIGINT">TokenType.BIGINT</a>: &#39;BIGINT&#39;&gt;, &#39;DEC&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;DECIMAL&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;BIGDECIMAL&#39;: &lt;<a href="#TokenType.BIGDECIMAL">TokenType.BIGDECIMAL</a>: &#39;BIGDECIMAL&#39;&gt;, &#39;BIGNUMERIC&#39;: &lt;<a href="#TokenType.BIGDECIMAL">TokenType.BIGDECIMAL</a>: &#39;BIGDECIMAL&#39;&gt;, &#39;MAP&#39;: &lt;<a href="#TokenType.MAP">TokenType.MAP</a>: &#39;MAP&#39;&gt;, &#39;NULLABLE&#39;: &lt;<a href="#TokenType.NULLABLE">TokenType.NULLABLE</a>: &#39;NULLABLE&#39;&gt;, &#39;NUMBER&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;NUMERIC&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;FIXED&#39;: &lt;<a href="#TokenType.DECIMAL">TokenType.DECIMAL</a>: &#39;DECIMAL&#39;&gt;, &#39;REAL&#39;: &lt;<a href="#TokenType.FLOAT">TokenType.FLOAT</a>: &#39;FLOAT&#39;&gt;, &#39;FLOAT&#39;: &lt;<a href="#TokenType.FLOAT">TokenType.FLOAT</a>: &#39;FLOAT&#39;&gt;, &#39;FLOAT4&#39;: &lt;<a href="#TokenType.FLOAT">TokenType.FLOAT</a>: &#39;FLOAT&#39;&gt;, &#39;FLOAT8&#39;: &lt;<a href="#TokenType.DOUBLE">TokenType.DOUBLE</a>: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE&#39;: &lt;<a href="#TokenType.DOUBLE">TokenType.DOUBLE</a>: &#39;DOUBLE&#39;&gt;, &#39;DOUBLE PRECISION&#39;: &lt;<a href="#TokenType.DOUBLE">TokenType.DOUBLE</a>: &#39;DOUBLE&#39;&gt;, &#39;JSON&#39;: &lt;<a href="#TokenType.JSON">TokenType.JSON</a>: &#39;JSON&#39;&gt;, &#39;CHAR&#39;: &lt;<a href="#TokenType.CHAR">TokenType.CHAR</a>: &#39;CHAR&#39;&gt;, &#39;CHARACTER&#39;: &lt;<a href="#TokenType.CHAR">TokenType.CHAR</a>: &#39;CHAR&#39;&gt;, &#39;NCHAR&#39;: &lt;<a href="#TokenType.NCHAR">TokenType.NCHAR</a>: &#39;NCHAR&#39;&gt;, &#39;VARCHAR&#39;: &lt;<a href="#TokenType.VARCHAR">TokenType.VARCHAR</a>: &#39;VARCHAR&#39;&gt;, &#39;VARCHAR2&#39;: &lt;<a href="#TokenType.VARCHAR">TokenType.VARCHAR</a>: &#39;VARCHAR&#39;&gt;, &#39;NVARCHAR&#39;: &lt;<a href="#TokenType.NVARCHAR">TokenType.NVARCHAR</a>: &#39;NVARCHAR&#39;&gt;, &#39;NVARCHAR2&#39;: &lt;<a href="#TokenType.NVARCHAR">TokenType.NVARCHAR</a>: &#39;NVARCHAR&#39;&gt;, &#39;STR&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;STRING&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;TEXT&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;CLOB&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;LONGVARCHAR&#39;: &lt;<a href="#TokenType.TEXT">TokenType.TEXT</a>: &#39;TEXT&#39;&gt;, &#39;BINARY&#39;: &lt;<a href="#TokenType.BINARY">TokenType.BINARY</a>: &#39;BINARY&#39;&gt;, &#39;BLOB&#39;: &lt;<a href="#TokenType.VARBINARY">TokenType.VARBINARY</a>: &#39;VARBINARY&#39;&gt;, &#39;BYTEA&#39;: &lt;<a href="#TokenType.VARBINARY">TokenType.VARBINARY</a>: &#39;VARBINARY&#39;&gt;, &#39;VARBINARY&#39;: &lt;<a href="#TokenType.VARBINARY">TokenType.VARBINARY</a>: &#39;VARBINARY&#39;&gt;, &#39;TIME&#39;: &lt;<a href="#TokenType.TIME">TokenType.TIME</a>: &#39;TIME&#39;&gt;, &#39;TIMETZ&#39;: &lt;<a href="#TokenType.TIMETZ">TokenType.TIMETZ</a>: &#39;TIMETZ&#39;&gt;, &#39;TIMESTAMP&#39;: &lt;<a href="#TokenType.TIMESTAMP">TokenType.TIMESTAMP</a>: &#39;TIMESTAMP&#39;&gt;, &#39;TIMESTAMPTZ&#39;: &lt;<a href="#TokenType.TIMESTAMPTZ">TokenType.TIMESTAMPTZ</a>: &#39;TIMESTAMPTZ&#39;&gt;, &#39;TIMESTAMPLTZ&#39;: &lt;<a href="#TokenType.TIMESTAMPLTZ">TokenType.TIMESTAMPLTZ</a>: &#39;TIMESTAMPLTZ&#39;&gt;, &#39;DATE&#39;: &lt;<a href="#TokenType.DATE">TokenType.DATE</a>: &#39;DATE&#39;&gt;, &#39;DATETIME&#39;: &lt;<a href="#TokenType.DATETIME">TokenType.DATETIME</a>: &#39;DATETIME&#39;&gt;, &#39;INT4RANGE&#39;: &lt;<a href="#TokenType.INT4RANGE">TokenType.INT4RANGE</a>: &#39;INT4RANGE&#39;&gt;, &#39;INT4MULTIRANGE&#39;: &lt;<a href="#TokenType.INT4MULTIRANGE">TokenType.INT4MULTIRANGE</a>: &#39;INT4MULTIRANGE&#39;&gt;, &#39;INT8RANGE&#39;: &lt;<a href="#TokenType.INT8RANGE">TokenType.INT8RANGE</a>: &#39;INT8RANGE&#39;&gt;, &#39;INT8MULTIRANGE&#39;: &lt;<a href="#TokenType.INT8MULTIRANGE">TokenType.INT8MULTIRANGE</a>: &#39;INT8MULTIRANGE&#39;&gt;, &#39;NUMRANGE&#39;: &lt;<a href="#TokenType.NUMRANGE">TokenType.NUMRANGE</a>: &#39;NUMRANGE&#39;&gt;, &#39;NUMMULTIRANGE&#39;: &lt;<a href="#TokenType.NUMMULTIRANGE">TokenType.NUMMULTIRANGE</a>: &#39;NUMMULTIRANGE&#39;&gt;, &#39;TSRANGE&#39;: &lt;<a href="#TokenType.TSRANGE">TokenType.TSRANGE</a>: &#39;TSRANGE&#39;&gt;, &#39;TSMULTIRANGE&#39;: &lt;<a href="#TokenType.TSMULTIRANGE">TokenType.TSMULTIRANGE</a>: &#39;TSMULTIRANGE&#39;&gt;, &#39;TSTZRANGE&#39;: &lt;<a href="#TokenType.TSTZRANGE">TokenType.TSTZRANGE</a>: &#39;TSTZRANGE&#39;&gt;, &#39;TSTZMULTIRANGE&#39;: &lt;<a href="#TokenType.TSTZMULTIRANGE">TokenType.TSTZMULTIRANGE</a>: &#39;TSTZMULTIRANGE&#39;&gt;, &#39;DATERANGE&#39;: &lt;<a href="#TokenType.DATERANGE">TokenType.DATERANGE</a>: &#39;DATERANGE&#39;&gt;, &#39;DATEMULTIRANGE&#39;: &lt;<a href="#TokenType.DATEMULTIRANGE">TokenType.DATEMULTIRANGE</a>: &#39;DATEMULTIRANGE&#39;&gt;, &#39;UNIQUE&#39;: &lt;<a href="#TokenType.UNIQUE">TokenType.UNIQUE</a>: &#39;UNIQUE&#39;&gt;, &#39;STRUCT&#39;: &lt;<a href="#TokenType.STRUCT">TokenType.STRUCT</a>: &#39;STRUCT&#39;&gt;, &#39;VARIANT&#39;: &lt;<a href="#TokenType.VARIANT">TokenType.VARIANT</a>: &#39;VARIANT&#39;&gt;, &#39;ALTER&#39;: &lt;<a href="#TokenType.ALTER">TokenType.ALTER</a>: &#39;ALTER&#39;&gt;, &#39;ANALYZE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;CALL&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;COMMENT&#39;: &lt;<a href="#TokenType.COMMENT">TokenType.COMMENT</a>: &#39;COMMENT&#39;&gt;, &#39;COPY&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;EXPLAIN&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;GRANT&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;OPTIMIZE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;PREPARE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;TRUNCATE&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;VACUUM&#39;: &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &#39;USER-DEFINED&#39;: &lt;<a href="#TokenType.USERDEFINED">TokenType.USERDEFINED</a>: &#39;USERDEFINED&#39;&gt;, &#39;FOR VERSION&#39;: &lt;<a href="#TokenType.VERSION_SNAPSHOT">TokenType.VERSION_SNAPSHOT</a>: &#39;VERSION_SNAPSHOT&#39;&gt;, &#39;FOR TIMESTAMP&#39;: &lt;<a href="#TokenType.TIMESTAMP_SNAPSHOT">TokenType.TIMESTAMP_SNAPSHOT</a>: &#39;TIMESTAMP_SNAPSHOT&#39;&gt;}</span>
</div>
@@ -7343,7 +7605,7 @@
<div class="attr variable">
<span class="name">COMMANDS</span> =
<input id="Tokenizer.COMMANDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{&lt;<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: &#39;EXECUTE&#39;&gt;, &lt;<a href="#TokenType.FETCH">TokenType.FETCH</a>: &#39;FETCH&#39;&gt;, &lt;<a href="#TokenType.SHOW">TokenType.SHOW</a>: &#39;SHOW&#39;&gt;, &lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{&lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &lt;<a href="#TokenType.FETCH">TokenType.FETCH</a>: &#39;FETCH&#39;&gt;, &lt;<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: &#39;EXECUTE&#39;&gt;, &lt;<a href="#TokenType.SHOW">TokenType.SHOW</a>: &#39;SHOW&#39;&gt;}</span>
</div>
@@ -7411,20 +7673,20 @@
</div>
<a class="headerlink" href="#Tokenizer.reset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.reset-778"><a href="#Tokenizer.reset-778"><span class="linenos">778</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-779"><a href="#Tokenizer.reset-779"><span class="linenos">779</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-780"><a href="#Tokenizer.reset-780"><span class="linenos">780</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-781"><a href="#Tokenizer.reset-781"><span class="linenos">781</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-782"><a href="#Tokenizer.reset-782"><span class="linenos">782</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-783"><a href="#Tokenizer.reset-783"><span class="linenos">783</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-784"><a href="#Tokenizer.reset-784"><span class="linenos">784</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-785"><a href="#Tokenizer.reset-785"><span class="linenos">785</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer.reset-786"><a href="#Tokenizer.reset-786"><span class="linenos">786</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-787"><a href="#Tokenizer.reset-787"><span class="linenos">787</span></a>
-</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">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_end</span> <span class="o">=</span> <span class="kc">False</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">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.reset-799"><a href="#Tokenizer.reset-799"><span class="linenos">799</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-800"><a href="#Tokenizer.reset-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="s2">&quot;&quot;</span>
+</span><span id="Tokenizer.reset-801"><a href="#Tokenizer.reset-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="mi">0</span>
+</span><span id="Tokenizer.reset-802"><a href="#Tokenizer.reset-802"><span class="linenos">802</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-803"><a href="#Tokenizer.reset-803"><span class="linenos">803</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-804"><a href="#Tokenizer.reset-804"><span class="linenos">804</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-805"><a href="#Tokenizer.reset-805"><span class="linenos">805</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-806"><a href="#Tokenizer.reset-806"><span class="linenos">806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer.reset-807"><a href="#Tokenizer.reset-807"><span class="linenos">807</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-808"><a href="#Tokenizer.reset-808"><span class="linenos">808</span></a>
+</span><span id="Tokenizer.reset-809"><a href="#Tokenizer.reset-809"><span class="linenos">809</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-810"><a href="#Tokenizer.reset-810"><span class="linenos">810</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-811"><a href="#Tokenizer.reset-811"><span class="linenos">811</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-812"><a href="#Tokenizer.reset-812"><span class="linenos">812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span></pre></div>
@@ -7442,21 +7704,21 @@
</div>
<a class="headerlink" href="#Tokenizer.tokenize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize-793"><a href="#Tokenizer.tokenize-793"><span class="linenos">793</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-794"><a href="#Tokenizer.tokenize-794"><span class="linenos">794</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-795"><a href="#Tokenizer.tokenize-795"><span class="linenos">795</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-796"><a href="#Tokenizer.tokenize-796"><span class="linenos">796</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-797"><a href="#Tokenizer.tokenize-797"><span class="linenos">797</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-798"><a href="#Tokenizer.tokenize-798"><span class="linenos">798</span></a>
-</span><span id="Tokenizer.tokenize-799"><a href="#Tokenizer.tokenize-799"><span class="linenos">799</span></a> <span class="k">try</span><span class="p">:</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">_scan</span><span class="p">()</span>
-</span><span id="Tokenizer.tokenize-801"><a href="#Tokenizer.tokenize-801"><span class="linenos">801</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-802"><a href="#Tokenizer.tokenize-802"><span class="linenos">802</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize-803"><a href="#Tokenizer.tokenize-803"><span class="linenos">803</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize-804"><a href="#Tokenizer.tokenize-804"><span class="linenos">804</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-805"><a href="#Tokenizer.tokenize-805"><span class="linenos">805</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
-</span><span id="Tokenizer.tokenize-806"><a href="#Tokenizer.tokenize-806"><span class="linenos">806</span></a>
-</span><span id="Tokenizer.tokenize-807"><a href="#Tokenizer.tokenize-807"><span class="linenos">807</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-814"><a href="#Tokenizer.tokenize-814"><span class="linenos">814</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-815"><a href="#Tokenizer.tokenize-815"><span class="linenos">815</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-816"><a href="#Tokenizer.tokenize-816"><span class="linenos">816</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-817"><a href="#Tokenizer.tokenize-817"><span class="linenos">817</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-818"><a href="#Tokenizer.tokenize-818"><span class="linenos">818</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-819"><a href="#Tokenizer.tokenize-819"><span class="linenos">819</span></a>
+</span><span id="Tokenizer.tokenize-820"><a href="#Tokenizer.tokenize-820"><span class="linenos">820</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize-821"><a href="#Tokenizer.tokenize-821"><span class="linenos">821</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-822"><a href="#Tokenizer.tokenize-822"><span class="linenos">822</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-823"><a href="#Tokenizer.tokenize-823"><span class="linenos">823</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize-824"><a href="#Tokenizer.tokenize-824"><span class="linenos">824</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize-825"><a href="#Tokenizer.tokenize-825"><span class="linenos">825</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-826"><a href="#Tokenizer.tokenize-826"><span class="linenos">826</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+</span><span id="Tokenizer.tokenize-827"><a href="#Tokenizer.tokenize-827"><span class="linenos">827</span></a>
+</span><span id="Tokenizer.tokenize-828"><a href="#Tokenizer.tokenize-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
</span></pre></div>
@@ -7476,11 +7738,11 @@
</div>
<a class="headerlink" href="#Tokenizer.peek"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.peek-875"><a href="#Tokenizer.peek-875"><span class="linenos">875</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer.peek-876"><a href="#Tokenizer.peek-876"><span class="linenos">876</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
-</span><span id="Tokenizer.peek-877"><a href="#Tokenizer.peek-877"><span class="linenos">877</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer.peek-878"><a href="#Tokenizer.peek-878"><span class="linenos">878</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-</span><span id="Tokenizer.peek-879"><a href="#Tokenizer.peek-879"><span class="linenos">879</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.peek-896"><a href="#Tokenizer.peek-896"><span class="linenos">896</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer.peek-897"><a href="#Tokenizer.peek-897"><span class="linenos">897</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
+</span><span id="Tokenizer.peek-898"><a href="#Tokenizer.peek-898"><span class="linenos">898</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer.peek-899"><a href="#Tokenizer.peek-899"><span class="linenos">899</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+</span><span id="Tokenizer.peek-900"><a href="#Tokenizer.peek-900"><span class="linenos">900</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
diff --git a/docs/sqlglot/transforms.html b/docs/sqlglot/transforms.html
index cebbf2b..a64e216 100644
--- a/docs/sqlglot/transforms.html
+++ b/docs/sqlglot/transforms.html
@@ -153,239 +153,241 @@
</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="k">if</span> <span class="n">order</span><span class="p">:</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;order&quot;</span><span class="p">,</span> <span class="n">order</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">copy</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="n">window</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">window</span><span class="p">,</span> <span class="n">row_number</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">select</span><span class="p">(</span><span class="n">window</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-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="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">outer_selects</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">row_number</span><span class="si">}</span><span class="s1">&quot; = 1&#39;</span><span class="p">)</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;order&quot;</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">distinct_cols</span><span class="p">]))</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">window</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">window</span><span class="p">,</span> <span class="n">row_number</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">select</span><span class="p">(</span><span class="n">window</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-76"><a href="#L-76"><span class="linenos"> 76</span></a>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">outer_selects</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">row_number</span><span class="si">}</span><span class="s1">&quot; = 1&#39;</span><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">def</span> <span class="nf">eliminate_qualify</span><span 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-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.</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="sd"> The idea behind this transformation can be seen in Snowflake&#39;s documentation for QUALIFY:</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd"> https://docs.snowflake.com/en/sql-reference/constructs/qualify</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="sd"> Some dialects don&#39;t support window functions in the WHERE clause, so we need to include them as</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> projections in the subquery, in order to refer to them in the outer filter using aliases. Also,</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> otherwise we won&#39;t be able to refer to it in the outer query&#39;s WHERE clause.</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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 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;qualify&quot;</span><span class="p">):</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">taken</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-94"><a href="#L-94"><span class="linenos"> 94</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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="p">,</span> <span class="s2">&quot;_c&quot;</span><span class="p">)</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">select</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">alias_</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">alias</span><span class="p">))</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">taken</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><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="n">outer_selects</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span> <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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">qualify_filters</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;qualify&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">this</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">select_candidates</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <span class="k">else</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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">expr</span> <span class="ow">in</span> <span class="n">qualify_filters</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">select_candidates</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="nb">isinstance</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</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 class="s2">&quot;_w&quot;</span><span class="p">)</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">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-108"><a href="#L-108"><span class="linenos">108</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">alias</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 class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</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">Qualify</span><span class="p">):</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">qualify_filters</span> <span class="o">=</span> <span class="n">column</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">expr</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">named_selects</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">select</span><span class="p">(</span><span class="n">expr</span><span class="o">.</span><span class="n">copy</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-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">return</span> <span class="n">outer_selects</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_t&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">qualify_filters</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">expression</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="k">def</span> <span class="nf">eliminate_qualify</span><span 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-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.</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="sd"> The idea behind this transformation can be seen in Snowflake&#39;s documentation for QUALIFY:</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> https://docs.snowflake.com/en/sql-reference/constructs/qualify</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> Some dialects don&#39;t support window functions in the WHERE clause, so we need to include them as</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> projections in the subquery, in order to refer to them in the outer filter using aliases. Also,</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> otherwise we won&#39;t be able to refer to it in the outer query&#39;s WHERE clause.</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> &quot;&quot;&quot;</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">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="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;qualify&quot;</span><span class="p">):</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">taken</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-96"><a href="#L-96"><span class="linenos"> 96</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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="p">,</span> <span class="s2">&quot;_c&quot;</span><span class="p">)</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">select</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">alias_</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">alias</span><span class="p">))</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">taken</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</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="n">outer_selects</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span> <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-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">qualify_filters</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;qualify&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">this</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">select_candidates</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <span class="k">else</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">qualify_filters</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">select_candidates</span><span class="p">):</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</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 class="s2">&quot;_w&quot;</span><span class="p">)</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">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-110"><a href="#L-110"><span class="linenos">110</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">alias</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="nb">isinstance</span><span class="p">(</span><span class="n">expr</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">Qualify</span><span class="p">):</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">qualify_filters</span> <span class="o">=</span> <span class="n">column</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">expr</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">expr</span><span class="o">.</span><span class="n">copy</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-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">return</span> <span class="n">expression</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="n">outer_selects</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_t&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">qualify_filters</span><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><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="k">def</span> <span class="nf">remove_precision_parameterized_types</span><span 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-123"><a href="#L-123"><span class="linenos">123</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <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="ow">not</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">DataTypeSize</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">return</span> <span class="n">expression</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="k">def</span> <span class="nf">remove_precision_parameterized_types</span><span 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-125"><a href="#L-125"><span class="linenos">125</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a><span class="sd"> Some dialects only allow the precision for parameterized types to be defined in the DDL and not in</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <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="ow">not</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">DataTypeParam</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><span id="L-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-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">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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-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">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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-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">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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
+</span><span id="L-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">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-138"><a href="#L-138"><span class="linenos">138</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-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">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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</span></a>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-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">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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">&quot;laterals&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">Lateral</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">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-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</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-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="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">expression</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</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-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">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-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="s2">&quot;laterals&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">Lateral</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">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-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</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-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><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="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-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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><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">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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</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">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-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="s2">&quot;&quot;</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</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-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">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-178"><a href="#L-178"><span class="linenos">178</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-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">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-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><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">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-183"><a href="#L-183"><span class="linenos">183</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-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">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-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</span></a>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="c1"># This ensures that we won&#39;t use [POS]EXPLODE&#39;s argument as a new selection</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</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-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_arg</span><span class="o">.</span><span class="n">output_name</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="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-193"><a href="#L-193"><span class="linenos">193</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-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">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-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="n">is_posexplode</span><span class="p">:</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</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-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">pos_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">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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="k">else</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><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">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-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="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-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">expression</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">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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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><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">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-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</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">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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</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">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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><span id="L-176"><a href="#L-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="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-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="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-185"><a href="#L-185"><span class="linenos">185</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-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">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-188"><a href="#L-188"><span class="linenos">188</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-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="c1"># This ensures that we won&#39;t use [POS]EXPLODE&#39;s argument as a new selection</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-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">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-195"><a href="#L-195"><span class="linenos">195</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-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">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-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="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</span></a>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</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-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">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-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">else</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">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-217"><a href="#L-217"><span class="linenos">217</span></a>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</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-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">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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">else</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">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-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><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</span><span 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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</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">WithinGroup</span><span class="p">)</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</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="n">quantile</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-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</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">Ordered</span><span class="p">))</span><span class="o">.</span><span class="n">this</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 class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</span><span class="p">))</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 class="k">return</span> <span class="n">expression</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</span><span 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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</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">WithinGroup</span><span class="p">)</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</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="n">quantile</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-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</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">Ordered</span><span class="p">))</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="n">expression</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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</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><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</span><span 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-235"><a href="#L-235"><span class="linenos">235</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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">&quot;_c_&quot;</span><span class="p">)</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">cte</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-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</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">columns</span><span class="p">:</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</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">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">cte</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">set</span><span class="p">(</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">,</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <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">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</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><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</span><span 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-237"><a href="#L-237"><span class="linenos">237</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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">&quot;_c_&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">for</span> <span class="n">cte</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-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</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">columns</span><span class="p">:</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</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">cte</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">set</span><span class="p">(</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;columns&quot;</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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</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><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</span><span 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-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="ow">and</span> <span class="n">expression</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;epoch&quot;</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="ow">and</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="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><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 class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;1970-01-01 00:00:00&quot;</span><span class="p">))</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</span><span 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-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="ow">and</span> <span class="n">expression</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;epoch&quot;</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="ow">and</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="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><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="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;1970-01-01 00:00:00&quot;</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><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="sd"> expression to SQL, using either the &quot;_sql&quot; method corresponding to the resulting expression,</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</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="sd"> Args:</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</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="sd"> Returns:</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd"> Function that can be used as a generator transform.</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd"> &quot;&quot;&quot;</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">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-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</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">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-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</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-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">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">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="kc">None</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">_sql_handler</span><span class="p">:</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</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="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</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 class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="c1"># Ensures we don&#39;t enter an infinite loop. This can happen when the original expression</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="c1"># has the same type as the final expression and there&#39;s no _sql method available for it,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="c1"># because then it&#39;d re-enter _to_sql.</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="sa">f</span><span class="s2">&quot;Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed.&quot;</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">return</span> <span class="n">transforms_handler</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-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</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-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"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> expression to SQL, using either the &quot;_sql&quot; method corresponding to the resulting expression,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</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="sd"> Args:</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</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="sd"> Returns:</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="sd"> Function that can be used as a generator transform.</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a><span class="sd"> &quot;&quot;&quot;</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="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-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</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="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-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-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="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">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="kc">None</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="n">_sql_handler</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="n">_sql_handler</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="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="c1"># Ensures we don&#39;t enter an infinite loop. This can happen when the original expression</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="c1"># has the same type as the final expression and there&#39;s no _sql method available for it,</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="c1"># because then it&#39;d re-enter _to_sql.</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="sa">f</span><span class="s2">&quot;Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed.&quot;</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="p">)</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="n">transforms_handler</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-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">return</span> <span class="n">_to_sql</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
</span></pre></div>
@@ -500,13 +502,15 @@
</span><span id="eliminate_distinct_on-69"><a href="#eliminate_distinct_on-69"><span class="linenos">69</span></a>
</span><span id="eliminate_distinct_on-70"><a href="#eliminate_distinct_on-70"><span class="linenos">70</span></a> <span class="k">if</span> <span class="n">order</span><span class="p">:</span>
</span><span id="eliminate_distinct_on-71"><a href="#eliminate_distinct_on-71"><span class="linenos">71</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;order&quot;</span><span class="p">,</span> <span class="n">order</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="eliminate_distinct_on-72"><a href="#eliminate_distinct_on-72"><span class="linenos">72</span></a>
-</span><span id="eliminate_distinct_on-73"><a href="#eliminate_distinct_on-73"><span class="linenos">73</span></a> <span class="n">window</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">window</span><span class="p">,</span> <span class="n">row_number</span><span class="p">)</span>
-</span><span id="eliminate_distinct_on-74"><a href="#eliminate_distinct_on-74"><span class="linenos">74</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">window</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="eliminate_distinct_on-75"><a href="#eliminate_distinct_on-75"><span class="linenos">75</span></a>
-</span><span id="eliminate_distinct_on-76"><a href="#eliminate_distinct_on-76"><span class="linenos">76</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">outer_selects</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">row_number</span><span class="si">}</span><span class="s1">&quot; = 1&#39;</span><span class="p">)</span>
+</span><span id="eliminate_distinct_on-72"><a href="#eliminate_distinct_on-72"><span class="linenos">72</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="eliminate_distinct_on-73"><a href="#eliminate_distinct_on-73"><span class="linenos">73</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;order&quot;</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">distinct_cols</span><span class="p">]))</span>
+</span><span id="eliminate_distinct_on-74"><a href="#eliminate_distinct_on-74"><span class="linenos">74</span></a>
+</span><span id="eliminate_distinct_on-75"><a href="#eliminate_distinct_on-75"><span class="linenos">75</span></a> <span class="n">window</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">window</span><span class="p">,</span> <span class="n">row_number</span><span class="p">)</span>
+</span><span id="eliminate_distinct_on-76"><a href="#eliminate_distinct_on-76"><span class="linenos">76</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">window</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="eliminate_distinct_on-77"><a href="#eliminate_distinct_on-77"><span class="linenos">77</span></a>
-</span><span id="eliminate_distinct_on-78"><a href="#eliminate_distinct_on-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="eliminate_distinct_on-78"><a href="#eliminate_distinct_on-78"><span class="linenos">78</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">outer_selects</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">row_number</span><span class="si">}</span><span class="s1">&quot; = 1&#39;</span><span class="p">)</span>
+</span><span id="eliminate_distinct_on-79"><a href="#eliminate_distinct_on-79"><span class="linenos">79</span></a>
+</span><span id="eliminate_distinct_on-80"><a href="#eliminate_distinct_on-80"><span class="linenos">80</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -540,46 +544,46 @@
</div>
<a class="headerlink" href="#eliminate_qualify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_qualify-81"><a href="#eliminate_qualify-81"><span class="linenos"> 81</span></a><span class="k">def</span> <span class="nf">eliminate_qualify</span><span 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="eliminate_qualify-82"><a href="#eliminate_qualify-82"><span class="linenos"> 82</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="eliminate_qualify-83"><a href="#eliminate_qualify-83"><span class="linenos"> 83</span></a><span class="sd"> Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.</span>
-</span><span id="eliminate_qualify-84"><a href="#eliminate_qualify-84"><span class="linenos"> 84</span></a>
-</span><span id="eliminate_qualify-85"><a href="#eliminate_qualify-85"><span class="linenos"> 85</span></a><span class="sd"> The idea behind this transformation can be seen in Snowflake&#39;s documentation for QUALIFY:</span>
-</span><span id="eliminate_qualify-86"><a href="#eliminate_qualify-86"><span class="linenos"> 86</span></a><span class="sd"> https://docs.snowflake.com/en/sql-reference/constructs/qualify</span>
-</span><span id="eliminate_qualify-87"><a href="#eliminate_qualify-87"><span class="linenos"> 87</span></a>
-</span><span id="eliminate_qualify-88"><a href="#eliminate_qualify-88"><span class="linenos"> 88</span></a><span class="sd"> Some dialects don&#39;t support window functions in the WHERE clause, so we need to include them as</span>
-</span><span id="eliminate_qualify-89"><a href="#eliminate_qualify-89"><span class="linenos"> 89</span></a><span class="sd"> projections in the subquery, in order to refer to them in the outer filter using aliases. Also,</span>
-</span><span id="eliminate_qualify-90"><a href="#eliminate_qualify-90"><span class="linenos"> 90</span></a><span class="sd"> if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,</span>
-</span><span id="eliminate_qualify-91"><a href="#eliminate_qualify-91"><span class="linenos"> 91</span></a><span class="sd"> otherwise we won&#39;t be able to refer to it in the outer query&#39;s WHERE clause.</span>
-</span><span id="eliminate_qualify-92"><a href="#eliminate_qualify-92"><span class="linenos"> 92</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="eliminate_qualify-93"><a href="#eliminate_qualify-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 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;qualify&quot;</span><span class="p">):</span>
-</span><span id="eliminate_qualify-94"><a href="#eliminate_qualify-94"><span class="linenos"> 94</span></a> <span class="n">taken</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="eliminate_qualify-95"><a href="#eliminate_qualify-95"><span class="linenos"> 95</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="eliminate_qualify-96"><a href="#eliminate_qualify-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span>
-</span><span id="eliminate_qualify-97"><a href="#eliminate_qualify-97"><span class="linenos"> 97</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="p">,</span> <span class="s2">&quot;_c&quot;</span><span class="p">)</span>
-</span><span id="eliminate_qualify-98"><a href="#eliminate_qualify-98"><span class="linenos"> 98</span></a> <span class="n">select</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">alias_</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">alias</span><span class="p">))</span>
-</span><span id="eliminate_qualify-99"><a href="#eliminate_qualify-99"><span class="linenos"> 99</span></a> <span class="n">taken</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="eliminate_qualify-100"><a href="#eliminate_qualify-100"><span class="linenos">100</span></a>
-</span><span id="eliminate_qualify-101"><a href="#eliminate_qualify-101"><span class="linenos">101</span></a> <span class="n">outer_selects</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span> <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="eliminate_qualify-102"><a href="#eliminate_qualify-102"><span class="linenos">102</span></a> <span class="n">qualify_filters</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;qualify&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">this</span>
-</span><span id="eliminate_qualify-103"><a href="#eliminate_qualify-103"><span class="linenos">103</span></a>
-</span><span id="eliminate_qualify-104"><a href="#eliminate_qualify-104"><span class="linenos">104</span></a> <span class="n">select_candidates</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <span class="k">else</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
-</span><span id="eliminate_qualify-105"><a href="#eliminate_qualify-105"><span class="linenos">105</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">qualify_filters</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">select_candidates</span><span class="p">):</span>
-</span><span id="eliminate_qualify-106"><a href="#eliminate_qualify-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
-</span><span id="eliminate_qualify-107"><a href="#eliminate_qualify-107"><span class="linenos">107</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</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 class="s2">&quot;_w&quot;</span><span class="p">)</span>
-</span><span id="eliminate_qualify-108"><a href="#eliminate_qualify-108"><span class="linenos">108</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">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="eliminate_qualify-109"><a href="#eliminate_qualify-109"><span class="linenos">109</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">alias</span><span class="p">)</span>
-</span><span id="eliminate_qualify-110"><a href="#eliminate_qualify-110"><span class="linenos">110</span></a>
-</span><span id="eliminate_qualify-111"><a href="#eliminate_qualify-111"><span class="linenos">111</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</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">Qualify</span><span class="p">):</span>
-</span><span id="eliminate_qualify-112"><a href="#eliminate_qualify-112"><span class="linenos">112</span></a> <span class="n">qualify_filters</span> <span class="o">=</span> <span class="n">column</span>
-</span><span id="eliminate_qualify-113"><a href="#eliminate_qualify-113"><span class="linenos">113</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="eliminate_qualify-114"><a href="#eliminate_qualify-114"><span class="linenos">114</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
-</span><span id="eliminate_qualify-115"><a href="#eliminate_qualify-115"><span class="linenos">115</span></a> <span class="k">elif</span> <span class="n">expr</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
-</span><span id="eliminate_qualify-116"><a href="#eliminate_qualify-116"><span class="linenos">116</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">expr</span><span class="o">.</span><span class="n">copy</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="eliminate_qualify-117"><a href="#eliminate_qualify-117"><span class="linenos">117</span></a>
-</span><span id="eliminate_qualify-118"><a href="#eliminate_qualify-118"><span class="linenos">118</span></a> <span class="k">return</span> <span class="n">outer_selects</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_t&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">qualify_filters</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_qualify-83"><a href="#eliminate_qualify-83"><span class="linenos"> 83</span></a><span class="k">def</span> <span class="nf">eliminate_qualify</span><span 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="eliminate_qualify-84"><a href="#eliminate_qualify-84"><span class="linenos"> 84</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="eliminate_qualify-85"><a href="#eliminate_qualify-85"><span class="linenos"> 85</span></a><span class="sd"> Convert SELECT statements that contain the QUALIFY clause into subqueries, filtered equivalently.</span>
+</span><span id="eliminate_qualify-86"><a href="#eliminate_qualify-86"><span class="linenos"> 86</span></a>
+</span><span id="eliminate_qualify-87"><a href="#eliminate_qualify-87"><span class="linenos"> 87</span></a><span class="sd"> The idea behind this transformation can be seen in Snowflake&#39;s documentation for QUALIFY:</span>
+</span><span id="eliminate_qualify-88"><a href="#eliminate_qualify-88"><span class="linenos"> 88</span></a><span class="sd"> https://docs.snowflake.com/en/sql-reference/constructs/qualify</span>
+</span><span id="eliminate_qualify-89"><a href="#eliminate_qualify-89"><span class="linenos"> 89</span></a>
+</span><span id="eliminate_qualify-90"><a href="#eliminate_qualify-90"><span class="linenos"> 90</span></a><span class="sd"> Some dialects don&#39;t support window functions in the WHERE clause, so we need to include them as</span>
+</span><span id="eliminate_qualify-91"><a href="#eliminate_qualify-91"><span class="linenos"> 91</span></a><span class="sd"> projections in the subquery, in order to refer to them in the outer filter using aliases. Also,</span>
+</span><span id="eliminate_qualify-92"><a href="#eliminate_qualify-92"><span class="linenos"> 92</span></a><span class="sd"> if a column is referenced in the QUALIFY clause but is not selected, we need to include it too,</span>
+</span><span id="eliminate_qualify-93"><a href="#eliminate_qualify-93"><span class="linenos"> 93</span></a><span class="sd"> otherwise we won&#39;t be able to refer to it in the outer query&#39;s WHERE clause.</span>
+</span><span id="eliminate_qualify-94"><a href="#eliminate_qualify-94"><span class="linenos"> 94</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="eliminate_qualify-95"><a href="#eliminate_qualify-95"><span class="linenos"> 95</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 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;qualify&quot;</span><span class="p">):</span>
+</span><span id="eliminate_qualify-96"><a href="#eliminate_qualify-96"><span class="linenos"> 96</span></a> <span class="n">taken</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="eliminate_qualify-97"><a href="#eliminate_qualify-97"><span class="linenos"> 97</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="eliminate_qualify-98"><a href="#eliminate_qualify-98"><span class="linenos"> 98</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span>
+</span><span id="eliminate_qualify-99"><a href="#eliminate_qualify-99"><span class="linenos"> 99</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken</span><span class="p">,</span> <span class="s2">&quot;_c&quot;</span><span class="p">)</span>
+</span><span id="eliminate_qualify-100"><a href="#eliminate_qualify-100"><span class="linenos">100</span></a> <span class="n">select</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">alias_</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">alias</span><span class="p">))</span>
+</span><span id="eliminate_qualify-101"><a href="#eliminate_qualify-101"><span class="linenos">101</span></a> <span class="n">taken</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="eliminate_qualify-102"><a href="#eliminate_qualify-102"><span class="linenos">102</span></a>
+</span><span id="eliminate_qualify-103"><a href="#eliminate_qualify-103"><span class="linenos">103</span></a> <span class="n">outer_selects</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span> <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="eliminate_qualify-104"><a href="#eliminate_qualify-104"><span class="linenos">104</span></a> <span class="n">qualify_filters</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;qualify&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">.</span><span class="n">this</span>
+</span><span id="eliminate_qualify-105"><a href="#eliminate_qualify-105"><span class="linenos">105</span></a>
+</span><span id="eliminate_qualify-106"><a href="#eliminate_qualify-106"><span class="linenos">106</span></a> <span class="n">select_candidates</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <span class="k">else</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
+</span><span id="eliminate_qualify-107"><a href="#eliminate_qualify-107"><span class="linenos">107</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">qualify_filters</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">select_candidates</span><span class="p">):</span>
+</span><span id="eliminate_qualify-108"><a href="#eliminate_qualify-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
+</span><span id="eliminate_qualify-109"><a href="#eliminate_qualify-109"><span class="linenos">109</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">find_new_name</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 class="s2">&quot;_w&quot;</span><span class="p">)</span>
+</span><span id="eliminate_qualify-110"><a href="#eliminate_qualify-110"><span class="linenos">110</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">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="eliminate_qualify-111"><a href="#eliminate_qualify-111"><span class="linenos">111</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">alias</span><span class="p">)</span>
+</span><span id="eliminate_qualify-112"><a href="#eliminate_qualify-112"><span class="linenos">112</span></a>
+</span><span id="eliminate_qualify-113"><a href="#eliminate_qualify-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</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">Qualify</span><span class="p">):</span>
+</span><span id="eliminate_qualify-114"><a href="#eliminate_qualify-114"><span class="linenos">114</span></a> <span class="n">qualify_filters</span> <span class="o">=</span> <span class="n">column</span>
+</span><span id="eliminate_qualify-115"><a href="#eliminate_qualify-115"><span class="linenos">115</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="eliminate_qualify-116"><a href="#eliminate_qualify-116"><span class="linenos">116</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
+</span><span id="eliminate_qualify-117"><a href="#eliminate_qualify-117"><span class="linenos">117</span></a> <span class="k">elif</span> <span class="n">expr</span><span class="o">.</span><span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
+</span><span id="eliminate_qualify-118"><a href="#eliminate_qualify-118"><span class="linenos">118</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">expr</span><span class="o">.</span><span class="n">copy</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="eliminate_qualify-119"><a href="#eliminate_qualify-119"><span class="linenos">119</span></a>
-</span><span id="eliminate_qualify-120"><a href="#eliminate_qualify-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="eliminate_qualify-120"><a href="#eliminate_qualify-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">outer_selects</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_t&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">qualify_filters</span><span class="p">)</span>
+</span><span id="eliminate_qualify-121"><a href="#eliminate_qualify-121"><span class="linenos">121</span></a>
+</span><span id="eliminate_qualify-122"><a href="#eliminate_qualify-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -607,17 +611,17 @@ otherwise we won't be able to refer to it in the outer query's WHERE clause.</p>
</div>
<a class="headerlink" href="#remove_precision_parameterized_types"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="remove_precision_parameterized_types-123"><a href="#remove_precision_parameterized_types-123"><span class="linenos">123</span></a><span class="k">def</span> <span class="nf">remove_precision_parameterized_types</span><span 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_precision_parameterized_types-124"><a href="#remove_precision_parameterized_types-124"><span class="linenos">124</span></a><span class="w"> </span><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="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-126"><a href="#remove_precision_parameterized_types-126"><span class="linenos">126</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-127"><a href="#remove_precision_parameterized_types-127"><span class="linenos">127</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="remove_precision_parameterized_types-128"><a href="#remove_precision_parameterized_types-128"><span class="linenos">128</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-129"><a href="#remove_precision_parameterized_types-129"><span class="linenos">129</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</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="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="ow">not</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">DataTypeSize</span><span class="p">)]</span>
-</span><span id="remove_precision_parameterized_types-131"><a href="#remove_precision_parameterized_types-131"><span class="linenos">131</span></a> <span class="p">)</span>
-</span><span id="remove_precision_parameterized_types-132"><a href="#remove_precision_parameterized_types-132"><span class="linenos">132</span></a>
-</span><span id="remove_precision_parameterized_types-133"><a href="#remove_precision_parameterized_types-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><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">def</span> <span class="nf">remove_precision_parameterized_types</span><span 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_precision_parameterized_types-126"><a href="#remove_precision_parameterized_types-126"><span class="linenos">126</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="remove_precision_parameterized_types-127"><a href="#remove_precision_parameterized_types-127"><span class="linenos">127</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-128"><a href="#remove_precision_parameterized_types-128"><span class="linenos">128</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-129"><a href="#remove_precision_parameterized_types-129"><span class="linenos">129</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="remove_precision_parameterized_types-130"><a href="#remove_precision_parameterized_types-130"><span class="linenos">130</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-131"><a href="#remove_precision_parameterized_types-131"><span class="linenos">131</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="remove_precision_parameterized_types-132"><a href="#remove_precision_parameterized_types-132"><span class="linenos">132</span></a> <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="ow">not</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">DataTypeParam</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><span id="remove_precision_parameterized_types-135"><a href="#remove_precision_parameterized_types-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -638,29 +642,29 @@ 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-136"><a href="#unnest_to_explode-136"><span class="linenos">136</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-137"><a href="#unnest_to_explode-137"><span class="linenos">137</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-138"><a href="#unnest_to_explode-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="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-139"><a href="#unnest_to_explode-139"><span class="linenos">139</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-140"><a href="#unnest_to_explode-140"><span class="linenos">140</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-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">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-143"><a href="#unnest_to_explode-143"><span class="linenos">143</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-144"><a href="#unnest_to_explode-144"><span class="linenos">144</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-145"><a href="#unnest_to_explode-145"><span class="linenos">145</span></a>
-</span><span id="unnest_to_explode-146"><a href="#unnest_to_explode-146"><span class="linenos">146</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="unnest_to_explode-138"><a href="#unnest_to_explode-138"><span class="linenos">138</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-139"><a href="#unnest_to_explode-139"><span class="linenos">139</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-140"><a href="#unnest_to_explode-140"><span class="linenos">140</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-141"><a href="#unnest_to_explode-141"><span class="linenos">141</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-142"><a href="#unnest_to_explode-142"><span class="linenos">142</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-143"><a href="#unnest_to_explode-143"><span class="linenos">143</span></a>
+</span><span id="unnest_to_explode-144"><a href="#unnest_to_explode-144"><span class="linenos">144</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-145"><a href="#unnest_to_explode-145"><span class="linenos">145</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-146"><a href="#unnest_to_explode-146"><span class="linenos">146</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-147"><a href="#unnest_to_explode-147"><span class="linenos">147</span></a>
-</span><span id="unnest_to_explode-148"><a href="#unnest_to_explode-148"><span class="linenos">148</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-149"><a href="#unnest_to_explode-149"><span class="linenos">149</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-150"><a href="#unnest_to_explode-150"><span class="linenos">150</span></a> <span class="s2">&quot;laterals&quot;</span><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="n">exp</span><span class="o">.</span><span class="n">Lateral</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 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-153"><a href="#unnest_to_explode-153"><span class="linenos">153</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-154"><a href="#unnest_to_explode-154"><span class="linenos">154</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-155"><a href="#unnest_to_explode-155"><span class="linenos">155</span></a> <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="p">)</span>
-</span><span id="unnest_to_explode-157"><a href="#unnest_to_explode-157"><span class="linenos">157</span></a>
-</span><span id="unnest_to_explode-158"><a href="#unnest_to_explode-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="unnest_to_explode-148"><a href="#unnest_to_explode-148"><span class="linenos">148</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-149"><a href="#unnest_to_explode-149"><span class="linenos">149</span></a>
+</span><span id="unnest_to_explode-150"><a href="#unnest_to_explode-150"><span class="linenos">150</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-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">append</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 class="s2">&quot;laterals&quot;</span><span class="p">,</span>
+</span><span id="unnest_to_explode-153"><a href="#unnest_to_explode-153"><span class="linenos">153</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-154"><a href="#unnest_to_explode-154"><span class="linenos">154</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-155"><a href="#unnest_to_explode-155"><span class="linenos">155</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-156"><a href="#unnest_to_explode-156"><span class="linenos">156</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-157"><a href="#unnest_to_explode-157"><span class="linenos">157</span></a> <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="p">)</span>
+</span><span id="unnest_to_explode-159"><a href="#unnest_to_explode-159"><span class="linenos">159</span></a>
+</span><span id="unnest_to_explode-160"><a href="#unnest_to_explode-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -680,65 +684,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-161"><a href="#explode_to_unnest-161"><span class="linenos">161</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-162"><a href="#explode_to_unnest-162"><span class="linenos">162</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-163"><a href="#explode_to_unnest-163"><span class="linenos">163</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-164"><a href="#explode_to_unnest-164"><span class="linenos">164</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><span id="explode_to_unnest-165"><a href="#explode_to_unnest-165"><span class="linenos">165</span></a>
-</span><span id="explode_to_unnest-166"><a href="#explode_to_unnest-166"><span class="linenos">166</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-167"><a href="#explode_to_unnest-167"><span class="linenos">167</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</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><span id="explode_to_unnest-169"><a href="#explode_to_unnest-169"><span class="linenos">169</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-170"><a href="#explode_to_unnest-170"><span class="linenos">170</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
-</span><span id="explode_to_unnest-171"><a href="#explode_to_unnest-171"><span class="linenos">171</span></a>
-</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="s2">&quot;&quot;</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="s2">&quot;&quot;</span>
-</span><span id="explode_to_unnest-174"><a href="#explode_to_unnest-174"><span class="linenos">174</span></a>
-</span><span id="explode_to_unnest-175"><a href="#explode_to_unnest-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="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="explode_to_unnest-176"><a href="#explode_to_unnest-176"><span class="linenos">176</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-177"><a href="#explode_to_unnest-177"><span class="linenos">177</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-178"><a href="#explode_to_unnest-178"><span class="linenos">178</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-179"><a href="#explode_to_unnest-179"><span class="linenos">179</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-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">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-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><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">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-184"><a href="#explode_to_unnest-184"><span class="linenos">184</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-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">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-187"><a href="#explode_to_unnest-187"><span class="linenos">187</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-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="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-190"><a href="#explode_to_unnest-190"><span class="linenos">190</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-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_arg</span><span class="o">.</span><span class="n">output_name</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="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-194"><a href="#explode_to_unnest-194"><span class="linenos">194</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-195"><a href="#explode_to_unnest-195"><span class="linenos">195</span></a>
-</span><span id="explode_to_unnest-196"><a href="#explode_to_unnest-196"><span class="linenos">196</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-197"><a href="#explode_to_unnest-197"><span class="linenos">197</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-198"><a href="#explode_to_unnest-198"><span class="linenos">198</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-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="n">is_posexplode</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">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-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">pos_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">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-206"><a href="#explode_to_unnest-206"><span class="linenos">206</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-207"><a href="#explode_to_unnest-207"><span class="linenos">207</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-208"><a href="#explode_to_unnest-208"><span class="linenos">208</span></a> <span class="k">else</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><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">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-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="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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="explode_to_unnest-163"><a href="#explode_to_unnest-163"><span class="linenos">163</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-164"><a href="#explode_to_unnest-164"><span class="linenos">164</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-165"><a href="#explode_to_unnest-165"><span class="linenos">165</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-166"><a href="#explode_to_unnest-166"><span class="linenos">166</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><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="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-169"><a href="#explode_to_unnest-169"><span class="linenos">169</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</span><span class="p">}</span>
+</span><span id="explode_to_unnest-170"><a href="#explode_to_unnest-170"><span class="linenos">170</span></a>
+</span><span id="explode_to_unnest-171"><a href="#explode_to_unnest-171"><span class="linenos">171</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-172"><a href="#explode_to_unnest-172"><span class="linenos">172</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
+</span><span id="explode_to_unnest-173"><a href="#explode_to_unnest-173"><span class="linenos">173</span></a>
+</span><span id="explode_to_unnest-174"><a href="#explode_to_unnest-174"><span class="linenos">174</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="explode_to_unnest-175"><a href="#explode_to_unnest-175"><span class="linenos">175</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><span id="explode_to_unnest-177"><a href="#explode_to_unnest-177"><span class="linenos">177</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-178"><a href="#explode_to_unnest-178"><span class="linenos">178</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-179"><a href="#explode_to_unnest-179"><span class="linenos">179</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-180"><a href="#explode_to_unnest-180"><span class="linenos">180</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-181"><a href="#explode_to_unnest-181"><span class="linenos">181</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-182"><a href="#explode_to_unnest-182"><span class="linenos">182</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-183"><a href="#explode_to_unnest-183"><span class="linenos">183</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-184"><a href="#explode_to_unnest-184"><span class="linenos">184</span></a>
+</span><span id="explode_to_unnest-185"><a href="#explode_to_unnest-185"><span class="linenos">185</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-186"><a href="#explode_to_unnest-186"><span class="linenos">186</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-187"><a href="#explode_to_unnest-187"><span class="linenos">187</span></a>
+</span><span id="explode_to_unnest-188"><a href="#explode_to_unnest-188"><span class="linenos">188</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-189"><a href="#explode_to_unnest-189"><span class="linenos">189</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-190"><a href="#explode_to_unnest-190"><span class="linenos">190</span></a>
+</span><span id="explode_to_unnest-191"><a href="#explode_to_unnest-191"><span class="linenos">191</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-192"><a href="#explode_to_unnest-192"><span class="linenos">192</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-193"><a href="#explode_to_unnest-193"><span class="linenos">193</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-194"><a href="#explode_to_unnest-194"><span class="linenos">194</span></a>
+</span><span id="explode_to_unnest-195"><a href="#explode_to_unnest-195"><span class="linenos">195</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-196"><a href="#explode_to_unnest-196"><span class="linenos">196</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-197"><a href="#explode_to_unnest-197"><span class="linenos">197</span></a>
+</span><span id="explode_to_unnest-198"><a href="#explode_to_unnest-198"><span class="linenos">198</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-199"><a href="#explode_to_unnest-199"><span class="linenos">199</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-200"><a href="#explode_to_unnest-200"><span class="linenos">200</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-201"><a href="#explode_to_unnest-201"><span class="linenos">201</span></a>
+</span><span id="explode_to_unnest-202"><a href="#explode_to_unnest-202"><span class="linenos">202</span></a> <span class="k">if</span> <span class="n">is_posexplode</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">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-204"><a href="#explode_to_unnest-204"><span class="linenos">204</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-205"><a href="#explode_to_unnest-205"><span class="linenos">205</span></a>
+</span><span id="explode_to_unnest-206"><a href="#explode_to_unnest-206"><span class="linenos">206</span></a> <span class="k">if</span> <span class="n">is_posexplode</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 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-208"><a href="#explode_to_unnest-208"><span class="linenos">208</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-209"><a href="#explode_to_unnest-209"><span class="linenos">209</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-210"><a href="#explode_to_unnest-210"><span class="linenos">210</span></a> <span class="k">else</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">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-212"><a href="#explode_to_unnest-212"><span class="linenos">212</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-213"><a href="#explode_to_unnest-213"><span class="linenos">213</span></a>
-</span><span id="explode_to_unnest-214"><a href="#explode_to_unnest-214"><span class="linenos">214</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-215"><a href="#explode_to_unnest-215"><span class="linenos">215</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-216"><a href="#explode_to_unnest-216"><span class="linenos">216</span></a> <span class="k">else</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 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-218"><a href="#explode_to_unnest-218"><span class="linenos">218</span></a>
-</span><span id="explode_to_unnest-219"><a href="#explode_to_unnest-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="explode_to_unnest-214"><a href="#explode_to_unnest-214"><span class="linenos">214</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-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="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-217"><a href="#explode_to_unnest-217"><span class="linenos">217</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-218"><a href="#explode_to_unnest-218"><span class="linenos">218</span></a> <span class="k">else</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">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-220"><a href="#explode_to_unnest-220"><span class="linenos">220</span></a>
+</span><span id="explode_to_unnest-221"><a href="#explode_to_unnest-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -758,17 +762,17 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#remove_within_group_for_percentiles"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="remove_within_group_for_percentiles-222"><a href="#remove_within_group_for_percentiles-222"><span class="linenos">222</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</span><span 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_within_group_for_percentiles-223"><a href="#remove_within_group_for_percentiles-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="remove_within_group_for_percentiles-224"><a href="#remove_within_group_for_percentiles-224"><span class="linenos">224</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">WithinGroup</span><span class="p">)</span>
-</span><span id="remove_within_group_for_percentiles-225"><a href="#remove_within_group_for_percentiles-225"><span class="linenos">225</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
-</span><span id="remove_within_group_for_percentiles-226"><a href="#remove_within_group_for_percentiles-226"><span class="linenos">226</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span>
-</span><span id="remove_within_group_for_percentiles-227"><a href="#remove_within_group_for_percentiles-227"><span class="linenos">227</span></a> <span class="p">):</span>
-</span><span id="remove_within_group_for_percentiles-228"><a href="#remove_within_group_for_percentiles-228"><span class="linenos">228</span></a> <span class="n">quantile</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="remove_within_group_for_percentiles-229"><a href="#remove_within_group_for_percentiles-229"><span class="linenos">229</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</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">Ordered</span><span class="p">))</span><span class="o">.</span><span class="n">this</span>
-</span><span id="remove_within_group_for_percentiles-230"><a href="#remove_within_group_for_percentiles-230"><span class="linenos">230</span></a> <span class="k">return</span> <span class="n">expression</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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</span><span class="p">))</span>
-</span><span id="remove_within_group_for_percentiles-231"><a href="#remove_within_group_for_percentiles-231"><span class="linenos">231</span></a>
-</span><span id="remove_within_group_for_percentiles-232"><a href="#remove_within_group_for_percentiles-232"><span class="linenos">232</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="remove_within_group_for_percentiles-224"><a href="#remove_within_group_for_percentiles-224"><span class="linenos">224</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</span><span 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_within_group_for_percentiles-225"><a href="#remove_within_group_for_percentiles-225"><span class="linenos">225</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="remove_within_group_for_percentiles-226"><a href="#remove_within_group_for_percentiles-226"><span class="linenos">226</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">WithinGroup</span><span class="p">)</span>
+</span><span id="remove_within_group_for_percentiles-227"><a href="#remove_within_group_for_percentiles-227"><span class="linenos">227</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
+</span><span id="remove_within_group_for_percentiles-228"><a href="#remove_within_group_for_percentiles-228"><span class="linenos">228</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span>
+</span><span id="remove_within_group_for_percentiles-229"><a href="#remove_within_group_for_percentiles-229"><span class="linenos">229</span></a> <span class="p">):</span>
+</span><span id="remove_within_group_for_percentiles-230"><a href="#remove_within_group_for_percentiles-230"><span class="linenos">230</span></a> <span class="n">quantile</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="remove_within_group_for_percentiles-231"><a href="#remove_within_group_for_percentiles-231"><span class="linenos">231</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</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">Ordered</span><span class="p">))</span><span class="o">.</span><span class="n">this</span>
+</span><span id="remove_within_group_for_percentiles-232"><a href="#remove_within_group_for_percentiles-232"><span class="linenos">232</span></a> <span class="k">return</span> <span class="n">expression</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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</span><span class="p">))</span>
+</span><span id="remove_within_group_for_percentiles-233"><a href="#remove_within_group_for_percentiles-233"><span class="linenos">233</span></a>
+</span><span id="remove_within_group_for_percentiles-234"><a href="#remove_within_group_for_percentiles-234"><span class="linenos">234</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -786,22 +790,22 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#add_recursive_cte_column_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="add_recursive_cte_column_names-235"><a href="#add_recursive_cte_column_names-235"><span class="linenos">235</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</span><span 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="add_recursive_cte_column_names-236"><a href="#add_recursive_cte_column_names-236"><span class="linenos">236</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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
-</span><span id="add_recursive_cte_column_names-237"><a href="#add_recursive_cte_column_names-237"><span class="linenos">237</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">&quot;_c_&quot;</span><span class="p">)</span>
-</span><span id="add_recursive_cte_column_names-238"><a href="#add_recursive_cte_column_names-238"><span class="linenos">238</span></a>
-</span><span id="add_recursive_cte_column_names-239"><a href="#add_recursive_cte_column_names-239"><span class="linenos">239</span></a> <span class="k">for</span> <span class="n">cte</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="add_recursive_cte_column_names-240"><a href="#add_recursive_cte_column_names-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</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">columns</span><span class="p">:</span>
-</span><span id="add_recursive_cte_column_names-241"><a href="#add_recursive_cte_column_names-241"><span class="linenos">241</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
-</span><span id="add_recursive_cte_column_names-242"><a href="#add_recursive_cte_column_names-242"><span class="linenos">242</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="add_recursive_cte_column_names-243"><a href="#add_recursive_cte_column_names-243"><span class="linenos">243</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
-</span><span id="add_recursive_cte_column_names-244"><a href="#add_recursive_cte_column_names-244"><span class="linenos">244</span></a>
-</span><span id="add_recursive_cte_column_names-245"><a href="#add_recursive_cte_column_names-245"><span class="linenos">245</span></a> <span class="n">cte</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">set</span><span class="p">(</span>
-</span><span id="add_recursive_cte_column_names-246"><a href="#add_recursive_cte_column_names-246"><span class="linenos">246</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">,</span>
-</span><span id="add_recursive_cte_column_names-247"><a href="#add_recursive_cte_column_names-247"><span class="linenos">247</span></a> <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">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span><span class="p">],</span>
-</span><span id="add_recursive_cte_column_names-248"><a href="#add_recursive_cte_column_names-248"><span class="linenos">248</span></a> <span class="p">)</span>
-</span><span id="add_recursive_cte_column_names-249"><a href="#add_recursive_cte_column_names-249"><span class="linenos">249</span></a>
-</span><span id="add_recursive_cte_column_names-250"><a href="#add_recursive_cte_column_names-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="add_recursive_cte_column_names-237"><a href="#add_recursive_cte_column_names-237"><span class="linenos">237</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</span><span 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="add_recursive_cte_column_names-238"><a href="#add_recursive_cte_column_names-238"><span class="linenos">238</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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
+</span><span id="add_recursive_cte_column_names-239"><a href="#add_recursive_cte_column_names-239"><span class="linenos">239</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">&quot;_c_&quot;</span><span class="p">)</span>
+</span><span id="add_recursive_cte_column_names-240"><a href="#add_recursive_cte_column_names-240"><span class="linenos">240</span></a>
+</span><span id="add_recursive_cte_column_names-241"><a href="#add_recursive_cte_column_names-241"><span class="linenos">241</span></a> <span class="k">for</span> <span class="n">cte</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="add_recursive_cte_column_names-242"><a href="#add_recursive_cte_column_names-242"><span class="linenos">242</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</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">columns</span><span class="p">:</span>
+</span><span id="add_recursive_cte_column_names-243"><a href="#add_recursive_cte_column_names-243"><span class="linenos">243</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
+</span><span id="add_recursive_cte_column_names-244"><a href="#add_recursive_cte_column_names-244"><span class="linenos">244</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="add_recursive_cte_column_names-245"><a href="#add_recursive_cte_column_names-245"><span class="linenos">245</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
+</span><span id="add_recursive_cte_column_names-246"><a href="#add_recursive_cte_column_names-246"><span class="linenos">246</span></a>
+</span><span id="add_recursive_cte_column_names-247"><a href="#add_recursive_cte_column_names-247"><span class="linenos">247</span></a> <span class="n">cte</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">set</span><span class="p">(</span>
+</span><span id="add_recursive_cte_column_names-248"><a href="#add_recursive_cte_column_names-248"><span class="linenos">248</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">,</span>
+</span><span id="add_recursive_cte_column_names-249"><a href="#add_recursive_cte_column_names-249"><span class="linenos">249</span></a> <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">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span><span class="p">],</span>
+</span><span id="add_recursive_cte_column_names-250"><a href="#add_recursive_cte_column_names-250"><span class="linenos">250</span></a> <span class="p">)</span>
+</span><span id="add_recursive_cte_column_names-251"><a href="#add_recursive_cte_column_names-251"><span class="linenos">251</span></a>
+</span><span id="add_recursive_cte_column_names-252"><a href="#add_recursive_cte_column_names-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -819,15 +823,15 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#epoch_cast_to_ts"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="epoch_cast_to_ts-253"><a href="#epoch_cast_to_ts-253"><span class="linenos">253</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</span><span 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="epoch_cast_to_ts-254"><a href="#epoch_cast_to_ts-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="epoch_cast_to_ts-255"><a href="#epoch_cast_to_ts-255"><span class="linenos">255</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
-</span><span id="epoch_cast_to_ts-256"><a href="#epoch_cast_to_ts-256"><span class="linenos">256</span></a> <span class="ow">and</span> <span class="n">expression</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;epoch&quot;</span>
-</span><span id="epoch_cast_to_ts-257"><a href="#epoch_cast_to_ts-257"><span class="linenos">257</span></a> <span class="ow">and</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="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><span id="epoch_cast_to_ts-258"><a href="#epoch_cast_to_ts-258"><span class="linenos">258</span></a> <span class="p">):</span>
-</span><span id="epoch_cast_to_ts-259"><a href="#epoch_cast_to_ts-259"><span class="linenos">259</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;1970-01-01 00:00:00&quot;</span><span class="p">))</span>
-</span><span id="epoch_cast_to_ts-260"><a href="#epoch_cast_to_ts-260"><span class="linenos">260</span></a>
-</span><span id="epoch_cast_to_ts-261"><a href="#epoch_cast_to_ts-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="epoch_cast_to_ts-255"><a href="#epoch_cast_to_ts-255"><span class="linenos">255</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</span><span 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="epoch_cast_to_ts-256"><a href="#epoch_cast_to_ts-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="epoch_cast_to_ts-257"><a href="#epoch_cast_to_ts-257"><span class="linenos">257</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
+</span><span id="epoch_cast_to_ts-258"><a href="#epoch_cast_to_ts-258"><span class="linenos">258</span></a> <span class="ow">and</span> <span class="n">expression</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;epoch&quot;</span>
+</span><span id="epoch_cast_to_ts-259"><a href="#epoch_cast_to_ts-259"><span class="linenos">259</span></a> <span class="ow">and</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="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><span id="epoch_cast_to_ts-260"><a href="#epoch_cast_to_ts-260"><span class="linenos">260</span></a> <span class="p">):</span>
+</span><span id="epoch_cast_to_ts-261"><a href="#epoch_cast_to_ts-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;1970-01-01 00:00:00&quot;</span><span class="p">))</span>
+</span><span id="epoch_cast_to_ts-262"><a href="#epoch_cast_to_ts-262"><span class="linenos">262</span></a>
+</span><span id="epoch_cast_to_ts-263"><a href="#epoch_cast_to_ts-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -845,47 +849,47 @@ 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-264"><a href="#preprocess-264"><span class="linenos">264</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
-</span><span id="preprocess-265"><a href="#preprocess-265"><span class="linenos">265</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-266"><a href="#preprocess-266"><span class="linenos">266</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-267"><a href="#preprocess-267"><span class="linenos">267</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="preprocess-268"><a href="#preprocess-268"><span class="linenos">268</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
-</span><span id="preprocess-269"><a href="#preprocess-269"><span class="linenos">269</span></a><span class="sd"> expression to SQL, using either the &quot;_sql&quot; method corresponding to the resulting expression,</span>
-</span><span id="preprocess-270"><a href="#preprocess-270"><span class="linenos">270</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
-</span><span id="preprocess-271"><a href="#preprocess-271"><span class="linenos">271</span></a>
-</span><span id="preprocess-272"><a href="#preprocess-272"><span class="linenos">272</span></a><span class="sd"> Args:</span>
-</span><span id="preprocess-273"><a href="#preprocess-273"><span class="linenos">273</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
-</span><span id="preprocess-274"><a href="#preprocess-274"><span class="linenos">274</span></a>
-</span><span id="preprocess-275"><a href="#preprocess-275"><span class="linenos">275</span></a><span class="sd"> Returns:</span>
-</span><span id="preprocess-276"><a href="#preprocess-276"><span class="linenos">276</span></a><span class="sd"> Function that can be used as a generator transform.</span>
-</span><span id="preprocess-277"><a href="#preprocess-277"><span class="linenos">277</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="preprocess-278"><a href="#preprocess-278"><span class="linenos">278</span></a>
-</span><span id="preprocess-279"><a href="#preprocess-279"><span class="linenos">279</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-280"><a href="#preprocess-280"><span class="linenos">280</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="preprocess-281"><a href="#preprocess-281"><span class="linenos">281</span></a>
-</span><span id="preprocess-282"><a href="#preprocess-282"><span class="linenos">282</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-283"><a href="#preprocess-283"><span class="linenos">283</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-284"><a href="#preprocess-284"><span class="linenos">284</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-285"><a href="#preprocess-285"><span class="linenos">285</span></a>
-</span><span id="preprocess-286"><a href="#preprocess-286"><span class="linenos">286</span></a> <span class="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">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="kc">None</span><span class="p">)</span>
-</span><span id="preprocess-287"><a href="#preprocess-287"><span class="linenos">287</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
-</span><span id="preprocess-288"><a href="#preprocess-288"><span class="linenos">288</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="preprocess-289"><a href="#preprocess-289"><span class="linenos">289</span></a>
-</span><span id="preprocess-290"><a href="#preprocess-290"><span class="linenos">290</span></a> <span class="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="preprocess-291"><a href="#preprocess-291"><span class="linenos">291</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
-</span><span id="preprocess-292"><a href="#preprocess-292"><span class="linenos">292</span></a> <span class="c1"># Ensures we don&#39;t enter an infinite loop. This can happen when the original expression</span>
-</span><span id="preprocess-293"><a href="#preprocess-293"><span class="linenos">293</span></a> <span class="c1"># has the same type as the final expression and there&#39;s no _sql method available for it,</span>
-</span><span id="preprocess-294"><a href="#preprocess-294"><span class="linenos">294</span></a> <span class="c1"># because then it&#39;d re-enter _to_sql.</span>
-</span><span id="preprocess-295"><a href="#preprocess-295"><span class="linenos">295</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="preprocess-296"><a href="#preprocess-296"><span class="linenos">296</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="preprocess-297"><a href="#preprocess-297"><span class="linenos">297</span></a> <span class="sa">f</span><span class="s2">&quot;Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed.&quot;</span>
-</span><span id="preprocess-298"><a href="#preprocess-298"><span class="linenos">298</span></a> <span class="p">)</span>
-</span><span id="preprocess-299"><a href="#preprocess-299"><span class="linenos">299</span></a>
-</span><span id="preprocess-300"><a href="#preprocess-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="n">transforms_handler</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="preprocess-266"><a href="#preprocess-266"><span class="linenos">266</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
+</span><span id="preprocess-267"><a href="#preprocess-267"><span class="linenos">267</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-268"><a href="#preprocess-268"><span class="linenos">268</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-269"><a href="#preprocess-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="preprocess-270"><a href="#preprocess-270"><span class="linenos">270</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
+</span><span id="preprocess-271"><a href="#preprocess-271"><span class="linenos">271</span></a><span class="sd"> expression to SQL, using either the &quot;_sql&quot; method corresponding to the resulting expression,</span>
+</span><span id="preprocess-272"><a href="#preprocess-272"><span class="linenos">272</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
+</span><span id="preprocess-273"><a href="#preprocess-273"><span class="linenos">273</span></a>
+</span><span id="preprocess-274"><a href="#preprocess-274"><span class="linenos">274</span></a><span class="sd"> Args:</span>
+</span><span id="preprocess-275"><a href="#preprocess-275"><span class="linenos">275</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
+</span><span id="preprocess-276"><a href="#preprocess-276"><span class="linenos">276</span></a>
+</span><span id="preprocess-277"><a href="#preprocess-277"><span class="linenos">277</span></a><span class="sd"> Returns:</span>
+</span><span id="preprocess-278"><a href="#preprocess-278"><span class="linenos">278</span></a><span class="sd"> Function that can be used as a generator transform.</span>
+</span><span id="preprocess-279"><a href="#preprocess-279"><span class="linenos">279</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="preprocess-280"><a href="#preprocess-280"><span class="linenos">280</span></a>
+</span><span id="preprocess-281"><a href="#preprocess-281"><span class="linenos">281</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-282"><a href="#preprocess-282"><span class="linenos">282</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="preprocess-283"><a href="#preprocess-283"><span class="linenos">283</span></a>
+</span><span id="preprocess-284"><a href="#preprocess-284"><span class="linenos">284</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-285"><a href="#preprocess-285"><span class="linenos">285</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-286"><a href="#preprocess-286"><span class="linenos">286</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-287"><a href="#preprocess-287"><span class="linenos">287</span></a>
+</span><span id="preprocess-288"><a href="#preprocess-288"><span class="linenos">288</span></a> <span class="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">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="kc">None</span><span class="p">)</span>
+</span><span id="preprocess-289"><a href="#preprocess-289"><span class="linenos">289</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
+</span><span id="preprocess-290"><a href="#preprocess-290"><span class="linenos">290</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="preprocess-291"><a href="#preprocess-291"><span class="linenos">291</span></a>
+</span><span id="preprocess-292"><a href="#preprocess-292"><span class="linenos">292</span></a> <span class="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="preprocess-293"><a href="#preprocess-293"><span class="linenos">293</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
+</span><span id="preprocess-294"><a href="#preprocess-294"><span class="linenos">294</span></a> <span class="c1"># Ensures we don&#39;t enter an infinite loop. This can happen when the original expression</span>
+</span><span id="preprocess-295"><a href="#preprocess-295"><span class="linenos">295</span></a> <span class="c1"># has the same type as the final expression and there&#39;s no _sql method available for it,</span>
+</span><span id="preprocess-296"><a href="#preprocess-296"><span class="linenos">296</span></a> <span class="c1"># because then it&#39;d re-enter _to_sql.</span>
+</span><span id="preprocess-297"><a href="#preprocess-297"><span class="linenos">297</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="preprocess-298"><a href="#preprocess-298"><span class="linenos">298</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="preprocess-299"><a href="#preprocess-299"><span class="linenos">299</span></a> <span class="sa">f</span><span class="s2">&quot;Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed.&quot;</span>
+</span><span id="preprocess-300"><a href="#preprocess-300"><span class="linenos">300</span></a> <span class="p">)</span>
</span><span id="preprocess-301"><a href="#preprocess-301"><span class="linenos">301</span></a>
-</span><span id="preprocess-302"><a href="#preprocess-302"><span class="linenos">302</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="preprocess-302"><a href="#preprocess-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="n">transforms_handler</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="preprocess-303"><a href="#preprocess-303"><span class="linenos">303</span></a>
-</span><span id="preprocess-304"><a href="#preprocess-304"><span class="linenos">304</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
+</span><span id="preprocess-304"><a href="#preprocess-304"><span class="linenos">304</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="preprocess-305"><a href="#preprocess-305"><span class="linenos">305</span></a>
+</span><span id="preprocess-306"><a href="#preprocess-306"><span class="linenos">306</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
</span></pre></div>